1

ゼロから作りながら学ぶLLM第3章読書感想

힘센캥거루
2025년 10월 29일(수정됨)
4
1
17

MacBookに大量の水をこぼしてパニックになり、3〜4日無駄にした。

今考えてみると、どうせMacBookは駄目になったし、修理に出すと思って何かをすればよかったと思う。

とにかく少し遅れたけど、最後までやるべきだと思い、第3章の感想を残す。

1. アテンションメカニズム

3章の主な内容はアテンションメカニズムだ。

アテンションは文字通り文のどの部分に注目したいかを示す。

例えば私は昨日ご飯を食べたという文を理解してみよう。

私たちは自然に昨日ご飯食べたのような単語に集中することになる。

このように処理中の単語を理解するためにはどの単語との結合が必要であり、アテンションメカニズムを通じて単語の組み合わせで文脈を理解できるようにする。

ゼロから作りながら学ぶLLM第3章読書感想-1

2. セルフアテンション

セルフアテンションは文中のトークン間の関係を求めるものだ。

すでにトークンを以下のように埋め込みベクトルで実装したとしよう。

import torch

inputs = torch.tensor(
  [[0.43, 0.15, 0.89], # Your     (x^1)
   [0.55, 0.87, 0.66], # journey  (x^2)
   [0.57, 0.85, 0.64], # starts   (x^3)
   [0.22, 0.58, 0.33], # with     (x^4)
   [0.77, 0.25, 0.10], # one      (x^5)
   [0.05, 0.80, 0.55]] # step     (x^6)
)

ここで目的のトークン1つに対して他のトークンのドット積を通じてトークン間の関係をアテンションスコアとして得る。

この時ドット積という概念が新しく見えるかもしれないが、行列でのドット積ベクトルでの内積と同じだ。

ゼロから作りながら学ぶLLM第3章読書感想-2

これは2つのベクトルの方向性が似ているほど大きな値を持ち、互いに直角の場合は0と同じ値を持つということ。

これを通じて2つの埋め込みがどれくらいの類似性を持っているか確認できる。

ベクトル自体を見るのではなく2つのベクトルの類似性を見る理由は、埋め込みを初期化するとき無意味なベクトルをばらまくからだ。

したがってベクトル自体を測定することは意味がない。

ゼロから作りながら学ぶLLM第3章読書感想-3

そしてアテンションの重みの合計が1になるように正規化した後、入力ベクトルとアテンションの重みを掛けて合計する。

アテンションの重みが高いほど文脈ベクトルに与える影響が大きいため、各埋め込みの間でクエリとして入力した埋め込みの適切な位置の方向をベクトルで得ることになる。

これを文脈ベクトルという。

このようにすべての埋め込みに対して計算すると以下のような形のテンソルを得ることになる。

tensor([[0.4421, 0.5931, 0.5790],
        [0.4419, 0.6515, 0.5683],
        [0.4431, 0.6496, 0.5671],
        [0.4304, 0.6298, 0.5510],
        [0.4671, 0.5910, 0.5266],
        [0.4177, 0.6503, 0.5645]])

テンソルの構造自体は2次元だが、内部に含まれている内容は3次元の文脈ベクトルだ。

これを利用して各埋め込みが持つ関係を方向性として表現できる。

3. 訓練可能なセルフアテンション

訓練可能なセルフアテンションではそれぞれのキー、クエリ値をより低い次元に縮小する。

この時最初に処理する値はすべて任意の値だ。

処理後に逆伝播プロセスを通じて更新する。

torch.manual_seed(123)

W_query = torch.nn.Parameter(torch.rand(d_in, d_out), requires_grad=False)
W_key   = torch.nn.Parameter(torch.rand(d_in, d_out), requires_grad=False)
W_value = torch.nn.Parameter(torch.rand(d_in, d_out), requires_grad=False)

上記で最初のquery、key、valueの値を見るとすべてがランダムだということがわかる。

最初の値はすべて意味がないが、その後の訓練を通じて意味のある値に変わる。

この過程を通じてある単語に対する文脈ベクトルを得ることができる。

4. コザルアテンション

コザルアテンションはトークンにマスクをかける方式だ。

未来を予測することで次の文脈を予測できるようにする方式だ。

最初にこの内容を知ったとき、過学習の問題が最初に思い浮かんだが...

ChatGPTの答えは違った。

ゼロから作りながら学ぶLLM第3章読書感想-4

過学習防止はコザルアテンションの副次的なもの。

モデルが実際の言語生成の方向(左→右)通りに文脈を学習するのを助ける。

こうして学習された文脈ベクトルは文の意味を理解し、新しい文を生成し、推論と類推も可能にする。

これを目的とする様々な方法が後に出てくる。

5. 質問

本を読みながらいろいろな考えが浮かんだ。

  • ワンホットエンコーダーよりずっと難しい感じだけど、これをやる理由は何だろう?

  • コザルアテンションをやる理由が過学習のためなのか?

ゼロから作りながら学ぶLLM第3章読書感想-5

ChatGPTと本当に長い間話をしたが、結論は以下の通りだ。

答えを知っている
--> モデルが予測ではなくコピーだけするように
--> 損失がほとんど0になる(計算は可能)
--> 勾配(gradient)がほとんど0
--> アップデートがほとんどない
--> 逆伝播に意味のある変化がない
--> 実質的に学習が進まない

例えば、暗い部屋で物を探そうと手で探るとしよう。

この過程が空間を理解し、物を探す能力を育てる。

しかし、既に物の位置を知っていれば探る必要がないため、結局「探す方法」を学習しない。

言語モデルで未来トークンを見ることも同様に答えを知っていれば学習予測能力を失うことになる。

ゼロから作りながら学ぶLLM第3章読書感想-6

だからコザルアテンション(casual attention)は損失を誘導する関数である。

コザルアテンションは未来を隠して損失を発生させ、その損失を基に文脈ベクトルが更新される。

このように予測誤差を減らす過程の中でモデルは文脈をさらに深く理解し、それに応じて推論、類推、評価能力も発達する。

6. 感想

MacBookに水をこぼして1週間が遅れ、それに焦りが生じた。

それで早く読んで進もうとしたが、そうすることはできなかった。

初めて見る文の一つ一つが難しく新鮮に感じられた。

ゼロから作りながら学ぶLLM第3章読書感想-7

なぜここで次元削減した行列を掛けるのか?なぜここで突然マスキングをするのか?

このような疑問に対する答えを探す過程が非常に長くかったるかった。

AIは質問をするとそこに答えてくれたが、それに対して私が新たに解釈を下すと、それについては常に間違っているというので、何が正しい意味なのか非常に長く考えた。

このような考えの過程が私を成長させてくれるのではないかと考える。

第4章では何がまた学べるのか楽しみだ。

관련 글

学校業務の自動化 - AIを利用した生活記録簿チェック 教科別・特別記述編
学校業務の自動化 - AIを利用した生活記録簿チェック 教科別・特別記述編
学校で最も意味がなく、きつくて退屈な業務を一つ挙げろと言われたら、自分は生活記録簿(生徒指導要録)チェックを選ぶだろう。中学校では生活記録簿がそれほど重要ではないが、高等学校では入試と関係しているため非常に重要である。問題は、このような生活記録簿の点検で探すものが、せいぜい単純な誤字脱字、記載禁止用...
ゼロから作りながら学ぶ LLM 第7章 読書レビューとチャレンジの感想
ゼロから作りながら学ぶ LLM 第7章 読書レビューとチャレンジの感想
第7章の内容は、指示に従うように微調整するプロセスだ。ある質問に対して、期待する応答を返すようにすること。やはり必要なのはデータである。1. 指示微調整の手順ここでの要点は、質問と応答のデータセットを用意し、入力-出力のペアとして学習させること。これをプロンプトスタイルと呼ぶ。その他は以前のプロセス...
ゼロから作りながら学ぶ LLM 第6章 読書レビュー
ゼロから作りながら学ぶ LLM 第6章 読書レビュー
第6章は、分類のためのファインチューニングについてである。例として出てくるのは、スパム分類器の作成。スパム分類器は、あるメールなどがスパムかスパムでないかを分類するものなので、出力結果は 0 や 1 のような値になる必要がある。1. ファインチューニングの手順ファインチューニングのプロセスは、モデル...
ゼロから作りながら学ぶ LLM 第5章 読書レビュー
ゼロから作りながら学ぶ LLM 第5章 読書レビュー
今日は12月14日だ。実はチャレンジ期間はすでに2週間も過ぎてしまったが、だからといってレビューを書くのをあきらめることはできなかった。こうして残しておくTILが、あとで自分の血となり肉となるからだ。コードそのものよりも、その意味に集中して書いてみようと思う。1. モデルの損失計算GPTモデルを作っ...
ゼロから作りながら学ぶ LLM 第4章 読書レビュー
ゼロから作りながら学ぶ LLM 第4章 読書レビュー
今日は11月26日なので、毎日1章ずつ読み切ればチャレンジ成功だ。長男と次男の妨害の中で、それが可能かどうかは分からない。1. ダミー・トランスフォーマーGPTモデルを作りながら、PyTorchからトランスフォーマーのダミーブロックを持ってくる箇所を見た。調べてみると、PyTorch の nn の中...
ゼロから作りながら学ぶLLM第2章読書レビュー
ゼロから作りながら学ぶLLM第2章読書レビュー
すでにチャレンジ参加2週目。昨日まで2章を終えていなかったが、1泊2日の研修に来て、12時までコーディングしながらようやく進度を合わせた。1. 内容2章の内容は単語のトークン化、エンコーディング、デコーディング、埋め込みベクトルが中心だった。ワンホットエンコーダーを作ったことがあるので他のことは慣れていたが、埋め込み...

댓글을 불러오는 중...