wisteria2gp / DataScience_survey

0 stars 0 forks source link

Attention Is All You Need #9

Open wisteria2gp opened 4 years ago

wisteria2gp commented 4 years ago

一言でいうと

いわずとしれたTransformerの提案論文 既存のattention機構を応用し、RNNなしで時系列データを取り扱うモデルを提案した。

~また、それに際してAttentionに分類を与えているようである。 Self-Attention Scaled Dot-Product Attention Multi-Head Attention あたりも提案したことになるのかな?~

だんだんわかってきた 個人的なポイントは次のあたり

  1. Non RNN (&CNN)な時系列モデルを提案
  2. Self-Attentionの考案とSource Target-Attentionとの分離
  3. Multi-head Attentionの考案

+αその他種々の技法の提案

論文リンク

https://arxiv.org/abs/1706.03762

著者/所属機関

Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Lukasz Kaiser, Illia Polosukhin

投稿日付(yyyy/MM/dd)

2017/06/27

概要

Transformerの提案

新規性・差分

手法

実装するのでキーワードだけでも列挙しておく


Source Target-Attention

基本のAttentionのイメージで、2つの入力がinput(query)とmemory(key,value)に分けられる。 queryとkeyの演算からattention_weighをとり、それを用いてvalueから情報を抜き出す。 意味的にはmemoryから抜き取る情報を各時間(単語)それぞれで位置の対応(単語の照応)まできめて取る。

Self-Attention

さきのinput,memoryを1入力で行う。したがって入力自身で、どの時間(単語)がどの時間(単語)を参照するかをきめてとる感じ。

Multi-head Attention

(Self-)Attentionに用いることができる改善手法。 もとのAttentionのかわりにquery,key,valueを一律にhead数(本論文では8)で分割してそれぞれでAttentionさせた後concatする。 実装的にはquery,key,valueを隠れ層次元が head x 分割後dim となるようにDenseレイヤで変換した後、headで分割して処理する。

Scaled Dot-production

attention_weightの算出においてsoftmaxはqとkのlogitが大きくなるとサチるらしく、それを緩和するためにlogitが大きくならないよう、query,keyの次元で正規化する。

Mask

参照してほしくない値のattention_weightを0にするためにかける。 attention_weightはSoftmaxの出力なので、Maskする値を-∞にすると無視することができる。 Maskするならすべてこの処理をすれば良いので対象の行列と同じ形状で値の型をboolにしたものをattention_maskとする。 対象となるのはPADやDecoderの未来の情報参照。

Hopping

Self-Attentionを繰り返し重ねることを指す?みためAttentionでやる残差結合。

Position-wise Feedforward Network

HopのあとにFFNを挟む。

FFN は2層で、第一層の次元は hidden_dim * 4 で ReLU, 第二層の次元は hidden_dim で Linear な activation function をもちます。

LayerNormalization

まぁ...そうなるな。TransformerはLayer派らしい。

ResidualNormalizationWrapper

Layer Normalization, Dropout, Residual Connectionの併用

Positional Encoding

Transformerは各時間入力(単語)の順序を学習に用いることができない。 それを緩和するために位置を示した行列を添加する。 詳しくは検索して


結果

コメント

どうもこいつの登場以降、こいつを軸にして発展したモデルファミリーがあり、それらは俗に「Transformers」と呼ばれているようだ。

NLPには、本論文のターゲットである翻訳タスク以外にも文書分類やQ&Aなど様々なタスクが有り、多くのモデルが、構造を微調整するだけでタスクを跨ぐ事ができるようになっている。こうした状況を踏まえ、現在の深層学習での学習アプローチは次の二段階で行われるのがメジャーである。

  1. タスクに跨った有用な表現を教師なしで獲得する「事前学習」
  2. 事前学習をもとに、タスク用に再学習させる「微調整(fine-tuning)」 ここで、1で行うのは一般的な言語モデルの目的関数をもとにした学習である。具体的には「文中の隠された単語の予測」や「渡されたペア文が連続するものであるかの予測」などが行われるようである(Word2Vecの規模が大きくなったイメージか)。

事前学習には主に2種のアプローチがあるらしい。

  1. Feature-base approach
  2. Fine-tuning approach

(あまり理解していないので話半分で読んでほしいが) 1はLSTMベースのELMoで使われている(自己回帰型事前学習?)。2はGenerative Pre-trained Transformer(GPT)というTransformerベースのモデルで使用されている(自己符号化型事前学習?)。そしてBERTは2に対応する(Transfoormerベース)。

さきに言及したTransformersはおそらくここらへんで分けられていて、Transformerベースのモデルがそれに当たる。Ex. Transformer-XLBERT

しかしながら、BERTの弱点を克服するとして提案されたXLNetは自己回帰モデルを使いつつ...という内容でTransformersに分けられている節があるので、もうなんか勝手に言った人の勝ちなのかもしれない。

とにかく、ここで出てきた論文についてもいずれ扱いたい。

参考

BERTを超えたXLNetの紹介

作って理解する Transformer / Attention