来看看批量归一化的有关问题吧!记得进入公号菜单“机器学习”,复习之前的系列文章噢。
今天的内容是
【神经网络训练中的批量归一化】
场景描述
深度神经网络的训练中涉及诸多手调参数,如学习率,权重衰减系数,Dropout比例等,这些参数的选择会显著影响模型最终的训练效果。批量归一化(Batch Normalization, BN)方法从数据分布入手,有效减弱了这些复杂参数对网络训练产生的影响,在加速训练收敛的同时也提升了网络的泛化能力。
问题描述
-
BN基本动机与原理是什么?
-
BN的具体实现中怎样恢复前一层学习到的特征分布?
-
简述BN在卷积神经网络中如何使用?
背景知识:统计学习,深度学习
解答与分析
1. BN的基本动机与原理是什么?
神经网络训练过程的本质是学习数据分布,训练数据与测试数据的分布不同将大大降低网络的泛化能力,因此我们需要在训练开始前对所有输入数据进行归一化处理。
然而随着网络训练的进行,每个隐层的参数变化使得后一层的输入发生变化,从而每一批(batch)训练数据的分布也随之改变,致使网络在每次迭代中都需要拟合不同的数据分布,增大了训练的复杂度以及过拟合的风险。
Batch Normalization方法是针对每一批数据,在网络的每一层输入之前增加归一化处理(均值为0,标准差为1),将所有批数据强制在统一的数据分布下,即对该层的任意一个神经元(不妨假设为第k维) 采用如下公式:
2. BN的具体实现中怎样恢复前一层学习到的特征分布?
按照上式直接进行归一化会导致上层学习到的数据分布发生变化,以sigmoid激活函数为例,BN之后数据整体处于函数的非饱和区域,只包含线性变换,破坏了之前学习到的特征分布。为了恢复原始数据分布,具体实现中引入了变换重构以及可学习参数γ,β:
其中
分别为输入数据分布的方差和偏差,对于一般的网络,不采用BN操作时,这两个参数高度依赖前面网络的学习到的连接权重(对应复杂的非线性)。而在BN操作中提取出来后,γ,β变成了该层的学习参数,与之前网络层的参数无关,从而更加有利于优化的过程。
完整的Batch Normalization网络层的前向传导过程公式如下:
3. 简述BN在卷积神经网络中如何使用?
卷积神经网络中每一层操作后得到一系列特征图(feature maps),卷积层上的BN同样使用类似权值共享的策略,将每张特征图做为一个处理单元,即全连接网络中的单个神经元,进行归一化操作。
具体实现中,假设网络训练中每个batch包含b个样本,特征图个数为f,特征图的宽高分别为w, h,那么,每个特征图所对应的全部神经元个数为b * w * h,利用这些神经元我们可得到一组学习参数γ,β用于对该特征图进行BN操作。详细过程可参考问题2中的公式,其中m=b * w * h,为BN操作中的mini-batch。
下一题预告
【随机梯度下降法】
场景描述
深度学习得以在近几年迅速占领工业界和学术界的高地,重要原因之一是数据量的爆炸式增长。如下图所示,随着数据量的增长,传统机器学习算法的性能会进入平台期,而深度学习算法因其强大的表示能力,性能得以持续增长,甚至在一些任务上超越人类。因此有人戏称,“得数据者得天下”。
经典的优化方法,例如梯度下降法,每次迭代更新需要用到所有的训练数据,这给求解大数据、大规模的优化问题带来了挑战。掌握基于大量训练数据求解模型的方法,对于掌握机器学习,尤其是深度学习至关重要。
问题描述
针对训练数据量过大的问题,当前有哪些优化求解算法?