目录
2006年,Hinton 发表了一篇论文《A Fast Learning Algorithm for Deep Belief Nets》,提出了降维和逐层预训练方法,该方法可成功运用于训练多层神经网络,使深度网络的实用化成为可能。该论文也被视作深度学习领域的经典之作。
Google Brain前员工Denny Britz 在本文中进行了回顾整理,按时间顺序介绍了从2012年到2020年深度学习领域的数项关键性科研成就,包括运用AlexNet和Dropout处理ImageNet(2012年)、使用深度强化学习玩Atari游戏(2013年)、应用注意力机制的编码器-解码器网络(2014年)、生成对抗网络(2014-2015年)、ResNet(2015年)、Transformer模型(2017年)、BERT与微调自然语言处理模型(2018年),以及2019-2020年及之后的BIG语言模型与自监督学习等。这些技术大部分应用于视觉、自然语言、语音与强化学习等领域。
2012年:应用AlexNet和Dropout 方法处理ImageNet
它是一种以Yann LeCun提出的早期LeNet网络为基础的深度卷积神经网络(Deep Convolutional Neural Networ)。AlexNet结合芯片GPU的功能和算法优势,大大超越了以前其他对ImageNet数据集中的图像进行分类的方法。它的出现再一次证明了神经网络的强大。此外,AlexNet是最早运用Dropout的算法之一(防止过拟合),之后也成为了提高各类深度学习模型泛化能力的一项关键技术。
AlexNet 所使用的架构,包含一系列卷积层、ReLU非线性(ReLU nonlinearity)和最大池化算法(max-pooling),被广泛视为后来CV架构创建和扩展的标准。如今,诸如PyTorch之类的软件库具有十分强大的功能,加上与目前最新的神经网络架构相比,AlexNet的构成十分简单,仅需几行代码即可通过 PyTorch 等软件库实现。
用PyTorch搭建AlexNet,https://pytorch.org/hub/pytorch_vision_alexnet/用TensorFlow搭建AlexNet,https://github.com/tensorflow/models/blob/master/research/slim/nets/alexnet.py
2013年:使用深度强化学习玩转 Atari 游戏
相关论文:
Playing Atari with Deep Reinforcement Learning (2013),https://arxiv.org/abs/1312.5602
代码实现:
用PyTorch搭建深度强化学习模型(DQN)
https://pytorch.org/tutorials/intermediate/reinforcement_q_learning.html
用TensorFlow搭建DQN
https://www.tensorflow.org/agents/tutorials/1_dqn_tutorial
DeepMind团队,基于近年来在图像识别和GPU方面取得的一系列突破,成功训练了一个能通过原始像素输入来玩Atari游戏的网络。不仅如此,同一个神经网络架构还在没有被告知详细游戏规则的前提下,学会了玩7款不同的游戏,从而证明了该方法的普适性。
强化学习与监督学习(比如图像分类)的不同之处在于:在强化学习里,智能体必须在多个时间步(time step)内学会如何获得最多奖励。具体来说,就是它必须赢得比赛,而不是仅仅预测某个标签。由于智能体与环境直接互动,且每个动作都会影响下一个动作,所以训练数据不是独立且分布均匀的,这就使得许多机器学习模型的训练十分不稳定。这个现象可以使用经验回放(experience replay)等技术来解决。
尽管这项研究没有实现明显的算法创新,但却巧妙地结合了现有技术、基于GPU训练的卷积神经网络、经验回放以及一些额外的数据处理技术,并获得了大多数人始料未及的出色结果。这也提升了研究人员扩展深度强化学习技术的信心,有望借鉴这个成果来解决包括围棋、Dota 2、Starcraft 2等等更复杂的任务。
Atari游戏在之后也成为了强化学习研究的标准基准。早期的深度强化学习方法仅超过人类基本水平、学会7款游戏,但在后来几年时间里,基于这些思路所取得的进步,开始在更多游戏里打败人类。其中有一款游戏叫《蒙特祖玛的复仇》,以需要长期规划而闻名,被认为是难度最大的游戏之一。直到最近,AI 已经在57款游戏中超越了人类玩家的基准线。
2014年:采用“注意力”的编码器-解码器网络
深度学习最卓越的成就大多体现在与视觉相关的任务中,并且由卷积神经网络驱动。虽然NLP研究已使用LSTM网络和编码器-解码器架构在语言建模和翻译方面取得了一定成功,但该领域也是直到注意力机制的出现才开始取得令人瞩目的成就。
在处理语言时,每个 token 都会被输入循环网络(如LSTM)中,并对先前处理过的输入保持了记忆。token可能是字符,可能是单词,也可能是介于字符和单词之间的某物。换句话说,每个token都是一个时间步,一个句子就像一个时间序列。这些循环模型通常不擅长处理间隔长时间的依赖关系。在处理序列时,他们很容易“忘记”较早之前的输入,因为它们的梯度需要通过大量时间步进行传播。通过梯度下降方法优化这些模型非常困难。
新的注意力机制则有助于缓冲这一阻碍。它引入快捷连接(shortcut connections),给网络提供了一个能够在早期的时间步上适应性地“回头看”的选择。这些连接可以帮助网络决定生成特定输出时哪些输入是重要的。一个典型的例子就是机器翻译:在生成输出词时,它通常会映射一个甚至多个特定的输入词。
Attention模型
上图展示的Encoder-Decoder框架时注意力不集中的分心模型:在生成目标句子的单词时,不论生成哪个单词,它们使用的输入句子Source的语义编码C都是一样的,没有任何区别。(贡献图相同)
而语义编码C是由句子Source的每个单词经过Encoder 编码产生的,这意味着不论是生成哪个单词,y1,y2还是y3,其实句子Source中任意单词对生成某个目标单词yi来说影响力都是相同的,这是为何说这个模型没有体现出注意力的缘由。这类似于人类看到眼前的画面,但是眼中却没有注意焦点一样。
如果拿机器翻译来解释这个分心模型的Encoder-Decoder框架更好理解,比如输入的是英文句子:Tom chase Jerry,Encoder-Decoder框架逐步生成中文单词:“汤姆”,“追逐”,“杰瑞”。
在翻译“杰瑞”这个中文单词的时候,分心模型里面的每个英文单词对于翻译目标单词“杰瑞”贡献是相同的,很明显这里不太合理,显然“Jerry”对于翻译成“杰瑞”更重要,但是分心模型是无法体现这一点的,这就是为何说它没有引入注意力的原因。
没有引入注意力的模型在输入句子比较短的时候问题不大,但是如果输入句子比较长,此时所有语义完全通过一个中间语义向量来表示,单词自身的信息已经消失,可想而知会丢失很多细节信息,这也是为何要引入注意力模型的重要原因。
如果引入Attention模型的话,应该在翻译“杰瑞”的时候,体现出英文单词对于翻译当前中文单词不同的影响程度,比如给出类似下面一个概率分布值:
(Tom,0.3)(Chase,0.2) (Jerry,0.5)
目标句子中的每个单词都应该学会其对应的源语句子中单词的注意力分配概率信息。这意味着在生成每个单词yi的时候,原先都是相同的中间语义表示C会被替换成根据当前生成单词而不断变化的Ci。理解Attention模型的关键就是这里,即由固定的中间语义表示C换成了根据当前输出单词来调整成加入注意力模型的变化的Ci。增加了注意力模型的Encoder-Decoder框架理解起来如图所示。
2014年:Adam优化器
神经网络通过运用优化器将损失函数(如平均分类误差)最小化进行训练。优化器负责调整网络参数来使网络学习目标。大多数优化器都是基于随机梯度下降(Stochastic Gradient Descent, SGD)的变量。但是,也有很多此类优化器包含了可调节的参数,比如优化器本身的学习率。针对特定问题寻找正确设置不仅能减少训练时间,还能通过找到局部最小损失函数来获取更好的结果。
大型研究实验室往往会运行成本高昂的、使用了复杂学习速率调度器(learning rate schedules)的超参数检索来获取简单但对超参数敏感的优化器(比如SGD)中最好的那一个。有时候,他们的效果虽然超越了现有基准,但是往往是花费了大笔资金调节优化器的结果。科研论文里往往不会提到研究成本这些细节。也就是说,研究人员如果没有足够的资金预算来优化他们的优化器,就只能深陷“效果不佳”的泥潭。
Adam优化器主张使用梯度的一阶矩和二阶矩来自动调整学习率。研究也表明,运用Adam优化器所获取的结果非常“鲁棒”(健壮性),且对超参数的调整不敏感。换句话说,Adam在大部分情况下无需太多调整就可以正常运行。就研究结果而言,目前一个被调整得很好的SGD表现更好,但Adam能帮助研究人员以较少成本进行研究。这是因为,如果实现的效果不好,研究者起码知道并不是由于某个调整得不佳的优化器所造成的。
2015年:残差网络(ResNet)
研究人员基于AlexNet 的突破进行了一段时间的深入研究,提出了一系列基于卷积神经网络的性能更佳的架构,如VGGNet、Inception等等。而ResNet 就是紧接这一波迅速发展的新架构的下一代神经网络架构。迄今为止,ResNet的变体被视为各类任务的基准模型架构和更复杂架构的基本构建要素,并得到广泛应用。
与其他网络架构相比,它具有明显的深度优势。该网络最深的层数可以达到1000层,而且,虽然该网络在基准任务上的表现略逊于101层和152层的网络,但总体表现依然十分优秀。这类深度网络的训练是一个非常有挑战性的优化问题,这是因为在训练深层网络的过程中,梯度会随着层数的增加而递减直至消失,这使得网络优化异常艰难。
ResNet应用恒等快捷连接(identity shortcut connections)来促进梯度的流动。ResNet只需要逐层学习“变化量(Δ)”,难度较低,往往比学习整个变化量容易。这种恒等连接是“高速网络”(Highway Network)里所提到的连接特例,反过来又受到长短期记忆网络(LSTM)的门控机制(gating mechanism)的启发。
2017年:Transformer模型
上文提到,具有注意力的序列到序列模表现地非常好,但由于该模型的循环特性需要用到序列算法,所以还存在一些缺点。它们很难并行处理,因为每次只运用一个步骤处理输入。每个时间步都受到上一个时间步的影响。这也使得时间步很难扩展为长序列。即使具备了注意力机制,模型仍然在对复杂的长程依赖关系建模上面临挑战。大多数“工作”似乎都是在循环层中完成的。
Transformer模型有效解决了上述问题。模型应用多个前馈自注意层(feed-forward self-attention layers)取代循环层(recurrence),从而完全消除循环过程,从而能够平行处理所有输入并且生成输入和输出间相对较短的路径(这就意味着梯度下降更易于优化)。在这种情况下,模型能够进行快速训练,易于扩展并处理更多数据。此外,Transformer模型使用了位置编码来向网络传递输入顺序(这是循环模型无法做到的)。一开始学习Transformer模型也许有些摸不着头脑,但如果想了解更多Transformer模型的应用原理,可以参考以下链接里的讲解:http://jalammar.github.io/illustrated-transformer
Transformer模型的表现超出了所有人的期待。在接下来的几年里,Transfomer会成为大多数序列任务(如NLP)甚至是计算机视觉的架构标准。