llm-from-scratch リポジトリ解説このリポジトリのタイトルは llm-from-scratch。直訳すると「LLMを最初から作る」です。
ここで言う “from scratch” は、既成の高級ライブラリに頼って魔法のように完成品を使うのではなく、モデルの仕組みを自分の手で順番に実装していくという意味です。
正直、これはかなり魅力的です。
LLMって、使うだけなら今はとても簡単です。でも「なぜ入力が文字から数字に変わるのか」「どうやって次の単語を予測しているのか」「学習で何が起きているのか」は、ブラックボックスのままだと見えにくい。
この教材は、そのブラックボックスを少しずつ開けていくタイプのプロジェクトだと思います。
READMEによると、このワークショップは GPTの学習パイプラインを全部自分で書くことを目指しています。
しかも、かなり大規模なモデルを狙うのではなく、約10Mパラメータの小さなモデルに絞っているのがポイントです。
なぜ小さくするのかというと、ノートPCでも学べるようにするためです。READMEでは、MacBook上でおおむね1時間未満で訓練できるサイズを目指していると書かれています。
この割り切りがすごく良いです。LLM学習はどうしても「重い・高い・難しい」の三重苦になりがちですが、この教材はそこをうまく避けています。学習の本質に集中できるわけです。
このワークショップで作るものは、ざっくり言うと 「入力された文字列の続きを、それっぽく生成するGPT」 です。
最終的には、学習済みのモデルが Shakespeare風の文章 を出せるようになります。
自分で書くことになるのは、主に次の部分です。
文章を、モデルが扱える数字に変える仕組みです。
たとえば "hello" を [20, 43, 50, 50, 53] のようなID列に変換します。
ここでのTokenizerは character-level tokenizer、つまり文字単位です。
最近のLLMではBPE(単語の一部をうまく分割する方式)がよく使われますが、この教材ではあえて文字単位を採用しています。理由はシンプルで、小さなデータにはBPEがあまり向かないからです。
これはかなり実践的な判断だと思います。理論的にはBPEのほうが賢そうに見えても、データが少ないと学習しにくい。現場では「何が理屈として正しいか」より「何がちゃんと学べるか」が重要です。
Transformerを実装します。
中身は、embeddings(埋め込み)、self-attention(自己注意)、feed-forward layers などです。
Transformerは、今のLLMの心臓部みたいなものです。
ざっくり言うと、文中のどの部分がどの部分と関係あるかを見ながら次の出力を決める仕組みです。
人間の直感で言えば、「この単語はさっきのこの単語とつながってるな」と見ている感じに近いです。
学習の流れを作ります。
forward pass(順伝播)、loss(どれだけ外したかの指標)、backprop(誤差逆伝播)、optimizer(重み更新の方法)、learning rate scheduling(学習率の調整)まで、ひと通り扱います。
ここは地味だけど重要です。
モデルの構造だけ知っていても、どうやって賢くなっていくのかが分からないと、LLMはただの箱のままです。
個人的には、LLM学習の面白さはこの学習ループにかなりあると思います。モデルが少しずつまともになっていく感じは、見ていてかなり気持ちいいはずです。
学習したモデルから文章を生成します。
Temperature(出力のランダムさを調整する値)や top-k(候補を上位k個に絞る方法)など、sampling(サンプリング)の基本も学べます。
ここは「AIが喋ってる感」が一番出る部分です。
学習と違って、結果がすぐ目に見えるので、かなり達成感があるはずです。
READMEには、ワークショップが段階的に進む構成であることが示されています。
Part 1: Tokenization
Part 2: The Transformer
Part 3: The Training Loop
Part 4: Text Generation
Part 5: Putting It All Together
Part 6: Competition
この流れがとても良いです。
最初から全部を理解させようとせず、「部品ごとに理解して、最後に合体する」のが教育としてかなり上手い。
機械学習って、いきなり全体像を見せられると途端に意味不明になりがちなので、この分解の仕方はかなり親切だと思います。
READMEには、GPTの流れが非常にシンプルに整理されています。
Input Text
Tokenizer
Token Embed + Position Embed
Transformer Block
LayerNorm + Linear
この一連の流れを、自分のコードで組めるようになるのがこの教材の価値です。
「LLMは結局、次のトークンを予測しているだけ」とよく言われますが、その“だけ”の中身がどれだけ工夫されているかを実感できそうです。
READMEには、学習用のモデル設定も載っています。
それぞれ、n_layer、n_head、n_embd が違います。
注目すべきは、どれもかなり小さいことです。一般に知られる巨大なLLMとは比べものになりません。ですが、学習の仕組みを理解するにはむしろこれくらいがちょうどいい。
大きすぎるモデルは「すごい」けれど、初心者にとっては「見えないもの」が増えすぎるんですよね。小さくて動くことの価値は大きいです。
このプロジェクトでは、Shakespeareのような小さめのデータに対して、character-level tokenizationを使っています。
READMEでは、GPT-2で使われるような BPE(Byte Pair Encoding) は、小規模データではうまくいきにくいと説明されています。
理由は、BPEはたくさんのデータの中で「よく出る単語のかけら」を学ぶ方式だからです。
データが少ないと、そもそも頻出パターンが十分に出てこない。結果として、モデルが学ぶべき単位がうまく安定しません。
この説明は、かなり本質的だと思います。
「最新の手法を使えば必ず良い」わけではなく、データの規模に合った方法を選ぶことが大事なんですよね。技術って、たいていそのバランスの芸術です。
READMEの前提条件を見ると、必要なのは次の程度です。
ML経験は必須ではないとされています。
これはかなりありがたいです。機械学習の入門教材って、気づくと数式が先行して「置いていかれる」ことが多いですが、このリポジトリはコードベースで理解する方向です。
個人的には、「MLを理論から学ぶのがしんどい人」にかなり向いていると思います。
逆に、すでにTransformerの論文を何度も読んだ人にとっては、復習や実装確認にちょうどいい教材ではないでしょうか。
ローカル環境では uv を使ってセットアップする手順が案内されています。
また、Google Colabでも動かせるようになっています。
これは地味に重要です。
学習教材は、内容が良くてもセットアップでつまずくと一気に挫折します。
その点、このリポジトリは 「自分のPCでやる」ルートと「Colabでやる」ルートの両方があるので、始めやすさが高いです。
READMEには、関連リソースとして次のようなものが挙げられています。
この並びを見るだけでも、「この教材はちゃんとした流れの上にある」と分かります。
特に nanoGPT や Attention Is All You Need は、Transformerを学ぶならほぼ避けて通れない存在です。
つまりこのリポジトリは、単なる個人メモではなく、定番の知見をうまくワークショップ化したものだと言えそうです。
率直に言うと、このリポジトリはかなり好印象です。
理由は、難しい話を「理解できるサイズ」に切り出しているからです。
LLMの学習は、全体像だけ見るとどうしても圧倒されます。
でも、Tokenizer → Transformer → Training Loop → Generation と分解されると、「あ、これは積み木なんだ」と分かる。
その感覚を得られる教材は、実はあまり多くありません。
特にいいのは、**“動くものを作る”ことと“なぜそうなるかを説明する”ことがセットになっている**点です。
単にコードを写経するだけだと記憶に残りにくいですが、このリポジトリは各パーツの意味を説明しながら進めるので、学びが定着しやすそうです。
angelos-p/llm-from-scratch は、LLMをゼロから実装しながら仕組みを理解するための、実践的でかなり良い教材です。
巨大モデルをいきなり扱うのではなく、小さなGPTを自分の手で組み上げることで、Transformerや学習ループの本質をつかめるように設計されています。
「LLMって結局なにをしているの?」を、ふわっとした説明ではなく、コードで腑に落ちる形で知りたい人にはかなり刺さるはずです。
個人的には、これは“AIを使う人”から“AIの中身を理解する人”に一歩進むための、かなり良い入口だと思います。