zoukankan      html  css  js  c++  java
  • DL神经网络权值初始化

    前言

    深度学习中参数的初始化也有很多trick,这些trick却对训练结果起到了至关重要的作用,
    本文介绍一个权值初始化的策略。

    介绍

    针对神经网络权值初始化许多的方法,其中最常用的方法是用随机数进行初始化。
    用代码表示就是W=randn(D,H),其中randn从均值为0,标准差为1的单位高斯分布中采样,因此神经节点
    在初始化时有一个随机的方向。

    这种初始化有一个问题就是,每个神经元节点输出值的方差会随着神经元节点输入样本的数量而增加。下面用公式说明这个问题。
    \begin{align} Var(s)&=Var(\sum_i^nw_ix_i)\\
    &=\sum_i^n \text{Var}(w_ix_i)\\
    &=\sum_in[E(w_i)]2Var(x_i) +[E(x_i)]^2Var(w_i)+Var(x_i)Var(w_i) \\
    &=\sum_i^nVar(x_i)Var(w_i)\\
    &=(nVar(w))var(x)
    \end{align}
    其中第3步到第4步我们假设输入值均值为0,即\(E[x_i]=E[w_i]=0\)
    当然一般而言输入值均值不会为0,例如采样ReLU作为激活函数的话均值恒大于0。
    第4到第5步我们假设所有\(w_i,x_i\)是独立同分布的。
    每一步的推导都是根据方差相关性质得出。
    其中第2步到第3步需要解释一下:

    \begin{align}
    Var(XY)&=E(X2Y2)-E^2(XY)\\
    &=E(X2)E(Y2)-(E(X)E(Y))^2\\
    &=(E2(X2)+Var(X))*(E2(Y2)+Var(Y))-E2(X)E2(Y)\\
    &=E2(X)Var(Y)+E2(Y)Var(X)+Var(X)Var(Y)
    \end{align}

    从上面可以看出,如果我们希望\(s\)\(x\)有相同的方差那么\(w\)在初始化是应该乘以\(\sqrt{1/n}\),即W=randn(D,H)/sqrt(n)

  • 相关阅读:
    手机端不加载js文件,PC端要加载js文件
    JS数组去重和取重
    jquery遍历一个数组
    2个轮播地址
    动感Loading文字
    仿265网站LOGO,会盯着你看的眼睛
    git学习
    c++ primer 5th 笔记:第十一章
    c++ primer 5th 笔记:第十章
    c++ primer 5th 笔记:第九章
  • 原文地址:https://www.cnblogs.com/liujshi/p/5616171.html
Copyright © 2011-2022 走看看