【机器学习】优化器/SAM

损失函数与优化器

在机器学习中,优化器用于更新和优化模型参数(如神经网络中的权重和偏置)的算法,即根据损失函数的梯度信息,指导模型参数的更新,使其逐步逼近最佳状态,从而达到更高的预测准确性或泛化能力。

  • 损失函数(例如均方误差、交叉熵等)用于衡量模型预测结果与实际值之间的差异。
  • 优化器的任务是通过不断调整模型参数,使损失函数的值逐渐降低,达到最小化的效果。

1. 优化器的工作原理

优化器**通常基于梯度下降(Gradient Descent)**或其变体来更新模型参数。核心思路是:

  • 计算损失函数相对于模型参数的梯度:这反映了模型参数如何影响损失值。
  • 更新参数:沿着梯度的反方向调整参数,使损失函数的值逐渐减小。

梯度下降的数学公式
θ = θ − α ⋅ ∇ θ J ( θ ) \theta = \theta - \alpha \cdot \nabla_\theta J(\theta) θ=θαθJ(θ)
其中:

  • θ \theta θ 是模型参数,
  • α \alpha α 是学习率(即每次更新的步长),
  • ∇ θ J ( θ ) \nabla_\theta J(\theta) θJ(θ) 是损失函数 J ( θ ) J(\theta) J(θ) 对参数的梯度。

2. 常见的优化器类型

优化器类型特点
梯度下降(GD)每次迭代使用整个训练集计算梯度,更新参数,适用于小型数据集,计算开销较大。
随机梯度下降(SGD)每次迭代使用一个训练样本计算梯度,更新参数,计算速度快,但梯度波动较大。
小批量梯度下降(Mini-batch GD)每次迭代使用一部分训练数据计算梯度,平衡了计算效率和梯度稳定性。
动量优化器(Momentum Optimizer)在梯度下降基础上添加动量,累积之前的梯度方向,减少震荡,加速收敛。
Adam 优化器(Adam)结合动量和自适应学习率调整,适应不同参数的梯度大小,优化过程更加稳定和高效。

3. SAM优化器

Sharpness-Aware Minimization (SAM) 是一种相对较新的优化方法,它与传统优化器(如 SGD、Adam)相比有一些关键的不同。其核心目标不仅仅是找到最小化损失函数的解,还要找到对小扰动具有鲁棒性的解,从而提高模型的泛化能力

SAM 不仅进行一次简单的梯度更新,它的更新分为两步:
1. 第一步(first step):在参数的当前位置,沿着梯度方向进行微小的扰动,使参数移动到一个局部最大值(“攀登”到参数空间的局部最高点)。
2. 第二步(second step):在进行扰动后,重新计算梯度,并返回到原始参数位置,进行常规的梯度更新。这个过程确保模型不仅适应当前的梯度方向,还考虑了对模型参数附近小扰动的鲁棒性。

SAM 的更新策略可以理解为一种“防御性”的更新:在更新前,它先试探性的移动到一个参数空间的边界位置,确保模型不会因为局部的波动而变得不稳定。

举一个简单的例子

假设我们正在训练一个简单的线性模型来预测房价,当前的参数是 θ \theta θ,这个参数控制着模型对输入特征的加权。当前损失函数表示模型的预测值与真实房价之间的差距。在传统的优化方法中,模型直接根据梯度信息调整 θ \theta θ,目标是让这个差距变小。

1. 第一步(First Step)——微小扰动:

SAM 的第一步不会直接更新参数,而是首先在当前梯度方向上对参数进行一个微小的“试探性”移动。比如:
θ perturbed = θ + ϵ ⋅ ∇ θ J ( θ ) \theta_{\text{perturbed}} = \theta + \epsilon \cdot \nabla_\theta J(\theta) θperturbed=θ+ϵθJ(θ)
其中:

  • θ perturbed \theta_{\text{perturbed}} θperturbed 是微调后的参数值,
  • ϵ \epsilon ϵ 是一个小的扰动系数,
  • ∇ θ J ( θ ) \nabla_\theta J(\theta) θJ(θ) 是当前参数的梯度(表示参数如何影响损失函数的变化)。
2. 第二步(Second Step)——返回并更新:

在第一步微小扰动之后,SAM 将模型的参数返回到原始位置(即撤回扰动),并根据实际的梯度信息进行常规的更新。

此时,SAM 知道了在局部空间内模型对小扰动的鲁棒性,也就是它通过微调试探的反馈来帮助模型在更新参数时避免那些“尖锐的”解。

第二步的实际更新公式是:
θ = θ original − α ⋅ ∇ θ J ( θ ) \theta = \theta_{\text{original}} - \alpha \cdot \nabla_\theta J(\theta) θ=θoriginalαθJ(θ)
其中:

  • θ original \theta_{\text{original}} θoriginal 是原始参数值,
  • α \alpha α 是学习率,表示更新的步长。

这个过程确保模型不仅仅根据当前的梯度进行更新,还考虑到了微小扰动下的情况。这可以理解为:我们不只是单纯地在山谷中找到最低点,而是希望周围也是平滑的,这样模型对新的、未见过的数据更具有鲁棒性。

3.扰动系数的计算

在 SAM 中,扰动系数 ϵ \epsilon ϵ 是根据当前的梯度信息和一个超参数 ρ \rho ρ 计算得到的。具体计算公式如下:

ϵ = ρ ∥ ∇ θ J ( θ ) ∥ \epsilon = \frac{\rho}{\|\nabla_\theta J(\theta)\|} ϵ=θJ(θ)ρ

其中:

  • ρ \rho ρ 是一个预设的超参数,通常是一个很小的正值,用来控制扰动的强度。它决定了扰动的幅度,但不会过大。
  • ∥ ∇ θ J ( θ ) ∥ \|\nabla_\theta J(\theta)\| θJ(θ) 是当前参数 θ \theta θ 的梯度范数,即损失函数对参数的梯度的大小。梯度范数表示参数更新的方向和幅度。

通过这种方式,SAM 确保了扰动的幅度是动态适应当前参数的梯度大小。如果梯度较大(表明模型的误差较大),则扰动相对较小;如果梯度较小(表明模型的误差较小,接近最优解),则扰动幅度相对较大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值