GELU (Gaussian Error Linear Unit) [活性化関数]

1. GELU とは [概要]

GELU(Gaussian Error Linear Unit) とは,Google DeepMindから提案された,ランダム正則化の機能も持つReLU系活性化関数である [Hendrycks and Gimpel et al., 2016] .GELUは,近年Google BERT やOpenAI GPTなどの(一般化大規模)言語モデルを通して,よく用いることになったReLU系活性化関数である.

この記事では,GELUについて,そのアイデアの元と,実際の実現方法について紹介する(2節).また,なぜGELUがTransformerで選択されたかについても整理しておきたい(3節).

GELUは,ReLUの(決定的な)ステップ関数を,ガウス分布を用いた確率的な「x or 0 」出力関数によって,置き換えたものである(2.2節).これは,論文の題名「Bridging nonlinearities and stochastic regularizers with gaussian error linear units.」の通りの目的で設計された関数であり,非線形活性化関数かつランダム正則化器を実現している.

GELUは,確率モデル化したReLU型関数なので,参考書籍の「Probabilistic Machine Learning: An Introduction 」に書かれているように,いわば SoftReLUである(SoftmaxのSoftと同じ意味).GELUはステップ関数がランダム化(ソフト化)されたことで,ドロップアウトと同様の効果を得ることが出来る.よって,残差接続でブロック間をかなりの回数接続するような,深くて大規模なResNet系のネットワークを大規模なデータセットで頑張って学習する際に,特に役に立つ.

その提案の狙い通りGELUは,OpenAI GPTや,続いて提案されたGoogle BERTにおいて,(Transformer内の)活性化関数に採用された.また同じくTransformer型設計のモデルを用いる,ViTやMLP-Mixerにおいても,GELUが活性化関数としてよく使用されている.つまり,BERT登場の2019年以降に,使用頻度が増えて定番化したので,重要度が高まることになった活性化関数である(3節).

親記事の親記事:活性化関数(activation function)

2. GELU の詳細

2.1 GELU の狙いと動機

GELU登場以前にも,ドロップアウトによる「確率的正則化」[Bachman et al., 2014] が,ディープニューラルネットワークの性能向上をもたらすことが知られていた.そこで,ReLUやELUなどの当時のベースラインの代わりに,正則化機能も持った提案することを,GELU著者らは考える.

以下の3つの過去の知見を,1つの活性化関数内に融合させた「ReLU型の改善版活性化関数」を提案することがGELUの狙いであった:

  1. シグモイド関数よりも,高速で収束性能の良い,不飽和ReLU型関数による活性化.
  2. ドロップアウト(活性値のランダムな0化)による,モデルの正則化効果.
  3. RNN向け正則化手法の Zoneout [Krueger et al., 2016] のような,「入力へ,確率的に1を乗算することによる正則化」の効果(つまりは,なんらかのランダム確率で生成した0~1の値を,ランダムに乗算する).

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

2.2 GELUの「ランダム正則化」としての定式化

まず入力$x$に,ベルヌーイ分布からサンプリングされるランダム変数 $m∼ \text{Bern}(\phi(x))$(2値のスカラー値マスク)を乗算した,$x \cdot m$を考える.

すると,GELUはまず,「x」or「0」のどちらの出力を出すかを,確率mで決めてドロップアウトする関数として,以下のように定義される:

\begin{equation}
\text{GELU}(x) = x \phi(x) + 0 \times \phi(x) = x \phi(x) \tag{2.1}
\end{equation}

これは,1節の導入で述べたように,ReLUのステップ関数を,確率分布に差し替えたSoft版ReLUと見なせる.

今度は,(2.1)式のベルヌーイ分布ベースの定式化をやめて,代わりに,マスク\phi(x) をガウス分布で(いっぺんに)計算するようにする「ガウス分布ベースの定式化」を考える.すると,以下のようにGELUをガウス分布によって定式化できる:

\begin{equation}
\text{GELU}(x) = x \phi(x) = x \cdot P (X \le x) X \sim \mathcal{N}(0, 1) \tag{2.2}
\end{equation}

ここで,$\phi(x) = \cdot P (X \le x)$は,ガウス分布の累積分布関数(CDF)である.この場合,$x \phi(x)$は,$X \sim \mathcal{N}(0, 1)$と$x$ の2つの値から判定された,0から$x$までを累積した「面積値」に相当する.

このGELUの出力は,シグモイド関数のような値を持つが,ランダム化されているおかげで,ReLU, PReLUのような関数型を持ちつつも(図1),確率分布関数なので(softな)ランダム確率として出力され,ドロップアウト的な正則化効果も得ることができる.

2.3 近似実装:ガウス誤差関数を用いた近似.

GELU層を,学習中に毎回ランダムサンプリングすると,伝搬・逆伝搬時が面倒になる.そこで,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}

以上の近似計算を用いることで,決定解的に計算機実装できるようになる.

3. GELUの,Transforme系巨大モデルでの定番化

GELUは,近年のTransformer系の巨大ネットワークの学習に向いており,GPT・BERTで採用されて以降,中間層向けの活性化関数の定番となっている.そこで,いったいどのようなTransformer系大規模モデル学習でGELUが定番しているかについてまとめ(3.1節),なぜそれらの大規模モデルに相性がよいのかについても考えておきたい(3.2節).

3.1 GPT,BERT や ViT,MLP-mixer等での使用

GELUはその提案後,OpenAI GPTや,GoogleのBERT [Devlin et al., 2019] で,それらの構成部品である Transformer 中の活性化関数層に使用された.これを皮切りに,その後もBERTやTransformer界隈での使用が多い.元の機械翻訳向けの初代Transformerでは,FFNブロックの「線形層-ReLU-線形層」の2層目に,ReLUが使用された.よって,Transformerでは元々GELUは用いられていなかった.

ちなみに,BERTのオリジナル研究 [Devlin et al.,2019] では,ドロップアウト(による正則化)を,全層に対して実施する.つまり,(ランダム正則化機能も持つ) GELUを使用していようとも,活性化関数層以外もドロップアウトしたほうが良いか否かは,モデル規模とデータ規模次第で自分で考える必要があるということでもある.

このBERTの流れに沿って,コンピュータビジョンにおいても,近年の大規模モデルViT(Vision Transformer) と MLP-Mixerでは,FFNブロックの活性化関数に,GELUが使用されている.また,管理人の研究興味でもある動画認識周りでも,Video向けTransformerやVideo-Languge系のTransformer型モデルのおいて,GELUを用いることがとても多くなっている.

つまり,3.1節をまとめると,Transformer登場以後の近年は,BERT・GPTなどの一般化言語モデルや,その後のViT, MLP-Mixerなどの「巨大モデル学習」や「その事前学習」を行う場合に,GELUをFFNブロック内でよく使うようになった.つまりGELUは,Transformer・Mixer系大規模モデルと一心同体な,活性化関数である (※ 同じくTransformer内で用いる「レイヤー正規化」の貢献度も高くなっていると言える).

一方で,それらと異なり大規模でない中規模データ向けのタスクでのTranformerでは,活性化層はReLUのままの場合の研究が多い(次の3.2節で詳しく).

3.2 大規模モデルの学習で,初めてGELUが効いてくる

3.1節で述べたGPT・BERTや,ViT・Mixer系モデルなどの「巨大モデルの学習」にGELUが使われてこそ,計算コストも高いGELU活性化関数が活きてくる点に注意である(元のGELUの論文では,大規模モデル向けの実験は行われなかったものの).

2.3節のGELUの近似式を見ると,単純計算で済むReLUやPReLUに比べると,計算コストがかなり高いことがわかる.しかし,GELUは,他のReLUの発展型関数と同じく「微分値が滑らか」であるので,勾配爆発を防ぎやすい「飽和しないReLU発展型」の活性化関数でありつつ,なおかつ正則化の効果も得られるという利点がる.このメリットがあるからこそ,GPT・BERTの事前学習のおいてGELUが選択された.そうでないと,GELUをむやみにただ計算量が増えただけになってスケールしないモデルだとそれほど性能向上への効果が出ない.

また,音声認識など向けのGoogle Conformerでは,ReLUの代わりに,GLU(Gated Linear Unit)を用いていて,これもGELUのではない.そもそも,画像キャプション生成や,音声・音響系のTransformerでは,gated linear unitの使用がよく見られる.

一方で,Transformerの元論文の機械翻訳などの,Transformerで直接学習する各タスクでは,モデルの規模も中くらいで済むこともあり,特にGELUは使わなくても済む.例えば物体検出のDETRでは,バックボーンとネックにTransformer-EncoderとTransformer-Decoderを用いるが,活性化関数にはReLUを用いる.動画認識系のビジョンタスクは,リアルタイム性重視のタスクが多いという側面もあり,計算負荷のない層を選択しがちではある.

4. まとめ

この記事では,ReLU近似型の活性化関数であるGELUについて紹介した.GPU・BERTの大規模事前学習に採用されたことで,以降,BERT・GPT系や,ViT, MLP-Mixer,Video Transformerなど,「Transformer系の大規模モデル」において,GELUを用いることが定番となった.しかし,中規模データ・モデルのタスク向けの,系列対系列変換のTransformerではReLUのままであったり,GELU以外の活性化関数の使用が中心的である.

GELU以外の,ReLU系活性化関数については,親記事のReLU とその発展型の活性化関数[GELU, Swish, Mishなど]に書いてあるので,そちらを参考のこと.

関連書籍

References

  • [Bachman et al., 2014] Philip Bachman, Ouais Alsharif, and Doina Precup. Learning with pseudo-ensembles. In NIPS, 2014.
  • [Gulati et al., 2020] Anmol Gulati,James Qin,Chung Cheng Chiu, Niki Parmar, Yu Zhang, Jiahui Yu, Wei Han, Shibo Wang, Zhengdong Zhang, Yonghui Wu, et al. Conformer: Convolution-augmented transformer for speech recognition. arXiv preprint arXiv:2005.08100, 2020.
  • [Hendrycks and Gimpel, 2016] D. Hendrycks and k. Gimpel. 2016. Bridging nonlinearities and stochastic regularizers with gaussian error linear units. CoRR, abs/1606.08415.

参照外部リンク

SNSでシェアやブックマークを行う