在写本科毕业论文的时候又回顾了一下神经网络调参的一些细节问题,特来总结下。主要从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. step-by-step: 夕小瑶版神经网络调参指南(上)

    距离上一篇文章已经过去好久好久好久啦.闭关几个月后,其实早有继续码文章的打算,先后写了一下核函数与神经网络的一些思考.文本预处理tricks.不均衡文本分类问题.多标签分类问题.tensorflow常 ...

  2. 神经网络调参-warmup and decay

    欢迎大家访问个人博客:https://jmxgodlz.xyz 前言 本文将介绍神经网络调参技巧:warmup,decay.反向传播主要完成参数更新:θt=θt−1−α∗gt\theta_t=\the ...

  3. AI:神经网络调参(数据、层数、batch大小,学习率+激活函数+正则化+分类/回归)并进行结果可视化

    AI:神经网络调参(数据.层数.batch大小,学习率+激活函数+正则化+分类/回归)并进行结果可视化 目录 神经网络调参(数据.层数.batch大小,学习率+激活函数+正则化+分类/回归)并进行结果 ...

  4. GPT-3 1750亿参数少样本无需微调,网友:「调参侠」都没的当了

    2020-06-02 12:01:04 OpenAI最强预训练语言模型GPT-3周四发表在预印本 arXiv 上,1750亿参数! GPT系列的预训练语言模型一直是大力出奇迹的典型代表,但是一代和二代 ...

  5. 深度神经网络调参-学习笔记

    深度学习调参 一. 建立评价指标 建立判别对于网络的评价指标,同个这个指标来判别这个网络的好坏层度,网络也可以有一个或者有多个指标. (1) 最好是一个指标 网络最好是由一个指标来决定,如果由多个指标 ...

  6. 神经网络调参经验大汇总

    作者:Andrej Karpathy,翻译:杰少 @大野人007 今天看到一篇非常非常棒的调节NN的文章,作者是特斯拉高级总监Andrej Karpathy,就翻译过来和大家一起分享,难免翻译有问题, ...

  7. 神经网络调参---权重对分类性能的影响

    首先制作一个二分类minst0和2的网络,将minst 28*28的图像缩小到9*9,采用1个3*3的卷积核网络的结构是49*30*2. 画成图 这个网络由两部分组成,左右两边分别向1,0和0,1收敛 ...

  8. 神经网络调参技巧:warmup策略

    有一些论文对warmup进行了讨论,使用 SGD 训练神经网络时,在初始使用较大学习率而后期改为较小学习率在各种任务场景下都是一种广为使用的做法,在实践中效果好且最近也有若干文章尝试对其进行了理论解释 ...

  9. 4.1 卷积神经网络调参-adagrad_adam

    4.3.1 adagrad_adam 我们之前将了随机梯度下降和动量梯度下降,不过,还有很多其他的优化算法可以使得模型稳定. 先来回顾随机梯度下降和动量梯度下降 随机梯度下降有两个问题:局部极值问题和 ...

  10. 深度神经网络调参经验

    σ′(⋅)=σ(⋅)(1−σ(⋅))\sigma'(\cdot)=\sigma(\cdot)(1-\sigma(\cdot)),tanh′=1−tanh2\tanh'=1-\tanh^2 batch_ ...

最新文章

  1. 用 Pyecharts 制作炫酷的可视化大屏
  2. 《VMware vSphere企业运维实战》——2.6 使用vCenter Converter迁移物理机到虚拟机
  3. Linux下一个简单守护进程的实现 (Daemon)
  4. Java数据库查询简介
  5. 如何知道iframe文件下载download完成
  6. 如何自定义SAP Spartacus的路由路径
  7. 找准切入点,调试看源码,事半功倍
  8. ubuntu下docker简单安装mysql
  9. ElasticSearch中doc values和fielddata
  10. JavaScript unshift()函数移入数据到数组第一位
  11. 饿了么的架构设计及演进之路
  12. linux SNAT、DNAT目标函数
  13. C#抖音无水印视频地址解析
  14. jquery衬衣产品内容详情页
  15. 泛微oa流程表单之流程阻止提交
  16. 利用CSS完成鼠标悬浮时中英文切换
  17. 认识中药(3)--桔(jie)梗
  18. 在线Spirte图定位工具,自动生成CSS
  19. python坦克大战
  20. wpf 点击按钮弹出新对话框_WPF弹出自定义窗口的方法

热门文章

  1. jquery.serialize
  2. OC4J、UCP、CGI(引用)
  3. 快速傅立叶变换_FFT
  4. Picturebox实现图片的缩放
  5. 双系统安装(win10系统+Ubuntu)
  6. java中的scanner用法
  7. 云服务器上搭建hadoop伪分布式环境
  8. 两局域网互联解决方案
  9. poj 1276 Cash Machine 背包问题
  10. Win8 开发者训练营第一天的过程,感受和收获