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

1. 概要

ReLU (Rectified Linear Units, 整流化線形ユニット)は,ディープニューラルネットワーク(DNN)において広く用いられる活性化関数である [Nair et al., 2010].ReLUは,それまでニューラルネットの「隠れ層の活性化」に使用されてきた,古典的なシグモイド型の活性化関数の代わりに,DNNで活性化層を担当する関数形である.

ReLUは,max関数により入力信号の整流化(Rectification)を行う単純な関数であるが,脱シグモイドによる低計算コスト化のおかげで学習高速化ができる.また,シグモイド系活性化関数で起きがちな,下端出力値の-1,0や上端出力値1への飽和も避けられるので収束性能向上も見込める.ただ,初期のReLUは単純すぎて,弱点もあり,ReLUと関数形が似ていながらも,最初のReLUの弱点を克服する類似形の発展型関数が提案されてき,近年ではそれらの関数が使用されるようになってきている (PReLU,gelu,swishなど).

この記事では,ReLUの解説を行ったのち(1, 2節),そのReLUの発展型の主な活性化関数(PReLU,gelu, swish, mish)についてまとめる(3節).

ReLUなどの活性化関数
図1 ReLU系の活性化関数.ReLUとその発展型(SwishとMish).

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

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

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

以前は,活性化関数にtanh やシグモイド関数をもちいて勾配法でニューラルネットワークを学習していた.しかし,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 の詳細

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

2.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)の役割をReLUが担う(※ ただし各活性化関数は,NMSのように「極大値の座標だけ生き残らせて他は全て0値にする」処理ではなく,あくまで全ニューロンに個別に関数を適用するので,処理は異なる点には注意) .

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

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

図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 の利点

既に話したものも含めて,以下に [Glorot et al., 2011], [He et al., 2015]など ReLUを主テーマとした研究で書かれている「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 et al., 2016] は,Google DeepMind から発表された,ランダム正則化機能も備えたReLUである.

GELUの目指したものは,以下の3つの融合版のReLU改善関数である:

  1. シグモイド関数よりも,高速で収束性能の良い,ReLU型関数による活性化.
  2. ドロップアウト(活性値のランダムな0化)による,モデルの正則化効果.
  3. RNN向け正則化手法の Zoneout [Krueger et al., 2016] のような「入力へランダムに1を掛けることによる正則化」の効果.

GELUは,入力$x$に,ベルヌーイ分布からサンプリングされるランダム変数 $m∼ \text{Bern}(\phi(x))$を掛けた$x \cdot m$として,以下のように定義されている:

\begin{align}
\text{GELU}(x) & = x \cdot P (X \le x) X \sim \mathcal{N}(0, 1)
\end{align}

ここで,$\phi(x) = x \cdot P (X \le x)$は,$X \sim \mathcal{N}(0, 1)$と$x$から判定された,$x$までの累積分布関数(CDF)である. $\phi(x) = P (X \le x)$ は,ガウス分布の左端から$x $までの累積の面積値であり,シグモイド関数のような値をもつ.

以上よりGELUとは「0 or x の$\max$による決定的写像」であるReLUやPReLUを,代わりに確率的な 「0 or x 選択」に差し替えたことで,ランダム正則化の機能も同時に持たせるというアイデアであるとわかったと思う.

3.2.1 実装について:ガウス誤差関数での近似

GELUを毎回ランダムサンプリングすると,伝搬・逆伝搬時が面倒になるので,決定論的な出力を計算したい.そこで,まずGELUの変換の期待値を以下のように分解する:

\[ E[mx] = xE[m] \]

となる. $m∼ \text{Bern}(\phi(x))$の期待値は$\phi(x)$であるゆえ以下のようになる:

\[E[mx] = x \phi(x)\]

ここでガウス誤差関数(Gaussian Error Function)を用いて,以下の$x \cdot \phi(x)$の近似関数を,代わりに使用する:

\begin{align}
\text{GELU}(x) &=x \cdot \phi(x)\\
& \sim x \cdot \frac{1}{2} \left[ 1 + \text{erf}(\frac{x}{\sqrt{2}}) \right]
\end{align}

以上の近似計算で計算できるGELUは,ReLUの機能に加えて正則化の効果も持つことから 大規模モデルで効果を発揮する.たとえば BERT [Devlin et al., 2019] や,その構成部品である Transformer 系の多くのモデルにおいて,活性化関数層に使用されている.

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 et al., 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).

参照外部リンク

関連記事

↓ ためになった方は,記事をSNSでシェアをしてくださると,管理人の記事執筆モチベーションが上がります