深度学习的激活函数 :sigmoid、tanh、ReLU 、Leaky Relu、RReLU、softsign 、softplus、GELU
深度学习的激活函数 :sigmoid、tanh、ReLU 、Leaky Relu、RReLU、softsign 、softplus、GELU
【 tensorflow中文文档:tensorflow 的激活函数有哪些】

激活函数可以分为两大类 :
- 饱和激活函数: sigmoid、 tanh
- 非饱和激活函数: ReLU 、Leaky Relu 、ELU【指数线性单元】、PReLU【参数化的ReLU 】、RReLU【随机ReLU】
相对于饱和激活函数,使用“非饱和激活函数”的优势在于两点:
1.首先,“非饱和激活函数”能解决深度神经网络【层数非常多!!】的“梯度消失”问题,浅层网络【三五层那种】才用sigmoid 作为激活函数。
2.其次,它能加快收敛速度。
目录
(2)tanh (双曲正切函数 ;Hyperbolic tangent function)
(3) relu (Rectified linear unit; 修正线性单元 )
(4)Leaky Relu (带泄漏单元的relu ) (5) RReLU(随机ReLU)
(6)softsign (7)softplus (8)Softmax
(1)sigmoid 函数 (以前最常用)

参数 α > 0 可控制其斜率。 sigmoid 将一个实值输入压缩至[0,1]的范围,也可用于二分类的输出层。
(2)tanh (双曲正切函数 ;Hyperbolic tangent function)

将 一个实值输入压缩至 [-1, 1]的范围,这类函数具有平滑和渐近性,并保持单调性.

(3) relu (Rectified linear unit; 修正线性单元 )
深度学习目前最常用的激活函数
- # Relu在tensorflow中的实现: 直接调用函数
- tf.nn.relu( features, name= None )
与Sigmoid/tanh函数相比,ReLu激活函数的优点是:
- 使用梯度下降(GD)法时,收敛速度更快
- 相比Relu只需要一个门限值,即可以得到激活值,计算速度更快
缺点是: Relu的输入值为负的时候,输出始终为0,其一阶导数也始终为0,这样会导致神经元不能更新参数,也就是神经元不学习了,这种现象叫做“Dead Neuron”。
为了解决Relu函数这个缺点,在Relu函数的负半区间引入一个泄露(Leaky)值,所以称为Leaky Relu函数。
(4)Leaky Relu (带泄漏单元的relu )
数学表达式: y = max(0, x) + leak*min(0,x)
与 ReLu 相比 ,leak 给所有负值赋予一个非零斜率, leak是一个很小的常数 ,这样保留了一些负轴的值,使得负轴的信息不会全部丢失)
leaky ReLU
- #leakyRelu在tennsorflow中的简单实现
- tf.maximum(leak * x, x),
比较高效的写法为:
- import tensorflow as tf
- def LeakyReLU(x,leak=0.2,name="LeakyReLU"):
- with tf.variable_scope(name):
- f1 = 0.5*(1 + leak)
- f2 = 0.5*(1 - leak)
- return f1*x+f2*tf.abs(x)
(5) RReLU(随机ReLU)
在训练时使用RReLU作为激活函数,则需要从均匀分布U(I,u)中随机抽取的一个数值 ,作为负值的斜率。
(6)softsign
数学表达式:
,导数:

(7)softplus
Softplus函数是Logistic-Sigmoid函数原函数。 ,加了1是为了保证非负性。Softplus可以看作是强制非负校正函数max(0,x)平滑版本。红色的即为ReLU。
(8)Softmax
用于多分类神经网络输出
(11)GELU :高斯误差线性单元
在这篇论文中,作者展示了几个使用GELU的神经网络优于使用ReLU作为激活的神经网络的实例。GELU也被用于BERT。
GELU、ReLU和LeakyReLU的函数
- def gelu(x):
- return 0.5 * x * (1 + math.tanh(math.sqrt(2 / math.pi) * (x + 0.044715 * math.pow(x, 3))))
- def relu(x):
- return max(x, 0)
- def lrelu(x):
- return max(0.01*x, x)

以下两个是以前使用的:
(9)阈值函数 、阶梯函数

相应的输出 为

(10)分段线性函数

它类似于一个放大系数为 1 的非线性放大器,当工作于线性区时它是一个线性组合器, 放大系数趋于无穷大时变成一个阈值单元。
3.Swish函数
Swish函数是一种自控门的激活函数,其定义:
Swish(x)=xσ(βx) Swish(x) = x\sigma(\beta x)
Swish(x)=xσ(βx)
其中,σ(⋅) \sigma(·)σ(⋅)函数是logistic函数,其值域在(−1,1) (-1,1)(−1,1),β \betaβ是一个参数。也就是说当σ(⋅) \sigma(·)σ(⋅)趋近于1的时候,其输出和x xx本身近似;当σ(⋅) \sigma(·)σ(⋅)趋近于0的时候,其输出趋近于0。
3、基于Gate mechanism的GLU、GTU 单元
介绍一下基于gate mechanism实现的,两个比较新颖的激活函数GTU和GLU。
GTU(Gated Tanh Unit)的表达式为:
f(X) = tanh(X*W+b) * O(X*V+c)
GLU(Gated Liner Unit)的表达式为:
f(X) = (X * W + b) * O(X * V + c)
分析GTU和GLU的组成结构可以发现:
Tanh激活单元:tanh(X*W+b),加上一个Sigmoid激活单元:O(X*V+c)构成的gate unit,就构成了GTU单元。
Relu激活单元:(X * W + b),加上一个Sigmoid激活单元:O(X * V + c)构成的gate unit,就构成了GLU单元。
原文链接:https://blog.csdn.net/lqfarmer/article/details/72676715
深度学习的激活函数 :sigmoid、tanh、ReLU 、Leaky Relu、RReLU、softsign 、softplus、GELU的更多相关文章
- 深度学习:激活函数的比较和优缺点,sigmoid,tanh,relu
https://blog.csdn.net/u011684265/article/details/78039280
- 机器学习、深度学习实战细节(batch norm、relu、dropout 等的相对顺序)
cost function,一般得到的是一个 scalar-value,标量值: 执行 SGD 时,是最终的 cost function 获得的 scalar-value,关于模型的参数得到的: 1. ...
- 激活函数Sigmoid、Tanh、ReLu、softplus、softmax
原文地址:https://www.cnblogs.com/nxf-rabbit75/p/9276412.html 激活函数: 就是在神经网络的神经元上运行的函数,负责将神经元的输入映射到输出端. 常见 ...
- 神经网络激活函数sigmoid relu tanh 为什么sigmoid 容易梯度消失
https://blog.csdn.net/danyhgc/article/details/73850546 什么是激活函数 为什么要用 都有什么 sigmoid ,ReLU, softmax 的比较 ...
- [DeeplearningAI笔记]神经网络与深度学习3.2_3.11(激活函数)浅层神经网络
觉得有用的话,欢迎一起讨论相互学习~Follow Me 3.2 神经网络表示 对于一个由输入层,隐藏层,输出层三层所组成的神经网络来说,输入层,即输入数据被称为第0层,中间层被称为第1层,输出层被称为 ...
- Pytorch1.0深度学习:损失函数、优化器、常见激活函数、批归一化详解
不用相当的独立功夫,不论在哪个严重的问题上都不能找出真理:谁怕用功夫,谁就无法找到真理. —— 列宁 本文主要介绍损失函数.优化器.反向传播.链式求导法则.激活函数.批归一化. 1 经典损失函数 1. ...
- [转]理解神经网络:从神经元到RNN、CNN、深度学习
神经网络是目前最流行的机器学习算法之一.随着时间的推移,证明了神经网络在精度和速度方面,比其他的算法性能更好.并且形成了很多种类,像CNN(卷积神经网络),RNN,自编码,深度学习等等.神经网络对于数 ...
- 自己动手实现深度学习框架-7 RNN层--GRU, LSTM
目标 这个阶段会给cute-dl添加循环层,使之能够支持RNN--循环神经网络. 具体目标包括: 添加激活函数sigmoid, tanh. 添加GRU(Gate Recurrent U ...
- 深度学习面试题05:激活函数sigmod、tanh、ReLU、LeakyRelu、Relu6
目录 为什么要用激活函数 sigmod tanh ReLU LeakyReLU ReLU6 参考资料 为什么要用激活函数 在神经网络中,如果不对上一层结点的输出做非线性转换的话,再深的网络也是线性模型 ...
随机推荐
- PyCharm 中写 Turtle代码没提示以及标黄问题
PyCharm 中在使用Turtle(海龟)库绘图体系时,代码明明是正确可以运行的,但是没有提示 ,代码出现黄色标记以及红色波浪线 ,经验不足的人还以为自己的书写方法错误,毕竟出现了红色波浪线,效果如 ...
- k8s 集群部署--学习
kubernetes是google开源的容器集群管理系统,提供应用部署.维护.扩展机制等功能,利用kubernetes能方便管理跨集群运行容器化的应用,简称:k8s(k与s之间有8个字母) Pod:若 ...
- mysql批量更新update中的锁表机制
mysql的行锁是通过索引加载的,即行锁是加在索引响应的行上的,要是对应的SQL语句没有走索引,则会全表扫描,行锁则无法实现,取而代之的是表锁. CREATE TABLE SIMPLE_USER( I ...
- oracle导入提示“IMP-00010:不是有效的导出文件,头部验证失败”的解决方案
这是由于导出的dmp文件与导入的数据库的版本不同造成的用Notepad++查看了dmp文件,在头部具修改成你将导入目标数据库的版本号以下对应的版本号: 11g R2:V11.02.00 11g R1: ...
- python 设计模式之装饰器模式 Decorator Pattern
#写在前面 已经有一个礼拜多没写博客了,因为沉醉在了<妙味>这部小说里,里面讲的是一个厨师苏秒的故事.现实中大部分人不会有她的天分.我喜欢她的性格:总是想着去解决问题,好像从来没有怨天尤人 ...
- PHP7 MongoDB 使用方法
原文链接: http://www.zhaokeli.com/article/8574.html MongoDb原生操作 Mongodb连接 PHP7 连接 MongoDB 语法如下: 复制代码 $ma ...
- git pull There is no tracking information for the current branch.
在高版本的 git下面,也许会看见这样的提示: 解决方案:指定当前工作目录工作分支,跟远程的仓库,分支之间的链接关系. 比如我们设置master对应远程仓库的master分支 git branch - ...
- postgresql 臭氧8小时聚合函数
1.定义数据拼接函数 CREATE OR REPLACE FUNCTION "public"."sfun"("results" _numer ...
- python的argparse模块parse_known_args()方法的使用
parse_known_args()方法的用处就是有些时候,你的选项配置可能不会在一个函数或包中调用完成 在很多使用,我们可能会需要根据一些输入的选项,比如在深度学习中,我们可能会根据传入的模型设置- ...
- Python - Django - ORM 自定义 char 类型字段
用 CharField 定义的字段在数据库中存放为 verchar 类型 自定义 char 类型字段需要下面的代码: class FixedCharField(models.Field): " ...