1. GELU (Gaussian Error Linear Unit, ガウス誤差線形ユニット)とは [概要]
GELU (Gaussian Error Linear Unit, ガウス誤差線形ユニット) とは,入力値に沿った確率値をとるゲート係数を,ReLUに乗算した形の,確率的なReLU型の活性化関数である [Hendrycks and Gimpel et al., 2016].「(1)決定的関数」と「(2)ランダム正則化」の性質を同時にもつことで,ネットワークが大規模ほど,効率的に正則化できる利点を持っている.名称のGaussian Error Linear Unit は,累積分布関数 $\Phi(x)$に対して「ガウス誤差(Gaussian Error)関数を用いた近似」を用いて計算を行うことから名付けられた (1.1節,2.3節)
※ 第1著者の Dan Hendryks氏は,博士号取得後,Center for AI safety のディレクターをしており,Imagenet-OやImageNet-Cなど,AIモデルのロバスト性や安全性に興味の高い研究者である.
GELUは,滑らかで微分可能できて嬉しい設計の,以下のようなReLUの発展型の関数である:
\[
\text{GELU}(x) = x \Phi(x) = x \cdot \frac{1}{2} \left[ 1 + \text{erf} \left( \frac{x}{\sqrt{2}} \right) \right]
\]
最終的には「(1)決定的関数」となっていながら,元となった(決定的関数へとフィットする前の)ランダム関数が持つような「(2)ランダム正規化」の効果も内包している.ゆえに,Transformer系のネットワークのような,巨大規模なモデルほど,使用価値が出てくる.実際,GPT・BERTなどで採用されて以降,GELUはTransformer系のネットワークの活性化関数の層によく使用されており,ReLUの発展型関数の中でも重要・頻用なReLUの発展型関数である.
この記事では,まずGELUの仕組みについて,先に概要提示と定式化を行う(1.1〜1.2節).次に,元論文中の「3段階に分けた導出」どおりに説明することで,よりGELUへの理解を深めてもらう(2節).また,GELUはTransformer系モデルで多く採用されており,BERTやGPTに採用されているなど重要な層であるゆえ,「どういったネットワーク設計やタスクで,よくGELUが使われているか」について,簡単な整理を行いたい(3節).
GELUは,以下の3つの効果を合わせ持つように設計された(2.1節でより詳しく):
それを実現するために,ReLUの指示関数による「ゲート係数」を,「確率分布によるゲート係数」に差し替えた形として,GELUは提案された (1.2節で2者を比較・整理).この差し替えにより,「ReLUを滑らかに近似したような,形がReLUに近い非線形の関数形」を設計できた.
GELUは,残差接続によりブロック間をかなりの回数接続するような,深くて大規模なResNet系のネットワークに対して,大規模なデータセットをフィットさせる際に,「正則化かつ非線形活性化」が達成できる.これにより,数々のTransformer形のネットワークでその後重宝されるようになったのが,近年の状況である.たとえば,Vision Transformerも,GELUを使用している.
1.1 GELUの関数形
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)ランダム正則化器を同時に実現している.
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つの活性化関数内に融合させた関数として提案された [Hendrycks and Gimpel et al., 2016]:
- シグモイド関数よりも,高速で収束性能の良い,不飽和なReLU型関数.
- ドロップアウト(活性値の0化) による,モデルの正則化効果.
- RNN向け正則化手法の ゾーンアウト(Zoneout) [Krueger et al., 2016] のように,確率的に1を乗算することによる正則化の効果(なんらかのランダム確率から生成した 0~1の値を,ランダムに乗算する).
これにより1.1節と1.2節のGELUが設計されたわけだが,これは従来のReLU型の活性化関数 (ReLUやPReLU)の「0 or x の,$\max$による決定的写像」という雛形を脱した新機軸となり,Transformer以降の大規模モデル時代のニーズともマッチすることになった.
2.2 実際に用いる関数形への変形
1節で既に,GELUの形(1.1節)と,そのReLUとの比較による理解(1.2節)は先に行った.
この節では,実際に用いるGELUの関数形までの変形過程を,論文中の流れにそって,以下の3段階でたどる:
GELUの変形過程
- 元の定式化 (2.2.1節)
- $\Phi(x)$に,ガウス分布を導入 (2.2.2節)
- 決定関数に変えたいので,ガウス分布をガウス誤差関数で代替 (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などの「巨大モデル学習」やその「事前学習」を行う場合に,FFNブロック内でGELUをよく使うようになった.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(のnon-regressive版)を用いるが,活性化関数には普通のReLUを用いる.動画認識系のビジョンタスクは,リアルタイム性重視のタスクが多いという側面もある.よって,計算負荷の軽い単純な関数の活性化層を選択しがちではある.
4. まとめ
この記事では,ReLUを関数形を近似した「発展型ReLU」の代表であるGELUについて紹介した.ドロップアウトのような正則化機能も内包していることから,大規模ネットワーク設計との相性がよい.
GPT・BERTなどの大規模な基盤モデルの事前学習にGELUが採用されたことで,以降のTransformer系の言語モデルや,Vision Transformerなどでは,GELUを用いることが非常に多くなった.しかし,中規模データ・モデルのタスク向けのTransformerでは,ReLUや,GELU以外の非線形化関数を使用することも多い(3節).
GELU以外の,「ReLU型の活性化関数」については,以下の親記事を参考のこと:
関連書籍
- Pythonで学ぶ画像認識 (機械学習実践シリーズ), 田村 雅人, 中村 克行, インプレス, 2023.
- 第4章 画像分類(=物体認識)
- Transformerエンコーダ層におけるFNNの構造(p141)
- 第4章 画像分類(=物体認識)
- Getting Started with Google BERT: Build and train state-of-the-art natural language processing models using BERT, Sudharsan Ravichandiran 2022. BERTの各種発展版を辿れる良い実践本.ただ,GELU自体の解説はない.
- 作ってわかる!自然言語処理AI BERT・GPT2・NLP入門 坂本俊之,
- Probabilistic Machine Learning: An Introduction , Kevin Patrick Murphy 2022.
- 13.4.3 Non-saturating activation function.
- 13.4.3.3 Other choices.
- 13.4.3 Non-saturating activation function.
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.