点击上方“视学算法”,选择加"星标"或“置顶”
重磅干货,第一时间送达
神经网络的 debug 过程着实不容易,这里是一些有所帮助的 tips。

基于神经网络的项目瓶颈通常并非对网络的实现。有时候,在编写了所有代码并尝试了一大堆超参数配置之后,网络就是无法正常工作。尤其是面对着数百万的参数, 任何一个小变动都有可能前功尽弃。

在面对各种各样的问题后,有人总结了一些帮助调试神经网络的实用 tips,希望能够减少大家调试神经网络的成本。

检查梯度问题

有时梯度是引发问题的原因。下面是几种与梯度相关的调试方法:

  • 数值计算每个权重的梯度。这通常被称为「梯度检查」,有助于确保正确计算梯度,其中一种方法是使用有限差分。

  • 比较每个权重的大小和梯度的大小。要确保大小的比率是合理的。如果梯度大小远小于权重大小,网络将花费很长时间进行训练。如果梯度大小与权重大小大致相同或更大,网络将非常不稳定,可能根本不会训练。

  • 检查梯度爆炸或消失。如果梯度变为 0 或 nan/infinity,则可以确定网络没有被正确训练。需要首先弄清楚为什么会发生爆炸 / 消失梯度,是否步数太大。一旦弄清楚梯度爆炸 / 消失的原因,就有各种解决方案来解决这个问题,例如添加残差连接以更好地传播梯度或简单地使用较小的网络。

  • 激活函数也会导致梯度爆炸 / 消失。如果 sigmoid 激活函数的输入太大,梯度将非常接近 0。随着时间的推移检查激活函数的输入,然后确保这些输入不会导致梯度始终为 0 或很大。

检查训练过程

经常检查网络的训练进度可以节省时间。以训练贪吃蛇游戏为例,不是训练网络好几天,然后再检查网络是否学到了什么,而是每十分钟用当前学到的权重运行游戏。几个小时后,如果我们注意到每次都在做同样的事情并且获得零奖励,就知道可能有问题了,而这节省了几天的训练时间。

不要依赖定量输出

如果只查看定量输出,我们可能会错过有用的调试信息。例如,在训练语音翻译网络时,比起只检查评估函数是否在减少,更重要的是阅读翻译后的语音以确保它有意义;当训练一个用于图像识别的网络时,一定要确保手动检查网络提供的标签。

不应该依赖定量输出的原因有两个:首先,评估函数中可能存在错误。如果只查看错误评估函数输出的数字,可能需要数周时间才能意识到出现问题。其次,在神经网络输出中可能存在无法定量显示的错误模式。我们可能会意识到某个特定单词总是被错误翻译,或者在左上象限的图像识别网络总是错误的。这些观察结果反过来可以帮助找到数据处理部分的代码 bug,否则这些 bug 将被忽视。

尝试小数据集

确定代码是否存在 bug 或数据是否难以训练的另一种方法是首先拟合较小的数据集,比如将数据集中 100000 个训练示例修剪成只有 100 个甚至 1 个训练示例。如果在一个训练示例的情况下,网络仍然有很高的测试错误,不能够非常好地拟合数据,那么几乎可以肯定网络代码有问题。

尝试更简单的网络

如果全尺寸网络在训练时遇到问题,可以尝试使用层数较少的较小网络,这样可以更快地训练。如果较小的网络在全尺寸网络失败的情况下成功了,则表明全尺寸模型的网络架构过于复杂。如果简单网络和全尺寸网络都失败,则代码中可能存在 bug。

试着使用框架

如果没有使用机器学习框架编写神经网络的代码,那么可以通过在机器学习框架中编写相同的网络架构来检查问题何在。然后将打印语句放入非框架版本和框架版本中逐层比较输出,直到找到打印语句出现差异的位置,即错误所在。如果在反向传播期间发生错误,则可以从最后一层开始逐层打印权重的渐变,直到找到差异。但是此方法仅适用于网络的第一次迭代,因为由于第一次迭代输出的差异,第二次及以后的迭代将具有不同的起点。

参考内容:https://towardsdatascience.com/debugging-tips-for-neural-networks-f7dc699d6845

点个在看 paper不断!

神经网络 debug 太难了,这里有六个实用技巧相关推荐

  1. 神经网络debug太难了,这里有六个实用技巧

    转载自:机器之心 神经网络的 debug 过程着实不容易,这里是一些有所帮助的 tips. 基于神经网络的项目瓶颈通常并非对网络的实现.有时候,在编写了所有代码并尝试了一大堆超参数配置之后,网络就是无 ...

  2. 机器学习与算法面试太难?

    机器学习与算法面试太难? 来源: https://mp.weixin.qq.com/s/GrkCvU2Ia_mEaQmiffLotQ 作者:石晓文 八月参加了一些提前批的面试,包括阿里.百度.头条.贝 ...

  3. GAN:「太难的部分我就不生成了,在下告退」

    选自 arXiv 作者:David Bau, Jun-Yan Zhu等 机器之心编译 参与:Panda W 生成对抗网络(GAN)现在已经能合成极具真实感的图像了,但 MIT.IBM 和香港中文大学的 ...

  4. AI可以在游戏里称霸,但是解决现实问题太难了

    来源:36氪 据<大西洋月刊>报道,直到最近,那些能在各类游戏中击败人类冠军的机器,解决现实问题太难了. 1997年,为了在国际象棋中击败象棋大师加里·卡斯帕罗夫(Garry Kaspar ...

  5. 英伟达CUDA太难!OpenAI出手要取代它,新语言性能相当但编程更简单

    晓查 发自 凹非寺 量子位 报道 | 公众号 QbitAI 用CUDA为GPU编程实在太难了. 为了让没有CUDA编程经验的人写出和专家效率相当的GPU代码,现在OpenAI推出了一种新的语言和编译器 ...

  6. 本地缓存需要高时效性怎么办_太难为我了,为了这份P7岗offer,我承受了7轮面试...

    前言 今年的大环境非常差,互联网企业裁员的现象比往年更严重了,可今年刚好是我的第一个"五年计划"截止的时间点,说什么也不能够耽搁了,所以早早准备的跳槽也在疫情好转之后开始进行了.但 ...

  7. GAN也有脾气:「太难的部分我就不生成了,在下告退」

    点击我爱计算机视觉标星,更快获取CVML新技术 本文转载自机器之心. 选自 arXiv 作者:David Bau, Jun-Yan Zhu等 机器之心编译 参与:Panda W 生成对抗网络(GAN) ...

  8. wgan 不理解 损失函数_GAN:「太难的部分我就不生成了,在下告退」

    选自 arXiv 作者:David Bau, Jun-Yan Zhu等 机器之心编译 参与:Panda W 生成对抗网络(GAN)现在已经能合成极具真实感的图像了,但 MIT.IBM 和香港中文大学的 ...

  9. 薪酬缩水,“裸辞”奋战25天三面美团,交叉面却被吊打,我太难了

    我太难了 2020年,一场肆虐全国的新型冠状病毒肺炎疫情,让许多中小企业们陷入经营困难危机之中.面对这种情况,有一些单位开始停发薪资.变相裁员,脉脉上收到爆料某公寓租赁企业直接裁掉80%员工,让更多的 ...

最新文章

  1. CRM中Plugin开发如何将功能放入多个模块
  2. Windows 10 下 VS2017(+Clion) C/C++ 配置 OpenCV-4.4.0
  3. boost::range模块实现格式化相关的测试程序
  4. ubuntu 13.10 Rhythmbox不能播放mp3 和中文乱码的问题
  5. React.js 小书 Lesson15 - 实战分析:评论功能(二)
  6. HTML用于定义宽度的是,HTML Style columnRuleWidth用法及代码示例
  7. 网传各高校教授经典语录
  8. oracle asm 错误集
  9. hdu--1181--变形课
  10. MPLS OPTION-B
  11. 如何恢复磁盘中被删除的数据
  12. 云服务器被恶意ddos攻击了怎么办?
  13. 【网络是怎么连接的】| 【03】探索集线器、交换机和路由器
  14. 链家爬取深圳租房代码(java)
  15. Onlyoffice安装教程
  16. 用计算机修改图片或照片,如何利用电脑自带的画图工具修改图片的基本属性
  17. js 鼠标滑轮控制左右横向滚动
  18. android系统 视频流录像,Android端海康视频取流,可以实时预览与查看历史录像
  19. 云堡垒机的作用_阿里云堡垒机详解
  20. 手机搜狐 html5,手机搜狐网计划改版,将利用HTML5技术

热门文章

  1. META Header
  2. PHP Session中保存Object
  3. 深入浅出Pytorch:01 课程大纲与PyTorch简介
  4. 【组队学习】【29期】6. 动手学数据分析
  5. 真香!精心整理了 100+Python 字符串常用操作
  6. Q 版老黄带着硬核技术再登场,有点可爱,很有东西
  7. 超越最新无监督域自适应方法,研究人员提轻量CNN新架构OSNet
  8. 程序员假冒AI,印度公司竟骗取2亿元投资
  9. “你行你上”:有本事跟OpenAI Five打一把DOTA?| 极客头条
  10. 无人驾驶汽车系统入门:基于深度学习的实时激光雷达点云目标检测及ROS实现...