激活函数介绍

神经网络需要激活函数的原因:

​ 数据的分布绝大多数的非线性的,而不加激活函数的神经网络的计算是线性的,引入激活函数,是为了在神经网络中加入非线性的因素,增强神经网络的学习能力,所以激活函数的最大特点就是非线性。

为什么不加激活函数的网络的计算是线性的?

单层感知机

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IKv3fkx8-1596975675045)(C:\Users\云之遥\AppData\Roaming\Typora\typora-user-images\image-20200804091636937.png)]

在上图中的单层感知机中,y的表达式即为线性的,右图中的直线由 w 1 x 1 + w 2 x 2 + b = 0 w_{1}x_{1}+w_{2}x_{2} + b = 0 w1x1+w2x2+b=0 得到,可以看出单层的感知机只能进行线性的表达,对于非线性来说,单层感知机无法进行表示。

多感知器分类器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dNputCvM-1596975675051)(C:\Users\云之遥\AppData\Roaming\Typora\typora-user-images\image-20200804092031042.png)]

在上图中,我们想通过引入多层神经网络来解决非线性的问题,对于图中的出现的等式,我们对其进行变换处理,那么上述的等式等价于下面的等式:

在这里插入图片描述

从上图中可以看出,多层感知器的表达式仍然为线性的,仍旧无法表示非线性,可以预见,即使增添再多的隐藏层,也无法进行非线性的表示。

基于上述原因,我们通过引入激活函数来为神经网络增加非线性因素,从而使神经网络能够进行非线性的表示,增强神经网络的表示能力。

饱和激活函数介绍

  右饱和: 当 x 趋近于正无穷时,函数的导数趋近于0,此时称为右饱和

  左饱和: 当 x 趋近于负无穷时,函数的导数趋近于0,此时称为左饱和

  饱和函数和非饱和函数: 当一个函数既满足左饱和、又满足右饱和,则称为饱和函数,否则,称函数为非饱和函数。

  常见的饱和激活函数: Sigmoid函数和tanh函数,饱和函数在神经网络中会出现“梯度消失”的现象,导致函数无法收敛。

  常见的非饱和函数: ReLU函数,非饱和激活函数会解决“梯度消失”问题,可以加快收敛。

Sigmoid激活函数介绍

Sigmoid激活函数如下图所示,可以看见,Sigmoid激活函数已经引入了非线性

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9pUlwzjE-1596975675061)(C:\Users\云之遥\AppData\Roaming\Typora\typora-user-images\image-20200804093241556.png)]

Sigmoid函数的输出结果范围为 (0,1),可以将网络的输入映射到这一范围内

Sigmoid公式以及导数:

在这里插入图片描述

Sigmoid曲线及其导数曲线:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Oqgrn515-1596975675080)(C:\Users\云之遥\AppData\Roaming\Typora\typora-user-images\image-20200804093828828.png)]

Sigmoid激活函数的特点:

优点:平滑、易于求导

缺点:

  1. Sigmoid函数中存在 e 的计算(幂运算)和函数除法,会增大激活函数的计算量

  2. Sigmoid的导数如上述右图所示,导数的取值范围为[0,0.25],由于神经网络反向传播存在“链式反应”,非常容易出现梯度消失的情况,例如对于一个10层的网络来说,根据 0.2 5 10 ≈ 0.000000954 0.25^{10} \approx 0.000000954 0.25100.000000954,第10层的误差相对第一层卷积的参数 W 1 W_{1} W1 的梯度将是一个非常小的值,这就是所谓的“梯度消失”。另外,Sigmoid函数非常容易进入饱和状态,当神经元的激活在接近0或1时就会饱和,在这些区域中的梯度几乎为0,也会导致梯度消失。

  3. Sigmoid的输出不是0均值(即zero-centered),这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入,随着网络的加深,会逐渐的改变数据的原始分布。

Tanh激活函数介绍

  Tanh激活函数和Sigmoid激活函数都属于饱和激活函数,Tanh激活函数的取值范围变为了(-1,1),也是一种非线性激活函数。

  Tanh函数公式以及导数:
t a n h ( x ) = e x − e − x e x + e − x = 1 − e − 2 x 1 + e − 2 x = 2 1 + e − 2 x − 1 tanh(x) = \dfrac{e^{x}-e^{-x}}{e^{x}+e^{-x}} = \dfrac{1-e^{-2x}}{1+e^{-2x}} = \dfrac{2}{1+e^{-2x}}-1 tanh(x)=ex+exexex=1+e2x1e2x=1+e2x21

t a n h ’ ( x ) = 4 e − 2 x ( 1 + e − 2 x ) 2 tanh^{’}(x) = \dfrac{4e^{-2x}}{(1+e^{-2x})^{2}} tanh(x)=(1+e2x)24e2x

  Tanh函数曲线以及导数曲线

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-itERLZj2-1596975675091)(C:\Users\云之遥\AppData\Roaming\Typora\typora-user-images\image-20200804103923213.png)]

Tanh激活函数的特点:

  1. Tanh激活函数的输出范围为(-1,1),相比Sigmoid函数而言解决了0均值问题(zero-center)

  2. Tanh函数中仍然包含幂运算和除法运算,加大了计算量

  3. Tanh函数仍然有饱和现象,仍旧会出现“梯度消失”的问题。

ReLU激活函数介绍

  ReLU激活函数为非饱和激活函数,也是一种非线性激活函数

  ReLU激活函数公式: max(0,x)

  ReLU函数图像以及导数图像:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rxL7Mfyj-1596975675094)(C:\Users\云之遥\AppData\Roaming\Typora\typora-user-images\image-20200804110109338.png)]

  ReLU激活函数在 x 大于0时,导数数值为1,相比较 Sigmoid 和 Tanh 激活函数而言,解决了深层网络中出现的“梯度消失”问题,使得深层网络可训练。

  ReLU激活函数为非线性的原因:非线性即一阶导数不为常数,对ReLU求导,在输入值分别为正和负的情况下,导数是不同的,也就说明ReLU的导数不是常数,所以ReLU是非线性的。

ReLU在 x 大于 0 下,导数为1的特点:

  导数为常数1的好处在于,在反向传播的“链式反应”中不会出现“梯度消失”的现象,梯度下降的强度完全取决于权值的乘积,但是在这种情况下可能会出现“梯度爆炸”的现象。解决方法(不太明白):一是控制权值,让它们在(0,1)范围内;二是做梯度裁剪,控制梯度下降强度,如ReLU(x)=min(6, max(0,x))

ReLU在 x 小于 0 下,输出为 0 的特点:

  深度学习的目标:深度学习是根据大批量样本数据,从错从复杂的数据关系中,找出关键信息(关键特征)。换句话说,就是把密集矩阵转化为稀疏矩阵,保留数据的关键信息,去除噪音,这样的模型就有了鲁棒性。ReLU将x<0的输出置为0,就是一个去噪音,稀疏矩阵的过程。而且在训练过程中,这种稀疏性是动态调节的,网络会自动调整稀疏比例,保证矩阵有最优的有效特征。

  ReLU 强制将x<0部分的输出置为0(置为0就是屏蔽该特征),可能会导致模型无法学习到有效特征,所以如果学习率设置的太大,就可能会导致网络的大部分神经元处于‘dead’状态,所以使用ReLU的网络,学习率不能设置太大.

ReLU激活函数的特点:

  1. 相比 Sigmoid 和 Tanh 激活函数而言,不存在幂运算和除法运算,可以简化计算,提高了运算速度。

  2. 解决了“梯度消失”问题,收敛速度快于 Sigmoid 和 Tanh 函数,但是可能会出现“梯度爆炸”现象。

. 相比 Sigmoid 和 Tanh 激活函数而言,不存在幂运算和除法运算,可以简化计算,提高了运算速度。

  2. 解决了“梯度消失”问题,收敛速度快于 Sigmoid 和 Tanh 函数,但是可能会出现“梯度爆炸”现象。

  3. ReLU的输出也不是0均值(即zero-centered),这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入,随着网络的加深,会逐渐的改变数据的原始分布。

ELU激活函数

  ELU激活函数是一种非饱和的激活函数,也是一种非线性的激活函数,ELU激活函数是对RELU激活函数的dead现象进行了改进,

  ELU激活函数公式以及导数:
E L U ( x ) = { x i f x > 0 α ( e x − 1 ) i f x < 0 ELU(x) = \begin{cases}x\qquad\qquad\quad if\quad x > 0\\ \alpha\left(e^{x}-1\right)\quad if\quad x < 0 \end{cases} ELU(x)={xifx>0α(ex1)ifx<0

E L U ′ ( x ) = { 1 i f x > 0 E L U ( x ) + α i f x < 0 ELU'(x) =\begin{cases}1\qquad\qquad\quad\quad if\quad x > 0\\ ELU\left(x\right)+\alpha\quad if\quad x < 0 \end{cases} ELU(x)={1ifx>0ELU(x)+αifx<0

  ELU函数图像以及导数图像:

在这里插入图片描述

ELU激活函数的特点

  1. 相比于ReLU激活函数,解决了神经元dead问题,并且,ELU激活函数中扔保留着部分的dead神经元,用于深度学习训练时取出噪音,保留关键信息

  2. 解决了“梯度消失”问题,但仍然无法避免“梯度爆炸”问题

  3. 神经网络学习 α值,只能人为设置

  4. ELU中包含指数运算,运算时间较长

Leaky ReLU激活函数

  Leaky ReLU激活函数是一种非饱和的激活函数,也是一种非线性的激活函数,Leaky ReLU激活函数中也包含一个 α 值,通常设置在0.1到0.3之间。Leaky ReLU激活函数相比ELU存在一些缺陷,但同时也存在一些优势。

  Leaky ReLU激活函数公式以及导数:
L e a k y R e L U ( x ) = { x i f x > 0 α x i f x < 0 Leaky\quad ReLU(x) = \begin{cases}x\qquad\qquad\quad if\quad x > 0\\ \alpha x\quad \qquad\quad if\quad x < 0 \end{cases} LeakyReLU(x)={xifx>0αxifx<0

L e a k y R e L U ′ ( x ) = { 1 i f x > 0 α i f x < 0 Leaky\quad ReLU'(x) = \begin{cases}1\qquad\qquad\quad if\quad x > 0\\ \alpha \quad \qquad\qquad if\quad x < 0 \end{cases} LeakyReLU(x)={1ifx>0αifx<0

  Leaky ReLU函数图像及导数图像:

在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5zkYF1iN-1597480850160)(C:\Users\云之遥\AppData\Roaming\Typora\typora-user-images\image-20200815162854563.png)]

Leaky ReLU激活函数的特点:

  1. 类似ELU激活函数,Leaky ReLU激活函数也能避免ReLU中的dead问题,不过Leaky ReLU相比于ELU,完全消除了dead神经元。

  2. Leaky ReLU不包含指数运算,相比ELU运算时间更短

  3. 解决了“梯度消失”问题,但仍然无法避免“梯度爆炸”问题

  4. 神经网络学习 α值,只能人为设置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值