实验 04 / 约 65 分钟
亲手实现梯度下降
大模型的能力是怎样训练出来的?
未开始这和大模型有什么关系?
训练计算损失对参数的影响,用反向传播求梯度,再由优化器更新参数。下面让两个参数逐步改善预测,展示“根据误差调整”的基本机制。
这个实验能解释到哪里:大模型训练还涉及网络结构、数据、优化器和算力等问题。你平时发送一句聊天消息通常是在推理,不代表产品正在立即对模型做一次梯度更新。
动手时带着这个问题:对比小步长和过大的步长。解释为什么“多训练几步”也不保证一定更好。
还没建立全貌?先看一次回答的完整过程 ↗LAB / GRADIENT让模型自己靠近答案
试一试先训练 10 步,再把学习率设为 0.5 连续训练,观察发散保护。
展开每一步的数值
| 步数 | w | b | MSE |
|---|
同一个原理 · 两种讲法
先理解,再往深处走。
先知道朝哪边走
把误差想成地形的高度。梯度告诉我们当前位置往哪边更陡,沿相反方向挪一步,就有机会让误差变小。
步子大小也要调
学习率就是步长。太小走得慢;太大可能越过低处,来回跳,甚至越走越远。点“自动训练”能看见每一次更新。
数字真的在计算
每步都用当前四条数据计算梯度,再同时更新 w、b。先试 0.03,再试 0.5:后者在这组数据上会发散。停下来重置,比较损失轨迹。
在线实验的数学设定
在线使用全批量梯度下降:∂L/∂w=(2/n)Σxᵢ(wxᵢ+b−yᵢ),∂L/∂b=(2/n)Σ(wxᵢ+b−yᵢ)。两个梯度由同一组旧参数计算,再同时更新。损失轨迹的纵轴为 log₁₀(1+MSE),最多运行 500 步。参数绝对值之和超过 10⁶ 时停止;这是演示保护阈值,不是通用收敛判据。
前置知识
- 用损失衡量错在哪里
- 导数表示局部变化率
本节目标
- 推导线性回归的两个偏导数
- 观察稳定收敛与发散
梯度告诉你局部方向
损失是参数的函数 L(w,b)。偏导数 ∂L/∂w 描述只改变 w 时损失的局部变化率。梯度指向局部上升最快的方向,因此更新通常减去梯度。它不是“当前位置到正确答案的向量”。
把链式法则写出来
设 eᵢ=wxᵢ+b−yᵢ,MSE=Σeᵢ²/n。对 w 求导时,平方贡献 2eᵢ,内部表达式贡献 xᵢ,于是 dw=2Σeᵢxᵢ/n。类似地 db=2Σeᵢ/n。对同一步的两个导数,都要使用更新前的参数。
先手算一步
用 x=[1,2]、y=[2,4],令 b 固定为 0,w=0。此时 dw=2[(-2)×1+(-4)×2]/2=-10。学习率 α=0.1,则新 w=0−0.1×(-10)=1。损失从 10 降到 2.5。
学习率不是越大越好
小步可能收敛慢,大步可能越过低谷并反复放大误差。网页实验使用固定四个点,同时更新 w、b;先用 0.03,再用 0.5 对照。出现非有限数值要停下来报告发散,不能把异常当成训练完成。
检验导数而不是相信公式
用很小的 ε 估计 [L(w+ε)−L(w−ε)]/(2ε),与解析梯度比较。有限差分本身也有舍入误差,因此检查合理容差,不要求浮点数逐位相同。
w ← w − α·(2/n)Σeᵢxᵢ b ← b − α·(2/n)ΣeᵢPython / 只用标准库 / 无需 GPU
在自己的电脑上复现
运行 gradient 实验,检查有限差分误差小于 1e-5,最终 w 接近 2、b 接近 1。记录网页两种学习率前 10 步的变化,解释不同结果。
下载实验代码 ↓保存为 ai_lab.py,在 Python 3.10 或以上运行。本单元使用人造数据,不调用外部服务。Python 练习与在线实验采用各自的小数据例子,练习相同原理,不要求数值逐项相同。
python ai_lab.py --lesson gradient程序包含结果断言;如果不满足预期会报错。第 7 节会在运行目录生成 report.json。运行后,回到笔记写下你的观察与改动。
继续读原始资料
本站提供原创导读;以下链接前往资料原站。仅本成人学习栏目提供这些精选来源。
Google · 梯度下降 ↗可切换中文 · 关注更新方向与学习率核对日期 2026-09-21只对你可见
我的学习记录
登录后可保存笔记、打卡和学习进度。
删除本节的私密记录
删除本节进度、笔记、关联与打卡;其他课程和原作品保留。
验证方式 / 本节三题知识检验 v1
合上导读,检验一下
全部答对后记录“通过验证”。这表示通过本节知识小测,不等同于独立完成代码、人工评阅或能力认证。