AttentionメカニズムとTransformer|言語処理へのDeepLearningの導入の研究トレンドを俯瞰する #5

f:id:lib-arts:20190506200344p:plain

近年猛威を振るっているDeepLearningの言語処理への応用についてまとめていければと思います。
#4ではTransformerの大元の論文である「Attention Is All You Need」について読み進めるにあたっての前提知識についてまとめました。

#5では実際に中身を読み解いていければと思います。

[1706.03762] Attention Is All You Need
事前知識についてまとめていたら長くなってしまったので、#4では論文を読み進めるにあたっての事前知識についてまとめていきます。以下目次になります。

1. #4の簡単な復習
2. Transformer(Attention Is All You Need)に関して
2-1. Transformerの大まかな構造
2-2. Scaled Dot-Prouct AttentionとMulti-Head Attention
2-3. 位置情報とPositional Encoding
3. まとめ


1. #4の簡単な復習
#4では「深層学習による自然言語処理」の4.1節の内容を元に注意機構(attention mechanism)と4.2節の内容を元に記憶ネットワーク(memory network)についてまとめました。
まず、注意機構は符号化層(encoder)から復号化層(decoder)に値を渡す際に系列の重み付け平均を取ることで、長い系列の学習を行う際の課題への対応を行えるようにしてくれています。また、この際に重みも別途計算して隠れ層の重み付け平均にするソフト注意機構と一つの隠れ層を用いるハード注意機構について触れました。概ねソフト注意機構が主となっているようですが、数式上ではハード注意機構はソフト注意機構の特殊な場合と捉えることもできるのでこの辺については深く気にしなくて良さそうです。
次に記憶ネットワークに関しては直接的に記憶の仕組みをモデル化する研究だと捉えておくと良いです。記憶ネットワークでは、「記憶を行うこと」「記憶を呼び出すこと」「記憶を使って外からの問い合わせに答えること」を行うためにネットワークのモデル化を行なっています。
大体の復習はできましたので、2節では実際に論文を確認していければと思います。


2. Transformer(Attention Is All You Need)に関して
Transformerを提唱した"Attention Is All You Need"は2017年6月頃の論文で、1節で説明したAttentionメカニズムによって成り立っており、RNNやCNNを用いないで学習を行っています。このRNNもCNNも用いないという所はAbstractで言及されるなどこの論文のメインのContributionになっているので意識しておくと良さそうです。
Transformerは二つの翻訳タスクの精度で良い成果を出し、学習時間も少ないというモデルです。検証にあたってはWMT2014の"English-to-German translation task"と、WMT2014の"English-to-French translation task"が用いられています。
また、大きなデータセットや限定されたデータセットの双方における英語のサブフレーズ分解(constituency parsing)における適用に成功したことを示すことで、Transformerの他のタスクへの汎用性を示すともあり、こちらについては6.3で詳しくまとめられています。
Abstractに書かれている概要については上記が主なので、2-1~2-3では元論文の3節に書かれているModel Architectureから重要だと思われる内容を抜粋します。


2. Transformer(Attention Is All You Need)に関して
以下Abstractをベースに簡単にまとめます。
Transformerを提唱した"Attention Is All You Need"は2017年6月頃の論文で、1節で説明したAttentionメカニズムによって成り立っており、RNNやCNNを用いないで学習を行っています。このRNNもCNNも用いないという所はAbstractで言及されるなどこの論文のメインのContributionになっているので意識しておくと良さそうです。
Transformerは二つの翻訳タスクの精度で良い成果を出し、学習時間も少ないというモデルです。検証にあたってはWMT2014の"English-to-German translation task"と、WMT2014の"English-to-French translation task"が用いられています。
また、大きなデータセットや限定されたデータセットの双方における英語のサブフレーズ分解(constituency parsing)における適用に成功したことを示すことで、Transformerの他のタスクへの汎用性を示すともあり、こちらについては6.3で詳しくまとめられています。
Abstractに書かれている概要については上記が主なので、2-1~2-3では元論文の3節に書かれているModel Architectureから重要だと思われる内容を抜粋します。


2-1. Transformerの大まかな構造

f:id:lib-arts:20190506200344p:plain
Transformerの大まかな構造は上記で表されています。画像において左がEncoder、右がDecoderになっています。それぞれ図のような演算が行われていきます。ここでN×とされているのがモジュールの繰り返しの数で、本文中では6と言及されています。
Encoderでは二つのサブレイヤー(sub layers)があり、それぞれResNet[2015]と同様にresidual connection(残差のモジュール)が用いられています。このconnectionを容易にするために生成するアウトプットの次元はd_{model}=512とモデルの全てのレイヤーで統一するとされています。
また、DecoderではEncoderの二つのモジュールに加えて三つ目のサブレイヤーを追加したとされています。

 

2-2. Scaled Dot-Prouct AttentionとMulti-Head Attention
"Scaled Dot-Prouct Attention"と"Multi-Head Attention"に関してそれぞれ3.2.1と3.2.2でまとまっています。

f:id:lib-arts:20190506212253p:plain
上記がそれぞれの処理を表す図です。
ここでまず気になるのがQ,K,Vに関してですが、唐突にquery、key、valueが出てきてわからなくなるところです。こちらについてはおそらく推測ですが、memoryから云々の記述も見受けられるので、"Key-Value Memory Networks"の話ではないかと思われます。

[1606.03126] Key-Value Memory Networks for Directly Reading Documents
要出典ですが、google-researchのBERTのリポジトリはイシューに上がる不具合などを除いて基本的に正確な実装をしてくれていると思うので、詳細はこちらを読み解く方が早そうです。

GitHub - google-research/bert: TensorFlow code and pre-trained models for BERT
ちなみに、BERTのモデル構造(model architecture)の実装についてはmodelling.pyのBertModelで行なっており、これをたどるとTransformerの中身も確認できます。

f:id:lib-arts:20190508101535p:plain

https://github.com/google-research/bert/blob/master/modeling.py

上記のモデル構造(model architecture)の実装では、BertModel->transformer_model->attention_layerの流れでブレイクダウンしているので、読み解く際にはその辺を意識すると良いかと思います。
詳細の仕組みについては論文だけ読んで解釈するだと間違える恐れもあるので、別記事で実装を読み解きながら解説できればと思います。


2-3. 位置情報とPositional Encoding
Transformerは注意機構(attention mechanism)をベースにしたモデルであるため、位置情報を何かしらの形で取り扱う必要があります。この位置情報をPositional EncodingとしてImput Embeddingに加えることについて論文の3.5の"Positional Encoding"で言及されています。

f:id:lib-arts:20190508102848p:plain
上記の数式を元にsinusoidal(sine curve)を用いたとあるのですが、文字の定義などを読み解くのに苦戦しそうだったため、実装の解読の際にこちらも取り扱えればと思います。Positional Encoding自体は性能気にしなければいかようにも作れそう(たとえば、1hot Vectorのようなエンコーディングでも次元数までであれば作ることができます)なので、一旦流しの理解でも十分そうです。

 

3. まとめ
#5ではTransformerの元の論文である"Attention Is All You Need"について取り扱いました。
細部の読み解きにあたって解釈のズレの恐れがありそうだったので、#6以降ではBERTの実装を読み解きながらこれまでの話を振り返っていければと思います。