Traffine I/O

日本語

2023-01-20

Attention

Attention とは

Attentionとは、NLPにおいて、文章中のどの単語に注目すればよいのかを表すスコアです。Attentionは Neural Machine Translation by Jointly Learning to Align and Translate という論文で初めて登場し、Attentionは論文中では「soft align」や「soft search」という言葉で表現されています。

以下の英文を日本語に翻訳する場合を考えます。

I like apple.

この英文を翻訳すると以下のようになります。

私はりんごが好きです。

我々人間が「apple」を「りんご」と訳すときは、「apple」という単語や、その直前の「like」に着目しています。

このように、我々人間は翻訳時に文章中の何かしらの単語に注意を向けています。この考え方をニューラルネットワークモデルに応用したのがAttentionです。

Attention の理解

Attentionの視覚的な理解を試みます。以下の記事がとても分かりやすいので参考にしつつ、随時補足します。

https://jalammar.github.io/visualizing-neural-machine-translation-mechanics-of-seq2seq-models-with-attention/

従来の Encoder-Decoder モデル

Attentionが現れた背景にはEncoder-Decoderモデル(Seq2seq)の能力の限界があります。

Encoder-Decoderモデルとは、EncoderとDecoderという2つのRNNからなるモデルです。Encoderは入力の各要素を処理し、捉えた情報を固定次元の文脈ベクトル(context vector)にコンパイルします。入力全ての処理後にEncoderは文脈ベクトルをDecoderに送り、Decoderは文脈ベクトル、隠れ状態(hidden state)、一つ前の出力を入力として各要素を次々と出力していきます。

  • Encoder: 入力単語 x をRNNで固定次元の文脈ベクトル c に変換する
  • Decoder: 文脈ベクトル c と隠れ状態 h_i と一つ前の出力 y_{i-1} を入力に、単語 y_i を出力する

Seq2qe2
Visualizing A Neural Machine Translation Model (Mechanics of Seq2seq Models With Attention)

文脈ベクトルの大きさはモデルの設計時に設定することができます。基本的にはRNNの隠れ層の次元(256、512、1024次元)と同じにします。下図では4次元に設定しています。

Context vector
Visualizing A Neural Machine Translation Model (Mechanics of Seq2seq Models With Attention)

RNNは各タイムステップで入力と隠れ状態(hidden state)を受け取ります。Encoderの場合は、入力として1つの単語を受け取ります。受け取った単語は単語埋め込みと呼ばれるアルゴリズムを利用して単語ベクトルに変換します。単語埋め込みモデルは独自に学習したモデル、もしくは事前学習済みモデルを使います。埋め込みベクトルの次元は200や300などが一般的です。下図では4次元のベクトルで表しています。

word embedding
Visualizing A Neural Machine Translation Model (Mechanics of Seq2seq Models With Attention)

RNNでは最初のタイムステップでhidden state #0input vector #1を受け取り、処理を行なってからhidden state #1input vector #2を出力します。

RNN
Visualizing A Neural Machine Translation Model (Mechanics of Seq2seq Models With Attention)

次のタイムステップではinput #2hiden state #1を受け取ります。その次のタイムステップではinput #3hidden state #2を受け取ります。

RNNのEncoder-Decoderモデルは下図のような挙動をします。Encoderが処理した最後の隠れ状態(hidden state #3)が,文脈ベクトルとしてDecoderに渡されます。

seq2seq 5
Visualizing A Neural Machine Translation Model (Mechanics of Seq2seq Models With Attention)

Decoderも同様に各タイムステップごとの隠れ状態を保持しており、文脈ベクトルと隠れ状態、一つ前の出力を入力として、単語を出力します。

seq2seq 6
Visualizing A Neural Machine Translation Model (Mechanics of Seq2seq Models With Attention)

Attention 付き Encoder-Decoder モデル

Encoder-Decoderモデルでは、文脈ベクトルは固定次元です。つまり、Encoderで常に同じ長さのベクトル表現に変換されているということになります。短い文章であれば変換後のベクトル表現はしっかりと情報を保持していると考えられますが、文章が長くなると情報がベクトル表現に入りきれなくなります。そのため長い文章では精度が落ちてしまうという問題があります。

seq2seq accuracy
How Attention works in Deep Learning: understanding the attention mechanism in sequence models

この問題の解決策としてAttentionというアーキテクチャが生まれました。

タイムステップ7では、Attentionを利用することでDecoderは英訳を生成する前にétudiantに注目することができます。入力の情報を増幅させる仕組みにより、Attentionが加わったモデルはより優れた性能を発揮します。

Visualizing A Neural Machine Translation Model (Mechanics of Seq2seq Models With Attention)

Attention付きのEncoder-Decoderモデル(seq2seq)は従来のモデルと比べて以下の2点の違いがあります。

  • Encoderはより多くの情報をDecoderに渡す
  • Decoderは各タイムステップに関連する入力の要素に注目する

1つ目の違いとして、Encoderは最後の隠れ状態を渡すのではなく、全ての隠れ状態をDecoderに渡します。

seq2seq 7

2つ目の違いとして、Attention付きのDecoderは各タイムステップにおいて、出力を生成する前に以下の処理を行います。

  1. 受け取ったEncoderの全ての隠れ状態を見る
  2. それぞれの隠れ状態にスコアを与える
  3. 各隠れ状態にソフトマックスを通したスコアを乗算することで隠れ状態の重み付けをする(高スコアの隠れ状態を増幅させ、低スコアの隠れ状態をかき消す)

attention process

Attentionは以下のように機能します。

  1. DecoderのRNNは<END>トークンと隠れ状態の初期値を受け取る
  2. RNNは新しい隠れ状態(h4)を生成する
  3. Attention: Encoderの全ての隠れ状態とDecoderが生成した隠れ状態(h4)を利用し、各タイムステップにおける文脈ベクトル(C4)を生成する
  4. Decoderの隠れ状態(h4)と文脈ベクトル(C4)を結合する
  5. 結合されたベクトルを全結合層に通す
  6. 全結合層の出力が各タイムステップにおいて出力される
  7. 以上を各タイムステップごとに繰り返す

Attention tensor dance

Decoderの各タイムステップで入力のどの部分に注目しているかの様子は以下のようになります。

seq2seq 9

下図は、Neural Machine Translation by Jointly Learning to Align and Translate という論文で示された図です。色が白いほどAttentionが着目しているということになります。例えば、「agreement」という単語を生成するときに入力の「accord」に注目していることが分かります。

attention sentence

参考

https://arxiv.org/abs/1409.0473
https://theaisummer.com/attention/
https://blog.floydhub.com/attention-mechanism/
https://jalammar.github.io/visualizing-neural-machine-translation-mechanics-of-seq2seq-models-with-attention/
https://slds-lmu.github.io/seminar_nlp_ss20/attention-and-self-attention-for-nlp.html

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!