Shoichi-Hasegawa0628 / summary_paper

0 stars 0 forks source link

Attention Is All You Need #49

Closed Shoichi-Hasegawa0628 closed 1 year ago

Shoichi-Hasegawa0628 commented 1 year ago

https://arxiv.org/abs/1706.03762

Shoichi-Hasegawa0628 commented 1 year ago

理解のまとめ 系列データを扱うEncoder-DecoderモデルのTransformerを提案した論文

構成要素  - Multi-Head Attention:RNNの問題を解決した立役者  - Residual Connection:NNの層を深くするためのテクニック  - Layer Normalization:次の層への伝播する値を正規化 (学習が早く収束するために)  - Feedforward Network:全結合層,活性化関数にはGERU関数 (RELU関数を滑らかにしたようなやつ)

Shoichi-Hasegawa0628 commented 1 year ago

そもそもAttention Mechanism (注意機構)って何?
(p128〜p131 (IT Text 自然言語処理の基礎)) 系列変換モデルにおいて、 エンコーダが作成した特徴ベクトル列Hをデコーダ側に受け渡す手法.

デコーダが出した特徴量zjをエンコーダ側の特徴ベクトル列Hで再構成

(以下を仮定した注意機構の説明)

以下の式でz_j_hatは計算される z_j_hat = Ha a = softmax(a') a' = H^T z_j (a, a'はI次元ベクトル)

おおまかな流れとして、

  1. 再構築したいベクトルz_jとHの内積でa'出す (内積は0だとベクトル同士が直交なので、値が大きいほどベクトル同士が関係のある性質を持つ. L2ノルム (2乗して平方根取ったやつ)で割るとコサイン類似度なので)

  2. a'をSoftmax関数に突っ込み、確率分布aを出力 (足したら1)

  3. 参照ベクトルHにaをかけてz_j_hat (重み付き平均)

→ 注意機構は参照先となるI個のベクトルh_iから、 再構成対象ベクトルz_j_hatの観点で、重要と思われるベクトルの選別処理

attention

Shoichi-Hasegawa0628 commented 1 year ago

自己注意機構 (Sele Attention Mechanism)ってなに? 「参照先として利用する特徴ベクトルのリスト」と「再構築したいベクトル」を同じ情報源とするので、セルフ! (さっきでいう、zとHが同じということ (正確には重みかけられてるから別の値))

(エンコーダ側の注意機構、以下を仮定)

h_i_hat = Ha a = softmax(a') a' = H^T h_i

あるベクトルの集合において、集合内の情報を相互に参照しながら、 新しい特徴ベクトルを構築することである。 (RNNやLSTMは直前の位置のベクトルのみ、最も関与するが、注意機構である位置のベクトルを合成するとき、離れた位置のベクトルも重みaで直接足す)

ただ、 参照ベクトルHの中にh_i (再構築したいベクトル)があるので、 同一ベクトル同士の内積は相対的に大きくなり、 Softmax通して重み付き和するとh_i = h_i_hatになるときがある。

回避するために、 QKV注意機構がある。 (自分自身を参照先に含むような注意機構)

Shoichi-Hasegawa0628 commented 1 year ago

QKV注意機構 (Query-Key-Value Attention Mechanism)ってなに? Transformerで使用される注意機構のこと。 (Scale Dot-Product Attention (QKV注意機構の自己注意版)とも書かれてる記事もあるが、QKV注意機構は何も自己注意機構限定というわけではない)

なぜクエリ、キー、バリューに分かれるのかは、 再構築したいベクトル (クエリ)があって、参考にしたいベクトル列 (キー)でどの程度考慮するかを内積取ってSoftmax関数で確率分布にし、 再構築するために参考にしたベクトル列の重み平均で構築しているということ。 それが、自己注意版になると、クエリもキーもバリューも情報源は同じベクトルになり、自分同士の内積が大きくならんように、重みWで別のベクトルにしてるってことかな?

(以下を仮定)

q_hat = Va a = softmax(a') a' = cK^T q c = 1 / sqrt(d) qkv

Shoichi-Hasegawa0628 commented 1 year ago

Multi-Head Attentionとは?  - Scale Dot-Product Attentionの拡張   - QKV注意機構を複数用いる   - 「ヘッド (head)」は注意機構そのもの指す。「ヘッド」の数をHで表すとき、H = 8なら8個の注意機構    おおまかな流れ

  1. 再構築したいベクトルの行数が512のとき、H = 8のとき、等分し、64行ずつに分ける (QもKもVも)
  2. 分割したやつをそれぞれのQKV注意機構にぶちこむ
  3. それぞれのQKV注意機構から出た再構築したベクトルを縦方向に連結し、線形変換 (重みW^O行列と積算)して、q_hat

QKV注意機構を並列に動かすのは、 複数の注意機構が別々の位置から情報を取得して、上手く混ぜ合わせることに期待しているから。 (注意機構で重み平均するときに、Softmax関数を一回通しているが、 Softmax関数はベクトルをネイピア数にぶちこんで、正規化してるので、 僅かな差が大きな差に転じる (指数なので). 注意機構が1つだけだと、値が偏る可能性がある) multi_head

 

Shoichi-Hasegawa0628 commented 1 year ago

Scale Dot-Product Attentionとは? 自己注意機構の一種。 キー・バリュー方式のデータベースが存在し,そのデータベースにクエリで問い合わせする処理に由来.

Scale Dot-Productは、 類似度計算にコサイン類似度を使っていることが由来 https://qiita.com/norihitoishida/items/2fead107792b504eaccf#:~:text=Attention%E3%81%AE%E5%88%86%E9%A1%9E%20(1)%20Compatibility%20function%20(%E9%A1%9E%E4%BC%BC%E5%BA%A6%E8%A8%88%E7%AE%97

なので、 「QKV注意機構の自己注意版で、類似度計算にScale Dot-Productを使用する注意機構」ということ。

q_j = W^Q h_i K = W^K H V = W^V H

Q_hat = VA A = softmax(cK^T Q)