batchnorm(Batch Normalization)
https://lulaoshi.info/machine-learning/convolutional/batch-normalization
我们知道在神经网络训练开始前,都要对输入数据做一个归一化处理,那么具体为什么需要归一化呢?
归一化后有什么好处呢?原因在于神经网络学习过程本质就是为了学习数据分布,一旦训练数据与测试数据的分布不同,那么网络的泛化能力也大大降低;
另外一方面,一旦每批训练数据的分布各不相同(batch 梯度下降),那么网络的就要在每次迭代都去学习适应不同的分布,这样将会大大降低网络的训练速度,这也正是为什么我们需要对数据都要做一个归一化预处理的原因。
IID独立同分布假设:机器学习领域有个很重要的假设:IID独立同分布假设,就是假设训练数据和测试数据是满足相同分布的,
这是通过训练数据获得的模型能够在测试集获得好的效果的一个基本保障。
Batch Normalization:BatchNorm就是在深度神经网络训练过程中使得每一层神经网络的输入保持相同分布的。
在原论文中作者认为bn层放在激活函数之前,但是后续有人发现放在激活函数之后效果更好。
问题:
局限 1:如果 Batch Size 太小,则 BN 效果明显下降。
局限 2:对于有些像素级图片生成任务来说,BN 效果不佳;
对于图片分类等任务,只要能够找出关键特征,就能正确分类,这算是一种粗粒度的任务,在这种情形下通常 BN 是有积极效果的。但是对于有些输入输出都是图片的像素级别图片生成任务,比如图片风格转换等应用场景,使用 BN 会带来负面效果,这很可能是因为在 Mini-Batch 内多张无关的图片之间计算统计量,弱化了单张图片本身特有的一些细节信息。
https://blog.csdn.net/u014106566/article/details/96436577?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-5.pc_relevant_default&spm=1001.2101.3001.4242.4&utm_relevant_index=8