ReLU とその発展型の活性化関数 [GELU, Swish, Mishなど]

1. ReLU の概要

ReLU (Rectifier Linear Units: 整流線形ユニット)[Nair et al., 2010] は,畳み込みニューラルネットワーク(CNN)やその他のディープニューラルネットワークにおいて用いられる活性化関数である.この記事では,ReLUとその発展型についてまとめる.

ReLUは,引数に入ってきたニューロン値$x$をもとに,$x$が正の範囲の場合はそのまま値を変えず$x$で出力して,$x$が負の値の場合は0を出力する,以下の関数である:

\begin{equation} f(x) = \max (0,x) \end{equation}

ReLUは,旧来のtanhを線形化して似た作用を起こしつつ高速な学習を促すことを目指したものである.tanhと比べると,1つ前の層に微分値が飽和せずに伝わりやすく,高速な収束を促すことができるのが一番の利点である (1.2節).これにより,ディープニューラルネットワークの層数も増しやすくなり,以降はCNNの多層化が進む結果にもつながった.

ReLUなどの活性化関数
図1 ReLU系の活性化関数.ReLUと,その発展系であるSwishとMishを可視化している.

ReLUは,有名なAlexNetの研究で採用されて実績を残した事をきっかけとして,その後ディープニューラルネットワーク用の活性化関数として定番化した.

また,ReLUの改善版も多数研究されている(2節).ReLUは線形的な関数であるが,ReLUを非線形関数で近似することで改良した発展系として,LeakyReLUやPReLU (2.1節) などが提案され,ReLUの代わりにそれらが使われ出すようになった.近年では線形のReLU代用として,ReLUに形状が似た非線形の関数としてSwish, Mish などが活性化関数として用いられることが多い (図1).

1.1 ReLUの挿入箇所とその役割

畳み込みニューラルネットワークは,「畳み込み層(線形) – バッチ正規化 – ReLU(活性化関数) – プーリング層」のモジュールを何度も繰り返す構造を取ることが通例である.

ReLUは,以下のように線形層(全結合層 or 畳み込み層)によるアフィン変換の直後に,活性化目的で使用されることがほとんどである [Goodfellow et al., 2016](6.3.1節):

\begin{equation} \bm{h} = f(\bm{W}^{\mathsf{T}}\bm{x} + \bm{b}) \end{equation}

CNNにおける活性化関数(ReLU含む)の役割は,古典的な画像処理におけるコーナー検出・エッジ検出や,物体検出で行われる後処理であるNon-maximum Suppression(NMS)に相当していると考えると理解しやすい.

畳み込み層を経て,ノイズ混じりでありながらも,畳み込みカーネルと類似した箇所に強い応答を得た特徴マップをまず得るが,直後のReLUでは,応答値の強い箇所だけを更に活性化させつつ,他のノイズ部分は応答を下げて抑える検出器(detector)の役割を担っている.(※ ただし,各活性化関数はNMSのように「極大値の座標だけ生き残らせて他は全て0値にする」わけではないので注意)

また,[Glorot et al., 2011]でも強調されているように,ReLUは入力前の値の50%程度を0にさせて,スパースな特徴マップを得やすい利点がある.これにより計算高速化のメリットも生じるので,層数の多いディープラーニングでは有利になる(逆に言うと,ReLU層を挿入しすぎると,必要な情報まで中間層でたくさん消してしまう可能性も高くなる).

1.2 tanhとシグモイドの課題の克服

以前のニューラルネットワークでは$\tanh$ [LeCun et al., 1998] やシグモイド(ロジスティック関数)が活性化関数として主に使われていた.しかし,これらにはDeep Learningで用いるには課題があった.

これらのsigmoid形の活性化関数は,入力のニューロン値$x$の微分が,関数の曲線の先の方にあると($\sigma(x) \leftarrow 0$ or $\sigma(x) \rightarrow 1$),値が1で飽和してしまってその微分値がほとんど0になってしまい,学習中に勾配消失がすぐ起きがちであった(図2).よって,各活性化関数部分で$(-1,1)$の範囲を超えないように,入力画像の正規化や,誤差逆伝播中の学習率も気をつけないといけないなど,職人的な対策が必要であり,学習も高速に行えない面があった.

図2 sigmoid関数 (左)と tanh関数(右)

一方,ReLUは,単純な関数で計算も楽でありつつ,上記のsigmoid系の活性化関数の課題を克服している.

ReLUの微分値は$x>0$の範囲では1であり,$x<0$の範囲は0である.また$x=0$では微分不可である(図3 右).

ReLUとその微分.
図3 ReLUとその微分.左側グラフがReLU関数.右側グラフがReLUの微分値.

ReLUは,正の入力では微分値が1なので,tanh・シグモイドのような飽和は発生せず,スムーズな微分値の逆伝播が可能となった.これにより,活性関数の挿入回数の多いディープなニューラルネットワークでも,勾配消失が少なくなり,なおかつ微分逆伝播量も多いゆえ,SGDによる学習を以前より速く収束させやすくなった [Glorot et al., 2011].

1.3 ReLU の利点

既に話したものも含めて,以下に「ReLUの利点」を整理しておく:

  • 飽和をしない関数形:ニューロン値$x$が大きくなっても,微分値は全て1なので飽和しない.したがって,sigmoid系の活性化関数よりも収束が速く,勾配消失も起きづらい.
  • 計算効率が良い:指数関数が登場するsigmoid系と異なり,足し算/掛け算/max演算だけで済み計算が高速.
  • 疎(Sparse)な表現:ゼロ値を取れるおかげで,ランダム初期化後にそこそこのユニットだけが非負値として活性化される.おかげで,スパースな中間層ができあがり学習済みモデルもシンプルになり,収束もテストも速い.[]
  • 学習の安定性の向上:tanh, sigmoidでは必須であった「繊細な初期化による調整」や「入力の正則化」などの工夫が不必要になり,安定して収束しやすくなった.
  • AlexNetでの使用実績:AlexNetでReLUが使用されたことが,最初の大規模ネットワークに対するReLU使用の実績となりインパクトを与えた.これにより,ReLUとその発展型を活性化関数として使用することが,ディープラーニング全般で標準的となった.

2 ReLU の発展系

ReLUの関数形を少しアレンジして,似たような性質を保持したままReLUを改良した活性化関数が,その後提案されていった.2節では,それらのうち代表例を列挙する.

2.1 Leaky ReLU と PReLU

Leaky ReLU [Maas et al., 2013]は,以下の関数である:

\begin{equation}
f(x) = \begin{cases}
x & (x \geq 0) \\
0.01x & (x < 0)
\end{cases}
\end{equation}

Leakyという形容詞の通り,ReLUの$x < 0$側を傾けることで,少しだけ情報をリークさせて流すことができるようにしたものである.

PReLU (Parametric Rectified Linear Units) [He et al., 2015] は,LeakyReLUと形は同じだが,傾き係数$a$も学習可能なパラメータにしたものである (通常は$a = 0.25$で初期化して学習開始).

\begin{equation}
f(x) = \begin{cases}
x & (x \geq 0) \\
ax & (x < 0)
\end{cases}
\end{equation}

2.2 GELU (Gaussian Error Linear Units)

GELU (Gaussian Error Linear Units) [Hendrycks and Gimpel et al., 2016] は,以下の活性化関数である(github):

\begin{equation} f(x) = x \cdot \phi(x) \end{equation}

ここでで$\phi(x)$は,標準正規分布$X \sim \mathcal{N}(\mu, \sigma^2)$($\mu=0,\sigma=1$)の累積分布関数である.GELUが$\beta =1.4$の場合,Swishと類似した関数形になる.

GELUは,BERT [Devlin et al., 2019] の活性化関数層に使用されている.

2.3 Swish

Swish [Ramachandran et al., 2017]は,強化学習を用いて,最高性能を出す活性化関数形を探索した結果得られた以下の関数である:

\begin{equation} f(x) = x \cdot \sigma(\beta x) \end{equation} 

ここで,$\sigma(z) = (1+ \exp(-z))^{-1}$はsigmoid関数であり,$\beta$は定数もしくは学習可能な係数である.(2021年現在)Swithは,近年の最先端のコンピュータビジョン研究で,よく用いられている.

2.4 Mish

上記の全ての性能を上回る活性化関数として,Mish [Misra 2020]が登場している(github):

\begin{equation}f(x) = \tanh(softplus(x)) \end{equation}

ここで$softplus$関数は,[Nair and Hinton., 2010]で提案された,ReLUのような形状の$softplus(x) = log(1 + exp(x))$という関数である.

Mish は物体検出の Yolo v4でも活性化関数として用いられているなど,今後使われる機会が増えそうな最新の活性化関数である.

3 まとめ

この記事では,ディープニューラルネットワークで用いられる活性化関数「ReLU」の基本的な仕組みと性質を紹介した.

また,ReLUの発展系として,PReLUや,GELU, Swish,Mishなどを概要だけ紹介した.

References

  • [Devlin et al., 2019] Jacob Devlin, Ming-Wei Chang, Kenton Lee, and Kristina Toutanova, “BERT: Pre-training of deep bidirectional trans- formers for language understanding,” in NAACL, 2019.
  • [Glorot et al., 2011] Glorot, Xavier, Antoine Bordes, and Yoshua Bengio. “Deep sparse rectifier neural networks.” Proceedings of the fourteenth international conference on artificial intelligence and statistics. JMLR Workshop and Conference Proceedings, 2011.
  • [Goodfellow et al., 2016] Goodfellow, Ian, Yoshua Bengio, and Aaron Courville. Deep learning. MIT press, 2016.
  • [Hendrycks and Gimpel et al., 2016] D. Hendrycks and k. Gimpel. 2016. Bridging nonlinearities and stochastic regularizers with gaussian error linear units. CoRR, abs/1606.08415.
  • [Le et al., 2015] Le, Q. V., Jaitly, N., & Hinton, G. E. (2015). A simple way to initialize recurrent networks of rectified linear units. arXiv preprint arXiv:1504.00941.
  • [LeCun et al., 1998] LeCun, Y., Bottou, L., Orr, G., and Muller, K. (1998). Efficient backprop.
  • [Maas et al., 2013] Andrew L Maas, Awni Y Hannun, and Andrew Y Ng. Rectifier nonlinearities improve neural network acoustic models. In International Conference on Machine Learning, volume 30, 2013.
  • [Misra 2020] Misra, Diganta. “Mish: A self regularized non-monotonic neural activation function.” In, BMVC 2020.
  • [Nair and Hinton., 2010] Nair, V., Hinton, G.E.: Rectified linear units improve restricted boltzmann machines. In, ICML 2010.
  • [Ramachandran et al., 2017] Ramachandran, Prajit, Barret Zoph, and Quoc V. Le. “Searching for activation functions.” arXiv preprint arXiv:1710.05941 (2017).

参照外部リンク

関連記事