概要
- Sebastian Raschka著「Build a Large Language Model (from Scratch)」第5章のまとめ
- クロスエントロピー損失やパープレキシティの理解が難所
- コード実装と動作確認でモデルが実際に動き始める興奮
- ランダム性、オプティマイザ、学習コスト、サンプリング手法の実践的な知見
- GPT-2の重み適用や「記憶化」防止技術の補足説明
「Build a Large Language Model (from Scratch)」第5章のまとめ
- クロスエントロピー損失 や パープレキシティ の理解が最も難しかった部分
- 残りのページ はコードを組み合わせて動作を確認する作業中心
- これまでの140ページ超で積み上げたものが、ここで一気に形になる体験
- サンプルデータセット「The Verdict」(Edith Wharton著)を使い、モデルが実際に テキスト生成 する様子を確認
- GPT-2のオリジナル 124Mパラメータ版の重み をOpenAIからダウンロードし、自作モデルに適用
- プロンプト に対するモデル出力の質が大幅向上
- 残りの章は主にこれまで作った部品を組み合わせる作業
ランダム性とシーディング
- コードを 自分で入力・実行 することを強く推奨
- 乱数シード (torch.manual_seed)を使っても、コード実行順序の違いで結果が完全一致しない場合あり
- 重要なのは 損失値が同程度 であり、出力が学習前は不明瞭→学習後は明瞭化する傾向が一致すること
- 学習開始時 に損失が下がり、検証損失が早期に安定化することを確認
オプティマイザの役割
- 伝統的な SGD (確率的勾配降下法)では自分でパラメータ更新
- 現代的な機械学習では オプティマイザ (AdamW等)が自動でパラメータ調整
- オプティマイザは 学習率を動的に調整 し、損失関数の局所最小値を回避する仕組み
- AdamWは 初期化時に学習率やweight decay を指定し、パラメータ管理
- optimizer.zero_grad() で勾配初期化、 loss.backward() で勾配計算、 optimizer.step() でパラメータ更新
- 詳細な仕組みの理解は今後の課題
学習速度とコスト
- 「The Verdict」データセットでの学習は MacBook Airで約5分、RTX 3090では 11秒未満
- GPUとCPUの速度差 の大きさを実感
- Llama 2の学習コストは 数十万ドル規模 とされるが、124Mパラメータモデルを個人環境で学習するコストに興味
- Andrej Karpathyは llm.c で124M GPT-2モデルを約$20で学習
- 学習速度(トークン/秒)を測定し、全データセット1エポック分の所要時間を見積もる計画
- Lambda Labs等のGPUクラウド 利用で、コストが数十~百ドルなら挑戦価値あり
「記憶化」、温度、top-kサンプリング
- 「記憶化」(memorisation)の定義の違いに混乱
- 本来は訓練時の「暗記」、ここでは「オウム返し」(parroting)の意味で使用
- ソフトマックス確率分布 からサンプリングする基本手法
- 温度 (temperature)で分布の鋭さを調整
- 温度>1で分布が平坦化、<1で鋭くなる
- 書籍内グラフやWebツールで体感的に理解
- top-kサンプリング は上位k個のトークンのみを確率分布対象にする手法
- k未満のロジットをマイナス無限大に置き換え、ソフトマックスで確率0に
- 「記憶化」防止というより、 多様性・創造性 を高めるための技術
OpenAIの重みダウンロードと適用
- GPT-2の 重みダウンロードコード はGitHubから取得推奨
- load_weights_into_gpt 関数もGitHubからコピペ推奨
- GPT-2シリーズの 埋め込み次元 は124Mモデルのみ768、それ以上はさらに大きいと判明
まとめと今後
- 第5章は記述量が少ないが、 LLMの基礎が動作する到達点
- 今後はこの基盤を活かし、 テキスト分類など応用課題 に挑戦予定
- nanochat等、新たなプロジェクトへの意欲
次回:テキスト分類への応用とさらなる探究