先把“游戏规则”全部定死(非常重要)
1️⃣ 模型
y = wx +b
2️⃣ 数据(只用 1 个点)
x = 2 y_true = 43️⃣ 初始参数
w = 1 b = 04️⃣ Loss(平方误差)
5️⃣ 学习率
lr = 0.1二、前向传播(算预测)
1️⃣ 算预测值
y_hat = w x + b = 1 * 2 + 0 = 22️⃣ 算 loss
L = 1/2 * (2 - 4)^2 = 1/2 * 4 = 2三、反向传播:算梯度(最关键)
我们现在问一个问题:
如果我把 w 稍微变大一点点,loss 是变大还是变小?
1️⃣ 写出 loss 关于 w 的公式
2️⃣ 对 w 求导(一步一步)
3️⃣ 代入当前数值
(w x - y) = (1 * 2 - 4) = -2 x = 2所以代入公式2:
grad = -2 * 2 = -4🔥 解释这个「-4」是什么意思
梯度是负的
意味着:
👉增大 w,会让 loss 下降
四、SGD 更新(你问的核心)
更新公式
w_new = w - lr * grad代入数值
w_new = 1 - 0.1 * (-4) = 1 + 0.4 = 1.4五、更新之后,loss 真的变小了吗?(验证)
新预测
y_hat = 1.4 * 2 = 2.8新 loss
L = 1/2 * (2.8 - 4)^2 = 1/2 * 1.44 = 0.722 → 0.72,loss 真的下降了
六、再走一步
第二步更新
当前参数
w = 1.4算梯度
(w x - y) = (1.4 * 2 - 4) = -1.2 grad = (w x - y) *x = -1.2 * 2 = -2.4更新
w_new = 1.4 - 0.1 * (-2.4) = 1.64loss
L = 1/2 * (1.64 * 2 - 4)^2 = 0.13七、现在应该能“看见”梯度下降在干嘛了
梯度的符号:告诉你往哪边走
梯度的大小:告诉你走多远
学习率:控制步子大小
八、权重更新三步走:
# 1. 计算损失 - 前向传播
loss = criterion(model(inputs), labels) # 计算预测值与真实值的差异# 2. 计算梯度 - 反向传播
loss.backward() # 自动计算所有参数的梯度并存储# 3. 更新权重 - 优化器步进
optimizer.step() # 根据梯度更新模型参数