神经网络中前向传播和反向传播解析
2016-05-15 21:22
344 查看
虽然学深度学习有一段时间了,但是对于一些算法的具体实现还是模糊不清,用了很久也不是很了解,最近在看去年LeCun和Hinton在Nature上发表的deep learning的review,有两张图分别是讲得网络的前向传播和反向传播,下面记录一下。
![](http://img.blog.csdn.net/20160515204217870)
如图所示,这里讲得已经很清楚了,前向传播的思想比较简单。
举个例子,假设上一层结点i,j,k,…等一些结点与本层的结点w有连接,那么结点w的值怎么算呢?就是通过上一层的i,j,k等结点以及对应的连接权值进行加权和运算,最终结果再加上一个偏置项(图中为了简单省略了),最后在通过一个非线性函数(即激活函数),如ReLu,sigmoid等函数,最后得到的结果就是本层结点w的输出。
最终不断的通过这种方法一层层的运算,得到输出层结果。
![](http://img.blog.csdn.net/20160515205049654)
由于我们前向传播最终得到的结果,以分类为例,最终总是有误差的,那么怎么减少误差呢,当前应用广泛的一个算法就是梯度下降算法,但是求梯度就要求偏导数,下面以图中字母为例讲解一下。
设最终总误差为E,对于输出那么E#对于输出结点yl的偏导数是yl - tl,其中tl是真实值∂yl∂zl是指上面提到的激活函数,zl是上面提到的加权和,那么这一层的E对zl的偏导数为∂E∂zl=∂E∂yl∂yl∂zl。同理,下一层也是这么计算,(只不过∂E∂yk计算方法变了),一直反向传播到输入层,最后有∂E∂xi=∂E∂yj∂yj∂zj 且 ∂zj∂xi=wij
然后调整这些过程中的权值,再不断进行前向传播和反向传播的过程,最终得到一个比较好的结果
前向传播
如图所示,这里讲得已经很清楚了,前向传播的思想比较简单。
举个例子,假设上一层结点i,j,k,…等一些结点与本层的结点w有连接,那么结点w的值怎么算呢?就是通过上一层的i,j,k等结点以及对应的连接权值进行加权和运算,最终结果再加上一个偏置项(图中为了简单省略了),最后在通过一个非线性函数(即激活函数),如ReLu,sigmoid等函数,最后得到的结果就是本层结点w的输出。
最终不断的通过这种方法一层层的运算,得到输出层结果。
反向传播
反向传播的方法其实也比较简单,但是因为需要求偏导,而我的数学又不怎么好,所以一直理解上有困难。下面上图:由于我们前向传播最终得到的结果,以分类为例,最终总是有误差的,那么怎么减少误差呢,当前应用广泛的一个算法就是梯度下降算法,但是求梯度就要求偏导数,下面以图中字母为例讲解一下。
设最终总误差为E,对于输出那么E#对于输出结点yl的偏导数是yl - tl,其中tl是真实值∂yl∂zl是指上面提到的激活函数,zl是上面提到的加权和,那么这一层的E对zl的偏导数为∂E∂zl=∂E∂yl∂yl∂zl。同理,下一层也是这么计算,(只不过∂E∂yk计算方法变了),一直反向传播到输入层,最后有∂E∂xi=∂E∂yj∂yj∂zj 且 ∂zj∂xi=wij
然后调整这些过程中的权值,再不断进行前向传播和反向传播的过程,最终得到一个比较好的结果
相关文章推荐
- Fragment加网络请求数据HttpClient
- (hzau)华中农业大学第四届程序设计大赛网络同步赛 G: Array C
- 使用Jmeter进行http接口测试
- Http认证模式
- 华中农业大学第四届程序设计大赛网络同步赛 C
- 代理服务器与网络地址转换NAT
- 详细解读神经网络十大误解,再也不会弄错它的工作原理
- 华中农大网络同步赛
- Contest1009 - 华中农业大学第四届程序设计大赛网络同步赛C,H,J
- 网络请求方式(数据为聚合上的星座信息)
- 基于node-http-proxy的脚本:功能更新,现在支持把GFW屏蔽的URL作快速404失败返回处理;支持把墙外的CDN url映射为本地host
- 如何加载网络套接字版本
- ios swift http json
- Android关于网络连通状况的系统广播
- Http1.0、Spdy和Http2.0的对比
- AngulaJS $http post 注意事项
- TCP的连接建立与连接释放
- tcpping指定网卡类型为any结果不准确问题
- 本地yum仓库和http方式的yum仓库。
- javaweb学习总结(4)------Http协议