萌えハッカーニュースリーダー

2025/03/20 01:25 Writing an LLM from scratch, part 10 – dropout

出典: https://www.gilesthomas.com/2025/03/llm-from-scratch-10-dropout
hakase
博士

やあ、ロボ子。今日はDropoutについて話すのじゃ。

roboko
ロボ子

Dropoutですか、博士。モデルの汎化性能を向上させるためのテクニックですよね。

hakase
博士

その通り!Dropoutは、モデルが特定の知識に偏らないように、知識を全体に広げる役割があるんじゃ。

roboko
ロボ子

訓練時にランダムにニューロンや重みを無視するとのことですが、具体的にはどういうことですか?

hakase
博士

ふむ。例えば、PyTorchの`torch.nn.Dropout`を使うと、Dropout率を設定して、その割合でニューロンの値をゼロにするんじゃ。記事にも「Dropout率(例:0.5)を設定し、行列に適用すると指定された割合の値をゼロにする」とあるぞ。

roboko
ロボ子

なるほど。でも、それだと情報が失われてしまうのではないですか?

hakase
博士

それがミソなのじゃ!一部を無視することで、モデルは他の部分に頼ることを学ぶ。結果として、よりロバストなモデルになるんじゃ。

roboko
ロボ子

大規模言語モデル(LLM)では、アテンションスコアのDropout率が通常10-15%とのことですが、なぜアテンションに適用するのですか?

hakase
博士

アテンションはモデルの注意機構じゃからな。アテンションの重みや、重みを値ベクトルに適用した後のZ行列にDropoutを適用することで、モデルが特定のトークンに過度に依存するのを防ぐんじゃ。

roboko
ロボ子

Z行列...各入力トークンに対して1行のコンテキストベクトルを持つ行列、ですね。

hakase
博士

そうそう。そして、Dropoutした後に、残りの値を調整する必要があるんじゃ。

roboko
ロボ子

調整、ですか?

hakase
博士

Dropoutによってゼロになった値の影響を補正するために、残りの値を`<math xmlns="http://www.w3.org/1998/Math/MathML" display="inline"><mrow><mn>1</mn><mo>−</mo><mi>d</mi></mrow></math>`(`<math xmlns="http://www.w3.org/1998/Math/MathML" display="inline"><mrow><mi>d</mi></mrow></math>`はDropout率)で割るんじゃ。例えば、Dropout率が0.5なら、残りの値は2倍になる。

roboko
ロボ子

なるほど、スケールを保つためですね。

hakase
博士

その通り!それから、実際のシナリオでは、アテンションスコアに対してDropoutを実行し、ゼロの代わりに`<math xmlns="http://www.w3.org/1998/Math/MathML" display="inline"><mrow><mo>−</mo><mo>∞</mo></mrow></math>`を代入することがあるんじゃ。

roboko
ロボ子

それはなぜですか?

hakase
博士

softmax関数に通すときに、ゼロにすると他の値に影響を与えてしまうからじゃ。`<math xmlns="http://www.w3.org/1998/Math/MathML" display="inline"><mrow><mo>−</mo><mo>∞</mo></mrow></math>`なら、softmax後には無視されるからな。

roboko
ロボ子

深いですね!

hakase
博士

じゃろ?

roboko
ロボ子

ところで博士、記事の最後に「LLMでバッチを処理するために必要な3階テンソルの扱い方について、より深く掘り下げる」とありますが、これはどういうことですか?

hakase
博士

ふむ。LLMでは、複数の文をまとめて処理するために、3階テンソルを使う必要があるんじゃ。バッチサイズ、系列長、特徴量の3つの次元を持つテンソルを効率的に扱う方法を学ぶ必要があるということじゃな。

roboko
ロボ子

なるほど。奥が深いですね。

hakase
博士

そうじゃろ?Dropoutも3階テンソルも、LLMを使いこなすには避けて通れない道じゃ。

roboko
ロボ子

頑張って勉強します!

hakase
博士

ところでロボ子、Dropoutって、まるで私がおやつを隠して、ロボ子に全部食べられないようにするみたいじゃな。

roboko
ロボ子

博士!私はおやつではありません!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search