我对人工神经网络(ANN)还比较新手,刚刚阅读了批量归一化论文(http://arxiv.org/pdf/1502.03167.pdf),但我不确定自己是否完全理解了他们在做什么(更重要的是,为什么它有效)
假设我有两层L1和L2,其中L1产生输出并将其发送到L2中的神经元。批量归一化只是获取L1的所有输出(即每个神经元的所有输出,得到一个完全连接网络的|L1| X |L2|
个数的总向量),将它们归一化为均值为0和标准差为1,然后将它们馈送到L2中各自对应的神经元(再加上论文中讨论的gamma和beta的线性变换)?
如果确实如此,这对神经网络有什么帮助?恒定分布有什么特别之处?
回答:
在网络的标准SGD训练过程中,由于前一隐藏层也在不断变化,隐藏层的输入分布也会发生变化。这被称为协变量偏移,可能是一个问题;例如,请参见这里。
已知如果训练数据被“白化”,即以某种方式转换,使每个组件具有高斯分布且彼此独立,神经网络的收敛速度会更快。参见论文中引用的(LeCun等人,1998b)和(Wiesler & Ney,2011)这两篇论文。
作者的想法是,不仅对输入层应用这种白化处理,还对每个中间层的输入进行白化处理。直接对整个输入数据集进行这种处理成本太高,因此他们采用批量处理的方式。他们声称这可以大大加速训练过程,同时也起到一种正则化的作用。