超参数是控制训练不同方面的变量。以下是三种常见的超参数:
与之相反,参数是模型本身的一部分,例如权重和偏差。换句话说,超参数是您控制的值;参数是模型在训练期间计算的值。
学习速率
学习率是您设置的浮点数,会影响模型收敛的速度。如果学习率过低,模型可能需要很长时间才能收敛。但是,如果学习速率过高,模型将永远不会收敛,而是在最小化损失的权重和偏差之间来回跳动。目标是选择一个学习速率,使其既不太高也不太低,以便模型快速收敛。
学习速率决定了在梯度下降过程的每一步中对权重和偏差进行的更改幅度。模型会将梯度乘以学习率,以确定下一次迭代的模型参数(权重和偏差值)。在梯度下降的第三步中,向负斜率方向移动的“小量”是指学习速率。
旧模型参数与新模型参数之间的差异与损失函数的斜率成正比。例如,如果斜率很大,则模型的步长会很大。如果小,则只需迈出小步。例如,如果梯度的幅度为 2.5 且学习速率为 0.01,则模型会将参数变化 0.025。
理想的学习率有助于模型在合理的迭代次数内收敛。在图 21 中,损失曲线显示模型在前 20 次迭代中取得了显著改进,然后才开始收敛:
图 21. 损失图,显示使用快速收敛的学习速率训练的模型。
相反,学习率过低可能会需要过多的迭代才能收敛。在图 22 中,损失曲线显示模型在每次迭代后仅会略有改进:
图 22. 损失图,显示使用较小学习率训练的模型。
学习速率过高时,模型永远不会收敛,因为每次迭代都会导致损失值波动或持续增加。在图 23 中,损失曲线显示模型在每次迭代后损失先减小后增大;在图 24 中,损失在后续迭代中会增加:
图 23. 损失图表,显示使用过大学习率训练的模型,其中损失曲线会大幅波动,随着迭代次数的增加而上下波动。
图 24. 损失图表,显示使用过大学习速率训练的模型,其中损失曲线在后续迭代中急剧增加。
练习:检查您的理解情况
批次大小
批处理大小是一个超参数,是指模型在更新权重和偏差之前处理的示例数量。您可能会认为,模型应先计算数据集中每个示例的损失,然后再更新权重和偏差。但是,当数据集包含数十万甚至数百万个样本时,使用完整批次并不现实。
在更新权重和偏差之前无需查看数据集中的每个样本,即可得出正确的平均梯度,两种常用方法分别是随机梯度下降法和小批量随机梯度下降法:
随机梯度下降法 (SGD):随机梯度下降法每次迭代只使用一个示例(批量大小为 1)。在进行足够的迭代后,SGD 会起作用,但噪声很大。“噪声”是指训练期间的损失在迭代期间增加而不是减少。术语“随机”表示构成每个批次的一个样本是随机选择的。
请注意在下图中,当模型使用 SGD 更新权重和偏差时,损失会如何略微波动,这可能会导致损失图中出现噪声:
图 25. 使用随机梯度下降法 (SGD) 训练的模型,其中显示损失曲线中有噪声。
请注意,使用随机梯度下降法可能会在整个损失曲线中产生噪声,而不仅仅是在收敛附近。
小批次随机梯度下降法(小批次 SGD):小批次随机梯度下降法是全批次和 SGD 之间的折衷方案。对于 $ N $ 个数据点,批处理大小可以是任何大于 1 且小于 $ N $ 的数字。模型会随机选择每个批处理中包含的示例,对其梯度求平均值,然后每迭代一次更新权重和偏差。
确定每个批次的示例数量取决于数据集和可用的计算资源。通常,批量大小较小时,其行为类似于 SGD;批量大小较大时,其行为类似于全批梯度下降。
图 26. 使用小批量 SGD 训练模型。
在训练模型时,您可能会认为噪声是一个应该消除的不良特征。不过,适当的噪声也未必是坏事。在后续单元中,您将了解噪声如何帮助模型更好地泛化并在神经网络中找到最佳权重和偏差。
周期
在训练期间,一个周期表示模型已处理训练集中的每个示例一次。例如,假设训练集包含 1,000 个示例,并且小批量大小为 100 个示例,则模型需要 10 个iterations才能完成一个 epoch。
训练通常需要进行多次迭代。也就是说,系统需要多次处理训练集中的每个示例。
迭代次数是您在模型开始训练之前设置的超参数。在许多情况下,您需要进行实验,以确定模型需要多少个周期才能收敛。一般来说,训练周期越多,模型越好,但训练时间也越长。
图 27. 全批量与小批量。
下表介绍了批处理大小和迭代次数与模型更新其参数的次数之间的关系。
批次类型 | 权重和偏差更新的时间 |
---|---|
全批次 | 模型查看数据集中的所有示例后,例如,如果数据集包含 1000 个样本,并且该模型训练了 20 个周期,则该模型会更新权重和偏差 20 次,每个周期一次。 |
随机梯度下降法 | 模型查看数据集中的单个样本之后。 例如,如果数据集包含 1000 个样本,并训练 20 个周期,则该模型会对权重和偏差进行更新 20000 次。 |
小批量随机梯度下降法 | 模型查看每个批次中的样本之后。例如,如果数据集包含 1,000 个示例,批处理大小为 100,并且模型训练 20 个 epoch,则模型会更新权重和偏差 200 次。 |