作者丨苏剑林
单位丨追一科技
研究方向丨NLP,神经网络
个人主页丨kexue.fm
BN,也就是 Batch Normalization [1],是当前深度学习模型(尤其是视觉相关模型)的一个相当重要的技巧,它能加速训练,甚至有一定的抗过拟合作用,还允许我们用更大的学习率,总的来说颇多好处(前提是你跑得起较大的 batch size)。
那BN究竟是怎么起作用呢?早期的解释主要是基于概率分布的,大概意思是将每一层的输入分布都归一化到 N (0, 1) 上,减少了所谓的 Internal Covariate Shift,从而稳定乃至加速了训练。这种解释看上去没什么毛病,但细思之下其实有问题的:不管哪一层的输入都不可能严格满足正态分布,从而单纯地将均值方差标准化无法实现标准分布 N (0, 1) ;其次,就算能做到 N (0, 1) ,这种诠释也无法进一步解释其他归一化手段(如 Instance Normalization、Layer Normalization)起作用的原因。
在去年的论文 How Does Batch Normalization Help Optimization? [2] 里边,作者明确地提出了上述质疑,否定了原来的一些观点,并提出了自己关于 BN 的新理解:他们认为 BN 主要作用是使得整个损失函数的 landscape 更为平滑,从而使得我们可以更平稳地进行训练。
本文主要也是分享这篇论文的结论,但论述方法是笔者“闭门造车”地构思的。窃认为原论文的论述过于晦涩了,尤其是数学部分太不好理解,所以本文试图尽可能直观地表达同样观点。
阅读本文之前,请确保你已经清楚知道 BN 是什么,本文不再重复介绍 BN 的概念和流程。
一些基础结论
在这部分内容中我们先给出一个核心的不等式,继而推导梯度下降,并得到一些关于模型训练的基本结论,为后面 BN 的分析铺垫。
核心不等式
假设函数 f(θ) 的梯度满足 Lipschitz 约束( L 约束),即存在常数 L 使得下述恒成立:
那么我们有如下不等式:
证明并不难,定义辅助函数 f(θ+tΔθ), t∈[0,1],然后直接得到:
梯度下降
假设 f(θ) 是损失函数,而我们的目标是最小化 f(θ),那么这个不等式告诉我们很多信息。首先,既然是最小化,自然是希望每一步都在下降,即 f(θ+Δθ)<f(θ),而必然是非负的,所以要想下降的唯一选择就是,这样一个自然的选择就是: