[关闭]
@songying 2019-04-03T13:19:58.000000Z 字数 2844 阅读 2028

深度学习: 超参数调优

deep-learning


超参数调优方法

超参数搜索的一般过程

  1. 在训练集上根据模型性能指标对模型参数进行优化
  2. 在验证集上根据模型性能指标对模型的超参数进行搜索
  3. 步骤1,2交替进行, 最终确定模型的参数和超参数,然后在测试集上验证评价模型的优劣

超参数搜索一般包含三个要素:

  • 目标函数
  • 搜索范围: 上限和下限
  • 其他参数: 搜索步长

1. 网格搜索

2. 随机搜索

3. 贝叶斯优化算法

简介

超参数大致可分为三类:

  • 网络参数: 指的是网络层与层之间的交互方式, 卷积核数量,尺寸,网络层数,激活函数等
  • 优化参数: 指的是学习率,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]

优化参数

1. 学习率的选择

学习率直接控制着训练中网络梯度更新的量级,直接影响着模型的有效容限能力。一个合适的学习率既能加速模型的训练,又能得到一个较优甚至最优的精度, 过大或过小的学习率都会直接影响模型的收敛。

当模型训练到一定程度时,损失不再减少,此时模型的一阶导数接近于0,可能陷入局部最小值点或鞍点。若此时仍然以固定的学习率,则会使得模型陷入左右来回震荡或者鞍点,无法继续优化。所以,学习率衰减或者增大能帮助模型有效的减少震荡或逃离鞍点。因此一些学习率调整策略是由必要的。

2. 损失函数上的可调参数

损失函数上的可调参数需要结合实际的损失函数来调整,这些参数能能够直接影响到模型的有效容限能力。

2. batch_size

  • batch_size:批处理样本大小。
  • iteration:1个iteration就是对batch_size个样本训练一次。

Batch 的选择, 首先确定的是下降的方向。

Batch_size 太小,模型容易震荡, Batch_size 增大,处理相同数据量的速度越快,达到相同精读所需的epoch数量越来越多。

3. epoch

1个epoch等于使用训练集中的全部样本训练一次.

4. 优化算法相关参数

4. dropout

网络参数

正则化参数

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注