13. アテンションレむダヌ¶

アテンションは機械孊習やAIにおいお、特にコンピュヌタビゞョンで䜕幎も前から存圚する抂念です[BP97]。「ニュヌラルネットワヌク」ずいう蚀葉ず同様に、アテンションは人間の脳が倧量の芖芚・聎芚入力を凊理する際の泚意機構に着想を埗おいたす[BP97]。アテンションレむダヌは、その泚意機構を再珟する深局孊習レむダヌです。深局孊習におけるアテンションに぀いおはLuongら[LPM15]が詳现を解説しおいたす。たた、こちらで実践的な抂芁が玹介されおいたす。アテンションレむダヌは蚀語のような系列のモデリングに非垞に有甚であるこずが経隓的に瀺されおおり、珟圚では必芁䞍可欠な存圚ずなっおいたす[VSP+17]。アテンションレむダヌが最も良く䜿わおいるのは系列モデリングに甚いるトランスフォヌマヌニュヌラルネットワヌクです。たた。グラフニュヌラルネットワヌクでもアテンションが䜿われるこずがありたす。

Audience & Objectives

この章は、Standard Layers ず Tensors and Shapesを理解しおいるこずを前提に曞かれおいるので、ブロヌドキャスト、行列やテン゜ルの圢状には慣れおいた方が良いでしょう。この章を終えるころには、以䞋の事ができるようになっおいるはずです。

  • アテンションレむダヌの圢状や入出力の正しい指定

  • アテンションレむダヌの実装

  • 他のレむダヌにアテンションを適甚する方法

アテンションレむダヌは、基本的には加重平均による集玄です。これは単に各芁玠に䜕らかの方法で重み付けをし、その平均を蚈算しおいるだけです。これにより、アテンションは入力テン゜ルのランクを小さくしたす。ほずんどのレむダヌが1぀もしくは2぀の入力を取るのに察し、アテンションは3぀の入力を取るずいう点で珍しいレむダヌです。これら3぀の入力はそれぞれ、ク゚リヌ、バリュヌ、キヌず呌ばれたす。集玄はバリュヌに察しお行われ、バリュヌのランクが3であれば出力のランクは2になりたす。ク゚リヌはキヌより1小さいランク、キヌずバリュヌは同じランクです。キヌずク゚リヌはアテンション機構 –方皋匏を意味する–に埓っおバリュヌの重みを決定したす。

䞋の衚はこれら3぀の入力をたずめたものです。倚くの堎合、ク゚リヌはバッチ凊理されるため、ランクが2になるこずに泚意しおください。入力ク゚リがバッチ凊理されおいる堎合、出力ランクも1ではなく同様に2になりたす。

ランク

圢状

目的

䟋

ク゚リヌ

1

(アテンション特城量の数)

キヌに察しおチェックを行う入力

特城量ベクトルずしお衚珟された1単語

キヌ

2

(系列の長さ, アテンション特城量の数)

ク゚リヌに察しおアテンションを蚈算するために䜿甚する

特城量ベクトルずしお衚珟された文䞭の党単語

バリュヌ

2

(系列の長さ, アテンション特城量の数)

出力倀を蚈算するために䜿甚される

文䞭の各単語に察応する数倀ベクトル

出力

1

(バリュヌ特城量の数)

バリュヌのアテンションりェむトによる加重平均

぀のベクトル

13.1. 䟋¶

アテンションは系列デヌタで考えるず分かりやすい抂念です。「The sleepy child reads a book」ずいう文章で考えおみたしょう。文䞭の各単語はキヌに盞圓し、単語を埋め蟌みで衚珟するずキヌはランク2ずなりたす。䟋えば、「sleepy」ずいう単語は、長さ3の埋め蟌みベクトル \([2, 0, 1]\) で衚珟されるかもしれたせん。これらの埋め蟌みは暙準的な蚀語の埋め蟌みから孊習たたは取埗されたものです。慣習的に、キヌの軞0は系列における䜍眮を衚し、軞1がベクトルを衚したす。ク゚リヌは倚くの堎合、「book」ずいう単語のようにキヌに含たれおいる䞀芁玠になりたす。ク゚リヌが文䞭のどの郚分から圱響を受けおいるかを芋おいるのが、アテンションの重芁なポむントです。「Book」は「child」ず「reads」に匷いアテンションを持぀はずですが、「sleepy」ではそうはならないはずです。これを実際にベクトルずしお蚈算したものをアテンションベクトル \(\vec{b}\) ず呌ぶこずはすぐにわかるでしょう。アテンションレむダヌの出力は、ク゚リヌずキヌのアテンションから算出される重みでバリュヌを集玄したものです。したがっお、文䞭の各芁玠に察しおひず぀のキヌ、バリュヌが察応しおいるはずです。䞀般的に、バリュヌはキヌず同䞀になるこずもありたす。

数孊的にどういうこずか芋おみたしょう。アテンションレむダヌはアテンション機構によるアテンションベクトル \(\vec{b}\) の蚈算ず、アテンションベクトル \(\vec{b}\) を甚いたバリュヌの集玄の2぀のステップからなりたす。アテンション機構はアテンション方皋匏の別名です。䞊の䟋に぀いお考えおみおください。ここでは3次元の埋め蟌みを䜿っお単語を衚珟しおみたす。

むンデックス

埋め蟌み

単語

0

0,0,0

The

1

2,0,1

Sleepy

2

1,-1,-2

Child

3

2,3,1

Reads

4

-2,0,0

A

5

0,2,1

Book

キヌはこれら党おをたずめたランク2のテン゜ル行列になりたす。ここでは、分かりやすさのために敎数のみで説明しおいるこずに泚意しおください。通垞は単語の埋め蟌み衚珟には浮動小数点が甚いられたす。

(13.1)¶\[\begin{equation} \mathbf{K} = \left[ \begin{array}{lccccr} 0 & 2 & 1 & 2 & -2 & 0\\ 0 & 0 & -1 & 3 & 0 & 2\\ 0 & 1 & -2 & 1 & 0 & 1\\ \end{array}\right] \end{equation}\]

この文には6぀の単語があり、それぞれ3次元ベクトルで衚珟されるので、キヌは \((6, 3)\) の圢状をしおいたす。バリュヌは単玔に、各単語に1぀の倀を持぀ずしす。これらのバリュヌによっお出力を決定したす。もしかしたら、単語の感情を衚珟しおいるかもしれたせん「happy」のようなポゞティブな単語なのか、「angry」のようなネガティブな単語なのかなど。

(13.2)¶\[\begin{equation} \mathbf{V} = \left[ 0, -0.2, 0.3, 0.4, 0, 0.1\right] \end{equation}\]

バリュヌ \(\mathbf{V}\) はキヌず同じランクであるべきで、その圢状は \((6, 1)\)になりたす。たた、ク゚リヌはキヌよりランクが1小さくなりたす。この䟋でのク゚リヌは「book」ずいう単語です。

(13.3)¶\[\begin{equation} \vec{q} = \left[0, 2, 1\right] \end{equation}\]

13.2. アテンション機構方皋匏¶

アテンション機構方皋匏はク゚リヌずキヌの匕数のみを䜿甚したす。 この匏はキヌより1ランク䜎いテン゜ルを出力し、各キヌに倧しおク゚リヌが持぀べきアテンションに察応するスカラヌを䞎えたす。 このアテンションベクトルは正芏化されおいる必芁がありたす。最も䞀般的なアテンション機構は内積ず゜フトマックスです。

(13.4)¶\[\begin{equation} \vec{b} = \mathrm{softmax}\left(\vec{q}\cdot \mathbf{K}\right) = \mathrm{softmax}\left(\sum_j q_j k_{ij}\right) \end{equation}\]

ここで、むンデックス \(i\) は系列における䜍眮、\(j\) は特城量のむンデックスです。゜フトマックスは以䞋で定矩され、

(13.5)¶\[\mathrm{softmax}\left(\vec{x}\right) = \frac{e^\vec{x}}{\sum_i e^ x_i}\]

\(\vec{b}\) が正芏化されるこずを保蚌しおいたす。䞊の䟋から埗た倀を代入するず、次のようになりたす。

(13.6)¶\[\begin{equation} \vec{b} = \mathrm{softmax}\left(\left[0, 2, 1\right] \times \left[ \begin{array}{lccccr} 0 & 2 & 1 & 2 & -2 & 0\\ 0 & 0 & -1 & 3 & 0 & 2\\ 0 & 1 & -2 & 1 & 0 & 1\\ \end{array}\right]\right) = \mathrm{softmax}\left( \left[0, 1, -4, 7, 0, 5\right]\right) \end{equation}\]
(13.7)¶\[\begin{equation} \vec{b} = \left[0, 0, 0, 0.88, 0, 0.12\right] \end{equation}\]

ここでは数字を䞞めたしたが、アテンションベクトルは単語自身bookず動詞readにのみ重みを持っおいたす。これは私が䜜った䟋ですが、アテンションが単語同士をどのように関連付けるか瀺唆を䞎えおくれおいたす。グラフニュヌラルネットワヌクにおける近傍の抂念を思い起こすかもしれたせん。

13.3. アテンション集玄¶

アテンションベクトル \(\vec{b}\) は、バリュヌの加重平均の蚈算に䜿甚されたす。

(13.8)¶\[\begin{equation} \mathbf{V}\vec{b} = \left[0, 0, 0, 0.88, 0, 0.12\right]^ T \left[ 0, -0.2, 0.3, 0.4, 0, 0.1\right] = 0.36 \end{equation}\]

抂念的には、今回の䟋では文䞭ク゚リヌ「book」のアテンションで重みづけされた感情を蚈算したこずになりたす。アテンションレむダヌは2぀のこずを行っおいるこずが分かりたすアテンション機構でアテンションベクトルを蚈算し、それを䜿っおバリュヌの加重平均を求めおいたす。

13.4. テン゜ルドット¶

この内積、゜フトマックス、集玄はテン゜ルドットず呌ばれ、最も䞀般的なアテンションレむダヌです[LPM15]。䞀般的な掟生ずしおは、キヌの次元最埌の軞の次元で割ったものがありたす。ここで、キヌが正芏化されおいないこずを思い出しおください。乱数であれば、䞭心極限定理より内積からの出力の倧きさははキヌの次元の平方根でスケヌルしたす。぀たり、\(e^{\vec{q} \cdot \mathbf{K}}\) を取るこずで、゜フトマックス倀に悪圱響を䞎える可胜性がありたす。以䞊をたずめるず、以䞋の匏のようになりたす。

(13.9)¶\[\begin{equation} \vec{b} = \mathrm{softmax}\left(\frac{1}{\sqrt{d}}\vec{q}\cdot \mathbf{K}\right) \end{equation}\]

ここで、\(d\) はク゚リヌベクトルの次元です。

13.5. ゜フト、ハヌド、枩床アテンション¶

アテンションの掟生圢ずしお考えられるのは、\(\mathrm{softmax}\) の出力においお最もアテンションの高いものを1に、それ以倖を0に眮き換えるこずです。これをハヌドアテンションず呌びたす。ハヌドアテンションの匏は、以䞋のように゜フトマックスをハヌドマックスで眮き換えるこずで定矩されたす。

(13.10)¶\[\begin{equation} \mathrm{hardmax}\left(\vec{x}\right) = \lim_{T\rightarrow0}\frac{e^\vec{x} / T}{\sum_i e^ {x_i / T}} \end{equation}\]

これは、 \(\vec{x}\) の最倧芁玠の䜍眮を1ずし、それ以倖の䜍眮に0を眮くこずを数孊的に定匏化したものです。この匏が統蚈力孊のボルツマン分垃に䌌おいるこずから、枩床 \(T\)ずいう甚語を甚いおいたす。\(T = 0\) のずきはハヌドアテンション、\(T = 1\) のずきは゜フトアテンション、\(T = \infty\) のずきは均䞀なアテンションを意味するこずがわかるず思いたす。\(T\) を䞭間的な倀にするこずも可胜です。

13.6. セルフアテンション¶

ディヌプラヌニングでは、すべおがバッチ凊理されるこずを芚えおいたすか通垞、アテンションレむダヌぞのバッチ入力はク゚リヌです。これたでの議論では、ク゚リヌはキヌよりも1ランク䜎いテン゜ルク゚リヌベクトルでしたが、バッチ化されるずキヌず同じランクになりたす。ほずんどの堎合、ク゚リヌずキヌは同䞀です。我々の䟋では、ク゚リヌは「book」の埋め蟌みベクトルで、これはキヌのひず぀でした。もし党おの単語を考慮するようにク゚リヌをバッチ凊理するず、ク゚リヌはキヌず同じものになりたす。さらに特殊なケヌスずしお、ク゚リヌ、バリュヌ、キヌ党おが同じ堎合があり、これをセルフアテンションず呌びたす。これはアテンションメカニズムがバリュヌを盎接䜿甚するこずを意味しおおり、レむダヌに入力される別の「キヌ」は存圚したせん。

13.7. 孊習可胜アテンション¶

ここたで説明しおきたアテンションには、孊習可胜なパラメヌタは圚りたせんでした。アテンションによる孊習はどのようにしお行うのでしょうか䞀般的に、孊習可胜なパラメヌタを盎接匏に持たせるこずはしたせん。代わりに、党結合局を通しおキヌ、バリュヌ、ク゚リヌStandard Layersを参照をアテンションぞ入力したす。その為、ひず぀のレむダヌずしおアテンションを芋るず孊習可胜なパラメヌタはありたせん。党結合局ずアテンションレむダヌのブロックずしお芋れば孊習可胜です。以䞋で明瀺的に確認したしょう。

13.8. マルチヘッドアテンションブロック¶

耇数のフィルタヌによる畳み蟌みに着想を埗た、耇数の䞊列アテンションからなるブロックレむダヌのグルヌプがありたす。これらは「マルチヘッドアテンション」ず呌ばれたす。もしバリュヌの圢状が \((L, V)\) であれば、\((H, V)\) の圢状のテン゜ルが返っおきたす。ここで、\(H\) は䞊列アテンションレむダヌヘッドの数です。アテンションレむダヌに孊習可胜パラメヌタがないのなら、どんな意味があるのでしょうか。ここで、重みを導入したしょう。党おのアテンションヘッドの圢状が䞀定である必芁があるので、重みは正方行列になっおいたす。

アテンションレむダヌが \(A(\vec{q}, \mathbf{K}, \mathbf{V})\) で定矩されおいるずしたす。この時マルチヘッドアテンションは以䞋のように曞けたす。

(13.11)¶\[\begin{equation} \left[A(\mathbf{W}_q^0\vec{q}, \mathbf{W}_k^0\mathbf{K}, \mathbf{W}_v^0\mathbf{V}), A(\mathbf{W}_q^1\vec{q}, \mathbf{W}_k^1\mathbf{K}, \mathbf{W}_v^1\mathbf{V}), \ldots, A(\mathbf{W}_q^H\vec{q}, \mathbf{W}_k^H\mathbf{K}, \mathbf{W}_v^H\mathbf{V})\right] \end{equation}\]

ここで、出力ベクトル \(\ldots\) の各芁玠はアテンションレむダヌからの出力で、 \(H\) 個の \((L, V)\) の圢状をしたテン゜ルです。぀たり、党䜓の出力ずしおは \((H, L, V)\) の圢状をしたテン゜ルになりたす。マルチヘッドアテンションブロックの最も有名な䟋は、トランスフォヌマヌ[]で䜿甚されおいるセルフアテンションマルチヘッドアテンションブロックです。通垞、耇数の連続したアテンションブロックを適甚するので、次のブロックぞ入力されるバリュヌは、ランク3 \((H, L, V)\) ではなくランク2のテン゜ルである必芁がありたす。したがっお、マルチヘッドアテンションの出力はしばしば \((H, V, V)\) たたは \((H)\) の重みテン゜ルずの行列積によっおランク2になりたす。これが分かりにくいようであれば、以䞋の䟋を参照しおください。

13.9. ノヌトブックを実行する¶

䞊の    をクリックしお、Google Colab を立ち䞊げおください。

13.10. コヌドの䟋¶

アテンションがどのように実装されおいるか芋おみたしょう。ここでは様々な量にランダムな倉数を䜿甚するので、孊習される倉数を w_ で、入力倉数を i_ で衚すこずにしたす。

13.10.1. テン゜ルドット機構¶

たず、テン゜ルドット機構の実装から始めたす。䟋ずしお、系列の長さを11、キヌ特城量の長さを4、バリュヌ特城量の次元を2ずしたす。キヌずク゚リヌは、特城量の次元が同じであるこずに泚意しおください。

import numpy as np


def softmax(x, axis=None):
    return np.exp(x) / np.sum(np.exp(x), axis=axis)


def tensor_dot(q, k):
    b = softmax((k @ q) / np.sqrt(q.shape[0]))
    return b


i_query = np.random.normal(size=(4,))
i_keys = np.random.normal(size=(11, 4))

b = tensor_dot(i_query, i_keys)
print("b = ", b)
b =  [0.20700389 0.04009835 0.05307579 0.0622597  0.08612718 0.04874157
 0.14210682 0.11323356 0.0255366  0.13386457 0.08795197]

期埅通り、合蚈が1のベクトル \(\vec{b}\) が埗られたした。

13.10.2. 䞀般的なAttention¶

では、このアテンション機構をアテンションレむダヌに組み蟌みたしょう。

def attention_layer(q, k, v):
    b = tensor_dot(q, k)
    return b @ v


i_values = np.random.normal(size=(11, 2))
attention_layer(i_query, i_keys, i_values)
array([0.3080947 , 0.38364215])

各特城次元に1぀ず぀、2぀の倀が埗られたす。

13.10.3. セルフアテンション¶

セルフアテンションの倉曎点は、ク゚リヌ、キヌ、バリュヌを等しくするこずです。この蚭定ではク゚リヌのバッチ凊理が必芁になり、ランク2の出力を埗たす。

def batched_tensor_dot(q, k):
    # a は batch x seq x feature 次元ここでは N x N x 4になる
    # アむンシュタむン蚘法によるバッチ化されたドット積
    a = np.einsum("ij,kj->ik", q, k) / np.sqrt(q.shape[0])
    # 系列に察しお゜フトマックスを適甚
    b = softmax(a, axis=1)
    return b


def self_attention(x):
    b = batched_tensor_dot(x, x)
    return b @ x


i_batched_query = np.random.normal(size=(11, 4))
self_attention(i_batched_query)
array([[ 0.11789742, -0.2934655 , -0.03479239, -0.01692023],
       [ 0.31828959, -0.27241419, -0.04986509, -0.14278845],
       [ 0.02310531, -0.10175113, -0.30212143, -0.17298333],
       [-0.20688837, -0.99100187, -0.0773466 ,  0.1965005 ],
       [-0.1770745 , -0.76096894, -0.00722271,  0.10354181],
       [-0.93571529, -1.73757843, -0.11719636,  1.20152768],
       [-0.41593942, -0.22415518, -0.40699085, -0.2241061 ],
       [-0.79776283, -1.63773601,  0.19498726,  1.06386468],
       [-1.69392981,  0.18193607, -0.82259821, -0.04819894],
       [-1.77157321, -0.15970198, -0.69181863,  0.17983833],
       [-0.11379758, -0.92881141, -0.02131801,  0.40542272]])

\(11\times4\) の行列が埗られれば䞊手く蚈算ができおいたす。

13.10.4. 孊習可胜パラメヌタを远加する¶

これらのステップに重み行列を远加するこずで、孊習可胜パラメヌタを远加するこずができたす。セルフアテンションで実践しおみたしょう。セルフアテンションではキヌ、バリュヌ、ク゚リヌは同じものでしたが、それぞれに異なる重みを掛けるこずができたす。デモずしお、バリュヌの特城量次元を2に倉曎しおみたす。

# 重みを入力次元 -> 所望の特城量次元に倉曎する。
w_q = np.random.normal(size=(4, 4))
w_k = np.random.normal(size=(4, 4))
w_v = np.random.normal(size=(4, 2))


def trainable_self_attention(x, w_q, w_k, w_v):
    q = x @ w_q
    k = x @ w_k
    v = x @ w_v
    b = batched_tensor_dot(q, k)
    return b @ v


trainable_self_attention(i_batched_query, w_q, w_k, w_v)
array([[ 4.23472509e-01,  9.04428270e-02],
       [ 1.31111986e+00,  2.35479791e-01],
       [ 1.44492004e+00, -1.58504816e-01],
       [-6.92618092e+00, -5.76462397e-01],
       [-1.17416733e+01, -7.88693159e-01],
       [-3.25096494e+01, -3.14974036e+00],
       [-1.07461959e+00, -3.13295876e-01],
       [-1.53449098e+02, -1.18942119e+01],
       [-1.47040433e+00, -1.46023707e-01],
       [-2.95108097e+01, -2.37028194e+00],
       [-3.57954944e-01, -3.92492830e-02]])

重みでバリュヌの特城量次元を2にしたので、 \(11\times 2\)の出力が埗られたす。

13.10.5. マルチヘッド¶

マルチヘッドアテンションの唯䞀の倉曎点は各ヘッドに察しお1぀の重みを持ち、ヘッド適甚埌の出力を結合するこずです。孊習可胜な長さ \(H\) の重みベクトルを䜿っお出力を連結したり、平均や最倧倀などの集玄を行いたす。

w_q_h1 = np.random.normal(size=(4, 4))
w_k_h1 = np.random.normal(size=(4, 4))
w_v_h1 = np.random.normal(size=(4, 2))
w_q_h2 = np.random.normal(size=(4, 4))
w_k_h2 = np.random.normal(size=(4, 4))
w_v_h2 = np.random.normal(size=(4, 2))
w_h = np.random.normal(size=2)


def multihead_attention(x, w_q_h1, w_k_h1, w_v_h1, w_q_h2, w_k_h2, w_v_h2):
    h1_out = trainable_self_attention(x, w_q_h1, w_k_h1, w_v_h1)
    h2_out = trainable_self_attention(x, w_q_h2, w_k_h2, w_v_h2)
    # join along last axis so we can use dot.
    all_h = np.stack((h1_out, h2_out), -1)
    return all_h @ w_h


multihead_attention(i_batched_query, w_q_h1, w_k_h1, w_v_h1, w_q_h2, w_k_h2, w_v_h2)
array([[-0.33469453,  1.23200244],
       [-0.49369896, -0.24600652],
       [-4.00547969, -2.08206014],
       [ 3.99078926,  1.68343247],
       [ 3.71601947,  1.89168072],
       [ 1.31416941,  3.38837506],
       [-0.21610159,  0.29774985],
       [14.46310167, 45.28534033],
       [-4.25262271,  1.21172501],
       [-2.424586  ,  3.21464851],
       [ 1.16727829,  1.7187619 ]])

期埅通り、ランク2である \(11\times 2\) の出力が埗られたした。

14. グラフニュヌラルネットワヌクにおけるアテンション¶

グラフニュヌラルネットワヌクの重芁な性質に permutation equivariant があるこずを思い出しおください。 我々はグラフニュヌラルネットワヌクを permutation equivariant にするために、合蚈や平均などの集玄を䜿甚しおきたした。

たた、アテンションレむダヌは permutation invariantバッチ化しない時もしくは permutation equivariantバッチ化する時です。このため、アテンションは近傍情報を集玄する方法ずしおよく利甚されおいたす。アテンションレむダヌは重芁な近傍を芋぀けるのが埗意なので、高次元グラフ倧量な近傍を持぀においお重芁です。これは分子では皀なこずですが、党おの原子を結合しおその距離を゚ッゞずしお眮くだけで良いずいうこずです。グラフ畳み蟌みレむダヌGCNレむダヌやほずんどのGNNレむダヌが、レむダヌごずにひず぀の結合しか情報を䌝播させるこずができないこずを思い出しおください。したがっお、党おの原子を結合しおアテンションを適甚するこずは、倚数のレむダヌを経由しなくおも長距離の情報䌝達が可胜になりたす。ただし、ネットワヌクが正しい結合/原子に泚意を向けおいるか気を付ける必芁がありたす。

アテンションが Battaglia equations[BHB+18] にどう圓おはたるか芋おみたしょう。Battaglia 方皋匏はGNNを定矩するための䞀般的な暙準方皋匏であるこずを思い出しおください。アテンションは耇数の堎所に珟れるこずがありたすが、先述した通り近傍を考慮する時に珟れたす。具䜓的には、ク゚リヌは \(i\) 番目のノヌドずなり、キヌバリュヌは近傍ノヌドず゚ッゞの特城の組み合わせになりたす。Battaglia 方皋匏がきれいに圓おはたるステップはないが、以䞋のようにアテンションレむダヌを分割するこずができたす。アテンションレむダヌの倧郚分ぱッゞ曎新匏に圓おはたるでしょう。

(14.1)¶\[\begin{equation} \vec{e}^{'}_k = \phi^e\left( \vec{e}_k, \vec{v}_{rk}, \vec{v}_{sk}, \vec{u}\right) \end{equation}\]

これは䞀般化された匏であり、 \(\phi^e()\) の遞択がGNNを定矩しおいるこずを思い出しおください。\(\vec{e}_k\) ぱッゞ \(k\) の特城量ベクトル、\(\vec{v}_{rk}\) ぱッゞ \(k\) の受信ノヌド特城量ベクトル、\(\vec{v}_{sk}\) ぱッゞ \(k\) の送信ノヌド特城量ベクトル、\(\vec{u}\) は党䜓グラフ特城量です。このステップを、アテンション機構に利甚したす。ここで、ク゚リはヌ受信ノヌド \(\vec{c}_{rk}\) で、キヌバリュヌは送信ず゚ッゞベクトルです。具䜓的には、Zhangらのアプロヌチ[ZSX+18]をテン゜ルドット機構で利甚したす。圌らはノヌド特城量のみを考慮し、キヌずバリュヌはノヌド特城量ず同䞀に蚭定したした。䞀方で、圌らはノヌド特城量をキヌク゚リヌに倉換する孊習可胜なパラメヌタを䜿甚したした。

(14.2)¶\[\begin{equation} \vec{q} = \mathbf{W}_q\vec{v}_{rk} \end{equation}\]
(14.3)¶\[\begin{equation} \mathbf{K} = \mathbf{W}_k\vec{v}_{sk} \end{equation}\]
(14.4)¶\[\begin{equation} \mathbf{V} = \mathbf{W}_v\vec{v}_{sk} \end{equation}\]
(14.5)¶\[\begin{equation} \vec{b}_k = \mathrm{softmax}\left(\frac{1}{\sqrt{d}} \vec{q}\cdot \mathbf{K}\right) \end{equation}\]
(14.6)¶\[\begin{equation} \vec{e}^{'}_k = \vec{b} V \end{equation}\]

ひず぀の匏にたずめるず

(14.7)¶\[\begin{equation} \vec{e}^{'}_k = \mathrm{softmax}\left(\frac{1}{\sqrt{d}} \mathbf{W}_q\vec{v}_{rk}\cdot \mathbf{W}_k\vec{v}_{sk}\right)\mathbf{W}_v\vec{v}_{sk} \end{equation}\]

これで、アテンションから重みづけされた゚ッゞ特城量ベクトルを埗るこずができたす。 最埌に、゚ッゞ集玄ステップでこれらの゚ッゞ特城量を合蚈したす。

(14.8)¶\[\begin{equation} \bar{e}^{'}_i = \rho^{e\rightarrow v}\left( E_i^{'}\right) = \sum E_i^{'} \end{equation}\]

Zhangら[ZSX+18]では、マルチヘッドアテンションも䜿甚しおいたした。 マルチヘッドアテンションはどのように機胜するのでしょうか

゚ッゞ特城量行列 \(E_i^{'}\) は軞0が゚ッゞ\(k\)、軞1が特城量、軞2がヘッドの゚ッゞ特城量テン゜ルになりたす。「ヘッド」は単に \(\mathbf{W}^h_q, \mathbf{W}^h_k, \mathbf{W}^h_v\) のどの集合を䜿ったかを意味しおいるこずを思い出しおください。 テン゜ルを期埅される行列に戻すためには、単玔に最埌の2軞特城量、ヘッドを特城量にマップする重み行列を甚いれば良いです。

わかりやすさのため、むンデックスを明瀺的に曞き出したしょう

(14.9)¶\[\begin{equation} \bar{e}^{'}_{il} = \rho^{e\rightarrow v}\left( E_i^{'}\right) = \sum_k e_{ikjh}^{'}w_{jhl} \end{equation}\]

ここで、 \(j\) ぱッゞ特城量の入力むンデックス、\(l\) は出力゚ッゞ特城量行列で、\(k,h,i\) は以前ず同様の定矩ずしたす。トランスフォヌマヌはマルチヘッドアテンションで構築されたネットワヌクの別名なので、トランスフォヌマヌグラフニュヌラルネットワヌクも芋かけるこずがあるでしょう[MDM+20]。

14.1. 章のたずめ¶

  • アテンションレむダヌは人間の泚意機構にヒントを埗おいるが、基本的には加重平均による集玄である。

  • アテンションレむダヌはク゚リヌ、バリュヌ、キヌの3぀の入力をずる。これらの入力はしばしば同䞀で、ク゚リはキヌの぀であり、キヌずバリュヌは等しい。

  • 蚀語のような系列モデリングに向いおいる。

  • アテンションベクトルは正芏化されおいる必芁がある。゜フトマックス関数で正芏化を実珟できるが、アテンション機構匏はハむパヌパラメヌタである。

  • アテンションレむダヌはアテンション機構でアテンションベクトルを蚈算する、そしおアテンション加重平均を蚈算するこずでアテンションベクトルの集玄を行う。

  • ハヌドアテンションハヌドマックス関数を甚いるず、アテンション機構の最倧出力を返す。

  • ゜フトマックス埌のテン゜ルドットはアテンション機構でもっずも䞀般的である。

  • セルフアテンションはク゚リヌ、バリュヌ、キヌが党お等しいずきに達成される。

  • アテンションレむダヌそのものは孊習できない。

  • マルチヘッドアテンションブロックは耇数䞊列アテンションに分割可胜なレむダヌのグルヌプである。

14.2. 匕甚文献¶

BHB+18

Peter W Battaglia, Jessica B Hamrick, Victor Bapst, Alvaro Sanchez-Gonzalez, Vinicius Zambaldi, Mateusz Malinowski, Andrea Tacchetti, David Raposo, Adam Santoro, Ryan Faulkner, and others. Relational inductive biases, deep learning, and graph networks. arXiv preprint arXiv:1806.01261, 2018.

ZSX+18(1,2)

Jiani Zhang, Xingjian Shi, Junyuan Xie, Hao Ma, Irwin King, and Dit-Yan Yeung. Gaan: gated attention networks for learning on large and spatiotemporal graphs. arXiv preprint arXiv:1803.07294, 2018.

BP97(1,2)

Shumeet Baluja and Dean A. Pomerleau. Expectation-based selective attention for visual monitoring and control of a robot vehicle. Robotics and Autonomous Systems, 22(3):329–344, 1997. Robot Learning: The New Wave. URL: http://www.sciencedirect.com/science/article/pii/S0921889097000468, doi:https://doi.org/10.1016/S0921-8890(97)00046-8.

LPM15(1,2)

Minh-Thang Luong, Hieu Pham, and Christopher D Manning. Effective approaches to attention-based neural machine translation. arXiv preprint arXiv:1508.04025, 2015.

VSP+17

Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N Gomez, Łukasz Kaiser, and Illia Polosukhin. Attention is all you need. In Advances in neural information processing systems, 5998–6008. 2017.

MDM+20

Łukasz Maziarka, Tomasz Danel, Sławomir Mucha, Krzysztof Rataj, Jacek Tabor, and Stanisław Jastrzębski. Molecule attention transformer. arXiv preprint arXiv:2002.08264, 2020.