deep-learning - 学习率 AdamW 优化器
问题描述
我使用 BERT(来自 huggingface)情绪分析进行训练,这是一项 NLP 任务。
我的问题是指学习率。
EPOCHS = 5
optimizer = AdamW(model.parameters(), lr=1e-3, correct_bias=True)
total_steps = len(train_data_loader) * EPOCHS
scheduler = get_linear_schedule_with_warmup(
optimizer,
num_warmup_steps=0,
num_training_steps=total_steps
)
loss_fn = nn.CrossEntropyLoss().to(device)
你能解释一下如何阅读 1e-3 吗?
这是步数的密度还是衰减的值。
如果是后者,是线性衰减吗?
如果我以 3e-5 的值进行训练,这是 NLP 任务的拥抱面的推荐值,我的模型很快就会过拟合:训练损失降至最低,验证损失增加。
学习率 3e-5:
如果我以 1e-2 的值进行训练,我会在验证的损失值方面得到稳步提高。但是在第一个 epoch 之后验证准确度并没有提高。见图片。为什么即使损失下降,验证值也不会增加。这不是矛盾吗?我认为这两个值是对彼此的解释。
学习率 1e-2:
你会推荐什么?
解决方案
在反向传播中对权重的每次更新都使用一个称为学习率的参数进行加权。如果较小,则您正在以较小的步长向最小值迈进。
有时建议您是否过度拟合以降低学习率(并增加 epoch 的数量),但也有其他方法可以对抗过度拟合。一个好的学习率应该能让你在足够的时间内达到一个好的最小值。这是你需要尝试的东西。
推荐阅读
- encryption - 在 iOS 9 中拦截 WKWebView 请求和响应
- visual-studio - 如何在安装期间指定 Visual Studio 平台工具集
- c# - 未安装 Microsoft Office 时如何修复互操作错误
- google-apps-script - 将表单数据添加到行时自动生成行中的下拉列表
- godot - 需要帮助理解 Godot Docs 中的代码示例
- node.js - Bigtable 试图确定行是否存在,模拟器挂起不存在的行(在 row.exists() 上)
- python - 使用自定义指标和 C++ DLL 时访问冲突读取错误和 MT4 崩溃
- javascript - 如何在angularJs的所有服务中添加一些通用代码
- c - 在将宏作为参数传递给另一个宏之前按值翻译宏
- python - 反向地理编码以找到该位置的确切组织/建筑物/地标名称