深度神经网络批量归一化的简要介绍 batch normalization

为什么要使用批处理规范化?
我们通过调整和缩放激活来标准化输入层。例如,当我们具有从0到1以及从1到1000的特征时,我们应该将它们标准化以加快学习速度。如果输入层从中受益,为什么不对隐藏层中的值也做同样的事情,这些值一直在变化,并且训练速度提高了10倍甚至更多倍。
批量归一化减少了隐藏单位值的偏移量(协方差偏移)。为解释协方差变化,让我们深入了解猫检测。我们仅在黑猫的图像上训练数据。因此,如果我们现在尝试将此网络应用于有色猫的数据,那是显而易见的;我们做得不好。训练集和预测集都是猫的图像,但略有不同。换句话说,如果某个算法学习了X到Y的映射,并且X的分布发生了变化,那么我们可能需要通过尝试使X的分布​​与Y的分布对齐来重新训练学习算法。
同样,批处理归一化允许网络的每一层自己独立于其他层进行学习。
在这里插入图片描述

我们可以使用较高的学习率,因为批量归一化可确保没有激活过高或过低的激活。这样一来,以前无法训练的事物就会开始训练。
由于它具有轻微的正则化效果,因此减少了过度拟合。与dropout类似,它为每个隐藏层的激活添加了一些噪音。因此,如果我们使用批处理规范化,我们将使用更少的dropout,这是一件好事,因为我们不会丢失很多信息。但是,我们不应该仅依赖于批处理规范化来进行规范化。我们最好将它与dropout结合使用。
批量标准化如何工作?
为了提高神经网络的稳定性,批次归一化通过减去批次平均值并除以批次标准偏差来归一化先前激活层的输出。
但是,在通过一些随机初始化的参数进行激活输出的这种移位/缩放之后,下一层的权重不再是最佳的。如果SGD(随机梯度下降法)是使损失函数最小化的一种方法,则它将取消此标准化。
因此,批量归一化将两个可训练的参数添加到每一层,因此归一化的输出将乘以“标准差”参数(gamma)并添加“均值”参数(beta)。换句话说,批处理规范化允许SGD通过为每次激活仅更改这两个权重来进行非规范化,而不是通过更改所有权重而失去网络的稳定性。

从原始批处理规范纸
批量归一化和预训练的网络,例如VGG:
VGG中没有批处理规范层,因为在VGG之前不存在批处理规范化。如果我们从一开始就对其进行训练,则预训练的体重将得益于激活的标准化。因此,添加批处理规范层实际上可以改善ImageNet,这很酷。您可以将其添加到密集层,也可以添加到卷积层。
如果我们在预先训练的网络中插入批处理规范,它将更改预先训练的权重,因为它将减去平均值并除以激活层的标准偏差,并且我们不希望发生这种情况,因为我们需要那些预先训练的体重保持不变。因此,我们需要做的是插入一个批处理规范层并找出gamma和beta,以撤消输出更改。
概括起来,您可以将批处理规范化视为在网络的每个层上进行预处理。

如果您的训练损失远低于验证损失,则意味着网络可能过拟合。 解决方案是减小网络规模或增加dropout率。 例如,您可以尝试dropout0.5,依此类推。

如果您的训练/验证损失大约相等,则您的模型不适合。 增加模型的大小(层数或每层神经元的原始数)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值