1. 卷积神经网络 (CNNs)

CNN 是受生物启发的 MLP 变体,它利用图像中存在的空间局部相关性。感受野的生物学概念指出,视觉皮层包含复杂的细胞排列,这些细胞对覆盖视野的小的子区域敏感。 CNN 具有稀疏连接、共享权重和表示层次结构。堆叠多个层会导致下层学习低级特征,而上层学习高层次表征。使用生物模拟,简单细胞检测局部特征,而复杂细胞汇集简单细胞的输出。

图1 CNN 中的特征层次

CNN 中的一种类型的层是卷积层。这些涉及采用滤波器内核并将它们卷积到图像上。这具有过滤图像并保留图像的局部连通性的效果。卷积的使用还允许参数共享,从而可以将相同的参数(即每个滤波器内核)应用于同一图像的多个部分,从而大大降低模型的复杂性。这个过程根据每个过滤器的响应创建一个特征图,可以将其送入池化层。池化层通过对每一层的特征图进行下采样来帮助降低输入空间的维数。例如,内核大小为 2x2 的最大池化仅采用每组 2x2 像素中的最大像素响应。这将图像下采样 4 倍。平均池化将取内核中像素的平均值。池化的优点是提高了对特征精确空间位置的鲁棒性,因为任何“close enough”的东西都会被池化到相同的输出中。许多 CNN 将多个交替的卷积层和池化层堆叠在一起以构建上述表示层次结构。

ConvNets的相关表明,层数有不断增加的趋势。

  • AlexNet, 8 layers [1]
  • VGG, 19 layers [2]
  • GoogLeNet, 22 layers [3]
  • ResNet, 152 layers [4]

2. 循环神经网络 (RNNs)

与 CNN 类似的时间性(或顺序性)是 RNN。与 CNN 不同,RNN 可以有一个可变的计算步骤。与 MLP 和 CNN 不同,RNN 的输出不仅取决于当前的输入,而且还取决于隐藏层的先前状态。

2.1 LSTM

将 RNN 展开多个步骤会产生多个具有 W 的乘积并多次应用 tanh。传递到每个连续单元格的隐藏状态遵循以下表达式:

\[h_t = tanh(W_{hh} h_{t-1} + W_{hx} x_t)\]

当向后反向传播到 $h_0$ 时,会有很多 W 和 tanh 的重复因子。如果 W 矩阵的奇异值大于 1,则会导致梯度爆炸;同样,小于 1 的奇异值会导致梯度消失。这是因为在反向传播期间 W 矩阵上的乘积将导致价值的指数增长/衰减。这个问题的一个解决方案是使用梯度裁剪 [5]。在梯度爆炸的情况下,这涉及检查梯度的范数是否大于某个阈值。如果是这样,梯度由阈值除以范数缩放。

图2 RNN 梯度流

LSTM 旨在通过在反向传播期间创建具有不间断梯度流的路径来解决长期依赖问题 [6]。在内部,它们比普通 RNN 更复杂。

图3 RNN vs LSTM,图源:Understanding LSTM Networks

LSTM 具有比普通 RNN 更好的递归关系。 LSTM 有两种状态,一种是我们在普通 RNN 中看到的通常隐藏状态 h[t],另一种称为细胞状态 c[t]。细胞状态是一个不暴露于外界的内部向量。

首先定义一些符合:

  • Forget gate: 是否擦除 cell
决定丢弃信息
  • Input gate: 是否写入 cell 以及应存储哪些信息
确定更新的信息
  • Gate gate: 写入 cell 的数量
更新cell状态
  • Output gate:显示多少 cell
输出信息

从 c[t] 到 c[t-1] 的反向传播只是 Forget gate 的逐元素乘法,没有与 W 的矩阵乘法。 Forget gate 在每个时间步长都不同,范围在 0 和 1 之间,因为sigmoid 属性,因此我们避免了一遍又一遍地将相同的事物相乘的问题。

从 h[t] 到 h[t-1] 的反向传播只经历一个 tanh 非线性,而不是每一步都经历 tanh。

cell 状态梯度流

2.2 RNN变体

图4 一些常规的RNN变体

Bi-directional RNN:隐藏状态是前向和后向隐藏状态的连接结果,因此它可以捕获过去和未来的信息。

Tree-structured RNN:允许隐藏状态以输入和任意多个子单元的隐藏状态为条件。例如,标准 LSTM 是一种仅以一个子单元为条件的特殊情况。

RNNs for 2D Sequences:用于捕获不同依赖性和层次关系的 2D 图像的固定结构。

RNNs for Graph Structures:用于图像分割。

3. 注意力机制(Attention)

注意力机制是用于关注数据中特定特征的技术。它们已被证明可以显着提高机器翻译、图像字幕和语音识别等任务的性能。它们允许适应远程依赖关系,并处理 RNN 中出现的梯度消失问题。通过允许对数据部分进行细粒度的局部化表示,例如图像中的补丁或句子中的单词,注意力改进了模型中的特征识别。

3.1 注意力计算

可以使用以下过程为机器翻译任务计算注意力:

  • 将输入句子中的每个标记编码(token)为一个键向量(key)
  • 在解码时,将查询向量(query)与编码器状态进行比较,并生成每个键向量对应的对齐分数(alignment scores)
  • 通过对对齐分数进行归一化来计算注意力权重
  • 将编码器状态视为值向量(value),并使用注意力权重计算加权和
  • 在解码器中使用这个加权和来生成下一个标记编码

3.2 注意力变体

有许多不同的对齐分数函数可用于生成分数。其中一些如下表所示:

图5 不同的 alignment score 函数

软注意力和硬注意力是注意力的变体,它们分别使用确定性和随机方法来计算每个标记的权重。上述计算是针对软注意力的。硬注意力不是使用注意力权重来计算加权平均值,而是使用这些作为概率和来自使用此分布的相应特征的样本。下面可以说明对图像使用的注意力的比较。

请注意软注意力是如何扩散的,并且有时将非零权重分配给图像的大部分的重要权重,而硬注意力在每种情况下都集中在图像的特定大小相等的部分。软注意力是目前更流行的变体,主要是因为它允许在网络中进行更简单的反向传播。

图6 软注意力和硬注意力

4. Transformers:多头注意力

4.1 Transformer

Vaswani et al. (2017)  首次推出了一种新颖的、非循环的神经网络架构,该架构完全由 self-attention 组成,称为 Transformer。 Transformer 在许多序列到序列的自然语言处理任务(例如机器翻译)中取得了state-of-the-art。由于 Transformer 架构缺乏循环结构,因此更适合学习对序列的长期依赖关系,同时还可以提高训练和推理速度。

如下图所示,Transformer 采用了多头自注意力机制,其中多个注意力层并行运行。直观地说,这可以使不同的 heads 聚焦于序列的不同部分。

图7 多头注意力机制

从形式上看,查询(Q)、键(K)的维度($d_k$)和值(V)的多个头可以被打包成单独的矩阵,以允许使用缩放 dot-product 有效地计算注意力,可以防止训练期间梯度减弱:

\[\text{Attention}(Q, K, V) = \text{softmax}(\frac{QK^\top}{\sqrt{d_k}}) V\]

然后,多头注意力可以通过以下方式共同关注来自不同位置的多个不同表示的信息:

\[\begin{aligned} \text{MultiHead}(Q, K, V) &= \text{Concat}(\text{head}_1, \ldots, \text{head}_h) W^O \\ \text{where head}_i &= \text{Attention}(QW_i^Q, KW_i^K, VW_i^V) \end{aligned}\]

图8 Transformer解码器和编码器(2层),图源:The Illustrated Transformer

Vaswani et al. (2017) 在八个 GPU 上训练 3.5 天后获得 41.8 的单模型最先进的 BLEU 分数,这比循环方法少两个数量级的训练时间。他们将多个注意力头的权重可视化,以试图解释每个头学习单独的信息,例如长期依赖关系。此外,他们证明了  Transformer 通过击败所有其他有区别的循环序列到序列方法 来学习英语选区解析的结构化输出的能力。

4.2 BERT: 用于语言理解的深度双向转换器的预训练

4.2.1 预训练

最近,通过无监督语言模型预训练的语言表示已经彻底改变了自然语言处理领域。在使用自监督训练大型语言模型期间学习的参数在转移到其他 NLP 预测任务时非常有效 [8,9,10,11,12]。由于语言建模需要解决长期依赖关系、层次关系和情感问题,因此可以看作是 NLP 中迁移学习的理想源任务 [8]

ELMo [10] 引入了深度的上下文表征,这是一个深度双向LSTM语言模型的内部状态的学习函数,该模型被训练用来预测一个句子中的下一个单词的历史和一个句子中的前一个单词的未来单词。然后,这些上下文表征可以被冻结,并作为嵌入物用于其他下游任务,如问题回答、文本相关性和情感分析。Howard和Ruder(2018)的ULMFiT旨在为新任务转移语言模型本身,而不仅仅是为新任务转移词嵌入。特别是,作者在1.03亿字的维基百科数据上训练一个AWD-LSTM [12] 语言模型,在较少的特定任务数据上使用不同的学习率对模型的不同层进行微调,并在网络的末端为目标任务添加一个最终分类器。因此,ELMo在转移到新任务时需要特定的任务架构,而ULMFiT只是在语言模型之上增加了一个分类器,在六个基准上获得了最先进的结果。然后,OpenAI对这种方法(被称为生成性预训练或GPT)进行了调整,使其与流行的Transformer架构 [7] 一起工作,在微调期间的辅助语言建模损失,以获得更好的结果,并适应更困难的任务,如机器翻译 [9]。在2019年,OpenAI用GPT2来跟进他们的工作,这是迄今为止性能最高的语言模型。他们使用了一个与GPT类似但容量更大的模型,因为他们发现,容量能以对数线性方式提高性能。由于其高的、类似人类的语言生成性能,他们有争议地决定不发布他们最大的模型:一个在800万份网络文本文件上训练的1.5B参数的Transformer。

4.2.2 BERT

在BERT(Bidirectional Encoder Representations from Transformers)中,Devlin等人(2018)[11] 为了在 OpenAI GPT  [10] 的扩展中获得改进的语境化词汇嵌入,极大地利用了双向Transformer架构。本文介绍了两个新的目标,以适应预测语言建模中的下一个单词的传统任务,从双向中受益。在将给定句子中的每个单词编码为上下文表示后,他们让模型既预测原始句子中的一个随机 Mask 单词,又对两个句子进行二元分类,以识别一个句子是否紧跟另一个句子。虽然 Masked 的语言模型目标需要更多的预训练步骤,因为每个预测不再是连续的,但他们发现与传统目标相比,性能的提高是立竿见影的。他们发现,下一个句子的分类目标对自然语言推理和问题回答等任务特别有利,因为它们需要多句子推理。

图8 Masked 语言模型目标的示例,图源:The Illustrated Transformer by Jay Alammar.

在论文中,作者报告了使用维基百科数据(25亿字)和电子书数据(8亿字)来训练具有数亿个参数的变形器编码器。一项关于模型规模的消融研究凭经验表明,极端的模型规模甚至在非常小的规模的任务上都能带来很大的改进,只要模型已经被充分地预训练过。虽然训练需要比传统的语言模型目标多很多步骤才能收敛,但BERT只对单一输出层进行了修改,在包括情感、问题回答和自然语言推理在内的11项NLP任务中的表现达到了最先进的水平。虽然谷歌能够在4个TPU pods上仅用4天时间训练BERT,但对于拥有传统GPU资源的学术界来说,训练是不切实际的。例如,一个拥有RTX 2080Ti的标准4GPU桌面需要近99天才能完成训练!

References

  1. ImageNet Classification with Deep Convolutional Neural Networks  [PDF]
  2. Very Deep Convolutional Networks for Large-Scale Image Recognition [PDF]
  3. Going Deeper with Convolutions  [PDF]
  4. Deep Residual Learning for Image Recognition  [PDF]
  5. Understanding the exploding gradient problem  [PDF]
  6. Long Short-Term Memory  [PDF]
  7. Attention is all you need [PDF]
  8. Universal language model fine-tuning for text classification [PDF]
  9. Improving language understanding by generative pre-training [PDF]
  10. Deep contextualized word representations [PDF]
  11. Bert: Pre-training of deep bidirectional transformers for language understanding [PDF]
  12. Regularizing and optimizing LSTM language models [PDF]