Attention與SelfAttention

iSherryZhang發表於2023-03-17

Seq2Seq + Attention

Seq2Seq模型,有一個Encoder和一個Decoder,預設認為Encoder的輸出狀態h_m包含整個句子的資訊,作為Decoder的輸入狀態s_0完成整個文字生成過程。這有一個嚴重的問題就是,最後的狀態不能記住長序列,也就是會遺忘資訊,那麼Decoder也就無法獲得此資訊。

用傳統的Seq2Seq模型,當句子長度超過20個單詞是,BLEU Score(機器翻譯評價指標)就會下降;但是如果用上Attention,就會如下圖紅色曲線一樣,即使輸入序列很長也能保持較高的準確率。

使用Attention解決機器翻譯的原文為:Bahdanau, Cho, & Bengio, Neural machine translation by jointly learning to align and translate. In ICLR, 2015.

Attention能夠極大提升Seq2Seq模型的準確率;用了Attention,Decoder每次更新狀態的時候都會看一下Encoder的所有狀態,這樣子就不會遺忘了;Attention還可以告訴Decoder應該關注Encoder的哪個狀態,這就是Attention名字的由來。Attention有一個極大的缺點是,計算量很大。

  • Attention tremendously improves Seq2Seq model
  • With attention, Seq2Seq model does not forget source input
  • With attention, the decoder knows where to focus
  • Downside: much more computation

Attention的原理

Attention使用\(c_i\)整合\(h_1, h_2, ..., h_m\)的資訊,因此Attention機制可以解決LSTM遺忘的問題。

\(c_0 = \alpha_1h_1 + \alpha_2h_2 + ... + \alpha_mh_m\),其中,\(\alpha_i\)表示\(h_i\)\(s_0\)的相關性,稱為權重。

相關性的計算方法有兩種:

  • 方法一(Used in the original paper)

\(h_i\)\(s_0\)的相關性,將\(h_i\)\(s_0\)進行Concatenate,然後乘一個引數矩陣\(W\),結果進行\(tanh\)約束到(-1, 1)之間,然後再乘以一個\(v^T\),並對得到的結果進行Softmax處理。

  • 方法二(more popular,the same to Transformer)

\(h_i\)\(s_0\)的相關性,分為三步進行計算:

  1. Linear maps
    • \(k_i = W_K · h_i\)
    • \(q_0 = W_Q · s_0\)
  2. Inner product
    • \(\widetilde{\alpha_i} = k^T_{i}q_0\)
  3. Normalization
    • \([\alpha_1, ..., \alpha_m] = Softmax([\widetilde{\alpha_1}, ... \widetilde{\alpha_m}])\)

計算得到\(c_0\)後,將\(A'\)的三個輸入進行concatenate,作為輸入得到狀態\(s_1\)。每一個狀態\(s_i\)對應一個Context向量\(c_i\)來表示\(s_i\)\(H\)的相關性。

假設Encoder有m步,Decoder有t步,就需要計算mt次權重,每次權重計算都要計算m個\(\alpha\)的值。所以,Attention的時間複雜度是mt,也就是Encoder和Decoder狀態數量的乘積。

Attention在機器翻譯任務的視覺化,可以看到Decoder與Encoder的每個狀態都相關,但是會重點關注某個或某些狀態。

Summary

優點:

  • Standard Seq2Seq model:decoder只關注其當前狀態
  • Attention:decoder還會關注encoders的所有狀態解決遺忘問題並且告訴decoder哪裡需要重點關注

缺點:高時間複雜度(假設源序列的長度為m,目標序列的長度是t)

  • Standard Seq2Seq:\(O(m + t)\)
  • Seq2Seq + attention:\(O(mt)\)

Self Attention

之前RNN裡面,使用\(h_4\)\(x_5\)計算得到\(h_5\),使用self-attention機制,當前狀態\(h_5\)的計算依賴由\(h_4\)變為\(c_4\)\(c_4 = \alpha_1h_1 + \alpha_2h_2 + \alpha_3h_3 + \alpha_4h_4\),其中,\(\alpha_i\)計算的是\(h_4\)\(h_i\)之間的相關性,計算方式前面已經講過。因為這裡會計算自己與自己的相關性,因此稱為self-attention。

  • SimpleRNN與Attention當前狀態計算對比

SimpleRNN狀態\(h_5\)的計算:

\(h_5 = tanh(A·{x_5\brack h_4} + b)\)

Self-Attention狀態\(h_5\)的計算:

\(h_5 = tanh(A·{x_5\brack c_4} + b)\)

Reference

王樹森的Attention機制講解

相關文章