全连接神经网络MLP.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

全连接神经⽹络MLP

全连接神经⽹络MLP

最近开始进⾏模型压缩相关课题,复习⼀下有关的基础知识。

1.MLP简介

上图是⼀个简单的MLP,这是典型的三层神经⽹络的基本构成,LayerL1是输⼊层,LayerL2是隐含层,LayerL3是隐含层。

为了⽅便下⾯的公式描述,引⼊⼀张带公式的图。

i是input层,h是hide层,o是output层。

2.MLP正向传播

正向传播其实就是预测过程,就是由输⼊到输出的过程。

为之前的图⽚赋上初值,

上述变量中,存在着如下过程:原始输⼊-带权计算-net_h1-激活函数-out_h1

同理,可以计算另⼀个隐层net_h2,out_h2,以及输出层net_o1,net_o2,out_o1,out_o2

此时在输出端我们可以得到⼀个预测值,但是在随机初始化权值的情况下,这个值⼀定还有上升的空间,怎么才能使这个值变得更为准确呢?

3.MLP反向传播

MLP的反向传播过就是对于神经⽹络的训练过程。在这⾥,我们训练的是之前各条边上的权值。

3.1总误差(squareerror)

target为该样本的正确值,output为这⼀轮预测的值。

这⾥存在两个输出,所以,对于所有输出求和,并最终计算E_total

推⼴⾄N个输出(分类),则是把N各分类中的输出(⼀般是分类概率)误差分别求出,最终求和。

在这⾥的总误差在下⾯的应⽤时,主要看的是接受到了⼏个误差的影响(如果只接受到⼀个误差的影响,那就只使⽤⼀个误差)。

3.2输出层参数更新

以权重参数w5为例,如果我们想知道w5对整体误差产⽣了多少影响,可以⽤整体误差对w5求偏导求出:(链式求导法则)

现在我们来分别计算每个式⼦的值:

计算:

计算:

(这⼀步实际上就是对sigmoid函数求导,⽐较简单,可以⾃⼰推导⼀下)

计算:

最后三者相乘:

这样我们就计算出整体误差E(total)对w5的偏导值。

回过头来再看看上⾯的公式,我们发现:

为了表达⽅便,⽤来表⽰输出层的误差:

因此,整体误差E(total)对w5的偏导公式可以写成:

如果输出层误差计为负的话,也可以写成:

最后我们来更新w5的值:

(其中,是learningrate,这⾥我们取0.5)

3.3隐含层参数更新

计算:

先计算:

同理,计算出:

两者相加得到总值:

再计算:

再计算:

最后,三者相乘:

为了简化公式,⽤sigma(h1)表⽰隐含层单元h1的误差:

最后,更新w1的权值:

Python代码:

#coding:utf-8

importrandom

importmath

#

#参数解释:

#pd_:偏导的前缀

#d_:导数的前缀

#w_ho:隐含层到输出层的权重系数索引

#w_ih:输⼊层到隐含层的权重系数的索引

classNeuralNetwork:

LEARNING_RATE=0.5

self.num_inputs=num_inputs

self.hidden_layer=NeuronLayer(num_hidden,hidden_layer_bias)

self.output_layer=NeuronLayer(num_outputs,output_layer_bias)

self.init_weights_from_inputs_to_hidden_layer_neurons(hidden_layer_weights)

self.init_weights_from_hidden_layer_neurons_to_output_layer_neurons(output_layer_weights)

definit_weights_from_inputs_to_hidden_layer_neurons(self,hidden_layer_weights):

weight_num=0

forhinrange(len(self.hidden_layer.neurons)):

foriinrange(self.num_inputs):

文档评论(0)

当当当 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档