GPTの中身を追う 埋め込みからSoftmaxまで

こんにちは。ゆうせいです。

GPTという名前は、三つの単語の頭文字です。

Generative、Pre-trained、Transformer。生成する、事前学習された、Transformer。

最初の二つは、言葉の通りです。文章を生成し、大量のデータで学習を済ませている。

問題は三つ目です。Transformerとは何なのか。ここが、現在のAIブームを支えている中核の発明です。

この記事では、Transformerの入口と出口を追います。文章がどう数値になり、最後にどう確率へ変わるのか。アテンションの手前まで、順を追って見ていきます。

結論

この記事で押さえるべき点は、三つです。

要点内容
単語はベクトルになる意味が、高次元空間の位置として表現される
計算はほぼ行列積である中身を見れば、行列とベクトルの掛け算が並んでいる
最後にSoftmaxで確率にする任意の数値の並びを、確率分布へ変換する

特に一番目を丁寧に扱います。

単語をベクトルにするという発想は、最初は奇妙に感じます。しかし、ここを理解しないと、アテンションの話が入ってきません。

以下、順に見ていきます。

1 全体の流れ

細部に入る前に、データの流れを俯瞰します。

五つの段階

段階内容
1入力を小さな塊に分ける
2各塊をベクトルに変換する
3アテンションで互いに情報をやり取りする
4多層パーセプトロンで処理する
5最後のベクトルから確率分布を作る

3と4は、何度も繰り返されます。

各段階の役割

1の塊をトークンといいます。単語であることもあれば、単語の一部や記号であることもあります。

2で、各トークンに数値の並びが対応します。この数値が、そのトークンの意味を何らかの形で表しています。

3のアテンションでは、ベクトルどうしが情報をやり取りします。文脈に応じて意味が更新されます。

4では、ベクトルどうしのやり取りはありません。それぞれが同じ処理を並列に受けます。

5で、最後のベクトルから次のトークンの確率が求まります。

この記事で扱う範囲

3と4の詳細は、別の記事に譲ります。

今回は、1、2、5を扱います。そして、これらを理解するための前提知識も整理します。

練習問題1

Transformerにおけるアテンションと多層パーセプトロンの違いを、ベクトル間のやり取りという観点から説明してください。

解答を示します。

アテンションでは、ベクトルどうしが情報をやり取りします。ある単語のベクトルが、他の単語のベクトルの影響を受けて更新されます。

多層パーセプトロンでは、ベクトルどうしのやり取りはありません。各ベクトルが、同じ処理を独立に受けます。

補足します。この役割分担は、これまでの連載で扱った構造とも通じます。

混ぜる操作と、個別に処理する操作。この二つが交互に現れるのが、ニューラルネットワークに共通する形です。

2 深層学習の形式

Transformerの設計には、いくつもの選択が含まれています。

その理由を理解するには、深層学習が従うべき形式を知っておく必要があります。

制約1 入力は実数の配列

どんなモデルでも、入力は実数の配列でなければなりません。

一次元の並びのこともあれば、二次元の表のこともあります。より高次元の場合もあり、そうした配列を総称してテンソルと呼びます。

言語を扱うには、まず数値に変換する必要がある。この制約が、次節の埋め込みにつながります。

制約2 層を重ねて変換する

入力データは、層を通るたびに変換されます。各層も、実数の配列です。

最後の層が出力になります。言語モデルであれば、次のトークンの確率分布です。

制約3 パラメータは重み付き和として働く

深層学習における最大の特徴は、パラメータとデータの関わり方です。

パラメータがデータに作用する方法は、重み付き和だけです。

非線形関数も挟まれますが、そちらにはパラメータが含まれません。

重み付き和は行列積である

重み付き和を一つずつ書き並べると、式が長くなります。

そこで、行列とベクトルの積としてまとめます。

行列とベクトルを掛けると、出力の各成分が重み付き和になります。同じことを、簡潔に書いているだけです。

GPT-3の数字

具体的に見ると、規模が実感できます。

GPT-3のパラメータ数は1,750億個です。

これらは、28,000弱の行列に分かれて格納されています。そして、それらの行列は8種類に分類されます。

二種類の数を区別する

ここで、重要な区別があります。

種類内容
重み学習で決まる。モデルの振る舞いを決める
データ実行のたびに変わる。入力された文章の情報

重みが頭脳であり、データは処理される対象です。

数十億の数値に圧倒されそうになったら、この区別に立ち返ってください。

練習問題2

深層学習において、パラメータがデータに作用する唯一の方法は何ですか。また、非線形関数はこの区別においてどう位置づけられますか。

解答を示します。

重み付き和です。パラメータとデータの積を足し合わせる形でのみ、作用します。

非線形関数は、パラメータを含みません。重み付き和の結果に適用されるだけで、学習によって変化しません。

補足します。この制約には理由があります。

誤差逆伝播法による学習を、大規模に機能させるためです。重み付き和という単純な形に統一することで、勾配の計算が効率的に行えます。

練習問題3

GPT-3のパラメータ1,750億個は、約28,000個の行列に分かれています。1行列あたりの平均パラメータ数を求めてください。

解答を示します。

割り算を実行します。

\frac{1.75 \times 10^{11}}{2.8 \times 10^4} = 6.25 \times 10^{6}

約625万個です。

補足します。実際には、行列ごとに大きさが違います。

後で見る埋め込み行列は約6億1,700万個で、平均の100倍近くあります。一方、小さな行列もあります。

3 単語をベクトルにする

トークンと語彙

モデルは、あらかじめ語彙を持っています。扱えるトークンの一覧です。

GPT-3の場合、語彙数は50,257です。

この記事では、説明を簡単にするため、トークンを単語として扱います。実際には単語の一部であることも多いのですが、例を挙げやすくするためです。

埋め込み行列

最初に登場する行列を、埋め込み行列といいます。記号では W_E と書きます。

この行列は、語彙の各トークンに対して1列ずつ持っています。

ある単語が入力されたら、対応する列を取り出す。それが、その単語のベクトルです。

次元数

GPT-3では、このベクトルが12,288次元です。

非常に高い次元です。理由は後述しますが、多くの異なる方向を確保するためです。

パラメータ数を数える

埋め込み行列の大きさを計算します。

50257 \times 12288 = 617558016

約6億1,700万個です。

最終的に1,750億個になることを念頭に、数え始めます。

値は学習で決まる

この行列の値も、最初は乱数です。

学習を通じて、データに基づいて調整されます。誰かが意味を設計するわけではありません。

練習問題4

語彙数が32,000、埋め込み次元が4,096のモデルにおいて、埋め込み行列のパラメータ数を求めてください。

解答を示します。

掛け算を実行します。

32000 \times 4096 = 131072000

約1億3,100万個です。

補足します。語彙数と次元数の積で決まります。

語彙を増やすと線形に増え、次元を増やしても線形に増えます。どちらも、モデル全体の規模に影響します。

4 ベクトルの方向が意味を持つ

ここからが、埋め込みの面白い部分です。

空間上の点として考える

12,288個の数値を、12,288次元空間の座標だと考えてください。

3次元なら図に描けますが、12,288次元は描けません。それでも、位置関係という考え方は通用します。

意味が近いものは位置も近い

学習が進むと、似た意味の単語が近い位置に配置されるようになります。

「塔」という単語に近い位置を探すと、建造物に関わる単語が集まります。

方向にも意味がある

さらに興味深い性質があります。

空間内の方向が、意味を持つようになるのです。

古典的な例

有名な例を示します。

「女性」のベクトルから「男性」のベクトルを引きます。この差は、空間内の一つの方向を表します。

同じ引き算を「王」と「女王」で行うと、よく似た方向が得られます。

つまり、次の関係が成り立ちます。

\text{王} + (\text{女性} - \text{男性}) \approx \text{女王}

女性の君主を表す単語を知らなくても、この計算で近い位置を見つけられます。

正直な補足

ただし、この例には注意が必要です。

実際に試すと、「女王」の埋め込みは、計算結果から少し離れていることがあります。

理由として考えられるのは、「女王」という単語が学習データの中で単に「王の女性版」として使われているわけではないことです。歴史的、文化的な文脈が加わっています。

研修で紹介する際は、「きれいに成り立つ」と断言しないほうが誠実です。

他の例

同じ発想で、いくつもの例が作れます。

\text{ヒトラー} + (\text{イタリア} - \text{ドイツ}) \approx \text{ムッソリーニ}

「イタリアらしさ」を表す方向と、「第二次大戦の枢軸国指導者」を表す方向が、別々に符号化されているように見えます。

もう一つ例を挙げます。

\text{寿司} + (\text{ドイツ} - \text{日本}) \approx \text{ブラートヴルスト}

国を表す方向と、その国の料理を表す方向が、独立して存在しているように見えます。

何が起きているのか

学習の過程で、モデルは次のような配置を選んだと考えられます。

ある方向が性別の情報を符号化し、別の方向が国籍の情報を符号化する。

人間がそう設計したわけではありません。予測の精度を上げるうえで、そうした配置が有利だったということです。

練習問題5

\text{パリ} - \text{フランス} + \text{日本} という計算の結果として、どのような単語が近くに現れると予想されますか。また、その理由を説明してください。

解答を示します。

「東京」が近くに現れると予想されます。

\text{パリ} - \text{フランス} は、「その国の首都」を表す方向にあたると考えられます。それを「日本」に足すと、日本の首都を指すことになります。

補足します。ただし、実際にきれいに成り立つとは限りません。

パリという単語は、首都という意味以外にも多くの文脈で使われます。それらの情報も、ベクトルには含まれています。

この種の例は、直感を養うには有効ですが、厳密な法則ではありません。

練習問題6

なぜ埋め込みの次元数が12,288という大きな値になっているのですか。次元が少ない場合に何が問題になりますか。

解答を示します。

多くの異なる方向を確保するためです。

意味の側面は、性別、国籍、時制、品詞、感情など、非常に多岐にわたります。それぞれに独立した方向を割り当てるには、十分な次元数が必要です。

次元が少ないと、異なる意味の側面が同じ方向を共有せざるを得なくなり、区別が難しくなります。

補足します。ただし、次元数と符号化できる情報量の関係は単純ではありません。

高次元空間では、ほぼ直交する方向を次元数よりはるかに多く取れることが知られています。この性質により、モデルは次元数を超える数の特徴を表現していると考えられています。

5 内積という道具

次の記事でアテンションを扱うため、ここで準備をしておきます。

定義

二つのベクトルの内積は、対応する成分を掛けて、すべて足したものです。

\mathbf{a} \cdot \mathbf{b} = \sum_i a_i b_i

重み付き和の形をしています。深層学習の計算と相性が良いのは、このためです。

幾何的な意味

内積は、二つのベクトルがどれだけ同じ方向を向いているかを測ります。

状況内積
同じ方向を向く
直交する0
反対方向を向く

数値で確かめる

簡単な例で計算します。

\mathbf{a} = (1, ; 2), \quad \mathbf{b} = (3, ; 1)

\mathbf{a} \cdot \mathbf{b} = 1 \times 3 + 2 \times 1 = 3 + 2 = 5

正の値です。似た方向を向いています。

反対方向の例です。

\mathbf{c} = (-3, ; -1)

\mathbf{a} \cdot \mathbf{c} = 1 \times (-3) + 2 \times (-1) = -3 - 2 = -5

負の値になりました。

埋め込みでの応用

面白い実験があります。

「猫たち」のベクトルから「猫」のベクトルを引きます。この差が、複数形を表す方向だと仮定します。

この方向と、さまざまな単語の内積を取ってみます。

すると、複数形の単語のほうが、単数形より一貫して大きな値を示します。

さらに、数を表す単語との内積を取ると、1、2、3と大きくなるにつれて値も増えていきます。

複数性の度合いを、数値として測れるということです。

練習問題7

\mathbf{a} = (2, ; -1, ; 3) \mathbf{b} = (1, ; 4, ; 0) の内積を求め、二つのベクトルの方向の関係を説明してください。

解答を示します。

内積を計算します。

2 \times 1 + (-1) \times 4 + 3 \times 0 = 2 - 4 + 0 = -2

負の値です。したがって、二つのベクトルはやや反対方向を向いています。

補足します。値が0に近いため、ほぼ直交に近い関係とも言えます。

内積の符号だけでなく、大きさも重要です。大きな正の値であれば、強く同じ方向を向いていることを意味します。

練習問題8

内積が深層学習の計算と相性が良い理由を説明してください。

解答を示します。

内積は、対応する成分の積を足し合わせたものであり、重み付き和の形をしているためです。

深層学習では、パラメータとデータの関わり方が重み付き和に限定されています。内積は、その形にそのまま当てはまります。

補足します。行列とベクトルの積は、複数の内積をまとめたものと見ることもできます。

出力の各成分が、行列の1行と入力ベクトルの内積になっています。この見方は、アテンションの理解に役立ちます。

6 ベクトルは文脈を吸収する

単語の意味ではない

重要な認識の転換があります。

埋め込み空間のベクトルを、単に個々の単語を表すものだと考えないでください。

文脈を吸収する容器

このベクトルは、文脈を吸収する容量を持っています。

「王」という単語の埋め込みとして始まったベクトルが、ネットワークの各ブロックを通るうちに引っ張られていきます。

そして最終的には、もっと具体的な方向を指すようになります。スコットランドに住んでいた王であり、前王を殺して地位を得た人物であり、シェイクスピアの文体で描写されている、という情報を含んだ方向です。

人間の理解も同じ

自分の言葉の理解を振り返ってください。

ある単語の意味は、周囲によって変わります。そして、その周囲は、かなり離れた位置にあることもあります。

次の単語を予測するには、この文脈を効率よく取り込む必要があります。

最初は単語だけ

ただし、最初の段階では文脈がありません。

入力文章からベクトルの配列を作るとき、各ベクトルは埋め込み行列から取り出されるだけです。

周囲からの情報は、まだ含まれていません。

ネットワークの役割

そこを出発点として、各ベクトルが豊かな意味を吸収できるようにする。それが、このネットワーク全体の目的です。

練習問題9

「モデル」という単語が、次の二つの文脈でどう異なる意味を持つか説明してください。また、その違いがベクトルにどう反映されるか述べてください。

(1) 機械学習のモデル
(2) ファッションのモデル

解答を示します。

(1) では、データから予測を行う数理的な仕組みを指します。

(2) では、衣服を着用して見せる職業の人を指します。

埋め込み行列から取り出された時点では、どちらも同じベクトルです。文脈の情報が含まれていないためです。

アテンションによって周囲の単語の情報が取り込まれると、それぞれ異なる方向へ更新されます。

補足します。この曖昧性の解消が、アテンションの主要な役割の一つです。

どの単語が、どの単語の意味を更新するために関係するのか。それを判断する仕組みです。

7 コンテキストサイズという制約

一度に扱える量には限りがある

ネットワークが一度に処理できるベクトルの数は、固定されています。

これをコンテキストサイズといいます。

GPT-3の場合

GPT-3は、コンテキストサイズ2,048で学習されました。

したがって、ネットワークを流れるデータは、常に2,048列の配列です。各列が12,288次元です。

データの大きさを計算する

一度に扱われる数値の個数を求めます。

2048 \times 12288 = 25165824

約2,500万個です。

実用上の影響

この制約は、利用者にも影響します。

初期のChatGPTで長い会話を続けると、話の筋を見失ったような応答が返ることがありました。

コンテキストサイズを超えた部分が、入力に含まれなくなるためです。

現在の状況

現在のモデルでは、コンテキストサイズが大幅に拡大しています。

数万トークンから数十万トークンを扱えるモデルもあります。ただし、長いほど計算量が増えるという制約は残ります。

練習問題10

コンテキストサイズが4,096、埋め込み次元が4,096のモデルにおいて、一度に処理されるデータの数値の個数を求めてください。

解答を示します。

掛け算を実行します。

4096 \times 4096 = 16777216

約1,680万個です。

補足します。この数値は、重みではなくデータです。

重みは学習で固定されますが、データは実行のたびに変わります。この区別を意識してください。

8 出力を作る

最後の段階

ネットワークの処理が終わると、最後のベクトルから次のトークンの確率分布を作ります。

例で考える

文脈に「ハリー・ポッター」が含まれ、直前に「最も嫌いな教師」とあり、最後の単語が「教授」だとします。

十分に学習されたモデルであれば、「スネイプ」に高い値を割り当てるでしょう。

二つの段階

この処理は、二段階に分かれます。

段階内容
1最後のベクトルを、語彙数分の値の並びに変換する
2その並びを確率分布に正規化する

逆埋め込み行列

1で使われる行列を、逆埋め込み行列といいます。記号では W_U と書きます。

12,288次元のベクトルを、50,257個の値に変換します。

パラメータ数

この行列の大きさを計算します。

50257 \times 12288 = 617558016

埋め込み行列と同じく、約6億1,700万個です。行と列の役割が入れ替わっているだけで、大きさは同じです。

これで、数えたパラメータが10億個を少し超えました。

なぜ最後のベクトルだけなのか

疑問が生じます。

最終層には、2,048個のベクトルが並んでいます。それぞれが文脈豊かな意味を持っています。なぜ最後の一つだけを使うのでしょうか。

学習時の事情

理由は、学習の効率にあります。

学習時には、最終層のすべてのベクトルを使います。各ベクトルが、その直後に来るトークンを予測します。

一つの文章から、多数の訓練信号が得られます。これは、非常に効率的です。

推論時には、最後のベクトルの予測だけを使います。

練習問題11

埋め込み行列と逆埋め込み行列の関係を説明してください。また、それぞれの役割を述べてください。

解答を示します。

埋め込み行列は、トークンをベクトルに変換します。語彙の各トークンに対して1列を持ち、その列がそのトークンのベクトルになります。

逆埋め込み行列は、ベクトルを語彙数分の値に変換します。埋め込み行列と行と列の役割が入れ替わった形をしており、パラメータ数は同じです。

補足します。この二つを共有するモデルもあります。

重み共有と呼ばれ、パラメータ数を削減できます。ただし、GPT-3では別々の行列として扱われています。

9 Softmax関数

出力の最後を担う関数です。

何が必要か

確率分布として扱うには、二つの条件が必要です。

条件内容
範囲各値が0以上1以下
合計すべて足して1

行列積の出力は条件を満たさない

深層学習の計算は、行列とベクトルの積です。

その出力は、負になることもあれば、1を大きく超えることもあります。合計が1になる保証もありません。

Softmaxの定義

任意の数値の並びを、確率分布に変換する標準的な方法がSoftmaxです。

p_i = \frac{e^{z_i}}{\sum_j e^{z_j}}

手順

二段階で理解できます。

一つ目は、各数値を e の指数に入れることです。これですべて正の値になります。

e^z > 0

どんな z に対しても成り立ちます。

二つ目は、合計で割ることです。これで合計が1になります。

数値で確かめる

三つの値で計算します。

z = (2, ; 1, ; 0)

指数を計算します。

e^2 \approx 7.389

e^1 \approx 2.718

e^0 = 1

合計を求めます。

7.389 + 2.718 + 1 = 11.107

各値を割ります。

p_1 = \frac{7.389}{11.107} \approx 0.665

p_2 = \frac{2.718}{11.107} \approx 0.245

p_3 = \frac{1}{11.107} \approx 0.090

合計を確認します。

0.665 + 0.245 + 0.090 = 1.000

名前の由来

最大値だけを1にして、他を0にする方法もあります。これをハードマックスと呼びます。

Softmaxは、それより柔らかい処理です。

一つの値が突出して大きければ、その項が分布を支配します。しかし、他の値が同程度に大きければ、それらにも相応の重みが割り当てられます。

そして、入力を連続的に変化させれば、出力も連続的に変化します。

この滑らかさが、学習に必要です。

ロジットという用語

出力の各成分を確率と呼ぶのに対応して、入力のほうをロジットと呼びます。

逆埋め込み行列を掛けた直後の、正規化されていない値がロジットです。

読み方は「ロジット」です。

練習問題12

z = (3, ; 1, ; 1) に対してSoftmaxを計算してください。e^3 \approx 20.09 e^1 \approx 2.718 を使ってください。

解答を示します。

指数の値を並べます。

20.09, \quad 2.718, \quad 2.718

合計を求めます。

20.09 + 2.718 + 2.718 = 25.526

各値を割ります。

p_1 = \frac{20.09}{25.526} \approx 0.787

p_2 = \frac{2.718}{25.526} \approx 0.106

p_3 = \frac{2.718}{25.526} \approx 0.106

合計を確認します。

0.787 + 0.106 + 0.106 = 0.999

四捨五入の誤差を除けば1です。

補足します。同じ入力値には、同じ確率が割り当てられます。

2番目と3番目はどちらも1なので、確率も等しくなりました。

練習問題13

Softmaxの二つの段階を挙げ、それぞれが何のために必要か説明してください。

解答を示します。

一つ目は、各値を e の指数に入れることです。これにより、すべての値が正になります。確率は負にならないため、この処理が必要です。

二つ目は、全体の合計で割ることです。これにより、合計が1になります。確率分布の条件を満たすために必要です。

補足します。なぜ e を使うのでしょうか。

微分の計算が簡潔になるためです。交差エントロピーと組み合わせると、勾配が非常に単純な形になります。

10 温度という調整つまみ

式に定数を加える

Softmaxの指数部分に、定数を加えた形があります。

p_i = \frac{e^{z_i / T}}{\sum_j e^{z_j / T}}

この T を温度と呼びます。熱力学の式に現れる温度と形が似ていることに由来します。

温度の効果

温度効果
大きい低い値にも重みが配分される。分布が平坦になる
小さい大きい値がより支配的になる
0すべての重みが最大値に集中する

数値で確かめる

先ほどの z = (2, 1, 0) で、温度を変えて計算します。

温度 T = 2 の場合です。指数の中身は z/2 = (1, ; 0.5, ; 0) になります。

e^1 \approx 2.718

e^{0.5} \approx 1.649

e^0 = 1

合計を求めます。

2.718 + 1.649 + 1 = 5.367

確率を求めます。

p_1 = \frac{2.718}{5.367} \approx 0.506

p_2 = \frac{1.649}{5.367} \approx 0.307

p_3 = \frac{1}{5.367} \approx 0.186

比較する

状態p_1 p_2 p_3
T = 1 0.6650.2450.090
T = 2 0.5060.3070.186

温度を上げると、分布が平坦になりました。

実際の出力への影響

GPT-3に「昔々、あるところに」という書き出しから物語を生成させ、温度を変えると、結果がはっきり異なります。

温度0では、常に最も予測しやすい単語が選ばれます。結果として、既存の童話をなぞったような、ありきたりな文章になります。

温度を上げると、可能性の低い単語も選ばれます。より独創的な書き出しになる一方、途中から意味の通らない文章に崩れる危険があります。

上限の設定

技術的な補足です。

APIでは、温度を2より大きくすることが許されていない場合があります。

数学的な理由はありません。あまりに意味不明な文章が生成されることを避けるための、実装上の制限だと考えられます。

これまでの連載とのつながり

この温度は、以前の記事で扱ったボルツマン分布の温度と同じものです。

P = \frac{e^{-E/T}}{Z}

z_i = -E_i と置けば、まったく同じ式になります。

物理学者ボルツマンの名を冠した分布が、生成AIの設定項目として生き続けています。

練習問題14

温度を0に近づけた場合と、無限大に近づけた場合、それぞれ確率分布はどうなりますか。

解答を示します。

温度を0に近づけると、最大値の確率が1に近づき、他はすべて0に近づきます。指数の中身 z/T の差が無限に拡大するためです。出力は決定的になります。

温度を無限大に近づけると、z/T がすべて0に近づき、e^0 = 1 となります。すべての候補が等確率になります。ロジットの情報が無視される状態です。

補足します。候補数を N とすると、後者の確率は次の通りです。

p = \frac{1}{N}

完全にでたらめな出力になります。

練習問題15

z = (2, ; 1, ; 0) について、温度 T = 0.5 の場合の確率分布を求めてください。e^4 \approx 54.60 e^2 \approx 7.389 を使ってください。

解答を示します。

指数の中身は z / 0.5 = (4, ; 2, ; 0) です。

指数の値を並べます。

54.60, \quad 7.389, \quad 1

合計を求めます。

54.60 + 7.389 + 1 = 62.989

確率を求めます。

p_1 = \frac{54.60}{62.989} \approx 0.867

p_2 = \frac{7.389}{62.989} \approx 0.117

p_3 = \frac{1}{62.989} \approx 0.016

補足します。温度1のときの0.665から、0.867へ上がりました。

最大値への集中が強まっています。温度を下げると、予測可能な出力になるという性質が、数値で確認できます。

11 パラメータを数える

ここまでで登場した行列を整理します。

現在の集計

行列パラメータ数
埋め込み行列 W_E 617,558,016
逆埋め込み行列 W_U 617,558,016
合計1,235,116,032

約12億個です。

全体に占める割合

GPT-3全体は1,750億個です。割合を計算します。

\frac{1.235 \times 10^9}{1.75 \times 10^{11}} \approx 0.0071

約0.7%です。

小さな割合ですが、無視できるほどではありません。

残りはどこにあるのか

残る99%以上は、アテンションブロックと多層パーセプトロンブロックの中にあります。

それらは、次の記事以降で扱います。

練習問題16

埋め込み行列と逆埋め込み行列を合わせたパラメータ数が、GPT-3全体に占める割合を求めてください。

解答を示します。

合計を計算します。

617558016 \times 2 = 1235116032

約12億3,500万個です。

割合を計算します。

\frac{1.235 \times 10^9}{1.75 \times 10^{11}} \approx 0.0071

約0.7%です。

補足します。入口と出口だけで12億個あります。

それでも全体の1%に満たないという事実から、内部の処理がいかに大規模かが分かります。

12 研修での教え方

このテーマを扱う場合の設計案です。

90分の構成

時間内容形式
5分GPTの三文字の意味。全体の流れ講義
10分深層学習の形式。重み付き和という制約講義
15分埋め込み。単語をベクトルにする講義
10分方向が意味を持つ。練習問題5講義と個人
10分内積。練習問題7講義と個人
10分文脈の吸収とコンテキストサイズ講義
15分Softmax。練習問題12講義と個人
10分温度。練習問題14と15講義と個人
5分パラメータの集計。まとめ講義

教える順序の考え方

三つ、意識してください。

一つ目は、重みとデータの区別を最初に示すことです。

数十億という数字に圧倒される受講者が出ます。学習で決まる重みと、実行のたびに変わるデータ。この区別があれば、混乱が減ります。

二つ目は、埋め込みの例を複数示すことです。

王と女王の例だけでは、偶然だと思われます。国と料理、国と指導者など、複数の例を挙げてください。同時に、きれいに成り立たない場合もあると正直に伝えてください。

三つ目は、Softmaxを手計算させることです。

式を見るだけでは、何をしているか分かりません。3つの値で実際に計算させると、二段階の処理が体感できます。

つまずきやすい点

四つあります。

一つ目は、単語とトークンの違いです。

実際のトークンは単語より細かい単位です。説明の便宜上、単語として扱っていることを明示してください。

二つ目は、高次元の想像です。

12,288次元を思い描こうとして混乱します。想像する必要はなく、位置関係という考え方だけ持てばよいと伝えてください。

三つ目は、最後のベクトルだけを使う理由です。

学習時と推論時で使い方が違う点を説明してください。この区別がないと、なぜ他のベクトルが無駄にならないのかが分かりません。

四つ目は、ロジットと確率の区別です。

Softmaxの前がロジット、後が確率です。用語を明確に使い分けてください。

想定される質問

質問1 埋め込みは誰が設計したのですか。

回答します。誰も設計していません。行列の値は乱数から始まり、学習で調整されます。性別や国籍といった方向が現れるのは、予測の精度を上げるうえで有利だったためです。

質問2 なぜ次元数が12,288なのですか。

回答します。設計上の選択です。大きいほど表現力が増しますが、計算量とメモリ消費も増えます。試行錯誤で決められた値だと考えてください。

質問3 コンテキストサイズを無限にできないのですか。

回答します。計算量が制約になります。アテンションの計算量は、系列長の二乗に比例します。長さを2倍にすると、計算量は4倍です。この制約を緩和する手法が、研究されています。

質問4 温度を0にすれば正確になりますか。

回答します。出力は安定しますが、正確になるとは限りません。最も確率の高い単語が、事実として正しいとは限らないためです。再現性が得られるという意味では有用です。

まとめと次の学習ステップ

GPTの中身は、行列とベクトルの掛け算です。

入口では、埋め込み行列が単語をベクトルに変えます。GPT-3では、語彙50,257、次元12,288。積を取ると約6億1,700万個のパラメータです。

このベクトル空間では、方向が意味を持ちます。性別を表す方向、国籍を表す方向。人間が設計したわけではなく、学習の結果として現れたものです。

ただし、きれいに成り立つとは限りません。王と女王の古典的な例でさえ、実際には少しずれます。研修で紹介する際は、この点を正直に伝えてください。

そして、ベクトルは文脈を吸収します。最初は単語の情報しか持ちませんが、ネットワークを通るうちに豊かになっていきます。これを可能にするのがアテンションです。

出口では、逆埋め込み行列がベクトルを50,257個の値に変えます。これがロジットです。そしてSoftmaxが、それを確率分布に変換します。

Softmaxの手順は二つだけです。指数に入れて正にし、合計で割って1にする。温度を加えれば、分布の鋭さを調整できます。

ここまでで数えたパラメータは約12億個。全体1,750億個の0.7%です。残りは、アテンションと多層パーセプトロンの中にあります。

次の学習ステップとして、三つを提案します。

一つ目は、アテンションの仕組みに進むことです。クエリ、キー、バリューという三つの役割。そして内積による類似度の計算。この記事で準備した内積の知識が、そのまま使えます。

二つ目は、埋め込みで遊んでみることです。単語ベクトルを扱う小さなモデルなら、手元のパソコンで動きます。足し算と引き算を試し、どんな関係が成り立つかを自分で確かめてください。予想通りにいかない例も見つかるはずです。

三つ目は、温度を変えて出力を比べることです。APIを使えば、同じ入力で温度だけを変えられます。0、1、1.5と変えると、文章がどう崩れていくかが観察できます。この記事の計算が、目の前で起きます。

これまでの連載で、ニューラルネットワークの構造、学習、逆伝播、そして言語モデルの入口と出口を追ってきました。アテンションへ進む土台は、すでにできています。

セイ・コンサルティング・グループでは新人エンジニア研修のアシスタント講師を募集しています。

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
海外放浪の末、2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。

学生時代は趣味と実益を兼ねてリゾートバイトにいそしむ。長野県白馬村に始まり、志賀高原でのスキーインストラクター、沖縄石垣島、北海道トマム。高じてオーストラリアのゴールドコーストでツアーガイドなど。現在は野菜作りにはまっている。