手撸BP(Back propagation)算法

一动机:一直感觉神经网络很简单,神经元加权,然后前向、反向传播调整权值,然后就OK了,可是反向传播一直感觉理解的不透彻,于是萌生手撸的想法,看它到底怎么实现的。

二原理:理解起来不是很难,因为每次层信号A是通过一个权重矩阵W做了向量空间变换,然后又用了激活函数G,所以产生的错误E是一个反向传播的过程。

先定义一下L层神经元输入为Z(L),输出为A(L),  A(L)=g(Z(L)),g为激活函数,  

第L-1层产生的错误E(L-1)=E(L)*W(L+1).T*g'(z)   Cost Function C(L)=E(L-1)*E(L-1)    以此更新W, W=W+rate*

因为要用SGD,我们要找到梯度,然后W在梯度下降的方向更新就可以找到局部最优了。

E(L-1)=A(L-1)-Y=g(Z(L+1))-Y=g(A(L)W+b)-Y  

=A(L)*g'

因此=A(L)*g'*E,前向计算A,反向计算E,即可以算出第一层的偏导,更新,相应的W值了。

更详细严格的推导证明见:https://www.cnblogs.com/andywenzhi/p/7295262.html?utm_source=itdadao&utm_medium=referral

三过程

啥也不说,show代码。

效果还不错,嘿嘿。

猜你喜欢

转载自blog.csdn.net/spiderman888/article/details/81735275
今日推荐