这些神经网络调参细节,你都了解了吗
来源 | 深度学习自然语言处理
作者 | zenRRan
编辑 | 磐石
【磐创AI导读】:本文主要介绍了神经网络调参并附有python代码介绍。欢迎大家点击上方蓝字关注我们的公众号:磐创AI。
阅读大概需要4分钟
跟随博主,每天进步一丢丢
今天在写毕设的时候又回顾了一下神经网络调参的一些细节问题,特来总结下。主要从weight_decay,clip_norm,lr_decay说起。
以前刚入门的时候调参只是从hidden_size,hidden_num,batch_size,lr,embed_size开始调,但是后来才逐渐明白embed_size一般是设置完后不用再调的,比如设定为128后,就不要调了,因为embed_size只是表示将词嵌入到几维的空间而已。lr也一般都有固定值,比如选取优化器Adam的时候,lr=0.001,选取优化器SGD的时候,lr=0.01,hidden_num一般设置为1的时候就行,2层以上在简单的网络上只会到的适得其反的效果。
所以剩下该调的也只有hidden_size,batch_size,weight_decay,clip_norm,lr_decay了。但是hidden_size,batch_size大家应该知道怎么调,这里就不讲了。还有其他的调参细节部分,等以后详细用到了再总结给大家。
clip_grad即修剪梯度,为了防止梯度爆炸(gradient explosion)。
原理为:损失函数反向传播的时候,使得每个参数都有了梯度gradient,如果所有的梯度平方和sum_sq_gradient大于clip_grad,那么求出缩放因子:
接着改变每个gradient,使每个gradient都乘scale_factor,达到缩放的效果,使每个梯度的sum_sq_gradient都被限制在clip_grad里,来达到防止梯度爆炸的效果。通常设置为10,那么调参的内容为是否需要clip_grad机制。
pytorch代码为(只看红框框里的就行):
可以看出有那么一丢丢效果。随着不同的数据集,效果还是不一样的。
其中,lr为学习率,step为当前迭代次数
因为一般情况下循环迭代次数越多的时候,学习率的步伐就应该越来越小,这样才能慢慢接近函数的极值点,。但是有时候也不一定会有效,所以这里需要通过调参来查看是否需要开启lr_decay。
依然那句话,不是所有的数据集都会有好的效果,需要自己调试,选择适合自己模型的参数。
推荐阅读:
● 一文彻底搞懂BP算法:原理推导+数据演示+项目实战(上篇)
Tips:欢迎大家点击最下方二维码关注我们的公众号,点击干货资源专栏或发送关键字“资源”获取更多资源推荐。关注我们的历史文章,一起畅游在深度学习的世界中。我们期待你的留言和投稿,共建交流平台。来稿请寄:voice1235@163.com。
欢迎扫码进入相应技术交流群:
原创文章,作者:fendouai,如若转载,请注明出处:https://panchuang.net/2018/06/24/9857817206/