网站大量收购独家精品文档,联系QQ:2885784924

深度学习案例教程 教案8.7权重初始化实现.docx

深度学习案例教程 教案8.7权重初始化实现.docx

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

07权重初始化实现

(p35)我们来学习第七节不同初始化权重比较。在深度学习中,初始化权重是模型训练的关键步骤之一。合适的权重初始化方法可以对模型的训练速度、收敛性和泛化能力产生重要影响。不同的初始化方法具有不同的特点,了解这些方法可以帮助我们选择最合适的初始化策略。

(p36)我们回顾一下之前讲过的四种初始化方法

分别是,零初始化、随机初始化、Xavier初始化、He初始化。

(p37)前面两种方法在知识准备中,我们已经详细讨论过,下面我们重点看一下Xavier方法。Xavier初始化,是一种常用的参数初始化方法,旨在有效地初始化神经网络中的权重。它的设计思想是根据前一层和后一层的神经元数量来设置权重的初始值,以保持信号在前向传播过程中的适当范围;其核心思想是,保持输入信号和梯度的方差在不同层之间大致相等,避免在深层网络中产生梯度消失或梯度爆炸的问题。这种初始化方法有助于提供合适的梯度范围,促进网络的稳定训练和收敛。。具体而言,对于具有线性激活函数网络层,如sigmoid和正切激活函数,Xavier初始化将权重初始化为均匀分布或高斯分布,其方差取决于前一层神经元数量n和后一层神经元数量m。

对于均匀分布的Xavier初始化:

我们需要从均匀分布中,随机初始化权重矩阵W,值的范围为[-a,a],其中a是等于6除以n+m的和,然后开根号。

对于高斯分布的Xavier初始化:

需要从高斯分布中,随机初始化权重矩阵W,均值为0,他的方差variance需要设置为2除以n+m的和

这么做的原因的是这样的:

当我们训练深度神经网络时,梯度的传播是非常关键的。如果梯度在每一层传播时逐渐消失,即梯度接近于零,那么底层的参数将很难更新,导致网络难以学习有效的表示。相反,如果梯度在每一层传播时逐渐增大,即梯度爆炸,那么参数更新的幅度会非常大,导致训练不稳定甚至无法收敛。因此,要保持输入信号和梯度的方差在不同层之间大致相等,以确保在前向传播和反向传播过程中,信号和梯度能够保持合适的范围,从而促进网络的稳定训练和收敛。

如何保证输入信号和梯度的方差在不同层之间大致相等呢?在Xavier初始化中,存在递归的思想,其计算方式是递归的,即权重的初始范围是根据前一层和后一层的神经元数量进行计算的。

(p38)好的,让我们来看一个具有5层的神经网络的例子,以解释Xavier初始化是如何工作的。假设我们有一个具有以下结构的神经网络:输入层(100个神经元)-隐藏层1(80个神经元)-隐藏层2(60个神经元)-隐藏层3(40个神经元)-输出层(10个神经元)。现在,我们将使用Xavier初始化来初始化每一层的权重。

对于隐藏层1,我们需要计算它的权重初始范围。根据Xavier初始化的公式,我们需要知道前一层和后一层的神经元数量。在这种情况下,前一层是输入层,有100个神经元,后一层是隐藏层1本身,有80个神经元。根据公式,我们可以计算权重初始范围a:a=sqrt(6/(100+80))≈0.136。现在,我们可以从均匀分布[-0.136,0.136]中随机初始化隐藏层1的权重矩阵

接下来,我们继续计算隐藏层2的权重初始范围。前一层是隐藏层1,有80个神经元,后一层是隐藏层2本身,有60个神经元。我们使用相同的公式来计算权重初始范围a:a=sqrt(6/(80+60))≈0.153。然后,我们从均匀分布[-0.153,0.153]中随机初始化隐藏层2的权重矩阵。

类似地,我们可以计算隐藏层3和输出层的权重初始范围,并进行相应的初始化。

(p39)那下面呢我们通过pytorch代码来看一下,Xavier初始化权重的方法,在网络中具体怎么使用。

首先呢,这里导入了我们touch包,以及touch中NN的模块,定义了一个网络的类,然后初始化中,设置好来3个线性层,第一层线性层神经元个数从784到256,第二层从256到128,最后一层从128到10.细心的同学可能已经发现,这个就是我们手写数字数别的神经网络模型,最后是10分类。

(p40)那下面,我们就使用Xavier权重初始化的方法。我们使用nn中的init.xavier_uniform_也就是均匀分布Xavier初始化的方法,函数里面需要告诉他,你这个用在哪里,这三句传入的是self.fc123.weight,就是分别用在了前面3个线性层的权重上。

下面就可以正常forward前向传播就好了,初始化在网络定义的时候就已经设置好了。forward里面就是3层网络的计算,线性计算加激活函数,这样3次之后,输出结果。

以上就是对Xavier权重初始化方法详细的介绍。

好的,本节课我们就讲到这里。

文档评论(0)

xiaobao + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档