# 自然語言處理 03:Attention ###### tags: `NLP` ## 1. Attention ### 1-1. 改良 Encoder seq2seq 的問題是不管輸入內容長度為何,也會轉換成相同長度的向量,換句話說,即使輸入 100 個字也只會轉換成固定長度的向量,導致資料會從向量中溢出。所以如果可以徹底運用各個時刻的隱藏層向量,就可保留字詞所有資訊。  ### 1-2. 改良 Decoder 傳統 Decoder 只會接收最後隱藏層狀態,為了要徹底運用改良 Encoder 後各個時刻的隱藏層向量,並從中選出必要的資料,因此要想辦法計算代表各單字重要度的權重 a。  接著從代表各單字重要度的權重 a 與各個字詞的隱藏層向量 hs,計算出加權總和,獲得目標量量,  a 的算法則是將 LSTM 產生的隱藏層權重 h 拿去和 hs 內積,來計算兩個向量的相似程度,   這種做法就是 Attention,得出的結果為輸入的每個詞和輸出的每個詞的依賴關係。 ## 2. self attention 在一個時間序列資料中,關注自己序列中的其他元素,從中獲得上下文資訊。徹底解決傳統 RNN 無法平行計算的問題。 將輸入序列 $I$ 裡頭的每個位置的向量 $i$ 透過 3 個線性轉換分別變成 3 個向量:$q$、$k$ 和 $v$,並將每個位置的 $q$ 拿去跟序列中其他位置的 $k$ 做匹配,算出匹配程度後利用 softmax 層取得介於 0 到 1 之間的權重值,並以此權重跟每個位置的 v 作加權平均,最後取得該位置的輸出向量 $o$。全部位置的輸出向量可以同時平行計算,最後輸出序列 $O$。 **多數以 RNN 做過的研究,都可以用自注意力機制來取代;多數用 Seq2Seq 架構實現過的應用,也都可以用 Transformer 來替換** ## 3. Multi head attention 多頭注意力機制(Multi-head Attention)是將輸入序列中的每個位置的 $q$、$k$ 和 $v$ 切割成多個 $q_i$、$k_i$ 和 $v_i$ 再分別各自進行注意力機制。各自處理完以後把所有結果串接並視情況降維。這樣的好處是能讓各個 head 各司其職,學會關注序列中不同位置在不同 representaton spaces 的資訊。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up