深度学习——Xavier初始化方法

“Xavier”初始化方法是一种很有效的神经网络初始化方法,方法来源于2010年的一篇论文《Understanding the difficulty of training deep feedforward neural networks》,可惜直到近两年,这个方法才逐渐得到更多人的应用和认可。

为了使得网络中信息更好的流动,每一层输出的方差应该尽量相等。

基于这个目标,现在我们就去推导一下:每一层的权重应该满足哪种条件。

文章先假设的是线性激活函数,而且满足0点处导数为1,即

现在我们先来分析一层卷积:

其中ni表示输入个数。

根据概率统计知识我们有下面的方差公式:

特别的,当我们假设输入和权重都是0均值时(目前有了BN之后,这一点也较容易满足),上式可以简化为:

进一步假设输入x和权重w独立同分布,则有:

于是,为了保证输入与输出方差一致,则应该有:

对于一个多层的网络,某一层的方差可以用累积的形式表达:

特别的,反向传播计算梯度时同样具有类似的形式:

综上,为了保证前向传播和反向传播时每一层的方差一致,应满足:

但是,实际当中输入与输出的个数往往不相等,于是为了均衡考量,最终我们的权重方差应满足

———————————————————————————————————————

———————————————————————————————————————

学过概率统计的都知道 [a,b] 间的均匀分布的方差为:

因此,Xavier初始化的实现就是下面的均匀分布:

——————————————————————————————————————————

———————————————————————————————————————————

下面,我们来看一下caffe中具体是怎样实现的,代码位于include/caffe/filler.hpp文件中。

template <typename Dtype>
class XavierFiller : public Filler<Dtype> {
 public:
  explicit XavierFiller(const FillerParameter& param)
      : Filler<Dtype>(param) {}
  virtual void Fill(Blob<Dtype>* blob) {
    CHECK(blob->count());
    int fan_in = blob->count() / blob->num();
    int fan_out = blob->count() / blob->channels();
    Dtype n = fan_in;  // default to fan_in
    if (this->filler_param_.variance_norm() ==
        FillerParameter_VarianceNorm_AVERAGE) {
      n = (fan_in + fan_out) / Dtype(2);
    } else if (this->filler_param_.variance_norm() ==
        FillerParameter_VarianceNorm_FAN_OUT) {
      n = fan_out;
    }
    Dtype scale = sqrt(Dtype(3) / n);
    caffe_rng_uniform<Dtype>(blob->count(), -scale, scale,
        blob->mutable_cpu_data());
    CHECK_EQ(this->filler_param_.sparse(), -1)
         << "Sparsity not supported by this Filler.";
  }
};

由上面可以看出,caffe的Xavier实现有三种选择

(1) 默认情况,方差只考虑输入个数:

(2) FillerParameter_VarianceNorm_FAN_OUT,方差只考虑输出个数:

(3) FillerParameter_VarianceNorm_AVERAGE,方差同时考虑输入和输出个数:

之所以默认只考虑输入,我个人觉得是因为前向信息的传播更重要一些

时间: 2024-11-05 13:48:44

深度学习——Xavier初始化方法的相关文章

深度学习——MSRA初始化

本次简单介绍一下MSRA初始化方法,方法同样来自于何凯明paper <Delving Deep into Rectifiers:Surpassing Human-Level Performance on ImageNet Classification>. Motivation MSRA初始化 推导证明 补充说明 Motivation 网络初始化是一件很重要的事情.但是,传统的固定方差的高斯分布初始化,在网络变深的时候使得模型很难收敛.此外,VGG团队是这样处理初始化的问题的:他们首先训练了一个

车牌识别01__车牌抠图(CNN深度学习—opencv实现方法)

一.安装依赖 1.mac安装brem /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"2.mac安装opencvbrew install opencv3.安装opencv-pythonpip3.6 install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python参考以下地址h

深度学习的优化方法 总结

SGD:现在的SGD一般都指mini-batch gradient descent 最小批量梯度下降 缺点:(正因为有这些缺点才让这么多大神发展出了后续的各种算法) 选择合适的learning rate比较困难 - 对所有的参数更新使用同样的learning rate.对于稀疏数据或者特征,有时我们可能想更新快一些对于不经常出现的特征,对于常出现的特征更新慢一些,这时候SGD就不太能满足要求了 SGD容易收敛到局部最优,并且在某些情况下可能被困在鞍点 Adagrad: 对学习率进行了一个约束.

深度学习中Xavier初始化

"Xavier"初始化方法是一种很有效的神经网络初始化方法,方法来源于2010年的一篇论文<Understanding the difficulty of training deep feedforward neural networks>. 文章主要的目标就是使得每一层输出的方差应该尽量相等.下面进行推导:每一层的权重应该满足哪种条件才能实现这个目标. 和方差相关的定理 假设有随机变量x和w,它们都服从均值为0,方差为σ的分布,且独立同分布,那么: wx就会服从均值为0,

Deep Learning(深度学习)之(三)Deep Learning的常用模型或者方法

九.Deep Learning的常用模型或者方法 9.1.AutoEncoder自动编码器 Deep Learning最简单的一种方法是利用人工神经网络的特点,人工神经网络(ANN)本身就是具有层次结构的系统,如果给定一个神经网络,我们假设其输出与输入是相同的,然后训练调整其参数,得到每一层中的权重.自然地,我们就得到了输入I的几种不同表示(每一层代表一种表示),这些表示就是特征.自动编码器就是一种尽可能复现输入信号的神经网络.为了实现这种复现,自动编码器就必须捕捉可以代表输入数据的最重要的因素

深度学习与自然语言处理(3)_斯坦福cs224d Lecture 3

原文作者:Rohit Mundra, Richard Socher 原文翻译:@熊杰([email protected]) && @王昱森([email protected]) && @范筑军老师( [email protected]) && @OWEN([email protected]) 内容校正:寒小阳 && 龙心尘 时间:2016年6月 出处:http://blog.csdn.net/han_xiaoyang/article/deta

Deep Learning(深度学习)学习笔记整理

申明:本文非笔者原创,原文转载自:http://www.sigvc.org/bbs/thread-2187-1-3.html 4.2.初级(浅层)特征表示 既然像素级的特征表示方法没有作用,那怎样的表示才有用呢? 1995 年前后,Bruno Olshausen和 David Field 两位学者任职 Cornell University,他们试图同时用生理学和计算机的手段,双管齐下,研究视觉问题. 他们收集了很多黑白风景照片,从这些照片中,提取出400个小碎片,每个照片碎片的尺寸均为 16x1

文献 | 2010-2016年被引用次数最多的深度学习论文(修订版)

本来来自 :http://blog.csdn.net/u010402786/article/details/51682917 一.书籍 Deep learning (2015) 作者:Bengio 下载地址:http://www.deeplearningbook.org/ 二.理论 1.在神经网络中提取知识 Distilling the knowledge in a neural network 作者:G. Hinton et al. 2.深度神经网络很易受骗:高信度预测无法识别的图片 Deep

(转) 深度学习在目标跟踪中的应用

深度学习在目标跟踪中的应用 原创 2016-09-05 徐霞清 深度学习大讲堂 点击上方“深度学习大讲堂”可订阅哦!深度学习大讲堂是高质量原创内容的平台,邀请学术界.工业界一线专家撰稿,致力于推送人工智能与深度学习最新技术.产品和活动信息! 开始本文之前,我们首先看上方给出的3张图片,它们分别是同一个视频的第1,40,80帧.在第1帧给出一个跑步者的边框(bounding-box)之后,后续的第40帧,80帧,bounding-box依然准确圈出了同一个跑步者.以上展示的其实就是目标跟踪(vis