roberta和bert模型一般调整这些超参数就足够了
1.num_train_epochs: 训练轮数(整个数据集迭代几遍)
NER 常需更多轮数(10+),分类任务一般 3-5 就够
总结: 训练轮数过多,可能过拟合,泛化能力差, 训练轮数太少,可能记不住训练数据,泛化能力强
①. 模型性能与收敛:
增加训练轮数可以让模型更好地拟合训练数据,但当模型达到收敛(即损失函数不再显著下降)后,继续增加轮数可能收益甚微,甚至导致过拟合。过拟合时,模型在训练数据上表现很好,但在验证集或测试集上的泛化能力下降。
②. 过拟合风险:
如果训练轮数过多,模型可能会“记住”训练数据中的噪声或特定模式,而不是学习通用的特征。这会导致模型在新数据上的表现变差。可以通过监控验证集的损失或准确率来判断是否出现过拟合。
③. 早停(Early Stopping):
一种常见的策略是使用早停机制,即当验证集上的性能在一定轮数内不再提升时,停止训练。这可以避免不必要的计算浪费,同时降低过拟合风险。
④. 计算成本:
更多的训练轮数意味着更高的计算成本(时间、能耗等)。
⑥. 数据集大小与模型复杂度:
- 对于小型数据集,过多的训练轮数更容易导致过拟合。
- 对于复杂模型(如深层神经网络),可能需要更多轮数来充分优化参数
⑦. 学习率与训练轮数的关系:
学习率调度(如逐渐降低学习率)可以影响训练轮数的需求。适当的学习率策略可能在较少的轮数内达到同样效果。
⑧. 建议
- **监控指标**:在训练过程中,实时监控训练集和验证集的损失/准确率,绘制学习曲线,判断是否需要更多轮数。
- **使用早停**:设置合理的早停耐心值(patience),避免过度训练。
- **调参实验**:尝试不同的轮数,结合交叉验证,找到性能与效率的平衡点。
- **正则化**:结合Dropout、L2正则化等技术,减少过拟合风险,从而更安全地增加训练轮数。
2.learning_rate 学习率
NLP 常用范围 1e-5 ~ 5e-5,NER/分类可用 2e-5 ~ 3e-5
总结: 学习率如果过高或者过低都会导致欠拟合
当学习率过高时,模型参数更新的步长过大,可能导致优化过程不稳定,导致模型无法有效学习训练数据的通用特征,可能会导致训练完全失败
当学习率过低时,模型参数更新的步长过小,导致优化过程过于缓慢,模型难以在有限的训练轮数内充分学习训练数据中的模式。这使得模型无法有效拟合训练数据,表现为欠拟合
① 控制参数更新速度:
- 学习率决定了模型权重根据损失函数梯度调整的幅度。较高的学习率使参数更新更快,较低的学习率使更新更慢、更精细。
- 公式:`θ = θ - η * ∇L(θ)`,其中 `η` 是学习率,`∇L(θ)` 是损失函数的梯度,`θ` 是模型参数。
②. 选择初始学习率
常用初始值:常见的学习率范围为 1e-2(0.01)到 1e-5(0.00001)。具体选择取决于模型类型和优化器:
简单模型(如线性回归、浅层神经网络):可以尝试较高的学习率,如 0.01 或 0.1。
深度神经网络(如CNN、Transformer):通常从 1e-3 或 3e-4 开始。
Adam优化器:通常搭配较小的学习率,如 1e-3 或 3e-4,因为Adam自带自适应调整机制
经验法则:从较小的学习率(如 1e-3)开始测试,观察损失函数是否稳定下降。
③. 结合其他超参数
批量大小(Batch Size):学习率和批量大小密切相关。较大的批量大小通常需要较高的学习率(线性缩放规则:lr_new = lr * (new_batch_size / original_batch_size))。
正则化:Dropout、L2正则化等会影响模型对学习率的敏感性,可能需要配合调整。
模型架构:复杂模型(如深层网络)可能对高学习率更敏感,需谨慎选择。
④. 早停与学习率结合
使用早停(Early Stopping)监控验证集性能,结合学习率调度(如ReduceLROnPlateau),在性能停滞时降低学习率,延长训练以寻找更优解。
⑤. 任务与数据集的差异
小型数据集:通常需要较小的学习率(如 1e-4 或更低),以避免过拟合。
大型数据集:可以尝试较高的学习率(如 1e-3 或 3e-3),因为数据多样性有助于稳定训练。
迁移学习:在微调预训练模型时,通常使用极小的学习率(如 1e-5 或 2e-5),以保护预训练权重。
⑥. 调试技巧
小规模实验:在小数据集或子集上测试学习率,减少调试时间。
记录实验:使用工具(如TensorBoard、W&B)记录每次实验的学习率和性能,分析趋势。
3.per_device_train_batch_size 每个 GPU/CPU 的训练 batch 大小
①作用
较大的 batch size可以加快训练速度,但是显存占用过高
较大的batch size, 在小数据集或复杂任务中,可能导致模型无法充分探索损失函数的复杂结构,导致欠拟合
较小的batch size ,噪声较大的梯度可能使模型难以稳定收敛,尤其在训练轮数不足时,容易导致欠拟合。
②调整目标:
选择合适的 batch size,以在训练速度、显存限制和拟合程度之间取得平衡。通常结合学习率调整(线性缩放规则:lr_new = lr * (new_batch_size / original_batch_size))。
③与学习率配合:
大 batch size 通常需要较高的学习率,以保持相同的收敛速度。
示例:如果 batch size 从 16 增加到 32,学习率可能需要从 1e-3 增加到 2e-3。
4.per_device_eval_batch_size(每个设备的验证批次大小)
①定义:
指定在验证阶段每个 GPU/CPU 上的批次大小,用于评估模型在验证集上的性能。
②作用
速度:验证阶段不涉及梯度计算和参数更新,显存占用较低,因此可以设置比训练时更大的 batch size,以加速验证过程。
一致性:验证集的 batch size 不会直接影响模型的参数更新,但可能影响评估结果的稳定性(例如,某些损失函数对 batch size 敏感)。
③调参建议
- **常见值**:
- 通常设置为训练 batch size 的 2-4 倍,例如 `32, 64, 128`。
- 如果显存充足,可以尽量增大以加速验证。
5.warmup_steps(预热步数)
①定义:
warmup_steps 指定在训练开始的若干步(steps)内,学习率从一个很小的值(通常接近 0)线性增加到预设的最大学习率(如 learning_rate 参数指定的值)。之后,学习率可能保持不变或根据调度策略(如余弦退火或指数衰减)调整。
②作用:
稳定训练初期:
在训练开始时,模型参数通常是随机初始化的,梯度可能较大且不稳定。直接使用较高的学习率可能导致参数更新过大,训练过程震荡甚至发散。
预热通过从小学习率开始,逐渐增大步长,帮助模型平稳进入优化过程,减少初期的不稳定性。
适合复杂模型:
尤其在训练大型模型(如 Transformer、BERT、GPT)时,预热非常重要,因为这些模型的参数量巨大,初始梯度可能极不稳定。
提高收敛性:
预热可以帮助模型更快找到损失函数的良好区域,避免因初期大步长跳过最优解。
配合学习率调度:
预热通常与其他学习率调度策略(如余弦退火、指数衰减)结合使用,先升温到目标学习率,再逐渐降低以精细调整
③对拟合度影响:
过大或者过小都会导致欠拟合
过大:学习率长时间过低,模型学习不足。
过小:初期不稳定,可能收敛到次优解或无法收敛。
④. 调参建议
(1) 选择初始值
常见范围:通常设置为总训练步数(total_steps)的 5-20%。
小型数据集或简单任务:
使用较少的 warmup_steps(如 100-500),因为模型收敛较快,过长预热可能导致欠拟合。
大型模型或复杂任务(如 Transformer):
使用较多的 warmup_steps(如 1,000-10,000),因为大模型初期梯度不稳定,需要更长的预热。
(2) 结合 batch size 和学习率
线性缩放规则:
如果 per_device_train_batch_size 增大,相应增加学习率,并确保 warmup_steps 足够长以稳定初期训练。
(3) 与其他调度策略结合
余弦退火:预热后使用余弦退火(如 CosineAnnealingLR),在达到目标学习率后逐渐降低。
指数衰减:预热后使用指数衰减(如 ExponentialLR),适合需要长期训练的任务。
ReduceLROnPlateau:根据验证损失动态调整学习率,配合预热可进一步优化拟合。
6.weight_decay(权重衰减)
①weight_decay 的定义与作用
定义:weight_decay 是一个正则化参数,通常表示 L2 正则化的强度。它通过在损失函数中添加权重参数的 L2 范数惩罚项,限制模型参数的大小,从而减少过拟合风险。
②作用:
防止过拟合:
权重衰减通过惩罚较大的权重值,限制模型复杂度,防止模型过度拟合训练数据中的噪声或特定模式,从而提高泛化能力。
稳定训练:
较小的权重值通常使模型对输入变化不敏感,增强训练稳定性。
配合其他正则化:
weight_decay 常与 Dropout、数据增强等其他正则化技术结合使用,共同减少过拟合。
③对拟合度影响:
weight_decay 过大:可能导致欠拟合,因为过强的正则化限制了模型的学习能力。
weight_decay 过小:可能导致过拟合,因为正则化不足,模型容易记住训练数据噪声
④和per_device_train_batch_size 和 warmup_steps影响:
大 batch size + 过少的 warmup_steps + 过小的 weight_decay:可能导致初期不稳定,训练后期过拟合。
大 batch size + 过多的 warmup_steps + 过大的 weight_decay:可能导致全程学习不足,造成欠拟合。
⑤调参建议
调整 weight_decay 时,需结合任务、数据集大小、模型复杂度和批次大小等因素。以下是具体建议:
(1) 选择初始值
小型模型或简单任务:0.0(无正则化)或 0.001(轻微正则化)。
复杂模型(如 Transformer)或小型数据集:0.01 或 0.1。
微调预训练模型:通常使用较小的值(如 0.01 或 0.001),以保护预训练权重。
经验法则:
从 0.01 开始,观察训练和验证损失。
如果验证损失高于训练损失(过拟合),增加 weight_decay(如 0.1)。
如果训练和验证损失都较高(欠拟合),降低 weight_decay(如 0.001 或 0.0)
(2) 与其他正则化结合
Dropout:weight_decay 常与 Dropout 结合使用,Dropout 提供随机正则化,weight_decay 提供权重约束。
数据增强:通过数据增强(如图像旋转、翻转)减少过拟合,可能允许使用较小的 weight_decay。