Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Transformer] Attention Is All You Need #115

Open
Yagami360 opened this issue May 1, 2021 · 0 comments
Open

[Transformer] Attention Is All You Need #115

Yagami360 opened this issue May 1, 2021 · 0 comments

Comments

@Yagami360
Copy link
Owner

Yagami360 commented May 1, 2021

0. 論文情報・リンク

1. どんなもの?

  • 自然言語処理(NLP)でよく利用される attention 構造付き seq2seq モデルに対して、RNN や CNN の構造を全て attention 構造に置き換えた Transfomer と呼ばれるモデルを提案。翻訳タスクにおいて、変換精度と学習速度ともに従来のモデルからの大幅な向上を実現。

2. 先行研究と比べてどこがすごいの?

  • 自然言語処理(NLP)のタスクにおいて広く採用されている seq2seq モデルは、encoder-decoder 構造を持つ RNN ベースのアーキテクチャであるが、長い系列データに対しては、例え LSTM のような長期記憶構造を用いても変換精度が低い問題や学習時間が長いという問題が存在した。
    attention 構造付き seq2seq モデルでは、このような問題を解決するために、入力系列のどの要素を重要視するかという attention 構造を導入しているが、依然として RNN 構造は残っているモデルになっている。
    本手法では、上記 attention 構造付き seq2seq モデルの RNN 構造を全て排除し、attention 構造のみをもつような Transfomer と呼ばれるモデルを提案し、翻訳タスクにおける変換精度と学習速度ともに大幅な向上を実現している。
  • 後発の NLP の SOTA モデル(BERT, GPT-2 など)のベースラインのアーキテクチャになっている。

3. 技術や手法の"キモ"はどこにある?

  • 【前提知識】 seq2seq モデル

    自然言語処理(NLP)のタスクにおいて、{機械翻訳・対話・質問応答・文書要約}などのタスクは、ある系列(sequence)から別の系列(sequence)への変換処理であるとみなすことができる。
    seq2seq モデルはこのような変換処理を、上図のような encoder-decoder 構造を持つ RNN ベースのアーキテクチャでモデル化したモデルになっている。具体的には、以下のような処理を行う。

    1. Encoder 側処理
      one-hot ベクトルで表現された入力系列のベクトル X を encoder 側の RNN(多くの場合はLSTMが採用される)ネットワークで符号化ベクトルに変換する。RNN の各層では以下のような処理が行われる

      1. encoder 側の埋め込み層により、one-hot ベクトルで表現された入力系列のベクトル X を埋め込みベクトルの系列に埋め込む。
      2. 上記埋め込みベクトルの系列に対して、通常の RNN のように RNN ネットワーク重みと活性化関数で再帰的に活性化し、符号化ベクトルに変換する。
    2. Decoder 側処理
      上記 Encoder で変換した符号化ベクトルを decoder 側のRNN(多くの場合はLSTMが採用される)ネットワークで出力系列のベクトルに変換する。具体的には、以下のような処理を行う。

      1. decoder 側の埋め込み層により、正解データとしての出力系列 Y を埋め込みベクトルに埋め込む。
        推論時は、正解データとしての出力系列が与えられないので、上図の点線矢印のように、推論出力データに対して BOS(文頭)~ EOS(文末)まで再帰的に埋め込み処理を行う。
      2. 上記正解データとしての埋め込みベクトルの系列と encoder 側で符号化した符号化ベクトルに対して、通常の RNN のように RNN ネットワーク重みと活性化関数で再帰的に活性化し、出力系列に変換する
      3. 出力系列のベクトルを softmax で確率化する。推論時は arg softmax で最大確率値の文字を出力する。
  • 【前提知識】 attention 構造付き seq2seq モデル
    seq2seq モデルでは、RNN ネットワークで入力系列を出力系列に変換するが、長い系列データに対しては、LSTM のような長期記憶構造を用いても変換精度が低い問題が存在する。
    これは、RNN 構造において入力系列の情報が出力系列まで伝搬しづらいことに起因する問題であるので、より直接的に入力系列が出力系列に影響を与えられるような attention 構造(=入力系列のどの要素を重要視するかの構造)を導入する。

    上図は、attention 構造(soft attention)付き seq2seq モデルのアーキテクチャ図である。
    一般的な seq2seq モデルでは、encoder 側の中間層の状態ベクトルを符号化ベクトルとしていたが、このモデルでは、入力系列の各要素の重要度を表す重み(attention)a を導入している。
    そして、この attention 重み a による中間層の状態ベクトルの重みつき平均 を decoder 側に入力するようにしている。
    また、Decoder 側の出力として、一般的な seq2seq モデルでの ではなく で出力を行うようにしている。
    ここで、attention 重み a に関しても、(Ω には内積がよく使わえる)のように decoder 側の出力を参照して帰的に計算するようにすることで、attention 重みも学習できるようにしている。

  • 【前提知識】 attention 構造と辞書操作の関係(memory network)
    上記 attention 構造 seq2seq モデルでの attention 計算式を、辞書操作における Q (query), K (key), V (value) の概念で一般化すると、以下のような式で書き換えられる。

    この計算式は、検索 query に一致する key に対応した value を取り出すといった辞書操作を行っていることと同値である。
    それ故に、attention 構造は、辞書オブジェクトであると解釈できる。

    尚、attention 構造には、大きく分けて以下の2種類が存在する。

    • Source-Target attention
      key と value が encoder の中間層出力(source)から得られて、Query が decoder の中間層出力(target)から得られる attention 構造。入力系列の全ての位置情報が decoder に伝搬されていることになる。
      上記 attention 構造付き seq2seq モデルは、この Source-Target attention 構造になっている。

    • Self-Attention
      query, key, value 全てが自身のネットワークの下位層から得られる attention 構造。
      下位層全てからの情報が、上位層に伝搬されることになる。

    Transformer では、Source-Target attention と Self-Attention での attention 構造両方が採用されている。

    Transformer の後発論文において、画像タスクにおいても CNN より優れた結果になっているのは、CNN では1回の畳み込み操作で隣接ピクセルの情報しか伝搬できないの対して、Self-Attention では下位層全てからの情報を伝搬できるのが大きいと考えれれる。

  • アーキテクチャの全体像

    上図は、本モデル(Transfomer)のアーキテクチャ図を示した図である。
    Transfomer は、左側の赤枠を encoder とし右枠の青枠を decoder とする encoder-decoder モデルになっており、encoder, decoder それぞれの内部構造は、以下のようになる。

    • encoder
      {self-attention (multi-head attention)・残差接続&Norm処理・Position-wise な全結合フィードフォワード型ネットワーク}のレイヤーを N=6 回積み上げたネットワークで構成されている

    • decoder
      encoder と同じく{self-attention (multi-head attention)・残差接続&Norm処理・Position-wise な全結合フィードフォワード型ネットワーク}のレイヤーを N=6 回積み上げたネットワークで構成されているが、multi-head attention への入力は、encoder 側からの出力になる。また、対象単語の次の単語の正解データをカンニングしてしまうことを防止するために、対象単語より次の単語に attention が加わらないようにする Masked Multi-Head Attention 層が追加されている。

    • Positional Encoding
      Transfomer では、RNN の構造をなくしたために、入力系列における単語の順番情報を表現できなくなってしまっている。
      そのため、入力系列を埋め込みベクトルに埋め込む際に、単語位置を定めるための情報を埋め込みベクトルに埋め込む。

  • Multi-Head Attention

    attention 構造付き seq2seq モデルでは、attention による重み付き平均和を decoder 側に入力するが、この平均化処理により、異なる文字位置での情報が欠落してしまう。
    そのため本手法では、Q (query),K (key),V (value) をそれぞれ重み行列 W で線形変換し、後述の Scaled Dot-Product Attention で attention した h=8 個の中間出力を concat して出力するようにする。

    concat することで、平均和のときよりも異なる文字位置での情報が欠落しずらくなっていると思われる

    • Scaled Dot-Product Attention
      Transformer では、内積計算での attention を Scaled Dot-Product Attention と呼び、通常の内積計算での attention 計算式に、scale factor で正規化する処理を追加している。
      ※ scale factor の値が大きい場合に内積の値が大きくなり、誤差逆伝播される softmax 出力の勾配が極端に小さくなる可能性があるので、scale factor での正規化処理を行っている。

    Transfomer では、この Multi-Head Attention を以下の3つの場所で使用している。

    1. encoder-ecoder のボトルネック部分での Multi-Head Attention
      encoder-ecoder のボトルネック部分の Multi-Head Attention は、Source-Target attention になる。
      即ち、key と value が encoder の中間層出力(source)から得られて、Query が decoder の中間層出力(target)から得られる 。

    2. encoder 内部での Multi-Head Attention
      encoder 内部の Multi-Head Attention は、Self-Attention になる。
      即ち、query, key, value 全てが自身の encoder の下位層から得られる

    3. decoder 内部での Multi-Head Attention
      decoder 内部の Multi-Head Attention は、Self-Attention になる。
      即ち、query, key, value 全てが自身の decoder の下位層から得られる
      但し、対象単語の次の単語の正解データをカンニングしてしまうことを防止するために、対象単語より次の単語に attention が加わらないようにする Masked Self-Attention にしている

  • Position-wise Feed-Forward Networks
    Position-wise Feed-Forward Networks は、単語系列データの位置度(Position-wise)にフィードフォワード型ネットワーク(MLPなど)での処理を行うネットワークで、以下の式で定式化できる。

  • Positional Encoding

    Transfomer では、RNN の構造をなくしたために、入力系列における単語の順番情報を表現できなくなってしまっている。
    そのため、入力系列を埋め込みベクトルに埋め込む際に、単語位置を定めるための Positional Encoding の行列 P, E を埋め込みベクトルに加算する。ここで、Positional Encoding の行列 P, E の各要素は、以下の式で定義される。

    この式により、単語の位置 pos に従って、埋め込み加算値が変化するので、間接的に単語の順番情報が加味されることになる?

  • 正則化
    過学習を抑制するために、学習時に以下の2つの正則化処理を行っている。

    1. Residual Droputout

      各残差接続の Add と normalization 処理の手前で dropout 処理を行う。
      Positional Encoding での加算処理の後にも dropout を適用する。
      dropout 率は 0.1

    2. Label Smoothing
      xxx

4. どうやって有効だと検証した?

  • 学習用データセット

  • 実験設定

  • 既存の自然言語モデルとの定量的比較検証

    • BLUE スコア
      機械翻訳の定量的品質評価スコアで、機械翻訳結果と正解翻訳との類似度を以下の式で計算することで計算される。

5. 議論はあるか?

  • Transfomer は、画像系や生成系(GANなど)でも強力なアーキテクチャになりつつあるのでその動向を注目したほうがよさげ
  • Transformer の後発論文では、画像系タスクよにおいても CNN より優れた品質スコアを実現している論文が出てきている。
    これは、CNN では1回の畳み込み操作で隣接ピクセルの情報しか伝搬できないの対して、Transfomer の Self-Attention では下位層全てからの情報を伝搬できるのが大きいと考えれれる。

6. 次に読むべき論文はあるか?

  • Vision Transformer
  • TransGAN: Two Transformers Can Make One Strong GAN

7. 参考文献

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant