ニューラルネットワークがどのように学習するか:勾配降下法で自由エネルギーの地形を転がり降りる
このトピックを終えると
第2部で見た3362万個のダイヤル(重みとバイアス)が、どのように自動的に調整されて学習が完了するかを理解できるようになります。コスト関数、勾配、学習率という3つの要素の関係を1つのストーリーとしてまとめ、このプロセスが本質的に自然界における一般的な自由エネルギー最小化プロセスと同一であることを説明します。
この部分は、第4部(バックプロパゲーション)と、第11部で議論するRLHFの基本的な原理の基礎となります。
新しい酵素を発見した大学院生が直面するジレンマ
新しい酵素を同定し、その特性を調べているとしましょう。この酵素は特定の代謝反応を触媒しますが、最適な反応条件はまだわかっていません。あなたのタスクは、実験的にこの酵素が最も活性が高い条件を決定することです。
まず、酵素の活性に影響を与えるのは、温度とpHの2つの条件だけであると仮定します。他のすべての条件(基質濃度、イオン強度、補因子の存在または不在)は一定に保ちます。
もし時間とリソースが無制限にあるとしたら、どのように進めますか? 温度を4℃から60℃まで1℃ずつ、pHを4.0から10.0まで0.1ずつ変化させて、すべての組み合わせをテストすることができます。それは57×61 = 3477の条件になります。各条件を3回繰り返すと、約10,000回の実験が必要になります。数か月かかりますが、最終的には最適な条件を見つけることができます。
しかし、実際の状況はさらに悪いです。もし影響を与えるパラメータが2つではなく、5つ、10個、あるいは100個だったらどうでしょうか? 各パラメータに対してグリッドサーチを使用すると、組み合わせの数が指数関数的に増加します。わずか100個のパラメータがあり、それぞれ10ステップの場合、10^100個の組み合わせがあります。これは宇宙にある原子の数(約10^80個)よりも多くの実験が必要になるため、明らかに不可能です。
私たちが学習しているニューラルネットワークには、第2部で見たように3362万個のパラメータがあります。グリッドサーチは物理的に不可能です。もっと賢い方法が必要です。
ここで学ぶ方法は、勾配降下法です。実際、この方法はニューラルネットワークの学習に特化したテクニックではなく、自然界が化学反応、タンパク質のフォールディング、生態系のバランスにおいて、長い間使用してきた原理です。自然は、多次元の条件空間を探索することなく、どのように最適な状態を見つけるのでしょうか? 答えは、ニューラルネットワークがこの原理を直接借用しているということです。
自由エネルギー地形:自然界の最小化問題
学部時代の化学または生化学の授業で、自由エネルギー地形という概念に触れたことがあるかもしれません。これは、横軸に化学反応の進行、縦軸に自由エネルギーを示した曲線です。それは、丘、谷、鞍点がある荒れた地形です。
この地形の中で、反応はどのように進むのでしょうか? それはより低い自由エネルギーに向かって転がり落ちます。場合によっては、活性化エネルギーの障壁を乗り越える必要がありますが、最終的にはより安定した、自由エネルギーの低い状態に落ち着きます。この原理は、有機反応、酸化還元反応、タンパク質のフォールディング、自己組織化を説明します。
重要なのは次の点です。全体の地形がわからない場合でも、各点で「どの方向に進めば自由エネルギーが低下するか」がわかっていれば、最小点に向かって進むことができます。 転がるボールは、事前に地形全体を見るわけではありません。それは、足元の傾きだけを感じています。
ニューラルネットワークにおける学習は、概念的に同じプロセスです。
私たちは、以下のようなものを持っています。
- 自由エネルギー地形の代わりに、コスト関数の地形があります。
- 反応座標の代わりに、**パラメータ空間(数百万または数十億の次元)**があります。
- 自由エネルギーの最小状態の代わりに、**最小のコスト(最も正確な予測)**という目標があります。
この視点を念頭に置いておくと、その後のすべての概念が自然につながります。
コスト関数:モデルの性能を定量化する
まず、コスト関数について説明しましょう。コスト関数または損失関数は、現在のニューラルネットワークの予測と正解との違いを数値で表す関数です。値が大きいほど、予測が正解から離れており、0に近いほど、正解に近いことを示します。
パート2の病理スライドの例に戻りましょう。あるスライドに対して、ニューラルネットワークが「正常」に対して0.7、「陽性」に対して0.2、「悪性」に対して0.1という確率を出力したとします。しかし、実際の正解は「悪性」です。この予測は、どれくらい悪いのでしょうか?
クロスエントロピーと呼ばれるコスト関数を使用できます。この場合、値は-log(0.1) ≈ 2.30となります。もしニューラルネットワークが、正解である「悪性」に0.9という確率を割り当てていれば、-log(0.9) ≈ 0.11となり、これははるかに小さくなります。もし、正解に1という確率を割り当てていれば、正確に0になります。
これを、トレーニングデータセット内のすべてのサンプルに対して計算し、平均を取ります。トレーニングデータセット全体の平均コストが、私たちが最小化したいものです。この平均コストは、トレーニング損失と呼ばれます。
詳細については付録A.1で説明しますが、ここでは主要な概念を理解しておきましょう。コスト関数には、次の2つの特性があります。
**第一に、パラメータのみに依存します。**データセットとニューラルネットワークの構造を固定すると、コスト関数の値は、パラメータ(重みとバイアス)の値によって決定されます。パラメータをわずかに変更すると、コストもわずかに変化します。
**第二に、微分可能です。**パラメータが連続的に変化すると、コストも連続的に変化します。つまり、「このパラメータをわずかに増加させると、コストはどれだけ増加または減少するか」という問いに答えることができます。この偏微分が、後で説明する勾配の本質です。
**アナロジー:**酵素の例では、定義するコストは「最大活性値 - 現在の条件での活性」です。最適な条件にある場合、この値は0になります。最適から離れるにつれて、値は増加します。温度とpHの値がわずかに変化すると、活性もわずかに変化し、コストもわずかに変化します。ニューラルネットワークのコスト関数は、構造としては同じですが、2つではなく3362万個のパラメータがあるという点が異なります。
勾配:より良い方向に進むには、どの方向に進むべきか?
ボールが地形の中を転がるという問題に戻りましょう。ボールは、足元の傾きを感知するだけで良いと述べました。パラメータ空間におけるこの「勾配」に対応するものは何でしょうか?
勾配は、コスト関数の各パラメータに関する偏微分をまとめたベクトルです。つまり、3362万個のパラメータがある場合、勾配ベクトルも3362万次元になります。
勾配ベクトルの各要素の意味は次のとおりです。「このパラメータをわずかに増加させると、コストはどれだけ増加(正の値)または減少(負の値)するか?」
- 要素の値が大きく、正の場合:このパラメータを増加させると、コストが急速に増加する → 減少させるべきです。
- 要素の値が大きく、負の場合:このパラメータを増加させると、コストが急速に減少する → 増加させるべきです。
- 要素の値が0に近い場合:このパラメータは、その近傍ではコストにほとんど影響を与えない → そのままにしておいて良いでしょう。
3362万個のパラメータすべてについて計算されたこのベクトルが、勾配です。
勾配の方向は、コストが最も急速に増加する方向を示します。したがって、私たちは反対方向に進む必要があります。これが、勾配降下の名前の由来です。下降は、上昇の反対です。
これで、多次元の自由エネルギー地形の中を転がるボールのイメージは、より具体的に次のように定義できます。
- 現在のパラメータ位置で勾配を計算します。
- パラメータを、勾配の反対方向にわずかに移動させます。
- 新しい位置で勾配を再計算します。
- これを繰り返します。
1回の移動がステップであり、パラメータが徐々に良好な値(低いコスト)に収束するプロセス全体がトレーニングと呼ばれます。
しかし、どのようにして勾配を計算するのでしょうか? 3362万個のパラメータがありますが、それらすべてについて偏微分をどのように計算するのでしょうか? ここで、パート4の主人公であるバックプロパゲーションアルゴリズムが登場します。パート4で詳細に説明します。現時点では、「勾配を計算できると仮定し、その計算方法についてはパート4に先送りします」として、話を続けましょう。
学習率:どのくらい動かすべきか?
勾配の反対方向がわかったので、次の質問は「どのくらい動かすべきか?」です。
この大きさを調整する値が、学習率です。ギリシャ文字の η (イータ) または α (アルファ) で表されます。
パラメータの更新式は非常に単純です。
新しいパラメータ = 現在のパラメータ - 学習率 × 勾配学習率が大きいほど、1ステップで大きく動き、小さいほど、少し動きます。
**学習率が小さすぎると、**学習が遅くなります。最適な値に到達するまでに数時間かかる学習が、数日かかる可能性があります。
学習率が大きすぎると、谷の底を通り過ぎて、丘の反対側に到達してしまいます。次のステップで反対方向に動きますが、再び通り過ぎてしまいます。これは振動と呼ばれます。極端な場合、学習が収束せず、より悪い状態になる可能性があります。
適切な学習率は、地形の曲率に依存します。谷が狭くて深い場合は、小さい学習率が適切であり、広く浅い場合は、大きい学習率が適切です。実際には、学習の初期段階で大きい学習率(迅速な近似のため)から始めて、その後、学習の後半で学習率を徐々に小さくすることが一般的です。これは学習率のスケジューリングと呼ばれます。
生物学的アナロジー:パート1で言及した方向性進化スクリーニングに戻りましょう。学習率は、まさに突然変異率に対応します。突然変異率が低すぎると、元の配列から抜け出すことができず、進化が進まず、高すぎると、有用な組み合わせが維持されず、崩壊します。最適な突然変異率は、問題とラウンドに依存し、通常は後半で小さくなります。これは、ニューラルネットワークの学習における学習率スケジューリングと同じ概念です。
局所的最小値:地形の中の罠
自由エネルギーのランドスケープには、反応が頻繁に陥る2つのタイプの最小値があります。
**グローバル最小値:**ランドスケープ全体の自由エネルギーが最も低い点。最も熱力学的に安定な状態です。
**局所的最小値:**周囲よりも低い点ですが、グローバル最小値ではありません。反応がここでトラップされると、活性化エネルギーの障壁を克服できず、悪い状態に留まります。
同じ問題は、ニューラルネットワークの学習にも存在します。パラメータ空間を転がりながら、局所的最小値にトラップされる可能性があります。これは、学習損失がいくらか減少し、その後、減少が停止する状態です。
**興味深いことに、**大規模なニューラルネットワーク(数億のパラメータ)の学習損失ランドスケープには、理論的に予想されるよりもはるかに少ない局所的最小値があることが経験的に示されています。これは、パラメータ数が非常に多い場合、ある方向に局所的最小値である場合、通常は別の方向に移動できるためです。つまり、鞍点(ある方向では最大値、別の方向では最小値)は、真の局所的最小値よりもはるかに一般的です。幸いなことに、鞍点は少し揺さぶることで脱出できます。
それでも、実際には、学習はしばしば「学習損失が特定の点で停滞する」という問題に遭遇します。これを緩和するためのいくつかのテクニックがあり、これらは後で説明する最適化アルゴリズムで議論されます。
生物学的アナロジー:タンパク質フォールディングの問題には、同じ構造があります。ポリペプチド鎖がフォールドするとき、局所的最小値にトラップされて誤ってフォールドすると、凝集体が形成されます。これは、パート1で言及したアルツハイマー病およびパーキンソン病の病因であるアミロイドβおよびα-シヌクレインの凝集物です。自然は、この問題をシャペロンタンパク質と熱ショック応答によって解決します。ニューラルネットワークの学習における最適化アルゴリズムは、これらのシャペロンの役割を果たします。
確率的勾配降下法 — バッチングからの洞察
次に、実用的な問題を考えてみましょう。コスト関数を計算し、トレーニングデータセット全体に対して勾配を取得するには、各ステップですべてのトレーニング例をニューラルネットワークに渡す必要があります。データセットに数億の例がある場合、1つのステップには数分から数時間かかる可能性があります。このペースでは、学習は非現実的になります。
解決策は、各ステップでデータセットの**小さな部分(ミニバッチ)**のみを使用することです。たとえば、200万件のデータセットでは、各ステップでランダムに256件の例を選択し、そのバッチのコストと勾配を計算し、パラメータを更新します。
これは**確率的勾配降下法(SGD)**と呼ばれます。これは「確率的」と呼ばれます。これは、各ステップでの勾配が、データセット全体の真の勾配の近似値であるためです。バッチはランダムに選択されるため、毎回わずかに異なる勾配の方向が得られます。
このノイズは、実際には良いことになり得ます。データセット全体の勾配を完全に追跡すると、鞍点に到達してそこで立ち往生してしまう可能性があります。ただし、確率的ノイズを使用すると、鞍点から脱出しやすくなります。 このため、SGDは、理論的な純粋な勾配降下法よりも、実際にはより優れた結果をもたらすことがよくあります。
バッチサイズのトレードオフ:
- **小さいバッチ(例:32〜256):**ノイズが大きく、トレーニングが不安定になりますが、鞍点から脱出しやすく、GPUメモリを節約できます。
- **大きいバッチ(例:4096〜32768):**ノイズが小さく、安定していますが、鞍点に陥るリスクが高く、より多くのGPUメモリが必要です。
実際には、ハードウェアの予算に収まる最大のバッチサイズを使用するか、バッチサイズと組み合わせて学習率を調整します。
最適化アルゴリズムの進化 — 純粋なSGDからAdamへ
純粋なSGDは、各ステップで学習率をかけて、勾配の反対方向に移動するだけです。この単純さは、いくつかの問題を引き起こす可能性があります。
問題1:方向の振動. 谷の一方の側で前後に振動し、下降が難しくなります。
問題2:学習率の調整の難しさ. 最適な学習率は、各パラメータによって異なる可能性がありますが、すべてのパラメータに対して同じ学習率を使用します。
問題3:勾配消失. 非常に小さい勾配を持つパラメータは、トレーニング後に効果的に更新が停止する可能性があります。
これらの問題を軽減するために、さまざまな最適化アルゴリズムが開発されてきました。
Momentum. 物理学における慣性の概念を導入します。前のステップからの動きの方向の一部を維持し、振動を抑制し、谷に向かって加速します。摩擦の代わりに慣性を持つボールが転がるようなものです。
RMSprop. 各パラメータについて、最近の勾配の大きさの平均を追跡し、各パラメータの学習率を自動的に調整します。大きな勾配を持つパラメータの学習率を自動的に下げ、小さな勾配を持つパラメータの学習率を維持します。
Adam (Adaptive Moment Estimation). MomentumとRMSpropを組み合わせます。現在、ニューラルネットワークのトレーニングにおける事実上の標準的な最適化アルゴリズムです。ほとんどの論文と実用的なコードでは、Adam(またはそのバリアントであるAdamW)がデフォルトとして使用されます。
AdamW. 重み減衰を分離したAdamの改良版です。現在、大規模言語モデルのトレーニングにおける事実上の標準となっています。
パート1の事前学習とファインチューニングで使用される最適化アルゴリズムは、主にAdamWです。付録A.4〜A.7には、各最適化アルゴリズムの正確な数式とハイパーパラメータが記載されています。
実際のトレーニングプロセス
すべての要素を組み合わせてみましょう。ニューラルネットワークのトレーニング全体のサイクルは次のようになります。
パラメータをランダムに初期化
繰り返す(数千回から数百万回):
ミニバッチをランダムに選択する(例:256個のサンプル)
ミニバッチに対して順伝播を実行する(パート2)→ 予測を取得
予測と正解に基づいてコストを計算
逆伝播を実行する(パート4)→ 勾配を計算
最適化アルゴリズム(Adam)を使用してパラメータを更新
トレーニング損失が許容できるレベルに達したら終了各ステップにはミリ秒から数秒かかり、大規模モデルを収束させるためには、これらのステップを数千回から数百万回繰り返す必要があります。そのため、大規模なニューラルネットワーク(GPTレベル)のトレーニングには、数週間から数か月かかることがあります。
バイオマッピングに戻る. パート1では、このサイクル全体を方向性のある進化サイクルにマッピングしました。
- 初期パラメータ = 初期ランダム抗体ライブラリ
- ミニバッチ = このラウンドでテストするサンプル
- コスト計算 = ターゲット結合強度の測定
- パラメータの更新 = 好ましい方向にライブラリを再構成(突然変異 + 選択)
- 数百万回繰り返す = 複数のスクリーニングラウンド
興味深い視点. 方向性のある進化が自然進化よりもはるかに高速である理由は、選択圧力が明確で強いからです。ニューラルネットワークのトレーニングも、同じ理由で高速です。明示的な選択圧(コスト関数)があり、各ステップで進むべき方向を教えてくれるからです。自然進化とは異なり、ニューラルネットワークのトレーニングは、勾配という形で情報を持っており、はるかに方向性があります。
パラメータの進化 — トレーニング中に何が変わるのか?
トレーニング中に実際に何が変わるのかを視覚化してみましょう。病的なニューラルネットワークの例を考えてみましょう。
トレーニングの開始時: パラメータはランダムです。ニューラルネットワークの予測は完全にランダムです(正常、陽性、悪性の確率はおよそ33%)。トレーニング損失は非常に高くなります。
初期のトレーニング(数千ステップ): パラメータは徐々に調整され、ニューラルネットワークは基本的なパターンを捉え始めます。たとえば、「画像に暗い斑点が多い場合、腫瘍の確率が高くなる」という、非常に低レベルのパターンです。トレーニング損失は急速に低下します。
中期のトレーニング(数万ステップ): 隠れ層のニューロンは、より高度な特徴を捉え始めます。パート2で議論したように、細胞境界と核の異常を検出するものが形成されます。トレーニング損失は徐々に減少します。
後期のトレーニング(数十万ステップ): パラメータが微調整され、分類が難しい境界ケース(例:初期の腫瘍と正常組織)の精度が向上します。トレーニング損失の減少率は非常に遅くなります。
過学習ポイント: ある時点で、トレーニング損失は引き続き減少しますが、検証損失(トレーニングに使用されていないデータでの損失)は増加し始めます。これは、ニューラルネットワークがトレーニングデータの特定のノイズを記憶し始めている兆候です。現実世界で良好なパフォーマンスを得るためには、この時点までにトレーニングを停止する必要があります。これはアーリーストッピングと呼ばれ、検証損失を監視することは標準的な方法です。
生物学における応用シナリオ
このパートで説明した概念は、どのように実用的な応用につながるのでしょうか?
シナリオ1 — 細胞タイプ分類器のトレーニング
パート2で議論したscRNA-seq細胞タイプ分類器を実際にトレーニングする場合、このパートの概念を直接利用します。
- コスト関数: 各細胞における、予測された確率分布と実際の細胞タイプの間のクロスエントロピー。
- ミニバッチ: トレーニングデータセットから抽出された128〜1024個の細胞。
- 最適化アルゴリズム: 通常はAdamまたはAdamW。
- 学習率: 1e-3から開始し、10エポック後に1e-4に減衰。
- 早期停止: 検証データセットにおける精度が5エポック改善しない場合に停止。
ScanpyやscVIなどのライブラリは、このトレーニングループを内部的に処理しますが、最適化アルゴリズムと学習率を調整するためのAPIを提供しています。
シナリオ2 — AlphaFoldのトレーニングは同じ原則に従う
DeepMindによって開発されたAlphaFold(タンパク質構造予測)のトレーニングも、このパートの原則に従っています。
- コスト関数: 予測された構造と実際の構造の間の座標誤差(複数のコンポーネント)。
- ミニバッチ: トレーニングデータベース(PDB)から抽出された128個のタンパク質。
- 最適化アルゴリズム: AdamW。
- 学習率スケジュール: ウォームアップに続いてコサイン減衰。
- トレーニング規模: 128個のTPUで数週間。
パラメータ数は、数千万から数億個です。これは、パート2で議論した規模と一致します。
シナリオ3 — 実験条件の最適化におけるベイズ最適化の代替手段
逆に応用することも可能です。酵素活性、細胞培養条件、遺伝子編集効率などの実験条件を最適化するために、条件から結果へのマッピングを学習するようにニューラルネットワークをトレーニングし、次にニューラルネットワーク内で勾配降下法を使用して最適な条件を見つけることができます。
従来、これらの問題はベイズ最適化を使用して解決されていましたが、十分なデータがある場合、ニューラルネットワークベースのアプローチの方が効率的です。これは特に、パラメータ空間が高次元(10次元以上)の場合に当てはまります。
主要なポイント
- ニューラルネットワークのトレーニングは、コスト関数の最小値を見つけるための最適化問題です。これは、自然界における自由エネルギーを最小化するプロセスと全く同じ概念です。
- コスト関数の勾配は、パラメータ空間内でコストが最も急速に増加する方向です。その反対方向に移動することで、コストを削減できます。
- 移動の大きさは、学習率です。これは概念的に、指向性進化における突然変異率と同じです。
- 実際には、**確率的勾配降下法(SGD)**を使用します。これは、データの一部であるミニバッチのみを使用します。このノイズは、鞍点から脱出するのに役立ちます。
- AdamやAdamWのような、より高度な最適化アルゴリズムは、純粋なSGDよりもはるかに実用的です。これらは現在、標準となっています。
- 局所的最小値と鞍点は、潜在的な落とし穴ですが、高次元空間では鞍点の方が一般的であり、SGDのノイズは通常、そこから脱出するのに役立ちます。
- 過学習は、トレーニングの後半段階で始まり、したがって、検証損失を監視し、早期停止を使用することが標準的なプラクティスです。
📐 付録 — 専門家向けの数学的公式
難易度: 非常に難しい 対象読者: 線形代数、微積分、最適化理論に関する大学院レベルの知識を持つ読者。
A.1 コスト関数の定義
平均二乗誤差 (MSE) — 回帰問題の標準的なもの:
L_MSE(θ) = (1/N) · Σ_{i=1}^{N} (y_i - f_θ(x_i))^2x_i: i番目の入力。y_i: i番目の正解データ。f_θ(x_i): ニューラルネットワークの予測値。θ: すべてのパラメータの集合。
クロスエントロピー — 分類問題の標準的なもの:
L_CE(θ) = -(1/N) · Σ_{i=1}^{N} Σ_{c=1}^{C} y_{i,c} · log(f_θ(x_i)_c)C: クラスの数。y_{i,c}: ワンホットエンコーディングされた正解データ(正しいクラスcの場合は1、それ以外は0)。f_θ(x_i)_c: ニューラルネットワークがクラスcに割り当てる確率。
これは、パート1の付録A.3で定義されたものと同じ形式です。
A.2 勾配の定義
パラメータ θ に関するコスト関数の勾配は次のとおりです。
∇_θ L = [ ∂L/∂θ_1, ∂L/∂θ_2, ..., ∂L/∂θ_P ]P は、すべてのパラメータの総数です(数百万から数十億)。
各偏微分 ∂L/∂θ_i は、パラメータ θ_i をわずかに増加させたときにコストが変化する量の極限です。
∂L/∂θ_i = lim_{ε → 0} [L(θ_1, ..., θ_i + ε, ..., θ_P) - L(θ)] / εこれらの偏微分を効率的に計算するためのアルゴリズムは、バックプロパゲーションです(パート4)。
A.3 バニラ勾配降下法による更新ルール
パラメータの1ステップの更新:
θ_{t+1} = θ_t - η · ∇_θ L(θ_t)θ_t: ステップtにおけるパラメータ。η: 学習率。∇_θ L(θ_t): ステップtにおける勾配。
これを繰り返すと、局所的な最小値に収束します(収束は特定の条件下でのみ保証されます)。
A.4 SGDのミニバッチ近似
データセット全体ではなく、ミニバッチ B_t ⊂ D(ランダムサンプリング、サイズ |B|)を使用して、勾配を近似します。
∇̂_θ L(θ_t) = (1/|B|) · Σ_{i ∈ B_t} ∇_θ ℓ(θ_t, x_i, y_i)ℓ は、単一の例に対する損失です。これは、全体的な勾配の不偏推定量です。
E[∇̂_θ L] = ∇_θ L (全体)A.5 モーメンタム
前のステップからの移動方向(速度)を維持し、慣性のようにします。
v_t = β · v_{t-1} + ∇̂_θ L(θ_t)
θ_{t+1} = θ_t - η · v_tβ: モーメンタム係数(通常は0.9)。
これは、摩擦係数が (1 - β) のボールの物理シミュレーションにおける動きに似ています。
A.6 RMSprop
各パラメータの最近の勾配の二乗値の平均に基づいて、学習率を自動的に調整します。
s_t = ρ · s_{t-1} + (1 - ρ) · [∇̂_θ L(θ_t)]^2
θ_{t+1} = θ_t - η · ∇̂_θ L(θ_t) / (sqrt(s_t) + ε)ρ: 指数移動平均係数(通常は0.999)。ε: 数値的な安定性のための小さな値(例: 1e-8)。
大きな勾配を持つパラメータの場合、sqrt(s_t) は大きくなり、学習率を効果的に減少させます。
A.7 Adam(適応モーメント推定)
モーメンタムとRMSpropを組み合わせます。
m_t = β_1 · m_{t-1} + (1 - β_1) · ∇̂_θ L(θ_t) (第1モーメント)
v_t = β_2 · v_{t-1} + (1 - β_2) · [∇̂_θ L(θ_t)]^2 (第2モーメント)
m̂_t = m_t / (1 - β_1^t) (バイアス補正)
v̂_t = v_t / (1 - β_2^t) (バイアス補正)
θ_{t+1} = θ_t - η · m̂_t / (sqrt(v̂_t) + ε)一般的なハイパーパラメータ:
β_1 = 0.9β_2 = 0.999ε = 1e-8
バイアス補正は、モーメントがトレーニングの初期段階(tが小さい場合)でゼロに偏る問題を解決します。
A.8 AdamW(デカップルド重み減衰を伴うAdam)
Adam内で適用する代わりに、重み減衰を別の項として分離します。
θ_{t+1} = θ_t - η · m̂_t / (sqrt(v̂_t) + ε) - η · λ · θ_tλ: 重み減衰係数(通常は0.01)。
これは、L2正則化とは異なり、重みを正確に縮小します。大規模な言語モデルのトレーニングの標準です。
A.9 学習率スケジュール
コサインアニーリング:
η_t = η_min + (1/2) · (η_max - η_min) · (1 + cos(π · t / T))T は、トレーニングの総ステップ数です。学習率は、コサイン曲線に沿ってスムーズに減少します。
ウォームアップ: トレーニングの最初の数ステップで、学習率を0から目標値まで線形に増加させます。大規模モデルにおける初期の不安定性を軽減します。
ワンサイクルポリシー: ウォームアップ → コサイン減衰 → 短期間、非常に低い値で維持します。 実用で広く使用されています。
A.10 サドルポイント解析
パラメータ空間におけるヘッセ行列 H = ∇^2 L(θ) の固有値の符号によって、臨界点を分類します。
- すべての固有値 > 0: 局所的な最小値(すべての方向で凸)。
- すべての固有値 < 0: 局所的な最大値。
- 符号が混合: サドルポイント。
- 一部の固有値 = 0: 平坦なポイント(分析が困難)。
高次元のニューラルネットワークでは、サドルポイントは局所的な最小値よりもはるかに一般的です。理論的には、P次元空間におけるランダムな臨界点が局所的な最小値である確率は約 2^{-P} であり、指数関数的に小さくなります。したがって、3362万次元の空間では、遭遇するほぼすべての臨界点はサドルポイントです。
参考文献
このセクションで紹介するすべての内容、シナリオ、たとえ話、および数値は、BioPlaygroundが社内で開発したものです。以下は、概念学習に役立つ外部の参考文献です。
- Adamの原論文: Kingma & Ba, "Adam: A Method for Stochastic Optimization" (ICLR 2015)
- AdamWの原論文: Loshchilov & Hutter, "Decoupled Weight Decay Regularization" (ICLR 2019)
- 標準的な深層学習の教科書: Goodfellow et al., "Deep Learning" 第8章 (最適化)
- 損失関数の可視化: Li et al., "Visualizing the Loss Landscape of Neural Nets" (NeurIPS 2018)
- 勾配降下法の収束理論: Nocedal & Wright, "Numerical Optimization" (Springer)
- 深層学習の可視化による教育: 3Blue1Brown "Deep Learning" 第2章 (YouTube) - 教授法上の参考資料として
- AlphaFold論文: Jumper et al., "Highly accurate protein structure prediction with AlphaFold" (Nature 2021)
このセクションは、原理に関するセクションの2番目の部分であり、パート4(逆伝播)の基礎となります。次のセクションでは、このセクションで「計算可能であると仮定されている」3362万個のすべてのパラメータに対して、効率的に勾配をどのように取得するかについて詳しく説明します。
次の概念
- 編 #4
backpropagation-intuition— 勾配を計算する方法。誤差の民主的な綱引きと連鎖律。 - 編 #5
transformer-and-embedding— この学習原理がTransformerでどのように拡張されているか。 - 編 #11
hallucination-and-alignment— RLHFもまた、最終的にはこのエピソードの勾配降下の応用です。