株式会社SOARIGでエンジニアをしている、Elleryです。 今回は、Attention Is All You Needの論文を読んだので、まとめてみました。
Attention Is All You Needとは
「Attention Is All You Need」は、人工知能を勉強する上では避けては通れない「Transformer」という仕組みを提案した論文です。
それまで、自然言語処理分野で確固たる地位を築いていた、再帰構造(RNN)や畳み込み構造(CNN)を完全に排除し、Attention機構のみに基づいたアーキテクチャで従来のモデルの精度を大幅に更新し、大きく注目を集めました。
また、Transformerはその便利さから現在では自然言語処理の分野を飛び出し、様々な分野で活用されるアーキテクチャとなっています。
今回は、そのTransformerの中核部分である、Attention機構について解説していきたいと思います。
Attentionとは
Attentionは日本語だと、「注意機構」と訳されるように、「重要な情報に注意を向けさせる」というアルゴリズムになります。
例えば、「私は人工知能です。」という文章を「I am an artificial intelligence.」という文章に翻訳するときに、「I」という単語を推論するときは、「私」という単語に「注意」を向けさせ、「artificial intelligence」という単語を推論するときは「人工知能」という単語に「注意」を向けさせるといった具合です。
上記は推論時のベクトルの重み(各単語の関係)を矢印で表現した図になります。
「I」という単語と「私」という単語は他の単語に比べて、より強く紐づいており、「artificial」という単語も同様に「人工知能」という単語と強く紐づいています。
注意を向けさせるというのは、そのベクトルの重みを大きくするということであり、このベクトルの重み(矢印の太さ)を学習するのがAttentionというアーキテクチャになります。
Attentionのアーキテクチャ
Attentionのインプットは、モデルの順伝播として流れてくる値とEncoderから出力されたmemoryと言われる値です。そして、Attentionの最終目的は入ってきたmemoryに対して適切なweightを掛け算して、推論すべき値(input)に対する「注意」を向けさせることです。
適切なweightをどのように求めるかというと、inputとmemoryの内積を計算することで求めます。ベクトルの内積は、2つのベクトルがどれだけ同じ方向を向いているかを計算するものなので、inputとmemoryの内積の計算はこの2つのベクトルの「類似度」を計算することに当たります。このように計算したweightは必然的に、推論すべき値と類似しているmemoryのベクトルに対するものが大きくなるので、このweightとmemoryを掛け算することによって、より正確な「注意」を向けさせる事ができるのです。
Self-Attention(自己注意機構)
最初に紹介したAttentionは「memory」と「input」と2つの入力を必要とするアーキテクチャになっていましたが、Self-Attentionは外部のデータを必要とせず、1つのインプットのみで完結するアーキテクチャになります。
従来のAttentionでは、どこに注意を向けるかというのは、外部のデータに大きく依存していたのに対し、Self-Attentionでは外部のデータに依存せず自分自身のデータのみでどこに注意を向けるかというのをコントロールできるようになっているというのが大きな変更点になります。
Source Target-Attention
最後に、Transformer内で使用されている、Source Target-Attentionについて紹介します。
Source Target-Attentionは、「input」と「memory」の2つの入力を必要とするアーキテクチャで、入力されたデータをAffineレイヤで変換を行ってから、重みを計算するという、最初に紹介したAttentionを拡張した構造になっています。
まとめ
今回は、「Attention Is All You Need」を読んだので、その中核部分であるAttention機構について解説してきました。ここまで解説した以外にも論文内では、マスクの話やスケーリングに関しての話、Multi-Head Attentionに関しての話などもあるのですが、複雑になるので割愛いたしました。どれも、精度に関わる重要な話なので、気になる方は論文のほうに目を通していただければと思います。