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

在写本科毕业论文的时候又回顾了一下神经网络调参的一些细节问题,特来总结下。主要从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.01hidden_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实现代码:

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

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

F1为一个评测值,想了解的更加详细的,点这里

可以从实验看出weight_decay还是有点效果的,但不是对所有的试验有效果,所以这也是调参的一部分。

 

clip_norm

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

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

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

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

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

数据对比:

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

 

lr_decay

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

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

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

pytorch代码为:

        

       

数据对比:

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


更多精彩内容,请关注 深度学习自然语言处理 公众号,就是下方啦!跟随小博主,每天进步一丢丢!哈哈!

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在PyTorch中调参神经网络训练过程中非常重要的一部分。下面我将给出一些常用的PyTorch神经网络调参方法: 1. 参数访问和修改:你可以使用`model.parameters()`方法来访问模型的所有参数。这个方法返回一个可迭代的参数列表,你可以通过遍历这个列表来访问和修改每个参数的值。例如,你可以使用`param.data`来访问参数的值,并使用`param.data = new_value`来修改参数的值。 2. 参数初始化:在PyTorch中,你可以使用不同的方法来初始化神经网络的参数。PyTorch提供了一些预定义的初始化方法,比如`torch.nn.init.xavier_uniform_()`和`torch.nn.init.kaiming_normal_()`等。你可以在创建模型的时候使用这些初始化方法来初始化参数。此外,你也可以自定义初始化方法,并在模型中调用它们。可以参考中的示例代码来了解如何在PyTorch中进行参数初始化。 3. 参数绑定:在某些情况下,你可能希望共享模型中的参数。在PyTorch中,你可以通过将一个参数的引用赋给另一个参数来实现参数的绑定。这样做的好处是可以节省内存,并且可以同时更新所有绑定的参数。你可以使用`param1.data = param2.data`来将参数2绑定到参数1。 总结起来,调参神经网络训练中的重要环节,你可以通过访问和修改参数、初始化参数以及绑定参数等方法来调整神经网络的性能和表现。你可以参考和中的内容来学习更多关于在PyTorch中进行神经网络调参的方法。同样,你也可以参考中提供的教程来深入了解PyTorch的使用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值