深度学习中Xavier初始化

作者:@houkai
本文为作者原创,转载请注明出处:https://www.cnblogs.com/houkai/p/10160682.html


“Xavier”初始化方法是一种很有效的神经网络初始化方法,方法来源于2010年的一篇论文《Understanding the difficulty of training deep feedforward neural networks》。

文章主要的目标就是使得每一层输出的方差应该尽量相等。下面进行推导:每一层的权重应该满足哪种条件才能实现这个目标。

和方差相关的定理

假设有随机变量x和w,它们都服从均值为0,方差为σ的分布,且独立同分布,那么:

  • wx就会服从均值为0,方差为σσ的分布
  • wx+wx就会服从均值为0,方差为2σσ的分布

文章实验用的激活函数是tanh激活函数,函数形状如下左图,右图是其导数的函数形状。

激活函数

从上图可以看出,当x处于0附近时,其导数/斜率接近与1,可以近似将其看成一个线性函数,即f(x)=x。

假设输入数据的均值为o,方差为δx,如果第一层是卷基层,卷基层共n个参数,n=Ckhkw,于是有:

zj=inwixi

其中,忽略偏置b

假设x和w是独立同分布,则Var(z)=nδxδw,为了更好地表达,将层号放在变量上标处:

δx2=n1δx1δw1

全连接和卷积层都可以看做是n个参数的线性变换,进而有:δx3=n2δx2δw2,如果k层的网络,有:

δxk=nk1δxk1δwk1=nk1nk2δxk2δwk2δwk1=δx1i=1k1(niδwi)

从上式中可以看出,后面的连乘是很危险的,如果niδwi总是大于1,最后的方差为越来越大;如果乘机小于1,最后的方差就越来越小。所以我们回头再看第一个公式:

δx2=n1δx1δw1

如果满足δx2=δx1,即保证输出方差和输出方差一直便可以避免上述问题,得到:

δw1=1n1

对于任意一层i,应该满足:

δwi=1ni

ni是w参数的输入层。

反向传播的情况

假设第k层的梯度为Lossxjk,对于第k-1层,有:

Lossxjk1=i=1nLossxikwjki

这里的参数n表示的是输出端的数目。

如果每层的方差服从均值为o,方差为某值的分布,有:

Var(Lossxjk1)=nkVar(Lossxik)δwk

对于k层的网络,可以推导得到:

Var(Lossxj1=Var(Lossxik)2k(niδwi)

上式的连乘同样危险,所以我们取Var(Lossxjk1)=Var(Lossxik)
故:

δwk=1nk

这里的n表示输出的维度

为了均衡考虑,我们设置方差应该满足

δwk=2nk+nk+1

实际应用

论文提出使用均匀分布进行初始化,我们设定权重要初始化的范围是[-a,a]。而均匀分布的方差为:

Var(uniform)=(a(a))212=a23=δwk

所以:

a=6nk+nk+1

这就是xavier初始化方法,即把参数初始化成下面范围内的均匀分布:

[6nk+nk+1,6nk+nk+1]

posted @   侯凯  阅读(2618)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
历史上的今天:
2013-12-22 4、DES和RSA简介
2013-12-22 3、数字签名
2013-12-22 2、摘要函数——MD2/MD4/MD5数字签名
2013-12-22 1、数据加密基础
2013-12-22 cookie——小甜品
点击右上角即可分享
微信分享提示