虽然学深度学习有一段时间了,但是对于一些算法的具体实现还是模糊不清,用了很久也不是很了解,最近在看去年LeCun和Hinton在Nature上发表的deep learning的review,有两张图分别是讲得网络的前向传播和反向传播,下面记录一下。
前向传播
如图所示,这里讲得已经很清楚了,前向传播的思想比较简单。
举个例子,假设上一层结点i,j,k,…等一些结点与本层的结点w有连接,那么结点w的值怎么算呢?就是通过上一层的i,j,k等结点以及对应的连接权值进行加权和运算,最终结果再加上一个偏置项(图中为了简单省略了),最后在通过一个非线性函数(即激活函数),如ReLu,sigmoid等函数,最后得到的结果就是本层结点w的输出。
最终不断的通过这种方法一层层的运算,得到输出层结果。
反向传播
反向传播的方法其实也比较简单,但是因为需要求偏导,而我的数学又不怎么好,所以一直理解上有困难。下面上图:
由于我们前向传播最终得到的结果,以分类为例,最终总是有误差的,那么怎么减少误差呢,当前应用广泛的一个算法就是梯度下降算法,但是求梯度就要求偏导数,下面以图中字母为例讲解一下。
设最终总误差为 E ,对于输出那么