(microgpt の仕様)= # microgpt の仕様 ## この章で学ぶこと - `microgpt.py` が何をするサンプルコードか - 入力ファイル `input.txt` の説明 - 入力された文字列を文字ごとのトークン列として学習すること - 学習された結果を使って文字列を生成すること この章は **仕様と入出力** にフォーカスします。コードのブロックごとの詳細は {numref}`microgpt の構造`({ref}`microgpt の構造`)で全体構造を、{numref}`microgpt の前処理` 以降で順に読みます。 ## このファイルがやっていること `microgpt.py` がやっていることは、驚くほど素直です。 - 文字列データを読む - 文字を整数 ID に変える - 次トークンを予測する - 予測のズレを損失として測る - 逆伝播で勾配を求める - 重みを更新する - 最後に新しい文字列を生成する :::: {container} mermaid-flow-half ```{mermaid} flowchart TB subgraph train_block["学習(閉ループ)"] T[トークナイズ] --> F[順伝播 gpt] F --> L[損失] L --> B[逆伝播] B --> U[Adam で重み更新] U --> F end SD{{state_dict}} U --> SD subgraph gen_block["生成(学習後の往復)"] SD --> G1[順伝播 gpt] G1 --> G2[softmax とサンプル] G2 --> G1 end ``` :::: **図: 学習で `state_dict` を更新し、生成では同じ重みを読みながらトークンを足していく** ## 入力ファイル `input.txt` 最初にやっているのは、学習に使う文字列を集めることです。詳細は {numref}`microgpt の前処理`。 ## 文字ごとのトークン列として学習 次に、文字を整数 ID に変えます。 ここで出てくる主な要素は次の通りです。 - `uchars` — データに現れる文字を並べた一覧(ID はインデックス)。 - `BOS` — 文の開始・終了を表す特別なトークン ID。 - `vocab_size` — 語彙に含まれるトークン数(文字 + BOS)。 学習ループの中身は {numref}`microgpt の前処理`(トークナイザー)、{numref}`microgpt の学習ループ`(学習ループ)で説明します。 ## 学習結果を使った文字列の生成 ### 生成 最後は推論です。 `BOS` から始めて、次の文字を 1 文字ずつ選んでいきます。`temperature` は低いと無難に、高いと少し冒険しやすくなります。つまり、このコードだけで**学習と生成の両方**が見えます。 詳細は {numref}`microgpt の推論ループ`。 ## 次に読む章 - {numref}`microgpt の構造`({ref}`microgpt の構造`)— 入力から出力までの流れと、各ブロックの一行概説 - {numref}`microgpt の前処理` 以降 — ブロックごとの詳細(データ、モデル、学習、推論)