1. 什么是激活函数
??在神经网络中,我们经常可以看到对于某一个隐藏层的节点,该节点的激活值计算一般分为两步:
??(1)输入该节点的值为 x1,x2x1,x2 时,在进入这个隐藏节点后,会先进行一个线性变换,计算出值 z【1】=w1x1+w2x2+b【1】=W【1】x+b【1】z【1】=w1x1+w2x2+b【1】=W【1】x+b【1】 ,上标 11 表示第 11 层隐藏层。
??(2)再进行一个非线性变换,也就是经过非线性激活函数,计算出该节点的输出值(激活值) a(1)=g(z(1))a(1)=g(z(1)) ,其中 g(z)g(z) 为非线性函数。
2. 常用的激活函数
??在深度学习中,常用的激活函数主要有:sigmoid函数,tanh函数,ReLU函数。下面我们将一一介绍。
2.1 sigmoid函数
??在逻辑回归中我们介绍过sigmoid函数,该函数是将取值为 (?∞,+∞)(?∞,+∞) 的数映射到 (0,1)(0,1) 之间。sigmoid函数的公式以及图形如下:
g(z)=11+e?zg(z)=11+e?z
??对于sigmoid函数的求导推导为:
??sigmoid函数作为非线性激活函数,但是其并不被经常使用,它具有以下几个缺点:
???(1)当 zz 值非常大或者非常小时,通过上图我们可以看到,sigmoid函数的导数 g′(z)g′(z) 将接近 00 。这会导致权重 WW 的梯度将接近 00 ,使得梯度更新十分缓慢,即梯度消失。下面我们举例来说明一下,假设我们使用如下一个只有一层隐藏层的简单网络:
???对于隐藏层第一个节点进行计算,假设该点实际值为 aa ,激活值为 a【1】a【1】 。于是在这个节点处的代价函数为(以一个样本为例): $$ J^{【1】}(W) = \frac{1}//代码效果参考:http://www.ezhiqi.com/bx/art_4885.html{2} (a{【1】}-a)2 $$
???而激活值 a【1】a【1】 的计算过程为:
z【1】=w11x1+w12x2+b【1】z【1】=w11x1+w12x2+b【1】
a【1】=g(z【1】)a【1】=g(z【1】)
???于是对权重 w11w11 求梯度为:
ΔJ【1】(W)Δw11=(a【1】?a)?(a【1】)′=(a【1】?a)?g′(z【1】)?x1ΔJ【1】(W)Δw11=(a【1】?a)?(a【1】)′=(a【1】?a)?g′(z【1】)?x1
???由于 $ g'(z^{【1】}) =g(z{【1】})(1-g(z{【1】})) ,当,当 z^{【1】}//代码效果参考:http://www.ezhiqi.com/bx/art_1673.html $ 非常大时,g(z【1】)≈1,1?g(z【1】)≈0g(z【1】)≈1,1?g(z【1】)≈0 因此, g′(z【1】)≈0,ΔJ【1】(W)Δw11≈0g′(z【1】)≈0,ΔJ【1】(W)Δw11≈0。当 z【1】z【1】 非常小时,g(