概述
机器学习中常见的激活函数需要满足以下几个特征:
(1)连续并可导(允许少数点上不可倒)的非线性函数。可导函数可以直接利用数值优化方法来学习网络参数
(2)激活函数和导数要尽可能的简单
(3)激活函数的值域要在一个合适的区间内
1.典型的激活函数
1.1 sigmoid函数
该函数可以将元素的值转化到0~1之间,其公式和图形表示形式如下:
从图形可以看出该函数存在以下缺点:
(1)BP神经网络是依据梯度进行的,而该函数在无穷小或无穷大的时函数的导数趋近于0.因此在输出值较大或较小时,网络更新慢,容易造成梯度消失。
(2)函数输出的不是以0为中心,而是以0.5为中心,函数输出值始终大于0,因此导致模型训练收敛速度变慢。
1.2 ReLu函数
ReLu函数通常作为CNN网络默认的激活函数。当函数输入为正数时,导数恒为1,可以缓解梯度消失,当小于0时,可以稀疏网络。其函数形式及图形如下:
从图像可以看出,ReLU函数将小于0的全部过滤掉了,虽然它在正区间缓解了梯度消失问题,但却会造成负区间的大量神经元死亡的问题,因为当输入小于零时,导数恒为0,会使很多神经元无法得到更新,也就是负区间的梯度会消失。
1.3 Leaky ReLU函数
由于Relu在负区间的神经元死亡问题,于是有了一个变种Leaky Relu,Leaky ReLU给所有负值赋予一个非零斜率,也就是该函数输出对负值输入有很小的坡度。由于导数总是不为零,这能减少静默神经元的出现,允许基于梯度的学习(尽管会很慢)。函数表现形式及图形如下:
1.4 PReLU函数
来自于何凯明于ICCV2015的paper,地址为:https://arxiv.org/pdf/1502.01852.pdf。
如果ai=0,那么PReLU退化为ReLU;如果是一个很小的固定值(如ai=0.01),则PReLU退化为Leaky ReLU。PReLU和 RReLU 以及 Leaky ReLU 有一些共同点,即为负值输入添加了一个线性项。而且这个线性项的斜率实际上是在模型训练中学习到的。公式及图形如下:
1.5 RReLU函数
RReLU同样属于 Leaky ReLU的变体之一,在RReLU中,负区间的斜率在训练中是随机的,在之后的测试中就变成了固定的了。RReLU在训练环节中, aji是从一个均匀的分布U(I,u)中随机抽取的数值。函数及图形如下:
1.6 Tanh函数
Tanh函数可以将元素的值变换到-1和1之间。Tanh函数 的输出均值比 sigmoid 更接近 0,SGD会更接近natural gradient(一种二次优化技术),从而降低所需的迭代次数,主要解决了上面说到的sigmod函数的第二个不足。
当为非常大或者非常小的时候,由导数推断公式可知,此时导数接近与0,会导致梯度很小,权重更新非常缓慢,从而导致所谓的梯度消失的问题。其公式及图形如下所示:
1.7 ELU函数
ELU在正区间内的导数处处为1,缓解了梯度消失问题。ELU的输出均值是接近于零的,如果均值非0,就会对下一层造成一个bias,这时候如果激活函数的输出值之间不能相互抵消(即均值非0),就会导致下一层的激活单元有bias shift。
当单元很多的时候,bias shift会一直累加,越来越大。相比ReLU,ELU可以取到负值,这让单元激活输出的均值可以更接近0。这比较类似于Batch Normalization的效果但是只需要更低的计算复杂度。虽然LReLU和PReLU都也有负值,但是它们不保证在不激活状态下(就是在输入为负的状态下)对噪声鲁棒。反观ELU在输入取较小值时具有软饱和的特性,提升了对噪声的鲁棒性。其公式及图形如下:
1.8 Swish函数
来自于谷歌大脑的paper:Searching for Activation Functionshttps://arxiv.org/abs/1710.05941。β是个常数或可训练的参数.Swish 具备无上界有下界、平滑、非单调的特性。其公式及函数图形如下:
Swish与ReLU一样有下界而无上界,但是其非单调性确与其他常见的激活函数不同,同时也拥有平滑和一阶导数,二阶导数平滑的特性。谷歌的实验证明了Swish在不同的数据集上的表现都要优于很多其他的激活函数,,Swish适应于局部响应归一化,并且在40以上全连接层的效果要远优于其他激活函数,而在40全连接层之内则性能差距不明显。但是根据在mnist数据上AleNet的测试效果却证明,Swish在低全连接层上与Relu的性能差距依旧有较大的优势。
1.9 GELU(高斯误差线性单元)
其中P(X<=x)是是高斯分布N(u,b,2)的累积分布函数。其中两个参数为超级参数,设置为0,1.
高斯分布函数为S型函数,因此可以用Tanh和Logistic代替。
常见激活函数即导数如下表所示:
曲线图如下所示:
谷歌通过对比,各种激活函数ACC如下:
我们在进行激活函数的选择时候,可以适当参考以上几种激活函数,或者婚活使用,从而高效完成网络模型的迭代训练。
2.如何选择激活函数
一般而言,首先应该尝试的就是ReLU。由于梯度消失问题,有时要避免使用sigmoid和tanh函数。如果网络学习效果不佳,可能由神经元死亡导致的梯度消失,那么可以尝试ReLU的一些变种激活函数。
最后
以上就是爱笑盼望为你收集整理的深度学习-激活函数总结的全部内容,希望文章能够帮你解决深度学习-激活函数总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复