机器学习(四)——神经网络反向传播细节

机器学习(四)——神经网络反向传播细节


上一篇讲了个神经网络结构,它具体怎么用,怎么算就算这一篇。

神经网络的用法就算下面这几步:

1、正向传播,计算h(X),就是根据随机给的权重计算出一个结果;
2、反向传播,修正权重,也就是θ矩阵,使得代价函数最小;
3、预测数据,前面两步都是训练,这一步就是使用训练好的网络进行结果的预测。


首先,需要铺垫一些东西。
1、神经网络隐藏层的每一个节点可以看做前后两个部分:前面一个部分根据输入和权重得到一个结果,称作z;后面一个部分将得到z带入sigmod函数[(参考Logistic Regression) ]
这里写图片描述
2、求偏导里面的链式法则:这里写图片描述
3、规定 δlj=JZ(l)j δ j l = ∂ J ∂ Z j ( l ) 表示第 l l 层第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求偏导,这个是最简单的,直接就可以得到

z13W3=a(2)1

所以结合起来,就可以得到下面这个结果:

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

由于规定了 δlj=JZ(l)j δ j l = ∂ J ∂ Z j ( l ) 表示第l层第j个节点的误差,所以 JW3 ∂ J ∂ W 3 也可以表示成 (δ(3)1+δ(3)2)a(2)1 ( δ 1 ( 3 ) + δ 2 ( 3 ) ) ∗ a 1 ( 2 )

好了,总结一下这一小节,从隐藏层到输出层的权值更新中,偏导数有两种表示方式:

JW3=i=12(a(3)i(1y)+(1a(3)i)y)a(2)1 ∂ J ∂ W 3 = ∑ i = 1 2 ( a i ( 3 ) ( 1 − y ) + ( 1 − a i ( 3 ) ) ∗ y ) ∗ a 1 ( 2 )

JW3=(δ(3)1+δ(3)2)a(2)1 ∂ J ∂ W 3 = ( δ 1 ( 3 ) + δ 2 ( 3 ) ) ∗ a 1 ( 2 )


3、输入层—>隐藏层 权值更新

这一部分就针对 w1 w 1 举例就好了。
其实根据刚才的经验,很快就可以写出其中一种表示方法:

JW1=δz(2)1x(1)1 ∂ J ∂ W 1 = δ z 1 ( 2 ) ∗ x 1 ( 1 )

另一种表示方法其实也就是把 δz(2)1 δ z 1 ( 2 ) 求出来而已。
下面来求就行了。
δz(2)1=Jz(2)1=(Jz(3)1z(3)1a(2)1+Jz(3)2z(3)2a(2)1)a(2)1z(2)1 δ z 1 ( 2 ) = ∂ J ∂ z 1 ( 2 ) = ( ∂ J ∂ z 1 ( 3 ) ∗ ∂ z 1 ( 3 ) ∂ a 1 ( 2 ) + ∂ J ∂ z 2 ( 3 ) ∗ ∂ z 2 ( 3 ) ∂ a 1 ( 2 ) ) ∗ ∂ a 1 ( 2 ) ∂ z 1 ( 2 )

=(δz(3)1W3+δz(3)2W4)a(2)1(1a(2)1) = ( δ z 1 ( 3 ) ∗ W 3 + δ z 2 ( 3 ) ∗ W 4 ) ∗ a 1 ( 2 ) ∗ ( 1 − a 1 ( 2 ) )




从这里已经看出了一些猫腻,那就是前面层数的 δ δ 可以由后面层数的 δ δ 得到,转换成矩阵形式就可以得到这个结论:前面层数的节点误差等于后一层的节点误差经过权重后乘以g前导

δ(l)=(θ(l))Tδ(l+1).g(z(l)) δ ( l ) = ( θ ( l ) ) T δ ( l + 1 ) . ∗ g ′ ( z ( l ) )

最后这个矩阵形式看着不爽的话,就对照上面一排的 δ δ 转换结果多瞧瞧,还是有一丢丢感觉的。


目前为止, δ δ 知道了,偏导就更简单了,另一个结论就是:
代价函数对每个权重的偏导数等于上一层的输出乘以下一层的误差。

Jθ(l)ij=a(l)iδ(l+1)j ∂ J ∂ θ i j ( l ) = a i ( l ) δ j ( l + 1 )



三、数据预测

到了这里就没啥好说的了,用梯度下降算法或者什么厉害的算法更正好权重矩阵后,把要预测的x放进去,得到y就行了。


好了,大功告成,其实无非就是链式法则的运用而已。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值