• 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)

  • 相关阅读:
    将kali linux装入U盘 制作随身携带的kali linux
    arch/manjaro linux configuration
    python资源

    JSP通过AJAX获取服务端的时间,在页面上自动更新
    Spark基础
    MapReduce基础
    HDFS基础
    C#输出杨辉三角形
    Java窗体居中显示的2种方法
  • 原文地址:https://www.cnblogs.com/liujshi/p/5616171.html
Copyright © 2020-2023  润新知