神经网络模型无法正常工作时我们应该做什么(系列)——检查结果(Results)

欢迎访问我的个人博客:zengzeyu.com

前言


当你进入深度学习领域,准备好深度神经网络,开始进行训练时,遇到这样一个大部分新手都会遇到的问题:你的神经网络没法正常工作,而你不知道该如何去修正它。你去问你的老板或者导师,他们也不知道该如何处理,因为在深度神经网络面前,他们和你一样也是新手。那么现在该如何来处理呢?
幸运的是我来啦!我列出了几乎所有新手都会犯的错误,以及我自己和身边一些学生在同样情况下遇到过的问题:

  1. 没有对数据进行标准化处理(Normalize)
  2. 没有检查结果(Results)
  3. 没有对数据进行预处理(Preprocess)
  4. 没有使用正则化方法(Regularlization)
  5. Batch Size 取值过大
  6. 学习率(Learning Rate)设置有误
  7. 最后一层 Layer 使用了错误的激活函数(Activation Function)
  8. 网络结构中包含了有害的梯度(Bad Gradient)
  9. 初始化网络权重(Network Weights)有误
  10. 神经网络结构过深(Too Deep)
  11. 使用了错误数目的隐藏单元(Hidden Units)

检查结果(Results)


What?

现在你已经把你的网络训练了一段时间了,并且看到误差(error)在下降——成功!这是否就意味着你已经完成了吗?颁一个博士奖给你?不幸的是,即可可以肯定你的代码仍然有问题。这个问题可能存在于数据预处理,训练代码,或者甚至是预测(inference)阶段。因为误差的减小并不意味着你的网络一定在学习着有用的东西。

How?

在网络结构管道(pipeline)的每个阶段检查数据是非常重要的。通常的方法就是找到一些方法来将这些结果进行可视化输出。如果你的数据是图像,那么显示它就没那么麻烦。如果数据是其他较奇特形式,你必须找到一种方法来检查它,确保在预处理,训练和预测阶段相对于真实数据(ground truth)都正确。

Why?

与传统编程方式不同,机器学习系统大多数情况失败情况都不会有明显的标志。当我们进行传统方式的编程时,习惯于当出现问题时计算机会抛出错误,以便用它来进行debug。不幸的是,这种方式并不适用于机器学习方面的应用,相反,我们应该非常小心地用肉眼去检查每个过程,只有这样我们才能到底哪个阶段出了bug,以便回头去彻底校正代码。

And?

有许多方法来检查你的网络结构是否真的正常工作。其中一种就是找到报告的错误代表的确切含义。将应用与训练集(training set)网络输出结果进行可视化——你的网络输出结果与真实数据(ground truth)相比结果如何?可能你看到网络在训练过程中,误差从 1.0 下降到 0.01 ,但如果误差结果为 0.01 仍然是不可接受的,那么训练模型仍然是无法使用。如果结果在训练集上能正常工作,那么通过验证集来检查它——看看是否仍然适用于它之前没见过的数据。我的建议是,从一开始就将所有东西都可视化,不要在网络没法正常工作时才去想到可视化,确保在尝试不同的网络结构之前,已经完全掌握了整个网络结构流程,并顺便从头至尾检查。这是准确评估多种潜在不同网络结构的唯一方法。


参考文献:
1. My Neural Network isn’t working! What should I do?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值