正则化:Normalization

参考论文Batch NormalizationLayer Normalization 白化:独立同分布数据:机器学习界最喜欢的数据莫过于独立同分布数据. 独立同分布并非所有机器学习模型的必然要求,比如Naïve Bayes模型就建立在特征彼此独立的基础之上,而逻辑回归 和神经网络中则在非独立的特征数据上依然可以训练出很好的模型,但独立同分布的数据可以简化常规机器学习模型的训练、提升机器学...
摘要由CSDN通过智能技术生成

参考论文

Batch Normalization
Layer Normalization

白化:

  • 独立同分布数据:机器学习界最喜欢的数据莫过于独立同分布数据. 独立同分布并非所有机器学习模型的必然要求,比如Naïve Bayes模型就建立在特征彼此独立的基础之上,而逻辑回归 和神经网络中则在非独立的特征数据上依然可以训练出很好的模型,但独立同分布的数据可以简化常规机器学习模型的训练、提升机器学习模型的预测能力,已经是一个共识。
  • 白化: 因此,在把数据喂给机器学习模型之前,将数据独立同分布化是一个重要的数据预处理步骤。白化指定就是将数据独立同分布化的这个过程,白化一般包含两个目的:
    • 去除特征之间的相关性 —> 独立;
    • 使得所有特征具有相同的均值和方差 —> 同分布。
  • 白化最典型的方法就是PCA

Internal Covariate Shift:

  • 深度神经网络涉及到很多层的叠加,而每一层的参数更新会导致上层的输入数据分布发生变化,通过层层叠加,高层的输入分布变化会非常剧烈,这就使得高层需要不断去重新适应底层的参数更新;Google将这一现象总结为 Internal Covariate Shift,简称 ICS。为了训好模型,我们需要非常谨慎地去设定学习率、初始化权重、以及尽可能细致的参数更新策略。
  • Batch Normalization的原论文作者给了Internal Covariate Shift一个较规范的定义:在深层网络训练的过程中,由于网络中参数变化而引起内部结点数据分布发生变化的这一过程被称作Internal Covariate Shift。
  • ICS 会导致的问题: 简而言之,每个神经元的输入数据不再是独立同分布。
  • 1.上层参数需要不断适应新的输入数据分布,降低学习速度。
  • 2.下层输入的变化可能趋向于变大或者变小,导致上层落入饱和区,使得学习过早停止。
    • 3.每层的更新都会影响到其它层,因此每层的参数更新策略需要尽可能的谨慎。

  • 我们以神经网络中的一个普通神经元为例。神经元接收一组输入向量: x = ( x 1 , x 2 , … , x d ) x=(x_1,x_2,…,x_d) x=(x1,x2,,xd)通过每个神经元后,输出一个标量值: y = f ( x ) y=f(x) y=f(x)由于ICS问题的存在,x的分布可能相差很大。要解决ICS问题我们必须使的神经网络的每一层的输入独立同分布,理论正确的方法就是对每一层的输入数据都进行白化操作。但是由于白化操作具有以下缺点
    • 白化过程计算成本太高,并且在每一轮训练中的每一层我们都需要做如此高成本计算的白化操作;特别是我们还希望白化操作是可微的,保证白化操作可以通过反向传播来更新梯度
    • 白化过程由于改变了网络每一层的分布,因而改变了网络层中本身数据的表达能力。底层网络学习到的参数信息会被白化操作丢失掉。

Batch Normalization (纵向规范化)

思路:

  • 既然白化计算过程比较复杂,那我们就简化一点,比如我们可以尝试单独对每个特征(每个神经元)进行normalizaiton就可以了,让每个特征都有均值为0,方差为1的分布就OK。
  • 另一个问题,既然白化操作减弱了网络中每一层输入数据表达能力,那我就再加个线性变换操作,让这些数据再能够尽可能恢复本身的表达能力就好了。

模型:

  • 在深度学习中,由于采用full batch的训练方式对内存要求较大,且每一轮训练时间过长;我们一般都会采用对数据做划分,用mini-batch对网络进行训练。因此,Batch Normalization也就在mini-batch的基础上进行计算。
  • 假定网络的层数为L(不包含输入层):
  • 其中参数有:
    l l l :网络中的层标号
    L L L :网络中的最后一层或总层数
    d l d_l dl :第l层的维度,即神经元结点数
    W [ l ] W^{[l]} W[l]:第l层的权重矩阵, W [ l ] ∈ R d l × d l − 1 W^{[l]}\in R^{d_l×d_{l-1} } W[l]Rdl×dl1
    b [ l ] b^{[l]} b[l] :第 l 层的偏置向量, b [ l ] ∈ R d l × 1 b^{[l]} ∈R^{d_l×1} b[l]Rdl×1
    Z [ l ] Z^{[l]} Z[l] :第 l 层的线性计算结果, Z [ l ] = W [ l ] × i n p u t + b [ l ] Z^{[l]} =W^{[l]} ×input+b^{[l]} Z[l]=W[l]×input+b[l]
    g [ l ] ( ∗ ) g^{[l]} (*) g[l]():第l层的激活函数
    A [ l ] A^{[l]} A[l]:第 l 层的非线性激活结果, A [ l ] = g [ l ] ( Z [ l ] ) A^{[l]} =g^{[l]} (Z^{[l]} ) A[l]=g[l](Z[l])
    M M M :训练样本的数量
    N N N :训练样本的特征数
    X X X:训练样本集, X = ( x 1 , x 2 , … , x M ) , X ∈ R N × M X=(x^1,x^2,…,x^M) ,X∈R^{N×M} X=(x1,x2,,xM),XRN×M(注意这里X的一列是一个样本)
    m m m :batch size,即每个batch中样本的数量
    χ ( ( i ) ) χ^((i)) χ((i)):第 i 个mini-batch的训练数据, X = ( χ 1 , χ 2 , … , χ k ) X=(χ^1,χ^2,…,χ^k) X=(χ1,χ2,,χk),其中 χ i ∈ R N × m χ^i∈R^{N×m} χiRN×m

  • 步骤:
    • 假定我们现在考虑深度神经网络的的第 l l l层,则:神经元的个数为: d l d_l dl,这一层的输出为: Z [ l ] Z^{[l]} Z[l] ,这一层第j个神经元的输出为: Z j [ l ] = [ Z j [ l ] ( 1 ) , Z j [ l ] ( 2 ) , . . . , Z j [ l ] ( m ) ] Z_j^{[l]}=[Z_j^{[l](1)},Z_j^{[l](2)},...,Z_j^{[l](m)}] Zj[l]=[Zj[l](1),Zj[l](2),...,Zj[l](m)] 分别表示batch中的每个样本用过 第 j j j个神经元的输出。由于我们只考虑某一层所以 l l l将在下面被省略,所以表示为: Z j = [ Z j ( 1 ) , Z j ( 2 ) , . . . , Z j ( m ) ] Z_j=[Z_j^{(1)},Z_j^{(2)},...,Z_j^{(m)}] Zj=[Zj(1),Z
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值