1. BatchNormalization
先借鉴一下别人的图(https://www.jianshu.com/p/94f7985a957d)
可以看到,由标准化的x得到第二层的输入h1的时候,经历了如下的步骤:
1、第一层的权重项w 和 输入x想成,得到s1
2、对s1进行0-1均值方差标准化,得到s2
3、设置两个参数γ 和 β ,计算γ * s2 + β 得到s3。注意,这里的γ 和 β是网络要学习的变量。
4、将s3经过激活函数激活之后得到h1
从图中可以看出,batch_normalization是对每个神经元的输出进行标准化处理,降低了batch内不同样本的差异性。也就是说同一个batch下的样本,对其同一维度下的回归值进行标准化处理。然后又允许batch内各个samples有各自的统计分布
这么做的原因:
实际上第4步可以看作是在原模型上加入的“新操作”,这个新操作很大可能会改变某层原来的输入。当然也可能不改变(γ =标准差, β=均值),不改变的时候就是“还原原来输入”。如此一来,既可以改变同时也可以保持原输入,那么模型的容纳能力(capacity)就提升了。
效果:
(1) 加速收敛速度
(2) 在一定程度上防止梯度爆炸
缺点:
(1) 依赖于batch size
(2) 只对批输入的数据有效。eg:训练集
(3) 对于处理序列化数据无效,因为序列数据间存在一定关系,另外要计算一个维度上的标准化不合理。
参考链接:
http://mini.eastday.com/mobile/190820125120647.html#
https://baijiahao.baidu.com/s?id=1612936475591914473&wfr=spider&for=pc
https://blog.csdn.net/leviopku/article/details/83109422
2. LayerNormalization
PDF:https://arxiv.org/pdf/1607.06450.pdf
是对任意一个样本的所有维度进行标准化处理。即一个样本, 不同维度
网友评论