激活函数
使用一个神经网络时, 需要决定使用哪种激活函数用隐藏层上, 哪种用在输出节点上.
在神经网路的前向传播中,
这两步会使用到 sigmoid 函数. sigmoid 函数在这里被称为激活函数.
sigmoid 函数
之前在线性回归中, 我们用过这个函数, 使我们的输出值平滑地处于 0~1 之间.
说明: 除非输出层是一个二分类问题否则基本不会用它.
双曲正切函数
tanh 函数是 sigmoid 的向下平移和伸缩后的结果. 对它进行了变形后, 穿过了原点, 并且值域介于 + 1 和 - 1 之间.
结果表明, 如果在隐藏层上使用函数 tanh 效果总是优于 sigmoid 函数. 因为函数值域在 - 1 和 + 1 的激活函数, 其均值是更接近零均值的. 在训练一个算法模型时, 如果使用 tanh 函数代替 sigmoid 函数中心化数据, 使得数据的平均值更接近 0 而不是 0.5.
说明: tanh 是非常优秀的, 几乎适合所有场合
修正线性单元的函数(ReLu)
sigmoid 函数与双曲正切函数都有一个共同的问题, 在 Z 特别大或者特别小的情况下, 导致梯度或者函数的斜率变得特别小, 最后就会接近于 0, 导致降低梯度下降的速度.
线性整流函数(Rectified Linear Unit, ReLU), 又称修正线性单元, 是一种人工神经网络中常用的激活函数(activation function), 通常指代以斜坡函数及其变种为代表的非线性函数.
Relu 作为神经元的激活函数, 定义了该神经元在线性变换 之后的非线性输出结果. 换言之, 对于进入神经元的来自上一层神经网络的输入向量 , 使用线性整流激活函数的神经元会输出 至下一层神经元或作为整个神经网络的输出(取决现神经元在网络结构中所处位置).
只要是 WTX+b 正值的情况下, 导数恒等于 1, 当 WTX+b 是负值的时候, 导数恒等于 0. 从实际上来说, 当使用的导数时, WTX+b=0 的导数是没有定义的.
选择激活函数的经验法则:
如果输出是 0,1 值(二分类问题), 则输出层选择 sigmoid 函数, 然后其它的所有单元都选择 Relu 函数.
最常用的默认函数,, 如果不确定用哪个激活函数, 就使用 ReLu 或者 Leaky ReLu
带泄露线性整流函数(Leaky ReLU)
在输入值 为负的时候, 带泄露线性整流函数 (Leaky ReLU) 的梯度为一个常数 , 而不是 0. 在输入值为正的时候, 带泄露线性整流函数和普通斜坡函数保持一致.
在深度学习中, 如果设定 为一个可通过反向传播算法 (Backpropagation) 学习的变量, 那么带泄露线性整流又被称为参数线性整流(Parametric ReLU)
来源: http://www.bubuko.com/infodetail-2947320.html