以下是最近看 "精通機器學習 (第二版)" 這本書第 16 章 Transformer 的筆記 :
- Google Brain 團隊的 Ashish Vaswani 等人於 2017 年發表了一篇開創性的論文 "Attention Is All You Need", 他們丟棄了 CNN 與 RNN, 提出了一個稱為 transformer 的結構, 這是一種以專注力機制 (attention mechanism, 即單詞的注意或關注程度的量化方法) 為基礎的 seq2seq 模型, 只使用專注機制加上 embedding 層, 稠密層, 與正規化層等組成的編碼解碼器結構即顯著改善了神經機器翻譯 (Neural Machine Translation) 的水準.
- Transformer 的基本結構是 encoder-decoder, 來源句會先經過 word embedding 與 positional encoding (位置編碼) 轉成外形為 [批次大小, 最大輸入句子長度] 的單詞 ID 張量, 然後送進堆疊 N 層的 multi-head attention 與前饋網路結構. 編碼器會將各個單詞編碼為 512 維表示法, 故編碼器的輸出是外形為 [批次大小, 最大輸入句子長度, 512] 的張量. 目標句同樣經過 word embedding 與 positional encoding (位置編碼) 轉成單詞 ID 張量, 然後送進堆疊 N 層的 masked multi-head attention 與 multi-head attention, 以及前饋網路, 每一層裡的 multi-head attention 層也接收來自編碼器的最終輸出, 這 N 層經過最後的 softmax 層後輸出一個外形為 [批次大小, 最大輸入句子長度, 詞彙表長度] 的機率張量.
- 編碼器的 multi-head attention 層負責編碼來源句每個單字與句中其它單字的關係, 然後把注意力放在較相關的那個字上面 (稱為 self-attention, 句子本身的注意力). 解碼器中的 masked multi-head attention 層也做同樣的事, 但與 multi-head attention 不同之處是每個單字只關注在它前面的其它單字 (masked 的意思就是用一個遮罩來防止單字拿自己與它後面的單字做比較, 只能跟它前面的做比較). Multi-head attention 層並不考慮單字的順序或位置, 它只關注單字之間的關係, 而且其它層也都是時間分散的, 無法得知單字在句中位置, 這就是為什麼需要 position embedding (位置嵌入) 的原因, position embedding 是一個代表單字在句子中位置的稠密向量, 它會在輸入層被加入該單字的 word embedding 中 (即第 i 個 position embedding 會被直接加入第 i 個單字的 word embedding 中), 這樣模型就可以讀取各單字的位置了 (這些 position embedding 在模型中是可以學習的).
- Mult-head attention 層是由多個 Scaled dot-product attention 層組建而成的, 這些層用來查詢 (query) 單字的許多不同特徵, 透過公式計算單字串 Q (query) 與 K (key) 的相似度, 經過 softmax 轉換後再與 V (value) 做內積, Transformer 所使用的相似度指標是內積. 機器翻譯與資料庫的查詢動作類似, 但模型沒有一個明確的 key (鍵) 來查找, 它有的只是模型於訓練期間學習到概念之向量表示法, 解決辦法是計算 query 與字典的各個鍵之間的相似度, 然後用 softmax 將相似度轉成總和為 1 的權重. 在 TensorFlow 中 keras.layers.Attention 實作了 Scaled dot-product attention 層的功能.
- 單字表示法編碼了單字的許多不同特徵, 例如位置 (利用 position embedding) 與時態等等, 而 Mult-head attention 層裡面的多個 Scaled dot-product attention 層就是用來讓模型以不同方式透過縣性轉換將單字表示法投射到不同的子空間, 每一個投射都專注於一個單字特徵的子集合 (例如動詞, 過去式等), 查找 (query) 完畢後將所有結果組合起來再投射回原本的空間.
- NMT 領域的進展很快, 沒有人能預測明年會流行甚麼結構, 當今最流行的 NMT 結構是 transformer, 但未來也許 CNN 或 RNN 會捲土重來也說不定.
參考 :
沒有留言 :
張貼留言