深度学习11(调参设参+批标准化)
调参技巧
对于调参,通常采用跟机器学习中介绍的网格搜索一致,让所有参数的可能组合在一起,得到N组结果。然后去测试每一组的效果去选择。
假设我们现在有两个参数
α:0.1, 0.01, 0.001
β:0.8, 0.88. 0.9
这样会有9种组合,而合理的参数设置为:
学习率a:0.0001、0.001、0.01、0.1,跨度稍微大一些。
算法参数8,0.999、0.9995、0.998等,尽可能的选择接近于1的值。
注:而指数移动平均值参数:B从0.9增加到0.9005对结果几乎没有影响,而B从0.999 到 0.9995 对结果的影响会较大,因为是指数级增加。
通常我们有这么多参数组合,每一个组合运行训练都需要很长时间,但是如果资源允许的话,可以同时并行训练多个参数模型,并观察效果。如果资源不允许的话,还是得一个模型一个模型的运行,并时刻观察损失的变化。所以对于这么多的超参数,调优是一件复杂的事情,怎么让这么多的超参数范围,工作效果还能达到更好训练变得更容易呢?
就是接下来的批标准化
批标准化(Batch Normalization)
批标准化提出的背景:
调参过程麻烦,训练过程太长。
训练深度神经网络很复杂,因为在训练期间每层输入的分布发生变化,因为前一层的参数发生了变化。这通过要求较低的学习率和仔细的参数初始化来减慢训练速度,并且使得训练具有饱和非线性的模型变得非常困难。
批标准化过程:
一般被插入在激活函数之前,插入之后为:线性变换 → BN 层 → 激活函数。
批标准化公式:
其中ε是为了防止分母为0,取值10-8。这样使得所有的1层输入z为0,方差为1。但是一般不想让隐藏层单元总是含有平均值0和方差 1,认为也许隐藏层单元有了不同的分布会更有意义。
其中,γ和β都是模型的学习参数(如同W和b一样),所以可以用各种梯度下降算法来更新y和B的值,如同更新神经网络的权重一样。如果各隐藏层的输入均值在靠近0的区域,即处于激活函数的线性区域,不利于训练非线性神经网络,从而得到效果较差的模型。因此,需要用y和 B对标准化后的结果做进一步处理,
为什么批标准化能使训练更简单:
深层神经网络在训练时,每一层的输入分布会随着前一层参数更新而不断变化(即“内部协变量偏移”)。这迫使后续层需要不断适应新的数据分布,导致训练变慢。
Batch Normalization的作用就是减小内部协变量偏移(Internal Covariate Shift) 所带来的影响让模型变得更加健壮,鲁棒性(Robustness)更强。即使输入的值改变了,由于 Batch Normalization 的作用,使得均值和方差保持固定(由每一层~和B决定),限制了在前层的参数更新对数值分布的影响程度,因此后层的学习变得更容易一些。Batch Normalization 减少了各层W和b之间的耦合性,让各层更加独立,实现自我训练学习的效果。