优化
传统机器学习算法往往会小心翼翼地选择代价函数和优化条件,将待优化问题转化为容易求解的凸优化问题。当待优化的代价函数的输入是 n 维向量时,其二阶导数就包含针对不同变量分别求偏导所得到的很多分量,将这些分量按顺序排列可以得到 Hessian 矩阵。而在神经网络的训练中,Hessian 矩阵的病态问题非常常见,甚至无论优化问题是否具有凸优化的形式,病态的 Hessian 矩阵都会出现。在线性方程 Ax=b 中,当系数矩阵 A 的微小扰动会给解集 x 带来较大幅度的波动时,这样的矩阵就被称为病态矩阵(ill-conditioned matrix)。在神经网络的训练中,病态矩阵的影响体现在梯度下降的不稳定性上。当应用随机梯度下降解决优化问题时,病态矩阵对输入的敏感性会导致很小的更新步长也会增加代价函数,使学习的速度变得异常缓慢。
深度神经网络面临的另一个挑战是局部极小值的问题。凸优化问题的数学特性保证了局部极小值和全局最小值之间的等价关系。在神经网络,尤其是深度模型中,代价函数甚至会具有不可列无限多个局部极小值,这显然会妨碍对全局最小值的寻找,导致搜索陷入局部最优的陷阱中。神经网络之所以会具有这么多局部极小值,原因在于隐藏变量的不可辨认性。将神经网络中的几个隐藏神经元及其所有系数调换的话,得到的新模型和原始模型之间是等价的。假定深度模型中包含 m 个隐藏层,每个层中又都有 n 个神经元,那么隐藏单元的排列方式就会多达 (n!)m 种。
另一类在优化中不受欢迎的点叫做鞍点(saddle point)。鞍点是梯度为 0 的临界点,但它既不是极大值也不是极小值。从函数图像上看,多变量函数的鞍点在一个方向上向上弯曲,在另一个方向上则向下弯曲,从而形成了类似马鞍的形状。由于牛顿法的目标是寻找梯度为零的临界点,因而会受鞍点的影响较大,高维空间中鞍点数目的激增就会严重限制牛顿法的性能。
随机梯度下降法(stochastic gradient descent)就是在传统机器学习和深度神经网络中都能发挥作用的经典算法。在随机梯度下降法的基础上进行改进可以得到其他的优化方式,改进的手段主要有两种:一种是随机降低噪声,另一种是使用二阶导数近似。降噪方法正是为了抑制噪声的影响应运而生,降噪的方式既包括提升单次梯度估计的精度,也包括提升迭代过程的精度,常用的算法包括动态采样、梯度聚合和迭代平均三类。动态采样和梯度聚合两类方法是通过使用固定的步长来获得线性的收敛速度,进而实现降噪。
前面三类方法的作用都是降低噪声的影响。要提升随机梯度下降法的性能,还可以通过使用二阶导数近似的信息来抑制高度非线性和病态目标函数的不利影响。在梯度下降法中应用的一阶导数不具有线性不变性,二阶导数的引入可以解决这一问题。另一方面,使用二阶导数意味着在使用泰勒展开近似目标函数时,二阶项的引入可以加快对最值点的逼近。总而言之,二阶导数近似方法主要的优势在于提升收敛速度。
除了随机降噪和二阶导数近似这两大类主要方法之外,还有一些自立门户的算法也能够对随机梯度下降做出改进,典型的例子包括动量方法(momentum)、加速下降方法(accelerated gradient descent)和坐标下降方法(coordinate descent)。
自编码器
自编码器(auto-encoder)是一类执行无监督学习任务的神经网络结构,它的目的是学习一组数据的重新表达,也就是编码。在结构上,自编码器是包含若干隐藏层的深度前馈神经网络,其独特之处是输入层和输出层的单元数目相等;在功能上,自编码器的目的不是根据输入来预测输出,而是重建网络的输入,正是这样的功能将自编码器和其他神经网络区分开来。 自编码器结构由编码映射和解码映射两部分组成。如果将编码映射记作 ϕ,解码映射记作 ψ,自编码器的作用就是将输入 X 改写为 (ψ∘ϕ)(X),这相当于将输入从一个表象下转换到另一个表象下来表示,就像量子力学中粒子不同表象之间的变化一样。如果以均方误差作为网络训练中的损失函数,自编码器的目的就是找到使均方误差最小的编解码映射的组合,即
在最简单的情形,也就是只有一个隐藏层的情形下,自编码器隐藏层的输出就是编码映射。当隐藏层的维度小于输入数据的维度时,这就是个欠完备(undercomplete)的自编码器。如果隐藏神经元的传递函数是非线性的,编码映射就能够捕捉到输入分布中更加复杂的特征,均方误差准则也可以写成对数似然函数 −logp(X∣ϕ(X)) 的形式。当误差 p(X∣ϕ(X)) 满足高斯分布时,均方误差和最大似然是等价的。
训练深度自编码器的普遍策略是先训练一些浅层自编码器,再利用这些浅层自编码器贪心地预训练深度结构,因而浅层自编码器可以看作深度自编码器的中间件。换句话说,当需要使用 3 个隐藏层的深度自编码器时,我们的做法是将 3 个单隐藏层的自编码器逐层堆叠,而不会去直接训练一个 5 层的深度架构。用浅层自编码器搭建成的深度自编码器被称为栈式自编码器(stacked autoencoder)。式自编码器的训练策略可以归结为两个步骤:无监督预训练 + 有监督微调。
由于在高维的隐藏层中,大部分神经元是被抑制的,只有少数能够输出特征表达,因而这类结构又被称为稀疏自编码器(sparse autoencoder)。如果一个自编码器要从噪声中恢复出信号,对被干扰的非理想数据 X~ 进行编解码,就不能对输入仅仅施加恒等复制,而是要移除噪声的影响,这样的自编码器就是去噪自编码器(denoising autoencoder)。
去噪自编码器的作用是对抗信号中的噪声,收缩自编码器(contractive autoencoder)的作用则是对抗信号中的微小扰动,这可以通过在损失函数中添加显式的正则化项来实现。正则化项首先要计算隐藏层输出值关于权重的雅各比矩阵(Jacobi matrix),再来计算得到的雅各比矩阵的 Frobenius 范数,也就是矩阵所有元素平方和的平方根。通过雅各比矩阵和 F 范数的计算,收缩自编码器就能抑制训练样本在低维度流形曲面上的扰动。
如果要使用自编码器来建立生成模型,用到的就是变分自编码器(variational autoencoder)。变分自编码器的主要特点是在编码映射中添加了额外的限制,使隐藏层的参数大致遵循正态分布。这样一来,自编码器的所有参数都被转换为随机变量,计算随机变量分布参数的过程就是“推理”的过程。引入变分逼近法可以将推理问题转化为优化问题,并使用随机梯度下降法解决。
深度强化学习
强化学习(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)的深度强化学习的基本思路是建立一个价值函数的表示。在没有“深度”的强化学习中,使用价值函数的算法叫做 Q 学习算法(Q-learning)。Q 算法其实非常简单,就是在每个状态下执行不同的动作,来观察得到的奖励,并迭代执行这个操作.
- 基于策略(strategy-based)的深度强化学习的基本思路就是直接搜索能够使未来奖励最大化的最优策略。具体的做法是利用深度神经网络对策略进行参数化的表示,再利用策略梯度方法进行优化,通过不断计算总奖励的期望关于策略参数的梯度来更新策略参数,最终收敛到最优策略上。策略梯度方法的思想是直接使用逼近函数来近似表示和优化策略,通过增加总奖励较高情况的出现概率来逼近最优策略。其运算方式和深度学习中的随机梯度下降法类似,都是在负梯度的方向上寻找最值,以优化深度网络的参数。一种实用的策略梯度方法是无监督强化辅助学习(UNsupervised REinforcement and Auxiliary Learning),简称UNREAL 算法。UNREAL 算法的核心是行动者 - 评论家(actor-critic)机制,两者分别代表两个不同的网络。
- 基于模型(model-based)的深度强化学习的基本思路是构造关于环境的模型,再用这个模型来指导决策。关于环境的模型可以使用转移概率p(r,s′∣s,a) 来表示,它描述了从当前的状态和动作到下一步的状态和奖励的可能性。将转移概率在状态空间和动作空间上遍历,就可以得到完整的转移概率张量。不同的转移概率可以通过深度网络训练得到。
极客时间《人工智能基础课》学习笔记 Day10