算法工程师面试之Batch Normalization和 Layer Normalization

43 篇文章 1 订阅

0.总结

  • Batch NormalizationLayer Normalization的由来、各自优缺点
  • 二者都志在解决什么问题? => 加速模型收敛
  • 文章来源:CSDN@LawsonAbs

1.Batch Normalization

1.1 背景

在使用梯度下降的时候,我们经常会采取one-example SGD,full-batch SGD,mini-batch SGD的方法来更新参数。但是这些操作会遇到一个问题:随着网络深度的增加,梯度的变化越来越不明显【也就是梯度消失】,梯度消失会让训练一个模型变得十分困难,那么该怎么解决这个问题呢?
有研究人员发现,模型在输入数据的前几层时训练效果还是

有点儿类似于CV中的白化操作【在把数据输入到模型时,进行一系列的处理操作 => 将数据变化成一个标准正态分布】,目的是为了加速收敛
由这个想法再扩展一点点,那就是如果不仅仅是在输入层把输入数据处理一下,甚至于在每层的数据输入时都处理一下,那么是不是会有更好的效果?基于这个思想,BN出世了。

在这里插入图片描述

1.2 特点

  • BN相当于将神经网络的每一层的输入都做了一次白化
  • BN 的归一化过程是以batch为单位的。

1.2 真正原理

BN算法提出之后,很多人自认为这个算法的有效性就如论文中所述的那样,但事实并非如此,就有学者证明BN有效的原理并不是如原论文所述的那样。这里我也不班门弄斧,有兴趣的同学可以自行查看。

1.3 细节

BatchNorm 就是在深度神经网络训练过程中使得每一层神经网络的输入保持相同分布的。那么问题来了:

1.3.1 是不同层之间保持相同的分布?还是对于同层之间不同的batch 保持性相同的分布?

1.3.2 为什么深度神经网络随着网络深度加深,训练起来越困难?收敛越来越慢?

  • Relu激活函数
  • residual network 等等
    都是为了解决上面这个问题提出的

BN 算法是存在问题的,如果再按照变换操作,那么就会变成之前的样子。
γ \gamma γ

1.3.3 对谁做BN?

Batch Normalization is about normalizing the hidden units activation values so that the distribution of these activations remains same during training.

对每个隐层神经元的激活值做BN,它位于 x = w u + B x=wu+B x=wu+B激活值获得之后,非线性函数变换之前。
【首先得清楚深度神经网络的结构是什么样子的?然后才能在这个基础上得到一个清晰的认识】

1.3.4 BN的计算过程是什么样的?

如果激活函数处理完之后,得到的值会迅速改变,从而导致DNN 学习的效率。

Consider we have d number of hidden units in a hidden layer of any Deep neural network.

假设在DNN 的某层有d个神经元。这d个神经元分别得到的激活值拼凑成的向量则是 X = [ x 1 , x 2 , . . . , x d ] X=[x_1,x_2,...,x_d] X=[x1,x2,...,xd]。现在我们使用下面的公式来正则化第k个神经元输出的激活值。
. . . ... ...

1.3.5 直接BN【其实就是将数据转成标准正态分布】可能会破坏已经学习到的特征。怎么解决这个问题?

1.4 存在的问题

  • BN是按照样本数计算归一化统计量的。 如果样本数少,那么就会导致波动大,效果差。
  • 硬件资源受限,在线学习等等

2. Layer Normalization

我个人是看不起Layer Normalization的,这明明就是一个水文~ 事实也证明:BN的效果要优于LN

BN:它是取不同样本的同一个通道的特征做归一化;
LN:它取的是同一个样本的不同通道(特征)做归一化。 => 根据样本的特征数做归一化。

LN是一个独立于batch size 的算法,所以无论样本数多少都不会影响参与LN计算的数据量,从而解决BN的两个问题。

2.1 细节

2.1.1 将LN用到CNN是具体用在哪一层之后的,或者说哪种层之后?

3.参考文章

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Batch Normalization(批归一化)和 Layer Normalization(层归一化)都是用于神经网络中的正则化技术,旨在提高模型的训练效果和泛化能力。 Batch Normalization是在深度神经网络中应用广泛的技术之一。它的主要思想是通过对每个批次(batch)的输入进行归一化,使得输入在每个特征维度上具有零均值和单位方差。这样做的好处是可以加速网络的收敛速度,减轻梯度消失问题,并有一定的正则化效果。Batch Normalization层通常在全连接层或卷积层之后,激活函数之前添加。 Layer Normalization是与Batch Normalization类似的技术,但它的归一化方式不是基于批次,而是基于每个样本在特征维度上进行归一化。具体而言,Layer Normalization对每个样本的特征进行归一化,使得每个样本在特征维度上具有零均值和单位方差。与Batch Normalization不同,Layer Normalization可以应用于任意大小的批次,甚至可以应用于单个样本。Layer Normalization通常在循环神经网络(RNN)等需要处理可变长度序列数据的模型中使用。 虽然Batch NormalizationLayer Normalization有不同的归一化方式,但它们的目标都是通过减少内部协变量转移(Internal Covariate Shift)来加速训练过程,并提高模型的泛化能力。它们在训练深度神经网络时都可以发挥重要作用,具体选择哪种方法取决于应用场景和网络结构。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

说文科技

看书人不妨赏个酒钱?

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

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

打赏作者

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

抵扣说明:

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

余额充值