zoukankan      html  css  js  c++  java
  • Xavier Initialization 的理解与推导(及实现)

    在 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

  • 相关阅读:
    mvc的视图渲染方式
    Numpy系列(六)- 形状操作
    Numpy系列(五)- 复制和视图
    Numpy系列(四)- 索引和切片
    Numpy系列(三)- 基本运算操作
    Numpy系列(二)- 数据类型
    Numpy系列(一)- array
    HTML参考手册
    pkuseg:一个多领域中文分词工具包
    Nginx实现JWT验证-基于OpenResty实现
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9421668.html
Copyright © 2011-2022 走看看