Pytorch深度学习实战2-1:详细推导Xavier参数初始化(附Python实现)

目录

  • 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)=σ(Wlal1bl)

可得

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[Wlal1bl]

初始阶段第 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_{k=1}^{n_{l-1}}{w_{1,k}^{l}a_{k}^{l-1}} \right] z1lz2lznll = w1,1lw2,1lwnl,1lw1,2lw2,2lwnl,2lw1,nl1lw2,nl1lwnl,nl1l a1l1a2l1anl1l1 var[zil]=var[k=1nl1w1,klakl1]

考虑到 w i , j l w_{i,j}^{l} wi,jl与前一层激活值 a l − 1 \boldsymbol{a}^{l-1} al1独立,所以

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_{k=1}^{n_{l-1}}{w_{i,k}^{l}a_{k}^{l-1}} \right]\\& =\sum_{k=1}^{n_{l-1}}{\mathrm{var}\left[ w_{i,k}^{l}a_{k}^{l-1} \right]}\\&=\sum_{k=1}^{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[k=1nl1wi,klakl1]=k=1nl1var[wi,klakl1]=k=1nl1(var[wi,kl]var[akl1]+var[wi,kl]E2[akl1]+var[akl1]E2[wi,kl])

根据激活函数对称性,可令 W l \boldsymbol{W}^l Wl a l − 1 \boldsymbol{a}^{l-1} al1均值为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]=nl1var[wi,1l]var[a1l1],改写成矩阵形式

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]nl1var[Wl]var[al1]

结合 a 0 = x \boldsymbol{a}^0=\boldsymbol{x} a0=x可递推得到

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_{k=1}^l{n_{k-1}\mathrm{var}\left[ \boldsymbol{W}^k \right]}} var[al]var[x]k=1lnk1var[Wk]

2.2 反向传播阶段

根据 δ l = ( W l + 1 ) T δ l + 1 ⊙ σ ′ ( z l ) \boldsymbol{\delta }^l=\left( \boldsymbol{W}^{l+1} \right) ^T\boldsymbol{\delta }^{l+1}\odot \sigma '\left( \boldsymbol{z}^l \right) δl=(Wl+1)Tδl+1σ(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_{l+1}\mathrm{var}\left[ \boldsymbol{W}^{l+1} \right] \mathrm{var}\left[ \boldsymbol{\delta }^{l+1} \right] var[δl]nl+1var[Wl+1]var[δl+1]

结合 δ 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_{k=l+1}^L{n_k\mathrm{var}\left[ \boldsymbol{W}^k \right]}} var[δl]y~Ek=l+1Lnkvar[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]=1nl1var[Wl]=1

由于第 l l l层的输入神经元个数 n l − 1 n_{l-1} nl1和输出神经元个数 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]=nl1+nl2

所以网络连接权采样自服从方差满足上式的分布即可,例如

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) WN(0,nl1+nl2)orWU(nl1+nl6 ,nl1+nl6 )

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(loc=mu, scale=sigma, 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(), facecolor='g')plt.xlim([-2, 2])plt.ylim([0, 1000000])plt.yticks([])
plt.show()

如下所示
在这里插入图片描述
可以看出各层输出方差基本一致,实现了良好的初始化效果

完整工程代码请联系下方博主名片获取


🔥 更多精彩专栏

  • 《ROS从入门到精通》
  • 《Pytorch深度学习实战》
  • 《机器学习强基计划》
  • 《运动规划实战精讲》

👇源码获取 · 技术交流 · 抱团学习 · 咨询分享 请联系👇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/173906.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单片机毕设实物买的成品,论文是自己查资料和照着实物写的

单片机毕设实物买的成品,论文是自己查资料和照着实物写的,算学术不端吗? 很多人的想法可能是这样的: 一般来说,毕业论文是独立完成的学术研究,需要表明作者自己的思考和研究成果,应该包括自己的…

Google Shopping Action

Google Shopping Action是Google推出的一项在线购物服务,可以帮助零售商将产品推广和销售到Google平台上的消费者中。通过Google Shopping Action,用户可以在谷歌搜索页面上直接购买商品,而不需要离开搜索结果页面。 Google Shopping Action的…

饺子馆外卖点餐系统小程序效果如何

餐饮行业所涵盖的细分类目非常广,同时又是经济发展的重要支撑,市场规模非常高。饺子是很多人非常喜欢吃的食物,尤其过年的时候,必是少不了几碗饺子,平时也有大量人前往饺子馆。 但相对比火锅、炒菜馆则少些竞争力&…

原创文章生成器-批量原文高质量伪原创

在信息爆炸的时代,创作者们面临的挑战愈发严峻。写一篇原创文章,不仅需要脑洞大开,还得担心自己的文字是否能够迎合读者口味。原创文章生成器只需输入标题或关键词,即可轻松生成原创文章。而与此同时,147SEO改写软件也…

Vatee万腾的数字创新征途:vatee科技力量的独特奇点

在数字化的时代浪潮中,Vatee万腾如一颗耀眼的明星,以其独特的科技奇点引领着数字创新的征途。无论是在人工智能、大数据、云计算,还是智能化领域,Vatee万腾都展现出了与众不同的创新力量,为科技征途描绘了独一无二的奇…

【Springboot系列】SpringBoot整合WebSocket,既然如此简单(含源码)

文章目录 前言:什么是WebSocket?Spring Boot中的WebSocket支持WebSocket和HTTP优劣势WebSocket的优势:1.实时性:2.较低的延迟:3.较小的数据传输量:4.更好的兼容性: HTTP的优势:1.简单…

教师如何高质量备课

备课是教学工作中不可或缺的一部分。高质量的备课不仅可以提高课堂效率,还可以更好地激发学生的学习兴趣和积极性。那么,如何高质量备课呢? 深入了解学生 备课的目的是教授知识,让学生掌握知识。因此,了解学生的需求和…

「直播预告」替代 Oracle,我们还有多长的路要走?

数字经济浪潮席卷全球,我国数字经济也进入快速发展阶段,作为数字化重要载体,国产软件的重要性不言而喻。近年来,国际局势复杂多变,在客观要求和主观需求的双重驱动下,核心技术自主可控的紧迫性也愈加凸显。…

​使用PotPlayer播放器查看软解和硬解4K高清视频时的CPU及GPU占用情况​

目录 1、问题说明 2、PotPlayer播放器介绍 3、视频的软解与硬解 4、使用PotPlayer查看4K高清视频软解和硬解时的CPU占用情况 4.1、使用软解时CPU和GPU占用情况 4.2、使用硬解时CPU和GPU占用情况 5、最后 VC常用功能开发汇总(专栏文章列表,欢迎订阅…

学嵌入式,已经会用stm32做各种小东西了,下一步是什么

学嵌入式,已经会用stm32做各种小东西了,下一步是什么,研究stm32的内部吗? 针对题主这种类型的,首先我想提出几个技术问题。 1,除了那几个常用的外设,stm32上集成的众多外设是否都有实际的使用经…

Day58权限提升-网站权限后台漏洞第三方获取

webshell 一般我们的渗透流程就是信息收集,发现漏洞,漏洞利用,一些漏洞成功之后获得一些相应的权限,还有一些是漏洞利用成功之后并没有取得的权限,而这个权限是要通过漏洞利用之后在利用其它地方取货的权限。 权限的获…

百度人工智能培训第二天笔记

参加了百度人工智能初步培训,主要是了解一下现在人工智能的基本情况,以便后续看可以参与一些啥? 下面就继续前一天的内容记录。 一、先做电动自行车的电梯里检测 先进行图片资料的上传与标注,这个昨天的最好也说了一下。 训练完后…

sql中的left join, right join 和inner join,union 与union all的用法

left join, right join 和inner join:这些都是SQL中用来连接两个或多个表的操作。 union,union all:用于合并两个或多个 SELECT 语句的结果。 但是有时候,对于Select出来的结果集不是很清楚。 假设我们有两张表。pers…

让CHAT简单说明下软件工程师的工作性质

问CHAT:软件工程师的工作性质是什么? CHAT回复:软件工程师的工作性质主要包括以下几点: 1. 解决问题:软件工程师的很大一部分工作就是解决问题,这可能是来自客户的特定需求,也可能是软件开发过…

现货黄金走势图下载与保存

MetaTrader 4 (MT4) 是一款在全球范围内广受欢迎的现货黄金交易软件,简单性和灵活性是其深受市场欢迎的原因。它的显示界面的主要部分由品种的走势图表组成,投资者可以在其中查看实时的行情走势。屏幕左上角是市场观察窗口,当中列出了平台所有…

NABOCUL集团专注科研创新 为内源护肤、护发提供更优选择

据权威媒体报道,日本知名化妆品集团NABOCUL Cosmetics株式会社研通过多年的科技创新和内源护肤研究,创新研发Olandu、TakuMin、“CIMIVOSOTUY”等核心成分,向中国消费者传递“关爱恒久之美”的理念,更好地释放内源护肤的独特魅力,为人们内源护肤、护发提供了全新选择。 据了解,…

JVM中的双亲委派模型

双亲委派模型(Parent-Delegation Model)是Java类加载器(ClassLoader)机制的一种实现方式。它是Java中实现类加载的一种层次结构模型。 双亲委派模型的工作过程是:在Java中,每个类加载器实例都有一个父类加载…

多头注意力机制基本概念

文章目录 基本概念模型小结 基本概念 我们可以用独立学习得到的h组不同的 线性投影来变换查询、键和值。 然后,这h组变换后的查询、键和值将并行地送到注意力汇聚中。 最后,将这h个注意力汇聚的输出拼接在一起, 并且通过另一个可以学习的线性…

Keil报错_Error:CreateProcess failed,Command:‘xxx\fromelf.exe‘

1、报错信息 2、分析及解决 错误原因:fromelf.exe路径错误,无法执行命令。 发生情景:编译从另一个电脑拷贝的代码时。 解决方法: 1、当你不需要生成bin文件时,可以选择不执行这个命令。(去掉√&#xf…

每日一练2023.11.27———连续因子【PTA】

题目要求: 一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3567,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。 输入格式&#xff…