AI界を席巻する「Transformer」をゆっくり解説(3日目) ~Model Architecture編 1~
AI界を席巻する「Transformer」を解説するシリーズ3日目です。
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
Most competitive neural sequence transduction models have an encoder-decoder structure [5, 2, 35].
ほとんどのAI翻訳モデルは、エンコーダー・デコーダーを使った構造である。
Here, the encoder maps an input sequence of symbol representations (x1, ..., xn) to a sequence of continuous representations z = (z1, ..., zn).
通常、エンコーダーは入力の (
この配列
Given z, the decoder then generates an output sequence (y1, ..., ym) of symbols one element at a time.
この
ここでいう配列
At each step the model is auto-regressive [10], consuming the previously generated symbols as additional input when generating the next.
上記の1つ1つの翻訳結果を得る計算ステップごとで、再帰的なループがかかることによって前のステップで生成された値と、今のステップで与えられた入力値をデコーダーは食べます。
つまり、通常はエンコーダーとデコーダーは、すべての配列の要素同士がつながっているわけではなく、前の計算結果を記憶として持つものの、あくまで1ステップずつ、1単語ずつ、計算して翻訳していくわけです。だから記憶力が弱いんですね。1個前のことしか覚えてないようなイメージです。
The Transformer follows this overall architecture using stacked self-attention and point-wise, fully connected layers for both the encoder and decoder, shown in the left and right halves of Figure 1, respectively.
この点、Transformerは、この全体感としてのエンコーダー・デコーダーを使ったアーキテクチャーは踏襲しつつも、それをSelf-AttentionとPoint-Wiseという仕組みを使うことで、エンコーダー・デコーダー双方の配列を要素ごとにではなく、完全につなげることを実現している。それが下の図です。
つまり、1個前の記憶しかないのではなく、前の単語の記憶も覚えてる仕組みだということです。
この絵を見てもぱっと分からない方も多いと思うので解説します。
左側がエンコーダー、右側がデコーダーです。詳しくは下記で述べていきます。
Encoder and Decoder Stacks
Encoder:
The encoder is composed of a stack of N = 6 identical layers.
Encoderは図の左側ですが、グレーで囲われた枠があり、その左に
つまり図は省略されている、ということです。
Each layer has two sub-layers. The first is a multi head self-attention mechanism, and the second is a simple, positionwise fully connected feed-forward network.
それぞれのレイヤーの中には、2つのサブレイヤーがあります。
1つ目のサブレイヤー「Multi-Head Self-Attention」で、2つ目のサブレイヤーは配列の1要素の位置ごとに連結された「Feed-Forward Network(FFNと呼ぶ)」です。
positionwiseの意味は「位置ごとに」で、clockwiseだと「時計回りに」とかに近い使われ方です。つまり配列の1要素ごとにという意味なので、今回は1単語ごとに、という意味です。
少し前に出てくるpoint-wiseもposition-wiseと同じ意味だと思われます。
We employ a residual connection [11] around each of the two sub-layers, followed by layer normalization [1].
それぞれのサブレイヤーの後に、Add & Normというサブレイヤーを採用してます。これはAdd & Normalizationの略で、Add & Normの前のサブレイヤーの入力を加算(Add)し、Add & Normの前のサブレイヤーの出力を正規化(Normalization)するレイヤーです。こういった接続方法を残差接続(residual connection)というようです。
この残差接続や正規化を活用することで、ネットワークの深さを抑えつつも、学習効率は維持できるという別の研究結果を利用しています。こちらも面白そうなテクニックなので、要望があればご紹介したいです。
- Layer normalization: 2016年にUniversity of Trontoが公開
- Deep residual learning for image recognition: 2015年にMicrosoft Researchが公開
That is, the output of each sub-layer is LayerNorm(x + Sublayer(x)), where Sublayer(x) is the function implemented by the sub-layer itself.
したがって、再度この図を見直すと、2つあるサブレイヤーそれぞれのアウトプットは、LayerNorm(
To facilitate these residual connections, all sub layers in the model, as well as the embedding layers, produce outputs of dimension dmodel = 512.
このようなアーキテクチャー、残差接続や、すべてのサブレイヤー、またEmbedding Layersも含めて、うまく機能するように、このモデルのアウトプットの次元は512としています。
Embedding Layerとは入力である文章、今回で言うと英語の文章を、1つ1つの単語をAIが読めるように、つまり計算できるように、数字に変換するレイヤーです。具体的には、ただのスカラーな数字ではなく、ベクトルで表現されます。
こちらも参考にしました
また、次元とは、あるベクトル空間に含まれる1次独立なベクトルの数のことを指しています、例えば、通常の地図は平面で表しますので、横軸と縦軸、つまり
立体的な空間で考えれば、これに高さの
現実世界で直感的にわかるのはこのくらいの次元数までですが、理論的に、数学的には、何次元でもとることができます。今回はそれが512ということです。
次元はこちらを参考にしました。大学で学ぶ線形代数から来ています。
Decoder:
The decoder is also composed of a stack of N = 6 identical layers.
DecoderもEncoderと同じく、6層のレイヤーで構成しています。
In addition to the two sub-layers in each encoder layer, the decoder inserts a third sub-layer, which performs multi-head attention over the output of the encoder stack.
DecoderはEncoderにある2つのサブレイヤーに加えて、3つ目のサブレイヤーを真ん中に加えています。これは6つに積み重なったEncoderからのアウトプットを入力として受けるMuti-Head Attentionを入れています。
Similar to the encoder, we employ residual connections around each of the sub-layers, followed by layer normalization.
Encoderと同じように、Decoderのそれぞれのサブレイヤーにも残差接続を活用しています。
We also modify the self-attention sub-layer in the decoder stack to prevent positions from attending to subsequent positions.
また、DecoderのSelf-Attentionサブレイヤーは改良していて、配列のある要素がそれより後続の要素に影響しないようにしています。
つまり、Encoderには英語の文章がベクトルに変換された配列のすべての要素が一気に入力されてくるが、Decoderには、今翻訳しようとしてる要素の単語とその前の単語までは参考にさせるが、今翻訳しようとしてる要素の単語の後続の単語は参考にさせないようにしている、ということです。
あくまで翻訳といっても、すべての原文が与えられる前に、同時通訳的に翻訳することを前提としてると考えるとわかりやすいです。ただ、Google翻訳やDeepL翻訳においても、入力文章は書いてる途中でもう翻訳を始めてくれるので、通常のWEB翻訳においても適用される話だと思います。でないと、入力が終わったよ!翻訳ボタンポチッ!を待つか、x秒後に翻訳、というロジックを入れないといけないですからね。
This masking, combined with fact that the output embeddings are offset by one position, ensures that the predictions for position i can depend only on the known outputs at positions less than i.
これをマスキングと定義していて、このマスキングと、出力の翻訳後の文章の配列が、各単語の予測ごとに毎回オフセットされることを組み合わせることで、入力された配列の
この図の右下にあるOutputs (shifted right) と書かれた部分がまさに、今
ここまでがEncorder、Decoderでした。
おわり
AI界を席巻する「Transformer」を解説するシリーズ3日目は以上です。次回は本論文の本丸Attentionからです。
感想や要望・指摘等は、本記事へのコメントか、TwitterのリプライやDMでもお待ちしております!
また、結構な時間を費やして書いていますので、投げ銭・サポートの程、よろしくお願いいたします!
シリーズ関連記事はこちら
Slack版ChatGPT「Q」というサービスを開発・運営しています。
こちらもぜひお試しください。
Discussion