专栏名称: 数盟
数盟(数据科学家联盟)隶属于北京数盟科技有限公司,数盟致力于成为培养与发现“数据科学家”的黄埔军校。 数盟服务包括:线下活动、大数据培训。 官网:http://dataunion.org,合作:contact@dataunion.org
51好读  ›  专栏  ›  数盟

调试神经网络让人抓狂?这有16条锦囊妙计送给你

数盟  · 公众号  · 大数据  · 2017-08-28 22:00

正文

作者:Andrey Nikishaev

即便对于行家来说,调试神经网络也是一项艰巨的任务。数百万个参数挤在一起,一个微小的变化就能毁掉所有辛勤工作的成果。然而不进行调试以及可视化,一切就只能靠运气,最后可能浪费掉大把的青春岁月。

怎么办?这里是我总结的一些方法,希望对你有所帮助。

数据集问题

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

一般来说,几百次迭代后神经网络就会对数据过拟合。如果损失还不下降,那么问题可能就深了。

使用迭代逻辑来解决问题

先建立一个最小的网络来解决核心问题,然后一步一步扩展到全局问题。比方构建一个风格迁移网络,应该首先在一张图片上训练。成功之后,再构建一个可以对任意图片实现风格迁移的模型。

使用带有失真的平衡数据集

以训练模型进行数据分类为例,每一类的输入训练数据量应该一致。不然会出现某一类的过拟合。神经网络对于所有失真应该具有不变性,你需要特别训练这一点。所以输入一些失真数据,有助于提高网络的准确率。

网络容量与数据大小

数据集应该足以让网络完成学习。如果大网络配上小数据集,学习过程就会停止,有可能一大堆输入都得出同样的输出。如果小网络配上大数据集,你会遇见损失的跳跃,因为网络容量存储不了这么多信息。

使用平均中心化

这有助于从网络中去除噪音数据,并且提高训练效果,在某些情况下还有助于解决NaN问题。不过切记对于时间序列数据,应该使用批量中心化而不是全局。

神经网络问题

首先尝试简单的模型

我看到太多人一上来就尝试ResNet-50、VGG19等标准的大型网络,结果发现他们的问题其实只要几层网络就能解决。所以如果不是有什么恋大的情结,麻烦你从小型网络开始着手。

增加的东西越多,越难训练出一个解决问题的模型。从小网络开始训练,可以节省更多的时间。以及,大网络会占用更多的内存和运算。

必须可视化

如果用TensorFlow,那就必须用Tensorboard。否则,请为你的框架找到别的可视化工具,或者自己写一个。因为这有助于你在训练早期阶段发现问题。你应该明确的看到这些数据:损失、权重直方图、变量和梯度。

如果是处理计算机视觉方面的工作,始终要对过滤器进行可视化,这样才能清楚的了解网络正在看到的是什么内容。

权重初始化

如果不能正确的设置权重,你的网络可能会因为梯度消失等原因变得无法学习。以及你要知道权重和学习率互相结合,大学习率和大权重可能导致NaN问题。

对于小型网络,在1e-2~1e-3附近使用一些高斯分布初始化器就够了。







请到「今天看啥」查看全文


推荐文章
中央戏剧学院就业创业指导中心  ·  招贤榜┇华谊兄弟 新圣堂影业
7 年前
武汉大学学生会  ·  窝在家里的暑假怎么过?
7 年前