batch-normalization

Google inception V2:batch normalization :通过减少internal covariate shift加速深度神经的训练

在对神经网络进行训练的过程中,当第layer层的权值参数发生变化时,第layer+1层的输入数据的分布也会发生变化,这使得训练神经网络的过程变得很复杂。此时,如果再使用饱和的非线性函数(saturate non-linearity)作为激活函数,会使训练变得非常困难。这种现象被称为internal covariate shift,it can be adressed by normalizing layer input。batch normalization方法对于每个mini-batch的训练数据进行normalization,使用batch normalization后,可以使用higher learning rate and be less careful about initialization。BN层也可以作为regularization,使用BN我们并不需要再使用dropout。

training 深度神经网络首先要有一个损失函数:无论是对于SGD、批梯度下降法、mini-batch梯度下降法,这个损失函数都是唯一的:

     

即在当前的模型参数下,对于整个训练数据集中的所有训练样本,计算损失函数值,再相加。

三种不同的训练方法所对应的损失函数形式相同,只是输入数据量不同或者说对于数据的划分不同,但在一个epoch中,都是使用了整个训练数据集中的样本。

training deep network的方法:随机梯度下降法(stochastic gradient descent)。梯度下降法有很如下三种形式:

(1)随机梯度下降法(SGD)(one example at a time):先对于训练集中的所有训练样本进行随机重排,然后每次取出一个训练样本(相当于从最开始的训练数据集中随机地选择出一个训练样本,记为第i个样本),计算出损失函数,然后用这个损失函数对模型中的所有参数求偏导,更新一次模型参数。

(2)mini-batch SGD:小批量梯度下降法,对于训练数据集中的样本进行随机重排后,每次从训练数据集中取出batch_size个训练样本组为一个batch的数据,计算batch的损失函数,得到batch个样本的损失函数(只有一个loss值,可以认为是batch size个样本的损失值的平均值),然后将loss值反向传播,最后得到一个loss值相对于网络模型参数的梯度(一个数值),对于网络中的每个模型参数:①会有一个梯度值,②对这个梯度值取1/batch_size:是一个mini-batch,再用这个值更新参数。

或者直接在对于batch size个样本求得一个损失函数数值之后,对loss值取1/m,然后BP.

实际上,即使使用mini-batch SGD,计算损失函数时,是将batch size个训练样本一起得到一个loss值,loss相当于是在batch上的平均损失,是一个标量,再用这个标量进行BP,因为反向传播算法所计算的梯度中有一项是输入,输入可以有很多种形式:一个样本的输入——SGD,batch size大小的个样本的输入——mini batchSGD,整个训练数据集大小的输入:batch SGD。但是各个不同的训练样本之间的梯度计算是相互独立的,只是一次性计算batch size 个样本,会提高计算效率。

(3)batch SGD:批量梯度下降法,先前向传播对所有训练样本计算出损失函数后,用整个训练数据集中的所有训练样本得到的梯度值,取平均,更新梯度。

using mini-batch SGD相比于SGD(using one example at a time)的优点:①用在一个batch size上的训练样本得到的损失值(batch size个损失值的平均值)可以理解为是在整个training set上loss平均值的近似,且batch size越大,两个平均损失值越接近;②使用mini-batch SGD会比SGD的并行性更好。(前者每个并行是batch size个样本,后者并行是一个样本)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值