激活函数
使用 S 型函数作为隐藏单元上的激活函数,S 型函数的导数最大值为 0.25(如上所示)。这意味着,当你用 S 型函数单元进行反向传播时,网络上每层出现的错误至少减少 75%,如果有很多层,权重更新将很小,这些权重需要很长的训练时间。因此,S 型函数不适合作为隐藏单元上的激活函数。
初识修正线性单元(ReLU)
如果输入小于 0,修正线性单元的输出是 0,原始输出则相反。即如果输入大于 0,则输出等于输入。函数的输出是输入值 x x 或 0 0(取较大者)。所以,如果 x = -1 x=?1,那么 f(x) = 0 f(x)=0;如果 x =0.5 x=0.5,那么 f(x) = 0.5 f(x)=0.5
ReLU 激活函数是你可以使用的最简单非线性激活函数。当输入是正数时,导数是 1,所以没有 S 型函数的反向传播错误导致的消失效果。研究表明,对于大型神经网络来说,ReLU 的训练速度要快很多。
不足:有时候一个非常大的梯度流过一个 ReLU 神经元,更新过参数之后,会使ReLU神经元始终为 0(这个神经元再也不会对任何数据有激活现象了)。这些“无效”的神经元将始终为 0,很多计算在训练中被浪费了。
Softmax
softmax 函数将每个单元的输出压缩到 0 和 1 之间。但 softmax 函数在拆分输出时,会使输出之和等于 1。softmax 函数的输出等于分类概率分布,显示了任何类别为真的概率。
softmax 函数与普通 sigmoid 之间的真正差别是 softmax 会标准化输出,使输出之和等于 1。对于这两种函数,你都可以输入向量,并获得输出为相同大小的向量,但是所有值都压缩在 0 和 1 之间。sigmoid 可用于只有一个输出单元的二元分类。但是如果进行多项分类的话,则需要使用多个输出单元(每个类别一个单元),并对输出进行 softmax 激活。
只需记住输出经过压缩,和为 1。