文章目录[+]
多年以后,面对李世石与 AlphaGo 的厮杀,加里·卡斯帕罗夫将会回想起,与深蓝对弈的那个遥远的下午。彼时的对手是一个庞大的超级计算机,记下变化多端的开局,以固定的逻辑决策应对中局,穷极所有可能性筛选残局。人工智能蹒跚学步之时,许多概念尚且是空中楼阁,计算机能够战胜优秀的人类围棋选手,这样的想法不啻于天方夜谭。棋类游戏的核心在于根据棋局判断下一手的最优下法,深蓝通过穷举的方法在国际象棋的棋局中解决了这个问题。在 64 格的国际象棋棋盘上,深蓝的运算能力决定了它能算出 12 手棋之后的局面下的最优解,而身为人类棋手执牛耳者的卡斯帕罗夫最多只能算出 10 手棋,多出来的两手棋就会成为左右战局的关键因素。
深蓝的核心在于“算”:利用强大的计算资源来优化目标函数。深蓝本身就是一套专用于国际象棋的硬件,大部分逻辑规则是以特定的象棋芯片电路实现,辅以较少量负责调度与实现高阶功能的软件代码。其算法的核心是暴力穷举:生成所有可能的下法,然后执行尽可能深的搜索,并不断对局面进行评估,尝试找出最佳的一手。可在围棋棋盘上,可以落子的点数达到了 361 个。别说 12 手棋,就是 6 手棋的运算量都已经接近于天文数字!这使得计算机相对于人脑的运算优势变得微不足道,走出优于人类棋手的妙手的概率也微乎其微,这也是为什么计算机会在围棋领域被看衰的原因。
围棋的棋盘状态远比国际象棋复杂,以穷举法进行最优落子策略的推演无异于痴人说梦。事实上,顶级的围棋棋手更多地依赖模糊的直觉来评判特定的棋盘状态的好坏。但理性推演与感性判断之间似乎存在着不可逾越的巨大鸿沟,尤其是对于计算机程序而言,依赖直觉是不可能的事情。因此并没有显而易见的方式来将国际象棋领域的成功复制到围棋上,直到 AlphaGo 的横空出世。与深蓝相比,AlphaGo 的核心则在于“想”。与专用硬件深蓝不同,AlphaGo 是一套能够运行在通用硬件之上的纯软件程序。它汲取了人类棋手海量的棋谱数据,并依赖人工神经网络和深度学习技术从这些数据中学会了预测人类棋手在任意的棋盘状态下走子的概率,模拟了以人类棋手的思维方式对棋局进行思考的过程。
与深蓝的区别正是 AlphaGo 的突破之处。早期的计算机就已经被用来搜索优化已有函数的方式,深蓝的特点仅仅在于搜索的目标是优化尽管复杂但是形式大多数由已有的国际象棋知识表达的函数,其思想与人工智能早期的多数程序并无二致。而在整个算法中,除了“获胜”这个概念,AlphaGo 对于围棋规则一无所知,更遑论定式等围棋的高级专门概念了。这也是 AlphaGo 和深蓝的本质区别。同是战胜了棋类世界冠军,深蓝仍然是专注于国际象棋的、以暴力穷举为基础的专用人工智能;AlphaGo 是几乎没有特定领域知识的、基于机器学习的、更加通用的人工智能。
但 AlphaGo 的故事还远没有结束,2017 年 10 月,其升级版 AlphaGo Zero 诞生。自学成才 AlphaGo Zero 完全抛弃了来自棋谱数据的人类经验,而是通过左右互搏(自己和自己对弈)迅速提升棋力,在 AlphaGo 的基础上青出于蓝。放在人类世界里,这就如一个从没上过学的学霸靠自己刷题复习,刷了一个月就拿到高考状元般不可思议。可仅仅一个月后,DeepMind 又推出了 AlphaGo Zero 的升级版:AlphaZero。AlphaZero 一不需要人工特征,二不需要棋谱知识,三不需要特定优化,可就是这个“三无”算法实现了对围棋、国际象棋和日本将棋的通吃,以摧枯拉朽之势横扫这些棋类游戏的顶级算法,再一次向世人展示了它的无穷潜力。
AlphaGo 的胜利也是深度学习的胜利。深度学习是利用包含多个隐藏层的人工神经网络实现的学习。在介绍多层感知器时,我提到在原理上,两个隐藏层足以解决任何类型的非线性分类问题,因而浅层神经网络最多只会包含两个隐藏层。相比于浅层神经网络,正是这“多个”隐藏层给深度学习带来了无与伦比的优势。在深度学习中,每个层可以对数据进行不同水平的抽象,层间的交互能够使较高层在较低层得到的特征基础上实现更加复杂的特征提取。不同层上特征的组合既能解决更加复杂的非线性问题,也能识别更加复杂的非线性模式。
与人工神经网络一样,深度学习的思想同样来源于生理学上的研究进展。1981 年,两位神经生物学家大卫·胡贝尔和托尔斯滕·魏泽尔连同另一位科学家分享了诺贝尔医学奖,他们二位的主要贡献在于“发现了视觉系统的信息处理方式,即可视皮层是分级的”。1958 年,胡贝尔和魏泽尔在美国的约翰霍普金斯大学开展关于瞳孔区域与大脑皮层神经元对应关系的研究。他们给小猫展现形状和亮度各不相同的物体,并改变每个物体放置的位置与角度。在这一过程中,小猫的瞳孔感受不同类型和不同强度的刺激,小猫的后脑上则被插入电极,用来测量神经元的活跃程度。
这一实验的目的是验证一个假设:位于后脑皮层的不同视觉神经元与瞳孔感受到的刺激信号之间,存在某种相关性。一旦瞳孔受到某种特定的刺激,后脑皮层的某些特定神经元就会活跃。经过长期的实验,胡贝尔和魏泽尔发现了“方向选择性细胞”:当瞳孔发现了眼前物体的边缘,而且这个边缘指向某个方向时,这种神经元细胞就会活跃。这一发现不仅在生理学上具有里程碑式的意义,更是无心插柳地促成了人工智能在四十年后的突破性发展。方向选择性细胞的发现表明,神经 - 中枢 - 大脑的工作过程,或许正是一个不断迭代、不断抽象的过程。人眼处理来自外界的视觉信息时,首先提取出目标物的边缘特性,再从边缘特性中提取出目标物的特征,最后将不同特征组合成相应的整体,进而准确地区分不同的物体。在这个过程中,高层特征是低层特征的组合,从低层到高层,特征变得越来越抽象,语义的表现就越来越清晰,对目标物的识别也就越来越精确。
这一实验的目的是验证一个假设:位于后脑皮层的不同视觉神经元与瞳孔感受到的刺激信号之间,存在某种相关性。一旦瞳孔受到某种特定的刺激,后脑皮层的某些特定神经元就会活跃。经过长期的实验,胡贝尔和魏泽尔发现了“方向选择性细胞”:当瞳孔发现了眼前物体的边缘,而且这个边缘指向某个方向时,这种神经元细胞就会活跃。这一发现不仅在生理学上具有里程碑式的意义,更是无心插柳地促成了人工智能在四十年后的突破性发展。方向选择性细胞的发现表明,神经 - 中枢 - 大脑的工作过程,或许正是一个不断迭代、不断抽象的过程。人眼处理来自外界的视觉信息时,首先提取出目标物的边缘特性,再从边缘特性中提取出目标物的特征,最后将不同特征组合成相应的整体,进而准确地区分不同的物体。在这个过程中,高层特征是低层特征的组合,从低层到高层,特征变得越来越抽象,语义的表现就越来越清晰,对目标物的识别也就越来越精确。
另一方面,多个隐藏层的使用引入了大量隐藏神经元,这使得深度神经网络的参数将以指数形式增加,给网络的训练带来沉重的计算负荷。而基于向量和矩阵计算的图形处理单元(graphical processing unit, GPU)完美解决了这一问题,其庞大的处理吞吐量能够使深度神经网络的训练显著提速,因而也成了深度学习的标配硬件。如果说深度学习是一台探矿机,大数据就是那座有待挖掘的金矿,计算能力的进展则为这台探矿机提供了源源不断的动力。尽管取得了很多成果,但关于深度学习技术的争论正显出愈演愈烈的趋势,“深度学习是炼金术”的争议更是让不少大咖针锋相对,嘴仗打个不停。研究者批判深度学习的一个焦点在于其缺乏坚实的理论基础。在机器学习和浅层神经网络中,绝大部分最优解的最优性都是可以证明的。但在深度学习中,很多结果都是经验性而非理论性的,隐隐透出一丝看天吃饭的无力感。
深度前馈网络(Deep Feedforward Network)是具有深度结构的前馈神经网络,可以看成是进化版的多层感知器。与只有一个或两个隐藏层的浅层网络相比,深度前馈网络具有更多的隐藏层数目,从而具备了更强的特征提取能力。深度前馈网络不考虑输入数据可能具备的任何特定结构,也就是不使用关于数据的先验信息。但特征提取能力增强的代价是运算复杂度的提升。因而,网络架构的建立、损失函数的选择、输出单元和隐藏单元的设计、训练误差的处理等问题就成为深度前馈网络设计中的一系列核心问题。
在深度前馈网络的设计中,确定架构是首要考虑的关键问题。架构决定着网络中包含多少基本单元,以及这些基本单元之间如何相互连接。几乎所有前馈网络采用的都是链式架构,即前一层的输出是后一层的输入。在这样的链式架构中,层的数目和每一层中神经元的数目就是网络的主要变量。介绍多层感知器时我曾提到了通用逼近的性质,这个性质的严格形式是通用逼近定理。通用逼近定理的内容是如果一个前馈网络具有单个隐藏层,这个隐藏层又有足够但是有限数目的神经元,这个神经网络就可以以任意精度逼近任意连续函数。虽然在这个定理的初始证明中,隐藏神经元的传递函数是具有“挤压”性质的非线性函数,但定理的成立性实际上并不取决于传递函数的性质,而是由网络的前馈架构所决定的。
通用逼近定理是一个存在性定理,它说明需要的神经网络是肯定存在的,却并没有指明具体的构造方法。所以在给定一个目标函数时,我们可以确定单隐藏层的感知器一定能够将它表示出来,却对隐藏层需要多少神经元毫无把握。这个数目很可能是个天文数字,这会让网络结构在计算机上根本无法实现。即使能够设计出这么复杂的算法,要对它进行训练和泛化也近乎天方夜谭。深度前馈网络的出现克服的正是单隐藏层带来的复杂性问题:使用深度架构的模型既能减少表示目标函数时所需要的单元数量,也能有效降低泛化误差,在一定程度上抑制过拟合的发生。深度架构对复杂函数具有更强的表示能力,这一点已经在数学上得到证明。除此之外,深度架构也暗含了这样的假设:待学习的复杂函数可以视为若干简单函数的层次化结合。由于深度学习的思想本就借鉴自神经科学,这个假设也就合情合理了。
在层与层之间,深度架构采用的最常见的方式是全连接,意味着相邻层次中的任意神经元都两两相连。全连接是最简单也最复杂的架构,说它简单是因为连接方式只有一种选择,不需要考虑保留哪些连接或是放弃哪些连接;说它复杂是因为这种方式需要确定的参数最大,给网络训练带来了很大的麻烦。目前也有大量神经网络使用了稀疏的连接方式,这需要结合应用场景具体分析。任何机器学习算法都可以看成是对某个预设函数的最优化方法,深度前馈网络也不例外。与其他神经网络一样,深度前馈网络也利用梯度信息进行学习,在处理误差时采用的是反向传播方法,利用反向传播求出梯度后再使用随机梯度下降法寻找损失函数的最小值。但深度网络的非线性特性常常会影响到学习算法的收敛性能,这也是使用非线性函数的神经网络的一个固有特性。
在学习中,损失函数的选择是深度神经网络设计中另一个重要环节。深度前馈网络选择损失函数的准则与其他机器学习算法并无二致:回归问题的损失函数通常是最小均方误差,而分类问题的损失函数通常是交叉熵(Cross-Entropy)。交叉熵描述的是真实的数据分布和神经网络输出分布之间的差异性。当我们使用神经网络的输出去预测符合真实分布的测试数据时,网络输出并不能完全消除关于测试数据的不确定性。这部分剩余的不确定性可以由泛化误差体现,在信息论中则由交叉熵来定义。
如果 p(x) 和 q(x) 是两个离散分布,则两者的交叉熵可以表示为
在深度前馈网络中,损失函数被定义为分类结果 y 关于训练数据 x 的条件概率的负对数之和
确定损失函数后,网络的训练过程就是找到使以上表达式最小的参数 θ 的过程。其实无论是最小均方误差还是交叉熵,体现的都是概率论中最大似然估计的原理。最小均方误差与最大似然估计的关系在线性回归算法中已有说明,你可以回忆一下。而分类问题中,只要条件概率具有高斯分布的形式,训练数据与模型分布之间的交叉熵的最大化与最小均方误差同样殊途同归。使用对数似然作为损失函数的一个优点是它的通用性,概率论上的直观意义使它适用于几乎所有的模型。另一个好处则体现在它可以避免因损失函数饱和造成的梯度消失,这是由于对数操作可以抵消掉大部分传递函数中的指数效果,从而更清晰地展示出变化趋势。
损失函数的表示与输出单元的选择密切相关,输出单元的传递函数决定了交叉熵的具体表达式。输出层的作用是对隐藏层提取出的特征施加额外的变换以得到输出,变换的形式则有多种选择。最简单的变换形式就是线性变换,它将隐藏特征的线性组合作为输出,简单而实用。除了线性变换,对数几率函数也是一种常用的变换函数,其形式在机器学习模块的逻辑回归中已经做过介绍。对数几率函数得到的是一类软输出,因为它能将隐藏特征的线性组合映射到概率之上。将对数几率函数加以推广就可以得到 softmax 函数,也叫柔性最大值函数。对数几率函数只能解决二分类问题,softmax 函数则可以解决多分类问题,也就是每个样本可以同时属于不同的类别。softmax 函数的形式同样在逻辑回归中做了介绍,你可以回忆一下。
前面介绍的三种传递函数是输出单元的常见选择,对大部分机器学习模型是通用的。而在深层前馈网络的设计中,一个独有的问题就是隐藏单元的设计,也就是隐藏神经元的传递函数如何选择。但这个问题目前尚不存在放之四海而皆准的通用准则,关于这个环节的有限知识全都集中在一类常用的激活函数上,也就是整流线性单元(Rectified Linear Unit, ReLU)。整流线性单元是隐藏单元理想设计的万金油,当你不知道选择何种激活函数时,那么用它准保没错。整流线性单元的数学表达式是
整流线性单元在一半定义域上取值为 0,在另一半定义域上则处于激活状态。虽然在 0 点这个间断点上不满足可微的条件,但在激活的区域上,整流线性单元的一阶导数是常数 1,二阶导数则恒等于 0。相比于引入二阶效应的其他激活函数,整流线性单元的梯度方向在学习中具有更大的用处。整流线性单元的一个缺点是它可能会“杀死”特定的隐藏神经元,因为一旦取值为 0,这个函数就不会重新激活。解决这个问题的方法是对原始函数做一些微小的修正,得到的变体包括渗漏整流单元(Leaky ReLU)和指数整流单元(Exponential ReLU),它们的共同点是将原来的 0 输出替换为一个较小的数值,以避免神经元的失效。
除了整流线性单元之外,对数几率函数和双曲正切函数等其他函数也可以用于隐藏神经元中,但并不常见。相比于这些函数,整流线性单元的优势在于它的线性特性,这一性质使得模型更加容易优化,对黑箱中的隐藏神经元而言尤其如此。可如果要针对执行特定任务的深度前馈网络选择最优化的隐藏单元,就是个依赖经验的过程。想要预测哪种隐藏单元的性能最佳完全依赖于直觉,至于直觉靠不靠谱,就得通过验证数据集来检验训练效果。从这个角度看,说深度学习是撞大运的炼金术不是没有道理的。
正则化(Regularization)作为抑制过拟合的手段,是机器学习和深度学习之中必不可少的环节,具有举足轻重的地位。好的机器学习算法不仅要在训练集上表现出色,当推广到未知的测试数据时,其优良的性能依然能够得以保持。正则化就是一类通过显式设计降低泛化误差,以提升算法通用性的策略的统称。由于深度学习中涉及的参数众多,正则化就变得尤为重要。正则化被定义为对学习算法的修改,这些修改的目的在于减少泛化误差。通常说来,泛化误差的下降是以训练误差的上升为代价的,但有些算法也能兼顾泛化误差和训练误差的良好性能。
正则化处理可以看成是奥卡姆剃刀原则(Occam's razor)在学习算法上的应用。奥卡姆剃刀原则的表述是:“当两个假说具有完全相同的解释力和预测力时,以那个较为简单的假说作为讨论依据。”在机器学习中,正则化处理得到的正是更加简单的模型。从概率论角度看,许多正则化技术对应的是在模型参数上施加一定的先验分布,其作用是改变泛化误差的结构。正则化是对欠拟合和过拟合的折中,在不过度增加偏差的情况下显著减少方差。正则化能够改变数据分布,让通过模型得到的数据分布尽可能和真实的数据生成过程相匹配。
虽然目前在深度学习中应用的正则化方式称得上“八仙过海,各显神通”,却并不存在能够系统描述这些方法、并进一步指导设计的通用主线。因此,要从通观全局的角度看待正则化处理,还是要“不忘初心”,从根本目的着眼。机器学习的任务是拟合出一个从输入 x 到输出 y 的分布,拟合的过程是使期望风险函数最小化的过程。正则化处理使待最小化的函数中既包含结构化的误差函数,也包含人为引入的正则化项。由于未知分布的期望风险不能直接求解,因而需要引入训练数据集,以在训练数据集上计算出的经验风险来近似期望风险,并通过经验风险最小化实现期望风险最小化。
以上就是学习算法的整体流程,也是正则化大展拳脚的主战场,正则化的处理就是针对学习算法中的不同变量来展开的。这样看来,正则化策略就可以分为以下几类:基于训练数据(data)的正则化基于网络架构(network architecture)的正则化基于误差函数(error function)的正则化基于正则化项(the regularization term)的正则化基于最优化过程(optimization)的正则化
训练模型的质量很大程度上取决于训练数据。 除了选择噪声较小的训练数据外,还可以通过正规化来提升训练数据的质量。正则化处理数据的一个目的是执行预处理和特征提取,从而将特征空间或数据分布修改为其他形式; 另一个目的是通过生成新样本来创建具有更大容量、甚至是无限容量的增强数据集。这两个目的之间相互独立,因而可以结合起来使用。对训练数据正则化的做法是在训练数据集上施加变换,从而产生新的训练数据集。变换的形式是以满足某种概率分布的随机变量为自变量的函数,最简单的实例就是向数据添加随机的高斯噪声。由于提升机器学习模型泛化性能最直接的办法就是使用更多的数据进行训练,因而使用随机参数的变换可以用于生成“假”数据,这种方法被称为数据集增强(data augmentation)。
数据集增强的对象通常只包括输入层和隐藏层,而不包括输出层。这样做的效果是将训练数据集映射到一个新的概率分布上,并用这个新分布来计算经验风险函数。变换中参数的随机性使我们可以在不同的参数之下生成多组新数据,从而通过数据量的增加来减小期望风险和经验风险之间的差别。除了数据集增强外,另一种针对训练数据的正则化方法是 Dropout。Dropout 是一种集成方法,通过结合多个模型来降低泛化误差。之所以说 Dropout 属于基于训练数据的正则化,是因为它构造不同的数据集来训练不同的模型,每个数据集则通过对原始数据集进行“有放回采样”得到。
Dropout 的关键想法是在训练期间从神经网络中随机丢弃神经元及其连接,得到简化的网络。而在测试时,一个简单的小权重网络就可以逼近所有这些简化网络的预测的平均效果。其优点在于计算简单方便,同时还具有对不同的模型和训练过程的普适性。但 Dropout 对训练集容量的要求很高,少量训练样本并不能发挥其优势。从输入到输出的映射必须具有某些特质才能很好地适应数据,而对输入 - 输出映射进行假设的方法正对应着网络结构的选择,这激发了基于网络架构的正则化方法。对映射的假设既可以关注深度网络中不同层次的具体操作,也可以关注层与层之间的连接方式。基于网络架构的正则化通常会简化关于映射的假设,再让网络架构逐步逼近简化后的映射。这限制了模型的搜索空间,为找到更好的解提供了可能性。
参数共享(weight sharing)是一类重用参数的正则化方法。通过强迫某些参数相等,可以让不同模型共享唯一的参数,从而让它们对相似的输入产生相似的输出。如果放宽参数共享的条件,使它们不必完全相等而是相互接近,对应的就是对参数范数添加正则化项。常用的参数共享方法是将一个监督学习模型的参数正则化,令其接近另一个无监督学习的模型,那么这个无监督学习模型就可以匹配监督模型的参数。另一种针对网络架构的处理是对传递函数的正则化(activation regularization)。一些传递函数是专门为正则化设计的,比如在 Dropout 中使用的 maxout 单元,它能在测试时更精确地近似模型集合预测结果的几何平均值。而通过添加噪声,原始的确定传递函数就可以被泛化为随机模型,其分布特性也就可以被利用起来。
基于误差函数的正则化和基于正则化项的正则化可以放在一起讨论。理想情况下,误差函数应当适当地反映算法的性能,并体现出数据分布的一些特点(比如均方误差或交叉熵)。对误差函数进行正则化就相当于添加额外的学习任务,从而导致其目标发生变化,这部分变化就会体现在误差函数中额外的正则化项上。因而在大部分情况下,对基于正则化项的正则化的讨论就包含了基于误差函数的正则化。正则化项也叫做惩罚项。与误差函数不同,正则化项与目标无关,而是用于表示所需模型的其他属性。误差函数表示的是算法输出与目标输出之间的一致性,正则化项表示的则是关于映射关系的额外的假设。 这一特点决定了正则化项的值可以通过未标记的测试样本来计算,利用测试数据改进学习模型。
常用的正则化项是权重衰减项(weight decay)。深度学习中的参数包括每个神经元中的权重系数和偏置。由于每个权重会指定两个变量之间相互作用的方式,因而拟合权重所需要的数据量要比拟合偏置多得多。相比之下,每个偏置只控制一个变量,即使不对它做正则化也不会产生太大方差,正则化的方式不对反而还会增加算法的偏差。这是正则化的对象只包括权重而不包括偏置的原因。在权重衰减中,正则化项是以范数的形式表示的,常用的范数包括 L2 范数和 L1 范数。回忆一下,当这两种范数作为正则化项被应用在线性回归中时,分别对应着岭回归和 LASSO 回归。
L2 范数作为正则化项时,其作用是使权重系数更加接近原点。引入权重衰减后,在每一步的梯度更新之前,权重向量都会被收缩。整体来看,这使得在显著减小目标函数方向上的权重保留完好,无益于目标函数减小的方向所对应的分量则会因正则化而被逐渐地衰减掉。从泛化误差的角度来说,L2 范数能够感知具有较高方差的输入,与这些输入特征相关的权重则被收缩。相比之下,L1 范数和 L2 范数有本质上的区别。L1 正则化得到的是稀疏的解,它将一部分较小的权重直接砍掉。这样做可以从可用的特征子集中选择出有意义的特征,从而简化学习问题。
最后一类正则化方法是基于最优化过程的正则化。根据其作用阶段的不同,这类正则化方法可以分为三种:对初始化(initialization)的正则化,对参数更新(weight update)的正则化,对终止条件(termination)的正则化。对初始化的正则化影响的是权重系数的最初选择,这既可以通过在特定的概率分布中选择初始参数完成,也可以经由预训练实现。对参数更新的正则化则包括对更新规则的改进和对权重参数的过滤。早停(early dropping)是一类重要的正则化方法,它是针对终止条件的正则化。当训练的表示能力过强时,泛化误差会呈现出 U 形:随着训练时间的增加先降低再升高。这意味着只有返回使泛化误差最低的参数集设置,才能得到更低的泛化误差。当测试集上的泛化误差在预先指定的循环次数内没有改善时,训练就会终止,这种策略就是早停。
早停的简单性和有效性使它成为深度学习中应用最广泛的正则化方法。它不需要改变训练过程,也就不会影响到学习动态,唯一要注意的问题就是要避免陷入局部最优解。早停的正则化效果在数学上也有解释,在简单的模型下,早停和 L2 正则化是等价的。需要注意的是,以上的分类方式并不是互斥的,一种正则化方法通常针对的是学习算法中的多个变量。
除了正则化之外,优化也是深度学习需要解决的一个核心问题。由于深度神经网络中的隐藏层数目较多,因而将整个网络作为一个整体进行优化是非常困难的事情,需要花费大量的时间和计算力。出于效率和精确性的考虑,在深度学习的优化上需要使用专门的技术。出于可解性的考虑,传统机器学习算法往往会小心翼翼地选择代价函数和优化条件,将待优化问题转化为容易求解的凸优化问题。但在神经网络,尤其是在深度神经网络中,更一般的非凸情况是不可避免的,这就给深度学习中的优化带来很多额外的挑战。
当待优化的代价函数的输入是 n 维向量时,其二阶导数就包含针对不同变量分别求偏导所得到的很多分量,将这些分量按顺序排列可以得到 Hessian 矩阵。而在神经网络的训练中,Hessian 矩阵的病态问题非常常见,甚至无论优化问题是否具有凸优化的形式,病态的 Hessian 矩阵都会出现。在线性方程 Ax=b 中,当系数矩阵 A 的微小扰动会给解集 x 带来较大幅度的波动时,这样的矩阵就被称为病态矩阵(ill-conditioned matrix)。
病态矩阵是科学计算不愿打交道的对象,因为数值精度导致的不可避免的舍入误差可能会给输出带来巨大的偏离,正所谓“差之毫厘,谬以千里”。在神经网络的训练中,病态矩阵的影响体现在梯度下降的不稳定性上。当应用随机梯度下降解决优化问题时,病态矩阵对输入的敏感性会导致很小的更新步长也会增加代价函数,使学习的速度变得异常缓慢。深度神经网络面临的另一个挑战是局部极小值的问题。凸优化问题的数学特性保证了局部极小值和全局最小值之间的等价关系。因而在优化一个凸问题时,任何形式的临界点都可以看成是可行解。而在神经网络,尤其是深度模型中,代价函数甚至会具有不可列无限多个局部极小值,这显然会妨碍对全局最小值的寻找,导致搜索陷入局部最优的陷阱中。
神经网络之所以会具有这么多局部极小值,原因在于隐藏变量的不可辨认性。如果将神经网络中的几个隐藏神经元及其所有系数调换的话,得到的新模型和原始模型之间是等价的。假定深度模型中包含 m 个隐藏层,每个层中又都有 n 个神经元,那么隐藏单元的排列方式就会多达 (n!)m 种。这么多神经网络的变体是没法相互区分的,因而它们都有相同的局部极小值。除了局部极小值外,另一类在优化中不受欢迎的点叫做鞍点(saddle point)。鞍点是梯度为 0 的临界点,但它既不是极大值也不是极小值。从函数图像上看,多变量函数的鞍点在一个方向上向上弯曲,在另一个方向上则向下弯曲,从而形成了类似马鞍的形状。由于牛顿法的目标是寻找梯度为零的临界点,因而会受鞍点的影响较大,高维空间中鞍点数目的激增就会严重限制牛顿法的性能。
虽然存在着这样那样的潜在问题,但深度学习采用的依然是传统优化方法及其改进,这是由于隐藏层的未知特性使设计有针对性的优化方法变得非常困难。随机梯度下降法(stochastic gradient descent)就是在传统机器学习和深度神经网络中都能发挥作用的经典算法。机器学习中的最优化是令给定的期望风险函数最小化,而期望风险又可以用训练集上的经验风险 Q(w) 代替。训练集上的经验风险等于所有样本风险函数 Qi(w) 的均值。当训练集的数据量较大,并且经验风险又难以用简单的解析式来表示时,计算所有梯度的求和就会变成一个复杂的计算任务,消耗大量的计算资源。
随机梯度下降法是原始梯度下降法的一种改良。如果把求解最优化问题想象成爬山,那么随机梯度下降法就是每走一步就换个方向。为了节省每次迭代的计算成本,随机梯度下降在每一次迭代中都使用训练数据集的一个较小子集来求解梯度的均值,这在大规模机器学习问题中,特别是深度学习中非常有效。在给定学习率 η 和前一轮的参数估计值 w 时,随机梯度下降法的每一轮迭代执行以下操作
从训练集中随机抽取 n 个样本,在这个样本子集上计算梯度估计值
根据计算出的结果更新参数
以上迭代过程一直重复到 Q(w) 取得最小值或迭代次数达到最大值为止。学习率 η 是随机梯度下降法中的重要参数,它通常被设置为随着训练次数的增加而逐渐减小。这一选择体现的是训练时间和优化性能之间的折中。相对于让所有训练样本的风险函数最小化的原始梯度下降法,随机梯度下降是让每几个样本的风险函数最小化,虽然不是每次迭代得到的结果都指向全局最优方向,但大方向终归是没有错的,其最终的结果往往也在全局最优解附近。在随机梯度下降法的基础上进行改进可以得到其他的优化方式,改进的手段主要有两种:一种是随机降低噪声,另一种是使用二阶导数近似。
在应用中,随机梯度下降会受到噪声的影响。当学习率固定时,噪声会阻止算法的收敛;而当学习率逐渐衰减时,噪声也会将收敛速度压低到次线性水平。降噪方法正是为了抑制噪声的影响应运而生,降噪的方式既包括提升单次梯度估计的精度,也包括提升迭代过程的精度,常用的算法包括动态采样、梯度聚合和迭代平均三类。动态采样和梯度聚合两类方法是通过使用固定的步长来获得线性的收敛速度,进而实现降噪。动态采样方法通过逐渐增加梯度计算中使用的子集容量来实现降噪,随着优化过程的进行,基于更多样本得到的梯度估计也就越来越精确。梯度聚合方法则将先前迭代中得到的梯度估计存储下来,并在每次迭代中对这些估计中的一个或多个进行更新,再通过将搜索方向定义为之前轮次中梯度估计的加权平均,来改善搜索方向的准确性。
和前面两种方法相比,迭代平均方法不是通过对梯度估计求平均,而是对每次迭代得到的参数结果求平均来实现降噪。迭代平均方法可以在保证算法收敛性的前提下提升学习率,从而缩短收敛时间。这种方法在思想上更接近原始的随机梯度下降法,虽然它的收敛速度依然保持在次线性水平,却可以降低结果的方差,从而有效地对抗过拟合问题。前面三类方法的作用都是降低噪声的影响。要提升随机梯度下降法的性能,还可以通过使用二阶导数近似的信息来抑制高度非线性和病态目标函数的不利影响。在梯度下降法中应用的一阶导数不具有线性不变性,二阶导数的引入可以解决这一问题。另一方面,使用二阶导数意味着在使用泰勒展开近似目标函数时,二阶项的引入可以加快对最值点的逼近。总而言之,二阶导数近似方法主要的优势在于提升收敛速度。
二阶导数近似方法都可以看成对传统的牛顿法的改进,具体方法包括拟牛顿法、高斯牛顿法和无 Hessian 牛顿法等,受篇幅限制,在此就不做展开介绍了。除了随机降噪和二阶导数近似这两大类主要方法之外,还有一些自立门户的算法也能够对随机梯度下降做出改进,典型的例子包括动量方法(momentum)、加速下降方法(accelerated gradient descent)和坐标下降方法(coordinate descent)。
动量方法引入了超参数 v 作为速度,它代表参数在参数空间上移动的方向和速率,移动参数的力则是负梯度。速度 v 的引入就会让之前的移动产生累加效应,累加的效果则体现在学习率上。如果参数在一个下降较快的方向上移动,那么就迈开大步向前冲,对应着学习率的增加;如果参数在忽左忽右地兜圈子,那就找一条中间路线向前走。这样一来,算法就不太会陷入到局部最优中而无法抽身了。加速下降法是由俄罗斯数学家尤里·涅斯捷罗夫发明的,因而常以他的名字来命名。加速下降法的思想与标准动量方法类似,唯一的区别在于加速下降法对动量的计算是在施加当前速度之后才进行的。计算出基于之前的更新得到的动量 v 后,加速下降法先将参数 w 临时更新为 w+v,再在 w+v 上计算梯度。与标准动量方法相比,加速下降法可以避免过快更新,因而稳定性更好。
在很多情况下,“分而治之”是解决优化问题的高效方法,坐标下降法体现的就是这种思想。当优化问题中存在多个自变量时,坐标下降法先保持其他变量不变,针对单一变量 x1 最小化 f(x),再针对单一变量 x2 最小化,依此类推,直到所有变量循环完成。为了保证对单一变量的优化能够达到全局优化的效果,待优化的目标函数最好是个凸函数,还可以添加 L1 范数的正则化项。此外,每轮优化中随机选取单一变量也可以取得较好的效果。
自编码器(auto-encoder)是一类执行无监督学习任务的神经网络结构,它的目的是学习一组数据的重新表达,也就是编码。在结构上,自编码器是包含若干隐藏层的深度前馈神经网络,其独特之处是输入层和输出层的单元数目相等;在功能上,自编码器的目的不是根据输入来预测输出,而是重建网络的输入,正是这样的功能将自编码器和其他神经网络区分开来。由于自编码器的图形表示像极了杂技中使用的道具空竹,因而也得了个“空竹网络”的雅号。
自编码器结构由编码映射和解码映射两部分组成。如果将编码映射记作 ϕ,解码映射记作 ψ,自编码器的作用就是将输入 X 改写为 (ψ∘ϕ)(X),这相当于将输入从一个表象下转换到另一个表象下来表示,就像量子力学中粒子不同表象之间的变化一样。如果以均方误差作为网络训练中的损失函数,自编码器的目的就是找到使均方误差最小的编解码映射的组合,即
在最简单的情形,也就是只有一个隐藏层的情形下,自编码器隐藏层的输出就是编码映射。当隐藏层的维度小于输入数据的维度时,这就是个欠完备(undercomplete)的自编码器。欠完备自编码器的作用相当于对输入信号做了主成分分析,隐藏层的 k 个线性神经元在均方误差准则下保留贡献最大的 k 个主成分,原始信号就被投影到由这 k 个主成分所展成的新空间上。在自编码器的另一端,输出层将隐藏层的输出转换为自编码器的整体输出,从而实现了解码映射的功能。
如果隐藏神经元的传递函数是非线性的,编码映射就能够捕捉到输入分布中更加复杂的特征,均方误差准则也可以写成对数似然函数 −logp(X∣ϕ(X)) 的形式。当误差 p(X∣ϕ(X)) 满足高斯分布时,均方误差和最大似然是等价的。从信息论的角度看,编码映射可以看成是对输入信源 X 的有损压缩。有损压缩的特点决定了它不可能对所有输入都具有较小的信息量损失,因而学习的作用就是习得在训练数据集上更加精确的映射,并希望这样的映射在测试数据上同样表现良好,也就是使自编码器具有较好的泛化性能。
当自编码器的隐藏单元数目大于输入信号的维度,也就是编码映射的分量数目大于输入信号的分量数目时,这就是个过度完备(overcomplete)的自编码器。过度完备的自编码器面临的一个严重问题是如果没有额外约束的话,那么它可能只能够习得识别功能,得到的编码映射和解码映射都是恒等映射,这显然是白费功夫。可出人意料的是,自编码器的这个缺点恰恰能被过度完备性克服。实际结果表明,当使用随机梯度下降训练时,过度完备的非线性自编码器能够生成有用的表示。这个结论是由将自编码器的输出作为其他分类算法的输入,并统计分类错误得到的。
对这种现象的解释是当结合早停使用时,随机梯度下降的效果类似于对参数的 L2 正则化。为了实现连续输入的完美重构,具有非线性隐藏单元的单隐藏层自编码器需要在隐藏层中使用较小的权重,而在输出层使用较大的权重。尤其是在处理二进制输入时,大的权重系数还有利于最小化重构误差。但由于种种隐式或显式正则化规则的限制,大权重系数是难以实现的,因而自编码器只能对数据进行重新的编码。这意味着在新的表象下,数据的表示利用的是训练集中存在的统计规律,而不是使用恒等映射简单地复制粘贴。
虽然自编码器通常只包含单个隐藏层,但这并不是强制的选择。和其他前馈网络一样,自编码器也会受益于深度结构。通用近似定理保证了具有单隐藏层的自编码器能够以任意精度逼近任意的连续函数,但难以对这样的自编码器任意添加额外的约束条件。相比之下,深度自编码器既能降低某些函数的计算成本,也能降低训练数据的数量要求,还能得到更高的压缩效率。在实际中,训练深度自编码器的普遍策略是先训练一些浅层自编码器,再利用这些浅层自编码器贪心地预训练深度结构,因而浅层自编码器可以看作深度自编码器的中间件。换句话说,当需要使用 3 个隐藏层的深度自编码器时,我们的做法是将 3 个单隐藏层的自编码器逐层堆叠,而不会去直接训练一个 5 层的深度架构。用浅层自编码器搭建成的深度自编码器被称为栈式自编码器(stacked autoencoder)。
栈式自编码器的训练策略可以归结为两个步骤:无监督预训练 + 有监督微调。无监督预训练就是每个浅层自编码器的工作方式。原始数据输入 X 被用于训练网络的第一层,得到参数后,网络第一层就可以将原始输入转化成为由隐藏单元激活值组成的向量 X1;接下来把 X1 作为第二层的输入,继续训练得到第二层的参数后又可以计算出第二层的输出 X2。对后面的各层也采取策略,即将前层的输出作为后层输入的方式依次训练。在以上的训练方式中,训练每一层的参数时都会保持其他各层的参数固定不变。如果要得到全局意义上更优的结果,需要在上述预训练过程完成之后,利用反向传播算法同时调整所有层的参数以改善全局性能,这个过程就是微调。在参数训练到接近收敛时,使用微调会得到良好的效果。如果设计的深度自编码器只是用于分类的话,惯用的做法是丢掉栈式自编码器的解码映射,直接把最后一个隐藏层的输出送入 softmax 分类器进行分类。如此一来,softmax 分类错误的梯度值就可以直接反向传播给编码映射了。
同其他深度结构一样,逐层训练给栈式自编码器带来的是强大的表达能力,这体现在它通常能够获取到输入的从部分到整体的层次化结构。如果栈式自编码器的输入是几何形状,那么它的第一层就会学习如何识别边缘,第二层会在第一层学到的边缘概念的基础上,学习如何通过边缘的组合得到轮廓,更高层还会学到如何通过轮廓的组合得到不同的形状这类更高阶的特征。自编码器面对的一个问题是,对输入信号什么样的表达才能称为好的表达呢?同深度学习领域中的大多数问题一样,这个问题也不存在标准答案。从不同的角度回答它,得到的就是对原始自编码器的不同改进。前文中提到的过度完备的自编码器就是改进之一。由于在高维的隐藏层中,大部分神经元是被抑制的,只有少数能够输出特征表达,因而这类结构又被称为稀疏自编码器(sparse autoencoder)。
稀疏自编码器以稀疏性参数表示神经元的平均活跃程度,稀疏性参数为 0.01 意味着每次映射中只有 1% 的神经元被激活,但每次被激活的不会总是相同的 1%。稀疏自编码器在损失函数中引入 KL 散度作为正则化项,来控制激活神经元的数目,进而控制特征表达的有效性。如果一个自编码器要从噪声中恢复出信号,对被干扰的非理想数据 X~ 进行编解码,就不能对输入仅仅施加恒等复制,而是要移除噪声的影响,这样的自编码器就是去噪自编码器(denoising autoencoder)。相比于原始的自编码器,去噪自编码器要求对非理想数据的处理结果尽可能逼近原始数据,最小均方误差的形式也变为
在去噪自编码器的训练中,需要引入条件分布 p(X~∣X),这个分布表示了从数据样本 X 产生损坏样本 X~ 的概率。自编码器则将 (X,X~) 作为训练样本来学习重构分布 p(X∣X~),也就是在从损坏样本到原始数据样本的逆概率问题。在引入编码映射和解码映射之后,待学习的重构分布就变成了
上面的逆概率最大化问题可以转化为负对数似然的最小化,并利用基于梯度的方法求解。另一种训练方法是得分匹配,它让模型在每个样本点上获得与数据分布相同的得分,因而可以得到概率分布的一致估计,得分的形式则是一个特定的梯度场。去噪自编码器的作用是对抗信号中的噪声,收缩自编码器(contractive autoencoder)的作用则是对抗信号中的微小扰动,这可以通过在损失函数中添加显式的正则化项来实现。正则化项首先要计算隐藏层输出值关于权重的雅各比矩阵(Jacobi matrix),再来计算得到的雅各比矩阵的 Frobenius 范数,也就是矩阵所有元素平方和的平方根。通过雅各比矩阵和 F 范数的计算,收缩自编码器就能抑制训练样本在低维度流形曲面上的扰动。
如果要使用自编码器来建立生成模型,用到的就是变分自编码器(variational autoencoder)。变分自编码器的主要特点是在编码映射中添加了额外的限制,使隐藏层的参数大致遵循正态分布。这样一来,自编码器的所有参数都被转换为随机变量,计算随机变量分布参数的过程就是“推理”的过程。引入变分逼近法可以将推理问题转化为优化问题,并使用随机梯度下降法解决。由于均方误差只适用于描述不同数值之间的差异,而不能描述不同概率分布的区别,因而变分自编码器同样使用 KL 散度作为误差度量。在有限的训练数据集上,变分自编码器能够学习到样本的概率分布,并利用这个概率分布进一步生成新的样本,因而可以作为生成模型使用。
在 2017 年新鲜出炉的《麻省理工科技评论》十大突破性技术中,“强化学习”榜上有名。如果把时钟调回到一年多之前的围棋人机大战,彼时的深度强化学习在 AlphaGo 对李世乭的横扫中就已经初露峥嵘。而在进化版 AlphaGo Zero 中,深度强化学习更是大放异彩,AlphaGo Zero 之所以能够摆脱对人类棋谱的依赖,其原因就在于使用纯粹的深度强化学习进行端到端的自我对弈,从而超越了人类的围棋水平。要介绍深度强化学习就不得不先说一说强化学习的故事。相比于纯人造的监督学习和无监督学习,强化学习的思想根源来自于认知科学。20 世纪初,美国心理学家爱德华·桑代克在对教育过程的研究中提出了强化学习的原始理论,而作为人工智能方法的强化学习则力图使计算机在没有明确指导的情况下实现自主学习,完成从数据到决策的转变。
强化学习(reinforcement learning)实质上是智能系统从环境到行为的学习过程,智能体通过与环境的互动来改善自身的行为,改善准则是使某个累积奖励函数最大化。具体来说,强化学习是基于环境反馈实现决策制定的通用框架,根据不断试错得到来自环境的奖励或者惩罚,从而实现对趋利决策信念的不断增强。它强调在与环境的交互过程中实现学习,产生能获得最大利益的习惯性行为。强化学习的特点在于由环境提供的强化信号只是对智能体所产生动作的好坏作一种评价,和监督学习中清晰明确的判定结果相比,环境的反馈只能提供很少的信息。所以强化学习需要在探索未知领域和遵从已有经验之间找到平衡。一方面,智能体要在陌生的环境中不断摸着石头过河,来探索新行为带来的奖励;另一方面,智能体也要避免在探索中玩儿脱,不能放弃根据已有经验来踏踏实实地获得最大收益的策略。
描述强化学习最常用的模式是马尔可夫决策过程(Markov decision process)。马尔可夫决策过程是由离散时间随机控制的过程,可以用以下的四元组来定义S:由智能体和环境所处的所有可能状态构成的有限集合A:由智能体的所有可能动作构成的有限集合Pa(s,s′)=Pr(st+1=s′∣st=s,at=a):智能体在 t 时刻做出的动作 a 使马尔可夫过程的状态从 t 时刻的 s 转移为 t+1 时刻的 s′ 的概率Ra(s,s′):智能体通过动作 a 使状态从 s 转移到 s′ 得到的实时奖励
除了这个四元组之外,强化学习还包括一个要素,就是描述主体如何获取奖励的规则。强化学习主体和环境之间的交互是以离散时间步的方式实现的。在某个时间点上,智能体对环境进行观察,得到这一时刻的奖励,接下来它就会在动作集中选择一个动作发送给环境。来自智能体的动作既能改变环境的状态,也会改变来自环境的奖励。而在智能体与环境不断互动的过程中,它的终极目标就是让自己得到的奖励最大化。
深度强化学习(deep reinforcement learning)是深度学习和强化学习的结合,它将深度学习的感知能力和强化学习的决策能力熔于一炉,用深度学习的运行机制达到强化学习的优化目标,从而向通用人工智能迈进。根据实施方式的不同,深度强化学习方法可以分成三类,分别是基于价值、基于策略和基于模型的深度强化学习。
基于价值(value-based)的深度强化学习的基本思路是建立一个价值函数的表示。价值函数(value function)通常被称为 Q 函数,以状态空间 S 和动作空间 A 为自变量。但对价值函数的最优化可以说是醉翁之意不在酒,其真正目的是确定智能体的行动策略——没错,就是前文中“基于策略”的那个策略。策略是从状态空间到动作空间的映射,表示的是智能体在状态 st 下选择动作 a,执行这一动作并以概率 Pa(st,st+1) 转移到下一状态 st+1,同时接受来自环境的奖赏 Ra(st,st+1)。价值函数和策略的关系在于它可以表示智能体一直执行某个固定策略所能获得的累积回报。如果某个策略在所有状态 - 动作组合上的期望回报优于所有其他策略,这就是个最优策略。基于价值的深度强化学习就是要通过价值函数来找到最优策略,最优策略的数目可能不止一个,但总能找到其中之一。
在没有“深度”的强化学习中,使用价值函数的算法叫做 Q 学习算法(Q-learning)。Q 算法其实非常简单,就是在每个状态下执行不同的动作,来观察得到的奖励,并迭代执行这个操作。本质上说,Q 学习算法是有限集上的搜索方法,如果出现一个不在原始集合中的新状态,Q 算法就无能为力了,所以这是一种不具备泛化能力的算法,也就不能对未知的情况做出预测。
为了实现具有预测功能的 Q 算法,深度强化学习采用的方式是将 Q 算法的参数也作为未知的变量,用神经网络来训练 Q 算法的参数,这样做得到的就是深度 Q 网络。深度 Q 网络中有两种值得一提的机制,分别是经验回放和目标 Q 网络。经验回放的作用就是避免“熊瞎子掰苞米,掰新的扔旧的”这种窘境。通过将以往的状态转移数据存储下来并作为训练数据使用,经验回放能够克服数据之间的相关性,避免网络收敛到局部极小值。
目标 Q 网络则对当前 Q 值和目标 Q 值做了区分,单独使用一个新网络来产生目标 Q 值。这相当于对当前 Q 值和目标 Q 值进行去相关,从而克服了非平稳目标函数的影响,避免算法得到震荡的结果。2016 年以来,研究者又对深度 Q 网络提出了其他方面的改进,感兴趣的话,你可以搜索相关的论文。既然对价值函数的学习也是以最优策略为终极目标,那为什么不绕开价值函数,直接来学习策略呢?
基于策略(strategy-based)的深度强化学习的基本思路就是直接搜索能够使未来奖励最大化的最优策略。具体的做法是利用深度神经网络对策略进行参数化的表示,再利用策略梯度方法进行优化,通过不断计算总奖励的期望关于策略参数的梯度来更新策略参数,最终收敛到最优策略上。策略梯度方法的思想是直接使用逼近函数来近似表示和优化策略,通过增加总奖励较高情况的出现概率来逼近最优策略。其运算方式和深度学习中的随机梯度下降法类似,都是在负梯度的方向上寻找最值,以优化深度网络的参数。
这种方法的问题是在每一轮的策略梯度更新中都需要大量智能体与环境的互动轨迹作为训练数据,但在强化学习中,大量的在线训练数据是难以获取的,这无疑给策略梯度方法带来了很大的限制。一种实用的策略梯度方法是无监督强化辅助学习(UNsupervised REinforcement and Auxiliary Learning),简称UNREAL 算法。UNREAL 算法的核心是行动者 - 评论家(actor-critic)机制,两者分别代表两个不同的网络。
行动者是策略网络,用于对策略进行更新;评论家则是价值函数网络,通过逼近状态 - 动作对的价值函数来判定哪些是有价值的策略。这种机制就和人类的行为方式非常接近了,也就是用价值观来指导行为,而行为经验又会对价值观产生反作用。在行动者 - 评论家机制的基础上,UNREAL 做出了一些改进。首先是采用异步训练的思想,即让多个训练环境同时采集数据并执行训练,这不仅提升了数据的采样速度,也提升了算法的训练速度。在不同训练环境采集样本还能避免样本之间的强相关性,有利于神经网络的性能提升。
UNREAL 的另一个改进是引入了多重的辅助任务。多个辅助任务同时训练单个网络既能加快学习速度,又能进一步提升性能,代价则是计算量的增加。常用的辅助任务包括控制任务和回馈预测任务。需要注意的是,虽然并行执行的任务种类不同,但它们使用的都是同样的训练数据,因而可以看成是对已有数据价值更加充分的挖掘与利用。无论是基于价值还是基于策略的深度强化学习方法,都没有对环境模型做出任何先验假设。基于模型(model-based)的深度强化学习的基本思路是构造关于环境的模型,再用这个模型来指导决策。关于环境的模型可以使用转移概率p(r,s′∣s,a) 来表示,它描述了从当前的状态和动作到下一步的状态和奖励的可能性。将转移概率在状态空间和动作空间上遍历,就可以得到完整的转移概率张量。不同的转移概率可以通过深度网络训练得到。
和前两种方法相比,基于模型的方法存在很多问题,相关的研究和应用也比较少。在转移概率的估计中,每个概率值上都会存在误差,而这些误差在较长的状态转移序列上累积起来,可能会达到相当惊人的水平。这将导致计算出的奖励值和真实奖励值之间的南辕北辙。可即便如此,基于模型的方法仍有较强的现实意义。它能减少与真实环境进行互动的次数,而这种互动在实践中往往是受限的。此外,如果能学到一个足够准确的环境模型,对智能体的控制难度也会大大降低。
接下来,我将分享人工智能---神经网络
发表评论