博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
神经网络的激活函数总结
阅读量:7250 次
发布时间:2019-06-29

本文共 2130 字,大约阅读时间需要 7 分钟。

9f46ef1907ecf8b23588717a52cc35057c7d819b

导言

激活函数在神经网络中具有重要的地位。在之前的公众号文章“”中,我们回答了3个关键的问题:

为什么需要激活函数?

什么样的函数能用作激活函数?

什么样的函数是好的激活函数?

这篇文章从理论的角度介绍了激活函数的作用。承接上篇,在今天这篇文章中,将为大家介绍当前深度学习中常用的一些激活函数,包括它们的工程实现。我们将以Caffe为例。

激活函数实现的是一对一的变换,即用相同的函数对输入向量的每个分量进行映射,得到输出向量,输入和输出向量的维数相同:

1240

其中x和y都是n维向量。写成分量的形式为:

1240

在工程实现时,如果将激活函数作为一个单独的层,则在正向传播时对输入向量的每个分量计算激活函数值f(x)。在反向传播时对输入数据计算导数值f’(x),然后乘以后一层送入的误差项,得到本层的误差项,送人前一层中:

1240

如果你对反向传播算法的原理还不清楚,请阅读之前的公众号文章“”。这里的乘法是向量逐元素对应相乘。由于激活函数没有需要学习训练得到的参数,因此无需根据误差项计算本层参数的导数值。

在神经网络的早期阶段,sigmoid函数,tanh被广为使用。在AlexNet出现之后,ReLU函数逐渐取代了这两个函数,得到了广泛使用,因为ReLU函数更不容易产生梯度消失问题。如果你对梯度消失问题,激活函数的饱和性还不清楚,请阅读我们之前的公众号文章“”。

由于当前被提出的激活函数众多,为了便于大家理解与记忆,我们对此做了总结。各种常用的激活函数与它们的导数如下表所示:

1240

根据这些函数的定义,我们很容易计算出它们的导数。

下面我们以Caffe为例,介绍这些激活函数的具体实现细节。在Caffe中,激活函数是一个单独的层,把它和全连接层,卷据层拆开的好处是更为灵活,便于代码复用和组合。因为无论是全连接层,还是卷据层,它们激活函数的实现是相同的,因此可以用一套代码来完成。

激活函数由神经元层完成,它们的基类是NeuronLayer,所有的激活函数层均从它派生得到,下面分别进行介绍,限于篇幅,我们只介绍一部分,其他的原理类似。此外,Dropout机制也由神经元层实现。

SigmoidLayer类实现了标准sigmoid激活函数。正向传播函数对每个输入数据计算sigmoid函数值,在这里count是输入数据的维数。实现代码如下:

1240

TanHLayer类实现了tanh激活函数。正向传播函数实现代码如下:

1240

类ReLULayer实现ReLU激活函数,和前面介绍的标准ReLU不同,这里做了改进,定义为:

1240

其中a是人工设定的大于0的参数。显然该函数的导数为:

1240

下面来看正向传播函数的代码:

1240

反向传播函数的实现如下:

1240
1240

1240

这样可以通过函数值得到导数值,减少计算量。正向传播函数的实现如下:

1240

类PReLULayer实现了PReLU激活函数。正向传播函数的实现如下:

1240

反向传播函数的实现如下:

1240

类DropoutLayer实现Dropout机制。在训练阶段,随机丢掉一部分神经元,用剩下的节点进行前向和后向传播。这里实现时通过二项分布随机数来控制神经元是否启用,如果随机数取值为1则启用,否则不启用。正向传播函数的实现如下:

1240

推荐阅读

[1]  SIGAI 2018.4.13.

[2] SIGAI 2018.4.17.

[3]  SIGAI 2018.4.20.

[4]  SIGAI 2018.4.24.

[5]  SIGAI 2018.4.26.

[6] SIGAI2018.4.28.

[7]  SIGAI 2018.5.3.

[8]  SIGAI 2018.5.5.

[9]  SIGAI2018.5.8.

[10]  SIGAI 2018.5.11.

[11]  SIGAI2018.5.15

[12]  SIGAI 2018.5.18

[13]  SIGAI2018.5.22

[14]  SIGAI2018.5.25

[15] (上) SIGAI 2018.5.29

[16]  SIGAI 2018.5.31

[17] SIGAI 2018.6.1

[18]  SIGAI2018.6.2

[19]  SIGAI2018.6.4

[20]  SIGAI 2018.6.6

[21]  SIGAI2018.6.8

[22]  SIGAI 2018.6.11

[23]  SIGAI 2018.6.13

[24]  SIGAI 2018.6.15

[25]  SIGAI 2018.6.18

[26]  SIGAI 2018.6.20

[27]  SIGAI2018.6.22

[28]  SIGAI2018.6.25

[29]  SIGAI 2018.6.27

[30]  SIGAI 2018.6.27

[31]  SIGAI2018.7.4

[32]  SIGAI2018.7.6

[33] SIGAI2018.7.9

[34] SIGAI0709.

[35] SIGAI0711.

[36] SIGAI0716

[37]

[38]  【获取码】SIGAI0718

[39] 【获取码】SIGAI0720

[40]  【获取码】SIGAI0723

[41]  【获取码】SIGAI0725

[42 【获取码】SIGAI0727

转载地址:http://uwebm.baihongyu.com/

你可能感兴趣的文章
Exchange2010 dag 的缷载
查看>>
2011/11/14 1:52 坚持就会胜利
查看>>
oracle概念和术语 建表时的一些参数pctfree initrans maxtrans sto
查看>>
我的友情链接
查看>>
转ApplicationContext的三种实现方式以及在web.xml配置的两种方式
查看>>
【我的软考之路】我的网工备考之路~
查看>>
mysql5.7.10安装
查看>>
IP数据包的分片与重组过程
查看>>
命好不如习惯好
查看>>
/etc/X11/xorg.conf 文件被误改后进不了图形化界面
查看>>
Android 通过反射及AIDL获取双卡手机SIM卡相关信息,及注册监听
查看>>
shell批量新建文件及批量改名
查看>>
APP适配安卓手机刘海屏
查看>>
bind10 新版本发布(版本号bind10-devel-20120816)
查看>>
junit 参数化测试
查看>>
分区表维护
查看>>
听说iPhone X到货了,识别体验是不是科技感爆棚?
查看>>
windows server2012中创建密码重设盘
查看>>
openstack-icehouse部署中遇到的一些故障(小笔记)
查看>>
redhat 替换 yum
查看>>