PDF 物理页索引 340
文件中的第 341 页 · 印刷页码:324
如果学习速率太高,就会出现极不稳定的情况,模型中就可能出现NaN。在这种情况下,就要以较低的学习速率再试一次。
ReLU 单元消失
一旦ReLU单元的加权和低于0,ReLU单元就可能会停滞。它会输出对网络输出没有任何贡献的0激活,而梯度在反向传播算法期间将无法再从中流过。如果最终所有内容都低于0值,梯度就无法反向传播,由于梯度的来源被切断,ReLU的输入可能无法做出足够的改变来使加权和恢复到0以上。降低学习速率有助于防止ReLU单元消失。
10.2.3 标准化特征值
训练时,如果特征值在输入时就已经标准化(normalize),通常会对我们非常有用。如果范围大致相同,就有助于提高神经网络的转化速度。虽然范围实际值并不重要,但是我们通常推荐的大致范围是-1\~+1。正因为如此,标准化特征值有时叫作“归一化”。它是为了加快训练网络的收敛性,避免空值。
由于采集的各数据单位不一致,因而需对数据进行[-1,1]归一化处理,归一化的具体作用是归纳统一样本的统计分布性。归一化在0和1之间是统计的概率分布,归一化在-1和+1之间是统计的坐标分布。无论是为了建模还是为了计算,首先基本度量单位要统一,神经网络是以样本在事件中的统计概率来进行训练(概率计算)和预测的,归一化是统一在0和1之间的统计概率分布。
当所有样本的输入信号都为正值时,与第一隐含层神经元相连的权值只能同时增加或减小,从而导致学习速度很慢。为了避免出现这种情况,加快网络学习速度,可以对输入信号进行归一化,使得所有样本的输入信号的均值接近于0或与其均方差相比很小。
10.2.4 丢弃正则化
在训练深度网络时还有一个很有用的技巧,即正则化的另一种形式,叫作丢弃(Dropout),可用于神经网络。其工作原理是,在梯度下降法的每一步中随机丢弃一些网络单元。丢弃得越多,正则化效果就越强:
● 0.0= 无丢弃正则化。
●1.0=丢弃所有内容。模型学不到任何规律。
0.0和1.0之间的值更有用。
若一个都不丢弃,则模型便具备完整的复杂性;若在训练过程中的某个位置进行丢弃,则相当于在这个位置应用了某种有效的正则化。丢弃的目的也是用来减少过拟合。而和L1、L2正则化不同的是,丢弃是改变神经网络本身的结构。假设有一个神经网络,按照前面的方法,根据输入X,先正向更新神经网络,得到输出值,然后反向根据backpropagation算法来更新权重和偏向。而丢弃不同的是:
人工智能与大数据技术导论
324
PDF 物理页索引 341
文件中的第 342 页 · 印刷页码:325
(1)开始时随机删除掉隐藏层一半的神经元。
(2)然后,在删除后的剩下一半神经元中正向和反向更新权重和偏向。
(3)再恢复之前删除的神经元,重新随机删除一半的神经元,正向和反向更新w和b。
(4)重复上述过程。
最后,学习出来的神经网络中的每个神经元都是在只有一半神经元的基础上学习的,因为更新次数减半,学习的权重会偏大,所以当所有神经元被恢复后(上述步骤(2)),把得到的隐藏层的权重减半。
丢弃为什么可以减少过拟合?原因为:一般情况下,对于同一组训练数据,利用不同的神经网络训练之后,求其输出的平均值可以减少过拟合。Dropout就是利用这个原理,每次丢掉一半的隐藏层神经元,相当于在不同的神经网络上进行训练,这样就减少了神经元之间的依赖性,即每个神经元不能依赖于某几个其他的神经元(指层与层之间相连接的神经元),使神经网络更加能学习到与其他神经元之间的更加健壮的特征。Dropout不仅减少过拟合,还能提高准确率。
10.2.5 代码实例
本节通过将特征标准化并应用各种优化算法来提高神经网络的性能。我们首先来装载数据:
第10章 神经网络
325
PDF 物理页索引 342
文件中的第 343 页 · 印刷页码:326
创建训练集和验证集:
326
PDF 物理页索引 343
文件中的第 344 页 · 印刷页码:327
结果如图10-19\~图10-22所示。
接下来,我们将训练神经网络。定义特征列结构和输入函数:
327
第10章 神经网络
def construct\_feature\_columns(input\_ features):
PDF 物理页索引 344
文件中的第 345 页 · 印刷页码:328
定义神经网络模型:
工智能与大数据技术导论
328
PDF 物理页索引 345
文件中的第 346 页 · 印刷页码:329
第10章 神经网络
329
PDF 物理页索引 346
文件中的第 347 页 · 印刷页码:330
人工智能与大数据技术导论
330
PDF 物理页索引 347
文件中的第 348 页 · 印刷页码:331
开始训练:
结果如图10-23和图10-24所示。
第10章 神经网络
331
PDF 物理页索引 348
文件中的第 349 页 · 印刷页码:332
下面进行线性缩放,即将输入标准化,以使其位于(-1,1)范围内,这可能是一种良好的标准做法。这样一来,SGD在一个维度中采用很大步长(或者在另一个维度中采用很小步长)时不会受阻。这种做法与使用预调节器(Preconditioner)的想法是有联系的。其代码如下:
下面我们使用线性缩放将特征标准化,即将输入标准化到(-1.1)范围内。一般来说,当输入特征大致位于相同范围时,神经网络的训练效果最好。由于标准化会使用最小值和最大值,我们必须确保在整个数据集中一次性完成该操作。我们之所以可以这样做,是因为所有的数据都在一个DataFrame中。如果我们有多个数据集,那么最好从训练集中导出标准化参数,然后以相同的方式将其应用于测试集。其代码如下:
工智能与大数据技术导论
332
PDF 物理页索引 349
文件中的第 350 页 · 印刷页码:333
结果如图10-25、图10-26所示。
下面我们尝试其他优化器,使用AdaGrad和Adam优化器并对比其效果。AdaGrad的核心是灵活地修改模型中每个系数的学习率。该优化器对于凸优化问题非常有效,但不一定适合非凸优化问题的神经网络训练。通过指定AdagradOptimizer(而不是GradientDescentOptimizer)来使用AdaGrad。对于AdaGrad,可能需要使用较大的学习率。
对于非凸优化问题,Adam有时比AdaGrad更有效。要使用Adam,可调用tf.train.AdamOptimizer方法。此方法将几个可选超参数作为参数,但解决方案仅指定其中一个(learning\_rate)。在应用设置中,我们应该谨慎指定和调整可选超参数。
第10章 神经网络
333