我是靠谱客的博主 傲娇向日葵,最近开发中收集的这篇文章主要介绍神经网络中的前向和后向算法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

   看了一段时间的深度网络模型,也在tf和theano上都跑了一些模型,但是感觉没有潜下去,对很多东西的理解都只停留在“这个是干什么的”层次上面。昨天在和小老师一起看一篇文章的时候,就被问到RNN里面的后向传播算法具体是怎么推。当时心里觉得BP算法其实很熟悉啊,然后在推导的过程中就一脸懵逼了。于是又去网上翻了翻相关内容,自己走了一遍,准备做个笔记,算是个交代。

准备一个神经网络模型,比如:

这里写图片描述

   其中, [i1,i2] 代表输入层的两个结点, [h1,h2] 代表隐藏层的两个结点, [o1,o2] 为输出。 [b1,b2] 为偏置项。连接每个结点之间的边已经在图中标出。

来了解一下前向算法:

  前向算法的作用是计算输入层结点对隐藏层结点的影响,也就是说,把网络正向的走一遍:输入层—->隐藏层—->输出层
计算每个结点对其下一层结点的影响。 
   例如,我们要算结点 h1 的值,那么就是:

neth1=i1×w1+i2×w2+b1×1
是一个简单的加权求和。这里稍微说一下,偏置项和权重项的作用是类似的,不同之处在于权重项一般以乘法的形式体现,而偏置项以加法的形式体现。 
  而在计算结点 o1 时,结点 h1 的输出不能简单的使用 neth1 的结果,必须要计算激活函数,激活函数,不是说要去激活什么,而是要指“激活的神经元的特征”通过函数保留并映射出来。以sigmoid函数为例, h1 的输出:
outh1=11+eneth1

于是
neto1=outh1×w5+outh2×w6+b2×1

最后 o1 的输出结果,也就是整个网络的一个输出值是:
outo1=11+eneto1
按照上面的步骤计算出 out02 ,则 [outo1,outo2]  就是整个网络第一次前向运算之后得到的结果。

后向算法:

  在实际情况中,因为是随机给定的权值,很大的可能(几乎是100%)得到的输出与实际结果之间的偏差非常的大,这个时候我们就需要比较我们的输出和实际结果之间的差异,将这个残差返回给整个网络,调整网络中的权重关系。这也是为什么我们在神经网络中需要后向传播的原因。其主要计算步骤如下: 
1. 计算总误差

Etotal=12(targetoutput)2
2. 隐藏层的权值更新
在要更新每个边的权重之前,必须要知道这条边对最后输出结果的影响,可以用整体误差对 w5 求偏导求出:
Etotalw5
具体计算的时候,可以采用链式法则展开:
Etotalouto1×outo1neto1×neto1w5
在计算的时候一定要注意每个式子里面哪些自变量是什么,求导千万不要求错了。 
  需要讲出来的一个地方是,在计算 w1 的权重时, Etotal 中的两部分都需要对它进行求导,因为这条边在前向传播中对两个残差都有影响

3. 更新权重 这一步里面就没什么东西了,直接根据学习率来更新权重:

w+5=w5η×Etotalw5

至此,一次正向+反向传播过程就到此为止,接下来只需要进行迭代,不断调整边的权重,修正网络的输出和实际结果之间的偏差(也就是training整个网络)。

原文出处:点击打开链接

最后

以上就是傲娇向日葵为你收集整理的神经网络中的前向和后向算法的全部内容,希望文章能够帮你解决神经网络中的前向和后向算法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部