Convolutional Encoder
Convolutional Encoder 是基于卷积层的模型,与循环神经网络计算受时间依赖性约束不同,Convolutional Encoder能够实现同时编码。
非循环编码器的一个简单基准是Ranzato提到的池化模型,即将K个连续词的词嵌入进行简单的平均。除了输入中的单词彼此接近之外,平均单词嵌入不会表达位置信息。因此,引入位置嵌入来对句子中每个词的绝对位置进行编码。因此,源语句中的每个嵌入e_j都包含一个位置嵌入l_j和一个词嵌入w_j。与循环编码器类似,注意力分数a_ij从池化表示z_j中计算得到,条件输入c_i是嵌入e_j的加权和:
池化的一个直接扩展是学习卷积神经网络(CNN)中的核。编码器的输出z_j包含一个固定大小的上下文信息,取决于核的宽度k,但所需的上下文宽度可能会变化。这可以通过堆叠几层卷积和非线性来解决:额外的层增加了总的上下文大小,而非线性可以根据需要调节上下文的有效大小。例如,用内核宽度k=3堆叠5个卷积会产生11个字的输入域,即每个输出取决于11个输入字,非线性允许编码器利用全部输入域,或根据需要集中于较少的字。为了便于深度编码器的学习,将每个卷积的输入的残差连接添加到输出,然后将非线性激活函数应用到输出。多层CNN是通过将几个区块堆叠在一起构建的。CNN不包含通常用于下采样的池化层,也就是说,在网络应用后,保留完整的源序列长度。与池化模型类似,卷积编码器使用位置嵌入法。
最后的编码器由两个堆叠的卷积网络组成(图7)。CNN-a生成编码器输出z_j来计算注意力分数a_i,而解码器的条件输入c_i是通过CNN-c的输出相加来计算的:
图7. 带有单层卷积编码器网络的神经机器翻译模型。CNN-a在左边,CNN-c在右边。没有显示嵌入层
当前 SOTA!平台收录 Convolutional Encoder共 1 个模型实现资源。
项目 | SOTA!平台项目详情页 |
Convolutional Encoder | 前往SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/convolutional-encoder |