传统的embedding,将词向量空间映射到d维
编码器+解码器--多层cnn,卷积核的大小k,参数规模为kd * 2d,其中kd为每一次卷积的输入矩阵大小(kd),2d为输出矩阵大小(2d)即两维列向量 [A, B]
-
非线性--门控结构 gated linear units(GLM)
其中,sigma是门控函数,操作符是点积
-
残差连接
每一层(block)之间都是残差连接
-
输出
decoder的最后一层卷积层的最后一个单元输出经过一层fc和softmax得到下一个目标词的概率
multi-step attention
attention接在encoder和decoder之间,其中h是decoder的output,z是最后一层encoder的output(注意这里与rnn不同,不存在state),e是input embedding。最终计算得到权重a,而attention输入用的是encoder输出与原始input embedding之和,输出c表征了上下文的注意力特征,c与h相加,构建了最后的decoder输出h。
如此,在每一个卷积层都会进行 attention 的操作,得到的结果输入到下一层卷积层,这就是多跳注意机制multi-hop attention。这样做的好处是使得模型在得到下一个主意时,能够考虑到之前的已经注意过的词。
RNN 模型的突出优势,是很好地解决了长距离依赖的难题。Facebook 这篇论文之所以轰动,是因为他们使用了 CNN 卷积模型,来取代 RNN 循环模型。不仅精度超越循环模型,而且训练速度提高了 9 倍。
引自paperweekly:
CNN 比 RNN 的训练速度快,这一点容易理解,没有争议。卷积比循环的训练速度快,这是由两个因素造成的必然结果。
卷积可以并行处理,而循环只能按顺序依次处理。在云计算平台上,让多个机器同时并行训练卷积模型,速度当然比串行训练循环模型来得快。
可以用 GPU 芯片来加速卷积模型的训练,而暂时还没有硬件能够加速 RNN 的训练。
有争议之处,在于精度的高下,究竟是取决于 CNN vs RNN 模型的不同,还是取决于解码技术,尤其是解码器的关键技术 attention 的改进?
个人认为,卷积(convolution)的层层抽象,与循环(recurrency)的三重门,其实是异曲同工。虽然手段不同,但是目的都是忽略次要内容,传承重要内容。所以,在精度方面,卷积与循环不会有太大差距。
Facebook translate 与 Google translate 的精度差异,应该来自于 Facebook translate 对于 attention 的改进。
Facebook 研究组,对 attention 做了改进,体现在两点。
Google Translate 的解码器使用的是单层的 LSTM 模型,相应地,attention 也是单层的。Facebook 的解码器使用的是 CNN 模型,是多层的。相应地,Facebook 的 attention 是多跳的(multi-hop)。越是底层的 attention,越聚焦,细节越丰富。越是高层的 attention,视野越开阔,抽象程度越高,越能抓住文章主旨。
Google Translate 使用的 attention,依赖于编码器生成的语义向量,而不依赖于输入的原生态的词向量。而 Facebook 的 attention,对语义向量和原生态词向量兼收并取。语义向量负责把握主旨,保证解码器的输出不偏题。原生态词向量关注措辞,保障解码器的输出用词得当。