有人说,不同语言之间的翻译,与其说是一门科学,不如说是一门艺术。
NLP 领域的机器学习工程师 Riccardo Di Sipio 日前提出了一个观点:使用卷积网络要比使用循环神经网络来做 NLP 研究,要幸福得多——是时候放弃循环神经网络了!
基于这一观点,他从卷积网络本身的基本原理出发,论述了为什么 NLP 不再需要循环神经网络的原因。
我们来看:
不久前,人工智能科学家侯世达(Douglas Hofstadter) 就在 The Atlantic 上发表的一篇论文中指出,目前机器翻译尚处于「浅薄」的阶段。
文章阅读地址:https://www.theatlantic.com/technology/archive/2018/01/the-shallowness-of-google-translate/551570/
尽管机器翻译存在局限性,但难以否认的是,自动翻译软件在许多情况下都有良好的效果,而其背后的技术在任何存在信息从一个领域流动到另一个领域的语境中都具有广泛的应用,例如基因组学中从 RNA 到蛋白质编码的翻译过程。
直到 2015年,序列到序列的映射(或者说翻译)使用的主要方法都是循环神经网络,特别是长短期记忆(LSTM)网络。
我在前一篇文章中介绍了这些网络架构的基础知识,我还谈到了 LSTM 被应用于大型强子对撞机的顶部夸克对衰变的运动学重建过程。这篇文章链接如下:
然后,出现了一些新的方法:比如残差网路架构和注意力机制的提出,为针对这类任务的更通用的框架的实现铺平了道路。
值得一提的是,这些新颖的网路架构还解决了另一个问题:事实上,由于 RNN 固有的时序性,很难利用这种网络在像 GPU 这样的并行系统上进行训练。而这一点正是卷积神经网络使用起来非常方便的地方。
在数学中,卷积表示的是当函数 f 作用于另一个函数 g 时生成第三个函数的一种运算:
此运算不应与调制(例如 AM 传输中的 EM 信号)混淆,调制是将两个函数简单相乘。求知欲强的人可能会深究到:时间空间中的卷积傅里叶变换,实质上是频率空间中的调制,即:
所以这两种运算虽然密切相关,但切不可被混淆。
在计算机科学的离散世界中,积分被求和取代,两函数之间的乘法由矩阵间的乘法代替。用行话来说,就是将卷积核应用到图像上来生成卷积特征,一次卷积将生成一个新的特征。在下面每一对图像中,当对左边部分发生一次卷积变换,将于右边部分产生一个新的值,如下图所示:
在对这个序列的操作中,图像(灰色矩阵)由一个卷积核(橙色矩阵)卷积操作以获得卷积特征(绿色矩阵)。
通常来说,卷积核是一个网络的权值矩阵,必须通过某种算法(如:反向传播)计算,才能得到它的期望输出。
这种操作的一个很好并且非常重要的特性是,一旦「图片」被加载到记忆中,不同的卷积核会对其进行操作,这样就可以减少输入/输出(I/O)次数,从而更好地利用带宽。通常,卷积操作由以下两种方式执行:
降维:这正是上图中的例子,例如将 4x4 图像被 2x2 卷积核降维至 3x3 图像,这称为有效填充。
维数保持不变:在这种情况下,在使用卷积核之前,原始图像用其周围的零来进行填充。例如,一个 4x4 图像被填充到5x5 矩阵中,然后被一个 2x2 卷积核核进行卷积操作后缩小为4x4 图像(原大小)。这称为相同的填充。
在卷积之后,通常会进行池化操作:在每个卷积块中,只将最大值传递到下一层。此操作用于降低图片维数以及过滤噪声。降维的关键是通过信息压缩来寻找更高水平的特征。
常用的做法是,通过将上述两个步骤的板块链合在一起,来构建一个卷积神经网络。一些成功的网络架构案例如下:
AlexNet(2012):该网络共包含 8 层;其中前 5 层是卷积层,其中一部分卷积层后面连着最大池化层,最后 3 层为全连接层。这个网络利用 ReLU 而不是 tanh 或 sigmoid 作为激活函数。
VGGNet(2014):顾名思义,这是一个非常深的卷积网络,它一共包括 16 层。与 AlexNet 类似,它仅有 3x3 卷积核,但有许多滤波器。它是目前用于从图像中提取特征的最为主流的方法。
GoogLeNet(2014):这个网络的灵感来源于较为久远的 LeNet,但在其基础上又利用了 Inception 模块。在引入它之前,CNN 只是通过将卷积层叠得越来越深来实现。为说明在相似图像中信息可以在不同尺度范围内传播,该网络在同一层上使用几种不同大小的卷积核(如:1x1、3x3、5x5…),然后将它们的输出连接,再把九个类似上述的模块堆叠起来。由于深度网络受到梯度消失问题的影响,更新的实现使用的是残差网络架构。
ResNet(2015):残差神经网络具有显著的批量标准化(Batch Normalization)和跳跃连接特征。跳跃连接指的是网络中的信息通过跳过某些层走捷径。这里的「技巧」是通过残差块获得的。另外一种类似于残差网络架构的方法被称为高速公路网络(Highway Networks)。
既然现在我们已经了解了卷积神经网络的基本知识,那么让我们回到最原始的问题:我们如何使用这样的网络代替循环网络来解析序列呢?
注意力机制背后的主要观点是,网络应该找出输入序列的哪些部分或元素与生给定的输出序列元素具有更强的相关性。它通过为每个输入元素创建一个注意力权重向量(权重介于 0 和 1 之间,通过 Softmax 产生),并使用它们来调整信息流。如果我们首先关注基于 RNN 的网络,这将变得更容易理解。
对于每个输入元素(时间阶),RNN 层会存储一个隐藏状态。所以对于 N 个输入将会有 N 个隐藏状态。此时,我们可以通过简单地让注意力权重和隐藏状态逐个元素相乘(也就是哈达玛积)。来生成剩下文向量:
例如,当翻译一个句子时,两种语言的专有名词都是一样的,因此相应的权重会非常大(例如 0.95)。相邻单词的权重很可能也是比较大的(例如 0.55),而相距较远的单词权重则较小(例如 0.05)。
最后,信息被压缩成一个注意力向量,并传递到下一层:
在解码阶段,则回为每个输入的词计算上下文向量。
现在我们基本掌握和理解了关于如何在机器翻译中摆脱 RNN 网络的所有要素。
Transformer 网络利用注意力机制,但这次使用的是前馈网络。
首先,输入序列被嵌入(即被编码成 N 维空间中的一个数字)向量作为补充,该向量跟踪每个单词相对于彼此的初始位置。现在我们有了序列中所有单词( K)和一个给定单词( Q)的向量表示。
根据这些材料,我们可以像以前那样计算出注意力权重(d_k 代表了维度,它是一个标准化因子):
这个注意力权重决定了其他每个单词对于给定单词的翻译结果的贡献程度。
将这些权重作用于待翻译的给定序列(值V)的过程称为缩放的点积注意力( Scaled Dot-Product Attention)。
多头注意力是一种注意力机制的合并方式,被用来将 Q、K 和 V 线性映射到不同维度的空间中。其思想是,不同的映射可以分别从不同方面突出信息编码的方式。其中映射是通过将 Q、K 和 V 乘以训练过程中学习到的矩阵 W 来实现的。
最后值得一提的损失,在论文《Attention Augmented Convolutional Networks》中,作者提出了一种具有多头注意力机制的 CNN ,该论文链接如下:
而以上,便是为什么我们不再需要循环神经网络的原因~
via: https://medium.com/swlh/attention-please-forget-about-recurrent-neural-networks-8d8c9047e117 雷锋网AI 科技评论编译。 雷锋网雷锋网