データ分析関連のまとめ

データ分析・機械学習周りのもくもく会LTやイベント参加をまとめていきます

Transformerの構造について調べてまとめた

Attention Is All You Needを中心として、Transformerの構造についてまとめました。
解釈間違い等ある時がありますので、その場合指摘いただけると助かります。

目次

概要

  • 言語モデリングやシーケンスモデリングにおいて、RNN(特にLSTMやgated RNN)が主要なアルゴリズムとなっていた。
    • RNNでの処理:前の隠れ状態h_{t-1}と位置tの入力の関数として、隠れ状態h_tを生成
    • RNNのsequentialな性質により学習での並列化が出来ないため、シーケンス長が長くなるとバッチ処理が制限される(逐次計算の制約)事が課題となっていた。
  • RNNを用いないシンプルなネットワークアーキテクチャとしてTransformerが提案された
    • encoder-decoderモデル
    • 以下の機構を持つ
      • Self-Attention
      • Multi-Head Attention
      • Positional-Encoding
    • データを逐次的に入力する機構を用いない事で、並列学習を可能としている。

Model Architecture

  • encoder-decoder構造。
    • encoder:入力sequence (x_1, ..., x_n)を連続的表現のsequence z = (z_1, ..., z_n)マッピングする(入力の原言語をencodeする)。
    • decoder:encoderの出力zを入力として、出力sequence y = (y_1, ..., y_m)を生成する(目的言語の単語列を生成する)。

f:id:yhiss:20200829155559p:plain
Transformer model architecture

Encoder and Decoder stacks

Encoder(上図の左側)

  • N=6の同一層のstackで構成
    • 各layer:2つのsub-layerで構成
      • 1層目:multi-head self-attention mechanism
      • 2層目:全結合のfeed-forward network
    • sub-layer後に残差接続、layerの正規化を実行(上図のAdd&Norm)
  • 各sub-layerの出力は、LayerNorm(x + SubLayer(x)) (SubLayer(x)はsub-layer自身が実装)

Decoder(上図の右側)

  • Encoder同様N=6の同一層のstackで構成
    • 各layer:3つのsub-layerで構成
      • 1層目:マスキング付きmulti-head self-attention mechanism
      • 2層目:原言語と目的言語間のmulti-head attention mechanism(Src-Target Attention)
        • encoderの出力が入力となる。
      • 3層目:全結合のfeed-forward network
    • sub-layer後に残差接続、layerの正規化を実行するのはencoder同様

Attention

  • Attention:一般的に入力データのうち、どの部分を重視するか決定する手段の総称。以下は論文においてて定義された内容。
  • Attention関数は、3つの入力ベクトルであるクエリ(q)およびkey(k)とvalue(v)のペアのセットを出力にマッピングする。 以下はAttention構造を示している。

f:id:yhiss:20200830184222p:plain

Scaled Dot-Product Attention(上図左)

入力:次元 d_kのクエリ(行列:Q)とkey(行列:K)、次元 d_vvalue(行列:V)で構成されているとする。
keyとクエリとの内積を計算し、各々を d_kで割りsoftmax関数を適用しvalueの重みを求める。
実際の計算は以下となる。

 Attention(Q,K,V)\ = \ softmax( \frac{{QK}^T}{\sqrt{d_k}} ) V 

Multi-Head Attention

  • 単語間の関連の強さを考慮する機構
  • 入力からQ,K,Vそれぞれを重み行列により  d_k,d_k,d_v次元に線形写像し、h個の内積Attentionを計算。
    • Self-Attentionでは直前の層の出力からQ,K,V全ての部分空間への射影を行っている
      • 通常はクエリを別の情報源(入力)から用いる所を、self-attentionでは同一の情報源のみでAttentionを実施する。
      • 同一文中で離れた単語の関係性が理解しやすくなる。
    • decoderの2層目である(Src-Target Attention)では、Qがdecoderの直前の層の出力であり、KおよびVがencoderの出力となっている。
 head_i = Attention(QW_i^Q, KW_i^K, VW_i^V)
 重み行列: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}, W^O \in \mathbb{R}^{hd_v \times d_{model}}
 最後にh個のheadを連結させ、行列W^oを作用させる
 MultiHead(Q,K,V) = Concat(head_1, ..., head_h)W^o 
  • 本研究ではh=8の並行なattention layerを採用し、 d_k=d_v = d_{model}/h=64としている。

Position-wise Feed-Forward Networks

  • encoder-decoderの各レイヤには完全結合のfeed-forward networkが含まれている。
    • そしてそれはReLUを挟んだ2つの線形変換で構成される。
 FFN(x) = max(0, xW_1, b_1)W_2 + b_2

Positional Encoding

  • Transformerは再帰も畳み込みも含んでいない(入力を並列に処理する)。
    • そのため、sequenceの順序を利用するためにsequence内のtokenの相対位置or絶対位置についての情報を入れる必要がある。
  • そこでencoder、decoderのbottomにあるinput embeddingに絶対位置である「positional encoding」を追加する。
    • positional encodingはembeddingとおなじd次元なため、両者の和を取ることが出来る。
    • 本研究では、sin,cos関数を用いてpositional encodingを表現している。
  • 以下の式で計算されたpositional encodingの行列を単語の埋め込み行列に可算したもの:encoder、decoderの入力となる。
 PE_{(pos, 2i)}=sin(pos/10000^{2i/d_{model}})
 PE_{(pos, 2i+1)}=cos(pos/10000^{2i/d_{model}})
 pos:position,i:次元

参考文献

  • Attention Is All You Need

https://papers.nips.cc/paper/7181-attention-is-all-you-need.pdf

  • Transformerによる時系列予測

https://www.jstage.jst.go.jp/article/pjsai/JSAI2020/0/JSAI2020_1N4GS1301/_pdf/-char/ja

  • 英日翻訳タスクにおけるスワップモデルを通したseq2seqとTransformerの比較

https://www.anlp.jp/proceedings/annual_meeting/2019/pdf_dir/P5-21.pdf

  • 係り受け構造に基づくAttentionの制約を用いたNMT

https://www.anlp.jp/proceedings/annual_meeting/2019/pdf_dir/A1-4.pdf

  • 係り受け構造に対する相対位置表現を考慮したNMT

https://www.anlp.jp/proceedings/annual_meeting/2019/pdf_dir/P3-26.pdf

  • 深層学習におけるアテンション技術の最新動向

https://www.journal.ieice.org/bin/pdf_link.php?fname=k101_6_591&lang=J&year=2018