ReLU(修正线性单元,rectified linear unit)
/ RAY-loo /
ReLU 是能想象到的最简单而又有用的激活函数,它驱动着当今绝大多数深度学习。规则只有一行:如果输入是正的,就原样放过;如果是负的,就输出零。就这么简单。想象一个单向阀门——信号在正方向上自由流过,在负方向上则被彻底拦住。尽管朴素,这个小小的折弯就足以给网络提供它所需的全部非线性。
ReLU 为何把平滑的 S 形曲线们赶下了王座?两个原因。其一,它在正的一侧不会饱和——对任何正输入,斜率都恰好是 1,于是学习信号原封不动地反向传回,躲开了在深层网络里折磨 sigmoid 和 tanh 的梯度消失问题。其二,它计算起来便宜得离谱:只是「留着或归零」,全无指数那种昂贵的曲线。两者合起来,让研究者得以训练比从前深得多的网络,而这在很大程度上正是深度学习时代得以到来的原因。
ReLU 并非完美无瑕。由于它对所有负输入都输出一个平坦的零,一个神经元有时会卡死在永远输出零的状态——也就是所谓「死掉」的神经元,它再也回不来了,因为零输出意味着零学习信号。一个常见的补救是 leaky ReLU(漏整流),它在负的一侧放过一丝细流(比如输入乘以 0.01),而不是硬生生的零,从而让神经元保持存活。这类变体随处可见,但朴素的 ReLU 仍是稳妥的默认选择。
把数值 -5、-0.1、0、2、100 送进 ReLU,你得到 0、0、0、2、100。所有负的都被压平成零;所有正的都原封不动地通过。换成 leaky ReLU,它则会把 -5 变成 -0.05、把 -0.1 变成 -0.001——一缕微弱的负向低语,使那些神经元不至于永久沉默。
ReLU:留下正数,把负数归零。leaky ReLU 则在零以下放过一丝细流。
ReLU 是隐藏层的标准默认选择——但不是输出层的。当你需要概率时,输出端要用 sigmoid 或 softmax。还要当心卡在零上「死掉」的神经元;学习率过大会让它们更常出现。