神经网络激活函数(1)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
激活函数是用来加入非线性因素的,因为线性模型的表达能力不够。
1.S形函数( Sigmoid Function )
该函数的导函数:
2.双极S形函数
该函数的导函数:
S形函数与双极S形函数的图像如下:
双极S形函数与S形函数主要区别在于函数的值域,双极S形函数值域是(-1,1),而S形函数值域是(0,1)。
由于S形函数与双极S形函数都是可导的(导函数是连续函数),因此适合用在BP神经网络中。(BP要求激活函数可导)
3.双曲正切函数
该函数的导函数:
4.ReLu(RectifiedLinearUnits)函数
ReLU: g(x)=max(0,x)
该函数的导函数:
g(x)'=0或1
RELU取代sigmoid 和tanh函数的原因是在求解梯度下降时RELU的速度更快,在大数集下会节省训练的时间
在这里指出sigmoid和tanh是饱和非线性函数,而RELU是非饱和非线性函数。
5.PRELU激活函数
PReLU(Parametric Rectified Linear Unit), 顾名思义:带参数的ReLU。二者的定义和区别如下图:
如果ai=0,那么PReLU退化为ReLU;如果ai是一个很小的固定值(如ai=0.01),则PReLU退化为Leaky ReLU(LReLU)。有实验证明,与ReLU相比,LReLU 对最终的结果几乎没什么影响。
激活函数通常有如下一些性质:
•非线性:当激活函数是线性的时候,一个两层的神经网络就可以逼近基本上所有的函数了。但是,如果激活函数是恒等激活函数的时候(即f(x)=x),就不满足这个性质了,而且如果MLP使用的是恒等激活函数,那么其实整个网络跟单层神经网络是等价的。
•可微性:当优化方法是基于梯度的时候,这个性质是必须的。
•单调性:当激活函数是单调的时候,单层网络能够保证是凸函数。
•f(x)≈x:当激活函数满足这个性质的时候,如果参数的初始化是random的很小的值,那么神经网络的训练将会很高效;如果不满足这个性质,那么就需要很用心的去设置初始值。
•输出值的范围:当激活函数输出值是有限的时候,基于梯度的优化方法会更加稳定,因为特征的表示受有限权值的影响更显着;当激活函数的输出是无限的时候,模型的训练会更加高效,不过在这种情况小,一般需要更小的learning rate.
Sigmoid
sigmoid 函数曾经被使用的很多,不过近年来,用它的人越来越少了。主要是因为它的一些缺点:
•Sigmoids saturate and kill gradients.(saturate 这个词怎么翻译?饱和?)sigmoid 有一个非常致命的缺点,当输入非常大或者非常小的时候(saturation),这些神经元的梯度是接近于0的,从图中可以看出梯度的趋势。所以,你需要尤其注意参数的初始值来尽量避免saturation的情况。如果你的初始值很大的话,大部分神经元可能都会处在saturation的状态而把gradient kill掉,这会导致网络变的很难学习。
•Sigmoid 的output 不是0均值.这是不可取的,因为这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。产生的一个结果就是:如果数据进入神经元的时候是正的(e.g.x>0elementwise in f=wTx+b),那么w计算出的梯度也会始终都是正的。当然了,如果你是按batch去训练,那么那个batch可能得到不同的信号,所以这个问题还是可以缓解一下的。因此,非0均值这个问题虽然会产生一些不好的影响,不过跟上面提到的kill gradients 问题相比还是要好很多的。
tanh
tanh 是上图中的右图,可以看出,tanh 跟sigmoid还是很像的,实际上,tanh 是sigmoid的变形:
tanh(x)=2sigmoid(2x)1
与sigmoid 不同的是,tanh 是0均值的。因此,实际应用中,tanh 会比sigmoid 更好(毕竟去粗取精了嘛)。
ReLU
近年来,ReLU 变的越来越受欢迎。它的数学表达式如下:
f(x)=max(0,x)
很显然,从图左可以看出,输入信号<0时,输出都是0,>0的情况下,输出等于输入。w是二维的情况下,使用ReLU之后的效果如下:
ReLU 的优点:
•发现使用ReLU 得到的SGD的收敛速度会比sigmoid/tanh 快很多(看右图)。有人说这是因为它是linear,而且non-saturating
•相比于sigmoid/tanh,ReLU 只需要一个阈值就可以得到激活值,而不用去算一大堆复杂的运算。
ReLU 的缺点:当然ReLU 也有缺点,就是训练的时候很”脆弱”,很容易就”die”
了. 什么意思呢?
举个例子:一个非常大的梯度流过一个ReLU 神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了。
如果这个情况发生了,那么这个神经元的梯度就永远都会是0.
实际操作中,如果你的learning rate 很大,那么很有可能你网络中的40%的神经元都”dead”了。
当然,如果你设置了一个合适的较小的learning rate,这个问题发生的情况其实也不会太频繁。
Leaky-ReLU、P-ReLU、R-ReLU
Leaky ReLUs:就是用来解决这个“dying ReLU”的问题的。与ReLU 不同的是:
f(x)=αx,(x<0)
f(x)=x,(x>=0)
这里的α是一个很小的常数。这样,即修正了数据分布,又保留了一些负轴的值,使得负轴信息不会全部丢失。
关于Leaky ReLU 的效果,众说纷纭,没有清晰的定论。有些人做了实验发现Leaky ReLU 表现的很好;有些实验则证明并不是这样。
Parametric ReLU:对于Leaky ReLU 中的α,通常都是通过先验知识人工赋值的。
然而可以观察到,损失函数对α的导数我们是可以求得的,可不可以将它作为一个参数进行训练呢?
Kaiming He的论文《Delving Deep into Rectifiers: Surpassing Human-Level
Performance on ImageNet Classification》指出,不仅可以训练,而且效果更好。
公式非常简单,反向传播至未激活前的神经元的公式就不写了,很容易就能得到。
对α的导数如下:
δyi / δα=0,(if yi>0),else=yi
原文说使用了Parametric ReLU后,最终效果比不用提高了1.03%.