资源 | 神经网络调试手册:从数据集与神经网络说起

2017 年 9 月 1 日 机器之心

选自Hackernoon

作者:Andrey Nikishaev

机器之心编译

参与:黄小天


近日,hackernoon 上出现了一篇题为《How to debug neural networks. Manual.》的文章,从数据集与神经网络两个方面分享了作者 Andrey Nikishaev 在调试神经网络方面的实践心得。



调试神经网络是一项艰难的工作,专家也不例外。面对数百万的参数,任何一个小变动都可能使你前功尽弃。没有调试和可视化,所有你的行动就像抛硬币,而且更糟糕的是还浪费时间。下面是我搜集的实践汇总,希望有助于你提早发现问题。


数据集问题


尝试使用小数据集过拟合你的模型


一般来说神经网络应该在数百次迭代中过拟合你的数据。如果你的损失值不下降,那问题存在于更深层次。


使用迭代逻辑解决问题


尝试构建最简单的网络解决你的主要问题,接着一步一步扩展到全局问题。比如,你正在创建风格迁移网络,首先在一张图像上训练你的脚本迁移风格。如果奏效,再接着创建用于任何图像的风格迁移模型。


使用具有扭曲的平衡数据集


比如训练分类数据的网络,你的训练数据应该对每一分类具有相同数量的输入。其他情况下则存在分类过拟合的可能性。神经网络对于所有的扭曲并非恒定不变,因此需要你对它们进行专门训练。制造输入扭曲将会提升网络准确度。


网络容量 vs 数据集大小


你的数据集应足够大,以便网络用来学习。如果你的数据集小,而网络很大,那么它会停止学习(某些情况下也会为大量的不同输入输出相同结果)。如果你有大数据,而网络很小,那么你将会看到损失值的跳跃,因为网络容量无法存储如此多的信息。


使用均值中心化(mean centering)


这将会从你的网络中移除噪音数据,提升训练性能,同时某些情况下有助于解决 NaN 问题。但是记住,如果你有时序数据,那么你应该使用批而不是全局中心化。


神经网络问题


首先尝试较简单的模型


我在很多案例中看到人们首先尝试一些标准的大型网络,比如 ResNet-50、VGG19 等,但是接着发现他们的问题通过仅有若干层的网络也能解决。因此如果你没有标准问题,首先从小网络开始吧。你添加的数据越多,模型就越难训练,因此从小网络开始会更省时。你也应该记住,大网络需要更大的内存与更多的操作。


可视化是必须的


如果你正使用 TensorFlow,一定要从 TensorBoard 开始。如果没有,尝试为你的框架寻找一些可视化工具,或者自己动手编写。这将对于你发现训练早期阶段的问题非常有帮助。你必须可视化的事情有:损失值、权重直方图、变量和梯度。如果你正在做计算机视觉,那要一直可视化过滤器从而理解网络实际上看到了什么。


权重初始化


如果你错误设置权重,由于零梯度,或者所有神经元的类似更新等,你的网络将变得无法训练。同样你也应该记住权重与学习率是成对的,因此高学习率和大权重可以导致 NaN 问题。


对于一些网络使用 1e-2–1e-3 左右的高斯分布初始化软件已经足够。


对于深度网络这毫无用处,因为你的权重彼此相乘了很多次,将会产生几乎消除反向传播上的梯度的非常小的数值。多亏了 Ioffe 和 Szegedy,现在我们有了批归一化,缓解了令人头疼的大量问题。


使用标准网络解决标准问题


存在大量的预训练模型,你可以正确使用它们。在一些情况中是这样,或者你可以使用调整技术节约训练时间。主要的想法是绝大多数网络容量对于不同问题是相同的。比如,如果我们讨论计算机视觉,它将会包含对于所有图像一样的线、点、角,并且你不需要再训练它们。


把衰减用于学习率


这几乎每次都会给你一个提升。TensorFlow 中有大量的不同衰减调度器(https://www.tensorflow.org/versions/r0.12/api_docs/python/train/decaying_the_learning_rate)。


使用网格搜索、随机搜索或配置文件调整超参数


不要试图手动调整所有参数,这很耗时,效率低下。我经常使用全局配置调整所有参数,并在运行完检查结果后看看在哪个方向上应该进一步调查。如果这个方法没有帮助,你可以试一下随机搜索或网格搜索。


激活函数



1. 梯度消失问题


一些激活函数,比如 Sigmoid 和 Tanh 正在遭受饱和问题。在其极限时,它们的导数接近于零,这将会消除梯度和学习过程。因此检查不同的函数比较好。现在标准的激活函数是 ReLU。同样这一问题也出现在一个非常深度或者循环的网络中,比如你有 150 层,所有的激活值是 0.9,那么 0.9¹⁵⁰ = 0,000000137。但是正如上文所说,批归一化将有助于解决这一问题,残差层也是。


2. 不是零均值的激活值


比如 Sigmoid、ReLU 函数就不是零均值的。这意味着训练期间所有你的梯度将全部是正或负,并会引发学习问题。这就是为什么我们使用零均值的输入数据。


3. Dead ReLUs


标准的 ReLU 函数也不完美。对于负数 ReLU 给出零的问题意味着它们将不会被激活,因此你的神经元的某些部分将会死掉并永不再用。这之所以能发生是因为高学习率和错误的权重初始化。如果参数调整没有帮助,那么你可以试一下 Leaky ReLU、PReLU、ELU 或 Maxout,它们没有这一问题。


4. 梯度爆炸


这一问题与梯度消失相同,除却每一步梯度变的越来越大。一个主要的解决办法是使用梯度剪裁,为梯度设置基本的硬限制。


深度网络的精确度降级


从一些点上真正深化网络的问题开始表现为一个坏手机,因此增加更多层降低了网络精确度。解决办法是使用残差层把输入的一些部分传递到所有层。 



原文地址:https://hackernoon.com/how-to-debug-neural-networks-manual-dc2a200f10f2



本文为机器之心编译,转载请联系本公众号获得授权

✄------------------------------------------------

加入机器之心(全职记者/实习生):hr@jiqizhixin.com

投稿或寻求报道:content@jiqizhixin.com

广告&商务合作:bd@jiqizhixin.com

登录查看更多
1

相关内容

人工神经网络(Artificial Neural Network,即ANN ),是20世纪80 年代以来人工智能领域兴起的研究热点。它从信息处理角度对人脑神经元网络进行抽象, 建立某种简单模型,按不同的连接方式组成不同的网络。在工程与学术界也常直接简称为神经网络或类神经网络。神经网络是一种运算模型,由大量的节点(或称神经元)之间相互联接构成。每个节点代表一种特定的输出函数,称为激励函数(activation function)。每两个节点间的连接都代表一个对于通过该连接信号的加权值,称之为权重,这相当于人工神经网络的记忆。网络的输出则依网络的连接方式,权重值和激励函数的不同而不同。而网络自身通常都是对自然界某种算法或者函数的逼近,也可能是对一种逻辑策略的表达。 最近十多年来,人工神经网络的研究工作不断深入,已经取得了很大的进展,其在模式识别、智能机器人、自动控制、预测估计、生物、医学、经济等领域已成功地解决了许多现代计算机难以解决的实际问题,表现出了良好的智能特性。
干净的数据:数据清洗入门与实践,204页pdf
专知会员服务
161+阅读 · 2020年5月14日
神经网络的拓扑结构,TOPOLOGY OF DEEP NEURAL NETWORKS
专知会员服务
32+阅读 · 2020年4月15日
【资源】100+本免费数据科学书
专知会员服务
107+阅读 · 2020年3月17日
Sklearn 与 TensorFlow 机器学习实用指南,385页pdf
专知会员服务
129+阅读 · 2020年3月15日
模型压缩究竟在做什么?我们真的需要模型压缩么?
专知会员服务
27+阅读 · 2020年1月16日
神经网络佛系炼丹手册
AINLP
6+阅读 · 2019年6月13日
入门 | 深度学习模型的简单优化技巧
机器之心
9+阅读 · 2018年6月10日
基础 | GRU神经网络
黑龙江大学自然语言处理实验室
27+阅读 · 2018年3月5日
理解神经网络的激活函数
论智
7+阅读 · 2018年1月8日
入门 | 一文了解神经网络中的梯度爆炸
机器之心
8+阅读 · 2017年12月22日
TensorFlow实现神经网络入门篇
机器学习研究会
10+阅读 · 2017年11月19日
Arxiv
8+阅读 · 2019年5月20日
Arxiv
4+阅读 · 2018年10月31日
W-net: Bridged U-net for 2D Medical Image Segmentation
Arxiv
19+阅读 · 2018年7月12日
Arxiv
14+阅读 · 2018年5月15日
Arxiv
6+阅读 · 2016年1月15日
VIP会员
相关VIP内容
干净的数据:数据清洗入门与实践,204页pdf
专知会员服务
161+阅读 · 2020年5月14日
神经网络的拓扑结构,TOPOLOGY OF DEEP NEURAL NETWORKS
专知会员服务
32+阅读 · 2020年4月15日
【资源】100+本免费数据科学书
专知会员服务
107+阅读 · 2020年3月17日
Sklearn 与 TensorFlow 机器学习实用指南,385页pdf
专知会员服务
129+阅读 · 2020年3月15日
模型压缩究竟在做什么?我们真的需要模型压缩么?
专知会员服务
27+阅读 · 2020年1月16日
相关资讯
神经网络佛系炼丹手册
AINLP
6+阅读 · 2019年6月13日
入门 | 深度学习模型的简单优化技巧
机器之心
9+阅读 · 2018年6月10日
基础 | GRU神经网络
黑龙江大学自然语言处理实验室
27+阅读 · 2018年3月5日
理解神经网络的激活函数
论智
7+阅读 · 2018年1月8日
入门 | 一文了解神经网络中的梯度爆炸
机器之心
8+阅读 · 2017年12月22日
TensorFlow实现神经网络入门篇
机器学习研究会
10+阅读 · 2017年11月19日
相关论文
Arxiv
8+阅读 · 2019年5月20日
Arxiv
4+阅读 · 2018年10月31日
W-net: Bridged U-net for 2D Medical Image Segmentation
Arxiv
19+阅读 · 2018年7月12日
Arxiv
14+阅读 · 2018年5月15日
Arxiv
6+阅读 · 2016年1月15日
Top
微信扫码咨询专知VIP会员