李宏毅——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最早用在文字上,现在也可以用在图像上