神经网络的激活函数总结
广而告之
SIGAI-AI学习交流群的目标是为学习者提供一个AI技术交流与分享的平台。操作指引:关注本微信公众号,回复“芝麻开门”,即可收到入群二维码,扫码即可。
同时在本微信公众号中,回复“SIGAI”+日期,如“SIGAI0515”,即可获取本期文章的全文下载地址(仅供个人学习使用,未经允许,不得用于商业目的)。
导言
激活函数在神经网络中具有重要的地位。在SIGAI之前的公众号文章“理解神经网络的激活函数”中,我们回答了3个关键的问题:
为什么需要激活函数?
什么样的函数能用作激活函数?
什么样的函数是好的激活函数?
这篇文章从理论的角度介绍了激活函数的作用。承接上篇,在今天这篇文章中,SIGAI将为大家介绍当前深度学习中常用的一些激活函数,包括它们的工程实现。我们将以Caffe为例。
激活函数实现的是一对一的变换,即用相同的函数对输入向量的每个分量进行映射,得到输出向量,输入和输出向量的维数相同:
其中x和y都是n维向量。写成分量的形式为:
在工程实现时,如果将激活函数作为一个单独的层,则在正向传播时对输入向量的每个分量计算激活函数值f(x)。在反向传播时对输入数据计算导数值f’(x),然后乘以后一层送入的误差项,得到本层的误差项,送人前一层中:
如果你对反向传播算法的原理还不清楚,请阅读SIGAI之前的公众号文章“反向传播算法推导-全连接神经网络”。这里的乘法是向量逐元素对应相乘。由于激活函数没有需要学习训练得到的参数,因此无需根据误差项计算本层参数的导数值。
在神经网络的早期阶段,sigmoid函数,tanh被广为使用。在AlexNet出现之后,ReLU函数逐渐取代了这两个函数,得到了广泛使用,因为ReLU函数更不容易产生梯度消失问题。如果你对梯度消失问题,激活函数的饱和性还不清楚,请阅读我们之前的公众号文章“理解神经网络的激活函数”。
由于当前被提出的激活函数众多,为了便于大家理解与记忆,我们对此做了总结。各种常用的激活函数与它们的导数如下表所示:
根据这些函数的定义,我们很容易计算出它们的导数。
下面我们以Caffe为例,介绍这些激活函数的具体实现细节。在Caffe中,激活函数是一个单独的层,把它和全连接层,卷据层拆开的好处是更为灵活,便于代码复用和组合。因为无论是全连接层,还是卷据层,它们激活函数的实现是相同的,因此可以用一套代码来完成。
激活函数由神经元层完成,它们的基类是NeuronLayer,所有的激活函数层均从它派生得到,下面分别进行介绍,限于篇幅,我们只介绍一部分,其他的原理类似。此外,Dropout机制也由神经元层实现。
SigmoidLayer类实现了标准sigmoid激活函数。正向传播函数对每个输入数据计算sigmoid函数值,在这里count是输入数据的维数。实现代码如下:
TanHLayer类实现了tanh激活函数。正向传播函数实现代码如下:
类ReLULayer实现ReLU激活函数,和前面介绍的标准ReLU不同,这里做了改进,定义为:
其中a是人工设定的大于0的参数。显然该函数的导数为:
下面来看正向传播函数的代码:
反向传播函数的实现如下:
ELULayer类实现ELU激活函数,是直线函数和指数函数的结合。当x>0时函数值为x;当x<0是一条衰减的指数函数曲线。可以证明,当
这样可以通过函数值得到导数值,减少计算量。正向传播函数的实现如下:
类PReLULayer实现了PReLU激活函数。正向传播函数的实现如下:
反向传播函数的实现如下:
类DropoutLayer实现Dropout机制。在训练阶段,随机丢掉一部分神经元,用剩下的节点进行前向和后向传播。这里实现时通过二项分布随机数来控制神经元是否启用,如果随机数取值为1则启用,否则不启用。正向传播函数的实现如下:
▲向上滑动查看更多推荐文章
科普类
【获取码】SIGAI0413
【获取码】SIGAI0620
【获取码】SIGAI0704
理解计算:从√2到AlphaGo ——第2季 神经计算的历史背景
【获取码】SIGAI0713
理解计算:从√2到AlphaGo ——第3季 神经计算的数学模型
数学类
【获取码】SIGAI0417
【获取码】SIGAI0511
【获取码】SIGAI0518
【获取码】SIGAI0531
机器学习类
【获取码】SIGAI0428
【获取码】SIGAI0505
【获取码】SIGAI0522
【获取码】SIGAI0601
【群话题精华】五月集锦—机器学习和深度学习中一些值得思考的问题
【获取码】SIGAI0602
【获取码】SIGAI0606
【获取码】SIGAI0611
【获取码】SIGAI0613
【获取码】SIGAI0618
【获取码】SIGAI0627
【获取码】SIGAI0704
【获取码】SIGAI0706
【获取码】SIGAI0711
【获取码】SIGAI0723
【获取码】SIGAI0725
深度学习类
【获取码】SIGAI0426
【获取码】SIGAI0508
【获取码】SIGAI0515
【获取码】SIGAI0625
【获取码】SIGAI0709
【获取码】SIGAI0718
【获取码】SIGAI0723
机器视觉类
【获取码】SIGAI0420
【获取码】SIGAI0424
【获取码】SIGAI0503
【获取码】SIGAI0525
【获取码】SIGAI0604
FlowNet到FlowNet2.0:基于卷积神经网络的光流预测算法
【获取码】SIGAI0608
【获取码】SIGAI0615
【获取码】SIGAI0622
【获取码】SIGAI0629
【获取码】SIGAI0716
【获取码】SIGAI0727
工业应用类
【获取码】SIGAI0529
SIGAI补充声明
上期文章《基于内容的图像检索技术综述——传统经典方法》中,参考文献未曾给出,现补充如下:
参考文献
[1]李大湘, 吴倩, 李娜. 融合LBP特征与LSH索引的鞋印图像检索[J]. 警察技术, 2016(3):47-49.
[2]Kim T E, Kim M H. Improving the search accuracy of theVLAD through weighted aggregation of local descriptors [J]. Journal of VisualCommunication & Image Representation, 2015, 31(C):237-252.
[3]Kim M. Dual soft assignment clustering algorithm for humanaction video clustering[J]. Computer Vision & Image Understanding, 2017,155:106-112.
[4]Yang J, Yu K, Gong Y, et al. Linear spatial pyramidmatching using sparse coding for image classification[J]. 2009:1794-1801.
[5]Sch?lkopf B, Platt J, Hofmann T. Efficient sparse codingalgorithms[J]. Proc of Nips, 2007, 19:801-808.
[6]王瑞霞. 基于稀疏编码的图像检索技术及其应用研究[D]. 西北工业大学, 2016.
[7]林中正. 图像稀疏表示方法及其在图像检索领域的应用研究[D]. 华东理工大学, 2013.
[8] Wang J, Yang J, Yu K, et al. Locality-constrained LinearCoding for image classification[C]// Computer Vision and Pattern Recognition.IEEE, 2010:3360-3367.
再次对上期作者manyi以及广大SIGAI小伙伴表示感谢。