一次梯度下降:从线性回归看参数如何更新
训练循环通常被框架隐藏,但参数更新可以从一个只有斜率的模型看清楚。数据、预测、损失、梯度和更新各有职责。
▶ 本文含视频讲解▶ 教学视频手动播放 · 英语讲解
Gradient descent, how neural networks learn
结合模型讲解理解本文实验的背景;正文提供可独立运行的简化示例。此为外部原版课程,多篇笔记可能共用;未剪辑为本文专属视频。
播放器需要能访问 YouTube 的网络;若这里无法加载,可打开原视频。本文与本地图解仍可独立阅读。
问题从哪里出现
训练循环通常被框架隐藏,但参数更新可以从一个只有斜率的模型看清楚。数据、预测、损失、梯度和更新各有职责。
理解核心机制
模型设为 y_hat=w*x,均方误差对 w 的导数是平均的 2*x*(w*x-y)。按学习率沿梯度反方向移动,下面用简单数据验证一次更新确实降低损失。
动手做一个小实验
Python 3.11 或更新版本,仅使用标准库;将示例保存为 demo.py 后执行 python3 demo.py。数字与样本均为教学演示,不代表真实模型或服务器的测量结果。
samples = [(1.0, 2.0), (2.0, 4.0), (3.0, 6.0)]
def loss(weight):
return sum((weight*x-y)**2 for x, y in samples) / len(samples)
weight = 0.0
gradient = sum(2*x*(weight*x-y) for x, y in samples) / len(samples)
updated = weight - 0.05 * gradient
assert loss(updated) < loss(weight)
print(weight, updated, loss(weight), loss(updated))适用边界与常见误区
这份无噪声数据只是演示,不是训练效果报告。学习率过大可能增大损失;实际任务还涉及截距、特征尺度、正则化和独立测试集。
继续练习
逐步增大学习率直到损失上升,再缩放输入特征,观察相同学习率为何不再合适。