深度学习(二) 正则、BN、梯度消失

深度学习(二) 正则、BN、梯度消失

2.1 正则化

  • L1、L2正则
  • 数据增强,例如加入随机噪声,输入时加入,在隐藏层加入(方差极小的噪声);图像平移,旋转,色彩变化
  • Early stopping 验证集的训练误差在一定轮数没有降低,则停止训练
  • 参数共享 Weight Sharing CNN
  • Bagging,构建不同的数据集,训练不同的模型,取平均,降低方差
  • dropout 随机化断开连接。可以被认为是在深度神经网络做中bagging 提供了类似的bagging的集成。与bagging不同的是,dropout中的网络共享参数 bagging每一个模型训练到收敛,而drop out中的网络的每一个网络没有训练到收敛。预测的时候,每一个单元的参数要预乘以p。除了正则,drop out还带在模型中引入了稀疏性,引入输出向量的稀疏性
  • BN 有一定的正则化作用,他在mini-batch上取平均,加入噪音,加入了正则
  • 对抗样本训练 在训练完成的网络上,构造对抗样本, x+αΔxJ(w;x,y) x + α Δ x J ( w ; x , y )

2.2 Batch Normalization
  covariate shift
    这个现象指的是训练集数据分布与预测集数据分布不一致。这个问题的解决方法是重新赋予训练集数据新的权重。
    对于样本 xi x i ,它在训练集中的分布是 q(xi) q ( x i ) ,在 预测集中的真实分布是 p(xi) p ( x i ) ,它的新权重就是 p(xi)q(xi) p ( x i ) q ( x i )
    分布如何确认?
      从训练集与验证集采样数据,分别标注为1,-1,
      训练LR分类器进行分类,如果测试集上的表现好,则训练集数据分布不一致

p(z=1|xi)=p(xi)p(xi)+q(xi)=11+ef(xi)(2.2.1) (2.2.1) p ( z = 1 | x i ) = p ( x i ) p ( x i ) + q ( x i ) = 1 1 + e − f ( x i )

      分类器训练好后reweight的权值即为:
p(z=1|xi)p(z=1|xi)=ef(xi)(2.2.2) (2.2.2) p ( z = 1 | x i ) p ( z = − 1 | x i ) = e f ( x i )

     如何发现Covaraite shift现象?
      MCC(Matthews correlation coefficient),训练集预测集相关系数, MCC[1,1] M C C ∈ [ − 1 , 1 ]
      1强正相关,0无相关性,-1强负相关, 如果MCC > 0.2,发生了covariate shift
MCC=TPTNFPFN(TP+FP)(TP+TN)(TN+FP)(TN+FN)(2.2.3) (2.2.3) M C C = T P ∗ T N − F P ∗ F N ( T P + F P ) ( T P + T N ) ( T N + F P ) ( T N + F N )

  internal covariate shift
    训练集测试集输入分布的变化会给模型带来问题,一般而言数据分布差距不会太大,而在很深的网络这个问题就很严
  重。神经网络的隐藏层基于输入分布进行学习参数,之前层权值的变化,会导致之后的输入分布变化,隐藏层的输入分布
  总是在变,难以收敛。因为前面的层的结果会传递到后面的层,而且层次越多,前面的细微变化就会带来后面的巨大变化

  直觉上
    输入0均值,1方差能够加速学习,直觉上BN将隐藏层的输出0均值,1方差,解决internal covariate shift,加速学习
  ,使得网络后面的层次对于之前的层权值的变化更为鲁棒

  实质
    BN实质是解决反向传播的梯度消失的问题,防治梯度消失

  正则化
    BN他在mini-batch上取平均,加入噪音,起一定的正则作用

  公式

μB1mi=1mxiσ2B1mi=1m(xiμn)2x^ixiμBσ2n+ϵyiγx^i+β(2.2.4) μ B ← 1 m ∑ i = 1 m x i σ B 2 ← 1 m ∑ i = 1 m ( x i − μ n ) 2 x ^ i ← x i − μ B σ n 2 + ϵ (2.2.4) y i ← γ x ^ i + β

    batchnorm就是通过对每一层的输出规范为均值和方差一致的方法,解决消失和爆炸的问题,或者可以理解为BN将输
  出从饱和区拉倒了非饱和区。

2.3 梯度消失于爆炸
2.3.1 梯度消失
  产生原因
  许多激活函数将输出值挤压在很小的区间内,在激活函数两端较大范围的定义域内梯度为0,导致权重更新的缓慢训练难度增加,造成学习停止。前面层上的梯度是来自后面的层上项的乘积,当层数过多时,随着乘积的累积,将越来越小。

  解决办法
  Pre-training + fine-tuning 每次训练一层,训练完成BP所有层
  Relu、leakyReLu、Elu等激活函数缓解梯度消失
  BN 通过对每一层的输出规范为均值和方差一致的方法,将输出从饱和区拉倒了非饱和区
  残差机制 短路机制可以无损地传播梯度,而另外一项残差梯度则需要经过带有weights的层,梯度不是直接传递过来的。残差梯度不会那么巧全为-1,而且就算其比较小,有1的存在也不会导致梯度消失。所以残差学习会更容易。
  RNN LSTM 将乘性转为加性

2.3.2 梯度爆炸
  梯度剪切防止爆炸,设定阈值,大于阈值剪切;正则化限制梯度爆炸

你可能感兴趣的:(深度学习)