神经网络与深度学习(邱锡鹏_复旦大学)(一 绪论)

一 绪论

​ 从根源来讲,深度学习是机器学习的一个分支,是指一类问题以及解决这类问题的方法.

​ 首先,深度学习问题是一个机器学习问题,指从有限样例中通过算法总结出一般性的规律,并可以应用到新的未知数据上. 比如,我们可以从一些历史病例的集合中总结出症状和疾病之间的规律. 这样当有新的病人时,我们可以利用总结出来的规律,来判断这个病人得了什么疾病.

​ 其次,深度学习采用的模型一般比较复杂,指样本的原始输入到输出目标之间的数据流经过多个线性或非线性的组件(component). 因为每个组件都会对信息进行加工,并进而影响后续的组件,所以当我们最后得到输出结果时,我们并不清楚其中每个组件的贡献是多少. 这个问题叫做贡献度分配问题(CreditAssignment Problem,CAP)[Minsky, 1961]. 在深度学习中,贡献度分配问题是一个很关键的问题,这关系到如何学习每个组件中的参数.(贡献度分配问题也常翻译为信用分配问题或功劳分配问题)。

​ 目前,一种可以比较好解决贡献度分配问题的模型是人工神经网络(ArtificialNeural Network,ANN). 人工神经网络,也简称神经网络,是一种受人脑神经系统的工作方式启发而构造的数学模型. 和目前计算机的结构不同,人脑神经系统是一个由生物神经元组成的高度复杂网络,是一个并行的非线性信息处理系统. 人脑神经系统可以将声音、视觉等信号经过多层的编码,从最原始的低层特征不断加工、抽象,最终得到原始信号的语义表示. 和人脑神经网络类似,人工神经网络是由人工神经元以及神经元之间的连接构成,其中有两类特殊的神经元:一类是用来接收外部的信息另一类是输出信息. 这样,神经网络可以看作是信息从输入到输出的信息处理系统. 如果我们把神经网络看作是由一组参数控制的复杂函数,并用来处理一些模式识别任务(比如语音识别、人脸识别等),神经网络的参数可以通过机器学习的方式来从数据中学习. 因为神经网络模型一般比较复杂,从输入到输出的信息传递路径一般比较长,所以复杂神经网络的学习可以看成是一种深度的机器学习,即深度学习.

​ 神经网络和深度学习并不等价. 深度学习可以采用神经网络模型,也可以采用其他模型(比如深度信念网络是一种概率图模型). 但是,由于神经网络模型可以比较容易地解决贡献度分配问题,因此神经网络模型成为深度学习中主要采用的模型. 虽然深度学习一开始用来解决机器学习中的表示学习问题,但是由于其强大的能力,深度学习越来越多地用来解决一些通用人工智能问题,比如推理、决策等.

1.1 人工智能

​ 人工智能(Artificial Intelligence,AI)就是让机器具有人类的智能。

图灵测试:“一个人在不接触对方的情况下,通过一种特殊的方式和对方进行一系列的问答. 如果在相当长时间内,他无法根据这些问题判断对方是人还是计算机,那么就可以认为这个计算机是智能的”。

目前,人工智能的主要领域大体上可以分为以下几个方面:

  • 感知 即模拟人的感知能力,对外部刺激信息(视觉和语音等)进行感知和加工.主要研究领域包括语音信息处理和计算机视觉等.
  • 学习 即模拟人的学习能力,主要研究如何从样例或与环境交互中进行学习. 主要研究领域包括监督学习、无监督学习和强化学习等.
  • 认知 即模拟人的认知能力,主要研究领域包括知识表示、自然语言理解、推理、规划、决策等.

专家系统
可以简单理解为“知识库+ 推理机”,是一类具有专门知识和经验的计算机智能程序系统. 专家系统一般采用知识表示和知识推理等技术来完成通常由领域专家才能解决的复杂问题,因此专家系统也被称为基于知识的系统. 一个专家系统必须具备三要素:(1)领域专家级知识;(2)模拟专家思维;(3)达到专家级的水平.

image-20220309153050204

机器学习的主要目的是设计和分析一些学习算法,让计算机可以从数据(经验)中自动分析获得规律,并利用学习到的规律对未知数据进行预测,从而帮助人们完成一些特定任务,提高开发效率.

1.2 机器学习

传统的机器学习主要关注于如何学习一个预测模型. 一般需要首先将数据表示为一组特征(Feature),特征的表示形式可以是连续的数值、离散的符号或其他形式. 然后将这些特征输入到预测模型,并输出预测结果. 这类机器学习可以看作是浅层学习(Shallow Learning). 浅层学习的一个重要特点是不涉及特征学习,其特征主要靠人工经验或特征转换方法来抽取.

在实际任务中使用机器学习模型一般会包含以下几个步骤(如图1.2所示):

image-20220310140549232

(1) 数据预处理:经过数据的预处理,如去除噪声等. 比如在文本分类中,去除停用词等.
(2) 特征提取:从原始数据中提取一些有效的特征. 比如在图像分类中,提取边缘、尺度不变特征变换(Scale Invariant Feature Transform,SIFT)特征等.

(3) 特征转换:对特征进行一定的加工,比如降维和升维. 降维包括特征抽取(Feature Extraction)和特征选择(Feature Selection)两种途径. 常用的特征转换方法有主成分分析(Principal Components Analysis,PCA)线性判别分析(Linear Discriminant Analysis,LDA)等.

(4) 预测:机器学习的核心部分,学习一个函数进行预测。

实际操作过程中,不同预测模型的性能相差不多,而前三步中的特征处理对最终系统的准确性有着十分关键的作用. 特征处理一般都需要人工干预完成,利用人类的经验来选取好的特征,并最终提高机器学习系统的性能. 因此,很多的机器学习问题变成了特征工程(Feature Engineering)问题. 开发一个机器学习系统的主要工作量都消耗在了预处理、特征提取以及特征转换上.

1.3 表示学习

​ 为了提高机器学习系统的准确率,我们就需要将输入信息转换为有效的特征,或者更一般性称为表示(Representation). 如果有一种算法可以自动地学习出有效的特征,并提高最终机器学习模型的性能,那么这种学习就可以叫做表示学习(Representation Learning).

1.3.1 语义鸿沟

​ 表示学习的关键是解决语义鸿沟(Semantic Gap)问题. 语义鸿沟问题是指输入数据的底层特征和高层语义信息之间的不一致性和差异性. 比如给定一些关于“车”的图片,由于图片中每辆车的颜色和形状等属性都不尽相同,因此不同图片在像素级别上的表示(即底层特征)差异性也会非常大。

​ 在表示学习中,有两个核心问题:一是“什么是一个好的表示”;二是“如何学习到好的表示”.

(1) 一个好的表示应该具有很强的表示能力,即同样大小的向量可以表示更多信息.
(2) 一个好的表示应该使后续的学习任务变得简单,即需要包含更高层的语义信息.
(3) 一个好的表示应该具有一般性,是任务或领域独立的. 虽然目前的大部分表示学习方法还是基于某个任务来学习,但我们期望其学到的表示可以比较容易地迁移到其他任务上.

在机器学习中,我们经常使用两种方式来表示特征:局部表示(Local Representation)和分布式表示(Distributed Representation).

​ 以颜色表示为例,我们可以用很多词来形容不同的颜色,除了基本的“红”、“蓝”、“绿”、“白”、“黑”等之外,有很多以地区或物品命名的,比如“中国红”、“天蓝色”、“咖啡色”、“琥珀色”等. 如果要在计算机中表示颜色,一般有两种表示方法.一种表示颜色的方法是以不同名字来命名不同的颜色,这种表示方式叫做局部表示,也称为离散表示或符号表示.

​ 另一种表示颜色的方法是用RGB 值来表示颜色,不同颜色对应到R、G、B 三维空间中一个点,这种表示方式叫做分布式表示.分布式表示通常可以表示为低维的稠密向量.(分布式表示叫做分散式表示可能更容易理解,即一种颜色的语义分散到语义空间中的不同基向量上.)

和局部表示相比,分布式表示的表示能力要强很多,分布式表示的向量维度一般都比较低.

image-20220310153326026

​ 我们可以使用神经网络来将高维的局部表示空间$ℝ^{|𝒱|}$ 映射到一个非常低维的分布式表示空间$ℝ^𝐷, 𝐷 ≪ |𝒱|$. 在这个低维空间中,每个特征不再是坐标轴上的点,而是分散在整个低维空间中. 在机器学习中,这个过程也称为嵌入(Embedding).嵌入通常指将一个度量空间中的一些对象映射到另一个低维的度量空间中,并尽可能保持不同对象之间的拓扑关系. 比如自然语言中词的分布式表
示,也经常叫做词嵌入.

1.3.2 表示学习

​ 要学习到一种好的高层语义表示(一般为分布式表示),通常需要从底层特征开始,经过多步非线性转换才能得到. 一个深层结构的优点是可以增加特征的重用性,从而指数级地增加表示能力. 因此,表示学习的关键是构建具有一定深度的多层次特征表示[Bengio et al., 2013].

1.4 深度学习

​ 为了学习一种好的表示,需要构建具有一定“深度”的模型,并通过学习算法来让模型自动学习出好的特征表示(从底层特征,到中层特征,再到高层特征),从而最终提升预测模型的准确率. 所谓“深度”是指原始数据进行非线性特征转换的次数. 如果把一个表示学习系统看作是一个有向图结构,深度也可以看作是从输入节点到输出节点所经过的最长路径的长度.

​ 这样我们就需要一种学习方法可以从数据中学习一个“深度模型”,这就是深度学习(Deep Learning,DL). 深度学习是机器学习的一个子问题,其主要目的是从数据中自动学习到有效的特征表示.

image-20220317223914338

​ 图1.4给出了深度学习的数据处理流程. 通过多层的特征转换,把原始数据变成更高层次、更抽象的表示. 这些学习到的表示可以替代人工设计的特征,从而避免“特征工程”

​ 深度学习是将原始的数据特征通过多步的特征转换得到一种特征表示,并进一步输入到预测函数得到最终结果.

​ 和“浅层学习”不同,深度学习需要解决的关键问题是贡献度分配问题(Credit Assignment Problem,CAP)[Minsky, 1961],即一个系统中不同的组件(component)或其参数对最终系统输出结果的贡献或影响. 以下围棋为例,每当下完一盘棋,最后的结果要么赢要么输. 我们会思考哪几步棋导致了最后的胜利,或者又是哪几步棋导致了最后的败局. 如何判断每一步棋的贡献就是贡献度分配问题,这是一个非常困难的问题. 从某种意义上讲,深度学习可以看作是一种强化学习(Reinforcement Learning,RL),每个内部组件并不能直接得到监督信息,需要通过整个模型的最终监督信息(奖励)得到,并且有一定的延时性.

​ 目前,深度学习采用的模型主要是神经网络模型,其主要原因是神经网络模型可以使用误差反向传播算法,从而可以比较好地解决贡献度分配问题. 只要是超过一层的神经网络都会存在贡献度分配问题,因此超过一层的神经网络都可以看作是深度学习模型. 随着深度学习的快速发展,模型深度也从早期的5 ∼ 10 层到目前的数百层. 随着模型深度的不断增加,其特征表示的能力也越来越强,从而
使后续的预测更加容易.

1.4.1 端到端学习

​ 在一些复杂任务中,传统机器学习方法需要将一个任务的输入和输出之间人为地切割成很多子模块(或多个阶段),每个子模块分开学习。这种学习方式有两个问题:一是每一个模块都需要单独优化,并且其优化目标和任务总体目标并不能保证一致;二是错误传播,即前一步的错误会对后续的模型造成很大的影响. 这样就增加了机器学习方法在实际应用的难度.

端到端学习(End-to-End Learning),也称端到端训练,是指在学习过程中不进行分模块或分阶段训练,直接优化任务的总体目标. 在端到端学习中,一般不需要明确地给出不同模块或阶段的功能,中间过程不需要人为干预. 端到端学习的训练数据为“输入-输出”对的形式,无需提供其他额外信息. 因此,端到端学习和深度学习一样,都是要解决贡献度分配问题. 目前,大部分采用神经网络模型的深度学习也可以看作是一种端到端的学习.

1.5 神经网络

​ 在机器学习领域,神经网络是指由很多人工神经元构成的网络结构模型,这些人工神经元之间的连接强度是可学习的参数.

1.5.1 人脑神经网络

image-20220317223938827

​ 在人脑神经网络中,每个神经元本身并不重要,重要的是神经元如何组成网络. 不同神经元之间的突触有强有弱,其强度是可以通过学习(训练)来不断改变的,具有一定的可塑性. 不同的连接形成了不同的记忆印痕.

​ 如果两个神经元总是相关联地受到刺激,它们之间的突触强度增加. 这样的学习方法被称为赫布型学习(Hebbian learning). Hebb 认为人脑有两种记忆:长期记忆和短期记忆. 短期记忆持续时间不超过一分钟. 如果一个经验重复足够的次数,此经验就可储存在长期记忆中. 短期记忆转化为长期记忆的过程就称为凝固作用. 人脑中的海马区为大脑结构凝固作用的核心区域.

1.5.2 人工神经网络

​ 人工神经网络是为模拟人脑神经网络而设计的一种计算模型,它从结构、实现机理和功能上模拟人脑神经网络. 人工神经网络与生物神经元类似,由多个节点(人工神经元)互相连接而成,可以用来对数据之间的复杂关系进行建模. 不同节点之间的连接被赋予了不同的权重,每个权重代表了一个节点对另一个节点的影响大小. 每个节点代表一种特定函数,来自其他节点的信息经过其相应的权
重综合计算,输入到一个激活函数中并得到一个新的活性值(兴奋或抑制). 从系统观点看,人工神经元网络是由大量神经元通过极其丰富和完善的连接而构成的自适应非线性动态系统.

​ 虽然我们可以比较容易地构造一个人工神经网络,但是如何让人工神经网络具有学习能力并不是一件容易的事情. 早期的神经网络模型并不具备学习能力. 感知器是最早的具有机器学习思想的神经网络,但其学习方法无法扩展到多层的神经网络上. 直到1980年左右,反向传播算法才有效地解决了多层神经网络的学习问题,并成为最为流行的神经网络学习算法.

​ 人工神经网络诞生之初并不是用来解决机器学习问题. 由于人工神经网络可以看作是一个通用的函数逼近器,一个两层的神经网络可以逼近任意的函数,因此人工神经网络可以看作是一个可学习的函数,并应用到机器学习中. 理论上,只要有足够的训练数据和神经元数量,人工神经网络就可以学到很多复杂的函数. 我们可以把一个人工神经网络塑造复杂函数的能力称为网络容量(Network
Capacity),与可以被储存在网络中的信息的复杂度以及数量相关.

​ [Rosenblatt, 1958] 提出了一种可以模拟人类感知能力的神经网络模型,称为感知器(Perceptron),并提出了一种接近于人类学习过程(迭代、试错)的学习算法.

反向传播算法是迄今最为成功的神经网络学习算法. 目前在深度学习中主要使用的自动微分可以看作是反向传播算法的一种扩展.

​ 然而,梯度消失问题(Vanishing Gradient Problem)阻碍神经网络的进一步发展,特别是循环神经网络. 为了解决这个问题,[Schmidhuber, 1992] 采用两步来训练一个多层的循环神经网络:(1)通过无监督学习的方式来逐层训练每一层循环神经网络,即预测下一个输入;(2)通过反向传播算法进行精调.

​ 1995~2006 年,在此期间,支持向量机和其他更简单的方法(例如线性分类器)在机器学习领域的流行度逐渐超过了神经网络.

深度学习的崛起[Hinton et al., 2006] 通过逐层预训练来学习一个深度信念网络,并将其权重作为一个多层前馈神经网络的初始化权重,再用反向传播算法进行精调. 深度信念网络参见第12.3 节.这种“预训练+ 精调”的方式可以有效地解决深度神经网络难以训练的问题. 随着深度神经网络在语音识别[Hinton et al., 2012] 和图像分类[Krizhevsky et al., 2012] 等任务上的巨大成功,以神经网络为基础的深度学习迅速崛起. 近年来,随着大规模并行计算以及GPU 设备的普及,计算机的计算能力得以大幅提高. 此外,可供机器学习的数据规模也越来越大. 在强大的计算能力和海量的数据规模支持下,计算机已经可以端到端地训练一个大规模神经网络,不再需要借助预训练的方式. 各大科技公司都投入巨资研究深度学习,神经网络迎来第三次高潮.

1.6 本书的知识体系

image-20220317224002604

1.7 常用的深度学习框架

​ 在深度学习中,一般通过误差反向传播算法来进行参数学习. 采用手工方式来计算梯度再写代码实现的方式会非常低效,并且容易出错. 此外,深度学习模型需要的计算机资源比较多,一般需要在CPU 和GPU 之间不断进行切换,开发难度也比较大. 因此,一些支持自动梯度计算、无缝CPU 和GPU 切换等功能的深度学习框架就应运而生. 比较有代表性的框架包括:Theano、Caffe、TensorFlow、Pytorch、飞桨(PaddlePaddle)、Chainer 和MXNet 等.

​ 要理解深度学习的意义或重要性,就得从机器学习或者是人工智能的更广的视角来分析. 在传统机器学习中,除了模型学习算法外,特征或表示也是影响最终学习效果的重要因素,甚至在很多的任务上比算法更重要. 因此,要开发一个实际的机器学习系统,人们往往需要花费大量的精力去尝试设计不同的特征以及特征组合,来提高最终的系统能力,这就是所谓的特征工程问题.

​ 如何自动学习有效的数据表示成为机器学习中的关键问题. 早期的表示学习方法,比如特征抽取特征选择,都是人工引入一些主观假设来进行学习的. 这种表示学习不是端到端的学习方式,得到的表示不一定对后续的机器学习任务有效. 而深度学习是将表示学习和预测模型的学习进行端到端的学习,中间不需要人工干预. 深度学习所要解决的问题是贡献度分配问题,而神经网络恰好是解决这个问题的有效模型. 套用马克思的一句名言“金银天然不是货币,但货币天然是金银”,我们可以说,神经网络天然不是深度学习,但深度学习天然是神经网络.目前,深度学习主要以神经网络模型为基础,研究如何设计模型结构,如何有效地学习模型的参数,如何优化模型性能以及在不同任务上的应用等. [Bengioet al., 2013] 给出了一个很好的表示学习综述. 若希望全面了解人工神经网络和深度学习的知识,可以参考《Deep Learning》[Goodfellow et al., 2016] 以及文献[Bengio, 2009]. 关于神经网络的历史可以参考文献[Anderson et al., 2000]. 斯坦福大学的CS231n1 和CS224n2是两门非常好的深度学习入门课程,分别从计算机视觉和自然语言处理两个角度来讲授深度学习的基础知识和最新进展.

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2022-2024 lk
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信