深度学习优化在求导时,到底谁是变量,谁是常数?
摘要
从整个训练过程的宏观视角看,x 和 y 是在变化的。但在微积分求导的那个瞬间,它们是固定的。
优化的是损失函数,此时不要注意x、y,要完全把损失函数当成变量是w、b的函数,此时求的是函数最低点
正文
你这个问题触及了深度学习优化中一个非常核心但容易混淆的点:在求导时,到底谁是变量,谁是常数?
你的直觉是对的,这里面确实存在一个“视角转换”的问题。我们来把它彻底理清。
1. 函数视角:区分函数本身和函数的参数
首先,我们要明确我们正在优化的是哪个函数。
- 损失函数(Loss Function): 这是我们最关心的函数,记为
L(θ)。它的变量(Variables)是模型参数 θ(比如权重 W 和偏置 b)。 - 我们的目标是找到一组 θ,使得
L(θ)的值最小。
那么 x 和 y 在这里面是什么角色呢?
x(输入数据)和 y(真实标签)是定义这个损失函数的已知量。它们和模型结构(比如网络层数、激活函数)一起,共同决定了 L(θ) 这个函数的具体形式。
类比:
想象一个二次函数 f(a) = a * x^2 + b * x + c。
- 如果你要研究
a的变化如何影响f(a),那么a就是变量。 - 而
x,b,c则是这个函数的系数或常数,它们决定了这个二次函数的形状(开口大小、位置)。
在深度学习的损失函数 L(θ) 中:
θ相当于上面例子中的a(变量)。x,y以及模型结构相当于上面例子中的x,b,c(常数)。
2. 求导时的变量与常数
当我们计算梯度 ∇L(θ)(即对 L 求关于 θ 的偏导数)时,我们必须明确:
对谁求导,谁就是变量;其他一切都被视为常数。
因此,在计算 ∂L / ∂W 或 ∂L / ∂b 时:
- 变量: 模型参数
W和b。 - 常数: 输入数据
x、真实标签y、学习率、以及所有不是我们正在求导的参数的其它量。
一个简单的例子:线性回归
损失函数是均方误差:L(W, b) = (1/2) * (y_hat - y)^2,其中 y_hat = W * x + b。
当我们计算 ∂L / ∂W 时(用链式法则):
∂L / ∂y_hat = (y_hat - y)∂y_hat / ∂W = x- 所以,
∂L / ∂W = (y_hat - y) * x
在这个求导过程中,x 和 y 是不是被当作常数处理了?是的!因为我们是在对 W 求导。
3. 为什么会产生“x, y 是变量”的错觉?
你的感觉也并非空穴来风,主要来自以下几个原因:
-
数据也是可变的(在不同的层面上): 虽然对于一次具体的参数更新来说,我们使用的
(x, y)样本是固定的常数。但SGD的核心是在不同时间步,我们会使用不同的数据样本。从整个训练过程的宏观视角看,x和y是在变化的。但在微积分求导的那个瞬间,它们是固定的。 -
另一种任务:函数拟合: 如果你的任务不是训练模型参数,而是要找一個函数
f使得它能够完美地穿过所有给定的数据点,那么数据点(x, y)就变成了固定的“锚点”,而函数f的表达式(比如它的系数)才是要优化的变量。这其实就是机器学习在做的事情!我们正是在找一组参数θ,使得函数f_θ(x)尽可能接近y。 -
概念名称的冲突: 在数学中,我们习惯说
y = f(x),x叫自变量,y叫因变量。在深度学习里,我们依然把模型的输入叫x,输出叫y_hat,这很容易让人带入“x是变量”的思维定式。但请记住,在优化阶段,我们已经抽离到了更高的层次:损失函数L的输入是参数θ,输出是损失值。
总结
让我们清晰地梳理一下:
| 场景/操作 | 变量 | 常数(在本次操作中固定) |
|---|---|---|
| 单个模型前向传播 | 输入数据 x | 模型参数 θ |
| 损失函数求值 | 模型参数 θ | 训练数据 (x, y), 模型结构 |
| 计算梯度(反向传播) | 模型参数 θ | 训练数据 (x, y), 模型结构 |
| SGD整个训练过程 | 模型参数 θ 不断变化 | 模型结构 固定 |
训练数据 (x, y) 在不同步骤被采样 | 优化算法(如SGD)的超参数 固定 |
核心结论:
在SGD优化器进行求导(计算梯度)的那个时刻,我们优化的对象——模型参数 θ(如W, b)是变量,而用来定义损失函数的数据 (x, y) 被当作常数。
你的困惑正是从“数据变量”思维切换到“优化变量”思维时产生的,理解这个视角的转换是理解深度学习优化的关键一步。
更多推荐



所有评论(0)