深度学习面试准备
深度学习图像算法工程师–面试准备(1)
深度学习图像算法工程师–面试准备(2)
文章目录
- 深度学习面试准备
- 前言
- 一、Batch Normalization(批归一化)
- 1.1 具体步骤
- 1.2 BN一般用在网络的哪个部分
- 二、Layer Normalization(层归一化)
- 三、 Internal Covariate Shift
- 总结
前言
参考文章
一、Batch Normalization(批归一化)
- BatchNormalization的作用是通过规范化的手段,将越来越偏的分布拉回到标准化的分布,使得激活函数的输入值落在激活函数对输入比较敏感的区域,从而使梯度变大,加快学习收敛速度,避免梯度消失的问题。
- 使得每层网络的输入都服从(0,1)0均值,1方差分布,如果不进行BN,那么每次输入的数据分布不一致,网络训练精度自然也受影响。
- 在Batch中进行 Normalization 计算,其实就是在每个通道进行一次计算,即计算范围是 [Batch, 1, Height,Width],计算次数是 Channel。
1.1 具体步骤
- 计算样本均值。
- 计算样本方差。
- 样本数据标准化处理。
- 进行平移和缩放处理。引入了γ和β两个参数。来训练γ和β两个参数。引入了这个可学习重构参数γ、β,让我们的网络可以学习恢复出原始网络所要学习的特征分布。
1.2 BN一般用在网络的哪个部分
先卷积再激活做BN
Conv+BN+Relu
Batch normalization 的 batch 是批数据, 把数据分成小批小批进行 stochastic gradient descent. 而且在每批数据进行前向传递 forward propagation 的时候, 对每一层都进行 normalization 的处理。
二、Layer Normalization(层归一化)
LN和BN不同,LN是根据样本的特征数来做归一化的,完全独立于batch size。在一个Layer中进行计算,可以理解是一个样本中进行Normalization,即计算范围是 [1, Channel, Height, Width],计算次数是 Batch。
常应用于循环神经网络(RNN)等结构,以解决对于不定长度序列的输入数据的归一化问题。
三、 Internal Covariate Shift
Internal Covariate Shift(内部协变量转移)是指神经网络在训练过程中每一层输入数据分布的变化,即随着网络参数的更新,每一层的输入数据的分布也会发生变化。这种内部协变量转移可能会导致训练过程变得更加困难,因为每一层都需要适应不断变化的输入数据分布。
Internal Covariate Shift 的问题在于,当神经网络每一层的输入数据的分布发生变化时,之前学习到的权重可能就不再适用,这会导致训练过程变得不稳定,需要更小的学习率和更仔细的调参来收敛。同时,由于每一层的输入数据分布的变化,网络可能需要更多的训练样本才能学到有效的表示。
为了解决 Internal Covariate Shift 的问题,批量归一化(Batch Normalization)被引入到神经网络中。批量归一化通过对每一层的输入数据进行归一化,使得每层的输入数据分布保持稳定,有助于加速训练过程、提高模型的泛化能力,并且减少对初始权重的依赖。
总结
-
BN的优点:
-
可以解决“Internal Covariate Shift”
-
解决梯度消失的问题(针对sigmoid),加快收敛速度。
-
对初始权重不那么敏感:BN 使得网络对初始权重的选择不那么敏感,减少了调参的困难。
-
BN的缺点:
- 计算代价:BN 需要额外的计算量来计算均值和方差,可能会增加训练时间。
- 不适用于小批量数据:在小批量数据上表现可能不稳定,因为均值和方差的估计可能不准确。
- LN的优点:
- 不依赖于batch size。
- 适用于RNN;
- LN的缺点:
- 不适用于CNN。
- 针对具有多个连续特征的数据,进行特征之间的缩放,可能会导致量纲差异消失。
- 局部归一化:LN 是在每个样本中所有特征的维度上进行归一化,可能会丢失通道间的信息,不够全局。
- 缓慢的收敛速度:相对于 BN,LN 可能导致收敛速度较慢,需要更多的训练时间。