終末 A.I.

データいじりや機械学習するエンジニアのブログ

Deep Learning で使われてる attention ってやつを調べてみた

先週 Skip-Thought Vectors について調べてみたわけですが、その中でよく何を言っているのかよく分かっていなかった、 attention mechanism について調べてみました。 調べるにあたって、最近のDeep Learning (NLP) 界隈におけるAttention事情 が大変参考になりました。ありがとうございます。

まず attention 、特にエンコーダーデコーダーモデルにおける attention について簡単に説明すると、入力情報全体ではなく、その一部のみを特にフォーカスしたベクトルをデコーダーで使用する仕組みのことです。そのことにより、デコードの特定のタイミングにだけ必要になる入力情報を精度よく出力に反映させることができるようになります。

これだけでは何のことかちょっと分かりにくいので、Neural machine translation by jointly learning to align and translate を例に説明していきたいと思います。この論文は、Neural Machine Translation という Neural Network を利用して翻訳タスクを行う分野の論文ですが、最近その分野でも著しい成果を出しているエンコーダ・デコーダーモデルでの翻訳処理に、attention を導入することによって、翻訳前の文章が長文であっても精度よく翻訳処理が行えるようにしたという成果を紹介しています。

通常のエンコーダ・デコーダモデルでは、エンコーダの出力は一つしかデコーダでは使用されません。それをどのように用いるかは手法によりけりですが、この方法では、入力文の情報を特定のサイズのベクトルにまとめる必要があり、長文になればなるほど元の情報の圧縮精度が悪くなってしまいます。

一方、attention を用いたモデルでは、エンコーダーの隠れ層のうち、特定の入力単語やその周辺の単語にフォーカスしたベクトルをデコーダで用います。これにより、デコーダのある時点で必要な情報にフォーカスして使用することができ、入力文の長さに関係なくデコードを効率よく行うことができます。attention の利用方法も手法によりけりですが、すべてのベクトルを重み付けして利用する global attention や特定のベクトルのみを用いる local attention と呼ばれる方法に分けている提案もあります。

上記の論文では、長文での翻訳精度が上昇したでけでなく、alignment と呼ばれる機械翻訳分野で、翻訳前の文と翻訳語の文の対照関係を分析する処理でも有用な結果を生成することができているようです。

個人的には、エンコーダで生成するベクトルに十分な長さがあれば特に問題なく似たような状況を学習できそうな気もするのですが、なかなかそれではうまくいったりしないものなんでしょうか。

参考文献