深度学习与 PyTorch
机制原理 基础 重要度 5/5 面试就绪 理解阶段 约 15 分钟

一个权重是怎么学会的

输入是 2,答案是 3。用一个权重的变化,解释预测、平方损失、链式法则和梯度下降。每一步都能手算。

发布于 2026-09-09 · 更新于 2026-09-09

本文目录

    输入是 2,希望得到 3。模型只有一个权重 ww,计算方法是:

    预测值=2×w\text{预测值}=2\times w

    w=1w=1 时算出 2,w=1.5w=1.5 时算出 3。这道题可以直接看出答案。我们要弄清楚的是:从 w=1w=1 开始,训练算法怎样一步步把它调到 1.5 附近?

    模型先算出什么

    把输入写成 x=2x=2,正确答案写成 y=3y=3,预测写成 y^\hat y。模型公式就是:

    y^=wx\hat y=wx

    先用当前权重 w=1w=1 算一次:

    y^=1×2=2\hat y=1\times2=2

    这叫前向传播:给定输入和参数,算出预测。

    现在预测是 2,目标是 3,偏低了。训练时,输入 2 和答案 3 都不改,我们改的是权重 ww。

    怎么算错了多少

    用“预测减真实”记录误差:

    e=y^−y=2−3=−1e=\hat y-y=2-3=-1

    −1 表示预测偏低 1。如果预测是 4,误差就是 +1,表示偏高 1。

    误差越接近零越好,但不能一味让它变小。例如 −10 比 −1 小,却错得更远。因此,把误差平方,作为判断好坏的依据:

    L=12(y^−y)2L=\frac12(\hat y-y)^2

    这里 LL 叫损失。前面的 1/21/2 是为了后面求导方便。

    当前损失为:

    L=12(2−3)2=0.5L=\frac12(2-3)^2=0.5

    如果预测正好是 3,损失就是 0。最小化损失,就是让预测接近答案。

    “真实减预测”也可以,因为平方后结果相同。不过本文统一用“预测减真实”,便于判断预测偏高还是偏低。

    权重该往哪边改

    先试着把 ww 从 1 增加到 1.01。

    预测变成 2×1.01=2.022\times1.01=2.02,损失变成:

    12(2.02−3)2=0.4802\frac12(2.02-3)^2=0.4802

    权重增加了一点,损失从 0.5 降到了 0.4802。 所以在当前这个位置,增大权重是对的。

    导数把这种试探写成一个数。刚才权重增加 0.01,损失变化为 −0.0198,变化率约为:

    −0.01980.01=−1.98\frac{-0.0198}{0.01}=-1.98

    把试探的幅度取得越来越小,这个变化率趋近 −2。这就是损失对权重的导数,在当前点的值。

    导数为负,表示参数往大调一点,损失会下降。 导数为正则相反:参数往大调会让损失上升,应该往小调。

    单个参数时,这个导数也叫梯度。负梯度是它的相反数:梯度为 −2,负梯度就是 +2。

    怎样算出权重的梯度

    刚才靠尝试知道了方向。训练时可以直接求导,不必为每个参数反复试值。

    权重影响预测,预测再影响损失。我们分别算这两段影响。

    第一段:预测增加一点,损失怎么变?

    损失为 L=(y^−3)2/2L=(\hat y-3)^2/2。平方求导会得到前面的 2,它与 1/21/2 抵消;括号里的 y^−3\hat y-3 对预测求导是 1。因此:

    ∂L∂y^=y^−3\frac{\partial L}{\partial\hat y}=\hat y-3

    当前预测为 2,代入得到 −1。意思是:在预测为 2 的附近,预测增加一点,损失会减少。

    如果写成 L=(3−y^)2/2L=(3-\hat y)^2/2,括号里的导数就是 −1,因为预测增加多少,3−y^3-\hat y 就减少多少。最后仍然得到 (3−y^)(−1)=y^−3(3-\hat y)(-1)=\hat y-3。

    第二段:权重增加一点,预测怎么变?

    预测为 y^=2w\hat y=2w。权重增加 0.01,预测就增加 0.02,所以:

    ∂y^∂w=2\frac{\partial\hat y}{\partial w}=2

    两段变化率相乘,就是权重对损失的影响:

    ∂L∂w=∂L∂y^×∂y^∂w\frac{\partial L}{\partial w} = \frac{\partial L}{\partial\hat y} \times \frac{\partial\hat y}{\partial w}

    代入当前数值:

    ∂L∂w=(−1)×2=−2\frac{\partial L}{\partial w}=(-1)\times2=-2

    这叫链式法则。它把“权重改变预测”和“预测改变损失”接起来,结果与刚才小幅试探得到的变化率一致。

    反向传播就是从损失开始,沿计算的依赖关系求这些梯度。在这里,算到权重的梯度 −2,这次反向计算就完成了,权重还没有被修改。

    更新后有没有变好

    有了梯度,再决定改多少。取学习率 0.1,按梯度下降更新:

    新权重=旧权重−学习率×梯度\text{新权重}=\text{旧权重}-\text{学习率}\times\text{梯度} w新=1−0.1×(−2)=1.2w_{\text{新}}=1-0.1\times(-2)=1.2

    减去负数,所以权重增大。 这个减号让我们朝降低损失的方向走,不代表权重总要减小。

    用 1.2 重新计算预测:

    y^=1.2×2=2.4\hat y=1.2\times2=2.4

    再计算损失:

    L=12(2.4−3)2=0.18L=\frac12(2.4-3)^2=0.18

    预测从 2 变成 2.4,更接近目标 3;损失从 0.5 降到 0.18。这次更新有效。

    学习率决定走多远。如果刚才取学习率 1,权重会从 1 跳到 3,预测变成 6,损失反而升到 4.5。方向正确,步子太大也会越过目标。

    下一轮怎么算

    现在权重是 1.2,预测是 2.4。新的误差变成 2.4−3=−0.62.4-3=-0.6,因此新的梯度是:

    ∂L∂w=(−0.6)×2=−1.2\frac{\partial L}{\partial w}=(-0.6)\times2=-1.2

    再更新一次:

    w新=1.2−0.1×(−1.2)=1.32w_{\text{新}}=1.2-0.1\times(-1.2)=1.32

    预测变成 1.32×2=2.641.32\times2=2.64,损失变成 0.0648。

    两次更新中,权重从 1 → 1.2 → 1.32,逐渐接近能给出正确答案的 1.5。第二次的梯度要重算,不能一直用第一次的 −2。

    这个过程可以用三句话复述:

    • 前向传播: 用当前权重算预测和损失。
    • 反向传播: 求出损失对权重的梯度。
    • 参数更新: 减去学习率乘梯度,再开始下一轮。

    神经网络有更多参数,但每个参数仍然要回答同一个问题:它变一点,最终损失会怎么变?一次反向传播会逐层计算并复用中间梯度,不需要为每个参数各做一次完整反向传播。

    如果目标改成 1

    保持输入 2、权重 1,预测仍是 2,但这次偏高了。先判断权重该增大还是减小,再看计算:

    误差为 2−1=12-1=1,权重梯度为 1×2=21\times2=2。学习率仍为 0.1:

    w新=1−0.1×2=0.8w_{\text{新}}=1-0.1\times2=0.8

    新预测为 1.6,比原来的 2 更接近目标 1。梯度为正时减小权重,梯度为负时增大权重;两种情况都在降低损失。

    下一篇:两层网络怎样逐层计算梯度。

    参考资料

    输入关键词,查找全部技术文章。

      搜索范围:正文、标题、分类和标签