几种损失函数比较--代价函数,损失函数,目标函数区别
神经网络中激活函数的主要作用是提供网络的非线性建模能力,如不特别说明,激活函数一般而言是非线性函数。假设一个示例神经网络中仅包含线性卷积和全连接运算,那么该网络仅能够表达线性映射,即便增加网络的深度也依旧还是线性映射,难以有效建模实际环境中非线性分布的数据。加入(非线性)激活函数之后,深度神经网络才具备了分层的非线性映射学习能力。因此,激活函数是深度神经网络中不可或缺的部分。
在ICML2016的一篇论文Noisy Activation Functions中,作者将激活函数作出了形象的定义,如下图所示:
在实际的应用中,我们需要先了解以下概念:
-
饱和
当一个激活函数h(x)满足 limn→+∞h′(x)=0limn→+∞h′(x)=0 则称其为左硬饱和。
若既满足左硬饱和,又满足右硬饱和,则称这种激活函数为硬饱和。
如果只有在极限状态下偏导数等于0的函数,称之为软饱和。
从定义来看,几乎所有的连续可导函数都可以用作激活函数。但目前常见的多是分段线性和具有指数形状的非线性函数。下文将依次对它们进行总结。
Sigmoid
Sigmoid 是使用范围最广的一类激活函数,具有指数函数形状 。正式定义为:\
f(x)=11+e−xf(x)=11+e−x
。因此两个0到1之间的数相乘,得到的结果就会变得很小了。神经网络的反向传播是逐层对函数偏导相乘,因此当神经网络层数非常深的时候,最后一层产生的偏差就因为乘了很多的小于1的数而越来越小,最终就会变为0,从而导致层数比较浅的权重没有更新。
最后总结一下 Sigmoid 函数的优缺点:
优点:
- Sigmoid 函数的输出映射在(0,1)之间,单调连续,输出范围有限,优化稳定,可以用作输出层。它在物理意义上最为接近生物神经元。
- 求导容易。
缺点:
- 由于其软饱和性,容易产生梯度消失,导致训练出现问题。
- 其输出并不是以0为中心的。
Tanh
f(x)=1−e−2x1+e−2xf(x)=1−e−2x1+e−2x
比较小且固定的时候,我称之为 LReLU。LReLU 最初的目的是为了避免梯度消失。但在一些实验中,我们发现 LReLU 对准确率并没有太大的影响。很多时候,当我们想要应用 LReLU 时,我们必须要非常小心谨慎地重复训练,选取出合适的 a,LReLU 的表现出的结果才比 ReLU 好。因此有人提出了一种自适应地从数据中学习参数的 PReLU。
PReLU是LReLU的改进,可以自适应地从数据中学习参数。PReLU具有收敛速度快、错误率低的特点。PReLU可以用于反向传播的训练,可以与其他层同时优化。
ELU
ELU 融合了sigmoid和ReLU,具有左侧软饱性。其正式定义为:
右侧线性部分使得ELU能够缓解梯度消失,而左侧软饱能够让ELU对输入变化或噪声更鲁棒。ELU的输出均值接近于零,所以收敛速度更快。
激活函数选用总结
在进行深度学习的研究中,如何选择激活函数,仍需依靠实验指导。一般来说,在分类问题上建议首先尝试 ReLU,其次ELU,这是两类不引入额外参数的激活函数。
该博文主要参考资料:
1.深度学习中的激活函数导引
2.浅谈深度学习中的激活函数