1、Batch Normalization
“Internal Covariate Shift”,ML系统实例集合<X,Y>中每层输入值X的分布总是在变化。
BN的提出就是为了让让每个隐层节点的激活输入分布固定下来。
图像的shape分为[b,c,h,w],其中b是batch size,c为通道,h高,w宽。
batch normalization就是将数据拉回到均值为0,方差为1的正太分布上,不仅数据分布一致,而且避免发生梯度消失。
计算方法:
step1:按照每个通道,计算这一batch的均值u、方差σ^2
step2:对x进行归一化,x’=(x-u)/开根号(σ^2+ε)
step3:入缩放和平移变量γ和β ,归一化后的值,y=γx’+β
缩放和平移为了保证数据还保有原来的特征。
BN的缺点:
如果batch取得太小,均值方差不能很好的代表数据的分布,而且计算的是一批数据,对于图片的细节可能或有缺失。
对于BN原理详细讲解可以参考这篇:深入理解Batch normalization 的作用 - 想总结却停留不前? - 博客园
2、Instance Normalization
Instance Normalization(实例正则化)一般用于风格迁移任务的归一化,因为在这类任务注重图像每个像素点,bn会导致图片中风格细节丢失,IN是一种适合对单个像素有更高要求的场景的归一化算法。
IN每次对一批数据中的单个图片的H、W进行正则化。
一般正则化放在激活函数之后,目前就用到这两种正则化方式,以后遇到再补充。