深度学习笔记(12) Batch归一化网络


1. Batch归一化

Batch归一化,由Sergey loffe和Christian Szegedy两位研究者创造
会使参数搜索问题变得很容易,使神经网络对超参数的选择更加稳定
超参数的范围会更加庞大,工作效果也很好,训练也更加容易,甚至是深层网络
当训练一个模型,比如logistic回归时,归一化输入特征可以加快学习过程

计算了平均值
从训练集中减去平均值

计算了方差
除以标准差(根号方差)

根据方差归一化数据集,数据集变成更圆,易于算法优化
所以,对logistic回归和神经网络的归一化输入特征值是有效的


2. 激活值归一化

在更深的模型,不仅输入了特征值x,而且这层有激活值a[1]
如果想训练这些参数,比如w[3],b[3]
更好的是归一化a[2] 的平均值和方差,以便使w[3],b[3]的训练更有效率

严格来说,真正归一化的不是a[2] ,而是z[2]
实践中,经常做的是归一化 z[2]

在神经网络中,已知一些中间值,假设隐藏单元值从z(1) 到z(m)
来源于隐藏层,即 z[l](i) 为隐藏层,i从1到m
所以已知这些值,要计算平均值:
在这里插入图片描述
方差:
在这里插入图片描述注意所有这些都是针对l层,但省略 [ll]

通常将ε作为分母,以防σ=0的情况
取每个z(i)值,使其规范化
在这里插入图片描述
现在已把这些z值标准化,化为含平均值0和标准单位方差
所以z的每一个分量都含有平均值0和方差1


3. 特殊情况不归一化

也许隐藏单元有了不同的分布会有意义
不想让隐藏单元总是含有平均值0和方差1

计算
在这里插入图片描述这里γ和β是模型的学习参数

所以使用梯度下降或一些其它类似梯度下降的算法
比如Momentum或者Nesterov,Adam,会更新γ和β
正如更新神经网络的权重一样

γ和β的作用是,可以随意设置 z~\widetilde{z}(i) 的平均值
事实上,如果 γ = (σ2+ε)\sqrt{(σ^2+ε)},β = μ
那么z~\widetilde{z}(i) = γznorm(i)+β,
z~\widetilde{z}(i)=z(i)


4. mini-batch上的Batch归一化

需要强调的是Batch归一化是发生在计算z和a之间的
常和训练集的mini-batch一起使用
用反向prop计算ddw[l]ddb[l] ,及所有l层所有的参数,ddβ[l]ddγ[l]
更新这些参数:w([l])=w([l])-αdw([l]),β([l])=β([l])-αdβ([l]), γ([l])=γ([l])-αdγ^([l])
在TensorFlow框架中
可以用这个函数 tf.nn.batch_normalization 来实现Batch归一化

在mini-batch上计算中,Batch归一化有轻微的正则化效果
因为部分数据集由均值和方差缩放给隐藏单元添加了噪音
这迫使后部单元不过分依赖任何一个隐藏单元
类似于dropout,它给隐藏层增加了噪音
因此有轻微的正则化效果

选择l层,假设有mini-batch,X[1],X[2],X[3]……以及对应的y值等等
那么在为ll层训练X{1}) 时,得到了第一个mini-batch和这一层的 μ( μ[l] → μ{1}[l]
当训练第二个mini-batch,就会得到第二个μ(μ{2}[l])
之前用的指数加权平均来计算θ1,θ2,θ3的均值
当时是试着计算当前气温的指数加权平均
这样来追踪均值向量的最新平均值
于是这个指数加权平均就成了对这一隐藏层的z均值的估值

同样的,可以用指数加权平均来追踪在这一层的第一个mini-batch中所见的 σ2 的值
以及第二个mini-batch中所见的 σ2 的值等等

因此在用不同的mini-batch训练神经网络的同时
能够得到每一层的μ和σ2的平均数的实时数值

最后在测试时,对应这个等式:
在这里插入图片描述

只需要用z值来计算 znorm(i) ,用 μ 和σ2的指数加权平均
用最新数值来做调整
然后用刚算出来的znorm和在神经网络训练过程中得到的 β 和 γ 参数来计算测试样本 z~\widetilde{z}(i)


参考:

《神经网络和深度学习》视频课程


相关推荐:

深度学习笔记(11)超参数调试
深度学习笔记(10)优化算法(二)
深度学习笔记(9) 优化算法(一)
深度学习笔记(8) 实践层面(三)
深度学习笔记(7) 实践层面(二)


谢谢!

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: Age of Ai 设计师: meimeiellie
应支付0元
点击重新获取
扫码支付

支付成功即可阅读