iT邦幫忙

2021 iThome 鐵人賽

DAY 21
3
AI & Data

AI Voice Conversion系列 第 21

【Day21】 Transformer 新手包 (一)

  • 分享至 

  • xImage
  •  

為什麼 Transformer ?

  • 回顧 LSTM 與 CNN ,在一開始處理 time-sequence 這類問題的時候,我們都知道要用 RNN 這類的模型來處理,也知道這樣子做不好平行處理,通常都算很慢,於是就有人用 CNN 的方式來解決,讓每一個 filter 輸入當 sequence 的一小段,輸出一個內積得到的值,不同的 filter 就是對應 sequence 中不同的部分,但是這樣做的話變成每個 filter 的內容是有限的,所以你會常常看到有人再加大 fliter 增加 respective-filed 來試圖解決這個問題,或是疊很多很多層來讓整個模型可以考慮更多過去的訊息 (因為上層的 filter 會把下層的 filter 的輸出當作輸入),但這樣子的做的話是必然要疊得很深才可以得到跟 RNN 一樣的長的 sequence length ,比較容易出現一些問題,也較難訓練。

於是這世界就出現了一個大能發明了 Transformer 這種可以有 RNN 的特性以及超快的訓練速度與不輸(甚至更好)的準度。

注意力機制

注意力機制的由來 - Seq2Seq 模型

  • Seq2Seq 模型這種模型包含兩部分,Encoder 和 Decoder,最一開始是拿來做翻譯的,比方說丟一句中文進去給 Encoder, Encoder 會把輸入轉換成機器能理解的 context vector,最後再透過 Decoder 轉換成我們能理解的英文輸出。

  • 在注意力機制出現之前,這種模型(Encoder 和 Decoder)幾乎都是用 RNN 來實作的,你也可以從上圖發現到如果要得到一段 context vector 給 Decoder 的話,你必須把整段 sequence 都看過一次才生的出來,可以很直覺想像的到,這樣一段 context vector 並不能很完整的把原本的資訊給打包起來,尤其是當 sequence 很長的情況下更是如此,而解決這種問題的方法就稱作注意力機制。

  • 注意力機制說白了就是把中間所有的 hidden_state 都提出來給 Decoder 看,然後讓 Decoder 決定哪段需要多注意一點 (就是權重高一點),用注意力機制更改一下上面的圖,它看起來應該會像這樣。

該怎麼算注意力機制

數字跟英文我都懂,但湊起來怎摸就看不懂了

我們假設現在有辦法取得各個 Encoder 跟 Decoder 的 hidden_state,其中:

Encoder 的 hidden_state 定義為 h_s
Decoder 的 hidden_state 定義為 h_t

前面有提到要讓 Decoder 決定哪段需要多注意一點,具體的做法就是要算一個權重

  • Step_1:

    選一個 attention function 來計算當前 h_t 對每一個 h_s 的相關程度,這個 function 常見的算法像是 dot product,這邊就先叫它 score(h_t,h_s)

  • Step_2:

    計算 attention weight,就是用 softmax 把 score 轉成 probability distribution

  • Step_3:
    把上面的 alpha_ts 與加權平均所有的 h_s 結合成一個 "context vector"

  • Step_4:
    將 "context vector" 與 h_t 結合成一個 "attention vector" 並作為該時間點的輸出

這個 "attention vector" 也會是下一個時間點的輸入

而之所以被稱為權重,是因為 "attention vector" 它是可以被訓練的,訓練過後的權重值可以讓當下的 Decoder 知道哪個 Encoder 的 hidden_state 比較重要,並依此從它們身上取得上下文資訊。

注意力機制 VS "自"注意力機制

(Seq2Seq + 注意力機制) 看起來水平很高,但其實還是有地方可以更好,那就是我們需要平行運算才可以更快,而"自"注意力機制就克服了 RNN 不能平行運算的問題,比較下兩個的差異。

注意力機制:

    Decoder 在生成輸出時關注 Encoder 的輸出,從中獲得上下文資訊

"自"注意力機制:

    Encoder 在生成輸入時關注"自己"序列中的其他元素,從中獲得上下文資訊
    Decoder 在生成輸出時關注"自己"序列中的其他元素,從中獲得上下文資訊

下面做的事情,跟上面的概念上是一樣的,最後 Attention Is All You Need 的論文作者們用 "自"注意力機制加上注意力機制打造了一個完全不用 RNN 的 Seq2Seq 模型,下面這張圖就是一個非常簡化的 Transformer,Encoder 跟 Decoder 各自利用"自"注意力機制關注自己處理的 sequence,變成是可以平行運算的。

最後我們的 Transformer 的真面目就是 (Seq2Seq + 注意力機制 +"自"注意力機制)

小結

今天我們簡單的介紹了一部分的 Transformer,後面還有很多細節要說明 (努力理解中),最後祝大家中秋愉快 XD。

參考資料

淺談神經機器翻譯 & 用 Transformer 與 TensorFlow 2 英翻中

/images/emoticon/emoticon09.gif/images/emoticon/emoticon13.gif/images/emoticon/emoticon14.gif/images/emoticon/emoticon22.gif/images/emoticon/emoticon28.gif


上一篇
【Day20】 WavenetGan, BidirectionalLSTMGAN, WaveGan 鋼琴音樂生成
下一篇
【Day22】 Transformer 新手包 (二)
系列文
AI Voice Conversion30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言