Datawhale X 李宏毅苹果书 AI夏令营——Task1

121 阅读2分钟

0 写在前面

Task1 的内容是苹果书的 3.1-局部最小值与鞍点,3.2-批量与动量。首先 3.1 节介绍了我们为什么要关注优化问题临界点的概念、种类以及区分方法,然后 3.2 节介绍了批量大小对更新速度、梯度、优化性能、泛化性能等多个指标的影响,以及如何利用动量来逃离鞍点或局部最小值点。 Task1 内容的思维导图如下:

image.png

1 局部极小值与鞍点

1.1 为什么要讨论优化问题

我们之所以要讨论优化问题,是因为我们常常会在模型训练中遇到下面的两个问题:

  1. 模型训练到一定阶段loss就无法进一步下降
  2. 模型的loss一开始就无法下降

1.2 临界点

1.2.1 概念与分类

要进一步优化模型,降低loss,我们首先就要知道现在模型“卡”在了什么地方,也就是需要明确临界点的概念。 临界点是指损失函数梯度为 0 的点,这就包括了局部极小值点、局部极大值点以及鞍点。

image.png

上面这张图体现了局部极小值点与鞍点的区别:损失函数在局部极小值点往周围都不能进一步减小,但在鞍点的特定方向可以。

1.2.2 判断方法

首先我们可以在临界点处将损失函数 LθL\bm{\theta} 利用泰勒级数进行展开:

L(θ)L(θ)+(θθ)Tg+12(θθ)TH(θθ)L(\boldsymbol{\theta})\approx L\left(\boldsymbol{\theta}^{\prime}\right)+\left(\boldsymbol{\theta}-\boldsymbol{\theta}^{\prime}\right)^{\mathrm{T}}\boldsymbol{g}+\frac12\left(\boldsymbol{\theta}-\boldsymbol{\theta}^{\prime}\right)^{\mathrm{T}}\boldsymbol{H}\left(\boldsymbol{\theta}-\boldsymbol{\theta}^{\prime}\right)

同时因为在临界点,所以损失函数的梯度为 0,故简化为:

L(θ)L(θ)+12(θθ)TH(θθ)L(\boldsymbol{\theta})\approx L\left(\boldsymbol{\theta}^{\prime}\right)+\frac12\left(\boldsymbol{\theta}-\boldsymbol{\theta}^{\prime}\right)^\mathrm{T}\boldsymbol{H}\left(\boldsymbol{\theta}-\boldsymbol{\theta}^{\prime}\right)

从上面局部极小值点和鞍点的区别来看,对应的误差表面的局部“形状”是不同的,故对上面式子中的第二项 12(θθ)TH(θθ)\frac{1}{2}\left(\boldsymbol{\theta}-\boldsymbol{\theta}^{\prime}\right)^\mathrm{T}\boldsymbol{H}\left(\boldsymbol{\theta}-\boldsymbol{\theta}^{\prime}\right) 的取值进行判断即可。

1.2.2.1 穷举

最容易想到的方法是穷举,通过穷举第二项在 θ\bm{\theta} 中的所有 θi\bm{\theta_i} 下的取值,我们可以发现有下面三种情况:

  1. 始终大于 0:临界点处为“谷底”,为局部极小值点
  2. 始终小于0:临界点处为“顶峰”,为局部极大值点
  3. 时而大于0时而小于0:临界点处“凹凸不平”,为鞍点
1.2.2.2 利用正定矩阵的定义与性质

虽然穷举思路简单,但是计算量太大。观察第二项的形式,将 (θθ)(\bm{\theta}-\bm{\theta^{'}}) 简记为 v\bm{v},可以得到第二项为 12vHv\frac{1}{2}\bm{v}^{\intercal}\bm{H}\bm{v}。这样我们根据正定矩阵的定义和性质,只需要判断 Hessian 矩阵 H\bm{H} 的所有特征值取值即可,不用代入全部参数进行计算。

正定矩阵的定义:特征值均大于0的对称矩阵

正定矩阵的性质:假设正定矩阵 A\bm{A},对于所有非零向量 x\bm{x}xAx>0\bm{x}^\intercal\bm{A}\bm{x}>0 均成立

2 批量与动量

2.1 不同批量大小对应的梯度更新

  1. 批量梯度更新(Batch Gradient Descent):不分批,或者说所有数据算一批,跑完所有数据后更新梯度
  2. 随机梯度更新(Stochastic Gradient Descent):一条数据算一批,跑完一条数据就更新梯度
  3. 小批量梯度更新(Mini-batch Gradient Descent):一些数据算一批,一批数据跑完了就更新梯度

2.2 批量大小对各个指标的影响

image.png

ps:上表中有一个笔误,一次更新速度(没有并行计算)的情况下,小批量梯度下降的速度是更快的,因为更新一次梯度所需的数据更少。

  • epoch 时间:批量梯度下降更新次数少,在单次更新时间差不多的情况下,速度更快
  • 优化与泛化:由于小批量梯度下降中噪声的存在,实际上可以让模型更容易逃离局部极小值点或鞍点,训练和测试的实际效果更好

2.3 可行的逃离鞍点或者局部极小值点的方法——增加动量

增加动量以逃离鞍点或者局部极小值点在书中已经给出了很形象的解释,可以用一个球从山顶滚落来理解。假设有一个球(参数),顺着山坡滚下(误差表面),在遇到山谷(鞍点或局部极小值点),由于前面积累的动量,是有可能越过山谷(逃离鞍点或局部极小值点)的。

image.png

在数学形式上,增加动量的本质是考虑了上一步参数更新方向或者是前面所有梯度的总和,以前 2 次梯度更新为例:

m0=0m1=ηg0m2=ληg0ηg1\begin{aligned}&\boldsymbol{m}_0=0\\&\boldsymbol{m}_1=-\eta\boldsymbol{g}_0\\&\boldsymbol{m}_2=-\lambda\eta\boldsymbol{g}_0-\eta\boldsymbol{g}_1\end{aligned}

其中 η\etaλ\lambdamim_i 分别为学习率,动量和第 ii 次梯度更新的移动量

参考资料

  1. 李宏毅深度学习教程
  2. 麻省理工线性代数笔记(二十四)-正定矩阵
  3. 多元函数(及向量函数)的泰勒展开

如果有疏漏或者有疑问,欢迎随时在评论区交流~(∠・ω< )⌒☆