ReLU関数

Rectified Linear Unit

ReLU(Rectified Linear Unit)とは、f(x) = max(0, x)で定義される活性化関数です。入力が正ならそのまま出力し、負なら0を出力するシンプルな関数ですが、深層学習の性能を大幅に向上させた革新的な存在です。

ReLUの利点

計算が高速(条件分岐のみ)、勾配消失問題を大幅に軽減(正の領域で勾配が1)、スパースな活性化パターンを生み出す(一部のニューロンのみ活性化)という3つの大きな利点があります。

表:ReLU関数の要点まとめ
ひとことで言うと「マイナスなら0、プラスならそのまま」という、最もよく使われる活性化関数。
何がうれしいか計算が非常に軽く、勾配消失が起きにくいので深いモデルでも学習が進む。
注意点常に0を出し続けて学習が止まる「死んだReLU」が起きることがある。

Dying ReLU問題

負の入力に対して勾配が常に0となるため、学習中に一度「死んだ」ニューロン(常に0を出力)は二度と回復しない「Dying ReLU」問題があります。

図:ReLUの動き
1入力値正負どちらもあり得る
▶
20以下か判定符号を見る
▶
30以下→0その先へ伝えない
▶
40超→そのまま値を素通しする

ReLUの変種

Dying ReLU問題を解決するため、Leaky ReLU(負の領域に小さな勾配)、Parametric ReLU(勾配を学習可能に)、ELU、GELU、Swishなどの変種が提案されています。特にGELUはTransformerで標準的に使用されています。