开发者社区> 技术小能手> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

这些神经网络调参细节,你都了解了吗

简介: 本文主要介绍了神经网络调参并附有python代码介绍。
+关注继续查看

【磐创AI导读】:本文主要介绍了神经网络调参并附有python代码介绍。

今天在写毕设的时候又回顾了一下神经网络调参的一些细节问题,特来总结下。主要从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大家应该知道怎么调,这里就不讲了。还有其他的调参细节部分,等以后详细用到了再总结给大家。

weight_decay
weight_decay即权重衰退。为了防止过拟合,在原本损失函数的基础上,加上L2正则化,而weight_decay就是这个正则化的lambda参数,一般设置为1e-8,所以调参的时候调整是否使用权重衰退即可。这个防止过拟合的正则化我之前和dropout一起讲过的,想要巩固下,点这里。

pytorch实现代码:

image


self.HyperParams里封装的就是我的所有参数,而decay是这里说的weight_decay,值为1e-8.

对weight_decay我做了实验,数据对比:

image

F1为一个评测值,想了解的更加详细的,点这里。
可以从实验看出weight_decay还是有点效果的,但不是对所有的试验有效果,所以这也是调参的一部分。

clip_norm
clip_grad即修剪梯度,为了防止梯度爆炸(gradient explosion)。

原理为:损失函数反向传播的时候,使得每个参数都有了梯度gradient,如果所有的梯度平方和sum_sq_gradient大于clip_grad,那么求出缩放因子:

image

接着改变每个gradient,使每个gradient都乘scale_factor,达到缩放的效果,使每个梯度的sum_sq_gradient都被限制在clip_grad里,来达到防止梯度爆炸的效果。通常设置为10,那么调参的内容为是否需要clip_grad机制。

pytorch代码为(只看红框框里的就行):

image


接整个图的目的是表示在哪里用这个函数。在网络获得损失,并进行后向传播梯度后用该方法,之后进行优化,更新参数即可。

数据对比:

image

可以看出有那么一丢丢效果。随着不同的数据集,效果还是不一样的。

lr_decay

lr_decay即学习率衰退,一般设置为1e-8,公式为:

image


其中,lr为学习率,step为当前迭代次数

因为一般情况下循环迭代次数越多的时候,学习率的步伐就应该越来越小,这样才能慢慢接近函数的极值点,。但是有时候也不一定会有效,所以这里需要通过调参来查看是否需要开启lr_decay。

pytorch代码为:


image

数据对比:

image

依然那句话,不是所有的数据集都会有好的效果,需要自己调试,选择适合自己模型的参数。

原文发布时间为:2018-07-01
本文作者:zenRRan
本文来自云栖社区合作伙伴“磐创AI”,了解相关信息可以关注“磐创AI”。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
MPNN:消息传递神经网络
MPNN:消息传递神经网络
114 0
机器学习(三)使用Python和R语言从头开始理解和编写神经网络(二)
机器学习(三)使用Python和R语言从头开始理解和编写神经网络(二)
29 0
用Keras开发字符级神经网络语言模型
通过学习本教程,你将学会如何开发基于字符的神经网络语言模型,包括:如何针对基于字符的语言建模准备文本,如何使用LSTM开发基于字符的语言模型,如何使用训练过的基于字符的语言模型来生成文本。
2409 0
《并行计算的编程模型》一2.3.6 活动消息进程
本节书摘来华章计算机《并行计算的编程模型》一书中的第2章 ,第2.3.6节, [(美)帕万·巴拉吉(Pavan Balaji)编著;张云泉等译,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
750 0
高效C++编程
推荐编写C++的代码风格,看似容易,坚持不易,且写且珍惜!  --陈国林 1. 版本和版本声明 版本和版本文件声明位于头文件和定义文件的开头,主要内容 (1)版本信息 (2)文件名称、标识符、摘要 (3)当前的版本号、作者、修改日期 (4)版本历史信息   2.
671 0
+关注
技术小能手
云栖运营小编~
7194
文章
9
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载