自己注意
僕はかつて注意機構について、RNNをイメージして「過去の隠れ状態を取っておいて、それを元に注意強度を計算し…」と考えていたが、注意機構だけで成果を出したTransformerはRNNではないので、RNNを前提にしたメンタルモデルは間違い。 RNNを暗黙に想定していると「ソースターゲット注意」ではない「自己注意」の概念がピンとこなくなるので、一旦忘れる必要がある。
自己注意は自分自身をソースとターゲットにする。
Transformerのデコーダで使われている注意は自己注意は入力源がデコーダの下層レイヤから入力を受け取る
一切リカレントしないので「過去の隠れ層の値を取っておいて…」という古い「注意機構」の説明が頭に残ってると混乱するから忘れる必要がある
自分の下のレイヤーからの入力に対して注意機構を使うので、どちらかというとCNNの発展だと考えた方が素直
画像由来のCNNは「ある点に対する影響は周囲の点が強いだろう」「点の周囲の点からの影響は一定だろう」という想定で周囲の点から固定の重みによる畳み込みをする
そしてその畳み込みサイズは固定なわけだが自己注意機構はその対象を入力全体に広げる。不定長の入力になる。
なぜそれが可能かというと注意機構の一般的な仕組みとして、注意重みが入力の関数で決まる仕組みだから。固定の重み行列を持つCNNなどと違って入力の個数は任意で良い。