第18章 microgpt の構造
18.1 この章で学ぶこと
この章で学ぶ内容は以下のとおりです。
学ぶこと |
ポイント |
|---|---|
7 ブロックの俯瞰 |
B1(データセット)〜B7(推論)として全体を地図化 |
データの流れ |
|
制御の流れ |
学習ループが B5( |
章との対応 |
各ブロックが ch17〜ch22 のどの章に対応するかを確認する |
第17章 microgpt の仕様 では仕様と入出力を振り返りました。 この章では 全体の骨格だけを示します。 長いコードの引用は置かず、短い説明と「どの章を読めばよいか」の対応表に留めます。
18.2 全体地図(入出力と 7 ブロック)
左に学習用の入力(文書集合と input.txt)、右に学習で更新される重みと、推論で得られる生成列を置きます。
中央には、第17章 microgpt の仕様 でも触れた B1〜B7 を配置しています。
Value(計算グラフ)と state_dict(学習対象パラメータの束)は データストアを円筒形のノードで示します。
図: 依存の目安。
実装では gpt が学習と推論の両方から呼ばれ、学習ループが B4 を更新します。
7 ブロックの役割
microgpt.py 全体は、役割の異なる 7 つのブロック B1〜B7 に分けて読めます。 それぞれが「何を担当するか」を先に押さえておくと、後続の章で行単位のコードを読むときに迷子になりません。
ブロック |
名前 |
役割 |
|---|---|---|
B1 |
データセット |
|
B2 |
トークナイザー |
文字と整数 ID を相互変換する。 |
B3 |
計算グラフ( |
演算を記録して自動微分を可能にする。逆伝播の土台となる |
B4 |
重みの束( |
モデルの全パラメータを保持する。学習で更新され、生成で参照される |
B5 |
モデル本体( |
埋め込み → Attention → MLP → logits の順伝播を行う中核 |
B6 |
学習ループ |
文書ごとに B5 を呼び、損失・逆伝播・Adam 更新で B4 を書き換える |
B7 |
推論ループ |
学習後の B4 を読み、温度付きサンプリングでトークン列を生成する |
データの流れと制御の流れ
上の図には 2 種類の流れが含まれています。 両者を区別すると、各ブロックの関係が見通しやすくなります。
データの流れ:
input.txt→docs/uchars(B1 と B2)→state_dict(B4)→ logits(B5)→ 生成トークン列(B7)と、値が変換されながら左から右へ進みます。制御の流れ:B6(学習ループ)と B7(推論ループ)が中核の B5(
gpt)を繰り返し呼び出す関係です。gpt自身はループを持たず、呼ばれるたびに 1 トークン分の順伝播を返すだけの部品です。
B5(gpt)は学習と推論の両方から共有されます。
学習ループ(B6)は gpt の出力から損失を計算して B4 を更新し、推論ループ(B7)は更新済みの B4 を使って gpt を呼びます。
同じ順伝播コードが、損失計算につながるか、サンプリングにつながるかで役割を変えます。
以上の入出力、7 ブロック、各種の流れを 1 枚にまとめると、次のようになります。
図18-1: microgpt 全体地図(入出力と 7 ブロック)。データの流れ、呼出(制御)、state_dict 参照/更新、内部の順序/利用を色分けして示す
18.3 ブロックから章への対応
ここまでで 7 ブロックの役割と全体の流れをつかみました。 各ブロックの中身を行単位で読むのは後続の章です。 下表で「どのブロックがどの章に対応するか」を確認し、興味のあるブロックから読み進めてください。
ブロック |
内容の要約 |
詳細を読む章 |
|---|---|---|
B1, B2 |
|
|
B3, B4 |
|
|
(B5 の部品) |
|
|
B5 |
|
|
B6 |
学習ループ、損失、Adam |
|
B7 |
|
18.4 次に読む章
第19章 microgpt の前処理から、上表の順に細部へ進んでください。 Python 実装を Mojo へ移す話は 第25章 microgpt.py を Mojo で書き直す、MAX の紹介は 第26章 MAX を導入する意味 です。