机器学习速成·线性回归(4/4):超参数——学习速率、批次大小与周期
本文参考 Google 机器学习速成课程 - 线性回归:超参数(Hyperparameters) 模块撰写,是线性回归系列的最后一片拼图,讲清三个影响训练节奏的关键旋钮:学习速率、批次大小、周期。
一、超参数 vs 参数:先把概念理清
这是最容易混淆的一对词:
| 定义 | 举例 | |
|---|---|---|
| 参数(Parameter) | 模型本身的一部分,训练期间由模型计算出来 | 权重 w、偏差 b |
| 超参数(Hyperparameter) | 由你(开发者)设定,用来控制训练过程的变量 | 学习速率、批次大小、周期 |
👉 一句话区分:参数是模型”自己学出来”的;超参数是”你提前拧好”的。 前几篇讲的权重和偏差是参数;本篇讲的是超参数。
三种最常见的超参数:
- 学习速率(Learning Rate)
- 批次大小(Batch Size)
- 周期(Epoch)
二、学习速率(Learning Rate)
学习速率是你设置的一个浮点数,它决定模型收敛的速度。
它决定了梯度下降每一步对权重和偏差的改动幅度——梯度乘上学习速率,就得到下一次迭代的新参数:
新参数 = 旧参数 −(学习速率 × 梯度)
⚠️ 这正好是上一篇《梯度下降》第 4 步那个”少量(0.01)“的正式名字!
2.1 学习速率的影响
| 学习速率 | 后果 |
|---|---|
| 过低 | 收敛极慢,需要非常多迭代 |
| 适中 | 快速收敛(如理想情况前 20 次迭代显著改进) |
| 过高 | 永远无法收敛,在最优 w、b 附近来回跳,损失大范围波动甚至持续上升 |
2.2 结合梯度大小理解
旧参数与新参数的差异,与损失函数的斜率(梯度)成正比:
梯度大小 = 2.5,学习速率 = 0.01 → 参数改变 0.025
- 梯度大 → 这一步跨得大
- 梯度小 → 这一步跨得小
关键结论:理想的学习速率取决于具体问题——每个模型、每个数据集都有适合自己的学习速率。没有”通吃”的固定值(既不是 1.0 也不是 0.01)。
三、批次大小(Batch Size)
批次大小指:模型在更新权重和偏差之前,一次处理的样本数量。
你可能以为应该先算完数据集里每个样本的损失再更新——但当数据有数十万甚至数百万条时,用完整批次并不实际。于是出现了三种方案:
| 方案 | 每次更新前看的样本 | 特点 |
|---|---|---|
| 完整批次梯度下降 | 整个数据集 | 准确但计算量大,大数据集不现实 |
| 随机梯度下降(SGD) | 仅 1 个 样本 | 快速但噪声大(损失图波浪起伏) |
| 小批量随机梯度下降(小批量 SGD) | 1 到 N 之间(折衷) | 兼顾效率与稳定,最常用 |
小节:SGD 与噪声
- SGD:每轮只看 1 个示例,噪声最大——损失曲线会上下波动(“噪声”指训练中损失不降反增的随机起伏)。
- 小批量 SGD:对随机选中的一批样本求平均梯度,再更新一次参数。
- 小批量大小行为像 SGD;大批量大小行为像完整批次。
有意思的是:一定程度的噪声可能是好事——它能帮模型更好地泛化(这是后话,神经网络章节会细讲)。所以别急着把噪声当洪水猛兽。
四、周期(Epoch)
一个周期(Epoch) = 模型把训练集中的每个示例都处理一遍。
计算关系:
举个例子:
训练集 = 1000 个示例,小批量大小 = 100
那么完成 1 个周期需要 1000 / 100 = 10 次迭代
通常训练需要多个周期,即多次反复跑完整份训练数据。
周期数也需要在训练开始前设定。一般规则:周期越多,模型效果越好,但训练时间越长——需要实验来确定收敛所需的周期数。
批次、周期与”更新次数”的关系
| 批次类型 | 权重和偏差何时更新 | 示例(1000样本,20周期) |
|---|---|---|
| 完整批次 | 看完整个数据集后(每周期 1 次) | 更新 20 次 |
| SGD | 看完单个样本后 | 更新 20,000 次 |
| 小批量 SGD | 看完每个批次后 | 更新 200 次 |
五、两个常见误区
1. 较大的批次不适合含离群值的数据? ❌ 错。较大的批次反而有助于减少离群值的负面影响——因为对更多梯度求平均,单个离群值的影响被稀释了。
2. 把学习速率提高一倍也许会减慢训练? ✅ 对。加倍的学习速率可能使它过大,导致权重”四处波动”,反而增加收敛所需时间。
一切还是那句话:最佳超参数取决于你的数据集和可用计算资源。
六、关键术语速查
- 超参数(Hyperparameter):开发者设定的、控制训练过程的变量。
- 参数(Parameter):训练期间模型计算出的值(权重、偏差)。
- 学习速率(Learning Rate):控制每步参数更新的幅度。
- 批次大小(Batch Size):一次更新前处理的样本数。
- 周期(Epoch):跑完整个训练集一遍。
- 迭代(Iteration):执行一次权重/偏差更新。
- SGD / 小批量 SGD:随机梯度下降及小批量变体。
总结
| 超参数 | 一句话把握 |
|---|---|
| 学习速率 | 步长大小——太低太慢、太高发散,取合适值才收敛 |
| 批次大小 | 一次更新看多少样本——全批次准而慢、SGD 快而噪、小批量折衷 |
| 周期 | 整个数据集跑几遍——越多越好但越慢,需实验确定 |
| 超参 vs 参数 | 你拧的是超参;模型自己学的是参数 |
一句话:超参数是你训练前”拧好的旋钮”,参数是模型”自己学出来的”。学习速率决定步子大小,批次大小决定一次迈多大步,周期决定跑几趟——三者的最佳值,永远取决于你的数据和算力。