机器学习进阶文档深度页
学习率选择
学习率决定每次沿负梯度方向移动的距离,应在特征缩放后按对数尺度比较。
学习前需要掌握
导数、梯度与梯度下降数值标准化内容待补充
背景与问题
量纲差异会让不同参数方向的梯度尺度悬殊,迫使统一学习率变小。标准化通常能让损失地形更均衡,从而允许更稳定的步长。
概念定义
学习率 α 是梯度更新的步长超参数。它不由普通 fit 自动学习,需要通过训练曲线与验证过程选择。
直观理解
学习率像下山步幅:过大跨过谷底并震荡,过小移动缓慢,合适时损失快速平滑下降。
核心原理
候选值通常按 10 倍尺度尝试;训练损失用于判断优化状态,验证集用于选择泛化更好的设置,测试集不能用于调参。
数学表达
梯度更新
α 控制一步移动距离。
变量含义
α学习率。∇J当前参数处损失上升最快方向。
计算步骤
- 1先缩放数值特征。
- 2选择对数间隔候选值。
- 3固定其他条件训练。
- 4记录每轮训练/验证损失。
代码对应位置
示例 1按对数尺度比较学习率:记录不同 α 的损失轨迹。
变量解释
| 变量 | 含义 |
|---|---|
α | 学习率。 |
∇J | 当前参数处损失上升最快方向。 |
交互演示
学习率如何改变梯度下降
在确定性目标函数 上,从 出发。移动滑动条会重新运行全部迭代并实时绘制损失曲线。
0.001 慢0.1 稳定1.41 发散
快速稳定收敛
当前步长能快速降低损失且没有明显震荡。
当前学习率0.0965
实际迭代35
最终损失1.485e-5
最终参数 w2.9961
| 学习率 | 迭代次数 | 最终损失 | 状态 |
|---|---|---|---|
| 0.005 | 35 | 2.425e+1 | 下降缓慢 |
| 0.1 | 35 | 8.063e-6 | 快速稳定收敛 |
| 0.8 | 35 | 1.000e-8 | 发生震荡 |
| 1.05 | 35 | 3.870e+4 | 可能发散 |
滑动条改变什么
它改变更新式中的 。每次拖动都会从相同初始参数重新计算,因而曲线差异只来自学习率。
曲线为何变化
梯度为 。离最低点越远梯度越大;若学习率也很大,一步就可能跨过最低点。
与真实训练的关系
真实模型有更多参数和更复杂损失,但仍遵循“梯度给方向、学习率给步长”。合适范围要在训练曲线与验证集上确定。
计算与实现步骤
- 1
先缩放数值特征。
- 2
选择对数间隔候选值。
- 3
固定其他条件训练。
- 4
记录每轮训练/验证损失。
- 5
识别发散、震荡、过慢与平稳区间。
- 6
用验证而非测试选择。
代码实现
示例 1
按对数尺度比较学习率
按对数尺度比较学习率
NumPy
example_01.py用途:记录不同 α 的损失轨迹。
candidate_rates = [0.0001, 0.001, 0.01, 0.1, 1.0]
for alpha in candidate_rates:
_, _, losses = gradient_descent(X_scaled, y_train, alpha)
print(alpha, losses[-1], np.isfinite(losses).all())代码解析
解析始终位于完整代码下方,并按实际代码段逐项对应。
输入数据与任务
记录不同 α 的损失轨迹。
y_train- 与 X_train 对齐的训练目标。
alpha- 当前学习率,控制每次参数更新的步长。
Step 1 · 1–4 行
计算损失对参数的梯度,对应数学表达中的 ∇J;梯度只给出局部变化方向。
candidate_rates = [0.0001, 0.001, 0.01, 0.1, 1.0]
for alpha in candidate_rates:
_, _, losses = gradient_descent(X_scaled, y_train, alpha)
print(alpha, losses[-1], np.isfinite(losses).all())代码与数学原理
参数更新由当前梯度与学习率共同决定。
平方误差代码对应均方损失。
预期输出或运行结果
每个学习率的最终损失和是否保持有限;过大 α 可能发散,过小 α 收敛慢。
常见错误 · 3 条
- 特征未缩放就比较学习率
- 只跑固定轮数不看曲线
- 用测试集挑 α
实际应用
- 线性回归梯度下降
- 神经网络优化
常见错误
特征未缩放就比较学习率
只跑固定轮数不看曲线
用测试集挑 α
文档来源
02|数据预处理与特征工程原始文档
学习资料/learning_tech/02_preprocessing_feature_engineering.md- §6 学习率的选择
- §7 判断梯度下降是否收敛