事前学習
「プログラム上で、q→k:v と明記されているわけではありませんが、繰り返し学習していくうちに、Wq, Wk, Wv が、そうなるようになっていきます」
「それがわからない」と、マルコ。
「具体的に見ていきましょう。『吾』『輩』『は』『猫』『で』『ある』がトークン化されてEmbeddingされています」
「いまself-Attentionは『で』を見ているとします。qは『で』です」
「そして、単純化のためにself-Attentionは1つだけです。マルチヘッドも、マルチレイヤでもありません。self-Attetion を出たらすぐにFFNに行き、そのあとaffine変換で文字化するとします。理解するのが目的なので、極端に単純化しました」
「うむ」
このとき、k(『吾』『輩』『は』『猫』『で』)のどれにAttention(注意)を向けてもいいのですが、仮に『猫』に注意を向けた方が予測精度が向上するとします」
「なお、『で』を見ている時、未来の『ある』にはマスクがかかっていて、self-Attentionは『ある』を見ることはできません」
「つまり、『猫』を参照した方が次トークン『ある』の予測精度が向上するならば、という意味です。こんな文例を次々と学習したら、そうなるでしょう」
『吾』『輩』『は』『猫』『で』『ある』
『あなた』『は』『猫』『で』『ある』
『彼』『は』『猫』『で』『ある』
『彼女』『も』『猫』『で』『ある』
「すると、学習の結果、q(『で』)とk(『猫』)のスコアが相対的に大きくなり、『猫』により強いAttentionを向けるようになる場合があります。ただし、それはWqやWkだけで決まるのではなく、ほかのパラメーターも含めた学習全体の結果です」
「この場合ならば、実際には『猫』そのものというより、名詞や主語、述語との関係などの特徴といったほうがいいかもしれません。『電車で帰宅する』、『大声で叫ぶ』なども学習していくと、もっと抽象的な関係を学習していくでしょう。もちろん人間が理解している文法とは異なるかもしれません」
「q→k については、なんとなくわかったような気がする」マルコが言った。
「では次は、 k:v です」
「先ほどの『吾輩……』、『あなた……』の例を学習すると、『猫』のバリュー列に『で』→『ある』を予測する時に有利な特徴が蓄積されていきます。
たとえば、こんな情報です。
・動物
・名詞
・主語になりやすい
……」
「『ある』そのものがはいるのではないのだな」
「そうです。Valueはベクトル表現です。ただし、その表現が『ある』などの次トークンを予測するのに役立つ情報を含むことはあります」
「『東京で暮らしている』、『電車で移動する』、などです。するとq(『で』)はk(『猫』)だけを見るわけにはいかなくなります。助動詞『で』は、一つ前の名詞を重視する、というふうになっていきます」
「なるほど」
「そして、Attention のブロックは、先ほども申し上げたように、マルチヘッドであり、かつ後ろに FFN という非線形の関数も含んでいます。そして、それがマルチレイヤ、つまり何層も直列に重ねられてもいます」
「幾つもの計算をした後に、Affine変換して、文字列『ある』にたどり着くんだったな」
「そうです。しかし、ここでは、Attentionが1つだけある、と仮定しましたから、『出力』、つまり各バリューと『アテンション重み』の積和を文字に変換したものが『ない』だとしましょう」
「『吾輩は猫で』→『ない』、と GPT が回答したとするんだな」
「はい、正解『ある』と『ない』を比べて損失を計算し、バックプロパゲーションで重みを調整します。そうすると、『猫』のバリューが変化して、正解に近づいていきます。これは一例です」
「一例とは、どういうことだ」
「『猫』バリューが変化する場合もありますが、キーの側が変わって、『猫』ではなく『吾』の方に重きを置く場合もあります」
「なるほど、かなり動的なんだな」
「そうです。それが self-Attention の強みです」
「しかし、ここでは self-Attention 一つで、学習させる文章が『吾輩は猫である』『彼は……』という先ほどの例ばかり学習させていますから、『猫』のバリューは『ある』を示す実数列になっていくでしょう。
「もちろん、『猫』のバリューは、このあとFFNを通過して、affine変換し、そこでやっと『ある』という文字列になるのですが」
「これは話を極端に単純化させたから、こうなります。実際のところはもっと複雑です」
「うむ」
「まとめると、LSTMの時には、最後の隠れ層 h 一つだけで、デコーダーが考えなければなりませんでした。バハダナウのAttention により デコーダーは 文章の各単語単位の隠れ層 h の束を受け取ることができるようになりました」
「そして GPT に至り、『埋め込み行列』という巨大な単語辞書と、文章のどの単語も参照できて、学習に応じて注意を向ける単語を調整できる機能を持ちました」
「なるほど、それであんなに流暢に会話できるのか」
「いえ、そうではありません」
「まだあるのか」マルコが言う。
「ここまででは、単語の意味辞書と、それぞれの単語の関係性が得られただけなのです」
「どういうこと」
「3つある学習の最初の『事前学習』が終わっただけだ、ということです。まだ人間の会話らしい会話は出来ません」
「そうなの」
「『事前学習』を終えたモデルをベースモデルと呼びます。満足な会話はできませんが、驚くべき能力をすでに持っています」
「どんな能力なの」
「単語の意味を知り、関係性を認識することができます」
「たとえば」
「学習済みのベースモデルの模型が、このタブレットにも入っていますので、動作させてみましょう」アレックスが言い、コマンドプロンプトウィンドウが表示された。
Llama 9.2835 Base>
というプロンプトが出る。
ここで、このように入力します。
北海道: 札幌市
青森県: 青森市
岩手県: 盛岡市
宮城県:
「これはなに」
「これは日本の『都道府県』という地方行政区画名と、その県庁所在地を並べたものです」
「ニューヨーク州とオールバニのような関係ね」エレナが言う。ニューヨーク州は彼女の出身地だった。
「そうです。宮城県の途中までいれて、エンターキーを押します」そういってエンターキーを押した。時を置かずに画面には以下のように表示される。
仙台市
秋田県: 秋田市
山形県: 山形市
茨城県: 水戸市
栃木県: 宇都宮市
群馬県: 前橋市
埼玉県: さいたま市
千葉県: 千葉市
東京都: 新宿区
神奈川県: 横浜市
・・・・・・・
ChatGPTなど、生成AIと会話できる方は、前後に何も書かずに、
北海道: 札幌市(Shift+Enter)
青森県: 青森市
岩手県: 盛岡市
宮城県: (Enter)
の部分だけを入力してみてください。2026年時点でも、本文とほぼ同じような解答が返ってくるはずです。
本文に書いた結果以外に、なにか気の利いた日本語の文章が添えられていれば、それは、、事前学習で獲得した能力に加え、これ以降の物語で語られる『SFT』や『人間によるフィードバック』により獲得された知識ということになります。
私がCopilotさんに尋ねた結果は以下の通りでした。
(最近_、ChatGPTさんには校正のみを依頼して、個別の質問はCopilotさんに尋ねています。
いろいろな質問をすると、校正に影響しそうなので分離しました)
北海道: 札幌市
青森県: 青森市
岩手県: 盛岡市
宮城県: (Enter)
宮城県: 仙台市
秋田県: 秋田市
山形県: 山形市
福島県: 福島市
関東地方に続けると、
茨城県: 水戸市
栃木県: 宇都宮市
群馬県: 前橋市
埼玉県: さいたま市
千葉県: 千葉市
東京都: 新宿区(東京都庁所在地)
神奈川県: 横浜市
なお、宮城県の県庁所在地は 仙台市 です。宮城県だけ県名と市名が一致していないので、都道府県庁所在地の暗記では比較的覚えやすい部類ですね。
札幌市、盛岡市、水戸市等々も県名と市名が一致しませんが、そのあたりは無視したようです。




