一、CNN网络
相比于全连接网络,卷积神经网络最大的特点在于具有局部连接(Locally Connected)和权值共享(Weight Sharing)的特性。
1.1 卷积核与卷积操作
1.2 步长与填充
1.3 池化
以上关于CNN的基础概念和技术就不赘述了。
1.4 面向序列的卷积操作
面向序列的卷积操作中,卷积核只在序列这一维度上移动,用来捕捉连续的多个词之间的特征。
二、基于CNN的翻译建模
2.1 ConvS2S模型
ConvS2S 模型是一种高并行的序列到序列的神经计算模型。该模型利用卷积神经网络分别对源语言端与目标语言端的序列进行特征提取,并使用注意力机制来捕获两个序列之间映射关系。
相比于基于多层循环神经网络的 GNMT 模型,其主要优势在于每一层的网络计算是完全并行化的,避免了循环神经网络中计算顺序对时序的依赖。同时,利用多层卷积神经网络的层级结构可以有效地捕捉序列不同位置之间的依赖。即使是远距离依赖,也可以通过若干层卷积单元进行有效的捕捉,而且其信息传递的路径相比循环神经网络更短。
除此之外,模型同时使用门控线性单元、残差网络和位置编码等技术来进一步提升模型性能,达到了和 GNMT 模型相媲美的翻译性能,同时大大缩短了训练时间。
2.2 模型模块介绍
ConvS2S 模型模块组成:位置编码(Position Embedding)、卷积层、门控线性单元(GLU/Gated Linear Units)、残差链接(Residual Connection)、多跳注意力机制(Multi-step Attention/Multi-hop Attention)
2.2.1 位置编码(Position Embedding)
位置编码(Position Embedding):结构图中绿色部分,源语言端词嵌入部分,帮助模型获得词位置(即词序)信息。
该模型的位置编码 p = {p1,...,pm},其中pi 的维度大小为 d,一般和词嵌入维度相等,其中数值作为网络可学习的参数。简单来说, pi 是一个可学习的参数向量,对应位置 i 的编码。
编码的作用就是对位置信息进行表示,不同序列中的相同位置都对应一个唯一的位置编码向量。之后将词嵌入矩阵和位置编码进行相加,得到模型的输入序列 e = {w1 +p1,...,wm +pm}。
2.2.2 卷积层与门控线性单元(GLU)
在 ConvS2S 模型中,编码器和解码器分别使用堆叠的门控CNN对源语言和目标语言序列进行建模,在传统CNN的基础上引入了门控线性单元GLU,通过门控机制对卷积输出进行控制。
结构图中黄色背景框是卷积模块,这里使用GLU作为非线性函数,研究表明这种非线性函数更适合于序列建模任务。实际中为了更好地捕获句子信息,通常使用多层卷积的叠加。
2.2.3 残差连接(Residual Connection)
残差连接是一种训练深层网络的技术,即在多层神经网络之间通过增加直接连接的方式,从而将底层信息直接传递给上层,能够有效提高深层网络的信息传递效率。
在 ConvS2S 中残差连接主要应用于门控卷积神经网络和多跳自注意力机制中,
比如在编码器的多层门控卷积神经网络中,在每一层的输入和输出之间增加残差连
接。
2.2.4 多跳注意力机制(Multi-step Attention/Multi-hop Attention)
在 ConvS2S 模型中,解码器同样采用堆叠的多层门控卷积网络来对目标语言进行序列建模。区别于编码器,解码器在每一层卷积网络之后引入了注意力机制,用来参考源语言信息。 ConvS2S 选用了点乘注意力,并且通过类似残差连接的方式将注意力操作的输入与输出同时作用于下一层计算,称为多跳注意力。
结构图中蓝色框内部展示了基于多跳结构的注意力机制模块。
与循环网络中的注意力机制相比,该机制能够帮助模型甄别已经考虑了哪些先前的输入。也就是说,多跳的注意力机制会考虑模型之前更关注哪些单词,并且之后层中执行多次注意力的"跳跃"。
2.2.5 训练与推断
ConvS2S 模型使用了 Nesterov 加速梯度下降法 (Nesterov Accelerated Gradient,NAG),动量累计的系数设置为 0.99,当梯度范数超过 0.1 时重新进行规范化。
ConvS2S 模型中设置学习率为 0.25,每当模型在校验集上的困惑度不再下降时,便在每轮的训练后将学习率降低一个数量级,直至学习率小于一定的阈值(如0.0004)。
ConvS2S 模型中也使用了 Dropout方法。除了在词嵌入层和解码器输出层应用 Dropout 外,还对卷积块的输入层应用了 Dropout。
2.3 局部模型的改进
为了进一步提升计算效率,降低参数量,一些研究人员提出深度可分离卷积(Depthwise Separable Convolution),将空间维度和通道间的信息交互分离成深度卷积(Depthwise Convolution,也叫逐通道卷积)和逐点卷积(Pointwise Convolution)两部分。
除了直接将深度可分离卷积应用到神经机器翻译中,研究人员提出使用更高效的轻量卷积(Lightweight Convolution)和动态卷积(Dynamic Convolution)来进行不同词之间的特征提取。
2.2.1 深度可分离卷积(Depthwise Separable Convolution)
深度可分离卷积由深度卷积和逐点卷积两部分结合而成。
标准卷积中每个输出元素需要考虑卷积核尺度内所有词的所有特征,参数量相对较多。深度卷积只考虑不同词之间的依赖性,而不考虑不同通道之间的关系,相当于使用 O 个卷积核逐个通道对不同的词进行卷积操作。逐点卷积只考虑不同通道之间的依赖性,而不考虑不同词之间的依赖。换句话说,逐点卷积对每个词表示做了一次线性变换。
2.2.2 轻量卷积和动态卷积
一些研究提出了轻量卷积和动态卷积,用来替换注意力机制,并将其应用于基于自注意力机制的模型中。
a.轻量卷积
从形式上来看,深度卷积和注意力机制很类似,区别在于注意力机制考虑了序列全局上下文信息,权重来自于当前位置对其他位置的"注意力",而深度卷积中仅考虑了局部的上下文信息,权重采用了在不同通道上独立的固定参数。
为了进一步降低参数量,轻量卷积共享了部分通道的卷积参数。通过共享,可以将参数量压缩到 Ka,其中压缩比例为d/a(a 为压缩后保留的共享通道数)。
b.动态卷积
动态卷积,旨在不增加网络深度和宽度的情况下来增强模型的表示能力,其思想就是根据输入来动态地生成卷积参数。
在轻量卷积中,模型使用的卷积参数是静态的,与序列位置无关,维度大小为K ×a;而在动态卷积中,为了增强模型的表示能力,卷积参数来自于当前位置输入的变换。通过这种方式,模型可以根据不同位置的表示来确定如何关注其他位置信息的"权重",更好地提取序列信息。