转载请注明出处。谢谢。
本博文根据 coursera 吴恩达 Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization整理。作为深度学习网络优化的记录,将三章内容均以要点的形式记录,并结合实例说明。
序号接前。
Q10. Batch Normalization
1. 在实际应用中,除了将输入归一化之外,还可将特征归一化。将隐藏层经过激活函数前的 进行归一化,叫做 Batch Normalization.
以某一层为例:, batch normalization 的做法是:
此时, 的分量是平均值为 0 和 方差为 1 的分布。但我们希望有 z 不同的分布,因而加上 γ 和 β,它们是可学习的参数,通过它们确定该层的 z。
2. 分析:
1). 在神经网络中,存在 Internal Covariate Shift (ICS.) 问题。这个问题是指,在神经网络中的各层输出,由于它们经过了层内操作,其分布与各层对应的输入信号不同,而且该差异会随着深度的增加不断增加。
这个问题在神经网络传播中会导致每一层网络需要适应不同的输出,因而会降低学习速率; 下层的变化趋于变大或变小会导致上层落入饱和区域,使训练过早停止; 由于层与层之间互相影响,每一层参数更新策略需要格外谨慎。
2). 具体操作:第一步变换,通过平移和伸缩,将输入的 z 规范化。 其中 是平移参数, 是缩放参数; 第二步变换,再平移和再缩放,充分利用底层神经元的学习能力,恢复其非线性表达,保证获得非线性表达能力, 是平移参数, 是旋转参数。
3). 拓展来看,除了batch normalization 可以规范化以外,还有几种 normalization 的方法。(详见 https://blog.csdn.net/c9Yv2cf9I06K2A9E/article/details/79283702 )。
分别可以处理纵向、横向、横纵向维度的特征:
3. 在神经网络中的具体应用:
参数:
由于进行了正则化,b 的作用消失,因而省去参数 b
4. 作用
batch normalization 一方面限制了前一层的参数更新对后面数值的影响,使得输入后层的数值更加稳定;另一方面,削弱了层与层之间的联系; 另一方面,它也具有轻微正则化的效果,在每个隐藏层会给均值、偏差带来一些噪声,使用较大mini-batch size 正则化作用强于 小的 mini-batch size.
在测试时,由于无法计算均值和方差,通常训练中,使用加权平均。当训练结束时,得到加权平均后的均值和方差,使用其进行预测。
小结:
包括本文,一共三篇,描述了主流的调参方法。最后对参数调整方法做一个描述,如何更快更好的找到合理的超参数。
1. 在超参数比较少的情况下,会利用设置网格点的方式来调试超参数; 但在超参数较多的情况下,更常用的方法是随机选择点进行调试。因为我们不知道哪个超参数是最重要的,所以随机的方式去测试超参数点的性能,更为合理。
2. 搜索范围:
如果是线性范围,直接利用等比例搜索,但更多情况会出现在不均匀的刻度底下,例如在0.0001到1之间搜索,那使用等距离就不合适了,这个时候可以考虑利用对数的尺度进行搜索。
3. 最后是调参模式:
在计算资源有限的情况下,一般会使用第一种,调试一个模型,每天不断优化;在计算资源充足的情况下,可考虑第二种类型,同时并行调试多个模型,选取其中最好的模型。