机器学习如何进行调参

调参,真的是让我脱了一层皮的一项工作。

调了半天,训练一天,结果什么用都没有的时候真的是绝望……

本文总结了自己对于调参的思考和一些常见参数的调整,希望对大家有所帮助。

如果本文中有些表述或理解有误,欢迎各位大神批评指正。


在实际调整参数之前,我们先要搞清楚两个事情:

1.调参的目的是什么?
2.调参调的东西具体是什么?

第一个问题:
调参的最终目的是要使训练之后的模型检测物体更精确,向程序的方向更靠近一步的话,就是使得损失函数(例如SSD中的loss)尽量小(因为利用训练集训练出来的模型质量在训练过程中只能靠验证集来检测)。
因此,调参可以看做一个多元函数优化问题。

第二个问题:
在解答第二个问题之前,我们先引入一个概念,超参数。
【超参数】
在模型开始学习过程之前人为设置值的参数,而不是通过训练得到的参数数据(诸如常规意义下的b、w)。
这些参数定义关于模型更高层次的概念(模型复杂性、学习能力等)。
不能直接从标准模型培训过程中的数据中学习,需要预先定义。
可以通过设置不同的值,训练不同的模型和选择更好的测试值来决定。

示例:
树的数量或深度、学习率、深层神经网络隐藏层数、k均值聚类中的簇数……

那么现在,可能大家心里都有点数了,我们要调的参数,主要就是这个“超参数”。

【深度学习中常用的调节参数】
1.学习率(learning rate)
学习率的调整应该是一个很常见的操作。一般随着迭代次数的提高,当loss下不去的时候会先暂停训练模型,然后将learning rate调整至原来的1/10再继续进行训练。
原因是,梯度下降过程中的学习率可以看做下山过程中的步长,假设你的一步很大可以跨过山谷直接踩到对面的山上的话,就很难得到局部最优解。此时,减小步长会提高你走到地面的概率。

2.有关过拟合
利用drop out、batch normalization、data argument等方法可以有效防止过拟合,通过调整drop out中每个神经元被抛弃的概率可以调整模型的泛化能力。

3.网络层数
一般来说,网络层数越多,模型的性能(包括灵敏度、收敛等)就会越好(这也是为什么深度神经网络最近这么火的原因之一)。相应地,对计算能力的要求就会更高。

而且,层数越多,神经元节点数越多,过拟合的概率就会越高。

这怎么办?

利用2中的各种方法防止过拟合。


4.Batch_Size

可以适当增大batch_size,但这种方法可能会对计算机性能有所影响(在本机上将batch_size调到原来的2倍的时候:大概是从24调到48,机器已经卡得不要不要的了……)。

batch_size增大到某个时候,可以达到时间上最优;
batch_size增大到某些时候,可以达到最终收敛精度上最优。

参考:深度学习中常用的调节参数
参考:深度学习调参有哪些技巧?

  • 12
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值