基于机器学习batch归一化克服深层神经网络导致难以训练的问题

covariate shift问题

机器学习中有一个经典的假设:训练数据和测试数据是满足相同分布的。这是训练数据获得的模型能够在测试集上获得好的效果的一个基本保障。

当训练集数据和测试集数据不一致的时候,训练集训练出来的模型未必能够在测试集上有好的效果,这种训练集和预测集样本分布不一致的情况就叫做covariate shift现象。

在这里插入图片描述

深度神经网络的中间网络层在训练过程中,中间层数据不断的改变,我们称这种情况是深度神经的covariate shift问题,这也是深度神经网络难以训练的原因之一。

深度神经的covariate shift问题

在这里插入图片描述

深度神经网络是由多层网络层构成的,前一层的输出会作为后一层的输入。我们知道网络一旦训练起来,那么参数就要发生更新,除了输入层的数据外,后面网络每一层的输入数据分布是一直在发生变化的,因为在训练的时候,前面层训练参数的更新将导致后面层输入数据分布的变化。

在这里插入图片描述

我们只看神经网络的第三层,它是由第二层的参数和第二层的输出计算得到的,而第二层的参数在整个训练过程中一直在变化,因此必然会引起后面每一层输入数据分布的改变,一旦网络某一层的输入数据的分布发生改变,那么这一层网络就需要去适应学习这个新的数据分布,所以如果训练过程中,训练数据的分布一直在发生变化,这就是covariate shift问题。为了解决这个问题,于是就有了BN算法,也就是batch归一化。

batch归一化(BN算法)

当数据特征维度尺度不同的时候,我们一般归一化之后的数据传输给神经网络的输入层,这样有利于神经网络的学习速度,但这仅仅是对于输入层一层而言,但是从第二个隐藏层开始,我们的接收到前一层的数据就是没有归一化的,这样随着神经网络的训练,中间层数据分布会发生改变,所以我们可以思考是否在层与层传输的过程中,也进行一下归一化,这样使得神经网络的每一层都存在归一化操作,这样的神经网络的训练效果是否会更好。

BN算法通俗来说就是对每一层神经网络进行标准化处理, 我们知道对输入数据进行标准化能让机器学习有效率地学习. 如果把每一层看成这种接受输入数据的模式, 那么我们就可以让所有层进行归一化处理。BN算法就是在神经网络的训练过程中对每层的输入数据加一个标准化处理。

在这里插入图片描述

BN算法具体操作

我们对每一层都进行类似输入层数据的标准化,使其数据的变化范围永远固定在均值为μ,标准差为σ,这里我们需要注意的一点是:输入层的标准化是固定在均值为0,标准差为1的,而神经网络的其它层如果和输入层一样,这样会出问题,正确的做法是,我们引进参数来动态的帮助我们调节均值和方差,这两个参数γ,β也要通过梯度下降学习得到,具体来说就是:

在这里插入图片描述

BN算法的优点

你可以选择比较大的初始学习率,让你的训练速度飙涨。
再也不需要使用使用局部响应归一化层了
可以把训练数据彻底打乱
BN算法类似于对输入层数据进行归一化,其实BN算法相当于对每一层输入做归一化,同时当浅层变化大时不会对深层造成很大的影响,这就有点类像减弱蝴蝶效应,它可以帮助神经网络加速收敛,BN算法引入了部分噪声,所以带有弱正则化效果,有点像dropout正则化。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幻风_huanfeng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值