【Python · Pytorch】人工神经网络 ANN(中)
- [6. 反向传播](#6. 反向传播)
-
- [6.1 梯度下降法](#6.1 梯度下降法)
- [6.2 牛顿法](#6.2 牛顿法)
- [6.3 拟牛顿法](#6.3 拟牛顿法)
-
- [6.3.1 DFP算法](#6.3.1 DFP算法)
- [6.3.2 BFGS算法](#6.3.2 BFGS算法)
- [6.3.3 Broyden族方法](#6.3.3 Broyden族方法)
- [6.4 共轭梯度法](#6.4 共轭梯度法)
- [6.5 动量相关算法](#6.5 动量相关算法)
-
- [6.5.1 动量法](#6.5.1 动量法)
- [6.5.2 Nesterov动量法](#6.5.2 Nesterov动量法)
- [6.6. 自适应学习率算法](#6.6. 自适应学习率算法)
-
- [6.6.1 AdaGrad算法](#6.6.1 AdaGrad算法)
- [6.6.2 RMSprop算法](#6.6.2 RMSprop算法)
- [6.6.3 Adam算法](#6.6.3 Adam算法)
- [6.6.4 Nadam算法](#6.6.4 Nadam算法)
- [6.7 学习率调整](#6.7 学习率调整)
-
- [6.7.1 学习率预热](#6.7.1 学习率预热)
- [6.7.2 学习率衰减](#6.7.2 学习率衰减)
- [6.7.3 周期性学习率调整](#6.7.3 周期性学习率调整)
- [6.7.4 带热重启的随机梯度下降 (Stochastic Gradient Descent with Warm Restart)](#6.7.4 带热重启的随机梯度下降 (Stochastic Gradient Descent with Warm Restart))
- [6.7.5 其他学习率调整方法](#6.7.5 其他学习率调整方法)
- [6.7.6 自适应调整学习率](#6.7.6 自适应调整学习率)
- [6.8 其他算法](#6.8 其他算法)
-
- [6.8.1 信赖域算法](#6.8.1 信赖域算法)
- [6.8.2 坐标轴交替下降算法](#6.8.2 坐标轴交替下降算法)
- [6.8.3 Sophia 算法](#6.8.3 Sophia 算法)
- [7. 模型评估](#7. 模型评估)
-
- [7.1 模型容量](#7.1 模型容量)
- [7.2 拟合能力](#7.2 拟合能力)
- [7.3 泛化能力](#7.3 泛化能力)
- [7.3 机器学习准则](#7.3 机器学习准则)
-
- [7.3.1 期望风险](#7.3.1 期望风险)
- [7.3.2 经验风险](#7.3.2 经验风险)
- [7.3.3 结构风险](#7.3.3 结构风险)
- [7.3.4 总结](#7.3.4 总结)
- [7.4 参数范数正则化](#7.4 参数范数正则化)
-
- [7.4.1 L1正则化(权值稀疏)](#7.4.1 L1正则化(权值稀疏))
- [7.4.2 L2正则化(权重衰减)](#7.4.2 L2正则化(权重衰减))
- [假设 w ⃗ ∗ = [ w 1 w 2 ] \vec{w}^{*}=\begin{bmatrix} w_1 \\ w_2 \end{bmatrix} w ∗=[w1w2],已知 ∇ w ∗ J ( w ⃗ ∗ ) = 0 \nabla_{{w}^{*}}J(\vec{w}^{*})=0 ∇w∗J(w ∗)=0,即 ∂ J ∂ w 1 = ∂ J ∂ w 2 = 0 \frac{\partial J}{\partial w_1}=\frac{\partial J}{\partial w_2}=0 ∂w1∂J=∂w2∂J=0,可得 $ \frac{\partial^2J}{\partial w_1\partial w_2}= \frac{\partial^2J}{\partial w_2\partial w_1}=0$ $$ H= \begin{bmatrix} \frac{\partial^2J}{\partial w^2_1} & \frac{\partial^2J}{\partial w_1\partial w_2} \\ \frac{\partial^2J}{\partial w_2\partial w_1} & \frac{\partial^2J}{\partial w^2_2} \end{bmatrix}](#假设 w ⃗ ∗ = [ w 1 w 2 ] \vec{w}^{}=\begin{bmatrix} w_1 \ w_2 \end{bmatrix} w ∗=[w1w2],已知 ∇ w ∗ J ( w ⃗ ∗ ) = 0 \nabla_{{w}^{}}J(\vec{w}^{*})=0 ∇w∗J(w ∗)=0,即 ∂ J ∂ w 1 = ∂ J ∂ w 2 = 0 \frac{\partial J}{\partial w_1}=\frac{\partial J}{\partial w_2}=0 ∂w1∂J=∂w2∂J=0,可得 $ \frac{\partial^2J}{\partial w_1\partial w_2}= \frac{\partial^2J}{\partial w_2\partial w_1}=0$ $$ H= \begin{bmatrix} \frac{\partial^2J}{\partial w^2_1} & \frac{\partial^2J}{\partial w_1\partial w_2} \ \frac{\partial^2J}{\partial w_2\partial w_1} & \frac{\partial^2J}{\partial w^2_2} \end{bmatrix})
-
-
- [7.4.3 弹性网络正则化](#7.4.3 弹性网络正则化)
- [7.5 提前停止](#7.5 提前停止)
- [7.6 Dropout 丢弃法](#7.6 Dropout 丢弃法)
- [7.7 数据增强](#7.7 数据增强)
- [7.8 标签平滑](#7.8 标签平滑)
- [7.9 模型超参数选择](#7.9 模型超参数选择)
-
- [7.9.1 手动调整超参数](#7.9.1 手动调整超参数)
- [7.9.3 网格搜索](#7.9.3 网格搜索)
- [7.9.4 随机搜索](#7.9.4 随机搜索)
- [7.9.5 贝叶斯搜索](#7.9.5 贝叶斯搜索)
- [7.9.6 动态资源分布](#7.9.6 动态资源分布)
- [7.9.7 神经架构搜索](#7.9.7 神经架构搜索)
-
- [8. 机器学习范式](#8. 机器学习范式)
-
- [8.1 监督学习](#8.1 监督学习)
- [8.2 无监督学习](#8.2 无监督学习)
- [8.3 强化学习](#8.3 强化学习)
- [8.4 其他范式](#8.4 其他范式)
6. 反向传播
好的学习工具:https://distill.pun/2017/momentum
前向传播:计算误差(找到差距)+ 反向传播(缩短差距)
反向传播:传递偏差信息,"贡献"程度思想 → 哪种输入特征对输出帮助较大
6.1 梯度下降法
6.1.1 线搜索方法
线搜索:一种寻找目标函数 f : R n → R f: \mathbb{R}^n \rightarrow \mathbb{R} f:Rn→R的局部最小值的近似方法。
线搜索近似首先找到一个使目标函数 f f f下降的方向,然后计算 x x x应沿着这个方向移动的步长。
下降方向可通过多种方法计算:梯度下降法 、牛顿法 、拟牛顿法 等。
线搜索准则:Armijo准则 、Goldstein准则 、Wolfe准则 、非单调线搜索准则 (Grippo准则)
6.1.2 微分 & 导数
假设存在函数 f : R → R f: \mathbb{R} \rightarrow \mathbb{R} f:R→R,其输入和输出均为标量。设 y = f ( x ) y = f(x) y=f(x),若其导数存在,则:
f ′ ( x ) = d y d x = d f ( x ) d x = lim h → 0 f ( x + h ) − f ( x ) h f'(x)=\frac{d y}{d x}=\frac{d f(x)}{d x}=\lim_{h \rightarrow 0} \frac{f(x+h)-f(x)}{h} f′(x)=dxdy=dxdf(x)=h→0limhf(x+h)−f(x)
若 f ′ ( a ) f'(a) f′(a)存在,则称f在a处可微(differentiable)
6.1.3 偏导数
偏导数:多元函数在某一点上针对某个变量所求的导数。
对于函数 f ( x 1 , x 2 , ... , x n ) f(x_1, x_2,\dots,x_n) f(x1,x2,...,xn),它的偏导数可以表示为 ∂ f ∂ x i \frac{\partial f}{\partial x_i} ∂xi∂f,其中 ∂ \partial ∂表示偏导符号, f f f表示函数, x i x_i xi表示自变量。
偏导数计算方法与一元函数导数类似,只需将其他变量视为常数,对某个变量求导即可。
在深度学习中,通常需要用到多变量,将导数思想推广至多元函数(Multivariate Function)
假设存在函数 f : R n → R f: \mathbb{R}^n \rightarrow \mathbb{R} f:Rn→R,其输入是一个 n n n维向量 x ⃗ = [ x 1 x 2 ⋮ x n ] \vec{x}=\begin{bmatrix}x_1\\x_2\\ \vdots \\x_n\end{bmatrix} x = x1x2⋮xn ,其输出是一个标量。
设 y = f ( x 1 , x 2 , ⋯ , x n ) y = f(x_1,x_2,\cdots,x_n) y=f(x1,x2,⋯,xn),则y关于第i个参数 x i x_i xi的偏导数(Partial Derivative)为:
∂ y ∂ x i = lim h → 0 f ( x 1 , ⋯ , x i − 1 , x i + h , x i + 1 , ⋯ , x n ) − f ( x 1 , ⋯ , x i , ⋯ , x n ) h \frac{\partial y}{\partial x_i}=\lim_{h→0} \frac{f(x_1, \cdots, x_{i-1}, x_i+h,x_{i+1},\cdots, x_n)-f(x_1,\cdots,x_i,\cdots,x_n)}{h} ∂xi∂y=h→0limhf(x1,⋯,xi−1,xi+h,xi+1,⋯,xn)−f(x1,⋯,xi,⋯,xn)
6.1.4 Jacobian矩阵
Jacobian矩阵,中文译名为雅可比矩阵。
假设存在函数 f : R n → R m \boldsymbol{f}:\mathbb{R^n}→\mathbb{R^m} f:Rn→Rm,其由多个函数组成:
f = [ f 1 ( x 1 , x 2 , ⋯ , x n ) f 2 ( x 1 , x 2 , ⋯ , x n ) ⋮ f m ( x 1 , x 2 , ⋯ , x n ) ] \boldsymbol{f} = \begin{bmatrix} f_{1}(x_1, x_2, \cdots, x_n)\\ f_{2}(x_1, x_2, \cdots, x_n)\\ \vdots \\ f_{m}(x_1, x_2, \cdots, x_n)\\ \end{bmatrix} f= f1(x1,x2,⋯,xn)f2(x1,x2,⋯,xn)⋮fm(x1,x2,⋯,xn)
其雅可比矩阵定义为:
J ( f ) = [ ∂ f 1 ∂ x 1 ∂ f 1 ∂ x 2 ⋯ ∂ f 1 ∂ x n ∂ f 2 ∂ x 1 ∂ f 2 ∂ x 2 ⋯ ∂ f 2 ∂ x n ⋮ ⋮ ⋱ ⋮ ∂ f n ∂ x 1 ∂ f n ∂ x 2 ⋯ ∂ f n ∂ x n ] J(\boldsymbol{f}) = \begin{bmatrix} \frac{\partial f_1}{\partial x_1} & \frac{\partial f_1}{\partial x_2} & \cdots & \frac{\partial f_1}{\partial x_n} \\ \frac{\partial f_2}{\partial x_1} & \frac{\partial f_2}{\partial x_2} & \cdots & \frac{\partial f_2}{\partial x_n} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial f_n}{\partial x_1} & \frac{\partial f_n}{\partial x_2} & \cdots & \frac{\partial f_n}{\partial x_n} \end{bmatrix} J(f)= ∂x1∂f1∂x1∂f2⋮∂x1∂fn∂x2∂f1∂x2∂f2⋮∂x2∂fn⋯⋯⋱⋯∂xn∂f1∂xn∂f2⋮∂xn∂fn
6.1.5 梯度 & 梯度下降法
假设存在函数 f : R n → R f: \mathbb{R}^n \rightarrow \mathbb{R} f:Rn→R,其输入是一个 n n n维向量 x ⃗ = [ x 1 x 2 ⋮ x n ] \vec{x}=\begin{bmatrix}x_1\\x_2\\ \vdots \\x_n\end{bmatrix} x = x1x2⋮xn ,其输出是一个标量。
函数 f ( x ⃗ ) f(\vec{x}) f(x )相对于 x ⃗ \vec{x} x 的梯度是一个包含 n n n个偏导数的向量:
g x = ∇ x f ( x ⃗ ) = [ ∂ f ( x ⃗ ) ∂ x 1 , ∂ f ( x ⃗ ) ∂ x 2 , ⋯ , ∂ f ( x ⃗ ) ∂ x n ] g_x=\nabla_x f(\vec{x})=[\frac{\partial f(\vec{x})}{\partial x_1},\frac{\partial f(\vec{x})}{\partial x_2},\cdots,\frac{\partial f(\vec{x})}{\partial x_n}] gx=∇xf(x )=[∂x1∂f(x ),∂x2∂f(x ),⋯,∂xn∂f(x )]
梯度下降法/最速下降法 - 核心思想:梯度方向是函数值增长最快的方向,反之负梯度方向是函数值减少最快的方向。
按维度介绍
一维情况
假设存在函数 f : R → R f: \mathbb{R} \rightarrow \mathbb{R} f:R→R,其输入和输出均为标量,则梯度坍缩为导数。
∇ x f ( x ) = d f ( x ) d x \nabla_x f(x)=\frac{d f(x)}{d x} ∇xf(x)=dxdf(x)
根据图像可判断梯度(导数)正负,也可根据梯度下降法核心思想求得该函数最小值:
二维情况
假设存在函数 f : R 2 → R f: \mathbb{R}^2 \rightarrow \mathbb{R} f:R2→R,其输入是一个 2 2 2维向量 x ⃗ = [ x 1 x 2 ] \vec{x}=\begin{bmatrix}x_1\\x_2\end{bmatrix} x =[x1x2],其输出是一个标量。
根据梯度下降法核心思想同样可求得该函数最小值:
使用梯度下降法前提:曲面光滑
6.1.6 面临挑战
平原现象 & 振荡现象
平原现象:梯度绝对值小 → 参数几乎不更新
振荡现象:在最优解处来回振荡 → 难收敛 / 不收敛
产生原因:随机梯度下降 / 小批量梯度下降 循环轮次样本不同→梯度方向不同,无法持续同向下降。
二维也同样存在振荡现象:
局部最小值
局部最小值是指在某一区域内,函数的取值达到了最小值,但这个最小值不一定是全局的最小值。 具体来说,如果一个函数在一个小区间内的取值都比该区间内的其他取值要小,那么该点就被称为局部最小值。
局部最小值与全局最小值的关系
全局最小值是在定义域内函数的取值最小,而局部最小值是在某一区域内函数的取值最小。全局最小值一定是局部最小值,但反之不一定成立。这意味着,如果一个点是全局最小值,那么它必然是某个区域的局部最小值,但一个局部最小值点不一定是全局最小值点。
局部最小值的数学条件
在数学上,判断一个点是否是局部最小值通常需要满足一定的条件。对于多元函数,如果函数在某点存在偏导数,且在该点取得极值,则该点称为稳定点。进一步地,如果该点的黑塞矩阵在这一点是正定矩阵,则函数在该点取得极小值;如果是负定矩阵,则取得极大值;如果是不定矩阵,则不取极值。
复杂损失函数图像:
注意:
训练中出现局部最小值不一定是坏事,神经网络损失的优化过程中,会出现很多最小值,好的局部最小值与全局最小值一样好。
如果一个局部极小值对应着 0.7---0.8 的正确标签分数,而全局最小值能够产生 0.95-0.98 的正确标签分数,那么两者输出的预测标签结果将是相同的。
最小值的一个理想属性是它应该在平坦的一面。因为平坦的最小值很容易收敛到,而且越过最小值或者在最小值的脊梁之间跳跃的可能性更小。
更重要的是,我们期望测试集的损失曲面与我们训练的训练集的损失曲面略有不同。对处于平坦又较宽处的极小值,由于这种变化,损失不会有太大变化,但处于相对较窄处的极小值不是这样。我们要指出的一点是,更平坦处的最小值能够更好地泛化,因此是可取的。
鞍点
鞍点得名于它的形状类似于马鞍。尽管它在 x 方向上是一个最小值点,但是它在另一个方向上是局部最大值点,并且,如果它沿着 x 方向变得更平坦的话,梯度下降会在 x 轴振荡并且不能继续根据 y 轴下降,这就会给我们一种已经收敛到最小值点的错觉。
梯度消失
在深度神经网络中,梯度在反向传播过程中逐渐变小并最终趋近于零的现象。这导致较浅层的网络参数更新缓慢,难以有效学习和收敛。
原因:
- 激活函数的选择:某些激活函数(如Sigmoid、Tanh)在输入较大或较小的情况下,梯度会非常接近于零,从而导致梯度消失。
- 权重初始化:如果网络的权重初始化过大或过小,会导致梯度消失问题。
- 深层网络结构:深层网络中,梯度需要通过多个层传播,每一层都会引入一定的误差,这些误差会累积导致梯度消失。
解决方法:
为了解决梯度消失问题,可以采取以下方法:
- 使用合适的激活函数 :ReLU(Rectified Linear Unit) 是一种常用的激活函数,它在输入大于零时梯度为1,避免了梯度消失的问题。
- 适当的权重初始化方法 :如Xavier初始化、He初始化等,可以使得网络的权重在初始化时不会过大或过小。
- 批标准化 :批标准化可以使得网络输入的分布更加稳定,有助于减少梯度消失的问题。
- 残差连接 :通过将前一层的输出与后续层的输入相加,可以更容易地进行优化和训练深层网络。
- 使用合适的优化算法 :如Adam、RMSprop等,可以自适应地调整学习率,从而减少梯度消失的问题。
梯度爆炸
在深度学习训练过程中,梯度在反向传播过程中呈指数级增长,导致网络权重大幅更新,从而使模型变得不稳定。梯度爆炸的原因主要包括网络层次过深、激活函数选择不当(如sigmoid函数)以及权重初始化不当等。
原因:
- 网络层次过深:在深层网络中,梯度在反向传播过程中会进行多次连乘操作,当连乘的因子大于1时,梯度会迅速增长,导致梯度爆炸。
- 激活函数选择不当:使用sigmoid等饱和函数作为激活函数时,其导数在0附近取值较小,导致梯度在反向传播过程中迅速衰减或爆炸。
- 权重初始化不当:不合理的权重初始化方法会导致网络在训练初期权值过大或过小,从而引发梯度爆炸或消失。
解决方法:
- 权重衰减:通过给参数增加L1或L2范数的正则化项来限制参数的取值范围,防止权重过大。
- 梯度截断:当梯度的模大于一定阈值时,将其截断为一个较小的数,以防止梯度爆炸。
- 合理的权重初始化:使用合适的权重初始化方法,如Xavier初始化、He初始化,避免初始权重过大或过小。
- 使用合适的激活函数:使用ReLU、LeakyReLU等激活函数,这些函数在正数区域的导数为1,有助于缓解梯度消失问题。
- 梯度裁剪:限制梯度的最大值,防止梯度爆炸。
6.1.7 方向导数
方向导数:多元函数在某一点上沿着某个方向的变化率。
对于函数 f ( x 1 , x 2 , ... , x n ) f(x_1, x_2,\dots,x_n) f(x1,x2,...,xn),它的方向导数可以表示为 ∇ f ⋅ u \nabla f \cdot u ∇f⋅u,其中 ∇ f \nabla f ∇f表示函数 f f f的梯度, u u u表示方向向量。
方向导数的计算方法:通过梯度向量和方向向量的点积实现。梯度向量 ∇ f \nabla f ∇f表示函数在某一点上变化率最大的方向。
方向导数可做参考,仅作补充内容。
标准梯度下降法缺点:
- 计算量大
- 梯度爆炸 / 梯度消失
对标准梯度下降法的优化思路如下所示:
- 调整神经网络结构:池化层、Dropout
- 更换反向传播算法
- 减少每次训练计算量
- 随机梯度下降法
- 小批量梯度下降法
- 优化下降路径(更少步数 更快抵达极值点)
- 梯度方向优化
- 二阶梯度:牛顿法 → 拟牛顿法
- 一阶梯度:动量法、Nesterov法
- 梯度截断:按值截断、按模截断(解决 梯度爆炸)
- 学习率衰减
- 固定:逆时衰减、指数衰减、自然指数衰减
- 自适应:AdaGrad → RMSprop、AdaDelta
- 二者结合
- Adam、Nadam
- 梯度方向优化
- 减少每次训练计算量
随机梯度下降法
核心思想:随机抽取 一个数据 代表整体,用以计算优化网络参数值
- 期望:摆脱样本具体数据,代表样本总体的值
- 抽样思想:抽样以获取平均数据,抽样越多越准确
- 凸问题: f ( x ( k ) ) − f ∗ = o ( 1 k ) f(x(k))-f^*=o(\frac{1}{\sqrt{k}}) f(x(k))−f∗=o(k 1),其中 f ∗ f^* f∗为凸问题极值点, k k k为迭代次数, o o o表示时间复杂度渐近符, o ( 1 k ) o(\frac{1}{\sqrt{k}}) o(k 1)表示误差量级 1 k \frac{1}{\sqrt{k}} k 1。
- 强凸问题: f ( x ( k ) ) − f ∗ = o ( 1 k ) f(x(k))-f^*=o(\frac{1}{k}) f(x(k))−f∗=o(k1),强凸问题比凸问题 收敛更快
- 减少计算资源占用
小批量梯度下降法
核心思想:随机抽取 一组数据 代表整体,用以计算优化网络参数值
- 更具代表性,抽样越多越准确
- 减少计算资源占用,训练过程更加稳定高效
梯度下降法优化树:
6.2 牛顿法
牛顿法 (Newton's method):牛顿-拉夫逊方法 (Newton-Raphson method),一种在实数域和复数域上近似求解方程的方法。其基本思想是通过迭代的方式,利用函数的泰勒展开式,将非线性方程逐步线性化,并通过求解线性方程来不断逼近真实解。
可通过一维变量理解,梯度下降法相比于牛顿法步长与最优方向偏差大,而相切二次抛物线比切线更接近原本曲线,故牛顿法有时相较于梯度下降法具有优势。
过程 :假设存在多元函数 f ( x ⃗ ) f(\vec{x}) f(x ),对 f ( x ⃗ ) f(\vec{x}) f(x )泰勒展开,保留到二阶导数(下面简化为 x x x):
f ( x ) ≈ f ( x ( t ) ) + g k ⊤ ( x ( t ) ) ( x − x ( t ) ) + 1 2 H ( x ( t ) ) ( x − x ( t ) ) 2 f(x)\approx f(x^{(t)})+g^\top_k(x^{(t)})(x-x^{(t)})+\frac{1}{2}H(x^{(t)})(x-x^{(t)})^2 f(x)≈f(x(t))+gk⊤(x(t))(x−x(t))+21H(x(t))(x−x(t))2
其中: g k = g ( x ( t ) ) = ∇ f ( x ( t ) ) g_k=g(x^{(t)})=\nabla f(x^{(t)}) gk=g(x(t))=∇f(x(t))是 f ( x ) f(x) f(x)的梯度向量在点 x ( t ) x^{(t)} x(t)的值, H ( x ( t ) ) H(x^{(t)}) H(x(t))是 f ( x ) f(x) f(x)的Hessian矩阵在点 x ( t ) x^{(t)} x(t)。
极小值必要条件:
∇ f ( x ) = 0 \nabla f(x)=0 ∇f(x)=0
假设从点xk开始,求目标函数的极小点,假设xk+1满足:
∇ f ( x ( t + 1 ) ) = 0 \nabla f(x^{(t+1)})=0 ∇f(x(t+1))=0
由泰勒展开可得:
∇ f ( x ) = g k + h k ( x − x ( t ) ) \nabla f(x)=g_k+h_k(x-x^{(t)}) ∇f(x)=gk+hk(x−x(t))
其中 H k = H ( x ( k ) ) H_k=H(x^{(k)}) Hk=H(x(k)),则:
g k + H k ( x ( t + 1 ) − x ( t ) ) = 0 g_k+H_k(x^{(t+1)}-x^{(t)})=0 gk+Hk(x(t+1)−x(t))=0
因此:
x ( t + 1 ) = x ( t ) − H k − 1 g k x^{(t+1)}=x^{(t)}-H^{-1}_kg_k x(t+1)=x(t)−Hk−1gk
从一元函数看: f ( x ) f(x) f(x)泰勒展开保留到二阶导:
f ( x ) ≈ f ( x ( t ) ) + f ′ ( x ( t ) ) ( x − x ( t ) ) + 1 2 f ′ ′ ( x ( t ) ) ( x − x ( t ) ) 2 f(x)\approx f(x^{(t)})+f'(x^{(t)})(x-x^{(t)})+\frac{1}{2}f''(x^{(t)})(x-x^{(t)})^2 f(x)≈f(x(t))+f′(x(t))(x−x(t))+21f′′(x(t))(x−x(t))2
f ( x ) f(x) f(x)求极值,令 f ′ ( x ) = 0 f'(x)=0 f′(x)=0
f ′ ( x ) = f ′ ( x ( t ) ) + f ′ ′ ( x ( t ) ) ( x − x ( t ) ) = 0 x ( t + 1 ) = x ( t ) − f ′ ( x ( t ) ) f ′ ′ ( x ( t ) ) f'(x)=f'(x^{(t)})+f''(x^{(t)})(x-x^{(t)})=0 \\ x^{(t+1)}=x^{(t)}-\frac{f'(x^{(t)})}{f''(x^{(t)})} f′(x)=f′(x(t))+f′′(x(t))(x−x(t))=0x(t+1)=x(t)−f′′(x(t))f′(x(t))
由此可得,牛顿法权重更新迭代公式为:
W t ← W t − 1 − α H − 1 g = W t − 1 − α H − 1 ∇ x f ( x ) W_t \leftarrow W_{t-1} - \alpha H^{-1} g = W_{t-1} - \alpha H^{-1} \nabla_x f(x) Wt←Wt−1−αH−1g=Wt−1−αH−1∇xf(x)
将牛顿法与其他优化方法比对,并绘制图像可得:
其中:灰色 最优路径,橙色折线 梯度下降法,绿色抛物线 牛顿法。
用途:近似值 → 最优化
缺点:计算量大,更偏向于理论,其实用性不强
补充资料
收敛性和应用场景
牛顿法具有局部二阶收敛性,即每次迭代都能以平方的速度收敛到真实解。然而,牛顿法对初始值的选取较为敏感,且需要函数在求解点有定义且导数不为零。因此,牛顿法常用于求解优化问题、非线性方程组等问题。
改进方法和局限性
为了克服牛顿法的局限性,可以采用一些改进方法,如引入下山因子以保证全局收敛性,或者使用割线法代替切线法以减少对导数的依赖。此外,对于重根问题,可以通过调整迭代公式来避免陷入局部极值。
6.3 拟牛顿法
拟牛顿法(Quasi-Newton Methods)是一种用于求解非线性优化问题的算法,它基于牛顿法的思想,但不需要计算目标函数的二阶导数矩阵(Hessian矩阵),以减少牛顿法的计算量。
拟牛顿法通过迭代的方式逐步逼近最优解,每次迭代中构造一个近似Hessian矩阵或其逆矩阵的正定对称矩阵用该矩阵进行牛顿法的迭代。
核心思想 :满足 拟牛顿条件 ,并构建一个 正定对称矩阵 近似Hessian矩阵 H H H 或其逆矩阵 H − 1 H^{-1} H−1。
**常见 拟牛顿法算法 **
- BFGS法:一种经典的拟牛顿法,具有较好的数值稳定性和收敛性。它通过迭代更新一个近似Hessian矩阵的逆矩阵,从而避免直接计算Hessian矩阵的逆。
- DFP法:一种秩2拟牛顿法,由Davidona、Fletchera和Powella三人提出。它通过迭代更新一个秩2的矩阵来近似Hessian矩阵的逆矩阵。
- Broyden族方法:Broyden族方法是一类更广泛的拟牛顿法,包括BFGS和DFP方法它们都可以看作是Broyden族方法的特殊形式。
优缺点
-
优点:拟牛顿法不需要计算Hessian矩阵的逆,从而大大减少了计算量,提高了算法的效率。此外,拟牛顿法通常具有较好的收敛性和数值稳定性。
-
缺点:拟牛顿法对初始点的选择较为敏感,且在某些情况下可能陷入局部最优解。此外,算法的收敛速度和稳定性也受到近似矩阵构造方法的影响。
拟牛顿条件
迭代过程中,记 y t = g ( t + 1 ) − g ( t ) y_t=g^{(t+1)}-g^{(t)} yt=g(t+1)−g(t), δ t = x ( t + 1 ) x ( t ) \delta_t=x^{(t+1)}x^{(t)} δt=x(t+1)x(t),则
y t = H t δ t y_t=H_t\delta_t yt=Htδt
或
H − 1 y t = δ t H^{-1}y_t=\delta_t H−1yt=δt
拟牛顿法将 G t G_t Gt或 B t B_t Bt作为 H t − 1 H^{-1}_t Ht−1或 H t H_t Ht的近似,要求矩阵 G t G_t Gt或 B t B_t Bt满足同样的条件。
6.3.1 DFP算法
核心思想 :拟牛顿条件 + 正定对称矩阵 G G G 近似 H − 1 H^{-1} H−1
用 G t G_t Gt近似Hessian矩阵,此时拟牛顿条件:
G t + 1 y t = δ t G_{t+1}y_t=\delta_t Gt+1yt=δt
引入附加矩阵:
G t + 1 = G t + P t + Q t G_{t+1}=G_t+P_t+Q_t Gt+1=Gt+Pt+Qt
其中 P t P_t Pt和 Q t Q_t Qt为待定矩阵,此时:
G t + 1 y t = G t y t + P t y t + Q t y t G_{t+1}y_t=G_t y_t+P_t y_t+Q_t y_t Gt+1yt=Gtyt+Ptyt+Qtyt
为满足拟牛顿条件,当 P t P_t Pt和 Q t Q_t Qt取值满足如下式子时,才可配平公式:
P t y t = δ t Q t y t = − G k y t P_t y_t=\delta_t \\ Q_t y_t=-G_ky_t Ptyt=δtQtyt=−Gkyt
可找到满足以上条件的取值:
P t = δ t δ t ⊤ δ t ⊤ y t P_t=\frac{\delta_t\delta_t^{\top}}{\delta_t^{\top}y_t} Pt=δt⊤ytδtδt⊤
Q t = − G t y t y t ⊤ G t y t ⊤ G t y t Q_t=-\frac{G_t y_t y_t^\top G_t}{y_t^\top G_t y_t} Qt=−yt⊤GtytGtytyt⊤Gt
这样就得到矩阵 G t + 1 G_{t+1} Gt+1的迭代公式:
G t + 1 = G + δ t δ t ⊤ δ t ⊤ y t − G t y t y t ⊤ G t y t ⊤ G t y t G_{t+1}=G+\frac{\delta_t\delta_t^{\top}}{\delta_t^\top y_t}-\frac{G_t y_t y_t^\top G_t}{y_t^\top G_t y_t} Gt+1=G+δt⊤ytδtδt⊤−yt⊤GtytGtytyt⊤Gt
可以证明,若初始矩阵 G 0 G_0 G0正定,则迭代过程中 G t G_t Gt均正定。
6.3.2 BFGS算法
核心思想 :拟牛顿条件 + 正定对称矩阵 B B B 近似 H H H
用 B t B_t Bt近似Hessian矩阵,此时拟牛顿条件:
B t + 1 δ k = y t B_{t+1}\delta_k=y_t Bt+1δk=yt
引入附加矩阵:
B t + 1 = G t + P t + Q t B_{t+1}=G_t+P_t+Q_t Bt+1=Gt+Pt+Qt
其中 P t P_t Pt和 Q t Q_t Qt为待定矩阵,此时:
B t + 1 δ t = B t δ t + P t δ t + Q t δ t B_{t+1}\delta_t=B_t\delta_t+P_t\delta_t+Q_t\delta_t Bt+1δt=Btδt+Ptδt+Qtδt
为满足拟牛顿条件,当 P t P_t Pt和 Q t Q_t Qt取值满足如下式子时,才可配平公式:
P t δ t = y t Q t δ t = − G t δ t P_t\delta_t=y_t \\ Q_t\delta_t=-G_t\delta_t Ptδt=ytQtδt=−Gtδt
可找到满足以上条件的取值:
P t = y t y t ⊤ y t ⊤ δ t P_t=\frac{y_t y_t^{\top}}{y_t^{\top}\delta_t} Pt=yt⊤δtytyt⊤
Q t = − B t δ t δ t ⊤ B t δ t ⊤ B t δ t Q_t=-\frac{B_t\delta_t\delta_t^\top B_t}{\delta_t^\top B_t \delta_t} Qt=−δt⊤BtδtBtδtδt⊤Bt
这样就得到矩阵 B t + 1 B_{t+1} Bt+1的迭代公式:
B t + 1 = B + y t y t ⊤ y t ⊤ y t − B t δ t δ t ⊤ B t δ t ⊤ B t δ t B_{t+1}=B+\frac{y_t y_t^{\top}}{y_t^\top y_t}-\frac{B_t \delta_t \delta_t^\top B_t}{\delta_t^\top B_t \delta_t} Bt+1=B+yt⊤ytytyt⊤−δt⊤BtδtBtδtδt⊤Bt
可以证明,若初始矩阵 B 0 B_0 B0正定,则迭代过程中 B t B_t Bt均正定。
此外,L-BGFS 算法也是一种拟牛顿法,其通过保存有限的历史迭代信息来近似Hessian矩阵。
6.3.3 Broyden族方法
根据BDFS算法,由 Sherman-Morrison公式推导得到。
Sherman-Morrison公式:
( A + u ⃗ v ⃗ ⊤ ) − 1 = A − 1 − A − 1 u ⃗ v ⃗ ⊤ A − 1 1 + v ⃗ ⊤ A − 1 u ⃗ (A+\vec{u}\vec{v}^{\top})^{-1}=A^{-1}-\frac{A^{-1}\vec{u}\vec{v}^{\top}A^{-1}}{1+\vec{v}^{\top}A^{-1}\vec{u}} (A+u v ⊤)−1=A−1−1+v ⊤A−1u A−1u v ⊤A−1
由DFP算法和BFGS算法 G t G_t Gt各自迭代公式得到的 G t + 1 G_{t+1} Gt+1分别记作 G D F P G^{DFP} GDFP和 G B F G S G^{BFGS} GBFGS,其均满足拟牛顿条件,故其线性组合
G k + 1 = α G D F P + ( 1 − α ) G B F G S G_{k+1}=\alpha G^{DFP}+(1-\alpha)G^{BFGS} Gk+1=αGDFP+(1−α)GBFGS
也满足拟牛顿条件,且正定。其中 0 ≤ α ≤ 1 0\le\alpha\le1 0≤α≤1,这样就得到了一类拟牛顿法,称为Broyden族方法。
6.4 共轭梯度法
基本概念
共轭梯度法 (Conjugate Gradient) :一种介于 梯度下降法 与 牛顿法 之间的优化算法。它利用目标函数的梯度逐步产生共轭方向,这些共轭方向在某种内积下正交,通过当前点处的负梯度与上次迭代的搜索方向组合来构造。共轭梯度法最早由Hestenes和Stiefel在1952年提出,主要用于求解无约束优化问题和大型线性方程组。
原理
共轭梯度法的原理基于目标函数的梯度和共轭方向。在每次迭代中,算法通过当前点处的负梯度与上次迭代的搜索方向组合来构造新的搜索方向。这些搜索方向在某种内积下正交,使得算法能够快速收敛。具体步骤包括:从初始点开始,计算当前点的残差,然后根据残差和上次的搜索方向确定新的搜索方向。沿着这个方向进行一维搜索,找到最优步长并更新解。重复这个过程直到满足收敛条件。
应用
共轭梯度法广泛应用于线性方程组求解、无约束优化问题以及偏微分方程数值解法等领域。它特别适用于解决大型线性方程组,因为其存储量小、计算成本低且稳定性高。此外,共轭梯度法还可以用于求解无约束优化问题,通过将优化问题转化为线性方程组问题来解决。
优缺点
- 优点 :
- 收敛速度快:共轭梯度法能够在较少的迭代次数内达到收敛。
- 存储量小:不需要存储和计算Hesse矩阵并求逆。
- 计算成本低:每次迭代只需进行一维搜索,计算量较小。
- 稳定性高:算法具有较好的稳定性和可靠性。
- 缺点 :
- 适用范围有限:主要适用于正定系数矩阵的线性方程组和无约束优化问题。对于非正定或不定系数矩阵的问题可能不适用。
6.5 动量相关算法
6.5.1 动量法
动量法 (Momentum):一种优化算法,旨在加速梯度下降法的收敛,尤其是在存在高曲率、嘈杂梯度或小但一致梯度的情况下。
动量法通过引入动量概念,使得参数更新不仅依赖于当前的梯度,还考虑之前梯度的累计效果,从而加速收敛并减少参数更新时的震荡(振荡)。
原理
核心思想:引入一个动量项 (velocity),记录历史梯度信息,并让其共同决定每次参数更新。动量法的更新公式如下:
-
动量更新:
v t = β v t − 1 + ( 1 − β ) ∇ w J ( w ) v_t=\beta v_{t-1}+(1-\beta) \nabla_w J(w) vt=βvt−1+(1−β)∇wJ(w)其中: v t v_t vt为第 t t t次迭代的动量项; β ∈ [ 0 , 1 ] \beta \in [0,1] β∈[0,1]为动量超参数,控制历史梯度的修正影响程度; ∇ w J ( w ) \nabla_w J(w) ∇wJ(w)为损失函数 J ( w ) J(w) J(w)对参数 w w w的梯度。
-
参数更新:
w t ← w t − 1 − α v t w_t \leftarrow w_{t-1}-\alpha v_t wt←wt−1−αvt其中: θ \theta θ为模型参数; α \alpha α为学习率,控制每次更新的步长。
原理解析
以二元函数优化为例,绘制函数等高线,函数数值随着等高圆半径的减少而减少。
通过分析可发现,拆分下降路径维度,优化过程中纵轴方向存在振荡现象,而横轴可帮助抵达最小值点。
解决方法:减弱纵轴分量 、加强横轴分量
核心思想:利用历史梯度数据修正分量
动量对梯度进行修正,具体体现:纵轴相反抵消减弱、横轴相同促进加强
解析图像:
- 实线:优化算法
- 粉色实线:梯度下降法
- 绿色实线:动量法
- 虚线:分量
- 粉色虚线:梯度下降法纵轴分量 → 需要被削弱
- 绿色虚线:梯度下降法横轴分量 → 需要被加强
- 紫色虚线:动量法两轴分量 → 修正后的分量
- 黑色椭圆线:函数等高线 → 椭圆半径越小 函数值越小
- 红点:函数最小值点
由于过远的历史数据与当前历史数据相差较大,没有参考价值;故而进行加权求和 (指数加权移动平均法),时间越久远则权重越小,反之越大。
具体表现:动量超参数(影响因子) β ∈ [ 0 , 1 ] \beta \in [0,1] β∈[0,1],控制历史梯度的修正影响程度。
例如:令 β = 0.9 \beta=0.9 β=0.9,计算第 t t t次迭代时权重更新的动量:
v t = 0.1 ⋅ 0. 9 0 ( ∇ w J ( w ) ) t + 0.1 ⋅ 0. 9 1 ( ∇ w J ( w ) ) t − 1 + 0.1 ⋅ 0. 9 2 ( ∇ w J ( w ) ) t − 2 + ⋯ + 0.1 ⋅ 0. 9 t − 1 ( ∇ w J ( w ) ) 1 v_t = 0.1\cdot 0.9^0 (\nabla_w J(w)){t}+0.1\cdot 0.9^1 (\nabla_w J(w)){t-1}+0.1\cdot 0.9^2 (\nabla_w J(w)){t-2}+\cdots+0.1\cdot 0.9^{t-1} (\nabla_w J(w)){1} vt=0.1⋅0.90(∇wJ(w))t+0.1⋅0.91(∇wJ(w))t−1+0.1⋅0.92(∇wJ(w))t−2+⋯+0.1⋅0.9t−1(∇wJ(w))1
历史梯度的影响程度将随着 t t t的增加而减少,逐渐不再对梯度修正起主要作用。即距离当前越远,对当前影响越小。
6.5.2 Nesterov动量法
Nesterov加速梯度下降法 (Nesterov Accelerated Gradient, NAG):一种改进的梯度下降算法,通过引入动量项并预测参数的未来位置来更新,显著提高了收敛速度和优化性能。其基本思想是在计算当前梯度之前,先根据动量项对参数进行一步预测更新,这种"前瞻"的方式使得算法能够更智能地选择更新方向,特别是在遇到"陡峭"的梯度变化时,能够提前调整步伐,避免过度冲动。该与牛顿法无关。
核心思想:超前考虑未来数据 → 当前动量先对权重求梯度,预先获知下一步更新方向。
图像解析:
- 红色箭头:修正后 动量 ( 1 − β ) (1-\beta) (1−β)影响项
- 绿色箭头: t − 1 t-1 t−1时刻动量 V t − 1 V_{t-1} Vt−1
- 细橙色箭头:动量 ( 1 − β ) (1-\beta) (1−β)影响项
- 透明橙色箭头:梯度下降法
- 粗橙色箭头:Nesterov方法
Nesterov动量法公式:
v t = β v t − 1 + ( 1 − β ) ∇ w J ( w + γ v t − 1 ) w t ← w t − 1 − α v t v_t=\beta v_{t-1}+(1-\beta) \nabla_w J(w+\gamma v_{t-1}) \\ w_t \leftarrow w_{t-1}-\alpha v_t vt=βvt−1+(1−β)∇wJ(w+γvt−1)wt←wt−1−αvt
6.6. 自适应学习率算法
6.6.1 AdaGrad算法
Adagrad:通过自适应地调整学习率,使得每个参教都有自己的学习率,从而在训练过程中能够更好地处理稀疏数据和高维度数据。
在Adagrad算法中,如果某个参数的偏导数累积比较大,其学习率相对较小;相反,如果其偏导数累积较小,其学习率相对较大。但整体是随着迭代次数的增加,学习率逐渐缩小。
核心思想:靠历史数据修正学习率
AdaGrad方法公式:
W t ← W t − 1 − α S t + ε ⋅ ∇ w J ( w ) S t = S t − 1 + ∇ w J ( w ) ⋅ ∇ w J ( w ) W_t \leftarrow W_{t-1} - \frac{\alpha}{\sqrt{S_t}+\varepsilon} \cdot \nabla_w J(w) \\ S_t=S_{t-1}+\nabla_w J(w)\cdot\nabla_w J(w) Wt←Wt−1−St +εα⋅∇wJ(w)St=St−1+∇wJ(w)⋅∇wJ(w)
其中: S t S_t St为第 t t t次迭代影响因子; ε \varepsilon ε为非常小的正数,如 1 0 − 6 10^{-6} 10−6; ∇ w J ( w ) \nabla_w J(w) ∇wJ(w)为损失函数 J ( w ) J(w) J(w)对参数 w w w的梯度。
AdaGrad方法具有 延迟满足特性
Ada自适应 + Grad梯度
在稀疏数据训练效果好
考虑维度 → 考虑特征
靠近末端的感知机代表各种人类不能直接理解的特征
- 学习率调整大小 → 对某一特征调整的大小
- 学习率调整大→对这一特征调整比较大
稀疏数据:依赖特征本身不同,而非特征程度不同
稀疏数据:某一维度/某一特征提供数据不够充分 → 梯度下降 → 震荡
AdaGrad可以减少这样的震荡
随着维度增加,遇到稀疏数据的可能性越来越高
AdaGrad还需进行优化
AdaGrad遇到这种情况 → 存在问题:考虑了所有历史上数据(红线)所以,出现了RMSprop算法。
6.6.2 RMSprop算法
RMSprop (Root Mean Square Propagation):一种常用的优化算法,它是对AdaGrad优化器的一种改进,旨在解决AdaGrad中学习率过快下降的问题。
对AdaGrad的改进,学习率修正 S t S_t St的计算 由累积方式 改用 指数加权移动平均法。
核心思想:利用历史梯度的指数加权移动平均来自适应地调整学习率。
自适应调整学习率:迭代过程中,每个参数的学习率并不是呈衰减趋势,即可增大也可减小。
效果:距当前越远,对当前影响越小(与动量法类似)
RMSprop方法公式:
W t ← W t − 1 − α S t + ε ⋅ ∇ w J ( w ) S t = β S t − 1 + ( 1 − β ) ∇ w J ( w ) ⋅ ∇ w J ( w ) W_t \leftarrow W_{t-1} - \frac{\alpha}{\sqrt{S_t}+\varepsilon} \cdot \nabla_wJ(w) \\ S_t=\beta S_{t-1}+(1-\beta)\nabla_wJ(w) \cdot \nabla_wJ(w) Wt←Wt−1−St +εα⋅∇wJ(w)St=βSt−1+(1−β)∇wJ(w)⋅∇wJ(w)
其中: S t S_t St为第 t t t次迭代影响因子; β ∈ [ 0 , 1 ] \beta \in [0,1] β∈[0,1]为学习率超参数,控制历史梯度的修正影响程度; ε \varepsilon ε为非常小的正数,如 1 0 − 6 10^{-6} 10−6; ∇ w J ( w ) \nabla_w J(w) ∇wJ(w)为损失函数 J ( w ) J(w) J(w)对参数 w w w的梯度。
6.6.3 Adam算法
Adam:一个鲁棒且自适应的优化策略,Adam 结合了 RMSprop 和 Momentum 两种优化算法的优点,通过计算梯度的一阶矩(均值)和二阶矩(未中心化的方差)来调整每个参数的学习率。这种方法使得它特别适用于处理非稳定目标函数和非常大的数据集或参数数量。
自适应调整学习率:同RMSprop
该方法结合了 动量法、RMSprop,兼具两者的特点。
Adam方法公式:
W t ← W t − 1 − α S t + ε V t = β 1 v t − 1 + ( 1 − β 1 ) ∇ w J ( w ) S t = β 2 S t − 1 + ( 1 − β 2 ) ∇ w J ( w ) ⋅ ∇ w J ( w ) W_t \leftarrow W_{t-1} - \frac{\alpha}{\sqrt{S_t}+\varepsilon} \\ V_t=\beta_1 v_{t-1}+(1-\beta_1) \nabla_w J(w) \\ S_t=\beta_2 S_{t-1}+(1-\beta_2)\nabla_wJ(w) \cdot \nabla_wJ(w) Wt←Wt−1−St +εαVt=β1vt−1+(1−β1)∇wJ(w)St=β2St−1+(1−β2)∇wJ(w)⋅∇wJ(w)
其中: S t S_t St为第 t t t次迭代影响因子; β 1 ∈ [ 0 , 1 ] \beta_1 \in [0,1] β1∈[0,1]为动量超参数,控制历史梯度的修正影响程度; β ∈ [ 0 , 1 ] \beta \in [0,1] β∈[0,1]为学习率超参数,控制历史梯度的修正影响程度; ∇ w J ( w ) \nabla_w J(w) ∇wJ(w)为损失函数 J ( w ) J(w) J(w)对参数 w w w的梯度。
补充:AdamW 算法
AdamW
是一种改进的 Adam 优化算法,它对Adam
的权重衰减组件进行了修改,使得权重衰减不再是添加到梯度上而是直接对参数进行更新。这种方法与 L2 正则化的原理更为接近,通常可以带来更好的训练稳定性和泛化性能。
6.6.4 Nadam算法
Nadam:结合了 Nesterov方法、RMSprop,兼具两者的特点。
6.7 学习率调整
学习率是神经网络优化时至关重要的超参数,其取值直接影响网络的优化速度。
常用的学习率调整方法:
- 学习率预热
- 学习率衰减
- 周期性学习率调整
- 带热重启的随机梯度下降
- 自适应调整学习率
6.7.1 学习率预热
训练初期,参数为随机初始化,梯度往往较大,不确定因素较多,若赋予较大初始学习率可能会致使训练不稳定。
解决方法:训练初期,采用较小的初始学习率,经一段时间训练后 (达到设定迭代次数),再恢复到设定的基础学习率,这种方法被称作 学习率预热。
学习率预热 (Warm-up),训练初期逐渐增加学习率的过程,以帮助模型更好地收敛至最优解。
-
设定初始学习率
选择较小的初始值,通常为基础学习率的一小份,如0.1或0.01。
-
Warm-up阶段长度
设定 Warm-up 迭代次数 / 训练轮次,根据数据集及模型复杂度、总迭代次数进行调节。
-
Warm-up学习率计算方式
使用线性函数逐步增加学习率,线性地增长至预设的基础学习率。
-
Warm-up完成
当达到Warm-up迭代次数后,学习率将达到/设定为基础学习率,按正常训练策略优化模型。
常用的预热策略是 逐渐预热 (Gradual Warm-up) ,假设预热迭代次数为 T ′ T' T′,初始学习率为 α 0 \alpha_0 α0,预热过程中每次更新的学习率为:
α t ′ = t T ′ α 0 , 1 ≤ t ≤ T ′ \alpha_t'=\frac{t}{T'}\alpha_0 \space\space, \space 1 \leq t \leq T' αt′=T′tα0 , 1≤t≤T′
可能存在的问题:
- 初始学习率过大 / Warm-up过短
- 模型训练不稳定 / 出现梯度爆炸
- 初始学习率国小 / Warm-up过长
- 模型训练速度过慢
6.7.2 学习率衰减
学习率衰减 (Learning Rate Decay),初期取较大值确保收敛速度,中后期在收敛至最优点附近时取较小值以避免振荡现象。
分段常数衰减 (Piecewise Constant Decay)
每经过 T 1 , T 2 , ... , T m T_1, T_2, \dots, T_m T1,T2,...,Tm次迭代将学习率衰减为原来的 β 1 , β 2 , ... , β m \beta_1, \beta_2, \dots, \beta_m β1,β2,...,βm,其中KaTeX parse error: Undefined control sequence: \textless at position 5: T_m \̲t̲e̲x̲t̲l̲e̲s̲s̲ ̲1和KaTeX parse error: Undefined control sequence: \textless at position 9: \beta_m \̲t̲e̲x̲t̲l̲e̲s̲s̲ ̲1为根据经验设置的超参数。
别称:阶梯衰减 (Step Decay)
逆时衰减 (Inverse Time Decay)
α t = α 0 1 1 + β ⋅ t \alpha_t=\alpha_0\frac{1}{1+\beta \cdot t} αt=α01+β⋅t1
其中: α 0 \alpha_0 α0为初始学习率, β \beta β为衰减率
指数衰减 (Exponential Decay)
α t = α 0 β t \alpha_t=\alpha_0\beta^t αt=α0βt
其中: α 0 \alpha_0 α0为初始学习率,KaTeX parse error: Undefined control sequence: \textless at position 7: \beta \̲t̲e̲x̲t̲l̲e̲s̲s̲ ̲1为衰减率
自然指数衰减 (Natural Exponential Decay)
α t = α 0 exp ( − β ⋅ t ) = α 0 e − β ⋅ t \alpha_t=\alpha_0\exp(-\beta \cdot t)=\alpha_0 e^{-\beta \cdot t} αt=α0exp(−β⋅t)=α0e−β⋅t
其中: α 0 \alpha_0 α0为初始学习率, β \beta β为衰减率
余弦衰减 (Cosine Decay)
别称:余弦退火衰减
α t = 1 2 α 0 ( 1 + cos ( t ⋅ π T ) ) \alpha_t=\frac{1}{2} \alpha_0 (1+\cos(\frac{t \cdot \pi}{T})) αt=21α0(1+cos(Tt⋅π))
其中: α 0 \alpha_0 α0为初始学习率, T T T为总迭代次数
6.7.3 周期性学习率调整
目的:梯度下降时逃离鞍点或尖锐最小值。
思想:短期优化效率降低,长期找到更好地最优解。
循环学习率 (Cyclic Learning Rate)
学习率在一个区间内周期性增大与减小。
线性缩放 → 三角循环学习率 (Triangle Cyclic Learning Rate)
假设循环周期 2 ⋅ Δ t 2\cdot \Delta t 2⋅Δt
- 前 Δ t \Delta t Δt:学习率线性增大
- 后 Δ t \Delta t Δt:学习率线性减小
第 t t t次迭代时,其所在的循环周期数 m m m为:
m = ⌊ 1 + t 2 ⋅ Δ t ⌋ m=\lfloor 1+\frac{t}{2 \cdot \Delta t} \rfloor m=⌊1+2⋅Δtt⌋
其中: ⌊ ⋅ ⌋ \lfloor \cdot \rfloor ⌊⋅⌋表示向下取整函数。
第 t t t次迭代的学习率为:
α t = α m i n m + ( α m a x m − α m i n m ) [ max ( 0 , 1 − b ) ] \alpha_t=\alpha^m_{min}+(\alpha^m_{max}-\alpha^m_{min})[\max{(0, 1-b)}] αt=αminm+(αmaxm−αminm)[max(0,1−b)]
其中: α m a x m \alpha^m_{max} αmaxm为第 m m m个周期学习率的上界与初始学习率, α m i n m \alpha^m_{min} αminm为第 m m m个周期学习率的下界,上下边界可随 m m m增大逐步降低。
参数 b b b非人为设定,其计算公式如下:
b = ∣ t Δ T − 2 m + 1 ∣ , b ∈ [ 0 , 1 ] b=|\frac{t}{\Delta T}-2m+1| \space \space , \space b\in[0,1] b=∣ΔTt−2m+1∣ , b∈[0,1]
6.7.4 带热重启的随机梯度下降 (Stochastic Gradient Descent with Warm Restart)
用热重启方式替代学习率衰减的方法,其形式及过程类似于循环学习率,均具有"周期性"。
学习率每间隔一个周期重新初始化为某个预先设定值,随后逐渐衰减,该操作重复进行。
每次重启后模型参数从重启前的参数基础上继续优化,即新学习率基于"半成品"参数继续探索优值。
假设在梯度下降过程中重启 M M M次, T m T_m Tm称为重启周期(第 m m m次重启在上次重启迭代 T m T_m Tm个回合后进行)。
带热重启的余弦衰减
第 t t t次迭代学习率:
α t = α m i n m + 1 2 ( α m a x m − α m i n m ) ( 1 + cos ( T c u r T m π ) ) \alpha_t = \alpha^{m}{min}+\frac{1}{2}(\alpha^m{max}-\alpha^m_{min})(1+\cos(\frac{T_{cur}}{T_m}\pi)) αt=αminm+21(αmaxm−αminm)(1+cos(TmTcurπ))
其中: α m a x m \alpha^m_{max} αmaxm为第 m m m个周期学习率的上界与初始学习率, α m i n m \alpha^m_{min} αminm为第 m m m个周期学习率的下界,上下边界可随 m m m增大逐步降低; T m T_m Tm为重启周期, T c u r T_{cur} Tcur为当前重启时的迭代次数(epoch)。
- 当 T c u r = T m T_{cur}=T_m Tcur=Tm时,学习率为 α m i n m \alpha^m_{min} αminm
- 当 T c u r = 0 T_{cur}=0 Tcur=0时 (重启后),学习率为 α m m a x \alpha^m_max αmmax
- 周期内做余弦衰减
6.7.5 其他学习率调整方法
快照集成 (Snapshot Ensebling)
快速几何集成 (Fast Geometric Ensembling, FGE)
随机加权平均 (Stochastic Weight Averaging,SWA)
6.7.6 自适应调整学习率
以上方法均为学习率自身调整算法,而自适应调整学习率算法结合了梯度下降及其扩展算法,在上述章节已详细介绍,这里仅进行简述。
AdaGrad
Ada Grad是一种基于梯度平方和的自适应学习率调整方法。它将每个参数的历史梯度平方和累加起来,并将其作为学习率的分母,在更新参数时除以该值。这样做的效果是,参数梯度较大的参数将有较小的学习率,而梯度较小的参数将有较大的学习率。这种方法可以在训练初期快速收敛,在训练后期避免参数更新过大。
RMSprop
RMS prop是一种基于指数加权移动平均的自适应学习率调整方法。它引入了一个衰减率,用来控制历史梯度平方和的权重。每次更新参数时,RMS prop使用指数加权移动平均来估计当前梯度平方和的均值,并将其作为学习率的分母。这种方法可以适应不同参数的梯度范围,从而更好地调整学习率。
Adam
Adam是一种结合了动量和自适应学习率的方法。它通过计算梯度的一阶矩估计和二阶矩估计,来动态地调整学习率。Adam方法使用指数加权移动平均来估计梯度的一阶矩估计和二阶矩估计,并通过除以这些估计来调整学习率。这种方法可以使得学习率在训练过程中既具有自适应性,又具有动量性。
6.8 其他算法
6.8.1 信赖域算法
信赖域算法 (Trust Region):一类常用的非线性优化方法,通过在局部区域内建立一个模型,并在该模型上进行优化来逼近目标函数的最优解。
信赖域方法在求解非线性优化问题具有较好的收敛性能和鲁棒性,被广泛应用于机器学习和优化领域。
基本思想
在每次迭代中给出一个信赖域,这个信赖域一般是当前迭代点 x t x_t xt的一个小邻域。然后,在这个邻域内求解一个子问题,得到试探步长(trial step) s t s_t st ,接着用某一评价函数来决定是否接受该试探步以及确定下一次迭代的信赖域。
如果试探步长被接受,则: x t + 1 = x t + s t x_{t+1}=x_{t}+s_{t} xt+1=xt+st ,否则, x t + 1 = x t x_{t+1}=x_{t} xt+1=xt。
新信赖域的大小取决于试探步的好坏,若试探步较好,下一步信赖域扩大或保持不变,否则减小信赖域。
6.8.2 坐标轴交替下降算法
**坐标轴交替下降算法(Coordinate Descent)**是一种 非梯度优化算法,主要用于求解优化问题。它通过在每次迭代中沿一个坐标方向进行一维搜索,以找到函数的局部极小值,并在每次迭代中循环使用不同的坐标方向。
坐标下降法基于的思想是多变量函数 可通过每次沿一个方向优化来获取最小值。
与通过梯度获取最速下降的方向不同,在坐标下降法中,优化方向从算法一开始就予以固定。
6.8.3 Sophia 算法
Sophia (Second-order Clipped Stochastic Optimization):一种轻量级二阶优化器,它使用Hessian对角线的廉价随机估计作为预调节器,并通过限幅机制来控制最坏情况下的更新大小。在GPT-2等预训练语言模型上,Sophia以比Adam少了50%的步骤,且实现了相同的预训练损失。由于Sophia几乎每步的内存和平均时间都保持在50%的Adam步骤,因此也就可以说其在总的时间上面也减少了50%。
此外,基于模型尺寸从125M到770M的缩放规律是Sophia优于Adam,随着模型尺寸的增加,在100K步长时,Sophia与Adam之间的差距越来越大(上图C所示)。特别是,Sophia在一个540M参数、100K步的模型上给出的验证损失与Adam在一个770M参数、100K步的模型上给出的验证损失相同。请注意,后一种模型需要多40%的训练时间和多40%的推理成本。
具体来说,「Sophia每k步使用一小批示例来估计损失的Hessian矩阵的对角线条目(本文实现中k=10)」。本文考虑了对角Hessian估计器的两种选择:(a) 使用Hessian向量积的无偏估计器,其运行时间与mini-batch梯度达到一个常数因子相同;(b)有偏估计器,利用重采样标签进行小批量梯度计算。这两个估算器每步(平均)仅引入5%的开销。在每一步,Sophia都会用梯度的指数移动平均值(EMA)除以对角Hessian估计的EMA,然后用标量进行裁剪来更新参数。
7. 模型评估
7.1 模型容量
模型**容量 (capacity)**是指其拟合各种函数的能力,容量低的模型可能很难拟合训练集,容量高的模型可能会过拟合。
一种控制容量的方法是 选择 假设空间 (hypothesis space),即学习算法可以选择为解决方案的函数集。(例如:广义线性回归 → 多项式函数)
表示容量 (representational capacity) :模型规定了调整参数降低训练目标时,学习算法从中选择函数的函数族。
有效容量 (effective capacity):算法习得的一个可以大幅降低训练误差的函数。
奥卡姆剃刀原理:在同样能够解释已知观测现象的假设中,我们应该挑选 ''最简单'' 的那一个。(如无必要,勿增实体。)
Vapnik-Chervonenkis维度 (Vapnik-Chervonenkis dimension, VC):简称VC维,统计学中一种量化模型容量的方法.
最佳容量(optimal capacity):训练误差与泛化误差变化的最优折中容量值。
上图表示容量和误差之间的典型关系。训练误差和测试误差表现得非常不同。在图的左端,训练误差和泛化误差都非常高。这是欠拟合机制 (underftting regime) 。当我们增加容量时,训练误差减小,但是训练误差和泛化误差之间的间距却不断扩大。最终,这个间距的大小超过了训练误差的下降,我们进人到了过拟合机制 (overftting regime) ,其中容量过大,超过了最佳容量 (optimalcapacity)。
7.2 拟合能力
模型在训练数据上的表现,即模型在训练集上的准确度。
一个好的模型应该在训练数据上表现良好,同时在未见过的数据上也能表现出色,否则会出现欠拟合和过拟合现象。
欠拟合现象:模型在训练过程中未能捕捉到数据集中的有效规律或模式,模型过于简单,无法正确预测结果。
过拟合现象:模型在训练数据上表现过于优越,但在未见过的数据上表现不佳。
7.3 泛化能力
模型的泛化能力是指模型对从未见过数据的适应能力/推广能力。
这意味着模型在训练集以外的数据上有良好的表现,包括测试集(测试)、验证集(验证)和实际应用(未知)中的表现。
一个拥有高泛化能力的模型应该是对近乎所有新数据做出正确的预测,而不仅仅是在训练集上表现良好,高泛化能力的模型常常能够抵抗造成变化和异常值的影响,从而更好地适用各种情况的数据。
提高泛化能力
① 数据端:收集更多的数据,提高泛化能力
② 模型选择:选择合适的模型,提高模型的泛化能力,选择简答模型可减少过拟合风险
③ 损失函数:损失函数加正则化,通过限制模型复杂度,避免模型训练集过拟合
④ 数据增强:数据增强及增加数据多样性,有著训练模型适用"新花样"数据(图片: 旋转/平移/裁剪)
⑤ 优化策略:在模型中加入BN层、Dropout层或使用不同梯度下降策略。
⑥ 交叉验证:一种用于评估模型方法的技术。通过将数据集分为训练集+测试集、验证集,多次训练模型,并在验证集上进行验证,从而获得模型的频率表现,可理解为多次调参。
7.3.1 交叉验证
在实际训练中,模型对于训练集的拟合程度较好,但对未知数据的拟合程度通常不高。
因此,通常并不会把所有数据集都用于训练,而是取大部分作为训练集用于训练模型,取剩余小部分作为验证集不参加训练用于评估模型,相对客观的判断这些参数对训练集之外数据的符合程度,这种思想就称为 交叉验证 (Cross Validation),又称 循环估计 (Rotation Estimation)。
K折交叉验证
K折交叉验证(K-fold cross-validation)是一种常用的交叉验证方法。它将原始数据集分成 K个子集,称为折 (fold)。
模型在k个不同的训练集上进行k次训练和验证,首次抽取其中 1 1 1 折作为验证集,其余 k − 1 k-1 k−1 个折作为训练集,后续循环选择不同验证集与训练集,反复验证产生评估指标(如准确率、精确度、召回率等),直到每个子集都充当一次验证集,从而产生了 k k k 个评估指标,对 k k k 个评估指标取平均值作为最终的模型性能评估指标。
这里以 k = 10 k=10 k=10 为例,一般取值范围 k ∈ [ 5 , 12 ] k\in[5,12] k∈[5,12],过大的 k k k 值将使得训练模型次数过多致使计算效率降低。
特点
- 优点:可以有效利用数据
- 缺点:计算成本高、每次计算结果不稳定。
数据集划分
训练神经网络模型时,一般将可用于训练的数据集划分为三个部分:训练集 、验证集 、测试集 ,一种常见的分割比例为 6 : 2 : 2 6:2:2 6:2:2。
倘若不使用验证集,训练集与测试集的常见分割比例为 7 : 3 7:3 7:3 或 8 : 2 8:2 8:2。
训练集 | 验证集 / 评估集 | 测试集 | |
---|---|---|---|
英文 | Train Set | Valid Set | Test Set |
用于训练 | 是 | 否 | 否 |
作用 | 用于模型学习 | 评估模型泛化能力 调节超参数 不侧重于训练效果 | 评估模型拟合能力 观测训练训练效果 不可用于调节超参数 |
使用次数 | 一次 | 若干次 不断调参 | 一次 |
缺陷 | / | 规模有限,仍不能代表所有未知数据 | 可取一小部分作为验证集,也不能代表所有未知数据 |
仅凭一次验证无法对模型做出客观评价,故引入交叉验证。利用不同的训练集/验证集划分,针对模型进行多组训练/验证,以避免单次验证结果过于片面、训练数据不足等问题。
7.3.2 没有免费午餐定理
机器学习算法能够在有限个训练集样本中很好地泛化。
站在归纳推理的角度,必须拥有整个集合的元素,从一组有限的样本中推断一般规则固然不是很可靠。但机器学习通过 概率法则 一定程度上规避了这个问题,使得无需使用 纯粹逻辑 推理整个确定性法则,这意味着机器学习找到一个在所关注 大多数样本 上可能正确的规则。
没有免费午餐定理定理 表明:在所有可能的数据生成分布上平均之后,每一个分类算法在未事先观测的点上都有相同的错误率。
未知样本数据总是存在,算法不可能涵盖所有 各式各样各型各色的 样本数据,随着数据量的增大,算法间的平均性能差距逐渐缩小。
但我们在获取所有可能数据中最关键的数据,仍能解决生活中的实际问题。
即没有一个机器学习算法总比其他的好,这意味着没有一个通用或绝对最好的学习算法。
从感性直观上理解,针对不同特定领域的数据总能找到比该领域通用模型性能更优的特化模型,也没有能在所有领域都能 成为专家 并且 游刃有余 得心应手 的模型。
因此,算法的设计和应用需要考虑具体问题的特性,而不是盲目追求通用性。
即我们的目标时理解什么养的分布能够使得人工智能更好的获取"真实世界"的经验,什么样的学习算法在我们关注的数据生成分布上效果最好。
没有免费午餐定理阐述了没有最优的学习算法;同样也没有最优的正则化形式。
所以,不仅需要设计一个适合解决特定任务的模型,还须选择一个适合解决特定任务的正则形式。
7.3 机器学习准则
期望风险、经验风险、结构风险的概念与损失函数的概念息息相关。在机器学习中,损失函数主要是用来衡量模型的拟合程度,即表示模型预测值与真实值之间的差距。损失函数越小,说明模型拟合的越好,该模型对未知样本的预测能力越强。
而损失函数仅可描述单个样本的拟合程度,但训练模型需要大量样本,所以利用期望风险的概念衡量模型对所有样本的拟合能力。
7.3.1 期望风险
期望风险:模型对所有样本的拟合能力(所有样本 = 训练 + 测试 + 未知)
因存在未知样本,故而无法求出所有样本的联合概率分布。
但训练样本已知,且训练样本占比大,故可用训练样本代替所有样本,从而诞生了经验风险的概念。
7.3.2 经验风险
经验风险:模型对所有训练样本的拟合能力,即模型关于训练数据集的平均损失。训练样本已知,对所有训练样本求损失函数,再累加求平均,即可得经验风险。
经验风险最小化 存在过拟合问题。
由于训练样本已知,总体联合分布分布未知,则产生了用训练样本代替总体的思想。但经验风险最小化意味着模型过度贴合训练集,即在训练集上表现很好,但在预测新样本时表现很差,这便是过拟合现象。
为避免过拟合现象发生,需限制模型对训练集的拟合程度,从而诞生了结构风险及正则化的概念。
7.3.3 结构风险
结构风险:以经验风险为基础,引入惩罚项 (也叫正则化因子),结构风险降低代表模型出现过拟合的风险降低。
结构风险降低模型过拟合风险降低的原因:
经验风险最小化往往会出现过拟合,如下图最右侧所示。
从上图中最左侧和最右侧对比中可以看出,模型出现过拟合的原因在于将原本一个低次项的函数拟合成一个高次项,提高了模型的复杂度。所以要想降低过拟合,办法就是要尽量使得和变小或者趋于0,从而降低模型的复杂度,使模型从一个高次项变成契合的函数,如中间的图所示。
当结构风险最小化时模型达到最优,但有两点需要注意:
①此时的最优可能是相对的,因为最优一般唯一,且不容易找到。
② 正则化项前有一个正则系数,实际应用中需要对正则系数进行多次调节,以保证损失函数和模型的复杂度达到一个相对平衡的状态。
7.3.4 总结
1、期望风险:针对全局,基于所有样本。是理想化的,不可求不可实现。(训练 + 测试 + 未知)
2、经验风险:针对局部,基于训练样本。是现实的,可求可实现。(训练)
3、结构风险:经验风险和期望风险折中,在经验风险的基础上加上 惩罚项/正则化函数,同时控制模型的损失函数和模型的复杂度,目的是为了减少经验风险最小化带来的过拟合的风险。
7.4 参数范数正则化
正则化定义:凡是可以减少泛化误差,而非减少训练误差的方法均可称作正则化方法。
而参数范数正则化属于经典正则化方法之一,其核心思想是通过对目标函数添加一个参数范数惩罚 Ω ( θ ) \Omega(\theta) Ω(θ),限制模型的学习能力。
将正则化后的目标函数记为:
J ~ ( θ ; X , y ) = J ( θ ; X , y ) + α Ω ( θ ) \tilde{J}(\theta;X,y)=J(\theta;X,y)+\alpha\Omega(\theta) J~(θ;X,y)=J(θ;X,y)+αΩ(θ)
其中, α ∈ [ 0 , ∞ ] \alpha\in[0,\infty] α∈[0,∞]是权衡范数惩罚项 Ω \Omega Ω和标准目标函数 J ( X , θ ) J(X,\theta) J(X,θ)相对贡献的超参数, α \alpha α与正则化力度成正比,取0时表示未进行正则化,取值越大正则化力度越强。
最小化 J ~ \tilde{J} J~时,降低 J J J关于训练数据的误差,同时减小在某些衡量标准下参数 θ \theta θ的规模。
神经网络模型中包含两种参数:仿射变换-权重 w ⃗ \vec{w} w (正则化)、偏置 b ⃗ \vec{b} b (不正则化)
偏置项不正则化的原因
- 不对其正则化,也不会导致太大的方差
- 对其正则化可能会导致明显的欠拟合
- 偏置作为神经元阈值,会跟随权重变动变化
综上,向量 θ ⃗ \vec{\theta} θ 表示所有参数,向量 w ⃗ \vec{w} w 表示所有应受范数惩罚影响的权重,所以在本文中不直接使用 θ ⃗ \vec{\theta} θ 。
7.4.1 L1正则化(权值稀疏)
L1正则化是指向量中各个元素绝对值之和。
L1范数会使权值稀疏 原因
- 任何的正则化算子,如果他在 W i = 0 W_i=0 Wi=0的地方不可微,并且可以分解为"求和" 的形式,那么这个正则化算子就可以实现稀疏。
参数稀疏的优势
- 特征选择(Feature Selection)
- 权值稀疏化能够实现特征的自动选择,一般 x i x_i xi的大部分元素/特征都与其标签 y i y_i yi没有直接关联。
- 在最小化目标函数时,非主要特征可减少训练误差,但对于绝大多数样本及未知样本的帮助微不足道,其反而干扰了模型对未知样本的预测。
- 而参数稀疏可将这些 非主要特征权/无关特征 权重设置为0,从而起到过滤效果。
- 可解释性
- 将非主要特征/无关特征置为0,模型具有更良好的解释性。(无法为结果提供较大帮助的特征)
l1正则化模型的最优化问题等价于:
m i n w L ( w ) = m i n W ( J ( w ) + λ ∑ i = 1 n ∣ w i ∣ ) min_w\space L(w) = min_W(J(w) + \lambda\sum^{n}_{i=1}|w_i|) minw L(w)=minW(J(w)+λi=1∑n∣wi∣)
等价为凸优化问题:
m i n w J ( w ) ∑ i = 1 n ∣ w i ∣ ≤ C , 其中 C 与正则化参数 λ 成反比 min_w \space J(w) \\ \sum^n_{i=1}|w_i| \le C, 其中C与正则化参数\lambda成反比 minw J(w)i=1∑n∣wi∣≤C,其中C与正则化参数λ成反比
在限定区域内,找到使J(w)最小的值。
切向量始终指向 w 2 w2 w2轴,故L1正则化易使参数为0,实现特征稀疏化。
结论:l1正则化易使参数为0,使特征稀疏化
7.4.2 L2正则化(权重衰减)
L2正则化策略通过向目标函数添加一个正则化项 Ω ( θ ) = 1 2 ∣ ∣ w ⃗ ∣ ∣ 2 2 \Omega(\theta)=\frac{1}{2}||\vec{w}||^2_2 Ω(θ)=21∣∣w ∣∣22,使权重更接近原点,其又称岭回归、Tikhonov正则。
J ~ ( w ⃗ ; X , y ⃗ ) = α 2 w ⃗ ⊤ w ⃗ + J ( w ⃗ ; X , y ⃗ ) \tilde{J}(\vec{w};X,\vec{y})=\frac{\alpha}{2}\vec{w}^{\top}\vec{w}+J(\vec{w};X,\vec{y}) J~(w ;X,y )=2αw ⊤w +J(w ;X,y )
∇ w J ~ ( w ⃗ ; X , y ⃗ ) = α w ⃗ + ∇ w J ( w ⃗ ; X , y ⃗ ) \nabla_w\tilde{J}(\vec{w};X,\vec{y})=\alpha\vec{w}+\nabla_wJ(\vec{w};X,\vec{y}) ∇wJ~(w ;X,y )=αw +∇wJ(w ;X,y )
经正则化后,梯度更新权重前先收缩权重向量(乘以常数因子 1 − ε α 1-\varepsilon\alpha 1−εα):
w ⃗ ← w ⃗ − ε [ α w ⃗ + ∇ w J ( w ⃗ ; X , y ⃗ ) ] ← ( 1 − ε α ) w ⃗ − ε ∇ w J ( w ⃗ ; X , y ⃗ ) \begin{equation} \begin{aligned} \vec{w}&\leftarrow\vec{w}-\varepsilon[\alpha\vec{w}+\nabla_wJ(\vec{w};X,\vec{y})] \\ &\leftarrow(1-\varepsilon\alpha)\vec{w}-\varepsilon\nabla_wJ(\vec{w};X,\vec{y}) \end{aligned} \end{equation} w ←w −ε[αw +∇wJ(w ;X,y )]←(1−εα)w −ε∇wJ(w ;X,y )
训练过程:
令 w ⃗ ∗ \vec{w}^{*} w ∗ 为 未正则化的目标函数 取得最小训练误差时的权重向量(令 w ⃗ ∗ \vec{w}^{*} w ∗ 为 未正则化时最优训练权重)
w ⃗ ∗ = a r g m i n w J ( w ⃗ ) \vec{w}^{*}=argmin_w J(\vec{w}) w ∗=argminwJ(w )
并在 w ⃗ ∗ \vec{w}^{*} w ∗的邻域对目标函数做二次近似 (损失为MSE则完美近似),即泰勒展开至二次项。
J ^ ( θ ) = J ( w ⃗ ∗ ) + 1 2 ( w ⃗ − w ⃗ ∗ ) ⊤ H ( w ⃗ − w ⃗ ∗ ) \hat{J}(\theta)=J(\vec{w}^{*})+\frac{1}{2}(\vec{w}-\vec{w}^{*})^{\top}H(\vec{w}-\vec{w}^{*}) J^(θ)=J(w ∗)+21(w −w ∗)⊤H(w −w ∗)
由于 w ⃗ ∗ \vec{w}^{*} w ∗最优; ∇ w ∗ J ( w ⃗ ∗ ) = 0 \nabla_{{w}^{*}}J(\vec{w}^{*})=0 ∇w∗J(w ∗)=0,故式中无一次项,且 H e s s i a n Hessian Hessian矩阵 H H H半正定。
这里对 H e s s i a n Hessian Hessian矩阵的正定性判定做出补充 (一般方阵也适用) ,主要根据其特征值 Λ \Lambda Λ (由 λ i \lambda_i λi组成对角阵) 判断:
- 当 Λ > 0 \Lambda \gt 0 Λ>0, H e s s i a n Hessian Hessian矩阵 正定
- 当 Λ ≥ 0 \Lambda \ge 0 Λ≥0, H e s s i a n Hessian Hessian矩阵 半正定
- 当 Λ < 0 \Lambda \lt 0 Λ<0, H e s s i a n Hessian Hessian矩阵 负定
- 当 Λ ≤ 0 \Lambda \le 0 Λ≤0, H e s s i a n Hessian Hessian矩阵 半负定
- 当 Λ \Lambda Λ中正负 λ i \lambda_i λi均存在时, H e s s i a n Hessian Hessian矩阵 不定
判断 H H H半正定(简单理解 不严谨 仅供参考):
假设 w ⃗ ∗ = [ w 1 w 2 ] \vec{w}^{*}=\begin{bmatrix} w_1 \\ w_2 \end{bmatrix} w ∗=[w1w2],已知 ∇ w ∗ J ( w ⃗ ∗ ) = 0 \nabla_{{w}^{*}}J(\vec{w}^{*})=0 ∇w∗J(w ∗)=0,即 ∂ J ∂ w 1 = ∂ J ∂ w 2 = 0 \frac{\partial J}{\partial w_1}=\frac{\partial J}{\partial w_2}=0 ∂w1∂J=∂w2∂J=0,可得 $ \frac{\partial^2J}{\partial w_1\partial w_2}= \frac{\partial^2J}{\partial w_2\partial w_1}=0$
H= \\begin{bmatrix} \\frac{\\partial\^2J}{\\partial w\^2_1} \& \\frac{\\partial\^2J}{\\partial w_1\\partial w_2} \\ \\frac{\\partial\^2J}{\\partial w_2\\partial w_1} \& \\frac{\\partial\^2J}{\\partial w\^2_2} \\end{bmatrix} \\begin{bmatrix} \\frac{\\partial\^2J}{\\partial w\^2_1} \& 0 \\ 0 \& \\frac{\\partial\^2J}{\\partial w\^2_2} \\end{bmatrix} KaTeX parse error: Can't use function '$' in math mode at position 3: 求$̲H$特征值: \\begin{equation} \\begin{aligned} \|\\lambda I-H\|\&= \\left\| \\begin{matrix} \\lambda-\\frac{\\partial\^2J}{\\partial w\^2_1} \& 0\\ 0 \& \\lambda-\\frac{\\partial\^2J}{\\partial w\^2_2} \\end{matrix} \\right\| \\ \&=(\\lambda-\\frac{\\partial\^2J}{\\partial w^2_1})(\\lambda-\\frac{\\partial^2J}{\\partial w\^2_2}) \\ \&=\\lambda^2-(\\frac{\\partial^2J}{\\partial w^2_1}+\\frac{\\partial^2J}{\\partial w^2_2})\\lambda+\\frac{\\partial^2J}{\\partial w^2_1}\\cdot\\frac{\\partial^2J}{\\partial w\^2_2} \\\&=0 \\end{aligned} \\end{equation} 利用一元二次方程根的判别式: 利用一元二次方程根的判别式: 利用一元二次方程根的判别式: \\begin{equation} \\begin{aligned} \\Delta\&= (\\frac{\\partial\^2J}{\\partial w^2_1}+\\frac{\\partial^2J}{\\partial w^2_2})^2-4\\cdot\\frac{\\partial\^2J}{\\partial w^2_1}\\cdot\\frac{\\partial^2J}{\\partial w\^2_2} \\ \&=(\\frac{\\partial\^2J}{\\partial w^2_1}-\\frac{\\partial^2J}{\\partial w^2_2})^2 \\ \&\\ge0 \\end{aligned} \\end{equation}
因 Δ ≥ 0 \Delta\ge0 Δ≥0 且 方程中二次项为正数1,故方程 ∣ λ I − H ∣ = 0 |\lambda I-H|=0 ∣λI−H∣=0,至少有1个非负根。
从而得出Hessian矩阵的特征值大于等于0,为半正定矩阵。
先前,在 w ⃗ ∗ \vec{w}^{*} w ∗的邻域对目标函数做二次近似 (损失为MSE则完美近似),即泰勒展开至二次项。
J ^ ( w ⃗ ) = J ( w ⃗ ∗ ) + 1 2 ( w ⃗ − w ⃗ ∗ ) ⊤ H ( w ⃗ − w ⃗ ∗ ) \hat{J}(\vec{w})=J(\vec{w}^{*})+\frac{1}{2}(\vec{w}-\vec{w}^{*})^{\top}H(\vec{w}-\vec{w}^{*}) J^(w )=J(w ∗)+21(w −w ∗)⊤H(w −w ∗)
当 J ^ \hat{J} J^取最小时,梯度为0:
∇ w J ^ ( w ⃗ ) = H ( w ⃗ − w ⃗ ∗ ) = 0 \nabla_{w} \hat{J}(\vec{w})=H(\vec{w}-\vec{w}^*)=0 ∇wJ^(w )=H(w −w ∗)=0
在上式中引入L2正则化的梯度 α w ~ \alpha \tilde{w} αw~,假设 α \alpha α为较小值 且此时 w ~ \tilde{w} w~最优, w ~ \tilde{w} w~在 w ⃗ ∗ \vec{w}^{*} w ∗的邻域内 ( α → 0 \alpha \rightarrow 0 α→0 正则化最优解解 w ~ \tilde{w} w~会趋向 w ⃗ ∗ \vec{w}^* w ∗):
α w ~ + H ( w ~ − w ⃗ ∗ ) = 0 ( H + α I ) w ~ = H w ⃗ ∗ w ~ = ( H + α I ) − 1 H w ⃗ ∗ \alpha \tilde{w} + H(\tilde{w}-\vec{w}^*)=0 \\ (H+\alpha I)\tilde{w}=H\vec{w}^* \\ \tilde{w}=(H+\alpha I)^{-1}H\vec{w}^* αw~+H(w~−w ∗)=0(H+αI)w~=Hw ∗w~=(H+αI)−1Hw ∗
当 α \alpha α增加时,探究两者的变换关系。因 H H H为实对称矩阵,故可将其分解为标准正交基 H = Q Λ Q ⊤ H=Q \Lambda Q^\top H=QΛQ⊤,则有:
w ~ = ( Q Λ Q ⊤ + α I ) − 1 Q Λ Q ⊤ w ⃗ ∗ = ( Q Λ Q ⊤ + α Q I Q ⊤ ) − 1 Q Λ Q ⊤ w ⃗ ∗ = [ Q ( Λ + α I ) Q ⊤ ] − 1 Q Λ Q ⊤ w ⃗ ∗ = ( Q ⊤ ) − 1 ( Λ + α I ) − 1 Q − 1 Q Λ Q ⊤ w ⃗ ∗ ( Q ⊤ = Q − 1 ) = Q ( Λ + α I ) − 1 Λ Q ⊤ w ⃗ ∗ \begin{equation} \begin{aligned} \tilde{w}&=(Q \Lambda Q^\top + \alpha I)^{-1}Q \Lambda Q^{\top}\vec{w}^* \\ &=(Q \Lambda Q^\top + \alpha Q I Q^\top )^{-1}Q \Lambda Q^{\top}\vec{w}^* \\ &=[Q(\Lambda+\alpha I)Q^\top]^{-1}Q \Lambda Q^{\top}\vec{w}^* \\ &=(Q^\top)^{-1}(\Lambda+\alpha I)^{-1}Q^{-1}Q\Lambda Q^\top \vec{w}^* & (Q^\top=Q^{-1}) \\ &=Q(\Lambda+\alpha I)^{-1}\Lambda Q^\top \vec{w}^* \end{aligned} \end{equation} w~=(QΛQ⊤+αI)−1QΛQ⊤w ∗=(QΛQ⊤+αQIQ⊤)−1QΛQ⊤w ∗=[Q(Λ+αI)Q⊤]−1QΛQ⊤w ∗=(Q⊤)−1(Λ+αI)−1Q−1QΛQ⊤w ∗=Q(Λ+αI)−1ΛQ⊤w ∗(Q⊤=Q−1)
可得引入L2正则化时与未正则化时权重最优解的关系为 w ~ = Q [ ( Λ + α I ) − 1 Λ ] Q ⊤ w ⃗ ∗ \tilde{w}=Q[(\Lambda+\alpha I)^{-1}\Lambda]Q^\top\vec{w}^* w~=Q[(Λ+αI)−1Λ]Q⊤w ∗,对角阵 Λ \Lambda Λ 对角线元素 λ i \lambda_i λi 可直接进行运算,则关系式可进一步表示为:
w ~ = Q [ λ 1 λ 1 + α λ 2 λ 2 + α ⋱ λ n λ n + α ] Q ⊤ w ⃗ ∗ \tilde{w} =Q \begin{bmatrix} \frac{\lambda_1}{\lambda_1+\alpha} & & &\\ & \frac{\lambda_2}{\lambda_2+\alpha}& &\\ & & \ddots &\\ & & & \frac{\lambda_n}{\lambda_n+\alpha}& \end{bmatrix} Q^\top\vec{w}^* w~=Q λ1+αλ1λ2+αλ2⋱λn+αλn Q⊤w ∗
由于 Q Q Q是标准正交基,其基向量两两正交且模长为1,可视作新的坐标系, Q A Q ⊤ = B QAQ^\top=B QAQ⊤=B 为空间表达转换式。
故L2正则化或权重衰减的效果沿着由 H H H的特征向量所定义的轴缩放 w ⃗ ∗ \vec{w}^* w ∗,即根据 λ i λ i + α \frac{\lambda_i}{\lambda_i+\alpha} λi+αλi因子缩放与 H H H第 i i i个特征向量对齐 w ⃗ ∗ \vec{w}^* w ∗的分量。
图形表示为:
上图所示,红色实线是正则项区域的边界,蓝色实线是J(w)的等高线,越靠里的等高圆,J(W)越小,负梯度的方向是J(W)减小最快的方向,用 w ⃗ \vec{w} w 表示,正则项边界的法向量用实黑色箭头表示。
正则项边界在点P1的切向量有J(w)负梯度方向的分量,所以该点会有往相邻的登高虚线圆运动的趋势;当P1点运动到P2点,正则项边界在点P2的切向量与J(w)梯度方向的向量垂直,即该点没有往负梯度方向运动的趋势;所以P2点是J(w)最小的点。
可以看出,L2正则化相较于未正则化的最优解略微偏移,且主要针对无助于目标函数减少的方向,这对应着Hessian矩阵较小的特征值;所以L2正则化具有权重衰减的作用。
结论:L2正则化使Loss(w)值最小时对应的参数变小。
Karush--Kuhn-Tucker条件 / 拉格朗日乘数法 说明:
最初,介绍L2正则化时,所列举公式如下:
J ~ ( w ⃗ ; X , y ⃗ ) = α 2 w ⃗ ⊤ w ⃗ + J ( w ⃗ ; X , y ⃗ ) \tilde{J}(\vec{w};X,\vec{y})=\frac{\alpha}{2}\vec{w}^{\top}\vec{w}+J(\vec{w};X,\vec{y}) J~(w ;X,y )=2αw ⊤w +J(w ;X,y )
这里将以KKT条件的视角,可以将参数范数惩罚视作对权重强加约束的原因,即利用L2范数规范模型参数。
J ~ ( w ⃗ ; X , y ⃗ ) = α ∗ w ⃗ ⊤ w ⃗ + J ( w ⃗ ; X , y ⃗ ) \tilde{J}(\vec{w};X,\vec{y})=\alpha^*\vec{w}^{\top}\vec{w}+J(\vec{w};X,\vec{y}) J~(w ;X,y )=α∗w ⊤w +J(w ;X,y )
训练神经网络时,得到的w和b不是唯一确定的值,相同的损失函数值可能对应很多不同的w和b。
初始值不同==> 若都能收敛至相同的损失函数最值,其对应权重绝对值大小也不一定不同。
新的数据与大参数相乘,噪声误差随着数值一同放大,判断结果容易出错。
控制参数,使其数值不要那么大。
"框框"→可行域范围内求最值→拉格朗日乘数法→约束w,而b常数项随w变化不考虑,以控制拟合程度。
问题转化:在可行域内,找到使 L o s s ( w ) Loss(w) Loss(w)最小的值。由于L2正则化范围是凸集,该问题等价于凸优化问题。
m i n w J ( w ⃗ ) w ⃗ ⊤ w ⃗ ≤ C , 其中 C 与正则化参数 α ∗ 成反比 min_w \space J(\vec{w}) \\\vec{w}^{\top}\vec{w} \le C, 其中C与正则化参数\alpha^*成反比 minw J(w )w ⊤w ≤C,其中C与正则化参数α∗成反比
与上小节相同,这里将问题简化为二维双轴问题,以解释拉格朗日乘数法与正则化间的关系。
定义拉格朗日乘数法目标函数:
L 0 ( w ⃗ , α ∗ ) = J ( w ⃗ ) + α ∗ ( w ⊤ w − C ) = J ( w ⃗ ) + α ∗ w ⊤ w − α ∗ C \begin{equation} \begin{aligned} L_0(\vec{w},\alpha^*) &=J(\vec{w})+\alpha^*(w^\top w-C) \\ &=J(\vec{w})+\alpha^* w^\top w-\alpha^* C \end{aligned} \end{equation} L0(w ,α∗)=J(w )+α∗(w⊤w−C)=J(w )+α∗w⊤w−α∗C
由于常数项 − α ∗ C -\alpha^* C −α∗C梯度为0,故消去常数项后与原式等价,由此得出L2正则化表达式:
L ( w ⃗ , α ∗ ) = L 0 ( w ⃗ , α ∗ ) + α ∗ C = J ( w ⃗ ) + α ∗ w ⊤ w \begin{equation} \begin{aligned} L(\vec{w},\alpha^*) &=L_0(\vec{w},\alpha^*)+\alpha^* C \\ &=J(\vec{w})+\alpha^*w^\top w \end{aligned} \end{equation} L(w ,α∗)=L0(w ,α∗)+α∗C=J(w )+α∗w⊤w
两目标函数等价,并分别对两目标函数求梯度:
a r g m i n w m a x α , α ≥ 0 L ( w ⃗ , α ∗ ) = a r g m i n w m a x α , α ≥ 0 L 0 ( w ⃗ , α ∗ ) argmin_w \space max_{\alpha, \alpha\ge0} \space L(\vec{w},\alpha^*)=argmin_w \space max_{\alpha, \alpha\ge0} \space L_0(\vec{w},\alpha^*) argminw maxα,α≥0 L(w ,α∗)=argminw maxα,α≥0 L0(w ,α∗)
∇ w L ( w ⃗ , α ∗ ) = ∇ w L 0 ( w ⃗ , α ∗ ) \nabla_w \space L(\vec{w},\alpha^*) = \nabla_w L_0(\vec{w},\alpha^*) ∇w L(w ,α∗)=∇wL0(w ,α∗)
该问题中:
- 参数 C C C确定圆半径: C C C↑ 可行域圆半径↑ 正则化力度↓
- 参数 α ∗ \alpha^* α∗控制正则化力度 (确定 w ~ \tilde{w} w~远离 w ⃗ ∗ \vec{w}^* w ∗的程度): α ∗ \alpha^* α∗↑ 正则化力度↑
- 故参数 C C C与参数 α ∗ \alpha^* α∗成反比
α ∗ \alpha^* α∗乘子负责调节两方梯度大小
- 损失函数梯度与约束条件梯度方向相反,只有方向相反相加才能为0。
α ∗ \alpha^* α∗稀疏对应损失函数的梯度大小初一约束条件对应函数的梯度大小
不同切点数值不同→确定不同的 α ∗ \alpha^* α∗
反之,确定不同的 α ∗ \alpha^* α∗→确定切点的位置
只有在恰当的位置,损失函数和约束条件的梯度乘以 α ∗ \alpha^* α∗后,相加才能等于0。
只确定了一个超参数 C C C,确定了 C C C则 α ∗ \alpha^* α∗可由它计算出来。
α ∗ \alpha^* α∗不是超参数,无需无需人为确定,只有 C C C能够人为确定,之后计算出 α ∗ \alpha^* α∗来。
在 L L L中,将 α ∗ \alpha^* α∗作为一个超参数,利用两者反比关系整合 C C C的功能,人为确定 α ∗ \alpha^* α∗(即选择哪个点作为问题的最值点)
7.4.3 弹性网络正则化
由于 ℓ1 和 ℓ2 正则化各具特点,可整合二者为一种正则化方式,称为弹性网络正则化 (Elastic Net Regularization)。
θ ∗ = arg min x 1 N ∑ n = 1 N L ( y ( n ) , f ( x ( n ) ; θ ) ) + α 1 l 1 ( θ ) + α 2 l 2 ( θ ) \theta^*={ \underset {x} { \operatorname {arg\,min} } \, \frac{1}{N}\sum^N_{n=1}\mathcal{L}(y^{(n)},f(\boldsymbol{x^{(n)}};\theta))+\alpha_1\mathscr{l}_1(\theta)+\alpha_2\mathscr{l}_2(\theta)} θ∗=xargminN1n=1∑NL(y(n),f(x(n);θ))+α1l1(θ)+α2l2(θ)
其中α1 和α2 分别为两个正则化项的系数。
7.5 提前停止
提前终止 (Early Stopping),又称早停法。
提前终止旨在模型开始显著过拟合前适时停止训练,以使模型在验证集上表现最佳的状态,从而实现训练效率与泛化能力的良好平衡。
在训练过程中,需要设置设定最大训练轮数、验证集评估间隔,不间断地利用验证集对模型状态进行评估,直至评估指标不再大幅提升时提前终止训练任务。
7.6 Dropout 丢弃法
训练深层神经网络时,随机丢弃一部分神经元及其连边 以避免过拟合的策略被称作Dropout丢弃法。
常用丢弃函数分别表示训练阶段神经元的丢弃情况和测试阶段的补偿情况。
训练阶段判定神经元是否丢弃;测试阶段不丢弃神经元,导致训练和测试时输出不一致,所以在测试时需要将每个神经元的输出乘以 p p p,也相当于对应用Dropout的神经元层做出补偿。
对于一个神经层 y = f ( W x + b ) \bold{y}=f(W\bold{x}+\bold{b}) y=f(Wx+b),可引入一个丢弃函数 d ( ⋅ ) d(\cdot) d(⋅) 使得 y = f ( W d ( x ) + b ) \bold{y}=f(Wd(\bold{x})+\bold{b}) y=f(Wd(x)+b)。
丢弃函数 d ( ⋅ ) d(\cdot) d(⋅)定义为:
d ( ⋅ ) = { m ⊙ x , 训练阶段 p x , 测试阶段 d(\cdot)=\left\{ \begin{aligned} \begin{matrix} \bold{m} \odot \bold{x} &, \space 训练阶段 \\ p \bold{x} &, \space 测试阶段 \\ \end{matrix} \end{aligned} \right. d(⋅)={m⊙xpx, 训练阶段, 测试阶段
其中 m d \bold{m}^d md是丢弃掩码(dropout mask),通过以概率为 p p p的伯努利分布随机生成,即以 p p p为概率随机将部分神经元置为0,从直观上可理解为丢弃部分神经元,其结果可看作是一个只包含原始神经元子集的网络。
超参数 p p p可通过验证集来选取一个最优值,或设 p = 0.5 p=0.5 p=0.5。
对神经元进行丢弃,相当于给数据或特征增加噪声,以此来提高网络的鲁棒性。
丢弃法一般针对神经元进行随机丢弃,但也可以扩展到对神经元间连接的随即丢弃,或每一层进行随机丢弃。
7.7 数据增强
广泛应用在图像识别、音视频识别等领域。神经网络对噪声并不健壮,故可通过在输入/隐藏层添加噪声以改善神经网络的噪声健壮性。
在数据量有限的情况下,可通过数据增强(Data Augmentation)引入噪声来增加数据量及数据多样性, 提高模型鲁棒性,避免过拟合。
例如:图像数据增强的方法主要有几种:
-
旋转 (Rotation):将图像按顺时针或逆时针方向随机旋转一定角度
-
翻转 (Flip):将图像沿水平/垂直随机翻转一定角度
-
缩放 (Zoom In/Out):将图像放大/缩小一定比例
-
平移 (Shift):将图像沿水平/垂直方法平移一定步长
-
加噪声 (Noise):加入随机噪声
以上是对图像数据增强的实例,将经处理后的图像用于神经网络训练,可进一步提升网络识别的健壮性。
一种极端情况:远处的红绿灯显示绿灯,一个身上穿着一件带有停车标志的T恤或手持便携式红绿灯有意站在车道前,它是否会影响自动驾驶车辆的前进?
7.8 标签平滑
标签平滑 (Label Smoothing Regulation):一种正则化方法,又称标签平滑归一化,通常用于分类问题。
通常应用于文本分类任务,像L2和Dropout等一样,它是一种正则化方法,只不过这种方法是通过在Label中添加噪声,从而实现对模型的约束,目的是防止模型在训练时过于自信地预测标签,防止过拟合,提高模型的泛化能力。
标签平滑的作用
解决传统one-hot标签 (hard label) 形式存在的问题。
上图假设现在是一个6分类的任务,文本类别标签 y y y是鸟,损失函数使用的是分类任务中常见的交叉熵损失函数,结合交叉熵损失函数的公式k可以发现,最终的Loss值就只与 y = 1 y=1 y=1的维度相关。
这里可以发现,平滑后对错误选项的输出进行了修正,使得输出结果不再"过激"。
会出现的问题:
-
训练过程中,驱使目标类别的预测值(概率)趋于1,非目标类别趋近于0。
使得模型向预测正确与错误标签的logit差值无限增大的方向学习,而过大的logit差值会使得模型缺乏适应性,对预测过于自信。最终致使过拟合,泛化能力差。
-
面对易混淆分类任务,有噪音 (误打标) 数据集时,更容易受到影响。
解决方法 即 标签平滑:
数学形式 :
y i = y o n t − h o t ( 1 − α ) + α K y_i=y_{ont-hot}(1-\alpha)+\frac{\alpha}{K} yi=yont−hot(1−α)+Kα
其中: K K K为类别个数, α \alpha α是较小超参数 ( α \alpha α一般取0.1)
优缺点:
- 优点 :
- 可以防止网络过拟合,具备一定抗噪能力,增强模型泛化能力。
- 进行数据增强,增加了信息量。
- 缺点 :
- 单纯添加噪声,提升有限。
- 权衡泛化能力与预测能力。
- 计算时间增加。
总结:
- 主要解决的问题 :
- 传统One-Hot编码:无法保证过模型的泛化能力,使网络过于自信致使过拟合。
- 操作方式 :
- 将One-Hot中概率为1项进行衰减,避免过度自信,衰减的部分平均分到每个类别中 (包括自身)。
7.9 模型超参数选择
超参数:需要预先优化设置而非通过训练得到的参数。
神经网络常见的超参数:隐藏单元数量 、学习率 、卷积核宽度 、隐式零填充 、权重衰减系数 、Dropout比率。
7.9.1 手动调整超参数
手动搜索超参数的主要目标是调整模型的有效容量以匹配任务的复杂性。
有效容量受限于三个因素:模型的表示容量、学习算法成功最小化训练模型代价函数的能力以及代价函数和训练过程正则化模型的程度。
具有更多网络层,每层有更多隐藏单元的模型具有较高的表示能力------能够表示更复杂的函数。
可能最应注意的超参数:学习率
调整过程中需要同时检测训练误差及验证误差,判断是否过拟合或欠拟合,适当调整其容量。
7.9.3 网格搜索
网格搜索 (Grid Search),一项模型超参数优化技术,常用于优化三个或者更少数量的超参数,本质是一种穷举法。
对于每个超参数,使用者选择一个较小的有限集去探索,并利用笛卡尔乘积得到若干组超参数,这些超参数的组合被称作参数空间。网格搜索使用每组超参数训练模型,挑选验证集误差最小的超参数作为最优超参数。通过系统地遍历所有可能的超参数组合寻找最佳超参数设置。
假设两超参数 λ \lambda λ和 α \alpha α,每个超参数三个可能值,则参数空间: [( λ 1 \lambda_1 λ1, α 1 \alpha_1 α1), ( λ 1 \lambda_1 λ1, α 2 \alpha_2 α2), ( λ 1 \lambda_1 λ1, α 3 \alpha_3 α3), ( λ 2 \lambda_2 λ2, α 1 \alpha_1 α1), ( λ 2 \lambda_2 λ2, α 2 \alpha_2 α2), ( λ 2 \lambda_2 λ2, α 3 \alpha_3 α3)]。
对于每个超参数组合,训练模型并用验证集评估其性能。
优点:简单明了、易于实现
缺点:超参数数量及其可能值过多,计算成本高
基本步骤:
- 定义超参数空间
- 创建参数网格
- 设置评估指标
- 训练和评估模型
- 选择最佳超参数
- 可视化和分析
- 验证和测试
转自花书
7.9.4 随机搜索
随机搜索 (Randomized Search),在超参数空间中随机采样参数组合,并非系统地遍历所有组合。
优点:计算量小 (计算成本低),有限时间内快速找到较好超参数组合
缺点:具有局限性,可能会错过潜在的优质参数组合
基本步骤:
- 定义超参数空间
- 选择随机超参数组合
- 训练和评估模型
- 更新最佳配置
- 重复迭代
7.9.5 贝叶斯搜索
贝叶斯搜索 (Bayes Search),一种基于贝叶斯统计的自适应超参数优化方法,在搜索空间中建立一个目标函数概率模型,智能地选择下一组待试验的超参数。
时序模型优化
时序模型优化 (Sequential Model-Based Optimization,SMBO):一种基于序列的贝叶斯优化方法,其中的"时序"指的是通过不断地迭代来逐步改善模型。
基本步骤
- 定义超参数空间: 首先需要定义每个超参数的可能取值范围。
- 选择初始样本点: 选择一组初始的超参数样本点,通常是通过随机选择或者根据先验知识选择的。
- 建立概率模型: 使用已有的样本点,建立一个对目标函数的概率模型。常用的模型包括高斯过程(Gaussian Process)和随机森林。
- 选择下一个样本点: 基于当前的概率模型,选择下一个超参数样本点,这个选择通常是基于对目标函数的不确定性的评估。一种常见的策略是使用"概率提升(Probability of Improvement)"或"置信区间(Expected Improvement)"等指标来评估每个点的潜在收益。
- 采样和评估: 在选择的超参数点处进行模型的训练和评估,得到目标函数的值。
- 更新概率模型: 将新的样本点加入已有的样本,然后更新概率模型,以更准确地表示目标函数。
- 重复迭代: 重复上述步骤,直到达到预定的迭代次数或满足其他停止准则。
优点:能根据已有样本预测目标函数形状,从而更好地选择下一个样本点。
7.9.6 动态资源分布
动态资源分配:一种在超参数优化中更加智能地分配有限资源的方法。
它的核心思想是通过早期停止 和逐次减半等策略,在训练过程中识别哪些超参数组合可能不会带来较好的性能,从而及时中止这些配置的评估,将资源更多地留给其他有潜力的配置。
以下是动态资源分配的一般步骤,特别 逐次减半方法:
- 定义超参数空间和总资源预算: 和其他超参数优化方法一样,首先需要定义每个超参数的可能取值范围,并确定可用的总资源预算(例如,摇臂的次数)。
- 初始化超参数配置: 随机选择一组初始的超参数配置,并开始评估它们的性能。
- 逐次减半: 将总资源预算分配给一组超参数配置,并在每一轮中选择性能较好的一半进行下一轮的评估。这个过程会重复进行,逐次减半资源分配,直到达到预定的轮数或资源用尽。
- 早期停止策略: 对于正在评估的每个超参数配置,可以通过监测学习曲线的形状,比如早期停止来判断是否中止当前训练。如果学习曲线不收敛或者收敛较差,可以中止当前训练,将资源留给其他配置。
- 选择最佳超参数配置: 根据逐次减半的过程,选择性能最好的超参数配置作为最终的结果。
逐次减半方法 优缺点:
优点:通过在每一轮中聚焦性能较好的超参数配置,更有可能找到全局最优或局部最优的配置,且花费时间较短。
7.9.7 神经架构搜索
神经架构搜索 (Neural Architecture Search,NAS):一种探索神经网络结构的自动化方法。
与传统方法不同,NAS旨在通过使用机器学习技术来搜索神经网络的结构,以提高性能。
神经架构搜索采用元学习的思想。这意味着有一个控制器,负责生成神经网络结构的描述。这个控制器本身可以是一个循环神经网络(RNN),它学会生成有效的网络结构描述。控制器的训练过程通常使用强化学习来完成。奖励信号一般是由生成的子网络在开发集或验证集上的性能,例如准确率。整个神经架构搜索的流程如下:
- 定义搜索空间: 确定神经网络结构的参数化表示,并定义一个搜索空间,包含各种可能的网络结构。
- 设计控制器: 创建一个控制器,通常是一个循环神经网络(RNN),负责生成神经网络结构的描述。
- 初始化控制器: 初始化控制器的参数。
- 强化学习训练: 通过强化学习算法,如REINFORCE,训练控制器。在每一轮训练中,生成一个网络结构描述,训练该结构的子网络,然后使用性能作为奖励信号来更新控制器的参数。
- 搜索过程: 通过不断迭代上述过程,搜索最佳的神经网络结构描述。
- 评估最优结构: 使用测试集评估最终选择的最优神经网络结构的性能。
优缺点:
- 优点:可自动发现复杂网络结构,无需人类专家介入。使其设计更具普适性和适应性,能更好适应不同的任务和数据
- 缺点:计算资源消耗大、搜索空间巨大等
8. 机器学习范式
8.1 监督学习
根据已经标记的训练样本来推断一个功能的机器学习任务。
即算法通过已经标记的数据中学习输入输出的映射关系。
常见的监督学习任务:分类 、回归、结构性学习
监督式学习网络(Supervised Learning Network)
- 人工神经网络(ANN)
- 卷积神经网络(CNN)
- 循环神经网络(RNN / LSTM / GRU)
应用实例:音频图片识别、曲线趋势预测
8.2 无监督学习
根据没有被标记的训练样本解决模式识别中的各种问题的机器学习任务。
即从未标记的数据中学习数据的结构、模式或分布。
常见的无监督学习任务:聚类 、降维 、异常值检测 、噪声过滤
无监督式学习网络 (Unsupervised Learning Network)
- 生成对抗网络(GAN)
- 自组织映射网络(SOM)
- 适应性共振理论网络(ART)
应用实例:聚类、主成分分析 (PCA)
8.3 强化学习
通过观察环境、执行动作并从奖励中学习。使智能体 (agent) 在环境中学会采取一系列动作,以最大化累计奖励。
经典案例:AlphaGo(深度学习 → 监督学习 + 强化学习)
8.4 其他范式
除上述常见机器学习范式,还有其他范式:半监督学习 、自监督学习 、迁移学习
半监督学习:结合使用大量的未标记数据及标记数据,同时进行模式识别的机器学习任务。
自监督学习:通过自动生成标签或任务的机器学习任务。
迁移学习:将一个领域的知识应用于另一个领域的机器学习任务,通过源领域提高目标领域的训练效率。