本文主要是介绍jax可微分编程的笔记(7),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
jax可微分编程的笔记(7)
第七章 优化算法
从优化理论的整体框架来看,任何优化问题都可以被分解为
模型的建立,损失函数的构造以及优化算法的选取这三个部分。
其中优化算法的具体形式,又依赖于步长下降方向和终止条件
的选取。
对于多维函数的极值问题,如果参数间存在不等式形式的线性
约束,我们可以使用著名的单纯形法加以求解。如果优化参数
间存在任意的非线性的不等式约束,则还有增广拉格朗日乘子法
等算法可供选择。
7.1 下降算法概要
模型,损失函数,和优化器是优化问题的三个重要组成部分。
而下降算法是优化器的核心所在。
数学上的收敛性是算法正确的基本前提,而终止条件则是
将数学讨论转化为程序代码的必要条件。
7.1.1 下降算法的数学表达
在深度学习中,这里的待优化函数通常为经验风险函数或者是
带有正则项的结构风险函数。
在强化学习中,人们基于环境给出的奖励来更新智能体的一系列
价值函数;在物理学中由于任何实际体系都会自发地趋于能量最小
的状态,这里的待优化函数同样可以是体系的能量(参考第9章中
的案例);在控制理论中,待优化函数亦柯以是真值和设定值之间的
差距。
模型是一个含有待定参数的待优化函数。
损失函数用于判断一个模型是否能正确地刻画输入数据的规律。
优化器通过最小化损失函数,确定模型中待定的参量。
7.1.2 步长的选择
选取学习率的条件有充分下降条件,曲率条件,沃尔夫条件,
和强沃尔夫条件。
7.1.3终止条件的选择
下降算法常用的终止条件有最大迭代次数,梯度大小,绝对
优化量,相对优化量。
上述4种可能的终止条件并不是相互独立的,在实际的代码书写中
它们可以以任何合理的方式相互组合。
7.1.4 下降方向
负梯度是函数在当前的领域内下降最快的方向。
在绝大多数的情况下,最速下降法和共轭梯度法会用于大型
稀疏矩阵线性方程组的迭代求解中。
7.1.5 共轭梯度法
共轭梯度法是对最速下降法的一种优化。在确定步长时,
两者是一样的,两者的不同之处在搜索方向的选取上。
7.2 一阶优化算法
对于一阶优化算法而言,程序中只涉及对待优化函数一阶
导数的计算。算法有动量法,自适应算法等。
7.2.1 动量法
当模型中的参数较多,即使尝试在每一步迭代时近似地确定
线搜索法的最优步长,算法的计算代价也将显得过于高昂。
在大多数情况下,如果仅根据函数f的局部性质而选取远大
于1的步长,则在函数f本身的形式较为复杂时,这样的优化
算法也显得过于激进,出于这样的考虑,在大多数描述步长的
超参数远小于1,并令其取值在优化过程中尽量保持不变(或者
改变较为缓慢)
在上述的假设下,大多数深度学习中的优化算法,都能与一个
特定的动力学问题联系起来。
从数学角度来看,动量法选用梯度在时间尺度上的泄漏平均值,
来取代局域的梯度,以执行参数的更新参数β在这里成为泄漏
平均值中的衰减因子。特别的,在β=0时,动量法参数之间的递
推关系将退化为经典的梯度下降算法。
在概率论中,如果体系未来的演化仅依赖于体系在当前时刻的
状态,与体系演化的历史无关,则称这样的过程具有马尔可夫性质。
例如对于中国象棋来说,棋局未来走向与对弈双方达到当前局面
的走子方式无关,因此中国象棋的棋局具有全局马尔可夫性质。
而对于围棋来说,如果棋规要求“着子后不能使对方面临出现过的
局面”,那么围棋的棋局不再具有马尔可夫性质。通常而言,马尔
可夫性质对于随机过程来说是一个较强的假设。
7.2.2 自适应算法
动量法在对参数进行更新时,对所有的参数采用相同的学习率,
对一些常见的特征快速收敛,对于不常见特征则迟迟无法收敛。
这种不平衡的问题,催生出自适应次梯度法(AdaGrad)
对AdaGrad而言,凸优化问题上确实可以是有较好的表现的,
遗憾的是,实际问题中的大多数待优化函数,通常是非凸的。
为了解决这个问题,Geoff Hinton将指数滑动平均值引入
参数s的更新过程,从而解决了学习率单调减小的问题,与
相对应的优化器被称为RMSProp优化器(Root Mean Square Propagation)
这篇关于jax可微分编程的笔记(7)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!