動画で読む
結論: 「ゼロから作る」は、運用者に "触らない部分の地図" をくれる
結論から書きます。Stanford の CS336(Language Modeling from Scratch、言語モデルをゼロから実装する講義)は、自分でモデルを学習しない API 運用者にこそ効く教材です。理由は、ふだんブラックボックスとして課金している層 — トークナイザ・学習・推論・データ・アライメント — の内側に、一度だけ地図を引いてくれるからです。地図があれば、障害のとき「どこを見ればいいか」が変わります。
きっかけは、CS336 の講義サイトが Hacker News に上がっていたことでした。担当は Tatsunori Hashimoto と Percy Liang。OS の講義に倣って「データ収集からトランスフォーマ実装、学習、評価まで全部自分で書かせる」と謳っています。私は LLM を学習する側ではなく、API で叩いて auto-publish を回す側です。最初は「自分には縁のない講義だ」と思って閉じかけました。でも課題一覧を見て、手が止まりました。私が毎月の請求書で見ている数字の、ほぼ全部がそこに並んでいたからです。
CS336 の 5 課題を、運用者の語彙に翻訳する
まず課題構成を、運用者が普段使う言葉に置き換えます。CS336 は 5 つの課題でできていて、それぞれが API 利用時に見えている数字の "裏側" に対応します。
| 課題 | 講義での内容 | 運用者が普段見ている対応物 |
|---|---|---|
| 1. Basics | tokenizer・Transformer・optimizer を実装 | トークン課金、context window |
| 2. Systems | GPU kernel と分散学習 | 推論レイテンシ、tokens/s |
| 3. Scaling | scaling law と各部品の役割 | モデルサイズと品質の関係 |
| 4. Data | Common Crawl を前処理して学習データ化 | モデルの知識の偏り、cutoff |
| 5. Alignment | SFT と強化学習で整える | 版が変わると変わる口調 |
この対応表を作っただけで、私は CS336 を「他人事の講義」から「自分の請求書の注釈」に読み替えられました。以下、運用に効く順に 3 つだけ掘ります。
tokenizer を自分で書くと、トークン課金の手触りが変わる
Assignment 1 で最初に書くのが tokenizer(テキストをモデルが食べる単位=トークンに刻む変換器)です。ここを一度自分で実装すると、トークン課金が「なんとなく高い」から「この日本語が高い理由」に変わります。
LLM の課金はトークン単位ですが、トークンは単語でも文字でもありません。BPE(Byte Pair Encoding、頻出するバイト列を貪欲に併合していく圧縮法)で決まる、中途半端な塊です。英語は 1 単語がだいたい 1 トークンに収まる一方、日本語は 1 文字が 2〜3 トークンに膨らむことがある。これを「知識」として知っているのと、併合処理を自分で書いて「なぜそうなるか」を知っているのは、別の解像度です。私は context engineering で Claude Code のトークン消費を半分にしたとき、最後まで効いたのが「日本語のプロンプトを削るとトークンが非線形に減る箇所」を狙うことでした。あれが効いた理由を、BPE の併合表をいじって初めて腹落ちさせられた覚えがあります。
実装の入口としては、Andrej Karpathy の minbpe が小さくて読みやすい。200 行ほどで、自分の請求書の単位がどう決まっているかを触れます。正直に書くと、私は最初 vocab を 256 のまま回して「全然圧縮されない」と 20 分ほど悩み、merge 回数を増やし忘れていただけ、というしょうもない失敗をしました。地図を引く側のはずが、最初の一歩で迷子になったわけです。
Assignment 2「Systems」は、推論の数字の根拠を見せてくれる
Assignment 2 の Systems は、GPU kernel と分散学習を扱います。運用者にとっての価値は、tokens/s やレイテンシといった "他人が出してくるベンチマーク数字" を、鵜呑みにせず疑えるようになることです。
たとえば「標準 GPU で 3000 tokens/s」という主張を見たとき、それが 1 リクエストあたりなのか全体スループットなのか、batch size はいくつか、で意味が 10 倍変わります。私はこの手の数字を標準 GPU で LLM 推論 3000 tokens/s という主張を運用者目線で読んだ記事で一度ほどきましたが、あのとき必要だった前提知識 — KV cache、batching、メモリ帯域がボトルネックになる構造 — は、まさに Systems 課題が手を動かして教える範囲でした。数字の出どころを 1 段だけ深く疑えると、ベンダーのスライドに振り回されにくくなります。
Assignment 5「Alignment」は、版で口調が変わる理由
Assignment 5 は SFT(Supervised Fine-Tuning、お手本の応答を真似させる工程)と強化学習でモデルを整えます。ここが分かると、「同じモデルなのに版が上がったら口調が変わった」という運用上の謎が、謎でなくなります。
モデルの個性は事前学習の総量ではなく、この後工程の味付けで決まります。私は別記事でモデルの個性は post-training で決まると書きましたが、CS336 はその "味付け" を自分の手で一度かけさせる講義です。すると、ベンダーが post-training を更新するたびに出力のトーンが動く理由が、構造として見えてきます。固定したい文体を system prompt 側で押さえる、という運用判断の根拠もここにありました。関連して、LLM は発散する、私は収束させる側でありたいで書いた違和感も、結局は後工程の癖をどう御すかの話だったのだと思います。
なお、このサイトの記事は AI が下書きを書き、私が公開前に確認・編集して出しています。CS336 を読み直したのも、自分が毎日使っている道具の内側を、運用者として一度はちゃんと見ておきたかったからです。
まとめ: 学習しない人ほど、一度は地図を引く価値がある
CS336 は「自分でモデルを学習するための講義」ですが、学習しない運用者にとっても "課金している層の地図" として効きます。持ち帰る点を並べます。
- tokenizer を一度書くと、トークン課金が具体的なコスト構造に見える
- Systems 課題は、他人の tokens/s 数字を疑う前提知識をくれる
- Alignment 課題は、版で口調が変わる理由を構造で説明する
- 全課題を「自分の請求書の注釈」として読み替えると、縁のない講義ではなくなる
地図は領土ではない。けれど地図がないまま毎月課金し続けるより、一度引いておく方がずっと心強い。
ゼロから作らない人こそ、一度はゼロから読む。触らない場所の地図は、障害のときにだけ価値を出す。
よくある質問
- モデルを学習しない API 利用者が CS336 を読む意味はありますか?
- あります。CS336 は普段ブラックボックスとして課金している層(tokenizer・推論・アライメント)の内側を一度だけ見せてくれます。学習しなくても、障害時に「どこを見ればいいか」の地図として効きます。
- tokenizer を自分で実装すると何が変わりますか?
- トークン課金が「なんとなく高い」から「この日本語が高い理由」に変わります。BPE の併合で英語は 1 単語が約 1 トークン、日本語は 1 文字が 2〜3 トークンに膨らむ構造を、手を動かして腹落ちできます。
- CS336 はどんな課題で構成されていますか?
- Basics(tokenizer・Transformer・optimizer)、Systems(GPU kernel と分散学習)、Scaling(scaling law)、Data(Common Crawl の前処理)、Alignment(SFT と強化学習)の 5 課題です。担当は Tatsunori Hashimoto と Percy Liang。
- 版が変わるとモデルの口調が変わるのはなぜですか?
- 個性は事前学習の総量ではなく、後工程の post-training(SFT や強化学習)の味付けで決まるからです。Alignment 課題を一度なぞると、ベンダーが後工程を更新するたびトーンが動く理由が構造で見えます。