DeepAI

【吴恩达深度学习】—神经网络中的激活函数

2020-03-08  本文已影响0人  Sunflow007
32.jpg

1.激活函数

使用一个神经网络时,需要决定使用哪种激活函数(Activation functions)用隐藏层上,哪种用在输出节点上。到目前为止,之前只用过 sigmoid 激活函数,但是,有时其他的激活函数效果会更好。

常用的四种激活函数:

图像如下:

微信截图_20190730172718.png

1.1 sigmoid函数

公式:a =\sigma(z) = \frac{1}{1+e^{-Z}}
sigmoid函数的值域:(0,1),现在基本上使用sigmoid函数的场合很少,大多数情况下使用tanh函数替代,tanh函数在所有场合都优于 sigmoid 函数。除非在二分类情况下,期待输出的y值为0或1(而不是-1和1)

1.2 tanh函数

公式:a =\sigma(z) = \frac{1}{1+e^{-Z}}

tanh 函数是 sigmoid 的向下平移和伸缩后的结果。对它进行了变形后,穿过了(0,0)点,并且值域介于+1 和-1 之间。结果表明,如果在隐藏层上使用tanh 函数,效果总是优于 sigmoid 函数。且在训练一个算法模型时,如果使用 tanh 函数代替sigmoid 函数中心化数据,使得数据的平均值更接近 0 而不是sigmoid函数的0.5

sigmoid和tanh函数的缺点:

在z特别大或者特别小的情况下,导数的梯度或者函数的斜率会变得特别小,最后就会接近于0,导致降低梯度下降的速度。

1.3 ReLu函数

公式:a = max(0,z)

修正线性单元(Rectified linear unit,ReLU)是在机器学习中很流行的一个函数,用其替代sigmoid函数可大幅加速梯度下降的过程,降低训练时间。

如图,函数分为两个部分,左半部分z<0时,函数值恒 = 0,导数 = 0;右半部分当z >= 0 时,函数是斜率为1的线性函数,导数恒 = 1.

这有一些选择激活函数的经验法则:

如果输出是0、1值(二分类问题),则输出层选择sigmoid /tanh函数,然后其它的所有单元都选择Relu函数。

1.4 Leaky ReLu函数

公式:a = max(0.01z,z)

Leaky ReLu是Relu的改装版,当z是负值时,这个函数的值不是等于 0,而是轻微的倾斜,为什么常数是 0.01?其实是个经验值,当然,也可以选择不同的参数。 这个函数通常比 Relu 激活函数效果要好,尽管在实际中 Leaky ReLu 使用的并不多。

Relu由于在z < 0时,梯度直接为0,神经元此时不会训练,即大大加速了模型训练,节约时间。但同时会产生所谓的稀疏性,为了平衡稀疏性和模型训练效率,才诞生了 Leaky ReLu。

2.激活函数的导数

2.1 sigmoid

g(z) = \frac{1}{1+e^{-Z}}\frac{d}{dz}g(z) = \frac{1}{1+e^{-Z}}(1-\frac{1}{1+e^{-Z}}) = g(z) (1-g(z))
在神经网络中:\frac{d}{dz}g(z) = g(z) (1-g(z)) = a(1-a)

2.2 tanh

g(z) = tanh(z) = \frac{e^{Z}-e^{-Z}}{e^{Z}+e^{-Z}}\frac{d}{dz}g(z) = 1-(tanh(z))^2

2.3 ReLu

g(z) = max(0,z)g'(z) = \begin{cases} 0 \qquad \quad \qquad if \quad z<0 \\ 1 \qquad \quad \qquad if \quad z>0 \\ undifined \quad if \quad z=0\ \end{cases}
通常在z = 0的时候给定其导数0或1,不过z = 0的情况很少

2.4 Leaky ReLu

g(z) = max(0.01z,z)g'(z) = \begin{cases} 0.01 \qquad \qquad if \quad z<0 \\ 1 \qquad \quad \qquad if \quad z>0 \\ undifined \quad if \quad z=0 \end{cases}
通常在z = 0的时候给定其导数0.01或1,不过z = 0的情况很少

上一篇下一篇

猜你喜欢

热点阅读