江门网站制作华企立方,私人做网站要多少钱,Wordpress好看模板,网站建设需求参考文档目录 1 参数初始化2 Xavier参数初始化原理2.1 前向传播阶段2.2 反向传播阶段2.3 可视化思考 3 Python实现 1 参数初始化
参数初始化在深度学习中起着重要的作用。在神经网络中#xff0c;参数初始化是指为模型中的权重和偏置项设置初始值的过程。合适的参数初始化可以帮助模型… 目录 1 参数初始化2 Xavier参数初始化原理2.1 前向传播阶段2.2 反向传播阶段2.3 可视化思考 3 Python实现 1 参数初始化
参数初始化在深度学习中起着重要的作用。在神经网络中参数初始化是指为模型中的权重和偏置项设置初始值的过程。合适的参数初始化可以帮助模型更好地学习和收敛到最优解。参数初始化的目标是使模型具有良好的初始状态以便在训练过程中快速且稳定地收敛。错误的参数初始化可能导致模型无法正常学习梯度消失或梯度爆炸等问题。
常见的参数初始化方法包括随机初始化、零初始化、正态分布初始化和均匀分布初始化等。这些方法根据不同的分布特性和模型结构选择合适的初始值。在某些情况下不同层或不同类型的参数可能需要不同的初始化策略。例如使用预训练模型时可以采用迁移学习的方法将预训练模型的参数作为初始值从而加速收敛并提高性能。
除了设置初始值外参数初始化还可以与其他优化技术相结合如学习率调整、正则化和批归一化等以进一步提高模型的性能和稳定性
举例而言如图所示是在 t a n h ( ⋅ ) \rm{tanh(\cdot)} tanh(⋅)下九层神经网络各层激活输出可以看到在网络深层激活输出逐渐衰减或保持不变 2 Xavier参数初始化原理
Xavier初始化的核心原理是保证各层网络的前向传播激活值和反向传播梯度值方差保持一致。Xavier初始化基于如下假设
输入样本独立同分布采样且各个特征维度方差相等激活函数 σ ( ⋅ ) \sigma \left( \cdot \right) σ(⋅)对称且近似线性区间满足 σ ( z ) ≈ z ⇔ σ ′ ( z ) ≈ 1 \sigma \left( \boldsymbol{z} \right) \approx \boldsymbol{z}\Leftrightarrow \sigma \left( \boldsymbol{z} \right) \approx 1 σ(z)≈z⇔σ′(z)≈1激活输入 z \boldsymbol{z} z处于激活函数的线性区间
2.1 前向传播阶段
根据 a l σ ( z l ) σ ( W l a l − 1 − b l ) \boldsymbol{a}^l\sigma \left( \boldsymbol{z}^l \right) \sigma \left( \boldsymbol{W}^l\boldsymbol{a}^{l-1}-\boldsymbol{b}^l \right) alσ(zl)σ(Wlal−1−bl)
可得 v a r [ a l ] ≈ v a r [ z l ] v a r [ W l a l − 1 − b l ] \mathrm{var}\left[ \boldsymbol{a}^l \right] \approx \mathrm{var}\left[ \boldsymbol{z}^l \right] \mathrm{var}\left[ \boldsymbol{W}^l\boldsymbol{a}^{l-1}-\boldsymbol{b}^l \right] var[al]≈var[zl]var[Wlal−1−bl]
初始阶段第 l l l层的网络权重 W l \boldsymbol{W}^l Wl的各个元素独立采样自某个分布 P P P即 [ z 1 l z 2 l ⋮ z n l l ] [ w 1 , 1 l w 1 , 2 l ⋯ w 1 , n l − 1 l w 2 , 1 l w 2 , 2 l ⋯ w 2 , n l − 1 l ⋮ ⋮ ⋱ ⋮ w n l , 1 l w n l , 2 l ⋯ w n l , n l − 1 l ] [ a 1 l − 1 a 2 l − 1 ⋮ a n l − 1 l − 1 ] ⇒ v a r [ z i l ] v a r [ ∑ k 1 n l − 1 w 1 , k l a k l − 1 ] \left[ \begin{array}{c} z_{1}^{l}\\ z_{2}^{l}\\ \vdots\\ z_{n_l}^{l}\\\end{array} \right] \left[ \begin{matrix} w_{1,1}^{l} w_{1,2}^{l} \cdots w_{1,n_{l-1}}^{l}\\ w_{2,1}^{l} w_{2,2}^{l} \cdots w_{2,n_{l-1}}^{l}\\ \vdots \vdots \ddots \vdots\\ w_{n_l,1}^{l} w_{n_l,2}^{l} \cdots w_{n_l,n_{l-1}}^{l}\\\end{matrix} \right] \left[ \begin{array}{c} a_{1}^{l-1}\\ a_{2}^{l-1}\\ \vdots\\ a_{n_{l-1}}^{l-1}\\\end{array} \right] \Rightarrow \mathrm{var}\left[ z_{i}^{l} \right] \mathrm{var}\left[ \sum_{k1}^{n_{l-1}}{w_{1,k}^{l}a_{k}^{l-1}} \right] z1lz2l⋮znll w1,1lw2,1l⋮wnl,1lw1,2lw2,2l⋮wnl,2l⋯⋯⋱⋯w1,nl−1lw2,nl−1l⋮wnl,nl−1l a1l−1a2l−1⋮anl−1l−1 ⇒var[zil]var[k1∑nl−1w1,klakl−1]
考虑到 w i , j l w_{i,j}^{l} wi,jl与前一层激活值 a l − 1 \boldsymbol{a}^{l-1} al−1独立所以 v a r [ z i l ] v a r [ ∑ k 1 n l − 1 w i , k l a k l − 1 ] ∑ k 1 n l − 1 v a r [ w i , k l a k l − 1 ] ∑ k 1 n l − 1 ( v a r [ w i , k l ] v a r [ a k l − 1 ] v a r [ w i , k l ] E 2 [ a k l − 1 ] v a r [ a k l − 1 ] E 2 [ w i , k l ] ) \begin{aligned}\mathrm{var}\left[ z_{i}^{l} \right] \mathrm{var}\left[ \sum_{k1}^{n_{l-1}}{w_{i,k}^{l}a_{k}^{l-1}} \right]\\ \sum_{k1}^{n_{l-1}}{\mathrm{var}\left[ w_{i,k}^{l}a_{k}^{l-1} \right]}\\\sum_{k1}^{n_{l-1}}{\left( \mathrm{var}\left[ w_{i,k}^{l} \right] \mathrm{var}\left[ a_{k}^{l-1} \right] \mathrm{var}\left[ w_{i,k}^{l} \right] \mathbb{E} ^2\left[ a_{k}^{l-1} \right] \mathrm{var}\left[ a_{k}^{l-1} \right] \mathbb{E} ^2\left[ w_{i,k}^{l} \right] \right)}\end{aligned} var[zil]var[k1∑nl−1wi,klakl−1]k1∑nl−1var[wi,klakl−1]k1∑nl−1(var[wi,kl]var[akl−1]var[wi,kl]E2[akl−1]var[akl−1]E2[wi,kl])
根据激活函数对称性可令 W l \boldsymbol{W}^l Wl、 a l − 1 \boldsymbol{a}^{l-1} al−1均值为0根据假设中的方差关系 { ∀ i v a r [ a i l ] v a r [ a l ] ∀ i , j v a r [ w i , j l ] v a r [ W l ] \begin{cases} \forall i\,\,\mathrm{var}\left[ a_{i}^{l} \right] \mathrm{var}\left[ \boldsymbol{a}^l \right]\\ \forall i,j\,\,\mathrm{var}\left[ w_{i,j}^{l} \right] \mathrm{var}\left[ \boldsymbol{W}^l \right]\\\end{cases} {∀ivar[ail]var[al]∀i,jvar[wi,jl]var[Wl]
上式可简化为 v a r [ z i l ] n l − 1 v a r [ w i , 1 l ] v a r [ a 1 l − 1 ] \mathrm{var}\left[ z_{i}^{l} \right] n_{l-1}\mathrm{var}\left[ w_{i,1}^{l} \right] \mathrm{var}\left[ a_{1}^{l-1} \right] var[zil]nl−1var[wi,1l]var[a1l−1]改写成矩阵形式 v a r [ a l ] ≈ n l − 1 v a r [ W l ] v a r [ a l − 1 ] \mathrm{var}\left[ \boldsymbol{a}^l \right] \approx n_{l-1}\mathrm{var}\left[ \boldsymbol{W}^l \right] \mathrm{var}\left[ \boldsymbol{a}^{l-1} \right] var[al]≈nl−1var[Wl]var[al−1]
结合 a 0 x \boldsymbol{a}^0\boldsymbol{x} a0x可递推得到 v a r [ a l ] ≈ v a r [ x ] ∏ k 1 l n k − 1 v a r [ W k ] {\mathrm{var}\left[ \boldsymbol{a}^l \right] \approx \mathrm{var}\left[ \boldsymbol{x} \right] \prod_{k1}^l{n_{k-1}\mathrm{var}\left[ \boldsymbol{W}^k \right]}} var[al]≈var[x]k1∏lnk−1var[Wk]
2.2 反向传播阶段
根据 δ l ( W l 1 ) T δ l 1 ⊙ σ ′ ( z l ) \boldsymbol{\delta }^l\left( \boldsymbol{W}^{l1} \right) ^T\boldsymbol{\delta }^{l1}\odot \sigma \left( \boldsymbol{z}^l \right) δl(Wl1)Tδl1⊙σ′(zl)可得 v a r [ δ l ] ≈ n l 1 v a r [ W l 1 ] v a r [ δ l 1 ] \mathrm{var}\left[ \boldsymbol{\delta }^l \right] \approx n_{l1}\mathrm{var}\left[ \boldsymbol{W}^{l1} \right] \mathrm{var}\left[ \boldsymbol{\delta }^{l1} \right] var[δl]≈nl1var[Wl1]var[δl1]
结合 δ L ∇ y ~ E ⊙ σ ′ ( z L ) ≈ ∇ y ~ E \boldsymbol{\delta }^L\nabla _{\boldsymbol{\tilde{y}}}E\odot \sigma \left( \boldsymbol{z}^L \right) \approx \nabla _{\boldsymbol{\tilde{y}}}E δL∇y~E⊙σ′(zL)≈∇y~E可递推得到 v a r [ δ l ] ≈ ∇ y ~ E ∏ k l 1 L n k v a r [ W k ] {\mathrm{var}\left[ \boldsymbol{\delta }^l \right] \approx \nabla _{\boldsymbol{\tilde{y}}}E\prod_{kl1}^L{n_k\mathrm{var}\left[ \boldsymbol{W}^k \right]}} var[δl]≈∇y~Ekl1∏Lnkvar[Wk]
为保证前向传播激活和反向传播梯度在网络中顺利流动应保持各层参数方差相等即满足 { n l v a r [ W l ] 1 n l − 1 v a r [ W l ] 1 \begin{cases} n_l\mathrm{var}\left[ \boldsymbol{W}^l \right] 1\\ n_{l-1}\mathrm{var}\left[ \boldsymbol{W}^l \right] 1\\\end{cases} ⎩ ⎨ ⎧nlvar[Wl]1nl−1var[Wl]1
由于第 l l l层的输入神经元个数 n l − 1 n_{l-1} nl−1和输出神经元个数 n l n_l nl一般不相等故取折中 v a r [ W l ] 2 n l − 1 n l \mathrm{var}\left[ \boldsymbol{W}^l \right] \frac{2}{n_{l-1}n_l} var[Wl]nl−1nl2
所以网络连接权采样自服从方差满足上式的分布即可例如 W ∼ N ( 0 , 2 n l − 1 n l ) o r W ∼ U ( − 6 n l − 1 n l , 6 n l − 1 n l ) \boldsymbol{W}\sim \mathcal{N} \left( 0,\frac{2}{n_{l-1}n_l} \right) \,\, \mathrm{or} \boldsymbol{W}\sim U\left( -\sqrt{\frac{6}{n_{l-1}n_l}},\sqrt{\frac{6}{n_{l-1}n_l}} \right) W∼N(0,nl−1nl2)orW∼U(−nl−1nl6 ,nl−1nl6 )
2.3 可视化思考
如图所示经过Xavier初始化后网络各层前向和反向传播时的方差保持一致 如图所示经过Xavier初始化后的测试误差通常更小 Xavier进一步指出观察层与层之间传播的激活值和梯度有利于理解深层网络的训练复杂度保持层与层之间激活值和梯度的良好流动对学习效果非常重要。尽管在Xavier初始化做出了比较苛刻的假设且在工程上很容易被违反但其在实践中被证明是有效的已经成为很多深度学习框架的默认初始化方法之一。
3 Python实现
简单实现一下Xavier初始化
def initialize_parameters_xavier(layers_dims):parameters {}L len(layers_dims)for l in range(1, L):mu 0sigma np.sqrt(2.0 / (layers_dims[l - 1] layers_dims[l]))parameters[W str(l)] np.random.normal(locmu, scalesigma, size(layers_dims[l], layers_dims[l - 1]))parameters[b str(l)] np.zeros((layers_dims[l], 1))return parameters可视化
for l in range(1, num_layers):A_pre AW parameters[W str(l)]b parameters[b str(l)]z np.dot(W, A_pre) b # z Wx bA tanh(z)print(A)plt.subplot(1, 8, l)plt.hist(A.flatten(), facecolorg)plt.xlim([-2, 2])plt.ylim([0, 1000000])plt.yticks([])
plt.show()如下所示 可以看出各层输出方差基本一致实现了良好的初始化效果
完整工程代码请联系下方博主名片获取 更多精彩专栏
《ROS从入门到精通》《Pytorch深度学习实战》《机器学习强基计划》《运动规划实战精讲》… 源码获取 · 技术交流 · 抱团学习 · 咨询分享 请联系