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[l−1]+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是有效?
- 归一化输入,使得它们在同样的范围中可以加快训练速度;
- 使得后层中的权重可以适应前面权重的变化。
当前层的参数发生变化的时候,对后层来说,输入无时无刻不在变化,因此就会出现covariate shift的问题。这时Batch正则化的作用限制了在前层的参数更新对数值分布的影响,就是无论前层输入z如何变化,z的均值和方差不会变化。(全局理解) - 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[zl]t=e^{[z^l]}t=e[zl] 先求出最后一层的z向量,通过z向量得到临时变量t
al=ti∑i=1ctia^l=\frac{t_i}{\sum_{i=1}^{c}t_i}al=∑i=1ctiti 通过将t归一化得到输出y^\hat yy^,输出就是属于各类的概率。
我们可以将最后一层理解为一个softmax激活函数的输出:y^=gl(zl)\hat y=g^l(z^l)y^=gl(zl),与之前的激活函数不同的是,它的输入zlz^lzl是一个向量,输出也是一个向量,而之前的激活函数,比如说Relu,输入是一个值z输出一个值a。
对于一个没有隐藏层的神经网络,使用softmax分类可以将输入线性映射到不同的类别中:
注意到它们的分类边界都是线性的。当输出只有两个类时,其实就是logistic回归。因此softmax是将logistics回归扩展到多分类。
什么是hardmax,就是不输出概率,而是直接输出所属类别向量,比如对于zl=[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=1Cyilogy^iL(y,\hat y)=-\sum_{i=1}^C y_i\log \hat y_iL(y,y^)=−∑i=1Cyilogy^i,对于整体的样本集就是J=1m∑i=1mL(yi,y^i)J=\frac{1}{m}\sum_{i=1}^mL(y^i, \hat y^i)J=m1∑i=1mL(yi,y^i).
含有softmax layer的梯度下降:
注意 dzl=y^−y\rm d z^l=\hat y-ydzl=y^−y
使用编程框架,给定正向传播公式,它就可以自动计算出反向传播公式。
3 深度学习框架
Tensorflow的典型范例:
先给定损失函数的系数,定义变量w和系数x,定义损失函数
然后给出模型的训练方法(梯度下降或者优化的梯度下降),目标(最小化损失函数)
后面几步是TensorFlow中常用的规则性语句
最后输入迭代次数进行多次梯度下降求变量w的拟合成果。
总结
这周学习完成之后,你应该可以回答以下几个问题:
1.Batch Norm是在干什么,它的原理及好处?
2.多类分类时的softmax是如何进行的?
3.学会基本的tensorflow使用。