5-7-3 Self-Attention と Source-Target Attention

前の章では、Attentionが、長い流れの中で、今必要な情報を見失わないための仕組みであることを見てきました。
でも、Attentionとひとことで言っても、実は「どこに注目するのか」にはいくつかの種類があります。

たとえば図書館で本を探すときにも、いま読んでいる本の中を見返すこともあれば、別の棚にある資料を見に行くこともありますよね。
Attention もそれと似ています。
今見ている情報の同じ系列の中に注目する場合もあれば、別の系列に注目する場合もある。
その違いが、Self-AttentionとSource-Target Attentionです。

Self-Attention

Self-Attentionは、同じ系列の中にある情報どうしの関係を見るAttentionです。
やさしく言うと、今読んでいる文の中で、どの言葉がどの言葉に関係しているかを見る仕組みです。

たとえば、こんな文を考えてみましょう。

彼女が読んでいた本は、とても面白かった。

このとき「面白かった」の内容を理解するには、少し前に出てきた「本」が大事ですよね。
Self-Attentionでは、文の中のある単語を理解するときに、同じ文の中のほかの単語へ目を向けて、どの語が関係しているか、どの語を強く見るべきかを決めます。
つまりSelf-Attentionは、文の中の単語どうしが、お互いに見合う仕組みなのです。

図書館のたとえで言えば、いま読んでいる一冊の本の中で、前のページや後ろのページを見返しながら意味をつかむ感じに近いです。

Source-Target Attention

一方、Source-Target Attentionは、出力側が、入力側を見に行くAttentionです。
これはEncoder-Decoder Attention と呼ばれることもあります。

・Source→ 入力側の系列
・Target→ 出力側の系列

たとえば、英文を日本語にする翻訳なら、

・Source = 英語文
・Target = 日本語文

になります。
日本語の一語を出力するとき、その語に対応する英語のどの部分が大事かを見に行く。これがSource-Target Attentionです。

たとえば、

I love this town.

私は この町が 好きです

と訳すとき、「町」と出力する場面では、英語文の中のtownに強く注目したいですよね。
つまりSource-Target Attentionでは、出力を作るたびに、入力の中の関係ある場所を参照するのです。

図書館でいえば、自分が今書いているノートの一文に合わせて、別の本の必要なページを見に行くようなものです。

クエリ、キー、バリュー

Attention を説明するとき、よく出てくるのが

・クエリ(Query)
・キー(Key)
・バリュー(Value)

です。
ここが急に難しく感じやすいところなのですが、図書館のたとえで考えるとわかりやすいです。

クエリ

クエリは、今、何を知りたいのかという問いです。

たとえば、あなたが図書館で「主人公がどんな気持ちだったか知りたい」と思ったとします。
この「知りたいこと」がクエリです。

キー

キーは、どの情報がその問いに関係しそうかを見分けるための手がかりです。
本のタイトル、章の見出し、キーワード、しおり。そうした「探すための目印」がキーです。

バリュー

バリューは、実際に取り出したい中身の情報です。
見つけたページに書いてある本文そのもの。これがバリューです。

まとめ

Attention では、

・クエリ→ 何を知りたいか
・キー→ それを探すための目印
・バリュー→ 実際に取り出す中身

という役割分担があります。
そして、クエリとキーを比べて「どの情報が今の問いに合っていそうか」を決め、その重みに応じてバリューを受け取る。
これがAttentionの基本的な流れです。

たとえば文の中で「彼」という語を理解するとき、

・クエリ→ 「彼」が誰か知りたい
・キー→ 文中の人名や関係する語
・バリュー→ その人に関する情報

という感じで考えるとわかりやすいです。

Multi-Head Attention

Multi-Head Attentionを見てみましょう。
これは、Attentionを、一つの見方だけでなく、複数の視点で同時に行う仕組みです。
たとえば文章を読むとき、私たちは一つのことだけを見ているわけではありません。

・誰が主語か
・どの言葉がどの言葉にかかっているか
・感情の流れはどうか
・時間の順序はどうか

など、いくつもの視点で文を見ていますよね。
Multi-Head Attentionもそれに似ています。
一つのAttentionだけだと、「この関係だけを見る」という一つの注目の仕方になりやすい。
でもMulti-Head Attentionでは、複数の“頭”がそれぞれ別の見方で注目します。
つまり、

・ある head は主語と述語の関係を見る
・別の head は遠く離れた語のつながりを見る
・さらに別の head は文全体の流れを見る

というように、いろいろな角度から同時に意味を捉えることができるのです。

図書館のたとえで言えば、一人の司書さんだけでなく、複数の司書さんがそれぞれ

・人名から探す人
・時代背景から探す人
・感情表現から探す人

として同時に本を探してくれる感じです。

まとめ

Self-Attention→ 同じ系列の中で、大事な部分どうしの関係を見る仕組み

Source-Target Attention→ 出力するときに、入力系列の中の大事な場所を見る仕組み

クエリ→ 今、何を知りたいか

キー→ どこが関係しそうかを見分ける手がかり

バリュー→ 実際に取り出す情報

Multi-Head Attention→ 一つではなく、複数の視点で同時に注目する仕組み

next ▶ Transformerとは何か