GELU (Gaussian Error Linear Unit) [活性化関数] [Transformer系モデル向け]

1. GELU とは [概要]

GELU(Gaussian Error Linear Unit, ガウス誤差線形ユニット) とは,入力値に沿った確率値をとるゲート係数を,ReLUに乗算した形の,確率的ReLU型の活性化関数である [Hendrycks and Gimpel et al., 2016].「Gaussian Error Linear Unit」と名付けられたのは,累積分布関数 $\Phi(x)$に対して「ガウス誤差(Gaussian Error)関数を用いた近似」を用いて計算するからである(1.1節,2.3節)

GELUは,ReLUに近い形であるが,滑らかで微分できて嬉しいように設計されたReLUの発展型関数の1つである.最終的には決定的関数となっていながら,元となった(決定的関数へとフィットする前の)ランダム関数が持つような「ランダム正規化」の効果を内包している.ゆえに,Transformer系のネットワークのような,巨大な規模のニューラルネットワークほど,ReLUの代わりに使用する価値が出てくる.実際,GPT・BERTなどで採用されて以降,Transformer系のネットワークの活性化関数層に標準的に採用されているゆえ,重要な関数である.

この記事では,まずGELUの仕組みについて,先に概要提示と定式化を行う(1.1〜1.2節).次に,元論文中の「3段階に分けた導出」どおりに説明することで,よりGELUへの理解を深めてもらう(2節).また,GELUはTransformer系モデルで多く採用されており,BERTやGPTに採用されているなど重要なであるゆえ,「どういったネットワーク設計やタスクで,よくGELUが使われているか」について,簡単な整理を行いたい(3節).

GELUは,「(1)非線形の活性化関数」の効果と,「(2)ドロップアウト」「(3) RNN向けの正則化であるゾーンアウト [Krueger et al., 2016] 」によるランダム正則化効果を,3つとも合わせ持つよう設計された活性化関数である.それを実現するために,ReLUの指示関数による「ゲート係数」を,「確率分布によるゲート係数」に差し替えた形の関数としてGELUは提案された (1.2節で2者を比較・整理).この「ゲート係数のランダム変数への差し替え」により,「ReLUを滑らかに近似したような,形がReLUに近い非線形の関数形」を持つように設計できたのが,GELUの重要な貢献である.

GELUは,残差接続によりブロック間をかなりの回数接続するような,深くて大規模なResNet系のネットワークに対して,大規模なデータセットをフィットさせる際に,「正則化かつ非線形活性化」が達成できる.これにより,数々のTransformer形のネットワークでその後重宝されるようになったのが,近年の状況である.たとえば,Vision Transformerも,GELUを使用している.

1.1 GELUの関数形

GELU(Gaussian Error Linear Unit) のグラフ
図1. GELU(Gaussian Error Linear Unit) のグラフ

GELU (図1 赤色)は,「入力$x$」に対して,$x$の大きさに連動する「確率的ゲート係数$\Phi(x)$」を右から乗算した活性化関数である:

\[
\text{GELU}(x) = x \Phi(x) \tag{1.1}
\]

ここで,$\Phi(x)$には,(シグモイド関数的な関数形をしている)ガウス分布の累積分布関数(CDF) $Pr( X \le x)$を用いる($X \sim \mathcal{N}(0, 1)$であり,元論文では,ガウス分布の$\mu , \sigma $はパラメータ化せず$\mu = 0, \sigma = 1$ で固定している):

\[
\Phi(x) = Pr(X \le x) = Pr(\mathcal{N}(0, 1) \le x) = \frac{1}{2} \left[ 1 + \text{erf} \left( \frac{x}{\sqrt{2}} \right) \right] \tag{1.2}
\]

式(1.1)はゲート機構化されており,ゲートの入力が$x$で,右側に乗算している$\Phi(x)$が,ゲート係数である.そして式(1.2)のように,そのゲート係数$\Phi(x)$が,入力値$x$次第で(確率的に)ゲート具合の値を$Pr(\mathcal{N}(0, 1) \le x)$から決める.ただ,ガウス分布の累積分布関数は,そのままだと決定的に積分できないので,ガウス誤差関数$\text{erf}(\cdot)$を用いて値を計算する(2節で詳しく).

この式 (1.1)は,研究 [Hendrycks and Gimpel et al., 2016] の題名「Bridging nonlinearities and stochastic regularizers with gaussian error linear units.」が示す狙い通りにつくられた関数で,非線形活性化関数 かつ ランダム正則化器を同時に実現している.

1.2 GELU v.s. ReLU : 2者の関数形と仕組みの比較

この式(1.1)(1.2)の,GELUとして標準的に用いる,「$\mu = 0, \sigma = 1$ のGELU」のGELUが描く関数曲線(元論文 Figure 1)は,入力$x$負の側において少しだけ出力がマイナスの値を取る形である.

ReLUとGELUの関数系を,同じ「入力×ゲート係数」の構造で比較すると以下のようになる:

  • ReLU :$x \mathbb{1}_{x>0}$
    • 入力$x$に,ステップ関数$\mathbb{1}_{x>0}$を,ゲート係数として乗算する.
    • 指定した割合α (α = 0.5など)だけ各ニューロンを削除(× 0)し,その他(1 – α)の割合のニューロンは保存(×1).
  • GELU:$x \Phi(x)$
    • 入力$x$に,確率値 [0~1] $\Phi(x)$を,ゲート係数として乗算する.
    • 入力の大きさに沿って決まる確率値($\times \Phi(x)$)で,各ニューロン出力を保存 or 削除.

つまり,GELUは,ReLUの(決定的な)ステップ関数$\mathbb{1}_{x>0}$ を,ガウス分布を用いた「確率的に( x or 0 )を出力する関数」を使用するように変更したものであるとわかる.

2. GELU の詳細

2節では,GELUの元となるアイデア(2.1節)と,実際に使うGeLUの式(2.3)へ向けた,3段階の変形過程について紹介する (2.2節).

2.1 GELU の狙いと動機

GELU登場以前にも「確率的正則化」[Bachman et al., 2014] が,DNNの正則化をもたらすことが知られてきていた.そこでGELU著者らは,当時の定番ベースラインであった活性化関数(ReLUやELU)の代わりに,「(適応的な)ドロップアウト正則化機能も合わせ持つ,確率化したReLU」を提案した.

具体的には,以下の3つの従来の知見を,1つの活性化関数内に融合させた関数として,GELUは提案された [Hendrycks and Gimpel et al., 2016]:

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

これにより1.1節と1.2節のGELUが設計されたわけだが,これは従来のReLU型の活性化関数 (ReLUやPReLU)の「0 or x の,$\max$による決定的写像」という雛形を脱した新機軸となり,大規模ネットワークに有利な活性化関数のGELUは,Transformer移行の巨大モデル時代のニーズともマッチすることになった.

2.2 実際に用いる関数形への変形

1節で既に,GELUの形(1.1節)と,そのReLUとの比較による理解(1.2節)は先に行った.

この節では,実際に用いるGELUの関数形までの変形過程を,論文中の流れにそって,以下の三段階でたどる:

  1. 元の定式化(2.2.1節)
  2. $\Phi(x)$に,ガウス分布を導入 (2.2.2節)
  3. 決定関数に変えたいので,ガウス分布をガウス誤差関数で代替 (2.2.3節).

2.2.1 元の定式化

まず最初にGELUの目的の「非線形関数 × 確率的正則化」を達成する一般形から考える.一般系は,入力$x$に対して,ランダム変数 $m∼ \text{Bern}(\Phi(x))$(ベルヌーイ分布からサンプリングされる2値のスカラー値マスク)を乗算した,$x \times m$ である.

すると,GELUは,確率$m$で「$x$ or $0$」のどちらを出力するか決める,以下の関数としてまず定義される:

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

1節の導入で述べたように,この(2.1)式は,ReLUの,確率分布$\Phi(x)$に差し替えたSoft版のReLUであると見なせる.

2.2.2 ガウス分布による定式化

今度は,(2.1)式のベルヌーイ分布ベースの定式化をやめて,代わりに,マスク$\Phi(x)$ をガウス分布で(いっぺんに)計算するようにした「ガウス分布ベースの定式化」に差し替えて定式化することを,著者は考えた.

すると,GELUをガウス分布ベースでも定式化できる:

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

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

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

ガウス分布の累積分布関数(CDF)である$\phi(x) はガウス誤差関数を用いて計算されることが多い.そこで,著者らは(2.2)式の関数を「ガウス誤差関数を用いた関数近似」によって,決定的計算に差し替えて近似実装することを提案した.

ガウス誤差関数(Gaussian Error Function)の$\text{erf}(\cdot)$を用いると,GELUを以下のように近似計算できる:

\begin{align}
\text{GELU}(x) &= x \Phi(x)\\
&= x \frac{1}{2} \left[ 1 + \text{erf}(\frac{x}{\sqrt{2}}) \right] \tag{2.3}
\end{align}

論文中で提案された誤差関数ベースの計算を $ \Phi(x) \simeq 0.5 \times (1 + \tanh [\frac{2}{\pi {(x+0.044715\times3)}])$[Choudhury et al.,2014]で近似するということが提案された.

しかし,paper with codeの解説にも書かれてあるように,ここはExactな(2.3)の誤差関数への変換でも,十分な計算スピードと予測精度が出るゆえ, 近似 [Choudhury et al.,2014] は,あまり必須ではないとなってきた.つまりは,最近だと,近似計算は使わずに,Exactな(2.3)のままで使用しても問題ないともなってきている.

3. Transformer系モデルでの,GELUの定番化

その提案・設計の狙い(2.1節)通り,GELUは,OpenAI GPTや,Google BERTなどにおいて,(Transformer内の)活性化関数に採用された.また,同じくTransformer型設計のモデルを用いる,ViTやMLP-Mixerにおいても,GELUが活性化関数としてよく使用されている.つまり,BERTの時代(2019年頃以降)に入り,GELUは使用頻度が増えて,定番の中間層向け活性化関数となっている.

3節では,どのようなTransformer系大規模モデルの学習において,GELUが定番化したかについて整理し(3.1節),なぜそれらの大規模モデルに相性がよいのかについても考えておきたい(3.2節).

3.1 GELUが用いられる,Transformer使用のモダンネットワークの整理

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

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

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

単純な計算で済むReLUやPReLUに比べると,式(2.3)のGELUは計算コストが高い.しかしGELUは,他のReLUの発展型関数と同じく「微分値が滑らか」であるので,勾配爆発を防ぎやすい「飽和しないReLU発展型」である利点をもつ(なおかつGELUは確率的正則化の機能もあわせもつ).

この利点があるからこそ,GELUは,GPT・BERTなどの巨大な基盤モデル群(の事前学習)において,活性化関すとして選択されはじめた.それらの「スケールする巨大ネットワーク」向けの用途でないと,GE導入したところで無駄に計算量が増えるだけで,GELUによる性能向上への効果があまり期待できない.

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

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

4. まとめ

この記事では,ReLU近似型の活性化関数の1種であるGELUについて紹介した.ドロップアウトのような正則化機能も内包している活性化層であることから,大規模モデルとの相性がよい.

GPT・BERTなどの大規模な基盤モデルの事前学習にGELUが採用されたことで,以降のTransformer系の言語モデルや,Vision Transformerなどでは,GELUを用いることが非常に多くなった.しかし,中規模データ・モデルのタスク向けのTransformerでは,ReLUや,GELU以外の非線形化関数を使用することも多い(3節).GELU以外の,ReLU型の活性化関数については,以下の親記事を参考のこと:

関連書籍

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.

参照外部リンク