Deep Learning
摘要
深度学习中,计算模型由多层处理层组成,能够学习数据的多层级抽象表示。这类模型极大促进了语音识别、目标检测甚至药物研发等领域进展。深度学习通过反向传播算法发现数据集的复杂结构表示,在反向传播中指导模型每层表示如何更新参数,以获得对数据更准确的认知。深度卷积网络给图像、音频、视频处理方面带来突破性进展。同时,循环神经网络在序列数据处理方面也有亮眼表现,如文本、音频处理等。
简介
机器学习技术在当今社会多领域发挥作用,包括网页搜索、社交网络内容过滤、电商推荐等,甚至应用在智能手机、相机等消费产品上。机器学习算法被用来识别图像中的物体、语音转文字、推荐系统等。总之,这类应用使用的相关技术被称为深度学习。
传统机器学习方法能力有限,不能处理原始格式的数据。十几年来,构建模式识别与机器学习系统时,需要进行详细的特征工程与大量领域经验,这样才能从原始数据中得到有效的特征向量表示,如分类器、检测器之类的学习系统只能处理这种向量格式的输入数据。
表示学习是一系列方法,可以自动从原始数据中发现分类器、检测器所需的特征向量表示。深度学习属于表示学习,由多层相连的非线性模型构成,每层模型均可计算一种特征向量表示,接收前一层的表示,在此基础上输出新的表示传递给下一层。向量表示所属的模型层级越高,该表示信息越抽象。通过足够多层模型组合,可以学习到非常复杂的函数。对于分类任务来说,越高层的向量表示,越能从输入数据中解析出影响判别的重要信息,并压缩无关变量。例如,当输入是图片的像素数组表示时,第一层向量表示通常代表图中某个方向或位置是否存在某种边缘信息。第二层向量表示通常代表边缘排列后的图案,同时忽视边缘在图中的位置差异。第三层向量可能表示图案的组合,代表某种对象的局部信息。再高层的向量可以检测对象局部信息的各种组合。深度学习的重点是,这些特征不是工程师设计的,而是通用学习算法从数据中自动习得的。
深度学习极大提升了 AI 的实际问题处理能力,突破了存在于 AI 社区几十年的瓶颈。深度学习已经在实际应用中证明了其发掘结构复杂数据的高维特征能力。除了打破多项图像识别、语音识别比赛记录外,还在药物蛋白质分子预测、分析粒子加速器数据、重构脑回路、DNA 改变影响等方面的预测效果优于已有机器学习模型。更令人惊奇的是,深度学习在自然语言处理的多个任务中也产生了相当可靠的预测结果,尤其是话题分类、情感分析、问答和翻译。
我们认为深度学习在不远的将来会有更大突破,因为该技术只需要很少的人工处理,可以充分利用不停增长的海量算力与数据。深度神经网络中新算法与架构的提出会加速这一过程。
监督学习
监督学习是最常见的机器学习形式,无论其是否使用深度神经网络的方法。假设我们要构建一个图片内容分类系统,输出房屋、车辆、人、宠物。首先得收集一大批关于房屋、车辆、人、宠物的图片数据集,每个图片都得打上对应标签。训练中,模型接收图片,输出各类型得分向量。我们期望正确的类型在得分向量中具有最高得分,但在模型训练前不会得到该结果。我们通过计算目标函数来度量模型的误差,该误差来自模型输出的得分向量与期望的得分向量的距离。接着模型会调整内部参数来减少输出的误差。这些可调整的参数,通常被称为权重,取值为实数,可以当作模型输入输出之间的旋钮。典型深度学习模型中可能有上亿规模的参数,训练过程可能需要上亿规模的带标签样本。
为了恰当地调整权重向量,学习算法对每个权重计算梯度向量,表示如果权重增加该梯度的相关数值,误差数值会增大多少。然后权重按照梯度向量的相反方向调整。
目标函数在所有训练样本上取平均值,可以看作是某种具有山地的权重值高维空间。权重的负梯度向量表示该空间中最陡峭的下山方向,使其接近最小值,意味着平均误差也会减少。
实践中,大多数从业者使用随机梯度下降处理 Stochastic Gradient Descent(SGD)。该过程包含将部分样本转换为输入向量,计算输出与误差,计算这些样本的平均梯度,根据梯度调整权重。将训练集划分为许多小规模样本集,不断地在这些小规模样本上执行随机梯度下降过程,直到目标函数均值不再减少。称该过程为随机 Stochastic 的原因是,每个小样本集都可得到是全样本平均梯度的带噪估计。这个简单的处理过程通常能得到良好的权重集,与其他更精致的优化技术相比,该方法计算速度非常快。训练之后,使用另一个完全不同的数据集来度量模型性能,该数据集被称为测试集。该测试的目的是检验模型的泛化能力,即模型接收到训练时没有见过的输入数据时,能输出有意义答案的能力。
当前许多应用中的机器学习模型仍使用基于手动特征工程的线性分类器。一个二分类线性分类器计算输入特征向量各部分的加权和,如果加权和大于给定阈值,输入就被划分为某一类型。
自 1960 年以来,我们就知道线性分类器只能将输入空间划分为非常简单的区域,称为超平面半空间划分。但是诸如图片和语音识别类的问题,需要模型对输入中不相关变量不敏感,比如同一物体的在不同的位置、朝向、光照条件下的样子,或者语音中口音的差异。同时,需要模型对特定局部/时刻敏感,比如白狼与萨摩耶的区别。在像素级别,两个不同姿势或背景的萨摩耶的图片可能差异非常大,而两个相同姿势与背景的白狼与萨摩耶的图片可能非常相似。在那些处理原始像素的线性分类器或浅层网络分类器中,没有模型能够处理上述分类问题。这便是浅层分类器需要优良特征抽取器的原因,解决选择性与不变性两难问题,需要选择图片中对判决重要的部分,忽视无关紧要部分,来生成良好的特征向量表示。为了提升分类器效果,人们可以使用泛化非线性特征,如核方法。但是这种泛化特征训练出的模型,如高斯核产生的特征,在遇到与训练数据差异较大的输入时,泛化能力不行。传统选择是手动设计特征抽取器,这需要大量的工程技巧与领域经验。但是在使用可自动学习良好特征表示的通用学习过程的情况下,这些处理与问题都可以避免。这就是使用深度学习的关键优点。
深度学习架构是简单模块的多层堆叠。几乎每个模块都是学习的主体,它们计算非线性输入输出之间的映射。每个模块都能够将其输入转换为可同时增加选择性与不变性的特征表示。通过多个非线性层,通常 5-20 层,系统能够实现对输入数据的非常复杂的表达,对特定局部信息敏感,又忽略大量无关变量。
反向传播来训练多层架构
在模式识别的研究初期,研究人员就致力于训练多层网络替换手动特征工程。但直到二十世纪八十年代,该方法还没有被广泛理解。最终,多层网络可以通过简单随机梯度下降法训练。只要模型是输入与内部权重的平滑函数,就能够使用反向传播过程来计算梯度。该有效方法是在 1970 年到 1980 年之间,被不相关的研究人员发现的。
反向传播过程计算模型中目标函数关于参数的梯度,仅仅是一种链式求导的实际应用。其核心思想是目标函数关于模型输入的导数,可以从目标函数关于模型输出的导数推导得到。将反向传播公式重复应用于模型各层,计算输出到输入的各个参数的梯度。一旦算得这些梯度,就知道目标函数关于模型中各参数的梯度。
许多深度学习应用使用前向神经网络架构,学习固定大小输入到固定大小输出的映射。从一层传递到下一层的过程中,一组计算单元对来自上一层的输入计算加权和,并把该结果传给一个非线性函数。现在,最流行的非线性函数是线性整流单元 Rectified Linear Unit(ReLU)。该函数是半波整流器 。过去几十年里,神经网络使用更平滑的非线性函数 与 ,但 ReLu 在多层网络上学习速度更快,允许直接训练深层监督网络,而不需要无监督预训练。不在输入输出层的计算单元通常被称为隐藏单元。可以认为隐藏层能把输入打散到非线性空间,这样最后一层可以对该空间线性划分。
二十世纪九十年代晚期,神经网络几乎被机器学习社区抛弃掉,被计算机视觉和语音识别社区忽视。几乎所有人都认为仅靠少量先验知识就能学到有用的多级特征抽取器是不现实的。实际上,通常认为简单梯度下降会陷入局部最优 Poor Local Minima,对权重的少量调整不再减少模型平均误差。
事实上,在大型网络模型中,局部最优很少会是一个问题。无论初始条件如何设置,模型几乎都会得到相似的效果。最近的理论研究与实证结果很大程度上证明了局部最优通常不是什么严重问题。然而,当参数由大量鞍点组合而成时,这类点的梯度为零,该点周围曲线向上的维度占大多数,剩下的维度曲线向下。有分析显示这类权重鞍点所对应的损失函数值非常相似,因此,模型陷入哪个鞍点都没关系。
对深度前馈网络的研究兴趣在 2006 年前后再度兴起,发起人是加拿大高等研究院的一组研究人员。他们提出了无需标签数据的多层特征检测器的无监督学习过程。每层特征检测器的学习目标可以重构,或者模拟之前层的特征检测器的活动。通过预训练多层复杂的使用重构目标的特征检测器,深度网络的权重可以被初始化为恰当的值。然后在模型顶部添加一个输出层,整个模型就可以通过反向传播进行微调。该模型在检测手写字符与行人的效果非常好,尤其在有标签数据数量稀少的时候。
预训练方法的第一个主要应用是语音识别,由于使用了 GPU,网络的训练速度提升 10-20 倍。在 2009 年,该方法被用来处理声波中的短时系数窗口,将其映射为表示窗口中心的部分为哪种对话片段的概率。该方法先在语音识别的小词汇量基准上打破纪录,接着很快在大词汇量基准上打破纪录。截止 2012 年,该深度模型已被部署到安卓手机上。在更小的数据集上,无监督预训练有助于预防过拟合,极大提升模型泛化能力。在模型迁移中,也可以很好的适应源任务样本量大,而目标任务样本量小的问题。从此深度学习迎来新的浪潮,进入只需要少量样本的预训练阶段。
然而,有这么一种不同于全连接网络的深度前向网络更容易训练且泛化能力更强,它是卷积神经网络 Convolutional Neural Network(ConvNet)。在神经网络不再火热的时期里,它取得了许多实践成果,最近更是被计算机视觉社区广泛采用。
卷积神经网络
卷积神经网络被设计来处理多维数组形式的数据,如彩色图片,该图片由多个二维数组构成,数组内容为像素值的强度,通常有 3 个色彩通道。许多数据以多维数组格式处理,如一维的信号或序列数据,二维图像和频谱数据,三维视频和体图数据。卷积神经网络背后有四个关键思想来使用这些数据特征:局部连接、共享权重、池化处理、多层模型。
典型卷积神经网络架构由一系列阶段组成。前边几个阶段包含两类计算层:卷积层、池化层。卷积层的计算单元被组织成多个特征图 Feature Maps,本层特征图里的每个元素都与上一个卷积层的各个特征图的对应部分相连,每个连接的权重都与某个滤波器组 Filter Bank 关联,然后局部加权和的结果传递给非线性函数处理,最终得到该元素值。特征图中的每个元素共享一个滤波器组。本层不同的特征图使用不同的滤波器组。该架构设计的原因有两点,首先在数组数据中,如图像数据,成块的局部数值通常高度相关,形成易于检测的具有辨识度的局部图案。其次图像与信号中的局部数据统计量通常具有不变性,与位置无关。换句话说,如果图片的某个位置有一个图案,那么该图案可以出现在图中任何位置。因此每个特征图(当前层)的不同元素共享一个相同的过滤器,来检测图片中不同位置的同一个模式。在数学上对每个特征图(前一层)执行过滤运算被称为卷积,因此该网络使用卷积命名。
卷积层的角色是从前一层的特征图中捕获局部模式,池化层的角色是合并语义相似的特征。由特征的位置相关性形成的图案可能非常多样化,可通过粗粒度化特征位置来提升图案检测可靠性。一个典型的池化单元计算特征图一组局部元素的最大值。相邻池化单元的输入元素组在特征图中相距一定距离。因此,池化可以减少表示维度,创建对微小偏移与扰动的不变性。两到三组卷积层、非线性处理器、池化层堆叠在一起,其后接上常规的全连接层,构成典型卷积神经网络。在卷积神经网络上反向传播与常规深度网络一样,可以训练滤波器组的参数。
深度神经网络能够探索原始数据的层级信息,高层特征由低层特征组合而成。在图像中,边缘组合成图案,图案组合成部分,部分组合成完整对象。相似的层级特性也存在于语音和文本数据中,声音到通话,单词短语到句子。池化处理能够在上一层特征图位置与外观变动的情况下保持当前层表示不变。
卷积神经网络中的卷积层与池化层,受到视神经科学中简单细胞与复杂细胞分类的启发。其整个结构让人想起视觉皮层腹侧通路的层级结构。当给卷积网络模型和猴子展示相同图片时,卷积网络的高层单元能够媲美猴子下颞叶皮层中 160 个神经元。卷积神经网络源于新认知模型,其结构相似,如反向传播,但没有端到端的监督学习过程。主要的一维卷积网络被称为延时神经网络 Time-Delay,常用于单词识别。
二十世纪九十年代早期就有大量卷积神经网络应用,始于解决文档阅读和语音识别的一维延时神经网络。文档阅读系统同时使用卷积网络与概率模型,且应用受语言类型约束。在九十年代晚期,美国 90% 支票都是用该系统阅读的。之后微软开发了大量基于卷积网络的光学字符识别与手写识别系统。同一时期,卷积网络也被应用于目标检测和面部识别。
使用深度卷积网络做图像理解
进入二十一世纪后,卷积网络在图像的检测、划分、区域与目标识别应用上取得了巨大成功。这些都是标签数据相对丰富的任务,如交通标识识别、生物图像划分、面部识别、行人与人体识别等。卷积网络最近的重大应用成果是面部识别。
关键点在于,图像可以具有像素级标签,可被应用在高科技领域,包括自主移动机器人与自动驾驶汽车。类似 Mobileye 与 Nvidia 使用基于卷积的网络做车载视觉系统。其他涉及自然语言理解、语音识别等方面的应用也备受瞩目。
除了这些成果,卷积神经网络由几乎被计算机视觉和机器学习社区抛弃,直到 2012 年 ImageNet 的出现才扭转了局面。当在超过一百张图片、具有 1000 个类别的数据集上训练深度卷积网络后,该模型取得了非常壮观的成功,几乎把所有比赛最好方法的误差减了一半。模型的成功来自对 GPU 的有效利用、ReLu 和一种新的正则化技术 Dropout ,还包括对已有样本的变形处理来生成新样本的技术。该模型的成功带来了计算机视觉的革命,卷积网络方法现在统治了几乎所有检测与识别任务,在某些任务上,性能达到人工水平。最近一个结合卷积网络与循环网络的模型示范了生成图片字幕的惊人效果。
最近的卷积网络结构由 10-20 个带有 ReLu 的卷积层、上亿权重、十多亿网络内部连接。两年前训练如此大规模网络需要耗费几周时间,然而在硬件、软件与算法同时提升的今天,训练只需要几个小时。
基于卷积网络模型的性能,许多主要科技公司,如 Google、IBM、Microsoft 等,启动研发项目,并部署基于卷积网络的图片理解产品与服务。
卷积神经网络很契合高效硬件芯片与现场可编程门阵列实现。大量公司都着手开发卷积神经网络芯片,以支撑手机、相机、机器人、自动驾驶等实时应用场景。
词的分布式表示与自然语言处理
与经典的不使用词的分布式表示的学习算法相比,深度学习理论展示了深度网络的两个不同的优点。这两个优点都来自组成分解的能力,取决于低层具有恰当成分结构的数据生成分布。首先,词的分布式表示可以通过学到的特征值的组合,来泛化到训练样本之外的词的表示。其次,在深度网络中组合表示层还能带来潜在的另一个优势。
多层神经网络的隐藏层可以通过预测目标输出来学习网络的输入的表示。通过训练神经网络,根据单词序列的局部几个单词来预测下一个单词,很好地演示了该优点。在局部单词构成的上下文中,每个单词输入给网络时,都被转换成独热向量,即向量中只有一个维度值是 1,其他位置都是 0 。在网络的第一层,给每个单词创建一个不同的向量,即词向量。在语言模型中,网络中的其他层能够学着将单词的输入向量转换为输出向量,以预测下一个单词,即预测词汇表中任意单词是下一个单词的概率。该网络学到的单词表示具有多个活跃的组成部分,每个部分可表示单词不同的特征,正如在学习符号分布式表示的上下文中首次证明的那样。这些语义特征并不在输入中显示表示,它们在学习过程中被发现,就像是将输入输出符号的关系映射到多重微观规则中。
学习词向量的方法被证明在大规模真实文本的语料库中处理单词序列时效果非常好,这种情况下人为定义微观规则的方式非常不可靠。在学到的词向量表示中,星期二与星期三非常接近,瑞士与挪威非常接近。这样的表示被称为分布式表示,因为其各个特征直接完全互斥,它们的不同配置对应观测数据的不同变动。这种词向量由学到的特征组成,并不依赖先验的专家知识,完全由神经网络自动化发掘。从文本中学习单词的向量表示目前广泛应用于自然语言处理任务。
表示问题的争论核心在逻辑启发和神经网络启发的认知范式之间。在逻辑启发范式中,一个符号实例的属性,只能分为是否可以标识另一个符号实例,没有关于该符号如何使用的内部结构。然后,为了使用符号,必须为其绑定便于明智的推理规则。与之相反,神经网络范式使用向量、权重矩阵和标准非线性函数来表示某种直觉推理过程,支撑轻松的常识推理。
在发现神经网络模型之前,标准处理方法是语言的统计模型,该模型不能利用词的分布式表示,它基于包含某单词的长度为 N 的短符号序列的出现频率来表示该单词,该序列被称为 N-gram。所有可能的 N-gram 数量构成词汇表,因此上百个单词就需要构建非常大的训练集。N-gram 方法把每个词当作独立单元,因此不能表示词组语义信息,但自然语言模型可以表达语义,因为该方法把每个词转换为实数特征向量,语义相近的单词在向量空间中距离更接近。
循环神经网络
在反向传播算法首次提出时,其最令人兴奋的应用是训练循环神经网络 Recurrent Neural Network(RNN)。对于涉及序列输入的任务,如语音和语言,通常使用 RNN 来处理。RNN 在处理序列输入时,一次处理一个位置的元素,在其隐藏层含有一个状态向量,隐式包含了序列中所有已处理位置元素的表示信息。当在不同的离散时间步下考虑隐藏层的输出时,该隐藏层就像是多层神经网络中的不同处理单元。如此一来,如何使用反向传播训练 RNN 就清晰了。
RNN 是非常强大的动态系统,但训练它们会有点困难,因为每一步的反响传播梯度总是增长或减少,在许多步之后,可能出现梯度爆炸或梯度消失的问题。
多亏了关于 RNN 架构优点和训练方法的研究,目前发现 RNN 在文本中预测字符时效果非常好,该模型也可用于更复杂任务中,例如 RNN 在一次读一个英语句子中的单词后,其隐藏单元的最终状态向量可以当作该句子中心思想的向量表示,然后该句子向量可以做为另一个 RNN 的隐藏层初始状态,这个新的 RNN 会输出另一种语言的单词概率,再不断地用输出单词做输入,即可实现句子翻译任务。这种朴素的机器翻译方法很快演化出先进的性能,基于此,人们开始严肃地怀疑是否要对语言的符号系统构造完备的推理规则后才能理解句子以执行翻译任务。翻译任务与 RNN 实现式更兼容,就像同时进行许多类比,每个类比都能增强结论的合理性。
不再是把法语句子的含义翻译为英语句子,人们可以学习图片的含义,并翻译为英语句子。编码器为深度卷积网络,将像素数值转换为最后一层隐藏层输出的活跃向量,解码器为 RNN,与常规机器翻译中的解码器类似,目前该系统吸引了一波研究热潮。
RNN 一旦在时间上展开,可以被视为一个非常深的前向网络,所有层共享同样的权重。尽管其主要目的是学习长距离依赖,理论与实践证明该模型很难存储超长距离的信息。
为了解决该问题,一种增强网络的方法是使用显式记忆模块。首次提出的该类型网络为 Long Short Term Memory(LSTM),使用特殊的隐藏单元来记忆长距离信息。该单元被称为记忆格 Memory Cell,其功能像是累加器或门控神经元。该单元与自身相连,每一步计算时都会带着上一步的计算结果与当前输入,同时内部有操作门来控制是否清理记忆信息。
LSTM 网络后续被证明比 RNN 更高效,尤其是在每一步具有多个计算层时。基于该网络的语音识别系统能够把整个语音信息一次性输出为单词序列。LSTM 网络或与之相似的具有门结构的网络,现在也被构造用于编码器-解码器网络,来完成机器翻译任务。
过去几年,一些作者提出了不同的方案来提升 RNN 的记忆能力。这些提案包括 Neural Turning Machine,其中具有一种类似磁带的记忆组件,RNN 能够对该磁带自由读写。还有记忆网络 Memory Network,该网络在 RNN 上外挂了某种记忆组件,在标准问答基准上产生了优异的性能,记忆用于记录网络最近被提问的问题。
处理简单的带有记忆能力,Neural Turning Machine 和 Memory Network 也被用于通常需要推理和符号计算的任务。Neural Turning Machine 可以被教会某种算法,当输入的无序列表带有可以表示顺序的实数值时,输出有序的符号列表。Memory Network 可以追踪文本冒险游戏的世界状态,还有阅读故事后进行复杂推理任务。例如,在模型处理了 15 句指环王文本后,需要正确回答谁是 Frodo 的问题。
深度学习的未来
无监督学习对深度学习的研究具有催化作用,但已经被监督学习的一系列成果给遮蔽了。虽然本文没有重点提到无监督学习,我们期望该方向在未来有长足的发展,因为人和动物的学习主要依靠无监督方法,我们发现世界主要依靠观测,而不是有人告诉我们所有事物的名字。
人体视觉是一个主动过程,依赖持续的光学采样,通过智能的特定任务的方式,使用小的高分辨率中心图像与大的低分辨率周边图像。我们非常希望未来视觉研究能够生产端到端的系统,结合卷积网络与循环网络,使用强化学习判断需要看哪个部位。结合深度学习与强化学习的系统还处于婴儿期,但其在分类任务上的性能已经优于被动视觉系统,在学习如何玩电子游戏方面取得了令人印象深刻的成果。
自然语言理解是另一个深度学习被寄予厚望的领域,我们期望有使用 RNN 的系统可以有选择性的处理整篇文档的所有句子。
最终,人工智能的重大进展将通过结合表征学习与复杂推理的系统实现。尽管深度学与简单推理被用于语音和手写字符识别已经很久了,需要新范式来替代基于规则的符号表示计算,即通过大型向量操作。