LoginSignup
0
0

動画視聴メモ : ディープラーニング・Transformer・GPTシリーズ(第5~6章) - 3Blue1Brown

Last updated at Posted at 2024-05-10

はじめに

「3Blue1Brown」YouTubeチャンネルで公開されている、ディープラーニング・Transformer・GPTシリーズ(第5~6章)の動画を視聴し、動画の理解を深めるために、その中で主要な処理方法や有用な部分を中心に、メモを取りました。ここでその内容をまとめて共有したいと思います。

情報元 3Blue1Brown

しかし、GPTとは何なのか? トランスフォーマーのビジュアル入門|ディープラーニング・第5章 - YouTube

注目の可視化、変幻自在の心臓|第6章 ディープ・ラーニング - YouTube

この動画では、専門的な知識を持たない方にも分かりやすくGPTの基本原理や応用例を解説しています。のビジュアル表現は非常にわかりやすく、複雑な概念も視覚的に理解しやすいものとなっています。

第5章

Transformer導入

Transformer、GPTの中核。
image.png

Transformerは、翻訳向けの機械学習の中から生まれたもの。

Transformerは、テキスト・画像・音声等を入力に、次の出力として相応しい出力の分布を出力する。
image.png

入力は、単語・節で分割したもの=トークン、または、
image.png

分割した画像片、または、分割した音声。
image.png

トークンは、高次元のベクトルに変換される。
image.png

Attentionブロックに入り、各トークンのベクトルが互いに情報を交換し合って値を更新する。
image.png

「model」の意味が文脈によって異なるので、周囲のベクトルから「model」のベクトルの値が更新され、別の文脈では同じ単語でもベクトルは異なる値を取るようになる。
image.png

Attentionブロック→Perceptronブロック→…を繰り返し、
image.png

image.png

最終層の出力ベクトルの中で、最後のベクトルを使って、最も確率の高いトークンを出力。
image.png

生成された文を含めて入力にして、繰り返し次のトークンを出力し、つなげていくことで、文章を生成する。
image.png

これをチャットボットにするには、
始めに会話であることを明記してから、ユーザの入力文を追記することで、その回答が生成されるようになる。
image.png

GPT-3では、パラメータの総数が175B個、それらは27K個の行列からなり、
下記のように分類できる。
image.png

image.png

Deep Learning前提

機械学習の入力は、数値の配列である必要がある。
image.png

学習されるパラメータは、重みw_i。入力データと重みとの積を取る、線形の形になる=線形結合。
線形結合した値に、簡単な非線形関数をかぶせる。
image.png

動画内では、学習されるパラメータ=重み部は青・赤色で、データの値は白・黒で、表している。
image.png

Word Embeddings

まず、始めの処理について。

説明の簡単化のため、本来はsubwordで分割する所、単語ごとの分割で説明する。
分割したものは、トークンと呼ぶ。
image.png

全単語(5万語など)に対して、Embedding行列W_Eを用意する。
事前に多量の文章データで学習しておく。(word2vec)
W_E行列の各縦列が各単語に対する、単語をベクトル化したもの=Embedding、になっている。
image.png

単語をベクトル化したベクトルは、12288次元のサイズ。
image.png

この単語ベクトルは、同じような意味のものは同じような方向を向いている。
towersとbuiltなど。
image.png

gensimライブラリを使用して、ベクトルを得ることが出来る。
image.png

意味の差が同じとなる2単語は、単語ベクトルの差を取っても、同じような方向を向いている。
image.png

移項して、「queen」の単語ベクトルのおおよその方向を知ることも出来る。
image.png

実際には、それほど正しく同じ方向を向いている訳ではない。(学習時に使用した文章データの偏りに依存)
image.png

image.png

image.png

おおよその性別に関するベクトル方向がある。
image.png

別の例では、日本といえば寿司、ドイツといえばブラートヴルスト=ソーセージ、という結果となる。
image.png

2ベクトルの内積が高ければ、同じ方向を向いている。
image.png

ゼロの場合は、直行。
負の値なら、反対の方向を向いている。
image.png

GPT-3では、Embedding可能なトークンの種類は、50257種類。単語ベクトルのサイズは、12288次元。
image.png

GPTの処理を進めるに連れて、単語(例: King)の単語ベクトルの方向が、周囲の文章によって、どんどん加算されて変わっていくようなイメージ。
image.png

始めの(Embedding変換後の)単語ベクトルでは、周囲の文章の意味は含まれておらず、Transformerの各層を通過していくと、周囲の文章の意味を吸い込んで単語ベクトルが変化していく。
image.png

GPT-3では、入力する単語ベクトルの数が2048、単語ベクトルの次元は12288となる。
image.png

Unembedding

次に、最終出力の処理について。

Transformerの最終出力はベクトル列になっていて、これを用いて次単語の候補を割合値で表したい。
image.png

Transformerの最終出力のうちの最後のベクトルのみを使用して、
Unembeddingの行列W_Uを、最後のベクトルと掛けて、(W_Uの各横列との内積になり、相関が高いものが、大きい値となって算出され)、これにsoftmaxを取って、0~1の割合の値にする。
image.png

W_Uのサイズは、W_Eの転置と同じものになる。

W_EとW_Uのパラメータサイズは、
image.png

※ソフトマックス関数(Softmax function、もしくは正規化指数関数: Normalized exponential function)とは、入力データ(=ベクトル)内の複数の値(=ベクトルの各成分)を0.0~1.0の範囲の確率値に変換する関数である。この関数によって出力される複数の値(=ベクトルの各成分)の合計は常に1.0(=100%)になる。
image.png

softmaxは、0.0~1.0の範囲の確率値に変換する関数である。
image.png

計算方法は、
image.png

softmaxにTを導入、(温度)
image.png

Tを大きくすると、低い割合になっている数値を大きくする効果がある。
image.png

T=0では、最大のもののみ1とする効果がある。
image.png

機械学習では、確率値にする前のベクトルの値のことを「Logits」と呼ぶ。
image.png

第6章

簡易的な例で考える

分かりやすくするため、始めに簡易的な例でイメージを考える。

「mole」は、文脈によって、3つの異なる意味を持つが、
image.png

単語をベクトル化した後(Embedding)、Transformerへの入力時には、「mole」に対応する単語ベクトルは、全て同じ値になっている。
image.png

Embedding処理は単なるlook-upテーブルなので、文脈を一切考慮しないもの。

Transformerの中の処理で、「mole」に対応する単語ベクトルに、周囲の文脈情報が渡されて、変化していく。
image.png

周囲の文脈情報が渡されて、例「tower」のベクトルが変化していく。
image.png


image.png


image.png

これまで生成した長い文章の色々な所から、情報が(Context size内にある2048個の)最後尾のベクトルに渡されて、次の単語の予測となる。
image.png

Attention (1つのHead)

例えば、修飾関係があった時、
image.png

修飾関係がある単語に注目・選択して、修飾の単語ベクトルを元の名詞の単語ベクトルに加算していくことで、元の名詞に修飾の意味を追加していく。
image.png

(ただ、これは分かりやすくするための作り上げた例に過ぎない)
image.png

注目すべき何かを検索したい(例: 修飾関係にある単語は周囲にあるか?)、それを検索クエリのようなQベクトルとして、
image.png

Qは、重み行列W_Qと単語ベクトルE_4の積で、算出する。
image.png

各単語ベクトルE_iに対して、それぞれQ_iを計算し、
別の重み行列W_Kと単語ベクトルE_iの積で、キーとするK_iベクトルを計算。
image.png

検索クエリのQと、キー(検索クエリの回答となるもの)Kとで、似ているものを探す。
image.png

Q_iとK_iで同じ方向を向いているものを探すために、
image.png

K_i * Q_jの内積を取り、相関が高いものほど値が大きくなるので、似ているものが分かる。
image.png

前述の例では、修飾関係にある単語の所で、内積が大きくなっている、ということに相当。
image.png

内積値にsoftmaxを取って、0~1の割合値にして、
image.png

数式では、下記の通り。
image.png

数値計算の安定化のため、√d_kで割っておく。(d_k: Kベクトルのサイズ)

特に学習する時には、将来生成するはずの先の単語の情報を使用しないようにするために、マスキング処理が行われる。下三角の成分をゼロにすることに相当。
image.png

ただ、softmaxを取るため、マイナス無限大を入れて、softmaxの後の値がゼロになるようにする。
image.png

「creature」の単語ベクトルに、「fluffy」の意味が加わるように、方向を補正するようなベクトルを算出して出力したいので、
image.png

別の重み行列W_Vと、「fluffy」の単語ベクトルとの積を計算して(=W_V * E_i=V_i)、これを方向を補正するベクトル(Value)とする。
image.png

全ての単語ベクトルE_iでそれぞれW_V*E_iを計算して、
image.png

softmaxで割合にした値とV_iを掛けて、線形結合にする=ΔE_i。
注目する単語が大きい割合値となっているので、注目する単語のV_iベクトルが多く加算される。
image.png

image.png

元の単語ベクトルE_4に、ふわふわ(fluffy)、青い(blue)、の意味が追加されて、E_4’になる。
image.png

全てのE_iを同様に更新して、E_i’とする。
image.png

ここまでの処理を、1つのHeadを計算する、と呼ぶ。
image.png

Attentionにあるパラメータ

W_Q行列は、128×12288のサイズ、(=注目する意味を圧縮したサイズ×単語ベクトルのサイズ)
W_K行列も、128×12288のサイズ、
image.png

W_V行列は、12288×12288のサイズ、
image.png

注目する意味を圧縮してから(Value↓)、単語ベクトルのサイズに戻す処理をするので(Value↑)、
W_V行列は、2つの行列(Value↓とValue↑)に分解してその積を取ったものとすると、パラメータ数が低減できる。
W_V行列は、128×12288のサイズが2個の行列になる。
image.png

まとめると、
image.png

(Cross-Attention)

GPTではSelf-Attentionが使用される。(前述のもの)
GPTには使用されないが、翻訳等の場合はCross-Attentionが使用される。
Key, Valueに別の入力情報から処理された単語ベクトルを用いて、Attentionを計算する。
image.png

Cross-Attentionでは、マスキング処理は行われない。(下三角の成分をゼロにすることに相当)

Multi-Head Attention

文章には、複数のつながりがあり、複数の注目する箇所があるので、Attentionは複数必要。
前述のAttentionを複数個持たせて、Multi-Head Attentionとする。
image.png

GPT-3では、96個のHeadがある。
image.png

96個のW_Q, W_K, W_Vのパラメータ行列がある。
96個のAttentionからの出力ΔE_iが得られる。ΔE_iを全て和算して、それを元の単語ベクトルE_iに加算して、意味の方向を更新する。
image.png

96個のAttentionがあるので、各パラメータも96倍となる。
image.png

Multi-Head Attentionを複数の層にする

Multi-Head Attentionを複数の層にして構成。Attentionの次の層には2層のニューラルネットワークを置く。
image.png

多数の層を繋いで、
image.png

そのため、Attentionのパラメータは、さらに96倍となる=96層。
image.png

第7章

(動画近日公開)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0