在 caffe mnist tutorial 的实现中,有如下的语句:

weight_filter = {type: "xavier"};

随后的解释中指出,本实现将使用 xavier 算法通过输入和输出神经元的数目自动确定权值矩阵的初始化大小

通过本文第三部分的推导,使用 xavier 初始化权值矩阵是为了保证输出和输入尽可能地服从相同的概率分布(注,数据预处理中已对将输入去均值)。

1. caffe 下的 xavier 实现

caffe 中,网络参数初始化通过从一个 0 均值和特定方差的分布(一般为正态分布或均匀分布)中获得:

Var(W)=1nin,stddev=1nin−−−√

2. Glorot & Bengio xavier 实现

在 Glorot & Bengio’s 的文章(Understanding the difficulty of training deep feedforward neural networks)中,推荐的却是如下形式:

Var(W)=2nin+nout

3. 简单推导

n 个成分构成的输入向量 x,经过一个随机矩阵为 w 的线性神经元,得到输出

y=wx=w1x1+w2x2+…+wnxn

已知 xi 是独立同分布的,且均值方差已知,此时求输出 y 的方差。

推导如下,由独立变量积的方差计算公式(Product of independent variables)可知,

Var(WiXi)=[E(Xi)]2Var(Wi)+[E(Wi)]2Var(Xi)+Var(Xi)Var(Wi)

又已对输入向量去均值,输入和权值矩阵均值均为 0,则:

Var(WiXi)=Var(Xi)Var(Wi)

所以进一步有:

Var(y)=Var(∑iwixi)=∑iVar(wixi)=∑iVar(xi)Var(wi)=nVar(xi)Var(wi)

因此为使得,输出 y 与输入 x 具有相同的均值和方差,权值矩阵的方差则要求:

Var(wi)=1n=1nin

这里的 n 指的是输入样本的维数,这即是 caffe 中关于 xavier 的实现。

Glorot & Bengio’s 论文中,在基础上,还需考虑反向传播时的情形,反向传播是正向传播的逆过程,此时的输入是前向传播的输出,则有:

Var(wi)=1n=1nout

综合以下两点要求,则可得到满足以上两点要求的权值矩阵的方差为:

Var(Wi)=2nin+nout

references

An Explanation of Xavier Initialization

Xavier Initialization 的理解与推导(及实现)的更多相关文章

  1. Machine Learning系列--EM算法理解与推导

    EM算法,全称Expectation Maximization Algorithm,译作最大期望化算法或期望最大算法,是机器学习十大算法之一,吴军博士在<数学之美>书中称其为“上帝视角”算 ...

  2. hdu 4559 涂色游戏(对SG函数的深入理解,推导打SG表)

    提议分析: 1 <= N <= 4747 很明显应该不会有规律的,打表发现真没有 按题意应该分成两种情况考虑,然后求其异或(SG函数性质) (1)找出单独的一个(一列中只有一个) (2)找 ...

  3. 列表推导式和seed()的理解

    Table of Contents generated with DocToc 列表推导式和seed()的理解 对seed()的理解 列表推导式 第一种用法 第二种用法 列表推导式和seed()的理解 ...

  4. [深度学习] 权重初始化--Weight Initialization

    深度学习中的weight initialization对模型收敛速度和模型质量有重要影响! 在ReLU activation function中推荐使用Xavier Initialization的变种 ...

  5. 深度学习 weight initialization

    转自: https://www.leiphone.com/news/201703/3qMp45aQtbxTdzmK.htmla https://blog.csdn.net/shuzfan/articl ...

  6. (转载)深度学习的weight initialization

    本文转自:谷歌工程师:聊一聊深度学习的weight initialization TLDR (or the take-away) Weight Initialization matters!!! 深度 ...

  7. 进一步聊聊weight initialization

    深度学习模型训练的过程本质是对weight(即参数W)进行更新,这需要每个参数有相应的初始值. 有人可能会说:"参数初始化有什么难点?直接将所有weight初始化为0或者初始化为随机数!&q ...

  8. 神经网络权值初始化方法-Xavier

    https://blog.csdn.net/u011534057/article/details/51673458 https://blog.csdn.net/qq_34784753/article/ ...

  9. 分布式系列文章——Paxos算法原理与推导

    Paxos算法在分布式领域具有非常重要的地位.但是Paxos算法有两个比较明显的缺点:1.难以理解 2.工程实现更难. 网上有很多讲解Paxos算法的文章,但是质量参差不齐.看了很多关于Paxos的资 ...

随机推荐

  1. cksum---检验文件CRC是否正确

  2. webclient类学习

    (HttpWebRequest模拟请求登录):当一些硬件设备接口 或需要调用其他地方的接口时,模拟请求登录获取接口的数据就很有必要. webclient类:只想从特定的URI请求文件,则使用WebCl ...

  3. oracle跨数据库跨用户訪问注意事项

    java代码中不同意出现oracle的username.数据链路名. 跨用户.跨数据库的訪问必须在oracle中建同义词或视图来实现.在java代码中仅仅需当做当前用户下的对象处理.

  4. svn: Can&#39;t convert string from &#39;UTF-8&#39; to native encoding 解决的方法

    今天在down代码时遇到了例如以下问题: [xxx@xxx ~]$ svn co https://xxxxxxxxxxxxx svn: Can't convert string from 'UTF-8 ...

  5. 实战c++中的vector系列--copy set to vector(别混淆了reserve和resize)

    stl算法中有个copy函数.我们能够轻松的写出这种代码: #include <iostream> #include <algorithm> #include <vect ...

  6. transfer learning(matlab 实现)

    一句话总结 transfer learning 的核心即是对一个已训练模型微调,使其适应新的应用,如下图示: 为 matlab 接口所训练完成的经典深度神经网络下载地址:Index of /matco ...

  7. 28.lambda表达式与多线程

    #include <iostream> #include <thread> #include <Windows.h> #include <chrono> ...

  8. Spring源码分析专题——目录

    Spring源码分析专题 -- 阅读指引 IOC容器 Spring源码分析专题 -- IOC容器启动过程(上篇) Spring源码分析专题 -- IOC容器启动过程(中篇) Spring源码分析专题 ...

  9. js全选反选按钮实现

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  10. Objective-C - 类的静态常量

    创建头文件(.h), 导出常量: // Constants.h FOUNDATION_EXPORT NSString *const MyFirstConstant; FOUNDATION_EXPORT ...