大型言語モデル:DistilBERT — より小型・高速・安価・軽量
大容量言語モデル:DistilBERT — より小型・高速・コストパフォーマンスが良い・軽量
BERTの圧縮の秘密を解き放つ:最大の効率性のための生徒と先生のフレームワーク
イントロダクション
近年、大規模言語モデルの進化が急速に進んでいます。BERTは、高い精度で様々なNLPタスクを解決することができる最も人気のある効率的なモデルの1つとなりました。BERTの後にも、他の多くのモデルが登場し、素晴らしい結果を示しました。
明らかにわかる傾向は、時間とともに大規模言語モデル(LLM)がパラメータの数とデータを指数関数的に増加させることで、より複雑になっているということです。ディープラーニングの研究からわかった通り、このようなテクニックは通常、より良い結果につながることが示されています。残念ながら、機械学習の世界では、LLMに関連するいくつかの問題が既に発生しており、拡張性が効果的なトレーニング、保存、使用の障害となっています。
この問題に注意を払い、LLMを圧縮するための特別な技術が開発されています。圧縮アルゴリズムの目標は、トレーニング時間を短縮するか、メモリ使用量を削減するか、モデルの推論を高速化することです。実際に使用される最も一般的な3つの圧縮技術は、次のとおりです:
- 生成モデルとノイズと構造のダンス’ (Seisei moderu to noizu to kōzō no dansu)
- 「自分自身の生成モデルを選択して実行するためのステップバイステップガイド」
- 「階層トランスフォーマー ― パート2」
- 知識蒸留は、より小さなモデルをトレーニングして、より大きなモデルの振る舞いを表現しようとするものです。
- 量子化は、モデルの重みを表すための数値を格納するメモリを削減するプロセスです。
- プルーニングは、モデルの重要性の低い重みを破棄することを指します。
この記事では、BERTに適用された蒸留メカニズムを理解し、DistillBERTと呼ばれる新しいモデルにつながったものについて理解します。ちなみに、以下で議論されるテクニックは他のNLPモデルにも適用できます。
蒸留の基礎
蒸留の目標は、より大きなモデルを模倣できるより小さなモデルを作成することです。実際には、大きなモデルが何かを予測すると、小さなモデルも似たような予測をすることが期待されます。
これを実現するためには、まず大きなモデルをプレトレーニングする必要があります(私たちの場合はBERT)。次に、より小さなモデルのアーキテクチャを選択する必要があります。成功した模倣の可能性を高めるためには、通常、小さなモデルがより少ないパラメータを持つ大きなモデルと類似のアーキテクチャを持つことが推奨されます。最後に、小さなモデルはあるデータセットにおいて大きなモデルによる予測から学習します。この目的のためには、より良い学習を支援する適切な損失関数を選択することが重要です。
蒸留の表記では、大きなモデルは先生と呼ばれ、小さなモデルは生徒と呼ばれます。
一般に、蒸留手法はプリトレーニング時に適用されますが、ファインチューニング時にも適用できます。
DistilBERT
DistilBERTはBERTから学び、損失関数を使用して重みを更新します。この損失関数には3つの要素が含まれます:
- マスク言語モデリング(MLM)損失
- 蒸留損失
- 類似性損失
以下では、これらの損失要素について説明し、それぞれの必要性を理解します。ただし、詳細に踏み込む前に、ソフトマックス活性化関数における温度という重要な概念を理解する必要があります。DistilBERTの損失関数で温度の概念が使用されています。
ソフトマックスの温度
ニューラルネットワークの最後の層としてソフトマックス変換を行うことがよくあります。ソフトマックスはモデルの出力を正規化し、それらを1に合計して確率として解釈するものです。
モデルのすべての出力を温度パラメータTで除算するソフトマックスの式が存在します:
温度Tは出力分布の滑らかさを制御します:
- Tが1より大きい場合、分布はより滑らかになります。
- Tが1の場合、通常のソフトマックスが適用された場合と同じ分布になります。
- Tが1より小さい場合、分布はより粗くなります。
わかりやすくするために、例を見てみましょう。入力オブジェクトが対応するクラスに所属する自信を示す5つの値を生成するニューラルネットワークによる5つのラベルの分類タスクを考えてみましょう。異なるTの値でソフトマックスを適用すると、異なる出力分布が得られます。
温度が大きくなると、確率分布はより滑らかになります。
損失関数
マスク言語モデリング損失
プレトレーニング中、学生(DistilBERT)は教師のモデル(BERT)と同様に、マスク言語モデリングタスクの予測を行うことによって言語を学びます。特定のトークンの予測を生成した後、予測された確率分布は教師モデルのワンホットエンコードされた確率分布と比較されます。
ワンホットエンコードされた分布は、最も可能性の高いトークンの確率を1に設定し、他のすべてのトークンの確率を0に設定する確率分布を指します。
ほとんどの言語モデルと同様に、予測と真の分布の間でクロスエントロピー損失が計算され、学生モデルの重みが逆伝播を通じて更新されます。
蒸留損失
実際には、学生のモデルを訓練するために学生の損失だけを使用することも可能です。ただし、多くの場合、それだけでは十分ではありません。学生の損失を単独で使用する場合の共通の問題は、そのソフトマックス変換で、温度Tが1に設定されているという点です。実際には、T = 1の場合、結果として得られる分布は、1に非常に近い非常に高い確率を持つ可能性のある1つのラベルを除いて、すべての他のラベルの確率が0に近くなる形になります。
このような状況は、2つ以上の分類ラベルが特定の入力に対して有効である場合に適切に整列しないため、問題です:T = 1のソフトマックス層は、すべてが一つを除くすべての有効なラベルを排除し、ワンホットエンコーディング分布に近い確率分布を作成します。これにより、学生モデルが学習できる可能性のある有用な情報が失われ、多様性が低くなります。
そのため、著者は蒸留損失を導入しています。蒸留損失では、ソフトマックスの確率はTが1より大きい温度で計算され、滑らかに確率を整列させることができます。これにより、学生の複数の可能な回答を考慮できます。
蒸留損失では、同じ温度Tが学生と教師の両方に適用されます。教師の分布のワンホットエンコーディングは削除されます。
クロスエントロピー損失の代わりにKLダイバージェンス損失を使用することも可能です。
類似度損失
研究者は、隠れた状態のエンベッド間にコサイン類似度損失を追加することが有益であると述べています。
これにより、生徒はマスクされたトークンを正しく再現するだけでなく、教師のエンベッドと似たものを構築する傾向があります。これにより、モデルの両空間のエンベッド間の同じ関係を保持することも可能になります。
トリプル損失
最後に、DistilBERTにおける損失関数を定義するために、すべての3つの損失関数の線形結合の合計が計算されます。損失の値に基づいて、バックプロパゲーションが生徒モデル上で行われ、重みが更新されます。
興味深い事実として、3つの損失要素のうち、マスクされた言語モデリング損失はモデルのパフォーマンスにおいて最も重要ではありません。
リソース
特記されていない限り、すべての画像は著者のものです。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles