李宏毅——transformer
導讀
什麼是transformer:
對於序列,常用的是RNN
RNN的問題,不容易並行處理。
所以有人提出了,用CNN來替代RNN。
圖中每一個三角形代表一個filter。
但是CNN只能考慮有限的信息,比如圖中只有三個,這種可以通過上層的疊加來考慮更多的信息。
這種的好處是可以並行化,但是缺點是要疊很多層,才能看到長期的諮詢。
所以的做法是self-attention
它也可以輸入是sequence,輸出是sequence,它可以看到整個輸入的序列,也可以同時計算。
self-attention
首先出現在attention is all you need
是如何做平行化的呢?
multi-head self-attention
mult-head的優點是不同的head可以關注不同的信息,每個head各司其職
順序問題
對self-attention來說,輸入的次序是不重要的
原paper中,使用人工設置的positional vector ei
也可以在xi上append一個one-hot的vector,但是實際的效果是一樣的。
Wp可以學習,但是實際上也是手工設置的
如下圖
seq2seq with attention
seq2seq由encoder和decoder組成
其中的RNN可以由self-attention取代
具體思想可參考動畫
transformer
網絡架構
attention visualization
下面的head只考慮臨近的關係,上面的考慮更多遠的關係
例子
基本上可以用seq2seq的都可以用transformer
比如從文章集合中生成wikipedia
universal transformer
在深度上做RNN,每一層都是一樣的transformer
transformer最早用在文字上,現在也可以用在圖像上