# 无约束优化基础

无约束优化旨在找到使得目标函数值最小的参数。下降方法是解决这类问题的核心思想,其通用迭代公式如下:

x(k+1)=x(k)+t(k)Δx(k)x^{(k+1)} = x^{(k)} + t^{(k)} \Delta x^{(k)}

其中,x(k)x^{(k)} 是第 kk 次迭代的参数,t(k)t^{(k)} 是学习步长,Δx(k)\Delta x^{(k)} 是搜索方向。

# 线搜索(确定学习步长 tt

线搜索是确定最优学习步长 tt 的方法。

  • 精准线搜索(Exact Line Search):通过求解一个一维优化问题,找到使函数值下降最多的最优步长。

    t(k)=argmint0f(x(k)+tΔx(k))t^{(k)} = \arg \min_{t \geq 0} f(x^{(k)} + t \Delta x^{(k)})

  • 回溯线搜索(Backtracking Line Search):一种非精确线搜索方法,通过从一个较大的初始值开始,逐步减小步长,直到满足 Armijo-Goldstein 条件。

    初始化: t=1,β(0,1),α(0,0.5)当 f(x(k)+tΔx(k))>f(x(k))+αtf(x(k))TΔx(k) 时:t=βt\text{初始化: } t = 1, \beta \in (0, 1), \alpha \in (0, 0.5) \\ \text{当 } f(x^{(k)} + t \Delta x^{(k)}) > f(x^{(k)}) + \alpha t \nabla f(x^{(k)})^T \Delta x^{(k)} \text{ 时:} \\ \quad \quad t = \beta t

# 搜索方向(确定 Δx\Delta x

  • 梯度下降法(Gradient Descent):最常用的下降方法之一,其搜索方向与梯度的负方向一致,以保证函数值下降最快。当梯度的范数平方 f(x)2||\nabla f(x)||^2 小于某个阈值 ϵ\epsilon 时停止。该方法收敛速度通常较慢。

    我们通过对函数进行一阶泰勒展开来理解其搜索方向:

    f^(x+v)=f(x)+f(x)Tv,v=1\hat f(x + v) = f(x) + \nabla f(x)^T v, \quad ||v|| = 1

    要使 f^(x+v)\hat f(x+v) 最小,需要使 f(x)Tv\nabla f(x)^T v 最小。根据柯西-施瓦茨不等式,当 vvf(x)-\nabla f(x) 方向相同时,内积取得最小值。

    minvf^(x+v)=minvf(x)+f(x)Tv=f(x)f(x)T2\min_{v} \hat f(x + v) = \min_{v} f(x) + \nabla f(x)^T v = f(x) - ||\nabla f(x)^T||^2

    因此,梯度下降的搜索方向为:

    Δx=f(x)\Delta x = -\nabla f(x)

  • 牛顿法(Newton's Method):一种二阶优化方法,利用海森矩阵来确定搜索方向。其收敛速度是二阶的,通常比梯度下降快得多,但计算和存储海森矩阵的逆的成本很高。

    牛顿法基于函数的二阶泰勒展开:

    f^(x+v)=f(x)+f(x)Tv+12vT2f(x)v,v=1\hat f(x + v) = f(x) + \nabla f(x)^T v + \frac{1}{2} v^T \nabla^2 f(x) v, \quad ||v|| = 1

    vv 求导并令其为 0,得到最优搜索方向:

    vf^(x+v)=f(x)+2f(x)v=0\nabla_v \hat f(x + v) = \nabla f(x) + \nabla^2 f(x) v = 0

    因此,牛顿法的搜索方向为:

    Δx=(2f(x))1f(x)\Delta x = -(\nabla^2 f(x))^{-1} \nabla f(x)

# 牛顿法的完整步骤

  1. 计算当前点的梯度 f(x)\nabla f(x) 和海森矩阵 2f(x)\nabla^2 f(x)
  2. 计算搜索方向 Δx=(2f(x))1f(x)\Delta x = -(\nabla^2 f(x))^{-1} \nabla f(x)
  3. 计算牛顿衰减(Newton decrement)λ(x)=(f(x)T(2f(x))1f(x))1/2\lambda(x) = (\nabla f(x)^T (\nabla^2 f(x))^{-1} \nabla f(x)) ^ {1/2}
  4. λ2/2ϵ\lambda^2 / 2 \leq \epsilon,则停止迭代。这个停止条件意味着一阶导数很小,同时海森矩阵的特征值都很大,表明已经接近极小值。
  5. 使用回溯线搜索确定步长 tt
  6. 更新参数 x=x+tΔxx = x + t \Delta x

# 梯度下降算法变种

神经网络通常使用梯度下降的变种来处理大规模数据集。

  • 全批量梯度下降(BGD, Batch Gradient Descent):每次迭代都使用整个训练集计算梯度。

    x(k+1)=x(k)η(k+1)1mi=1mfi(x(k))x^{(k+1)} = x^{(k)} - \eta^{(k+1)} \frac{1}{m} \sum_{i=1}^{m} \nabla f_i(x^{(k)})

    优点:每次更新方向都是全局最优的,收敛平稳。

    缺点:计算成本高,当数据量大时,模型可能无法感知到具体样本的出错部分,导致收敛慢或不收敛。

  • 随机梯度下降(SGD, Stochastic Gradient Descent):每次迭代只随机或循环选取一个样本来计算梯度。

    x(k+1)=x(k)η(k+1)fik+1(x(k))x^{(k+1)} = x^{(k)} - \eta^{(k+1)} \nabla f_{i_{k+1}}(x^{(k)})

    优点:迭代成本与批次数无关,可以很快得到一次更新。

    缺点:更新方向波动性大,可能导致收敛不稳定。

  • 小批量梯度下降(MBGD, Mini-Batch Gradient Descent):在 BGD 和 SGD 之间取得平衡,每次迭代选取一个随机子集 IkI_k 来计算梯度,通常 Ik=bm|I_k| = b \ll m

    x(k+1)=x(k)η(k+1)1biIkfi(x(k))x^{(k+1)} = x^{(k)} - \eta^{(k+1)} \frac{1}{b} \sum_{i \in I_k} \nabla f_i(x^{(k)})

    优点:结合了 SGD 和 BGD 的优点,计算成本适中,且更新方向比 SGD 稳定。梯度的无偏估计方差减小到 1b\frac{1}{b},但计算成本也相应增加 bb 倍。


# 高级梯度优化算法

这些算法通过引入动量、自适应学习率等机制,来加速收敛、改善训练稳定性。

# 动量法(Momentum)

动量法为参数更新增加了一个“速度”或“惯性”,有助于缓解震荡,并可能克服鞍点导致的梯度消失问题。

v(k+1)=βv(k)+f(x(k))x(k+1)=x(k)η(k+1)v(k+1)v^{(k+1)} = \beta v^{(k)} + \nabla f(x^{(k)}) \\ x^{(k+1)} = x^{(k)} - \eta^{(k+1)} v^{(k+1)}

其中 β\beta 是动量系数。

# Nesterov 动量法(Nesterov Accelerated Gradient, NAG)

Nesterov 动量法通过“预见”未来位置的梯度,从而进行更有效的更新。

其更新公式为:

v(k+1)=βv(k)+η(k+1)f(x(k)βv(k))x(k+1)=x(k)v(k+1)v^{(k+1)} = \beta v^{(k)} + \eta^{(k+1)} \nabla f(x^{(k)} - \beta v^{(k)}) \\ x^{(k+1)} = x^{(k)} - v^{(k+1)}

另一种等价形式:

x~(k)=x(k)βv(k)v(k+1)=βv(k)+η(k+1)f(x~(k))x~(k+1)=x~(k)v(k+1)+β(v(k)v(k+1))\tilde x^{(k)} = x^{(k)} - \beta v^{(k)} \\ v^{(k+1)} = \beta v^{(k)} + \eta^{(k+1)} \nabla f(\tilde x^{(k)}) \\ \tilde x^{(k+1)} = \tilde x^{(k)} - v^{(k+1)} + \beta(v^{(k)} - v^{(k+1)})

# Adagrad

Adagrad (Adaptive Gradient) 根据参数的历史梯度平方和来自适应地调整每个参数的学习率。

g(k)=f(x(k))s(k+1)=s(k)+g(k)g(k)x(k+1)=x(k)ηs(k+1)+ϵg(k)g^{(k)} = \nabla f(x^{(k)}) \\ s^{(k+1)} = s^{(k)} + g^{(k)} \odot g^{(k)} \\ x^{(k+1)} = x^{(k)} - \frac{\eta}{\sqrt{s^{(k+1)} + \epsilon}} \odot g^{(k)}

优点:可以为稀疏特征分配更大的学习率。
缺点:累积的梯度平方和会持续增加,导致学习率随着迭代次数增加而趋于0,可能过早停止学习。

# RMSProp

RMSProp(Root Mean Square Propagation)通过引入衰减系数 β\beta 来解决 Adagrad 学习率持续下降的问题,防止学习率过早降低。

g(k)=f(x(k))s(k+1)=βs(k)+(1β)g(k)g(k)x(k+1)=x(k)ηs(k+1)+ϵg(k)g^{(k)} = \nabla f(x^{(k)}) \\ s^{(k+1)} = \beta s^{(k)} + (1 - \beta) g^{(k)} \odot g^{(k)} \\ x^{(k+1)} = x^{(k)} - \frac{\eta}{\sqrt{s^{(k+1)} + \epsilon}} \odot g^{(k)}

# Adam(Adaptive Moment Estimation)

Adam 算法结合了动量法的一阶矩估计和 RMSProp 的二阶矩估计,是目前最常用的优化算法之一。

  • 一阶矩(动量):用于估计梯度的均值,通常 β1\beta_1 取 0.9。

    v(k+1)=β1v(k)+(1β1)g(k)v^{(k+1)} = \beta_1 v^{(k)} + (1 - \beta_1) g^{(k)}

  • 二阶矩(RMSProp):用于估计梯度的未中心化方差,通常 β2\beta_2 取 0.999。

    s(k+1)=β2s(k)+(1β2)g(k)g(k)s^{(k+1)} = \beta_2 s^{(k)} + (1 - \beta_2) g^{(k)} \odot g^{(k)}

  • 偏差校正(Bias Correction):由于 v(0)v^{(0)}s(0)s^{(0)} 初始化为 0,早期的矩估计值会偏向于 0,因此需要进行偏差校正。

    v^(k+1)=v(k+1)1β1k+1,s^(k+1)=s(k+1)1β2k+1\hat v^{(k+1)} = \frac{v^{(k+1)}}{1 - \beta_1^{k+1}}, \quad \hat s^{(k+1)} = \frac{s^{(k+1)}}{1 - \beta_2^{k+1}}

  • 参数更新

    x(k+1)=x(k)ηs^(k+1)+ϵv^(k+1)x^{(k+1)} = x^{(k)} - \frac{\eta}{\sqrt{\hat s^{(k+1)} + \epsilon}} \odot \hat v^{(k+1)}


# 学习率调整策略

在训练过程中动态调整学习率,可以提高模型的收敛速度和性能。

# 乘法衰减(Exponential Decay)

学习率以一个固定的乘法因子持续衰减。

ηt+1=max(ηmin,ηtα)\eta^{t+1} = \max(\eta_{min}, \eta^{t} \cdot \alpha)

其中 α\alpha 是衰减率,ηmin\eta_{min} 是最小学习率。

# 分段学习率(Step Decay)

在预设的特定训练周期或步数后,将学习率乘以一个固定因子进行衰减。

# 余弦学习率(Cosine Decay)

学习率按照余弦函数的规律进行衰减,从最大值逐渐减小到最小值。

ηt+1=ηt+12(η0ηT)(1+cos(tTπ))\eta^{t+1} = \eta_{t} + \frac{1}{2} (\eta_{0} - \eta_{T}) (1 + \cos(\frac{t}{T} \pi))

其中 η0\eta_{0} 是初始学习率,ηT\eta_{T} 是最小学习率, TT 是总训练步数。

# WarmUp

在训练的最初阶段使用一个较小的学习率,并逐渐线性增加到预设的最大值,然后再按照其他策略进行衰减。这有助于稳定模型训练,避免初始阶段的参数震荡。