Lesson2--Batch正则化和程序框架

1 Batch Norm, BN

1)介绍Batch normalization

在logistic回归中,我们已经知道将输入归一化有助于加速训练, 那么在神经网络中,我们不只需要将输入归一化,对隐藏层中activations同样需要归一化处理。一般,我们是对 Z [ l ] Z^{[l]} Z[l]进行归一化。
Batch Norm的步骤:
对每一层的激活单元 z [ l ] ( i ) z^{[l](i)} z[l](i),在后面的书写中省略上标[l],先减去均值再除以标准偏差,为了使数值稳定,通常在分母加上 ϵ \epsilon ϵ以防止分母为0.因此有
这里写图片描述
现在,为了赋予各隐藏单元不同的分布,我们将计算
这里写图片描述
这里 γ \gamma γ β \beta β是你模型的学习参数,可以使用梯度下降或者梯度下降的优化算法求出来。我们计算可以得到当 γ = δ 2 + ϵ , β = μ \gamma=\sqrt{\delta^2+\epsilon},\beta=\mu γ=δ2+ϵ ,β=μ时其实是还原了z的分布。
那么赋予影藏单元不同的分布的意义在于什么呢?
在3部分给出答案

2)在神经网络中使用Batch Norm

这里写图片描述
先将Batch Norm加入到神经网络架构中,对每一层神经网络中 γ [ l ] \gamma^{[l]} γ[l] β [ l ] \beta^{[l]} β[l]的训练使用梯度下降法或者是其优化算法。
γ [ l ] \gamma^{[l]} γ[l] β [ l ] \beta^{[l]} β[l]都是( n [ l ] n^{[l]} n[l],1)维的向量,也就是对不同维度的z均有一个均值和方差。
注意:要区分优化算法中的参数 β \beta β和均值 β [ l ] \beta^{[l]} β[l],这是两个完全不一样的参数。
实际上,在mini-batch中不使用Batch Norm的时候,计算z的公式是 z [ l ] = w [ l ] a [ l − 1 ] + b [ l ] z^{[l]}=w^{[l]}a^{[l-1]}+b^{[l]} z[l]=w[l]a[l1]+b[l],在做Batch Norm之后,因为要先将 z [ l ] z^{[l]} z[l]归一化,因此无论 b [ l ] b^{[l]} b[l]的值是多少,都是要被减去的,所以在训练中,我们可以不考虑 b [ l ] b^{[l]} b[l]的值。
具体的。对每个mini-batch实施batch Norm的步骤是:
这里写图片描述

3)为什么Batch Norm是有效?

  1. 归一化输入,使得它们在同样的范围中可以加快训练速度;
  2. 使得后层中的权重可以适应前面权重的变化。
    当前层的参数发生变化的时候,对后层来说,输入无时无刻不在变化,因此就会出现covariate shift的问题。这时Batch正则化的作用限制了在前层的参数更新对数值分布的影响,就是无论前层输入z如何变化,z的均值和方差不会变化。(全局理解)
  3. regularization
    每个nimi-batch集的归一化是对这一个mini-batch所做的,因此归一化之后的值 z [ l ] z^{[l]} z[l]在每一层上存在一些噪声,这些噪声和dropout带来的影响一样可以实现正则化。
    另外的理解:
    解决了反向传播过程中的梯度问题,如果不进行Batch norm,梯度可能会出梯度消失或者梯度爆炸。

4) 测试时的Batch Norm

归一化时使用的均值和方差怎么做?
使用指数加权平均来计算每个mini-batch的均值和方差,然后使用最后的均值来对测试样本做归一化。
这里写图片描述

2 多类分类Softmax

C表示多分类的种类
使用softmax layer可以训练出多分类模型。
Activation function:
t = e [ z l ] t=e^{[z^l]} t=e[zl] 先求出最后一层的z向量,通过z向量得到临时变量t
a l = t i ∑ i = 1 c t i a^l=\frac{t_i}{\sum_{i=1}^{c}t_i} al=i=1ctiti 通过将t归一化得到输出 y ^ \hat y y^,输出就是属于各类的概率。
我们可以将最后一层理解为一个softmax激活函数的输出: y ^ = g l ( z l ) \hat y=g^l(z^l) y^=gl(zl),与之前的激活函数不同的是,它的输入 z l z^l zl是一个向量,输出也是一个向量,而之前的激活函数,比如说Relu,输入是一个值z输出一个值a。
对于一个没有隐藏层的神经网络,使用softmax分类可以将输入线性映射到不同的类别中:
这里写图片描述
注意到它们的分类边界都是线性的。当输出只有两个类时,其实就是logistic回归。因此softmax是将logistics回归扩展到多分类。
什么是hardmax,就是不输出概率,而是直接输出所属类别向量,比如对于 z l = [ 5 , 2 , − 1 , 3 ] z^l=[5,2,-1,3] zl=[5,2,1,3],直接输出 [ 1 , 0 , 0 , 0 ] [1,0,0,0] [1,0,0,0].
损失函数如何定义?对于单个输出 L ( y , y ^ ) = − ∑ i = 1 C y i log ⁡ y ^ i L(y,\hat y)=-\sum_{i=1}^C y_i\log \hat y_i L(y,y^)=i=1Cyilogy^i,对于整体的样本集就是 J = 1 m ∑ i = 1 m L ( y i , y ^ i ) J=\frac{1}{m}\sum_{i=1}^mL(y^i, \hat y^i) J=m1i=1mL(yi,y^i).
含有softmax layer的梯度下降:
注意 d z l = y ^ − y \rm d z^l=\hat y-y dzl=y^y
使用编程框架,给定正向传播公式,它就可以自动计算出反向传播公式。

3 深度学习框架

这里写图片描述
Tensorflow的典型范例:
这里写图片描述
先给定损失函数的系数,定义变量w和系数x,定义损失函数
然后给出模型的训练方法(梯度下降或者优化的梯度下降),目标(最小化损失函数)
后面几步是TensorFlow中常用的规则性语句
最后输入迭代次数进行多次梯度下降求变量w的拟合成果。

总结

这周学习完成之后,你应该可以回答以下几个问题:
1.Batch Norm是在干什么,它的原理及好处?
2.多类分类时的softmax是如何进行的?
3.学会基本的tensorflow使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值