深度学习基础—梯度问题与Mini-batch 梯度下降

1.梯度爆炸/梯度消失


1.1.概念

        梯度爆炸/梯度消失:训练神经网络的过程中,由于网络层数过多以及激活函数选择原因,出现的导数很大或很小的现象,导致训练难度加大。

        举一个栗子:假如网络的每层每个权重值都>1,就是1.5,忽略偏置b,网络有100层,激活函数是线性激活函数即输出原值,那么1.5的100次方约为406,561,177,535,215,237,这就是指数爆炸带来的效果。如果权重值都<1,那么网络层数很多的话,输出就会趋于0,也就是梯度消失。

1.2.如何解决梯度爆炸/梯度消失

        解决方法就是权重初始化。在基础部分,我们已经讨论了如何进行权重初始化。深度学习基础—常见激活函数、如何快速理解网络维度、新手训练神经网络的技巧icon-default.png?t=N7T8http://t.csdnimg.cn/1zGGn

        现在对该公式进行一个改动:将权重设置为权重的方差=1/n(最合理的初始权重,也被称为Xavier初始化),n表示输入向量的特征维度,即上一层神经元的数量。对于不同的激活函数,选择不同的初始化方式。

        对于Relu函数:

        对于Tanh函数:

        randn函数会产生标准正态分布,即均值为0,方差为1,我们的目标是将权重的方差变为1/n,因此需要乘sqrt(1/n)。乘sqrt(1/n)而不是乘1/n的原因是,方差运算法则:D(c*x)=c2*D(x)。

        我们还可以添加方差超参数,即给sqrt(1/n)的根号下乘以一个乘子,让这个超参数作为调优参数,但是有时候这个参数效果一般,因此考虑它的优先级较低。

1.3.梯度检验

        我们使用双边误差进行梯度检验。单边误差公式如下:

        双边误差公式:

可以看出,双边误差公式精度更高(误差项阶数高,可以用泰勒展开来推导),因此使用双边误差来进行梯度检验。

        假设网络包含参数W[1]、b[1]、......、W[L]、b[L],将这些参数转化成向量,然后把向量连接成一个巨大的向量θ,反向传播时,把参数dW[1]、db[1]、......、dW[L]、db[L]转化成dθ,于是J(w,b)就转化成J(θ)。遍历每一个i对应的θ[i],做双边误差:

        验证:

        如果上式的值大于10^(-5),就需要寻找网络中可能出现问题的地方。如果小于10^(-5)就证明网络按照预期的正确运行。

        注意:

        1.不要在训练中使用梯度检验。

        2.如果算法的梯度检验失败,要检查所有项,检查每一项,并试着找出bug。Bug很有可能出现在出问题的θ[i]对应的层。

        3.在实施梯度检验时,如果使用正则化,请注意正则项,求梯度时需要把正则项的梯度一并求出来。

        4.梯度检验不要和dropout正则化一起使用。

        5.在随机初始化过程中,运行梯度检验,然后再训练网络,w和b会有一段时间远离0,如果随机初始化值比较小,反复训练网络之后,再重新运行梯度检验。即在训练网络前和训练网络后都使用一次梯度检验,验证网络是否正确运行。


2.Mini-batch 梯度下降

        与梯度下降法不同的是,Mini-batch 梯度下降法会将训练集分为多个子集,每个子集被称为Mini-batch 。在每个Mini-batch上使用梯度下降法,这比对所有训练集一起使用梯度下降法的训练速度更快。举个栗子:人的力气是有限的,梯度下降法就像人一口气猛冲把所有劲用光(400米运动),而Mini-batch 梯度下降法更像人进行慢跑,直到没劲。实际上大家会发现慢跑跑的距离远比猛冲跑的距离远。我们把力气比作训练集,把距离远近比作模型收敛程度,于是可以得出结论,Mini-batch 梯度下降法能加快网络的训练速度。

2.1.算法流程

        计算完循环后,这是对所有的训练集进行了一次迭代(1 epoch),因此后续还需要嵌套循环进行多次迭代,直到网络满足误差要求。

2.2.Mini-batch大小Mini-batch 梯度下降法的影响

        接下来看看不同的Mini-batch大小Mini-batch 梯度下降法会有什么变化(m为训练集的样本的个数):

Mini-batch大小

算法

缺点

适用场景

改进建议

1

随机梯度下降法(SGD)

失去向量化带来的加速

训练集大

减小学习率

1~m

Mini-batch 梯度下降

网络无法收敛,在收敛点附近摆动

训练集大

选择合适的大小:2^n次方

m

梯度下降法

单次迭代耗时长

训练集少

分批向量化

        实际中常用的Mini-batch大小有:64、128、256、512等。因为计算机是二进制运算,因此二进制的代码能加速代码的运行。

2.3.理解Mini-batch大小的影响

        上图紫线表示Mini-batch大小=1是的优化路径,可以看出来有很多噪声,这是因为过小的Mini-batch中每个样本集的偏离程度不同,所以更容易影响优化路线导致有时候网络的损失上下浮动,但是损失整体是逐渐减小的,并不会收敛到最小值,而是在最小值附近浮动。绿线表示合适的Mini-batch大小的优化路径,它的最终值也是在最小值附近浮动,但是比紫线更接近最小值。蓝线表示Mini-batch大小=m的优化路径,噪声更低,调整幅度也更大,最终可以收敛到最小值。


  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值