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

1. ReLU (Rectified Linear Units) 型の活性化関数 とは [概要]

ReLU (Rectified Linear Units, 整流化線形ユニット)は,ディープニューラルネットワークにおいて広く用いられる,主に中間層向けの活性化関数である [Nair and Hinton, 2010].それまでの3層MLP時代に隠れ層活性化目的で使用されてきた「シグモイド形の活性化関数(tanh関数, シグモイド関数)」と比べて,ReLUは深いCNNやDNNの学習を速めることができ,安定した最適解への収束も促すことができる.

この記事では,ReLU型の活性化関数について,紹介・整理する.まず元のReLUの解説を行ったのちに(1, 2節),主なReLUと似た関数型の発展版 (PReLU, GELU, Swish, Mish)についてまとめる (3節).

ReLUは,max関数を用いて入力信号の整流化(Rectification)を行う単純な関数であるが,脱シグモイドによる低計算コスト化により,層の総数がとても多くて深いCNNの学習を,高速化することができるようになった.また,シグモイド系活性化関数で起きがちな,下端出力値である [-1, [0 や,上端出力値である 1] への飽和も避けられるので,収束性能向上も見込める.

しかし,ReLUや,初期の改善版である Leaky ReLU, PReLU (3.1節)は,単純な関数で利点もある反面,単純すぎるせいで弱点もあった.特に,微分値が不連続になるのが,勾配降下法的に嫌であるゆえ,ReLU的な関数形をキープしながらも「全入力値に対して,微分値が滑らかになる」ように改善したかった.

そこで,その弱点を克服したReLU発展型として,関数型はReLUに近いが全区間で微分できる発展型の活性関数関数(GELU, Swish, Mish など)が提案された.2020頃以降の研究では,Transformerの流行・標準化ともあいまって,Transformer系モデルやCNN系モデルにおいて,元のReLUやPReLUの代わりに,それらのReLU発展型関数が使用されることが,標準的になってきている.

1.1 記事の構成

この記事は,2節以降,以下のような構成ですすめる:

  • 2節 ReLUの詳細
    • 2.1 ReLU の挿入箇所とその役割
    • 2.2 ReLU による「古典的な活性化関数の課題」の克服
    • 2.3 ReLU の利点
  • 3節 ReLUの発展型関数の紹介
    • 3.1 LeakyReLU・PReLU
    • 3.2 GELU
    • 3.3 Swish
    • 3.4 Mish
  • 4節 まとめ

1.2 ReLU の概要

ReLU型の活性化関数
図1. ReLU型の活性化関数(ReLU, Swish, Mish).

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

\[ f(x) = \max (0,x)\]

ReLUは,旧来のシグモイド型の活性化関数と同様の活性化機能を持たせつつも,(1)指数計算が無く,計算が簡潔に済み,(2)十分に微分値が奥の層まで伝搬を促すという利点がある.

ReLU以前は,活性化関数にtanh 関数シグモイド関数をもちいて,勾配法によりニューラルネットワークを学習していた.しかし,それらの活性化関数だと深層学習のように層の数が多くなると,逆伝搬時に各活性化層で,微分値が少しずつ減衰し,勾配消失問題(Vanishing gradient problem)が起きて,収束性能や学習速度が落ちる難点があった.3層MLPの時代はこれでも良かったが,10層〜20層以上も学習可能層を連結するDNNでは厳しい(詳しくは親記事「活性化関数」を参考)

それが,ReLUだと,微分値が飽和せず,大きい勾配の値のまま奥の(序盤)層まで伝わりやすい (2.2節).よって,層数を増やしやすくなる.よって,ReLUの登場と普及は,「ディープニューラルネットワークの深い構造化」が加速する結果にもつながっていった.

ReLUの提案論文 [Glorot et al., 2011] においては,画像認識の3層MLP識別性能が,MNISTやCIFARデータセットでの実験で,旧来のtanh関数よりも,ReLUを中間層の活性化関数に用いたほうが,識別性能が高くなることが示された.また,その後,ディープラーニングブームのきっかけともなるAlexNet の研究でReLU層が採用され,ReLUの大きな使用実績が出た.これらをきっかけに,ReLUはDNNむけの定番化の活性化関数として使われるようになった.

ReLUの改善版も多数研究されている(3節).ReLUの「負の入力だと,対応できずに,勾配がなくなってニューロンが死ぬ」という欠点を克服するために,負の側も少し傾きを少しつけて勾配が流れるようにした LeakyReLU と PReLU (3.1節) が提案された.また,大規模モデルであるTransformerやBERTでは,Dropoutのような正則化・学習高速化機能もあわせ持つ GELU (3.2節)が用いられる.また,2018年頃以降は,図1 にも示した Swish(3.3節), Mish(3.4節)などの,更に性能のよくなったReLU型の非線形関数が,DNNの活性化関数として用いられるようになってきている.

2. ReLU の詳細

2節では,ReLUについて,具体的な詳細の説明をおこなう.ReLUの挿入場所と役割について述べたのち(2.1節)ReLUが以前の活性化関数の課題を,どのように克服したかについて述べる(2.2節).最後に,ReLUの利点を [Glorot et al., 2011] で書かれている内容を元にまとめる.

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

CNNでは「畳み込み層(線形) – バッチ正規化 – ReLU(活性化関数) – プーリング層」のモジュールを何度も繰り返す構造を取ることが通例である(以下の関連記事を参照).

ReLUは,以下のように線形層(全結合層 or 畳み込み層)によるアフィン変換の直後に,活性化目的で使用されることが主用途である:

\[
\bm{h} = f(\bm{W}^{\mathsf{T}}\bm{x} + \bm{b})
\]

CNNにおける活性化関数(※ ReLUも含む)の役割は,古典的な画像処理におけるコーナー検出・エッジ検出や,物体検出でも行われる後処理の,非極大値抑制(Non-maximum Suppression,NMS)に相当していると考えると,直感的に理解しやすい [Goodfellow et al., 2016 (6.3.1節)].

畳み込み層を経て,ノイズ混じりでありながらも,畳み込みカーネルと類似した空間領域に,強い応答を得た特徴マップをまず得る.その直後のReLUでは,応答値の強い空間領域だけを更に活性化させつつも,他のノイズ部分は応答を下げて抑制する検出器(detector)の役割をReLUが担う (※1 )

※ 各活性化関数の処理は,画像処理的なNMS(非極大値抑制)のように「極大値の座標だけ生き残らせて,画像中の他の座標は全て0値にする」処理ではない.活性化関数は,各ニューロン出力に対して,個別に関数を適用する処理である.ただ,その個別の各ニューロンにおける活性化の結果として,中間層の値全体としてはNMS(非極大値抑制)と同じく「ノイズは抑制,際立っている値は強調」の効果は得られるので,果たす役割はほぼ同じである.

また,[Glorot et al., 2011] でも強調されているように,ReLUは,入力前の値の50%程度を0にさせて,スパースな特徴マップを得やすいという利点を持つ.これにより,計算高速化のメリットも生じるので,層数の多いディープニューラルネットでは有利になる(逆に言うと,ReLU層を挿入しすぎると,途中の中間層で,消してしまいすぎて,奥まで順伝搬できなくなる可能性も高くなるとも言える.残差接続が適度に使用されているネットワーク設計でないと,深すぎるネットワークではこの問題が生じそうで怖い).

2.2 ReLU による「古典的な活性化関数の課題」の克服

シグモイド関数(左)と tanh関数 (右)
図2. シグモイド関数(左)と tanh関数 (右)

以前のニューラルネットワークでは$\tanh$ [LeCun et al., 1998] やシグモイド型関数が,主に活性化関数として主に使われていた(図2).

しかし,これらにはディープラーニングで用いるには問題があり,(詳しくは,親記事の活性化関数を参照).よって,うまく学習するには,入力画像の正規化を行ったり,誤差逆伝播中の学習率も気をつけないといけないなど,職人的な対策が必要であった.また,深いDNNだと,学習も高速に行えない面があった.

ReLUとその微分
図3. ReLUとその微分.左がReLU関数.右がReLUの微分値.

一方,ReLUは,単純な関数で計算も楽でありつつ,上記の「シグモイド系の活性化関数の課題」を克服している.ReLUの微分値は,$x>0$の範囲では1であり,$x<0$の範囲は0である.また,$x=0$では微分不可である(図3 右).

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

2.3 ReLU 型の活性化関数 の利点

既に話したものも含めて,ReLUを主テーマとした研究 [Glorot et al., 2011], [He et al., 2015]など書かれている「ReLU型の活性化関数の利点」を以下に整理しておく:

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

3. ReLU型の活性化関数

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

3.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$も学習可能なパラメータにして一般化をおこなった「パラメトリックReLU」である(通常は$a = 0.25$で初期化して学習開始).

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

ちなみに [He et al., 2015] では,Heの重み初期化も一緒に提案されており,[He et al., 2015] は,CNN界隈では特に重要な研究である.

3.2 GELU (Gaussian Error Linear Units)

GELU (Gaussian Error Linear Units) [Hendrycks and Gimpel, 2016] は,Google DeepMind から発表された,ランダム正則化機能も備えたReLUである.

GELUでは「0 or x の$\max$による決定的写像」である ReLU や PReLUのステップ関数部分を,代わりに確率的な 「0 or x の選択」に差し替えることにより,ランダム正則化の機能も同時に持っている.

GELUは,ガウス関数のCDF(確率密度関数)$\Phi(x) $を用いて,以下のように定義されている:

\begin{equation}
\text{GELU}(x) = x \Phi(x) = x \cdot P (\mathcal{N}(0, 1) \le x)
\end{equation}

ReLUに似た形ながら滑らかな関数形を持ちつつも,入力値に則して大きくなるゲート係数$\Phi(x) =P (\mathcal{N}(0, 1) \le x)$の導入により,ドロップアウト的な正則化効果も得ることができる.

GELUはその提案後,OpenAI GPTや,GoogleのBERT [Devlin et al., 2019] で,それらの構成部品の Transformer中に使用された.これを皮切りに,その後もBERTやTransformer界隈でのGELUの使用が多い(より詳しくはGELUの子記事の3節で).

3.3 Swish

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

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

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

また,seq2seq界隈の分野(例えばText-to-Speechなど)でも使用例が多い.たとえば音声認識向けの定番Transformerモデルである Conformer [Gulati et al., 2020] でも,Swishが用いられている.

3.4 Mish

ここまで紹介した各ReLU型活性化関数の性能を,更に上回るものとして,Mish [Misra 2020]が登場している(github):

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

ここで, $\text{softplus}$関数 [Dugas et al., 2001] は,$\text{softplus}(x) = log(1 + exp(x))$ という関数である.$\text{softplus}$関数は ReLU と似た関数形状であり,ReLUの代わりに使われたり,比較されたりすることもあるが [Glorot et al., 2011],ReLU とは違って連続関数なので微分可能である.

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

4. まとめ

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

また,ReLU の発展型活性化関数として,PReLU,GELU, Swish, Mish などについて,簡単にだけ紹介した(詳細は各子記事を参照).

関連書籍

References

  • [Gulati et al., 2020] Gulati, Anmol, James Qin, Chung-Cheng Chiu, Niki Parmar, Yu Zhang, Jiahui Yu, Wei Han et al. “Conformer: Convolution-augmented transformer for speech recognition.” arXiv preprint arXiv:2005.08100 (2020).
  • [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.
  • [Dugas et al., 2001] Dugas, C., Bengio, Y., Belisle, F., Nadeau, C., and Garcia, R. . Incorporating second-order functional knowledge for better option pricing. In NIPS, 0221.
  • [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, 2016] D. Hendrycks and k. Gimpel. 2016. Bridging nonlinearities and stochastic regularizers with gaussian error linear units. CoRR, abs/1606.08415.
  • [He et al., 2015] He, K., Zhang, X., Ren, S., Sun, J.: Delving deep into rectifiers: Surpassing human-level performance on imagenet classification. In, ICCV, 2015.
  • [Krueger et al., 2016] David Krueger, Tegan Maharaj, Jnos Krama ́r, Mohammad Pezeshki, Nicolas Ballas, Nan Rosemary Ke1, Anirudh Goyal, Yoshua Bengio, Hugo Larochelle, Aaron Courville, and Chris Pal. Zoneout: Regularizing RNNs by randomly preserving hidden activations. In Neural Information Processing Systems, 2016.
  • [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).

参照外部リンク