优化器(Optimizer)

优化器(Optimizer)是深度学习和机器学习中最核心的组件之一

简单来说,优化器的作用就是指导模型如何学习。它决定了在反向传播计算出梯度(模型应该朝哪个方向调整)之后,模型应该以多大的“步伐”和什么样的方式来实际更新它的权重和偏置

你可以把优化器看作是一个驾驶员,而梯度(Loss 对权重的导数)是导航仪给出的方向。驾驶员(优化器)负责实际操作方向盘和油门,最终将汽车(模型)开向目的地(Loss 最小化)。


优化器的核心工作原理

在你的代码中,无论是在版本 1 还是版本 2,你都使用了最基础、最简单的优化器思想:随机梯度下降(SGD),具体体现在以下公式中:

$$\text{新的权重} = \text{旧的权重} - (\text{学习率} \times \text{梯度})$$

在你的代码实现中:

# 例如在 Linear 层的 backward 方法中
self.w -= self.lr * dw 
self.b -= self.lr * db

优化器就是管理这个更新过程的组件。

优化器的三个关键要素

要素 描述 在你的代码中的体现
1. 梯度 (Gradient) 方向。由反向传播计算得到,表示 Loss 增加最快的方向。优化器要朝着相反的方向调整。 dwdb
2. 学习率 (Learning Rate) 步长。这是优化器迈出的每一步的大小。它是一个超参数,决定了更新的快慢。 self.lr
3. 更新规则 (Update Rule) 策略。优化器根据当前和过去的梯度信息,决定如何调整权重。 最简单的规则是:w = w - lr * dw

为什么需要更复杂的优化器?

虽然最简单的 SGD 也能工作,但在实际的复杂任务中,它经常会遇到以下问题:

  1. 收敛慢: 遇到平坦区域(梯度接近 0)时,更新非常缓慢。
  2. 震荡: 在陡峭的“峡谷”地形中,SGD 可能会在两侧来回震荡,难以沿着谷底高效前进。

现代的复杂优化器,如 AdamRMSpropAdagrad 等,就是为了解决这些问题而诞生的。它们通过引入动量(Momentum)自适应学习率等机制来改进更新规则:

复杂优化器 核心改进点 效果
动量 (Momentum) 引入一个“惯性”项,让更新方向像滚雪球一样积累速度。 帮助模型冲过局部最优,加速收敛。
Adam 结合了动量和自适应学习率。它为每个权重独立计算和维护一个学习率。 在大多数情况下,是目前最常用、最稳定的优化器。

因此,一个完整的、面向对象的神经网络框架(如 PyTorch 或 TensorFlow)会有一个独立的 Optimizer Class 来管理所有层的权重更新,而不是像你现在这样将 w -= lr * dw 硬编码到每个 Linear 层的 backward 方法中。

posted @ 2025-09-27 14:27  李大嘟嘟  阅读(31)  评论(0)    收藏  举报