在 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. celery work logging 问题

    celery 的日志里只输出日志 不输入标准打印

  2. 调用WCF出现的异常

    使用如下代码调用调用远程服务时,                   try                    {                        using (GetSimServ ...

  3. 【Codeforces Round #457 (Div. 2) B】Jamie and Binary Sequence

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 把n分解成二进制的形式. n=2^a0+2^a1+...+2^a[q-1] 则固定就是长度为q的序列. 要想扩展为长为k的序列. 可 ...

  4. 自己动手写SSO(单点登录)

    SSO在我们的应用中非常常见,例如我们在OA系统登录了,我们就可以直接进入采购系统,不需要再登录了,这样使我们非常方便.现在网上也有很多实现方法,于是乎我也想写一个看看.我主要用到的是cookie的机 ...

  5. Apache-DBUtils包对数据库的操作

    •commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装.学习成本极低.而且使用dbutils能极大简化jdbc编码的工作量,同一时候也不会影 ...

  6. Shiro学习总结(3)——Apache Shiro身份认证

    身份验证,即在应用中谁能证明他就是他本人.一般提供如他们的身份ID一些标识信息来表明他就是他本人,如提供身份证,用户名/密码来证明. 在shiro中,用户需要提供principals (身份)和cre ...

  7. html中的瀑布流是什么

    html中的瀑布流是什么 一.总结 1.瀑布流: 从左往右排列,哪一列现在的总高度最小,就优先排序把item(单元格)放在这一列.这样排完所有的单元格后,可以保证每一列的总高度都相差不大 2.看效果图 ...

  8. 水题ing

    T1: https://www.luogu.org/problemnew/show/P1724幻想乡,东风谷早苗是以高达控闻名的高中生宅巫女.某一天,早苗终于入手了最新款的钢达姆模型.作为最新的钢达姆 ...

  9. 原生js大总结九

    81.ES6的Symbol的作用是什么?   ES6引入了一种新的原始数据类型Symbol,表示独一无二的值   82.ES6中字符串和数组新增了那些方法   字符串       1.字符串模板    ...

  10. Oracle学习总结(10)——45 个非常有用的 Oracle 查询语句

    ******************************  日期/时间 相关查询 *****************************       -- 1.获取当前月份的第一天  sele ...