机器学习(四)——神经网络反向传播细节
上一篇讲了个神经网络结构,它具体怎么用,怎么算就算这一篇。
神经网络的用法就算下面这几步:
1、正向传播,计算h(X),就是根据随机给的权重计算出一个结果;
2、反向传播,修正权重,也就是θ矩阵,使得代价函数最小;
3、预测数据,前面两步都是训练,这一步就是使用训练好的网络进行结果的预测。
首先,需要铺垫一些东西。
1、神经网络隐藏层的每一个节点可以看做前后两个部分:前面一个部分根据输入和权重得到一个结果,称作z;后面一个部分将得到z带入sigmod函数[(参考Logistic Regression) ]
2、求偏导里面的链式法则:
3、规定δlj=∂J∂Z(l)jδjl=∂J∂Zj(l)表示第ll层第j个节点的误差。(在这儿也不有点懵,看完后面的例子就get了应该)
一、正向传播
正向传播其实上一篇就说过了,按照上面那张神经网络的图,假设是一个多分类问题,输出是一个向量,输入含有两个特征。
1、首先把训练数据X输入,随机生成权重W矩阵。
2、计算隐藏层的输出,先根据权重得到z,简单书写就是Z(2)=W(1)X,然后使用sigmod函数,得到隐藏层第二层的输出,a=g(z(2))。
3、计算输出层的输出,在输出层,计算过程和隐藏层类似,首先是Z(3)=W(2)a(2),然后得到最终输出,h(X)=g(Z(3))。
到这里,正向传播的过程就结束了,得到了想要的东西,就是根据权重和输入算到的h(X)。
二、反向传播
这一步的目的是根据得到的h(X)和训练集里的y比较,修正权重矩阵,根据前面几篇的想法,就是得到代价函数,然后求出代价函数相对于每一个权重的偏导,设置一个步长,疯狂迭代就行了。
所以问题就集中在怎么求偏导。
1、先考虑怎么求总代价吧。
就是逻辑回归里面那个式子。
所以在这个例子里,可以看出来总代价J就是下面这样:

2、隐藏层—>输出层 权值更新
其实就是求J对W3的偏导,根据链式法则就可以转化为这样:
由于输出有两个,所以稍微复杂了一点点,不过也差不多。
接下来就是挨个求偏导就好了。
可以看到其实a(3)就是h(X),所以J对a(3)的偏导可以看做是

接下来就是a(3)1对z(3)1的偏导了,就是sigmod函数的导数嘛,下面给出的是sigmod函数的求导。

J和a(3)之间第二个单元的求偏导和第一个单元类似,就不说了,剩下最后一个就是z(3)1对W3求偏导,这个是最简单的,直接就可以得到
所以结合起来,就可以得到下面这个结果:

最后再回头看一下最开始链式展开的时候,也可以写成这样,

由于规定了δlj=∂J∂Z(l)jδjl=∂J∂Zj(l)表示第l层第j个节点的误差,所以∂J∂

最低0.47元/天 解锁文章
1134

被折叠的 条评论
为什么被折叠?



