@songying
2019-04-03T13:19:58.000000Z
字数 2844
阅读 2028
deep-learning
- 在训练集上根据模型性能指标对模型参数进行优化
- 在验证集上根据模型性能指标对模型的超参数进行搜索
- 步骤1,2交替进行, 最终确定模型的参数和超参数,然后在测试集上验证评价模型的优劣
超参数搜索一般包含三个要素:
- 目标函数
- 搜索范围: 上限和下限
- 其他参数: 搜索步长
超参数大致可分为三类:
- 网络参数: 指的是网络层与层之间的交互方式, 卷积核数量,尺寸,网络层数,激活函数等
- 优化参数: 指的是学习率,batch_size, 不同优化器的参数,部分损失函数的可调参数
- 正则化: 权重衰减系数,dropout等
超参数 | 如何影响模型容量 | 原因 | 注意事项 |
---|---|---|---|
学习率 | 调至最优,提升有效容量 | 过高或者过低的学习率,都会由于优化失败而导致降低模型有效容限 | 学习率最优点,在训练的不同时间点都可能变化,所以需要一套有效的学习率衰减策略 |
损失函数部分超参数 | 调至最优,提升有效容量 | 损失函数超参数大部分情况都会可能影响优化,不合适的超参数会使即便是对目标优化非常合适的损失函数同样难以优化模型,降低模型有效容限。 | 对于部分损失函数超参数其变化会对结果十分敏感,而有些则并不会太影响。在调整时,建议参考论文的推荐值,并在该推荐值数量级上进行最大最小值调试该参数对结果的影响。 |
批样本数量 | 过大过小,容易降低有效容量 | 大部分情况下,选择适合自身硬件容量的批样本数量,并不会对模型容限造成。 | 在一些特殊的目标函数的设计中,如何选择样本是很可能影响到模型的有效容限的,例如度量学习(metric learning)中的N-pair loss。这类损失因为需要样本的多样性,可能会依赖于批样本数量。 |
dropout | 比率降低会提升模型的容量 | 较少的丢弃参数意味着模型参数量的提升,参数间适应性提升,模型容量提升,但不一定能提升模型有效容限 | |
权重衰减系数 | 调至最优,提升有效容量 | 权重衰减可以有效的起到限制参数变化的幅度,起到一定的正则作用 | |
优化器动量 | 调至最优,可能提升有效容量 | 动量参数通常用来加快训练,同时更容易跳出极值点,避免陷入局部最优解。 | |
模型深度 | 同条件下,深度增加,模型容量提升 | 同条件,下增加深度意味着模型具有更多的参数,更强的拟合能力。 | 同条件下,深度越深意味着参数越多,需要的时间和硬件资源也越高。 |
卷积核尺寸 | 尺寸增加,模型容量提升 | 增加卷积核尺寸意味着参数量的增加,同条件下,模型参数也相应的增加。 |
超参数 | 建议范围 | 注意事项 |
---|---|---|
初始学习率 | SGD: [1e-2, 1e-1] momentum: [1e-3, 1e-2] Adagrad: [1e-3, 1e-2] Adadelta: [1e-2, 1e-1] RMSprop: [1e-3, 1e-2] Adam: [1e-3, 1e-2] Adamax: [1e-3, 1e-2] Nadam: [1e-3, 1e-2] |
这些范围通常是指从头开始训练的情况。若是微调,初始学习率可在降低一到两个数量级。 |
损失函数部分超参数 | 多个损失函数之间,损失值之间尽量相近,不建议超过或者低于两个数量级 | 这是指多个损失组合的情况,不一定完全正确。单个损失超参数需结合实际情况。 |
批样本数量 | [1:1024] | 当批样本数量过大(大于6000)或者等于1时,需要注意学习策略或者BN的替代品。 |
dropout | [0, 0.5] | |
权重衰减系数 | [0, 1e-4] | |
卷积核尺寸 | [7x7],[5x5],[3x3],[1x1], [7x1,1x7] |
学习率直接控制着训练中网络梯度更新的量级,直接影响着模型的有效容限能力。一个合适的学习率既能加速模型的训练,又能得到一个较优甚至最优的精度, 过大或过小的学习率都会直接影响模型的收敛。
当模型训练到一定程度时,损失不再减少,此时模型的一阶导数接近于0,可能陷入局部最小值点或鞍点。若此时仍然以固定的学习率,则会使得模型陷入左右来回震荡或者鞍点,无法继续优化。所以,学习率衰减或者增大能帮助模型有效的减少震荡或逃离鞍点。因此一些学习率调整策略是由必要的。
损失函数上的可调参数需要结合实际的损失函数来调整,这些参数能能够直接影响到模型的有效容限能力。
- batch_size:批处理样本大小。
- iteration:1个iteration就是对batch_size个样本训练一次。
Batch 的选择, 首先确定的是下降的方向。
如果数据集较小, 采用数据集的方式,好处有:
- 由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向。
- 由于不同权重的梯度值差别巨大,因此选取一个全局的学习率很困难。 Full Batch Learning 可以使用 Rprop 只基于梯度符号并且针对性单独更新各权值。
如果数据集很大,采用全数据集有以下坏处:
- 随着数据集的海量增长和内存限制,一次性载入所有的数据进来变得越来越不可行。
- 以 Rprop 的方式迭代,会由于各个 Batch 之间的采样差异性,各次梯度修正值相互抵消,无法修正。这才有了后来 RMSProp 的妥协方案。
Batch_size = 1:
即每次训练一个样本,这使得每次修正方向不定,横冲直撞,难以收敛
Batch 的合理增大的好处:
- 内存利用率提高了,并行化效率提高
- 一个epoch的迭代次数减少,对于相同数据量的处理速度进一步加快
- 一定范围内, Batch_size越大,其下降方向越准,引起的震荡越小
盲目增大Batch_size 的坏处:
- 内存容量可能不足
- 一次epoch的迭代次数减少,要想达到相同的精读, 所花费的时间大大增加了,对参数的修正也就更慢
- Batch_size 增大到一定程度,其下降方向基本不再变化
Batch_size 太小,模型容易震荡, Batch_size 增大,处理相同数据量的速度越快,达到相同精读所需的epoch数量越来越多。
1个epoch等于使用训练集中的全部样本训练一次.