精华内容
下载资源
问答
  • 2020-08-09 18:01:02

    交叉熵目标函数更陡峭

    在论文[1]中给了一个图示,一定程度上说明了为什么Cross Entropy用的很多,效果很好。图中上面的曲面表示的是交叉熵代价函数,下面的曲面表示的是二次代价函数,W1和W2分别表示层与层之间的连接权值。

    在这里插入图片描述)

    在1986年 Rumelhart 已经发现:logistic function 或者叫 conditional log-likelihood function: -log P(y|x) 的效果比 quadratic cost function(平方代价函数)的效果好很多的,原因在于 quadratic cost function(平方代价函数)在训练过程中会出现更多的 plateaus(平坦区域)。文章给出了一个两个参数下的图,图中采用的是具有单隐层的神经网络,激活函数使用的是 tanh 函数,对于输入信号进行随机初始化,可以看到二次代价函数具有更多的 plateaus (平坦区域)。

    Xavier initialization [1][4]

    早期的参数初始化方法普遍是将数据和参数初始化为标准高斯分布(均值0方差1),但随着神经网络深度的增加,这方法并不能解决梯度消失问题。

    在这里插入图片描述
    那么我们应该怎么通过初始化来缓解这个问题呢?
    论文中首先给出了一个启发式的方法,想法是初始化值和神经元的输入个数有关:

    We initialized the biases to be 0 and the weights Wij at each layer with the following commonly used heuristic, where U[−a, a] is the uniform distribution in the interval (−a, a) and n is the size of the previous layer (the number of columns of W)

    W ∼ U [ − 1 n , 1 n ] V a r ( W ) = 1 3 n W \sim U[-\frac{1}{\sqrt n},\frac{1}{\sqrt n}]\\ Var(W) = \frac{1}{3n} WU[n 1,n 1]Var(W)=3n1

    上面式子中, W ∼ W \sim W表示其中的每一个元素 W i j W_{ij} Wij都是符合一个均匀分布的。其中n表示本层的输入size,也就是上一层的输出size。我们知道随机变量在[a,b] 间的均匀分布的方差为
    V a r = ( b − a ) 2 12 Var= \frac{(b-a)^2}{12} Var=12(ba)2
    所以得到权重参数的方差是1/3n。先记一下,后面分析会讲到。

    为了便于研究,作者假设使用线性激活函数 f ( x ) f(x) f(x),且在零点导数 f ′ ( 0 ) = 1 f'(0)=1 f(0)=1。实际上,作者研究的是参数的线性区域,可以认为是对任务的一个简化。

    对于一层网络:
    f ( x ) = ∑ i n w i x i + b f(\textbf x) = \sum_i^n w_ix_i + b f(x)=inwixi+b
    输出的方差:
    V a r ( f ( x ) ) = ∑ i n V a r ( w i x i ) Var(f(\textbf x)) = \sum_i^n Var(w_i x_i) Var(f(x))=inVar(wixi)
    其中每一项:
    V a r ( w i x i ) = E [ w i ] 2 V a r ( x i ) + E [ x i ] 2 V a r ( w i ) + V a r ( w i ) V a r ( x i ) Var(w_i x_i) = E[w_i]^2Var(x_i) + E[x_i]^2Var(w_i)+Var(w_i)Var(x_i) Var(wixi)=E[wi]2Var(xi)+E[xi]2Var(wi)+Var(wi)Var(xi)

    当我们假设输入和权重都是0均值时(目前有了BN之后,每一层的输入也较容易满足),即 E [ x i ] = E [ w i ] = 0 E[x_i] = E[w_i] = 0 E[xi]=E[wi]=0,上式可以简化为:

    V a r ( w i x i ) = V a r ( w i ) V a r ( x i ) Var(w_i x_i) =Var(w_i)Var(x_i) Var(wixi)=Var(wi)Var(xi)

    由于w和x独立同分布,那么输出的方差就是

    V a r ( f ( x ) ) = n V a r ( w i ) V a r ( x i ) Var(f(\textbf x)) = n Var(w_i) Var(x_i) Var(f(x))=nVar(wi)Var(xi)

    我们发现,输出的方差是和输入的方差是一个线性倍数关系。假设 z i z^i zi是第 i i i层的输入向量, s i s^i si是第 i i i层激活函数的输入, f f f表示激活函数

    s i = z i W i + b i z i + 1 = f ( s i ) s i + 1 = z i + 1 W i + 1 + b i + 1 \textbf s^i = \textbf z^i W^i + \textbf b^i \\ \textbf z^{i+1} = f(\textbf s^i)\\ \textbf s^{i+1} = \textbf z^{i+1} W^{i+1} + \textbf b^{i+1} si=ziWi+bizi+1=f(si)si+1=zi+1Wi+1+bi+1

    可以得到:
    对于一个多层的网络,某一层的方差可以用累积的形式表达:
    V a r [ z i ] = V a r [ x ] ∏ i ′ = 0 i − 1 n i ′ V a r [ W i ′ ] Var[z^i] = Var[x] \prod_{i'=0}^{i-1}n_{i'} Var[W^{i'}] Var[zi]=Var[x]i=0i1niVar[Wi]

    求反向我们可以得到(假设 f ′ ( s k i ) ≈ 1 f'(s_k^i) \approx 1 f(ski)1,其中Cost表示Loss):
    ∂ C o s t ∂ s k i = f ′ ( s k i ) W k , ⋅ i + 1 ∂ C o s t ∂ s i + 1 ∂ C o s t ∂ w l , k i = z l i ∂ C o s t ∂ s k i \frac{\partial Cost}{\partial s_k^i} = f'(s_k^i) W_{k,\cdot}^{i+1} \frac{\partial Cost}{\partial s^{i+1}} \\ \frac{\partial Cost}{\partial w_{l,k}^i} = z_l^i \frac{\partial Cost}{\partial s_k^i} skiCost=f(ski)Wk,i+1si+1Costwl,kiCost=zliskiCost

    其中 V a r [ W i ′ ] Var[W^{i'}] Var[Wi]表示第 i ′ i' i层的共享权重的方差,对于 d d d层的网络(大饼博士注:下面第一个式子的变量的layer号,符号上和上面求 ∂ C o s t ∂ s k i \frac{\partial Cost}{\partial s_k^i} skiCost的式子,有一点歧义难看懂。主要上面是正向去写,在同一个层里面 S i S^i Si W i + 1 W^{i+1} Wi+1是一对。而下面第一个式子,理解成同一个层里面输入以及参数都是对应的 i ′ i' i,通过堆叠 d d d层,得到最初的输入 s i s^i si的梯度的方差)
    V a r [ ∂ C o s t ∂ s i ] = V a r [ ∂ C o s t ∂ s d ] ∏ i ′ = i d n i ′ + 1 V a r [ W i ′ ] V a r [ ∂ C o s t ∂ w i ] = ∏ i ′ = 0 i − 1 n i ′ V a r [ W i ′ ] ∏ i ′ = i d − 1 n i ′ + 1 V a r [ W i ′ ] × V a r [ x ] V a r [ ∂ C o s t ∂ s d ] Var[\frac{\partial Cost}{\partial s^i}]=Var[\frac{\partial Cost}{\partial s^d}] \prod_{i'=i}^{d}n_{i'+1} Var[W^{i'}] \\ Var[\frac{\partial Cost}{\partial w^i}]= \prod_{i'=0}^{i-1}n_{i'} Var[W^{i'}] \prod_{i'=i}^{d-1}n_{i'+1} Var[W^{i'}] \times Var[x] Var[\frac{\partial Cost}{\partial s^d}] Var[siCost]=Var[sdCost]i=idni+1Var[Wi]Var[wiCost]=i=0i1niVar[Wi]i=id1ni+1Var[Wi]×Var[x]Var[sdCost]

    如果我们希望,神经网络在前向计算的时候,输入输出的方差都是一致的,即 ∀ ( i , i ′ ) , V a r [ z i ] = V a r [ z i ′ ] \forall (i,i'), Var[z^i] = Var[z^{i'}] (i,i),Var[zi]=Var[zi],我们需要满足:

    ∀ i , n i V a r [ W i ] = 1 \forall i, \quad n_i Var[W^i] = 1 i,niVar[Wi]=1

    类似的,如果我们希望反向计算的输入输出方差也是一致的, ∀ ( i , i ′ ) , V a r [ ∂ C o s t ∂ s i ] = V a r [ ∂ C o s t ∂ s i ′ ] \forall (i,i'), Var[\frac{\partial Cost}{\partial s^i}] = Var[\frac{\partial Cost}{\partial s^{i'}}] (i,i),Var[siCost]=Var[siCost],需要满足:

    ∀ i , n i + 1 V a r [ W i ] = 1 \forall i, \quad n_{i+1} Var[W^i] = 1 i,ni+1Var[Wi]=1

    一个层的输入输出一般不相同,作为折中

    ∀ i , V a r [ W i ] = 2 n i + n i + 1 \forall i, \quad Var[W^i] = \frac{2}{n_i + n_{i+1}} i,Var[Wi]=ni+ni+12

    这个就是Xavier初始化算法,认为神经网络每一层的参数的方差需要满足的方差(均值=0)。(注:这里并没有假设是符合什么分布的,只是要求方差是这样,所以理论上我们可以采用任意分布,只要方差等于上面的公式即可)。

    常见的,我们可以用高斯分布,或者均匀分布来生成随机参数(对于Xavier初始化方式,例如pytorch提供了uniform和normal两种:)。

    • 如果是采用均匀分布,根据前面讲过的,随机变量在[a,b] 间的均匀分布的方差为 V a r = ( b − a ) 2 / 12 Var= {(b-a)^2}/{12} Var=(ba)2/12,那么我们只要用下面分布来采样,就可以得到上面的方差。这个公式也是Xavier论文[1]中给出的建议。

    W ∼ U [ − 6 n j + n j + 1 , 6 n j + n j + 1 ] W \sim U[-\frac{\sqrt 6}{\sqrt {n_j + n_{j+1}}},\frac{\sqrt 6}{\sqrt {n_j + n_{j+1}}}] WU[nj+nj+1 6 ,nj+nj+1 6 ]

    • 如果是采用高斯分布,那么直接就:[6]

    W ∼ N ( 0 , 2 n i + n i + 1 ) W \sim N(0, { \frac{2}{n_i + n_{i+1}}}) WN(0,ni+ni+12)

    补充一句,caffe的Xavier实现有三种选择[7]:
    在这里插入图片描述

    He initialization [2][3]

    前面Xavier方法只考虑了线性激活函数,而现在的神经网络(特别是CNN网络)采用的主要是ReLU和Leaky ReLU函数,He初始化方法就是来分析采用ReLU和Leaky ReLU激活函数下,如果我们希望每一层的输入输出方差不变,我们应该如何初始化权重参数,方法上和前一节基本一致。

    对于一个卷积层或者全连接层,其表达式为

    y l = W l x l + b l . y_l = W_l x_l + b_l. yl=Wlxl+bl.

    W l W_l Wl b l b_l bl采样自0均值高斯分布,用 n l n_l nl表示第 l l l x l x_l xl的维数,在卷积层,有 n l = k 2 c n_l=k^2c nl=k2c k k k为卷积核的边长, c c c为channel数,注意到 y l y_l yl W l W_l Wl中元素与 x l x_l xl中对应元素的乘积的和,则上式各变量的方差关系可以表示为:

    V a r [ y l ] = n l V a r [ W l x l ] = n l V a r [ W l ] E [ x l 2 ] . Var[y_l] = n_l Var[W_l x_l]=n_l Var[W_l]E[x_l^2]. Var[yl]=nlVar[Wlxl]=nlVar[Wl]E[xl2].

    这里的 x l x_l xl项前并不是其方差,而是 E [ x l 2 ] E[x^2_l] E[xl2],因为 x l x_l xl通常并不具备0均值,例如ReLU激活函数得到的结果, x l x_l xl均为正值。注意到由于 W l W_l Wl是0均值的,所以无论 x l x_l xl均值为多少,均有

    E [ y l ] = E [ W l x l ] = 0. E[y_l]=E[W_l x_l]=0. E[yl]=E[Wlxl]=0.

    He init 考虑ReLU函数

    通过ReLU激活函数: x l = m a x ( 0 , y l − 1 ) x_l=max(0,y_{l−1}) xl=max(0,yl1),仅正半轴有值,我们假设激活之前的值正负各一半,总体是对称的,可以得到:
    E [ x l 2 ] = 1 2 V a r [ y l − 1 ] . E[x_l^2] = \frac{1}{2} Var[y_{l-1}]. E[xl2]=21Var[yl1].

    因此(如果本文从上面看下来的话,看到这个公式就很熟悉了):
    V a r [ y l ] = 1 2 n l V a r [ W l ] V a r [ y l − 1 ] . Var[y_l] = \frac{1}{2} n_l Var[W_l]Var[y_{l-1}]. Var[yl]=21nlVar[Wl]Var[yl1].

    我们希望每一层的激活前值(卷积的结果,没有过激活函数)的方差一致, V a r [ y l ] = V a r [ y l − 1 ] Var[y_l]=Var[y_{l-1}] Var[yl]=Var[yl1],这个是和Xavier不一样的地方,这样就可以不考虑激活函数了。那么:

    1 2 n l V a r [ W l ] = 1. \frac{1}{2} n_lVar[W_l] =1. 21nlVar[Wl]=1.

    • 如果是用高斯分布采样, W ∼ N ( 0 , 2 n l ) W \sim N(0,\frac{2}{n_l}) WN(0,nl2)

    • 如果是用均匀分布,那么: W ∼ U [ − 6 / n l , 6 / n l ] W \sim U[-\sqrt{6/n_l},\sqrt{6/n_l}] WU[6/nl ,6/nl ]

    He init 考虑Leaky ReLU函数

    Leaky ReLU激活函数和导函数分别为
    在这里插入图片描述
    所以:
    E [ x l 2 ] = 1 2 ( 1 + α 2 ) V a r [ y l ] . E[x_l^2] = \frac{1}{2}(1+\alpha^2) Var[y_l]. E[xl2]=21(1+α2)Var[yl].

    类似上面的推导,可以得到,

    1 2 ( 1 + α 2 ) n l V a r [ W l ] = 1. \frac{1}{2}(1+\alpha^2) n_lVar[W_l] =1. 21(1+α2)nlVar[Wl]=1.

    • 如果是用高斯分布采样, W ∼ N ( 0 , 2 ( 1 + α 2 ) n l ) W \sim N(0,\frac{2}{(1+\alpha^2) n_l}) WN(0,(1+α2)nl2)

    • 如果是用均匀分布,那么: W ∼ U [ − 6 / ( 1 + α 2 ) n l , 6 / ( 1 + α 2 ) n l ] W \sim U[-\sqrt{6/(1+\alpha^2) n_l},\sqrt{6/(1+\alpha^2) n_l}] WU[6/(1+α2)nl ,6/(1+α2)nl ]

    结束语

    好了,到这里本篇就讲完了,介绍了Xavier与He intit的初始化方法,是非常常见的方法。后来还有很多工作来优化初始化,比如进一步考虑resnet网络结构时,有文章引入了Mean field,还有fixup initialization等方法。这些以后有机会再写了。最后说一句BN,因为可以强制要求每一层的数据符合0均值1方差,所以效果上和本文讨论的方法效果很类似。使得前向的数据会相对稳定。但是BN似乎并没有考虑反向梯度的稳定性,这一点目前更多是让resnet中的identity跳边来完成的,有这个identity跳边情况下,梯度至少在在跳边这一路上,可以identity透传,梯度就不容易消失。但是似乎梯度爆炸没有避免,什么情况下会爆炸呢?回看我们前面的分析,比如Xavier中,我们要求 n i + 1 V a r [ W i ] = 1 \quad n_{i+1} Var[W^i] = 1 ni+1Var[Wi]=1,反向就会稳定,如果>1,那么很显然,只要层数深,梯度就指数爆炸了,这样训练也会很难训。因此训练过程中的数据和梯度的稳定性是很重要的。

    参考资料

    [1] Understanding the difficulty of training deep feedforward neural networks
    [2] Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification
    [3] https://blog.csdn.net/happynear/article/details/45440811
    [4] https://blog.csdn.net/kangroger/article/details/61414426
    [5] https://blog.csdn.net/qq_34784753/article/details/78668884
    [6] https://blog.csdn.net/dss_dssssd/article/details/83959474
    [7] https://blog.csdn.net/weixin_34221773/article/details/86085462
    [8] https://www.cnblogs.com/itmorn/p/11132494.html#ct5

    更多相关内容
  • 深度学习——Xavier初始化方法 深度学习中Xavier初始化 推导所得的结果就是使该层中权重参数的每个元素都随机采样于均匀分布: U(−6a+b,6a+b)U(-\sqrt{\frac{6}{a+b}},\sqrt{\frac{6}{a+b}})U(−a+b6​​,a+b6​​)...
  • Xavier参数初始化方法

    2022-04-19 22:43:13
    1 梯度消失与梯度爆炸 这是一个深度学习领域遇到的老问题了,即使是现在,任何一个新提出的模型,无论是...2 Xavier方法 接下来的推导基于假设: 激活函数在0周围的导数接近1(比如tanh); 偏置项b初始化为0,期望为0

    目录

    1 梯度消失与梯度爆炸

    2 Xavier方法​​​​​​​

    1 梯度消失与梯度爆炸

    这是一个深度学习领域遇到的老问题了,即使是现在,任何一个新提出的模型,无论是MLP、CNN、还是RNN,随着深度的加深,这两个问题变得尤为严重。

    • 梯度消失是指在深度学习训练的过程中,梯度随着链式求导逐层传递逐层减小,最后趋近于0,导致对某些层的训练失效;
    • 梯度爆炸与梯度消失相反,梯度随着链式求导逐层传递逐层增大,最后趋于无穷,导致某些层无法收敛;

    2 Xavier方法

    接下来的推导基于假设:

    • 激活函数在0周围的导数接近1(比如tanh);
    • 偏置项b初始化为0,期望为0
    • 参数初始化期望均为0

    Xavier的目的:

    • 在前向传播的时候满足 ,即对于每一个结点,它的输出的方差都相同;
    • 用梯度反向传播的时候,,,和前向传播时一样希望结点输出的方差都相同;
    • 前后传播的方差都相同

            对于神经网络中的layer i,假设它的输入是,激活函数为 f ,满足,经过激活函数后的输出为

             假设在初始化之后,处于激活函数的线性区域,即 ,即

            因为 ,若 都是0,那么

    (1)前向传播

            在 W , Z , b 独立同分布,且 为0的假设下,

            所以

             这里是 layer i 的第k个node的输出,为 layer i−1的第j个node的输出, 为 layer i−1与  layer i第k个node的连接权重。

            我们希望的是在前向传播的时候满足 ,即对于每一个结点,它的输出的方差都相同,所以需要满足,所以 可以从方差为的正态分布从采样得到。

     (2)后向传播

            当我们用梯度反向传播的时候, ,和前向传播时一样希望结点输出的方差都相同,只是这时候需要从方差为的正态分布中采样得到。

     (3)均相同

            所以按照上述思路,我们无法保证前后传播的方差都相同,所以选择 从方差为的正态分布中采样得到,或者从,的均匀分布中得到(均匀分布的方差为,边界可以按此公式推导得到)

            但是之前有假设激活函数在0周围的导数接近1,所以忽略了激活函数的作用,不同激活函数在0周围的导数不同,需要给方差乘上导数的倒数:

    神经网络初始化方法-Xavier/kaiming_转行的炼丹师的博客-CSDN博客

    Xavier神经网络参数初始化方法 - 知乎

      

    展开全文
  • Xavier初始化

    2021-08-29 21:26:44
    原文链接:Xavier初始化 补充几种初始化 全0初始化 在线性回归,logistics回归的时候,基本上都是把参数初始化为0,模型也能够很好的工作。然后在神经网络中,把w初始化为0是不可以的。如果全部初始化为0,在神经...

    文章题目:Understanding the difficulty of training deep feedforward neural networks
    原文链接:

    补充几种初始化

    全0初始化

    在线性回归,logistics回归的时候,基本上都是把参数初始化为0,模型也能够很好的工作。然后在神经网络中,把w初始化为0是不可以的。如果全部初始化为0,在神经网络第一遍前向传播所有隐层神经网络激活值相同,反向传播权重更新也相同,导致隐层神经元没有区分性,称为“对称权重”现象。如果所有的参数都是0,那么所有神经元的输出都将是相同的,那在back propagation的时候同一层内所有神经元的行为也是相同的 — gradient相同,weight update也相同。这显然是一个不可接受的结果。为打破这个平衡,比较好的方式是对每个参数进行随机初始化。

    固定值初始化

    固定值初始化适用于如下网络层:

    BN层的初始化

    BN层中的gamma初始化为1,beta初始化为0。

    LSTM

    LSTM遗忘门偏置通常为1或2,使时序上的梯度变大

    bias初始化

    对于偏置(bias)通常用0初始化对于ReLU神经元,偏置设为0.01,使得训练初期更容易激活。

    固定方差的初始化

    高斯分布初始化

    均匀分布初始化

    缺点:如何设置方差,如果太小或太大,信号经过sigmoid激活函数后会进入激活函数的饱和区,从而造成梯度消失等问题。

    方差缩放的参数初始化

    Xavier 初始化

    也称为Glorot初始化,因为发明人为Xavier Glorot。Xavier initialization是 Glorot 等人为了解决随机初始化的问题提出来的另一种初始化方法,他们的思想就是尽可能的让输入和输出服从相同的分布,这样就能够避免后面层的激活函数的输出值趋向于0。
      Xavier初始化在sigmoid和tanh激活函数上有很好的表现,但是在Relu激活函数上表现很差。

    He初始化

    也称为Kaiming初始化,这种初始化解决了Xavier初始化在Relu激活函数上性能差的问题,也是较为常用的初始化方法。He initialization的思想是:在ReLU网络中,假定每一层有一半的神经元被激活,另一半为0,所以,要保持variance不变,只需要在Xavier的基础上再除以2:
    在这里插入图片描述

    摘要

    ——介绍这篇论文的主要内容就是尝试更好的理解为什么使用“标准随机初始化”来计算使用标准梯度下降的网络效果通常来讲都不是很好。

    ——首先研究了不同的非线性激活函数的影响,发现 sigmoid 函数它的均值会导致在隐层中很容易到达函数的饱和区域,因此sigmoid 激活函数在随机初始化的深度网络中并不合适。但同时惊喜的发现,处于饱和的神经元能够自己“逃脱出”饱和状态。

    —— 最后研究了激活值和梯度值如何在训练过程中的各层次里发生变化,其中,当与每个层相关联的雅可比矩阵的奇异值远远大于1时,训练可能会变得更加困难。基于这些考虑,提出了一种新的初始化方法,可以带来更快的收敛速度。

    深度神经网络

    —— 深度学习方法的目标是学习特征层次结构,其中较高层次的特征由较低层次特征组成。

    ——大多数具有深层结构的最新实验结果都是通过可转化为深层监督神经网络的模型获得的,但其初始化或训练方案不同于经典的前馈神经网络。为什么这些新算法比标准的随机初始化和基于梯度的有监督训练准则优化工作得更好?Erhan等人的工作表明无监督预训练初始化作为调节器,在优化程序的“更好”吸引区中初始化参数,对应于更好的通用化相关的明显局部最小值。

    ——本文的分析有调查性实验驱动,这些实验设计到跨层和跨训练迭代的监视器激活(观察隐藏单元的饱和)和梯度。我们还评估了激活函数(其可能影响饱和)和初始化程序(因为无监督的预训练是一种特殊的初始化形式,具有巨大的影响)的选择对这些的影响。

    发现实验

    实验设置

    —— 无限数据集:

    Shapeset-3*2:它的数据的大小是无穷多的,因为为不断地随机生成。使用的数据集中随机生成三个图形(平行四边形,椭圆,三角)中的两个,而且允许相互之间存在遮挡关系(不大于 50% 的遮挡),最后将图形全都 resize 成为 32×32 大小。

    ——有限数据集:
    MNIST:手写数字数据集,50000张训练图片,10000张验证图片,10000张测试图片,每个图片是28*28的灰度数字图像。

    CIFAR-10:是微小图像数据集的一个标记自己,包含50000个训练图像(作者从中选10000作为验证数据)和10000个测试图像。每个图像中的主要对象对应10类:飞机、汽车、鸟、猫、鹿、狗、青蛙、马、船或卡车。每张图像是彩色的,大小为32*32像素。

    Small-ImageNet是一组微小37*37灰度图像数据集,有WordNet的名词结构标签。作者使用了90000个图像进行训练,10000个用于验证,10000用于测试。包含十个类:地砖、交通工具、鸟类、哺乳动物、鱼类、家具、仪器、工具、花卉和水果。

    ——网络的隐藏层选择1-5层,每一层的网络的神经单元数为1000个,输出层为一个softmax 逻辑回归。 代价函数为:负对数函数,即:-log P(y|x).
    网络的优化方法为:梯度的反向传播算法, mini-batches的大小为10。权值更新过程中的学习率基于验证集误差来确定。

    在隐含层选用分别试验三种不同的激活函数:sigmoid函数, 双曲正切函数, softsign函数,后面两个函数的是相似的,唯一的区别在于:双曲正切函数以指数型接近渐近线(速度快),softsign函数以二次型接近它的渐近线。Softsign公式为
    f ( x ) = x / ( 1 + ∣ x ∣ ) f(x) = x/(1+|x|) f(x)=x/(1+x)
    网络权值的确定为下面区间上的均匀分布,其中 n 为:前一层的单元数。
    在这里插入图片描述

    实验结果


    -该图显示深层结构中不同隐藏层的监督学习期间激活值(sigmoid)的平均值和标准差。
    -顶部隐藏层在0处快速饱和,但在100轮左右失去饱和。
    -作者发现,这种饱和在具有S型激活的深层网络中可以持续很长时间
    在这里插入图片描述
    -学习过程中激活值分布的98个百分位(仅标记)和标准偏差(带标记的实现)。上图为双曲正切函数,下图为softsign。
    -两图对比说明softsign激活函数的网络达到饱和比较慢,且层之间达到饱和状态没有先后差别。
    在这里插入图片描述
    -学习结束时的激活值标准化直方图,在同一层的单元和300和测试示例中取平均值。上图是双曲正切,下图是softsign。
    -上图的激活大多分布在极端(-1,1,0),而softsign在(0.6,0.8),(-0.6,-0.8)附近有激活值

    在这里插入图片描述
    -交叉熵(黑色)和二次损失(红色)一个有两个权重两层网络。
    -作者发现,逻辑回归或条件对数cost函数比传统上用于训练前馈神经网络的二次cost工作得更好(对于分类问题)。
    -把训练准则(criterion)画成随机输入和目标信号的两个权重的函数,从图中可看到二次cost有更多的平稳停滞状态。

    理论思考

    对于一个密集人工神经网络,使用对称激活函数f,且 f 满足 f ′ ( 0 ) = 1 f^{'}(0)=1 f(0)=1是第 i i i层的激活向量, s i s^{i} si 是第 i i i层的参数向量(argument vector).有
    s i = z i + w i + b i , z i + 1 = f ( s i ) s^{i} = z^{i} + w^{i} + b^{i}, z^{i+1}=f(s^{i}) si=zi+wi+bi,zi+1=f(si)
    则有
    链式法则就可以求出来
    假设初始阶段处于线性状态,权重是独立初始化的,且输入向量的方法一样,则对于第 i i i层大小为 n i n_i ni, x x x为输入的网络
    (4)式是因为线性系统,0处为1,所以都是1
    对于一个 d d d层的网络
    在这里插入图片描述
    从前向传播角度,为保持信息流畅(information flowing),假设
    在这里插入图片描述
    同样,反向传播时假设
    在这里插入图片描述
    联系上两个条件,以及(6),(7)式,可以得到
    在这里插入图片描述
    作为以上两个限制的比较,再有
    在这里插入图片描述
    假设每层宽度和初始化参数相同,有
    在这里插入图片描述
    此处设置(1)中的标准初始化满足一下性质
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述在这里插入图片描述

    对比实验

    在这里插入图片描述
    -双曲正切的激活值标准直方图。上图是原始的初始化,下图是正则初始化。
    -正则初始化的网络的各层的激活值较为一致,且取值均比原始的标准初始化要小。
    在这里插入图片描述
    -双曲正切的反向传播梯度标准直方图。上图是原始的初始化,下图是正则初始化。
    -正则初始化的网络的各层的梯度较为一致,且取值均比原始的标准初始化要小。
    -作者怀疑不同层上具有不同的梯度可能会导致病态或训练较慢
    在这里插入图片描述
    -不同层权重梯度标准直方图(***这张图其实没看懂,权重梯度这里是指什么?***)。上图是原始的初始化,下图是正则初始化。
    -图中显示初始化后立刻激活,虽然使用正则初始化,反向传播梯度值减小,但权重梯度并没有减小。

    在这里插入图片描述
    -不使用新的初始化时,softsign的错误率更低。
    -使用正则初始化明显降低了错误率

    在这里插入图片描述
    新的初始化权重梯度的方差比较一致。
    在这里插入图片描述
    ----Shapeset-2*3在线训练期间,各种激活函数和初始化方法测试错误率对比。
    ----未使用正则初始化时,Softsign错误率最低。
    -使用正则初始化时,Tanh错误率最低。
    ----总的来说,都不如预训练的错误率低。

    参考文献

    1. 聊一聊深度学习的weight initialization - 知乎 (zhihu.com)
    2. 深度学习中神经网络的几种权重初始化方法_天泽28的专栏-CSDN博客_神经网络初始化
    3. 神经网络参数初始化小结
    4. 卷积神经网络初始化方法总结
    5. 卷积神经网络的权值初始化方法
    展开全文
  • 文章目录标准初始化方法形式激活值和梯度特性实验Xavier初始化形式满足Glorot条件的初始化激活值和梯度特性实验Xavier初始化的缺点 Understanding the difficulty of training deep feedforward neural networks by ...


    Understanding the difficulty of training deep feedforward neural networks by Xavier Glorot, Yoshua Bengio in AISTATS 2010.

    本文介绍一下深度学习参数初始化问题中耳熟能详的参数初始化方法——Xavier(发音[‘zeɪvɪr])初始化。

    大家应该感觉到一般的深度学习文章上来就是实验,告诉读者这个实验结果好,然后由实验结果再反向给出一些无从验证的可能对可能不对的原因。而这篇文章虽然整体来看比较简单,但结构非常严谨:首先通过实验分析标准初始化方法的问题;然后根据两个目标——状态方差和梯度方差保持不变推导出参数的特点,给出Xavier初始化方法的具体形式;最后通过实验验证Xavier初始化的效果确实不错。

    在开始阅读下面的内容之前,我们需要牢记参数初始化的目的是为了让神经网络在训练过程中学习到有用的信息,这意味着参数梯度不应该为0。而我们知道在全连接的神经网络中,参数梯度和反向传播得到的状态梯度以及入激活值有关——激活值饱和会导致该层状态梯度信息为0,然后导致下面所有层的参数梯度为0;入激活值为0会导致对应参数梯度为0。所以如果要保证参数梯度不等于0,那么参数初始化应该使得各层激活值不会出现饱和现象且激活值不为0。我们把这两个条件总结为参数初始化条件:

    • 初始化必要条件一:各层激活值不会出现饱和现象。
    • 初始化必要条件二:各层激活值不为0。

    需要说明的是这篇论文只研究了解决分类问题的5层的全连接神经网络,每个隐层的神经元个数为1000,并且仅探讨了三种激活函数:sigmoid、tanh、softsign。

    标准初始化方法

    形式

    把权重矩阵初始化为如下形式: W i j ∼ U [ − 1 n , 1 n ] W_{i j} \sim U\left[-\frac{1}{\sqrt{n}}, \frac{1}{\sqrt{n}}\right] WijU[n 1,n 1]其中 U [ − a , a ] U[−a,a] U[a,a]是区间 ( − a , a ) (−a,a) (a,a)上的均匀分布, n n n是入神经网络的大小。易知 Var ⁡ ( W i j ) = 1 3 n \operatorname{Var}\left(W_{i j}\right)=\frac{1}{3 n} Var(Wij)=3n1在深入介绍标准初始化之前,首先给出随机变量方差的两个性质:

    • 假设随机变量X和随机变量Y相互独立,则有 Var ⁡ ( X + Y ) = Var ⁡ ( X ) + Var ⁡ ( Y ) \operatorname{Var}(X+Y)=\operatorname{Var}(X)+\operatorname{Var}(Y) Var(X+Y)=Var(X)+Var(Y)
    • 假设随机变量X和随机变量Y相互独立,且E(X)=E(Y)=0,则有 Var ⁡ ( X Y ) = Var ⁡ ( X ) Var ⁡ ( Y ) \operatorname{Var}(X Y)=\operatorname{Var}(X) \operatorname{Var}(Y) Var(XY)=Var(X)Var(Y)

    神经网络的隐层状态计算表达式: z i = W i h i − 1 , i = 0 , 1 , … \mathbf{z}^{\mathbf{i}}=W^{i} \mathbf{h}^{\mathbf{i}-\mathbf{1}}, i=0,1, \ldots zi=Wihi1,i=0,1,其中 h 0 = x \mathbf{h}^{0}=\mathbf{x} h0=x激活值计算表达式: h i = f ( z i ) , i = 1 , 2 , … \mathbf{h}^{\mathbf{i}}=f\left(\mathbf{z}^{i}\right), i=1,2, \ldots hi=f(zi),i=1,2,论文中的符号和我的有些区别:论文中用 z z z表示激活值, s s s表示状态值。我这里按自己的习惯来写。
    现在把输入 x x x的每一维度 x x x看做一个随机变量,并且假设 E ( x ) = 0 E(x)=0 E(x)=0 V a r ( x ) = 1 Var(x)=1 Var(x)=1。假设 W W W x x x相互独立,则隐层状态的方差为 Var ⁡ ( z k ) = Var ⁡ ( ∑ i = 0 n W k i x i ) = ∑ i = 0 n Var ⁡ ( W k i ) Var ⁡ ( x i ) = ∑ i = 0 n Var ⁡ ( W k i ) = ∑ i = 0 n 1 3 n = 1 3 \begin{aligned} \operatorname{Var}\left(z_{k}\right) &=\operatorname{Var}\left(\sum_{i=0}^{n} W_{k i} x_{i}\right) \\ &=\sum_{i=0}^{n} \operatorname{Var}\left(W_{k i}\right) \operatorname{Var}\left(x_{i}\right) \\ &=\sum_{i=0}^{n} \operatorname{Var}\left(W_{k i}\right) \\ &=\sum_{i=0}^{n} \frac{1}{3 n} \\ &=\frac{1}{3} \end{aligned} Var(zk)=Var(i=0nWkixi)=i=0nVar(Wki)Var(xi)=i=0nVar(Wki)=i=0n3n1=31可以看出标准初始化方法得到一个非常好的特性:隐层的状态的均值为0,方差为常量 1 3 \frac{1}{3} 31,和网络的层数无关,这意味着对于sigmoid函数来说,自变量落在有梯度的范围内。
    但是因为sigmoid激活值都是大于0的,会导致下一层的输入不满足 E ( ⋅ ) = 0 E(\cdot)=0 E()=0。其实标准初始化也只适用于满足下面将要提到的Glorot假设的激活函数,比如tanh。

    激活值和梯度特性实验

    初始化后的激活值和梯度特性
    首先下面以tanh神经网络为例,查看激活值和梯度的分布情况。

    • 各层激活值直方图如下:
      在这里插入图片描述
      可以看出,激活值的方差逐层递减,这可以通过把公式(2)带入公式(15)进行解释。
    • 各层反向传播的梯度(关于状态的梯度)的分布情况:
      在这里插入图片描述
      状态的梯度在反向传播过程中越往下梯度越小(因为方差越来越小)。这可以用公式(2)代入(16)进行解释。
    • 各层参数梯度的分布情况
      在这里插入图片描述
      参数梯度的方差和层数基本无关,这可以通过公式公式(2)代入(17)进行解释。另外这幅图应该和后面会出现的Xavier初始化对应的图作比较,会发现各层的标准初始化参数梯度小了一个数量级,可以通过公式(2)(20)和公式(17)进行解释。

    训练过程中的激活值特性
    作者探究了三种激活函数对应的神经网络在训练过程中各层激活值的分布情况,得到下面的结果图。

    • sigmoid神经网络在每层的激活值均值和标准偏差在训练过程中的演变情况
      在这里插入图片描述
      这幅图比较有意思的是Layer 4的激活值在训练开始没多久就变成0(均值为0并且方差为0说明大多数激活值都为0),即进入饱和状态;而在最后又慢慢跳出饱和状态。
      为什么会出现这种现象呢?读者可以自己想一想。在原论文中有作者给的解释。
    • tanh神经网络和sofsign神经网络在训练过程中每层激活值的分布情况
      在这里插入图片描述
      可以看到在tanh神经网络中第一层最先饱和,然后是后面各层按顺序出现饱和。softsign神经网络中饱和现象并不严重,而且各层差不多同时出现饱和情况。
      作者提到出现这种现象的原因有待于探究。

    训练完成后的激活值特性

    • 训练完成后tanh神经网络和softsign神经网络各层的激活值的直方图
      在这里插入图片描述
      tanh神经网络的低层出现了饱和现象:-1和1对应的神经元非常多。

    Xavier初始化

    在文章开始部分我们给出了参数初始化的必要条件。但是这两个条件只保证了训练过程中可以学到有用的信息——参数梯度不为0。而Glorot认为:优秀的初始化应该使得各层的激活值和状态梯度的方差在传播过程中的方差保持一致: ∀ ( i , j ) , Var ⁡ ( h i ) = Var ⁡ ( h j ) ∀ ( i , j ) , Var ⁡ ( ∂ cos ⁡ t ∂ z i ) = Var ⁡ ( ∂ cos ⁡ t ∂ z j ) \begin{aligned} \forall(i, j), \operatorname{Var}\left(h^{i}\right) &=\operatorname{Var}\left(h^{j}\right) \\ \forall(i, j), \operatorname{Var}\left(\frac{\partial \cos t}{\partial z^{i}}\right) &=\operatorname{Var}\left(\frac{\partial \cos t}{\partial z^{j}}\right) \end{aligned} (i,j),Var(hi)(i,j),Var(zicost)=Var(hj)=Var(zjcost)
    我们把这两个条件称为Glorot条件。

    形式

    在某些假设下反向传播梯度和参数梯度表达式
    首先给出关于状态的梯度和关于参数的梯度的表达式: ∂ cos ⁡ t ∂ z k i = f ′ ( z k i ) ( W , , k i + 1 ) T ∂ cos ⁡ t ∂ z i + 1 \frac{\partial \cos t}{\partial z_{k}^{i}}=f \prime\left(z_{k}^{i}\right)\left(W_{,, k}^{i+1}\right)^{T} \frac{\partial \cos t}{\partial \mathbf{z}^{i+1}} zkicost=f(zki)(W,,ki+1)Tzi+1cost ∂ C o s t ∂ w l , k i = h l i − 1 ∂ cos ⁡ t ∂ z k i \frac{\partial C o s t}{\partial w_{l, k}^{i}}=h_{l}^{i-1} \frac{\partial \cos t}{\partial z_{k}^{i}} wl,kiCost=hli1zkicost我们做如下假设:

    • 输入的每个特征方差一样: V a r ( x ) Var(x) Var(x)
    • 激活函数对称:这样就可以假设每层的输入均值都是0;
    • f ′ ( 0 ) = 1 f′(0)=1 f(0)=1
    • 初始时,状态值落在激活函数的线性区域: f ′ ( s k i ) ≈ 1 f \prime\left(s_{k}^{i}\right) \approx 1 f(ski)1

    后三个都是关于激活函数的假设,我们称为Glorot激活函数假设。

    于是: Var ⁡ ( h l i ) = Var ⁡ ( f ( z l i ) ) = Var ⁡ ( z l i ) = Var ⁡ ( ∑ k = 1 n i − 1 W l k i h k i − 1 ) = ∑ k = 1 n i − 1 Var ⁡ ( W l k i h k i − 1 ) = n i − 1 Var ⁡ ( W l k i ) Var ⁡ ( h i − 1 ) = n i − 1 Var ⁡ ( W i ) Var ⁡ ( h i − 1 ) = Var ⁡ ( x ) ∏ i ′ = 1 i n i ′ − 1 Var ⁡ ( W i ′ ) \begin{aligned} \operatorname{Var}\left(h_{l}^{i}\right) &=\operatorname{Var}\left(f\left(z_{l}^{i}\right)\right) \\ &=\operatorname{Var}\left(z_{l}^{i}\right) \\ &=\operatorname{Var}\left(\sum_{k=1}^{n_{i-1}} W_{l k}^{i} h_{k}^{i-1}\right) \\ &=\sum_{k=1}^{n_{i-1}} \operatorname{Var}\left(W_{l k}^{i} h_{k}^{i-1}\right) \\ &=n_{i-1} \operatorname{Var}\left(W_{l k}^{i}\right) \operatorname{Var}\left(h^{i-1}\right) \\ &=n_{i-1} \operatorname{Var}\left(W^{i}\right) \operatorname{Var}\left(h^{i-1}\right) \\ &=\operatorname{Var}(x) \prod_{i'=1}^{i} n_{i'-1} \operatorname{Var}\left(W^{i'}\right) \end{aligned} Var(hli)=Var(f(zli))=Var(zli)=Var(k=1ni1Wlkihki1)=k=1ni1Var(Wlkihki1)=ni1Var(Wlki)Var(hi1)=ni1Var(Wi)Var(hi1)=Var(x)i=1ini1Var(Wi)对于一个d层的网络,由公式(10)可以推出: Var ⁡ ( ∂ C o s t ∂ z i ) = Var ⁡ ( ( W ⋅ , k i + 1 ) T ∂ cos ⁡ t ∂ z i + 1 ) = Var ⁡ ( ∑ j = 1 n i + 1 W i + 1 ∂ cos ⁡ t ∂ z i + 1 ) = n i + 1 Var ⁡ ( W i + 1 ∂ cos ⁡ t ∂ z i + 1 ) = n i + 1 Var ⁡ ( W i + 1 ) Var ⁡ ( ∂ C o s t ∂ z i + 1 ) = n i + 1 n i + 2 Var ⁡ ( W i + 1 ) Var ⁡ ( W i + 2 ) Var ⁡ ( ∂ cos ⁡ t ∂ z i + 2 ) = n i + 1 n i + 2 ⋯ n d Var ⁡ ( W i + 1 ) Var ⁡ ( W i + 2 ) ⋯ Var ⁡ ( W d ) Var ⁡ ( ∂ cos ⁡ t ∂ z d ) = Var ⁡ ( ∂ cos ⁡ t ∂ z d ) ∏ i ′ = i + 1 d n i ′ Var ⁡ ( W i ′ ) \begin{aligned} \operatorname{Var}\left(\frac{\partial C o s t}{\partial z^{i}}\right) &=\operatorname{Var}\left(\left(W_{\cdot, k}^{i+1}\right)^{T} \frac{\partial \cos t}{\partial \mathbf{z}^{i+1}}\right) \\ &=\operatorname{Var}\left(\sum_{j=1}^{n_{i+1}} W^{i+1} \frac{\partial \cos t}{\partial z^{i+1}}\right) \\ &=n_{i+1} \operatorname{Var}\left(W^{i+1} \frac{\partial \cos t}{\partial z^{i+1}}\right) \\ &=n_{i+1} \operatorname{Var}\left(W^{i+1}\right) \operatorname{Var}\left(\frac{\partial C o s t}{\partial z^{i+1}}\right) \\& =n_{i+1} n_{i+2} \operatorname{Var}\left(W^{i+1}\right) \operatorname{Var}\left(W^{i+2}\right) \operatorname{Var}\left(\frac{\partial \cos t}{\partial z^{i+2}}\right) \\ &=n_{i+1} n_{i+2} \cdots n_{d} \operatorname{Var}\left(W^{i+1}\right) \operatorname{Var}\left(W^{i+2}\right) \cdots \operatorname{Var}\left(W^{d}\right) \operatorname{Var}\left(\frac{\partial \cos t}{\partial z^{d}}\right) \\ &=\operatorname{Var}\left(\frac{\partial \cos t}{\partial z^{d}}\right) \prod_{i'=i+1}^{d} n_{i'} \operatorname{Var}\left(W^{i'}\right) \end{aligned} Var(ziCost)=Var((W,ki+1)Tzi+1cost)=Var(j=1ni+1Wi+1zi+1cost)=ni+1Var(Wi+1zi+1cost)=ni+1Var(Wi+1)Var(zi+1Cost)=ni+1ni+2Var(Wi+1)Var(Wi+2)Var(zi+2cost)=ni+1ni+2ndVar(Wi+1)Var(Wi+2)Var(Wd)Var(zdcost)=Var(zdcost)i=i+1dniVar(Wi)由公式(11)(12)(13)可以推出:
    Var ⁡ ( ∂ C ost ∂ w i ) = Var ⁡ ( h i − 1 ) ⋅ Var ⁡ ( ∂ cos ⁡ t ∂ z i ) = Var ⁡ ( x ) ∏ i ′ = 1 i − 1 n i ′ − 1 Var ⁡ ( W i ′ ) ⋅ Var ⁡ ( ∂ Cos ⁡ t ∂ z d ) ∏ i ′ = i + 1 d n i ′ Var ⁡ ( W i ′ ) = Var ⁡ ( x ) Var ⁡ ( ∂ cost ⁡ ∂ z d ) ∏ i ′ = 1 i − 1 n i ′ − 1 Var ⁡ ( W i ′ ) ⋅ ∏ i ′ = i + 1 d n i ′ , Var ⁡ ( W i ′ ) \begin{aligned} \operatorname{Var}\left(\frac{\partial C \text {ost}}{\partial w^{i}}\right)& =\operatorname{Var}\left(h^{i-1}\right) \cdot \operatorname{Var}\left(\frac{\partial \cos t}{\partial z^{i}}\right) \\ & =\operatorname{Var}(x) \prod_{i'=1}^{i-1} n_{i'-1} \operatorname{Var}\left(W^{i'}\right) \cdot \operatorname{Var}\left(\frac{\partial \operatorname{Cos} t}{\partial z^{d}}\right) \prod_{i'=i+1}^{d} n_{i'} \operatorname{Var}\left(W^{i'}\right) \\ & =\operatorname{Var}(x) \operatorname{Var}\left(\frac{\partial \operatorname{cost}}{\partial z^{d}}\right) \prod_{i'=1}^{i-1} n_{i'-1} \operatorname{Var}\left(W^{i'}\right) \cdot \prod_{i'=i+1}^{d} n_{i'}, \operatorname{Var}\left(W^{i'}\right) \end{aligned} Var(wiCost)=Var(hi1)Var(zicost)=Var(x)i=1i1ni1Var(Wi)Var(zdCost)i=i+1dniVar(Wi)=Var(x)Var(zdcost)i=1i1ni1Var(Wi)i=i+1dni,Var(Wi)我们考虑一种简单的网络:如果现在令所有层的大小一样并且对所有层采用相同的初始化方式,那么有: Var ⁡ ( h i ) = Var ⁡ ( x ) [ n Var ⁡ ( W ) ] i \operatorname{Var}\left(h^{i}\right)=\operatorname{Var}(x)[n \operatorname{Var}(W)]^{i} Var(hi)=Var(x)[nVar(W)]i ∀ i , Var ⁡ ( ∂ cos ⁡ t ∂ z i ) = Var ⁡ ( ∂ cos ⁡ t ∂ z d ) [ n V a r ( W ) ] d − i \forall i, \operatorname{Var}\left(\frac{\partial \cos t}{\partial z^{i}}\right)=\operatorname{Var}\left(\frac{\partial \cos t}{\partial z^{d}}\right)[n V a r(W)]^{d-i} i,Var(zicost)=Var(zdcost)[nVar(W)]di ∀ i , Var ⁡ ( ∂ C o s t ∂ w i ) = Var ⁡ ( x ) Var ⁡ ( ∂ Cost ⁡ ∂ z d ) [ n Var ⁡ ( W ) ] d − 1 \forall i, \operatorname{Var}\left(\frac{\partial C o s t}{\partial w^{i}}\right)=\operatorname{Var}(x) \operatorname{Var}\left(\frac{\partial \operatorname{Cost}}{\partial z^{d}}\right)[n \operatorname{Var}(W)]^{d-1} i,Var(wiCost)=Var(x)Var(zdCost)[nVar(W)]d1由(15)(16)(17)可以看出激活值方差和层数相关,反向传播的梯度方差和层数是有关系的,而参数梯度的方差和层数无关。前面也提到了这可以解释图2和图3中出现的现象。

    公式(16)对应原文的公式(13),原文中的公式(13)应该是有误的。

    满足Glorot条件的初始化

    为了满足公式(8)(9),结合公式(12)(13),我们将Glorot条件转换成: ∀ i , n i V a r ( W i + 1 ) = 1 ∀ i , n i + 1 Var ⁡ ( W i + 1 ) = 1 \begin{aligned} \forall i, n_{i} V a r\left(W^{i+1}\right) &=1 \\ \forall i, n_{i+1} \operatorname{Var}\left(W^{i+1}\right) &=1 \end{aligned} i,niVar(Wi+1)i,ni+1Var(Wi+1)=1=1作者取均值来同时满足(17)(18): ∀ i , Var ⁡ ( W i + 1 ) = 2 n i + n i + 1 \forall i, \operatorname{Var}\left(W^{i+1}\right)=\frac{2}{n_{i}+n_{i+1}} i,Var(Wi+1)=ni+ni+12这个方差对应如下均匀分布: W ∼ U [ − 6 n i + n i + 1 , 6 n i + n i + 1 ] W \sim U\left[-\frac{\sqrt{6}}{\sqrt{n_{i}+n_{i+1}}}, \frac{\sqrt{6}}{\sqrt{n_{i}+n_{i+1}}}\right] WU[ni+ni+1 6 ,ni+ni+1 6 ]简单网络:
    现在假设各层的大小一样,则由公式(19)可知各层的参数方差一样 Var ⁡ ( W ) = 1 n \operatorname{Var}(W)=\frac{1}{n} Var(W)=n1把(20)代入公式(15)(16)可以很容易看出,激活值的方差和层数无关,反向传播梯度的方差和层数无关。在这个简单的网络中,Xavier初始化确实保证了Glorot条件。

    激活值和梯度特性实验

    下面的实验都是在tanh神经网络上进行的。
    初始化后的激活值和梯度特性
    在标准化初始化中,我们绘制了tanh激活函数的初始激活值、初始反向传播梯度和初始参数梯度。这里同样以tanh激活函数为例,讨论Xavier初始化的这些属性图。

    • 初始激活值
      各层激活值的方差不变,确实满足了Glorot条件一。
      在这里插入图片描述
    • 初始反向梯度
      反向梯度的方差不变,确实满足了Glorot条件二。
      在这里插入图片描述
    • 初始参数梯度
      参数梯度的方差也符合我们的预期:方差不变。
      但是Xavier初始化得到的参数梯度比标准初始化得到的参数梯度大了一个数量级。
      在这里插入图片描述
      训练过程中的激活值特性
      在这里插入图片描述
      训练过程中标准初始化和Xavier初始化的参数梯度的标准偏差比较
      在这里插入图片描述
      训练过程中中标准初始化和Xavier初始化的测试误差比较
      在这里插入图片描述

    Xavier初始化的缺点

    • 因为Xavier的推导过程是基于几个假设的,其中一个是激活函数是线性的。这并不适用于ReLU激活函数。另一个是激活值关于0对称,这个不适用于sigmoid函数和ReLU函数。所以可以看到图11中并没有对sogmoid网络应用Xavier初始化。

    可以实验验证sigmoid激活函数用Xavier初始化后的初始化激活值、反向梯度、参数梯度特性:
    我以MNIST做训练数据,发现标准初始化和Xavier初始化得到的初始激活、参数梯度特性是一样的。激活值的方差逐层递减,参数梯度的方差也逐层递减。

    展开全文
  • Xavier初始化方法简要笔记

    千次阅读 2018-05-02 21:04:54
    Xavier[发音 ‘zeɪvɪr]初始化方法是深度学习中比较常用和有效的一种权重初始化方法,其名字是以其发明者命名的。 它的基本设计原则是为了使网络中的信息更好地流动,网络各层激活值及状态梯度的方差应尽量保持...
  • 深度学习Pytorch-权值初始化(Xavier和Kaiming)
  • 装载自:https://blog.csdn.net/shuzfan/article/details/51338178 “Xavier初始化方法是一种很有效的神经网络初始化方法方法来源于2010年的一篇论文《Understanding the difficulty...
  • PyTorch 提供的 10 种权重初始化方法 4.1 Xavier均匀分布 4.2 Xavier标准正态分布 4.3 Kaiming均匀分布 4.4 Kaiming标准正态分布 4.5 均匀分布 4.6 正态分布 4.7 常数分布 4.8 单位矩阵初始化 4.9 正交矩阵初始化 ...
  • Xavier初始化方法是一种很有效的神经网络初始化方法方法来源于2010年的一篇论文《Understanding the difficulty of training deep feedforward neural networks》,可惜直到近两年,这个方法才逐渐得到更多人...
  • 常用的初始化方法有四种,分别是高斯初始化Xavier初始化和MSRA初始化。它们一般都把偏置初始化为0,但对权值进行随机初始化。其中,高斯初始化比较容易理解,就是根据某个高斯分布来初始化权值,但均值通常选0,...
  • 目录前言初始化的重要性KL散度合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义...
  • 深度学习——Xavier初始化方法详细介绍,本文介绍一下深度学习参数初始化问题中耳熟能详的参数初始化方法——Xavier初始化
  • Pytorch权重初始化方法——Kaiming、Xavier 结论 结论写在前。Pytorch线性层采取的默认初始化方式是Kaiming初始化,这是由我国计算机视觉领域专家何恺明提出的。我的探究主要包括: 为什么采取Kaiming初始化? 考察...
  • 今天学了一下Xavier初始化,记录一下. 1.缘起 我们将梯度和每一层的输出都看做随机变量。 为了让模型稳定,假如我们期望的事情是让每一层的输出的期望和方差一直保持一致,也就是: ∀i,t:正向时:E[hit]=0,Var[hit]...
  • Xavier权重初始化方法理解

    千次阅读 2019-03-14 09:48:27
    转载:https://www.jiqizhixin.com/articles/2018-01-08-3
  • 通过使用三种不同的初始化方法:全0初始化、随机初始化和He初始化,比较改变初始化方法对最终预测效果的影响。 实验原理: 为什么要初始化权重 权重初始化的目的是防止在深度神经网络的正向传播过程中层激活函数的...
  • Xavier初始化方法

    2017-08-14 15:05:19
    Xavier初始化方法是一种很有效的神经网络初始化方法方法来源于2010年的一篇论文《Understanding the difficulty of training deep feedforward neural networks》,可惜直到近两年,这个方法才逐渐得到更多人...
  • 参数初始化就是这么一个容易被忽视的重要因素,因为不仅使用者对其重要性缺乏概念,而且这些操作都被TF、pytorch这些框架封装了,你可能不知道的是,糟糕的参数初始化是会阻碍复杂... 早期的参数初始化方法普遍是将...
  • 深度学习之参数初始化(一)——Xavier初始化

    万次阅读 多人点赞 2017-06-10 18:28:19
    Understanding the difficulty of training deep ...本文介绍一下深度学习参数初始化问题中耳熟能详的参数初始化方法——Xavier(发音[‘zeɪvɪr])初始化。大家应该感觉到一般的深度学习文章上来就是实验,
  • Pytorch 参数初始化以及Xavier初始化

    万次阅读 2018-08-25 12:59:00
    def _initialize_weights(self): ...可以再网络的类中定义初始化初始化函数 通过net._initialize_weights()进行初始化 Xavier的具体讲解可以参考 http://www.cnblogs.com/hejunlin1992/p/8723816.html
  • 初始化权值参数 选择一个合适的梯度下降算法(例如:Adam,RMSprop等) 重复下面的迭代过程: 输入的正向传播 计算loss function 的值 反向传播,计算loss function 相对于权值参数的梯度值 根据选择的梯度...
  • 初始化方法: 假设激活函数关于0对称,且主要针对于全连接神经网络。适用于tanh和softsign 论文地址:Understanding the difficulty of training deep feedforward neural networks 参考资料:深度学习之参数...
  • Lesson 13.5 Xavier方法与kaiming方法(HE初始化)   在进行了一系列的理论推导和代码准备工作之后,接下来,我们介绍参数初始化优化方法,也就是针对tanh和Sigmoid激活函数的Xavier方法,以及针对ReLU激活函数的...
  • Xavier初始化和He初始化

    万次阅读 多人点赞 2018-11-22 10:03:30
    Xavier初始化: 条件:正向传播时,激活值的方差保持不变;反向传播时,关于状态值的梯度的方差保持不变。 初始化方法: W∼U[−6ni+ni+1,6ni+ni+1]W\sim U[-\frac{\sqrt6}{\sqrt{n_i+n_{i+1}}},\frac{\sqrt6...
  • 权值初始化方法Xavier与MSRA

    千次阅读 2018-09-18 11:28:12
    首先介绍一下Xavier初始化方法比直接用高斯分布进行初始化W的优势所在:  一般的神经网络在前向传播时神经元输出值的方差会不断增大,而使用Xavier方法理论上可以保证每层神经元输入输出方差一致。  这里先介绍...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,836
精华内容 3,534
关键字:

初始化方法xavier