GELU (Gaussian Error Linear Unit)
Gaussian Error Linear Unit (GELU) 活性化関数について解説します。その滑らかで確率的な非線形性がTransformers、BERT、および現代のAIをいかに強化しているか学びましょう。
ガウス誤差線形ユニット(GELU)は、現代の人工知能(AI)システム、特にTransformerアーキテクチャに基づくシステムにおいてパフォーマンスで重要な役割を果たす、洗練された活性化関数です。ニューロンの入力に対して厳格で決定論的なしきい値を適用する従来の関数とは異なり、GELUはガウス分布の特性に着想を得た確率的側面を導入します。入力を単純にゲートするのではなく、その大きさに応じて重み付けを行うことで、GELUはディープラーニング(DL)モデルの最適化を助けるより滑らかな非線形性を提供します。この独自の特性により、ネットワークは複雑なデータパターンをより効果的にモデル化できるようになり、大規模な基盤モデルの成功に大きく貢献しています。
GELUの仕組み#
任意のニューラルネットワークの中核において、活性化関数は入力信号に基づいてニューロンが「発火」するかどうかを決定します。Rectified Linear Unit(ReLU)のような古い関数はスイッチのように機能し、負の入力に対してはゼロを出力し、正の値に対しては入力そのものを出力します。効率的ではあるものの、この急激な切り替えは学習のダイナミクスを阻害する可能性があります。
GELUは、ガウス分布の累積分布関数によって入力をスケーリングすることでこれを改善します。直感的に言うと、これは入力値が減少するにつれてニューロンがドロップアウトする確率が増加するものの、それが突然ではなく段階的に起こることを意味します。この曲率は、すべての点で微分可能な、滑らかで非単調な関数を作り出します。この滑らかさは勾配の逆伝播を容易にし、深層ネットワークの学習を停滞させる可能性のある勾配消失問題などの課題を軽減するのに役立ちます。
実社会での応用#
GELUが提供するより滑らかな最適化のランドスケープにより、これは機械学習(ML)における最も高度なアプリケーションの一部にとってデフォルトの選択肢となっています。
- 大規模言語モデル(LLMs): GELUは、Googleの研究者によるBERT(Bidirectional Encoder Representations from Transformers)の導入とともに脚光を浴びました。現在では、GPTシリーズやその他の生成テキストモデルにおける標準的なコンポーネントとなっています。テキスト要約や感情分析などのタスクにおいて、GELUは厳格な活性化関数では見落とす可能性のある言語表現の微妙なニュアンスをモデルが捉えるのを助けます。
- Vision Transformers(ViT): コンピュータビジョンの領域では、画像分類のためにTransformerアーキテクチャを適応させたモデルがGELUに大きく依存しています。画像をパッチのシーケンスとして処理することにより、これらのモデルは深層レイヤー全体で豊富な特徴情報を維持するためにGELUを使用し、ImageNetなどのベンチマークで高い精度を実現しています。
関連用語との比較#
GELUを理解するには、Ultralytics用語集にある他の一般的な活性化関数と区別することがしばしば必要になります。
- GELU vs. ReLU: ReLUは計算的にシンプルであり、スパース性(正確なゼロ)を生み出すため効率的です。しかし、ゼロにおける「鋭い角」は収束を遅くする可能性があります。GELUは滑らかな近似を提供するため、わずかに高い計算コストと引き換えに、複雑なタスクにおいて通常はより高い精度をもたらします。
- GELU vs. SiLU(Swish): シグモイド線形ユニット(SiLU)は構造的にGELUと非常によく似ており、その滑らかで非単調な特性を共有しています。GELUは自然言語処理(NLP)で優勢ですが、SiLUはエッジハードウェアでの効率性と検出タスクにおける優れたパフォーマンスにより、YOLO26のような高度に最適化された物体検出器で好まれることがよくあります。
- GELU vs. Leaky ReLU: Leaky ReLUは、負の入力に対して小さく定数な線形勾配を許可することで、標準的なReLUの「死んだニューロン」問題の解決を試みます。対照的に、GELUは負の値に対して非線形的であり、より複雑で適応的な応答を提供するため、非常に深いネットワークにおいてより優れた表現学習につながることがよくあります。
実装例#
GELUの実装は、PyTorchのような現代のディープラーニングライブラリを使用すれば簡単です。以下の例は、入力データのテンソルにこの関数を適用する方法を示しています。
import torch
import torch.nn as nn
# Initialize the GELU activation function
gelu_activation = nn.GELU()
# Create sample input data including negative and positive values
input_data = torch.tensor([-3.0, -1.0, 0.0, 1.0, 3.0])
# Apply GELU to the inputs
output = gelu_activation(input_data)
# Print results to see the smoothing effect on negative values
print(f"Input: {input_data}")
print(f"Output: {output}")自身のコンピュータビジョンプロジェクトでこれらの高度な活性化関数を活用したい開発者にとって、Ultralyticsプラットフォームはワークフロー全体を簡素化します。データの注釈付け、SiLUのような最適化された活性化関数を利用するYOLO26などのアーキテクチャを使用したモデルの学習、およびクラウドやエッジデバイスへの効率的なデプロイを行うための統合インターフェースを提供します。






