[DeeplearningAI笔记]第二章3.4-3.7-Batch NormalizationBN算法

[DeeplearningAI笔记]第二章3.4-3.7-Batch NormalizationBN算法

觉得有用的话,欢迎一起讨论相互学习~

我的微博我的github我的B站

3.4正则化网络的激活函数

  • Batch归一化会使你的参数搜索问题变得很容易,使神经网络对超参数的选择更加稳定.超参数的范围会更庞大,工作效果也更好.也会使你更容易的训练甚至是深层网络.
  • 对于logistic回归来说

正则化原理

u = 1 m ∑ x i ( 求 出 平 均 值 u ) u=\frac{1}{m}\sum x^{i}(求出平均值u) u=m1xi(u)
x = x − u x=x-u x=xu
σ 2 = 1 m ∑ ( x i ) 2 ( 求 出 方 差 ) \sigma^{2}=\frac{1}{m}\sum(x^{i})^{2}(求出方差) σ2=m1(xi)2()
x = x σ 2 x=\frac{x}{\sigma^{2}} x=σ2x

  • 函数曲线会由类似于椭圆变成更圆的东西,更加易于算法优化.

  • 深层神经网络

  • 我们将每一层神经网络计算得到的z值(在计算激活函数之前的值)进行归一化处理,即将 Z [ L ] Z^{[L]} Z[L]的值进行归一化处理,进而影响下一层 W [ L + 1 ] 和 b [ L + 1 ] W^{[L+1]}和b^{[L+1]} W[L+1]b[L+1]的计算.

  • 此时z的每个分量都含有平均值0和方差1,但我们不想让隐藏单元总是含有平均值0和方差1,例如在应用sigmoid函数时,我们不想使其绘制的函数图像如图所示,我们想要变换方差或者是不同的平均值.

第L层神经元正则化公式

u = 1 m ∑ i Z i u=\frac{1}{m}\sum_{i}Z^{i} u=m1iZi
σ 2 = 1 m ∑ i ( Z i − u ) 2 \sigma^{2}=\frac{1}{m}\sum_{i}(Z^{i}-u)^{2} σ2=m1i(Ziu)2 Z n o r m i = Z i − u σ 2 + ϵ Z^{i}_{norm}=\frac{Z^{i}-u}{\sqrt{\sigma^2+\epsilon}} Znormi=σ2+ϵ Ziu
Z i ˇ = γ Z n o r m i + β \check{Z^{i}}=\gamma Z^{i}_{norm}+\beta Ziˇ=γZnormi+β

3.5 将Batch Normalization拟合进神经网络

  • 对于Batch Normalization算法而言,计算出一层的 Z [ l ] Z^{[l]} Z[l]之后,进行Batch Normalization操作,此过程将有 β [ l ] , γ [ l ] \beta^{[l]},\gamma^{[l]} β[l],γ[l]这两个参数控制.这一步操作会给你一个新的规范化的 z [ l ] z^{[l]} z[l]值.然后将其输入到激活函数中,得到 a [ l ] a^{[l]} a[l]

  • 实质上,BN算法是在每一层的 Z [ l ] Z^{[l]} Z[l] a [ l ] a^{[l]} a[l]之间进行的运算

3.6 Batch Normalization为什么奏效

原因一

  • 无论数据的范围是01之间还是11000之间,通过归一化,所有的输入特征X,都可以获得类似范围的值,可加速学习.

原因二

  • 如果神经元的数据分布改变,我们也许需要重新训练数据以拟合新的数据分布.这会带来一种数据的不稳定的效果.(covariate shift)
  • Batch Normalization做的是它减少了这些隐藏值分布变化的数量.因为随着训练的迭代过程,神经元的值会时常发生变化.batch归一化可以确保,无论其怎样变化,其均值和方差将保持不变.(由每一层的BN函数的参数 β [ l ] , γ [ l ] \beta^{[l]},\gamma^{[l]} β[l],γ[l]决定其方差和均值)
  • Batch Normalization减少了输入值改变的问题,它的确使这些值变的稳定,即是原先的层改变了,也会使后面的层适应改变的程度减小.也可以视为它减少了前层参数和后层参数之间的联系.

原因三

  • Batch Normalization有轻微的正则化作用.
    • BN算法是通过mini-batch计算得出,而不是使用整个数据集,所以会引入部分的噪音,即会在纵轴上有些许波动.
    • 缩放的过程从 Z [ l ] → Z [ l ] ˇ Z^{[l]}\rightarrow\check{Z^{[l]}} Z[l]Z[l]ˇ也会引入一些噪音.
    • 所以和Dropout算法一样,它往每个隐藏层的激活值上增加了噪音,dropout有噪音的模式,它使一个隐藏的单元以一定的概率乘以0,以一定得概率乘以1.BN算法的噪音主要体现在标准偏差的缩放和减去均值带来的额外噪音.这使得后面层的神经单元不会过分依赖任何一个隐藏单元.有轻微的正则化作用.如果你想获得更好的正则化效果,可以在使用Batch-Normalization的同时使用Dropout算法.

3.7测试时的Batch Normalization

  • Batch-Normalization将你的数据以mini-batch的形式逐一处理,但在测试时,你可能需要对每一个样本逐一处理.我们应该怎么做呢~

Batch-Normalization公式

  • 注意 对于u和 σ \sigma σ是在整个mini-batch上进行计算,但是在测试时,你不会使用一个mini-batch中的所有数据(因为测试时,我们仅仅需要少量数据来验证神经网络训练的正确性即可.)况且如果我们只使用一个数据,那一个样本的均值和方差没有意义,因此我们需要用其他的方式来得到u和 σ \sigma σ这两个参数.
  • 运用覆盖所有mini-batch的指数加权平均数来估算u和 σ \sigma σ

利用指数加权平均来估算 u 和 σ u和\sigma uσ对数据进行测试

对于第L层神经元层,标记mini-batch为 x [ 1 ] , x [ 2 ] , x [ 3 ] , x [ 4 ] . . . x [ n ] x^{[1]},x^{[2]},x^{[3]},x^{[4]}...x^{[n]} x[1],x[2],x[3],x[4]...x[n]在训练这个隐藏层的第一个mini-batch得到 u [ 1 ] [ l ] u^{[1][l]} u[1][l],训练第二个mini-batch得到 u [ 2 ] [ l ] u^{[2][l]} u[2][l],训练第三个mini-batch得到 u [ 3 ] [ l ] u^{[3][l]} u[3][l]…训练第n个mini-batch得到 u [ n ] [ l ] u^{[n][l]} u[n][l].然后利用指数加权平均法估算 u u u的值,同理,以这种方式利用指数加权平均的方法估算 σ 2 \sigma^{2} σ2.

总结

在训练时,u和 σ 2 \sigma^{2} σ2在整个mini-batch上计算出来的,但是在测试时,我们需要单一估算样本,方法是根据你的训练集估算u和 σ 2 \sigma^{2} σ2.常见的方法有利用指数加权平均进行估算.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值