AI界を席巻する「Transformer」をゆっくり解説(4日目) ~Model Architecture編 2~
AI界を席巻する「Transformer」を解説するシリーズ4日目です。
Attention Is All You Needの論文PDFはこちら
- 1日目: Abstract
- 2日目: Introduction / Background
- 3日目: Model Architecture 1
- 4日目: Model Architecture 2
- 5日目: Model Architecture 3
- 6日目: Why Self-Attention
- 7日目: Training
- 8日目: Results / Conclusion
- 9日目: Source Code
シリーズ過去記事は一番下にリンク貼ってます。
それではみていきましょう。本論文の中核となる章なので、3回にわけて行います。
Model Architecture
3.2 Attention
Attentionに入ります。Attentionは注意とか注目とかいった意味の単語で、そう訳されてることも多いですが、英語のまま使うことにしてます。
An attention function can be described as mapping a query and a set of key-value pairs to an output, where the query, keys, values, and output are all vectors.
Attentionは、クエリ、キー、キーとペアになる値、そして出力値で構成されていて、クエリと、キーとキー値を変換するマッピング装置のようなものだ。出力値はすべてベクトルである。
それぞれが何なのかは追々でてきます。中身はベクトルですが、基本的に機械学習の中身はベクトル、それらをまとめた行列で計算するからです。
The output is computed as a weighted sum of the values, where the weight assigned to each value is computed by a compatibility function of the query with the corresponding key.
出力値は、キー値と重みの加重和で計算されている。
それぞれのキー値に対する重みは、クエリとそのクエリに対応するキーを使った変換関数から計算される。
詳しくは次をみていきましょう。
3.2.1 Scaled Dot-Product Attention
We call our particular attention "Scaled Dot-Product Attention" (Figure 2). The input consists of queries and keys of dimension
, and values of dimension d_k . d_v
ここでAttentionをより具体的に、「Scaled Dot-Product Attention」と呼ぶことにする。実際のScaled Dot-Product Attentionの中を図示したのが下記。
入力は、クエリ
ここは定義式、つまり著者が決めた定義なので、そのまま受け入れます。
We compute the dot products of the query with all keys, divide each by
, and apply a softmax function to obtain the weights on the values. \sqrt{d_k}
このScaled Dot-Product Attentionの中で、まず、クエリ
In practice, we compute the attention function on a set of queries simultaneously, packed together into a matrix Q.
実際には、単語ごとに存在する一連のベクトルのクエリ
行列とベクトルの違いはあまり意識する必要はありませんが、ベクトルの集合体が行列だと理解するといいと思います。下記の記事が特に参考になりました。
この行列の内積を計算するレイヤーを表現してるのが、図に2回出てくる「MatMul」です。MatMulはMatrix Multiplicationの略で、つまり行列の内積の英語を省略した言葉です。
MatMulについて参考にしたサイト
The keys and values are also packed together into matrices K and V . We compute the matrix of outputs as:
キー
The two most commonly used attention functions are additive attention [2], and dot-product (multiplicative) attention.
よく使われるAttentionの例としては、「Additive Attention」と「Dot-Product Attention」の2つがあります。
Dot-product attention is identical to our algorithm, except for the scaling factor of
. \sqrt{\frac{1} {d_k}}
Dot-Product Attentionは、本論文と基本的に同じで、違いは、標準化のための
scaleとは恐らくpythonのscale関数から来ており、スケールを統一して、正規化・標準化されたという意味で、scaledが使われています。
こちらの記事も参考にしました。
これで下記の図のScaleの部分も説明されました。
Additive attention computes the compatibility function using a feed-forward network with a single hidden layer.
Additive Attentionは、単一の隠れ層を持つFeed-Forward Networkを使って変換関数を計算します。
Additive Attentionの参考論文は載ってませんでしたが、以前からあるAttentonの一種のようです。
While the two are similar in theoretical complexity, dot-product attention is much faster and more space efficient in practice, since it can be implemented using highly optimized matrix multiplication code.
この2つのAttentionは、理論的な複雑さでは似ているが、経験的にDot-Product Attentionの方がはるかに計算が早く、計算時に使用するメモリなどの容量の効率性も高いことが分かっている。それは、Dot-Product Attentionは、より最適化された行列の内積を内部的に実装しているからだ。
While for small values of
the two mechanisms perform similarly, additive attention outperforms dot product attention without scaling for larger values of d_k [3]. d_k
一方で、キー
やや矛盾してるようにも思えますが、あまり論点ではないので、すすみます。
We suspect that for large values of
, the dot products grow large in magnitude, pushing the softmax function into regions where it has extremely small gradients d_k . To counteract this effect, we scale the dot products by ^4 . \sqrt{\frac{1}{d_k}}
著者のGoogle Brainを中心としたメンバー達は、まさにこのキー
だとしてもなぜ正規化する時の値が
To illustrate why the dot products get large, assume that the components of q and k are independent random variables with mean 0 and variance 1. Then their dot product, ^4 q·k = , has mean 0 and variance dk. \sum_{i=1}^{d_k}
なぜDot-Product Attentionの計算結果が大きくなってしまうのかというと、まずクエリ
とあります。分散とは、色々な要素があった時の平均から、各要素が実際どれだけ離れているのか集合してるのかを表す指標であり、平均と各要素の差分の2乗を要素ごとに計算して、それを平均したものが分散です。
この分散は平均からどれだけ離れているかを指標化するために、途中で2乗しているので、最終的にこの分散の平方根をとったものが標準偏差です。なので、分散の平方根である、
標準偏差と分散については数学や統計学の話になりますが、詳しくはこちらの記事などを参考にしてください。
3.2.2 Multi-Head Attention
Multi-Head Attentionの説明。なぜMultiなのかというと、簡単に言うと、上述したAttention、具体的にはScaled Dot-Product Attentionを複数使ってるからです。
Instead of performing a single attention function with
-dimensional keys, values and queries, we found it beneficial to linearly project the queries, keys and values d_{model} times with different, learned linear projections to h , d_k and d_k dimensions, respectively. d_v
なぜ複数使うのかというと、次元
計算を行う際に、次元数は減らした方が高速になります。学習においては計算時間はかなり重要な要素であるため、次元を減らします。人間が認識できる次元は空間的には3次元までですが、3次元の空間の計算を行うよりも、2次元の平面の計算の方が簡単なのは感覚的にわかると思いますし、それ以上に1次元であればもっと簡単です。
元々の次元
射影や射影による次元削減、Linear関数に関しては、特にこちらの記事はわかりやすかったです。
On each of these projected versions of queries, keys and values we then perform the attention function in parallel, yielding
-dimensional output values. d_v
上記のように射影して次元を減らしたクエリ、キー、キー値に対して、今回定義したAttention関数を並列に実行し、次元
These are concatenated and once again projected, resulting in the final values, as depicted in Figure 2.
上記で
Concatは英語のConcatnateの略語で連結するという意味です、Linuxですとしょっちゅう使うcatコマンドがここから来ています。1ファイル開くだけだと感じませんが、複数ファイルくっつけて開くことも出来ますよね。
Concatレイヤーはこちらの記事も参考にしました。
Multi-head attention allows the model to jointly attend to information from different representation subspaces at different positions. With a single attention head, averaging inhibits this.
Muti-Head Attentionを使うことで、今回のモデルは、異なる要素にある単語がもつそれぞれ異なる部分ベクトル空間におけるを同時に読みに行くことが可能になっている。Single-Attentionでは平均化によってそれができない。
Subspaceは線形代数やベクトルにおける部分空間のことです。
これらを数式で表現すると、
と定義します。
Where the projections are parameter matrices
. W_i^Q \in \mathbb{R^{d_{model} \times d_k}}, W_i^K \in \mathbb{R^{d_{model} \times d_k}}, W_i^V \in \mathbb{R^{d_{model} \times d_v}} \ \mathrm{and} \ W^O \in \mathbb{R^{hd_v \times d_{model}}}
Linearレイヤーにおける射影関数は、このレイヤーの重みパラメーター行列であり、クエリ、キー、キー値、またConcatレイヤーの出力値に対してそれぞれ、
こちらの記事も参考にしています。
In this work we employ
parallel attention layers, or heads. For each of these we use h = 8 . Due to the reduced dimension of each head, the total computational cost is similar to that of single-head attention with full dimensionality. d_k = d_v = d_{model}/h = 64
本論文では、
再度、図と数式を示します。
whereは「ただし」の意味です。このMulti-Head Attentionを行列
この
と表現されます。ここでLinear関数で線形変換を行う際に、バイアス
また、通常、線形変換は
おわり
AI界を席巻する「Transformer」を解説するシリーズ4日目は以上です。ここまで来れば峠は越えたも同然(?)かもしれません。次回はAttentionのおさらいからです。
感想や要望・指摘等は、本記事へのコメントか、TwitterのリプライやDMでもお待ちしております!
また、結構な時間を費やして書いていますので、投げ銭・サポートの程、よろしくお願いいたします!
シリーズ関連記事はこちら
【2023年5月追記】
また、Slack版ChatGPT「Q」というサービスを開発・運営しています。
こちらもぜひお試しください。
Discussion