📄

Attention is All You Need

Entry
Attention is All You Need—Transformerの誕生
Simple Title
Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., Kaiser, Ł., & Polosukhin, I. (2017). Attention is all you need. Advances in Neural Information Processing Systems, 2017-Decem, 5999–6009.
Description
現在、GPT-3から音楽生成、画像の生成まで、多様な領域で中心的な仕組みとなっているTransformerを導入した論文。時系列データの学習に一般的に用いられてきたRNNなどの複雑なネットワークを排して、比較的シンプルなAttentionだけで学習できることを示した。
Type
Paper
Year
2017
Posted at
April 1, 2021
Tags
NLPessential

Transformerのアーキテクチャ
Transformerのアーキテクチャ

Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., Kaiser, Ł., & Polosukhin, I. (2017). Attention is all you need. Advances in Neural Information Processing Systems, 2017-Decem, 5999–6009. http://arxiv.org/abs/1706.03762

Overview - 何がすごい?

現在、GPT-3から音楽生成、画像の生成まで、多様な領域で中心的な仕組みとなっているTransformerを導入した論文。時系列データの学習に一般的に用いられてきたRNNなどの複雑なネットワークを排して、比較的シンプルなAttentionだけで学習できることを示した。

Abstract

The dominant sequence transduction models are based on complex recurrent or convolutional neural networks that include an encoder and a decoder. The best performing models also connect the encoder and decoder through an attention mechanism. We propose a new simple network architecture, the Transformer, based solely on attention mechanisms, dispensing with recurrence and convolutions entirely. Experiments on two machine translation tasks show these models to be superior in quality while being more parallelizable and requiring significantly less time to train. Our model achieves 28.4 BLEU on the WMT 2014 English- to-German translation task, improving over the existing best results, including ensembles, by over 2 BLEU. On the WMT 2014 English-to-French translation task, our model establishes a new single-model state-of-the-art BLEU score of 41.8 after training for 3.5 days on eight GPUs, a small fraction of the training costs of the best models from the literature. We show that the Transformer generalizes well to other tasks by applying it successfully to English constituency parsing both with large and limited training data.

Motivation

RNNやCNN(WaveNetなど)などが一般的に時系列のデータの学習に用いられてきたが、長いスパンでの依存関係を学習するにはモデルを大きくする必要があった。シーケンスの前の方からauto-regressive(生成結果を次の予測に用いる)に処理するので、並列化が難しいという問題も。

Self-Attention (一つの時系列データの中での異なる位置を関連づけるAttensionの仕組み) だけを使ってモデルを構築することで、RNNモデルなどよりも小さいモデル、短時間で同等以上の精度を実現できることを示した。

Architecture

アーキテクチャは上の図の通り。

Encoder

6層self-attentionの層とシーケンス内のポジションごとのfully-connected layer。

Decoder

decoderも同等だが、もう一層self-attentionの層が加えらえていて、encoderのアウトプットを入力として受ける。

Attention

Attentionとは簡単に言うと、文中のある単語の意味を理解する時に、文中の単語のどれに注目すれば良いかを表すスコアのこと である。例えば英語でitが出て来たら、その単語だけでは翻訳できない。itを含む文章中のどの単語にどれだけ注目すべきかというスコアを表してくれるのがAttention。(下のQiitaの記事から)

Scaled Dot-Product Attention
Scaled Dot-Product Attention
Multi-Head Attention
Multi-Head Attention
Attention(Q,K,V)=softmax(QKTdk)V\operatorname{Attention}(Q, K, V)=\operatorname{softmax}\left(\frac{Q K^{T}}{\sqrt{d_{k}}}\right) V

Attensionはシンプルなマトリクスのdot積。Q: Queryと K: Key とV: Valueを関連づける。Kの次元 dkd_kが大きくなると単純に QKTQ K^{T}が大きくなって、softmaxを取った時の勾配が相対的に小さくなる。そこで dk\sqrt{d_{k}} でノーマライズ。

基本的にQとKの内積をとることで、QとKの関連性が高いところは大きい値になり、Vとかけた時にその部分が強調される... ということで良い?

Multi-Head Attention

そのまま上のSelf-attentionをとるよりも、一旦V, K, Qをそれぞれ線形写像したものを複数作って、それらをくっつけた方が良い。この線型写像 (以下の WW)も Fully-connected layerで学習する。一つのAttentionよりも複数の比較的小さいAttentionを用意した方が良い結果になったということ(元論文ではヘッドの数 h=8h = 8 で embeddingの次元 dmodel=512d_{model}=512を8で割った64次元がそれぞれの小さいAttentionの次元)

MultiHead(Q,K,V)= Concat ( head 1,, head h)WO where head i=Attention(QWiQ,KWiK,VWiV)\begin{aligned}\operatorname{MultiHead}(Q, K, V) &=\text { Concat }\left(\text { head }_{1}, \ldots, \text { head }_{\mathrm{h}}\right) W^{O} \\\text { where head }_{\mathrm{i}} &=\operatorname{Attention}\left(Q W_{i}^{Q}, K W_{i}^{K}, V W_{i}^{V}\right)\end{aligned}

Q, K, Vがそれぞれなんなのか下の図がわかりやすい。"Thinking Machines"という二つの単語の Thinkingという最初の単語に対するAttentionを計算した例。2番目の単語 Machinesのスコアを出すときは q1×k2q_1 \times k_2 になっていることに注意。

http://jalammar.github.io/illustrated-transformer/

Position-wise Feedforward Network

Self-Attentionのレイヤーごとに以下のFully connected layerをかける。

FFN(x)=max(0,xW1+b1)W2+b2\operatorname{FFN}(x)=\max \left(0, x W_{1}+b_{1}\right) W_{2}+b_{2}

Position Encoding

Recurrentのレイヤーがないので、別のやり方でシーケンスの中での位置の情報をエンコードしないといけない。そこでPosition Encoding。  dmodeld_{model} embeddingの次元と同じサイズ、入力に足す。

PE(pos,2i)=sin(pos/100002i/dmodel )PE(pos ,2i+1)=cos( pos /100002i/dmodel )\begin{aligned}P E_{(p o s, 2 i)} &=\sin \left(\operatorname{pos} / 10000^{2 i / d_{\text {model }}}\right) \\P E_{(\text {pos }, 2 i+1)} &=\cos \left(\text { pos } / 10000^{2 i / d_{\text {model }}}\right)\end{aligned}

pos: シーケンスの中のポジション i: 次元

イメージとしては、バイナリーの0と1を入れ替えるタイミングを想起するとよい。一番右のビットは毎回変わる、二番目は2個ずつ入れ替わる...  sin/cosで連続的にやると右のように。

Results

英語-ドイツ語(EN-DE)、英語-フランス語(EN-FR)の翻訳モデル。学習には NVIDIA P100を8台。

学習結果.
学習結果.

Further Thoughts

  • やっと読んだ... サボっててすいません。今やGAN以上にホットなトピックになりつつあるので、Transformerの理解は重要!
  • 本論文はとても簡潔に書かれている。仕組みもあまり難しい数学が出てこない。簡潔すぎてなんとなく直感的に理解できた気になる?ものの細かいところがよくわからない感覚あり。他の解説記事を読んで理解が深まった。
  • 論文のタイトルがかっこよすぎ!

Links

Transformerのわかりやすい紹介! 確かにわかりやすい...

上の記事のビデオ。大雑把な紹介

Attentionについて

【世界一分かりやすい解説】Attentionを用いたseq2seqのメカニズム|Beginaid

本記事は, Visualizing A Neural Machine Translation Model (Mechanics of Seq2seq Models With Attention)を和訳した内容になります。引用元はJay Alammarさん(@JayAlammar)が執筆されたブログ記事で, MITの授業 でも実際に利用されています。 Sequence-to-sequenceは深層学習で用いられるモデルの1つであり,機械翻訳や文章要約,画像キャプションの付与などの分野で大きな成功を収めています。 Google翻訳では,2016年後半からこのようなモデルを使用し始めました。seq2seqモデルは,二つの先駆的な論文内で説明されています( Sutskever et al., 2014, Cho et al., 2014 )。 しかし,モデルを十分に理解して実装するには,お互いの上に成り立つ一連の概念を紐解いていく必要があることが分かりました。これらのアイデアは,視覚的に表現した方がより身近なものになるのではないかと考えました。それがこの記事での狙いです。本記事を読み進めるためには,以前説明したディープラーニングの理解が必要になります。上記の論文(およびポストの後半にリンクされている注目の論文)を読むのに役立つお供になれば幸いです。 Seq2seqは,ある系列(文字列・文章列・画像の特徴量など)を受け取り,別の系列を返すモデルです。学習済みのseq2seqは,以下のように機能します。 ニューラル機械翻訳では,入力系列は次々と処理が施される一連の単語列で,出力も同様に一連の単語列です。 Seq2seqは, エンコーダと デコーダから構成されています。 エンコーダは入力系列の各要素を処理し,捉えた情報を 「文脈」と呼ばれるベクトルにコンパイルします。入力系列全体を処理した後に, エンコーダは 「文脈」を デコーダに送り, デコーダ は出力系列の各要素を次々と生成していきます。 機械翻訳の場合も同様です。 「文脈」は,機械翻訳の場合ベクトルで,基本的には数値の配列からなります。 エンコーダと デコーダは,たいていの場合はRNNからなります。(RNNの入門としては A friendly introduction to Recurrent Neural Networks が参考になります)。 「文脈」 ベクトルの要素は小数点で,これ以降は数字の小大を色の濃淡で表すことにします。 「文脈」 ベクトルの大きさは,モデルの設計時に設定することができます。基本的には,RNNの隠れ層の次元と同じにします。上の例では4次元に設定しましたが,実際の応用では256,512,1024次元のようになります。 モデルの設計上,RNNは各タイムステップで入力と隠れ状態を受け取ります。 エンコーダの場合は,入力として1つの単語を受け取ります。しかし,単語はベクトルで表す必要があります。単語をベクトルに変換するには, 「単語埋め込み」と呼ばれるアルゴリズムが利用され,単語を意味情報に基づいてベクトル空間に変換します。(e.g.

【世界一分かりやすい解説】Attentionを用いたseq2seqのメカニズム|Beginaid

Qiitaの解説記事 わかりやすい!

Transformerを利用している他の論文に当たりたかったら...

Colaboratory上に用意されたPyhont Notebook