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

1. ReLU とは [概要]

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

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

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

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

そこで,その弱点を克服した,発展型の,関数型はReLUに近いが全区間で微分できる発展型の活性関数関数(GELU, Swish, Mish など)が提案され,(2020頃以降の研究では)それらを使用するのが標準的になってきている.

1.1. ReLUの概要

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

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

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

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

以前は,活性化関数に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の活性化関数として用いられるようになってきている.

1.2 記事の構成

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

  • 2節 ReLUの詳細 (配置場所と役割.古典的なシグモイド形関数の課題克服. 利点)
  • 3節 ReLUの発展型関数の紹介(PReLU, GELU, Swish, Mish)
  • 4節 まとめ

2. ReLU の詳細

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

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

2.1.1 CNNでの挿入箇所

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

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

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

CNNにおける活性化関数(ReLU含む)の役割は,古典的な画像処理におけるコーナー検出・エッジ検出や,物体検出でも行われる後処理の非極大値抑制(Non-maximum Suppression,NMS)に相当していると考えると,直感的に理解しやすい [Goodfellow et al., 2016 (6.3.1節)].畳み込み層を経て,ノイズ混じりでありながらも,畳み込みカーネルと類似した空間領域に,強い応答を得た特徴マップをまず得る.その直後のReLUでは,応答値の強い空間領域だけを更に活性化させつつも,他のノイズ部分は応答を下げて抑制する検出器(detector)の役割をReLUが担う (※ ただし各活性化関数は,NMSのように「極大値の座標だけ生き残らせて他は全て0値にする」処理ではない.あくまで,全ニューロンに個別に活性化関数を適用することでNMS的な検出器機能を果たすのであって,2者の処理は異なる点に注意) .

また,[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, 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 (X \le x) X \sim \mathcal{N}(0, 1)
\end{equation}

ReLU, PReLUのような関数型をGELUは持ちつつも,確率分布関数なのでランダム確率として出力され,ドロップアウト的な正則化効果も得ることができる.

GELUはその提案後,OpenAI GPTや,GoogleのBERT [Devlin et al., 2019] で,それらの構成部品である Transformer 中の活性化関数層に使用された.これを皮切りに,その後もBERTやTransformer界隈での使用が多い(元の機械翻訳向けの初代TransformerではReLUが使用されていて,GELUは使われていなかった)コンピュータビジョンだと,近年の大規模モデルであるViT・MLP-Mixer系の研究や, Video向けのTransformerなどで,GELUを使うことが多い.つまり,近年の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, 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).

参照外部リンク

関連記事