去掉了 RNN 和 CNN ,直接用 encoder 和 decoder 的层与层之间直接使用 attention 机制,优点在于不需要 long-dependency 句子中的单词 dependency 长度最多只有1,减少了信息传输路径。 这种方式直接可以挖掘句子内部单词与单词的语义组合关系,将其作为一个语义整体,使得翻译时更好地利用单词组合甚至是短语的信息,更好地 decode 出语义匹配的目标语言单词。
muilti-head attention, 将输入向量切成8份, 这每一份可以看成一个local partial, 分别attention,最终再concat成一个context向量,如果将multi-head attention 的输入切成八分后的向量类比关注不同local paritial 的卷积核的话,CNN和multi-head attention 异曲同工。
CNN 和 RNN 都是一个特征融合过程,得到一个符合当前需要的 context
RNN:建模语言的时序特征,前面的单词依次 feed 到后面的单词,在 decoder 阶段对每个单词对应的 encoder 输出位置做 attention ,但每个encoder 输出包含了前面单词的信息。前面单词信息往后传,走的路径很长,存在 long dependency 问题,LSTM/GRU 一定程度上能解决。
CNN:
利用卷积的感受野 receptive field,通过堆叠卷积层扩大每个 encoder 输出位置所覆盖单词的范围,每个单词走的路径大概是logk(n)步,缩短了 dependency 的长度。
局部权重共享的local connect, local connect 有多个核,随着学习收敛,feature map 的信息熵达到最大,此时可假设每个核关注的特征相互正交,进一步推出相关值最高的 local partial 也互不重复。
在本文模型基础上,往 encode 的 multi-head attention 前加一层 convolution 是否有意义。
attention encode 的 context 和 cnn 后再 attention 的差别是没有引入时序关系, CNN 的 local partial 要比 multi-head 大一点,因为多了一个 window,CNN 时序的引入也在这里,这种时序关系强调了local dependency。attention encode 引入了position embedding,相当于cnn text 分类时,输入每个 token 加上position embedding后 self attention加权组合成分类结果,CNN for mnist,每个像素点加上二维坐标embedding。position embedding能帮助 attention 向量的 sum 过程保留时序语义,但在计算 attention weight的时候没办法根据 local dependency 决定 attention paritial,因为每个 token 都是独立计算weight。当前模型加一层cnn会不会更好,具体取决于decode 的每个词对于encode的local dependency依赖有多大,对local dependency依赖大的话,CNN更好。