欢迎访问我的个人博客:zengzeyu.com
前言
当你进入深度学习领域,准备好深度神经网络,开始进行训练时,遇到这样一个大部分新手都会遇到的问题:你的神经网络没法正常工作,而你不知道该如何去修正它。你去问你的老板或者导师,他们也不知道该如何处理,因为在深度神经网络面前,他们和你一样也是新手。那么现在该如何来处理呢?
幸运的是我来啦!我列出了几乎所有新手都会犯的错误,以及我自己和身边一些学生在同样情况下遇到过的问题:
- 没有对数据进行标准化处理(Normalize)
- 没有检查结果(Results)
- 没有对数据进行预处理(Preprocess)
- 没有使用正则化方法(Regularlization)
- Batch Size 取值过大
- 学习率(Learning Rate)设置有误
- 最后一层 Layer 使用了错误的激活函数(Activation Function)
- 网络结构中包含了有害的梯度(Bad Gradient)
- 初始化网络权重(Network Weights)有误
- 神经网络结构过深(Too Deep)
使用了错误数目的隐藏单元(Hidden Units)
初始化网络权重(Initialized Network Weights)
What?
如果你没有正确的初始化你的神经网络权重,那么你的神经网络很有可能根本没法进行训练。神经网络中的其他数据元素都采用某种形式的正确或标准化的权重初始化操作,并将权重初始化为0,或者你自定义权重初始化随机进行权重初始化,这些方法都可能不起作用。
How?
权重初始化方法中,‘he’、‘lecun’和‘xavier’是比较流行的方法,它们几乎在任何情况下都可很好的工作。只要选择其中一个(我最喜欢的是‘lecun’),但也可以试验来选择最优的权值初始化方式。
Why?
你可能听说过使用“较小的随机数”来初始化神经网络的权重,但事情却并没有那么简单。所有上述的初始化操作都是慢慢的通过复杂且详细的数学方法推导出来的,而这些数学方法能正确的解释为什么这样做是最优的。更重要的是,神经网络结构的其他部分已经依据这些初始值来进行计算,并且经过经验来进行检验过,如果使用你自己的初始化方法会使重现其他研究人员的结果变得愈发困难。
And?
神经网络的其他层同样需要仔细的进行初始化。网络偏置(bias)初始化为0,而其他的更复杂的层(例如参数激活函数)需要使用他们自己的初始化方法,这样做的原因是他们都同等重要。