自然语言菜鸟学习笔记(八):激活函数

目录

前言

为什么要激活函数?

几种激活函数

Sigmoid

Tanh

ReLU

Leaky-ReLU

ELU

激活函数的选择


前言

学自然语言的时候,也不知道咋回事,就是头冷。


为什么要激活函数?

比如说对于一个神经网络,我们不用激活函数是一个什么样纸?那么我们可以假想激活函数是 f(x) = x,因为没有用激活函数嘛,也就是 y = x一个线性的存在,神经网络的结构是层次的,高级的层次的输入是来自于低级的层次的输出的,那么,如果我们不使用激活函数,神经网络上的每一层节点的输入都是上一层的节点的输出的线性函数(可以想象成 f(x) = x)。那么,无论我们使用多少层、多深层次的神经网络,输出都是输入的线性组合,隐藏层失去效果,很多层次的神经网络相当于单层的神经网络,其实很好理解,这种情况就是最原始的感知机(Perception)。

若我们使用非线性的函数当做激活函数,神经网络不在是线性组合,给神经元引入了非线性因素, 可以逼近任意非线性函数,这样我们深层次的神经网络的表达能力更强。


几种激活函数

采用不同的激活函数可能会使神经网络梯度下降的速度不一样,最终神经网络的拟合能力可能也不一样,所以怎么选激活函数得看实际的模型中是如何操作的。

Sigmoid

左侧为Sigmoid函数的形状,右侧为Sigmoid导数的形状

公式如下:

\sigma (x) = \frac{1}{1 + e^{-x}}

特点:

  • 可以看到左侧他的函数的形状,在[ -5, +5 ]的区间内,值的波动会比较大,而在这个区间之外,值将逐渐趋于平缓。所以在输入非常大或者输入很小的时候是没有梯度的,从右侧的倒数也可以看出,当输入超过区间的时候,梯度基本为0。两侧的导数逐渐趋于零,这种特性成为软饱和性。饱和的意思就是梯度不下降了。
  • 输出均值非0,大于0,在图中可以看出是0.5,输出均值不为0,有什么不好的地方?         这会导致后面一层的神经元将得到上一层输出的非0均值的信号作为输入。产生的一个结果就是:如果数据进入神经元的时候是正的,那么计算出的梯度也会始终都是正的。因为原本输入的计算经过sigmoid它就会大于0。当然了,如果你是按batch去训练,那么那个batch可能得到不同的信号,所以这个问题还是可以缓解一下的。
  • e的-x次方会导致模型计算复杂,计算资源消耗大
  • 梯度消失,梯度下降是对每个方向求偏导,Sigmoid的导数的取值范围在0到0.25之间,假设让很多层的神经网络,他梯度下降的过程中如果吧激活函数设置为sigmoid就会导致很多个 [ 0, 0.25 ]之间的数相乘,最终梯度消失。

 

Tanh

特点:

  • 输入超过一定的区间范围,也会导致没有梯度,可以看到右侧的导数形状,取值很大或很小,梯度就没有了。
  • 输出均值是0,这点是好一些的,输出均值在上面sigmoid有介绍到。所以收敛速度要比sigmoid快,会减少迭代次数。
  • 计算复杂,计算e的x和-x次方

 

ReLU

公式:

f(x) = \left\{\begin{matrix} x, x \geq 0\\ 0, x < 0 \end{matrix}\right.

特点:

  • 计算简单。
  • 不饱和性,观察右侧的导数,当输入大于0的时候,值都能等于1,一直是有梯度的,所以收敛速度会比较快。
  • 输出均值大于0
  • 当输入小于零,则梯度直接为0,就是ReLU硬饱和。就是假设有一个比较大的梯度进行下降导致 x 变为负值,那么他的梯度将持续为0,一直得不到更新,对数据不再有激活的能力,该神经单元相当于死掉了。

 

Leaky-ReLU

为了解决上述ReLU导致神经元死掉的情况,提出了一种Leaky-ReLU,公式改为:

f(x) = max(0.01x, x)

这样子当x小于0的时候梯度不会是0, 解决了ReLU最大的一个问题。

 

     

特点:

可以看到右侧是他的一个导数,当x小于0的时候梯度也是存在的,不会出现Dead ReLU的问题,可以梯度更新。

 

ELU

特点:

  • 和Leaky-ReLU类似,只不过当x小于0的时候是用了指数的形式
  • 输出均值相较于Leaky-ReLU和ReLU更接近于0
  • 小于0的部分计算复杂

 

公式:

f(x) = \left\{\begin{matrix} x, & x>0 \\ \alpha (exp(x)-1), & x \leq 0 \end{matrix}\right.

 

Maxout

ReLU的一个衍生版本

公式:

f(x) = max(w_{1}^{T}x + b_{1}, w_{2}^{T}x + b_{2})

对比普通的ReLU公式:

f(x) = max(w_{1}^{T}x + b_{1}, 0)

Maxout也可以成下方的形式:

特点:

  • 同样解决了Dead ReLU的问题
  • 多了一套参数
  • 很明显,拟合能力很强,多套参数
  • 计算量增加,参数增多代表计算复杂。

激活函数的选择

1. 尽量不使用Sigmoid,缺点多相较于其他的激活函数

2. ReLU的学习率设置较小的值,因为他的导数较大

3. 相较于ReLU,使用它的衍生版本。

 

 

 

以上是对激励函数的粗浅认识

本菜鸟学习不好,如有不妥望各位大佬指点

如要转载请说明原文:https://blog.csdn.net/qq_36652619

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_我走路带风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值