前面一些分享文章提到了激活函数,这篇文章将介绍各种激活函数,下一篇将分享我和同事在业务中对激活函数的一些思考与应用。
在介绍各种激活函数之前,先了解人工神经网络的提出背景和工作原理,从而更好地理解激活函数的作用,以及各个激活函数的特点分析。(想直接看激活函数的朋友可以跳过这部分直接到第3部分对常用激活函数的介绍。)
1 激活函数的生物背景
受生物神经系统处理信息的启发,人工神经网络(Artificial neural network[1],简写ANN)的概念被提出。
1.1 生物神经网络
生物神经处理系统由数量庞大的神经元组成,这些神经元之间有复杂的连接关系,形成强大的生物神经网络(Biological Neural Networks[2],简写BNN)。
生物神经网络中的每个神经元,只处理简单的任务。单个神经元由细胞体(Cell body)、轴突(axion)和树突(dendrite)构成,如图1所示。轴突负责向其它神经元发送信号,树突负责从其它神经元接收信号。图1中红色圈表示两个神经元的连接区域。当神经元通过树突接收到从另一个神经元的轴突传来的信号时,信号在细胞体内累计,当接收的信号超过一定强度时,神经元则通过轴突继续传递信号,若信号太弱,则无法通过该神经元继续传递。
图1 神经元结构
1.2 人工神经网络
ANN类比BNN进行网络结构设计和神经元的计算设计。
1.2.1 网络结构和激活函数
ANN的结构如图2所示,可以包含一层或多层隐层。ANN的网络结构类似BNN,神经元之间相互连接,每个神经元进行简单的计算逻辑。和BNN神经元对信号的处理原理对应,ANN中每个神经元对输入进行加权、求和、激活计算后得到输出。激活计算对应于BNN中神经元对信号的继续传递或者阻断继续传递的处理。激活函数的产生由此而来,用于ANN中神经元的激活逻辑。
图2 人工神经网络(ANN)结构
1.2.2 网络学习过程
人工神经网络的学习分为两个过程:前向传播(forward propagation,简写为FP)和反向传播(back propagation,简写为BP)。两个过程交替进行,每次FP后进行BP,然后进行下一次FP和BP。
1.2.2.1 前向传播
FP的过程很简单,即输入经过若干隐层处理后得到输出,隐层中每个神经元的计算包括加权求和和激活。式子(1.1)和式子(1.2)分别表示了隐层神经元的加权求和和激活的计算过程。加权求和的输入为与当前神经元相连的上一层神经元的输出,即式子(1.1)中的 ,加权求和的结果也就是 再经过激活函数,得到当前层神经元的输出 。
1.2.2.2 反向传播
FP过程中的计算,依赖很多参数,这些参数更新和计算,依赖于BP过程。BP采用梯度下降法对参数进行更新,也就是对FP过程计算出的损失(预测值和真实值的差异),对所有参数求导得到梯度,每个参数用自身的梯度进行更新。参数的梯度计算采用链式法则进行,如式子(2.1)所示,可见损失对w的求导依赖于损失对y的求导,损失对y的求导如式子(2.2)所示。每次BP后参数更新一次,那么下一次FP将采用更新后的参数进行计算。
在梯度计算过程中,若网络参数初始化不当或者网络超参设置不合理等,容易出现梯度消失和梯度爆炸问题。梯度消失是指训练过程中梯度趋近于0,造成参数无法更新,损失函数不再继续收敛,从而导致网络得不到充分训练。梯度爆炸是指训练过程中,梯度过大甚至是NAN(not a number),造成损失大幅震荡或者无法收敛,导致网络无法收敛。
2 为什么需要激活函数
对于没有系统学过神经网络基础知识而是在业务中直接运用神经网络的人来说,激活函数好像很天然地跟神经网络绑定在一起,有神经网络的地方就自然会有激活函数。另一方面,激活函数的生物学背景,也使得它似乎天然就应该设计在神经网络的计算逻辑中。激活函数确实是神经网络的一部分,那为什么神经网络需要激活函数,是否可以不需要它,没有激活函数的神经网络还能不能称为神经网络,理解了这些问题,就理解了激活函数的作用和神经网络的大致工作原理。
神经网络必须包含激活函数,激活函数的作用是给神经元引入非线性。
如果没有激活函数,神经网络的本质将发生变化,此时不管神经网络有多少层,最终的输出将成为输入的线性组合,如式子(3)所示,这将导致神经网络退化成感知机,也就是由一个线性加权组合表达的分类器。神经网络之所以被公认很强大,可以拟合任何函数,正是因为它的非线性,当从神经网络中去掉激活函数后,相当于把神经网络从王者直接变成青铜。
3 常用的激活函数
常用的激活函数包括sigmoid、tanh、ReLU、Leaky ReLU、ELU、SELU、PReLU、Dice、maxout、softmax等,其中Leaky ReLU、ELU、SELU、PReLU、Dice的原理都是ReLU为基础进行一些改进,softmax是sigmoid的拓展,主要用于多分类网络的最后一层。激活函数的原理决定了其特点和适用场景,通过了解原理,可以在具体业务场景中更好地运用这些激活函数。
3.1 sigmoid
sigmoid激活函数被广泛使用,和生物神经元的激活逻辑最接近,其定义如式子(4)所示,函数图像如图3所示。
图3 sigmoid函数
sigmoid函数的特点明显:
根据sigmoid激活函数的特点,可以得到对应的优缺点。
其优点包括:
其缺点包括:
推导1 sigmoid激活函数梯度消失问题
根据梯度反向传播式子(2.2)有 ,而根据sigmoid的求导式子(5)有 ,w一般会进行标准化,因此w通常小于1,所以得到 ,可以看出,损失对y的梯度随着层数的增加按照每层1/4的大小缩小,当深度较深时,损失对y的梯度容易变得很小甚至消失。
根据式子(2.1)有 ,参数w的梯度依赖于y的梯度,当损失对y的梯度消失时,参数w的梯度也随之消失,从而造成梯度消失问题。
分析1 sigmoid激活函数zigzag现象
1 参数w的梯度方向特点
参数w的梯度为 ,由于sigmoid的导数 恒为正,y为上一层隐层经过sigmoid的输出,同样恒为正,因此参数w的梯度方向取决于 的梯度方向,而对同一层的所有参数w而言, 是相同的,所以同一层的参数w在更新时要么同时增大,要么同时减小,没有自己独立的正负方向。
2 为什么参数的梯度方向一致容易造成zigzag现象
当所有梯度同为正或者负时,参数在梯度更新时容易出现zigzag现象。zigzag现象如图4所示,不妨假设一共两个参数, 和 ,紫色点为参数的最优解,蓝色箭头表示梯度最优方向,红色箭头表示实际梯度更新方向。由于参数的梯度方向一致,要么同正,要么同负,因此更新方向只能为第三象限角度或第一象限角度,而梯度的最优方向为第四象限角度,也就是参数 要向着变小的方向, 要向着变大的方向,在这种情况下,每更新一次梯度,不管是同时变小(第三象限角度)还是同时变大(第四象限角度),总是一个参数更接近最优状态,另一个参数远离最优状态,因此为了使参数尽快收敛到最优状态,出现交替向最优状态更新的现象,也就是zigzag现象。
图4 sigmoid激活函数zigzag现象
sigmoid函数在什么情况下会出现zigzag现象呢(有兴趣的朋友可以先思考一下再看后面的内容)。从上面的分析可以看出,当梯度更新的最优方向不满足所有参数梯度正负向一致时,也就是有的参数梯度正向,有的参数梯度负向,容易出现zigzag现象。
两个参数时,出现zigzag现象的梯度更新最优方向为图4中的绿色背景部分,即第二象限和第四象限。在深度学习中,网络参数非常巨大,形成高维的空间,梯度更新的最优方向非常容易出现不同参数的梯度正负向不一致的情况,也就更容易造成zigzag现象。
抛开激活函数,当参数量纲差异大时,也容易造成zigzag现象,其中的原因和sigmoid函数造成的zigzag现象,是相通的。
3.2 tanh
tanh激活函数如式子(6)所示,函数图像如图5所示。
图5 tanh函数
tanh函数形状和sigmoid函数很相似,由tanh和sigmoid函数的定义有 ,因此tanh函数可以由sigmoid函数伸缩平移得到,所以tanh函数一些特点和sigmoid函数相同。
tanh函数特点:
根据tanh函数的特点可以得到其优缺点。
优点:输出关于原点对称,0均值,因此输出有正有负,可以规避zigzag现象,另外原点对称本身是一个很好的优点,有益于网络的学习。
缺点:存在梯度消失问题,tanh的导数计算为 ,取值范围为(0,1],虽然取值范围比sigmoid导数更广一些,可以缓解梯度消失,但仍然无法避免随着网络层数增多梯度连乘导致的梯度消失问题。
3.3 ReLU系列
ReLU系列的激活函数包括ReLU、Leaky ReLU、PReLU、ELU,在PReLU的基础上,又发展出Dice激活函数。这个系列的激活函数采用分段的思路,其中一段为线性,从而解决部分梯度消失的问题。
3.3.1 ReLU
ReLU(rectified linear unit)激活函定义为式子(7),函数图像如图6所示。
图6 ReLU函数
ReLU的导数为 ,当输入x为负时,导数为0,当输入x为正时,导数为1。
ReLU函数的分段性使其具有如下优点:
ReLU函数的缺点也很明显:
相比sigmoid和tanh,ReLU可明显改善梯度消失的问题,且计算高效,因此在业界被广泛使用。
ReLU的非线性
ReLU的非线性来源于不同隐层对不同神经元的激活,如图7所示,当神经元的输出为正时,神经元才被激活,即图7中蓝色神经元所示。虽然每个被激活的神经元的输入输出是线性关系,但通过每层选择部分神经元激活实现了输入输出的非线性。
图7 ReLU激活函数对神经元的选择
ReLU对神经元的选择,类似dropout,但两者原理不同。深度学习场景数据量复杂高维,ReLU根据神经元的输出进行选择,多层神经元的选择相当于在原始输入数据层增加稀疏度,这也是ReLU增加模型鲁棒性的原因,增加数据稀疏度可以起到去除噪音的效果。Dropout是动态去除一些神经元到下一层的连接,相当于是动态L2正则化,通过打压隐层连接参数W实现稀疏性。
3.3.2 基于ReLU的改进
ReLU激活函数使得输出为负值的神经元永久性dead,这个问题可以通过对ReLU函数负半轴的输出进行调整,使其不为0,从而得到解决。Leaky Relu、elu、selu等函数则是采用这种思路解决神经元永久性dead问题。
3.3.2.1 Leaky ReLU
Leaky ReLU激活函数如式子(8)所示,函数图像如图8所示。
图8 Leaky ReLU函数
Leaky ReLU函数中的参数 非常小,即负半轴的输入输出的线性斜率小。其优点是通过在负半轴引入非0线性输出,解决了ReLU的神经元dead问题;同时也带来了参数 需要手工调整的缺点。理论上Leaky ReLU激活函数效果好,但其优势在实际场景中并未得到证明,因此在具体业务中使用不多。
3.3.2.2 ELU和SELU
类似Leaky ReLU思路解决神经元dead问题的还有ELU和SELU,式子(9)为ELU函数,图9为其函数图像,式子(10)为SELU函数。从定义可以看出,SELU在ELU的基础上引入了一个缩放系数,其形状和ELU相似。
图9 ELU函数
ELU的导数为 。
ELU结合了ReLU和sigmoid,具备两者的优点:
ELU在输入负半轴采用指数的形式,这导致ELU相比ReLU存在计算复杂度较高的缺点。
SELU和ELU具有同样的特点。理论上ELU优于ReLU,但在推荐实际应用场景没有得到充分证明,可能和推荐领域网络深度不深有关系,在视觉领域网络层数深,相比ReLU、Leaky ReLU,ELU可以在网络收敛性上有优势。
3.3.2.3 PReLU
Leaky ReLU函数中引入了参数 ,存在依赖人工调整的缺陷,针对此,PReLU(Parametric ReLU)采用把 当成神经元的一个参数的思路,通过网络学习得到,从而使其不依赖于人工。
PReLU的定义和函数图像跟Leaky ReLU相同,如式子(8)和图8所示,其特点也和Leaky ReLU相同。不同的是,PReLU通过网络自身学习参数 ,使其和当前场景的数据更适配。
3.3.2.4 Dice
Dice(Data Adaptive Activation Function)激活函数出自论文DIN[3],发表于KDD2018,是针对PReLU的改进。ReLU系列的激活函数,不管数据分布如何,其阶跃点均在 处,论文根据对不同数据分布的输入其激活函数的阶跃点应进行对应调整的思路,提出Dice。
Dice的定义如式子(11)所示,其中p(s)为阶跃点的指示函数,如图10所示,E[s]和Var[s]为每个输入batch的均值和方差。图10对比了PReLU和Dice的阶跃点指示函数,可以看出,Dice激活函数的阶跃点随着输入数据的分布动态变化。
图10 PReLU和Dice阶跃点指示函数p(s)
Dice激活函数的优点在于可以根据输入数据的分布灵活调整阶跃点,使其和输入数据有更好的适配性。Dice的改进出发点和Batch nornalization的出发点相同,都是为了解决数据分布偏移问题。由于Dice的阶跃点需根据输入进行计算,带来了计算复杂度高的缺点。
3.4 Maxout
Maxout激活函数是对ReLU和Leaky ReLU的一般化归纳,其定义如式子(12)所示。当 时,为ReLU激活函数。当 时,为Leaky ReLU激活函数。
图11 Maxout函数
Maxout激活函数具有ReLU的优点:
其缺点在于每个神经元的参数增加了一倍导致整个网络的参数量增加。
3.5 softplus
softplus激活函数的定义如式子(13)所示,图像如图12所示,从函数定义和图像可以看出,softplus是ReLU的平滑版本。
图12 softplus函数
softplus用的比较少,但在我所在的业务中被使用时,取得了比较好的效果,这个会在后面一篇分享激活函数的业务应用中详细展开。
3.6 softmax
softmax激活函数是sigmoid激活函数的扩展,如式子(14)所示,通常用于多分类网络最后的输出层。softmax通过指数归一化方式,可以强化各项之间的区分度。
下一篇将分享激活函数在业务中的应用,以及相关的面试题和思考题。
以及朋友们有什么想要一起探讨的,可以在评论区告诉我,共同学习一起进步呀~
reference
[1] Introduction to Artificial Neural Network. https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.1082.1323&rep=rep1&type=pdf
[2] Application Areas A View of Artificial Neural Network Models in Different.
https://www.e3s-conferences.org/articles/e3sconf/pdf/2021/63/e3sconf_icpeam2020_03001.pdf
[3] Deep Interest Network for Click-Through Rate Prediction. https://dl.acm.org/doi/pdf/10.1145/3219819.3219823
—THE END—
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有