锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

3.深度学习(二)

时间:2023-01-18 08:00:00 5w33kr电阻

文章目录

    • 3.5 Batch_Size
      • 3.5.1 为什么需要 Batch_Size?
      • 3.5.2 Batch_Size 值的选择
      • 3.5.3 在合理范围内增加Batch_Size有何好处?
      • 3.5.4 盲目增大 Batch_Size 有何坏处?
      • 3.5.5 调节 Batch_Size 对训练效果有什么影响?
    • 3.6 归一化
      • 3.6.1 归一化意义?
      • 3.6.2 为何要归一化?
      • 3.6.3 为什么归一化能提高求解最优解速度?
      • 3.6.4 3D 图解不归一化
      • 3.6.5 归一化有哪些类型?
      • 3.6.6 局部响应归一化
      • 3.6.7 了解局部响应的归一化
      • 3.6.8 什么是批归一化?(Batch Normalization)
      • 3.6.9 批归一化(BN)算法的优点
      • 3.6.10 批归一化(BN)算法流程
      • 3.6.11 批归一化与群归一化的比较
      • 3.6.12 Weight Normalization和Batch Normalization比较
      • 3.6.13 Batch Normalization什么时候更合适?
    • 3.7 预训练和微调(fine tuning)
      • 3.7.1 为什么无监督预训练有助于深度学习?
      • 3.7.2 模型微调是什么?fine tuning
      • 3.7.3 网络参数在微调时是否更新?
      • 3.7.4 fine-tuning 模型的三种状态
    • 3.8 权重偏差的初始化
      • 3.8.1 都是初始化的 0
      • 3.8.2 都初始化为相同的值
      • 3.8.3 初始化为小随机数
      • 3.8.4 用 1 / n 1/\sqrt n 1/n 校准方差
      • 3.8.5 稀疏初始化(Sparse Initialazation)
      • 3.8.6 初始化偏差
    • 3.9 学习率
      • 3.9.1 学习率的作用
      • 3.9.2 学习率衰减的常用参数是什么?
      • 3.9.3 分段常数衰减
      • 3.9.4 指数衰减
      • 3.9.5 自然指数衰减
      • 3.9.6 多项式衰减
      • 3.9.7 余弦衰减
    • 3.12 Dropout 系列问题
      • 3.12.1 为什么要规范化?
      • 3.12.2 为什么正则化有利于防止过拟合?
      • 3.12.3 理解dropout正则化
      • 3.12.4 dropout率的选择
      • 3.12.5 dropout缺点是什么?
    • 3.13 深度学习中常用的数据增强方法?
    • 3.14 如何理解 Internal Covariate Shift?

3.5 Batch_Size

3.5.1 为什么需要 Batch_Size?

Batch首先决定下降方向的选择。

若数据集较小,则可采用全数据集的形式,优点是:

  1. 全数据集确定的方向可以更好地代表整个样本,从而更准确地朝向极值的方向。
  2. 由于不同权重的梯度值差异很大,很难选择全球学习率。 Full Batch Learning 可以使用 Rprop 各权值仅基于梯度符号,并有针对性地单独更新。

对于更大的数据集,如果采用全数据集的形式,缺点是:

  1. 随着数据集的海量增长和内存限制,一次性输入所有数据变得越来越不可行。
  2. 以 Rprop 由于每种方式的迭代,会因为 Batch 采样差异,各梯度修正值相互抵消,无法修正。这是后来发生的 RMSProp 妥协方案。

3.5.2 Batch_Size 值的选择

假设每次只训练一个样本,即 Batch_Size = 1.线性神经元在平均误差成本函数的错误表面为抛物表面,横截面为椭圆。对于多层神经元和非线性网络,它们在当地仍然类似于抛物表面。此时,每个修正方向都以各自样本的梯度方向进行修正,很难达到收敛。

既然 Batch_Size 全数据集或Batch_Size = 1.它们都有自己的缺点。你能选择适中的吗?Batch_Size值呢?

此时,可采用批梯度下降法(Mini-batches Learning)。因为如果数据集足够充分,用一半(甚至更少)的数据训练计算的梯度和用所有数据训练的梯度是乎一样的。

3.5.3 在合理范围内,增大Batch_Size有何好处?

  1. 内存利用率提高了,大矩阵乘法的并行化效率提高。
  2. 跑完一次 epoch(全数据集)所需的迭代次数减少,对于相同数据量的处理速度进一步加快。
  3. 在一定范围内,一般来说 Batch_Size 越大,其确定的下降方向越准,引起训练震荡越小。

3.5.4 盲目增大 Batch_Size 有何坏处?

  1. 内存利用率提高了,但是内存容量可能撑不住了。
  2. 跑完一次 epoch(全数据集)所需的迭代次数减少,要想达到相同的精度,其所花费的时间大大增加了,从而对参数的修正也就显得更加缓慢。
  3. Batch_Size 增大到一定程度,其确定的下降方向已经基本不再变化。

3.5.5 调节 Batch_Size 对训练效果影响到底如何?

  1. Batch_Size 太小,模型表现效果极其糟糕(error飙升)。
  2. 随着 Batch_Size 增大,处理相同数据量的速度越快。
  3. 随着 Batch_Size 增大,达到相同精度所需要的 epoch 数量越来越多。
  4. 由于上述两种因素的矛盾, Batch_Size 增大到某个时候,达到时间上的最优。
  5. 由于最终收敛精度会陷入不同的局部极值,因此 Batch_Size 增大到某些时候,达到最终收敛精度上的最优。

3.6 归一化

3.6.1 归一化含义?

  1. 归纳统一样本的统计分布性。归一化在 0 − 1 0-1 01 之间是统计的概率分布,归一化在 − 1 − − + 1 -1--+1 1+1 之间是统计的坐标分布。

  2. 无论是为了建模还是为了计算,首先基本度量单位要同一,神经网络是以样本在事件中的统计分别几率来进行训练(概率计算)和预测,且 sigmoid 函数的取值是 0 到 1 之间的,网络最后一个节点的输出也是如此,所以经常要对样本的输出归一化处理。

  3. 归一化是统一在 0 − 1 0-1 01 之间的统计概率分布,当所有样本的输入信号都为正值时,与第一隐含层神经元相连的权值只能同时增加或减小,从而导致学习速度很慢。

  4. 另外在数据中常存在奇异样本数据,奇异样本数据存在所引起的网络训练时间增加,并可能引起网络无法收敛。为了避免出现这种情况及后面数据处理的方便,加快网络学习速度,可以对输入信号进行归一化,使得所有样本的输入信号其均值接近于 0 或与其均方差相比很小。

3.6.2 为什么要归一化?

  1. 为了后面数据处理的方便,归一化的确可以避免一些不必要的数值问题。
  2. 为了程序运行时收敛加快。
  3. 同一量纲。样本数据的评价标准不一样,需要对其量纲化,统一评价标准。这算是应用层面的需求。
  4. 避免神经元饱和。啥意思?就是当神经元的激活在接近 0 或者 1 时会饱和,在这些区域,梯度几乎为 0,这样,在反向传播过程中,局部梯度就会接近 0,这会有效地“杀死”梯度。
  5. 保证输出数据中数值小的不被吞食。

3.6.3 为什么归一化能提高求解最优解速度?

​ 上图是代表数据是否均一化的最优解寻解过程(圆圈可以理解为等高线)。左图表示未经归一化操作的寻解过程,右图表示经过归一化后的寻解过程。

​ 当使用梯度下降法寻求最优解时,很有可能走“之字型”路线(垂直等高线走),从而导致需要迭代很多次才能收敛;而右图对两个原始特征进行了归一化,其对应的等高线显得很圆,在梯度下降进行求解时能较快的收敛。

​ 因此如果机器学习模型使用梯度下降法求最优解时,归一化往往非常有必要,否则很难收敛甚至不能收敛。

3.6.4 3D 图解未归一化

例子:

​ 假设 w 1 w1 w1 的范围在 [ − 10 , 10 ] [-10, 10] [10,10],而 w 2 w2 w2 的范围在 [ − 100 , 100 ] [-100, 100] [100,100],梯度每次都前进 1 单位,那么在 w 1 w1 w1 方向上每次相当于前进了 1 / 20 1/20 1/20,而在 w 2 w2 w2 上只相当于 1 / 200 1/200 1/200!某种意义上来说,在 w 2 w2 w2 上前进的步长更小一些,而 w 1 w1 w1 在搜索过程中会比 w 2 w2 w2 “走”得更快。

​ 这样会导致,在搜索过程中更偏向于 w 1 w1 w1 的方向。走出了“L”形状,或者成为“之”字形。

3.6.5 归一化有哪些类型?

  1. 线性归一化

x ′ = x − m i n ( x ) m a x ( x ) − m i n ( x ) x^{\prime} = \frac{x-min(x)}{max(x) - min(x)} x=max(x)min(x)xmin(x)

​ 适用范围:比较适用在数值比较集中的情况。

​ 缺点:如果 max 和 min 不稳定,很容易使得归一化结果不稳定,使得后续使用效果也不稳定。

  1. 标准差标准化

x ′ = x − μ σ x^{\prime} = \frac{x-\mu}{\sigma} x=σxμ

​ 含义:经过处理的数据符合标准正态分布,即均值为 0,标准差为 1 其中 μ \mu μ 为所有样本数据的均值, σ \sigma σ 为所有样本数据的标准差。

  1. 非线性归一化

    适用范围:经常用在数据分化比较大的场景,有些数值很大,有些很小。通过一些数学函数,将原始值进行映射。该方法包括 l o g log log、指数,正切等。

3.6.6 局部响应归一化作用

​ LRN 是一种提高深度学习准确度的技术方法。LRN 一般是在激活、池化函数后的一种方法。

​ 在 ALexNet 中,提出了 LRN 层,对局部神经元的活动创建竞争机制,使其中响应比较大对值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。

3.6.7 理解局部响应归一化

​ 局部响应归一化原理是仿造生物学上活跃的神经元对相邻神经元的抑制现象(侧抑制),其公式如下:

b x , y i = a x , y i / ( k + α ∑ j = m a x ( 0 , i − n / 2 ) m i n ( N − 1 , i + n / 2 ) ( a x , y j ) 2 ) β b_{x,y}^i = a_{x,y}^i / (k + \alpha \sum_{j=max(0, i-n/2)}^{min(N-1, i+n/2)}(a_{x,y}^j)^2 )^\beta bx,yi=ax,yi/(k+αj=max(0,in/2)min(N1,i+n/2)(ax,yj)2)β

其中,

  1. a a a:表示卷积层(包括卷积操作和池化操作)后的输出结果,是一个四维数组[batch,height,width,channel]。
  • batch:批次数(每一批为一张图片)。
  • height:图片高度。
  • width:图片宽度。
  • channel:通道数。可以理解成一批图片中的某一个图片经过卷积操作后输出的神经元个数,或理解为处理后的图片深度。
  1. a x , y i a_{x,y}^i ax,yi 表示在这个输出结构中的一个位置 [ a , b , c , d ] [a,b,c,d] [a,b,c,d],可以理解成在某一张图中的某一个通道下的某个高度和某个宽度位置的点,即第 a a a 张图的第 d d d 个通道下的高度为b宽度为c的点。

  2. N N N:论文公式中的 N N N 表示通道数 (channel)。

  3. a a a n / 2 n/2 n/2 k k k 分别表示函数中的 input,depth_radius,bias。参数 k , n , α , β k, n, \alpha, \beta k,n,α,β 都是超参数,一般设置 k = 2 , n = 5 , α = 1 ∗ e − 4 , β = 0.75 k=2, n=5, \alpha=1*e-4, \beta=0.75 k=2,n=5,α=1e4,β=0.75

  4. ∑ \sum : ∑ \sum 叠加的方向是沿着通道方向的,即每个点值的平方和是沿着 a a a 中的第 3 维 channel 方向的,也就是一个点同方向的前面 n / 2 n/2 n/2 个通道(最小为第 0 0 0 个通道)和后 n / 2 n/2 n/2 个通道(最大为第 d − 1 d-1 d1 个通道)的点的平方和(共 n + 1 n+1 n+1 个点)。而函数的英文注解中也说明了把 input 当成是 d d d 个 3 维的矩阵,说白了就是把 input 的通道数当作 3 维矩阵的个数,叠加的方向也是在通道方向。

简单的示意图如下:

3.6.8 什么是批归一化(Batch Normalization)

​ 以前在神经网络训练中,只是对输入层数据进行归一化处理,却没有在中间层进行归一化处理。要知道,虽然我们对输入数据进行了归一化处理,但是输入数据经过 σ ( W X + b ) \sigma(WX+b) σ(WX+b) 这样的矩阵乘法以及非线性运算之后,其数据分布很可能被改变,而随着深度网络的多层运算之后,数据分布的变化将越来越大。如果我们能在网络的中间也进行归一化处理,是否对网络的训练起到改进作用呢?答案是肯定的。

​ 这种在神经网络中间层也进行归一化处理,使训练效果更好的方法,就是批归一化Batch Normalization(BN)。

3.6.9 批归一化(BN)算法的优点

下面我们来说一下BN算法的优点:

  1. 减少了人为选择参数。在某些情况下可以取消 dropout 和 L2 正则项参数,或者采取更小的 L2 正则项约束参数;
  2. 减少了对学习率的要求。现在我们可以使用初始很大的学习率或者选择了较小的学习率,算法也能够快速训练收敛;
  3. 可以不再使用局部响应归一化。BN 本身就是归一化网络(局部响应归一化在 AlexNet 网络中存在)
  4. 破坏原来的数据分布,一定程度上缓解过拟合(防止每批训练中某一个样本经常被挑选到,文献说这个可以提高 1% 的精度)。
  5. 减少梯度消失,加快收敛速度,提高训练精度。

3.6.10 批归一化(BN)算法流程

下面给出 BN 算法在训练时的过程

输入:上一层输出结果 X = x 1 , x 2 , . . . , x m X = {x_1, x_2, ..., x_m} X=x1,x2,...,xm,学习参数 γ , β \gamma, \beta γ,β

算法流程:

  1. 计算上一层输出数据的均值

μ β = 1 m ∑ i = 1 m ( x i ) \mu_{\beta} = \frac{1}{m} \sum_{i=1}^m(x_i) μβ=m1i=1m(xi)

其中, m m m 是此次训练样本 batch 的大小。

  1. 计算上一层输出数据的标准差

σ β 2 = 1 m ∑ i = 1 m ( x i − μ β ) 2 \sigma_{\beta}^2 = \frac{1}{m} \sum_{i=1}^m (x_i - \mu_{\beta})^2 σβ2=m1i=1m(xiμβ)2

  1. 归一化处理,得到

x ^ i = x i + μ β σ β 2 + ϵ \hat x_i = \frac{x_i + \mu_{\beta}}{\sqrt{\sigma_{\beta}^2} + \epsilon} x^i=σβ2

相关文章