[深度学习] 权值初始化 xavier和he_normal

本文探讨了深度学习中权重初始化的重要性,分析了Xavier和He_normal两种初始化方法的原理,旨在解决深层神经网络训练初期的梯度消失和饱和问题。通过实验对比,展示了不同初始化方式对模型训练速度和效果的影响,尤其是在ResNet训练MNIST数据集时,He_normal表现出更好的性能。

一、概述与应用

(1)论文

    xavier论文:《Understanding the difficulty of training deep feedforward neural networks》

    he_normal论文:《Delving Deep into Rectifiers:Surpassing Human-Level Performance on ImageNet Classification》

(2)Tensorflow API,initializer:

     tf.keras.initializers.he_normal()

     tf.contrib.layers.xavier_initializer()

二、xavier原理

(0) 公式推导

核心:

前向传播时,对于某一层输入x,输出y,如何初始化w使得 x与y的分布一致?

y = sigma(xi * wi) + b , i= 1~n,表示n个神经元。

另外这个论文假设激活函数梯度为1,即没有激活函数

要使得 D(y) = D(x),即w初始化后,输出的方差与输入方差一致:

D(y) = D(xi) = D(sigmal(xi*wi))

                   = n * D(xi * wi)         // 此处根据公式 D(A+B) = D(A) + D(B)的到

                   = n * D(xi) * D(wi)    // 根据公式: 当E(A)=E(B) = 0时,D(A*B) = D(A) * D(B)

此时有 D(xi) = n * D(xi) * D(wi) ,

故: D(wi) = 1/n1, n1为前一层神经元数

即当wi初始化为,均值0, 方差1/n时,可以使得一层NN输入和输出分布一致。

反向传播时:对初始化w,使得梯度回传时,相邻两层梯度分布一致。

可以通过同样的方法求到。

D(wi) = 1/n2, n2是后一层的神经元数量

为了同时兼顾feed forward和back prop,所以取个折中,

D(wi) = 2/(n1+n2)

对于均匀分布 ~U(-k, k),均值为0, 方差为 k^2/3

所以若  k^2/3 = 2/(n1+n2), 则k =  ,得到最终公式:

 

(1)要解决的问题:

假设有一个4层神经网络,每一层过一个sigmoid(x* W +bias),

初始化:bias=0  , 权重为: 

 训练200个epoch,则每一层sigmoid后输出的均值和方差变化:

 可以观察到一个大问题:layer 4,训练一开始,输出均值就进入饱和区,趋近于0。直到epoch 100+以后,模型才开始逃离饱和区,开始正常输出。

而5层nn,模型甚至逃不出饱和区。

总结:一个不好的nn初始化函数,随着模型深度增加,会使得模型训练初始阶段非常慢。

(2) 原因分析:

对于sigmoid(x * W +bias)来说

第一步:模型训练初始阶段,由于layer-4 bias学的快,模型主要由bias主导输出。

第二步:layer-4 bias学到了输出均值,就会使得 layer-4 的x * W的输出趋近于0,而layer-4 x = layer-3 的sigmoid(x3* W +bias),即会逼迫 layer-3的输出为0

第三步:若layer-3输出为0, 而0又是sigmoid的饱和区,导致真正的特征学习缓慢。

第四步:如果模型深,则永远逃不出饱和区;如果模型浅,会艰难地逃出饱和区。但即使艰难地逃出饱和区,学到了一些真正的特征信心,由于初始化阶段有问题,可能导致模型进入局部最优,最终效果大打折扣。

(2)he_normal

三、实验对比

初始化对网络训练有巨大的影响。(避免在某一层的forward/backward中进入饱和区域,拖慢网络训练进程)

在n=5时,即网络深度为6n+2层=32层时,resnet训练mnist,不同初始化效果对比:

(1)N(0.1,0)正态分布初始化weight:初始loss约为350,训练0.5个epoch后loss下降到16

(2)he_normal():初始loss约为150,训练0.5个epoch后loss下降到3.5,一个epoch就看达到97.82%的Test Error。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值