BP算法(反向传播算法)

之前看书的时候看到反向传播,我当时看书的时候明白反向传播就是想通过某种学习如何调整我们的在每一层设置的权重参数,是我们的网络的损失函数达到最小。我当时觉得就是每一层进行链式求导就可以了。当时是始终都感觉迷迷糊糊的。自己做的时候就不会清楚。后面看了一下视频感觉清楚了很多,好了废话就不说了,下面我按照我看到视频一步一步的记录写下来。先回顾一下我们的神经网络的前向传播。
首先假如我们的神经元是这样子比较简单三层的神经元。输入层,隐含层,输出层。

在这里插入图片描述
每一个神经元,是由上一层都输出乘以权重相加,进行线性求和,然后加上一个非线性激活函数,进行一个输出。下面是一个示意图,感觉比较清楚。输出为yi用一个δ函数表示。
在这里插入图片描述假如是一个分类问题,激活函数是一个sigmoid函数,x矩阵和w权重矩阵相乘,这里暂时不添加偏置,然后进行sigmoid函数的非线性δ函数的运算,sigmoid函数的输入只有一个x这里进行sigmoid是对每一个矩阵相乘后会对结果矩阵中的每一个的x都会进行sigmoid函数运算。在这里插入图片描述
计算之后就会进行一个误差运算,这里运用的平方平均误差,就是每一个结果的误差的评分相加,然后再除以结果的个数。
在这里插入图片描述
然后下一步就是开始学习,找到一组权重让我们的损失函数达到最小。
运用梯度下降,让每一个权重减去α对应的梯度。主要是偏导数就是这个梯度比较难算。
在这里插入图片描述
反向传播算法起源于链式求导法则。
用数学来表示人工神经网络
最后的输出就是一个复合函数。求梯度就是一步一步的求,比如说z=(t-1)2,t=(x+y)。那么αz/αt=2t,αt/ax=1,αz/αx=αz/αt
αt/αx=2*(x+y)
在这里插入图片描述
现在开始反向传播,它一共由4个步骤,第一个就是把所有的正向传播的箭头进行反向,第二步就是讲误差反方向传播到下一层,其实反向传播的就是误差,第三步步激活函数进行求导,第四步更新权重值。
在这里插入图片描述
首先计算输出层的误差,我正向算的时候是让一共神经元相加然后算激活函数,得到一个输出。现在反向传播就是该神经元后面传递它的箭头乘以对应的权重值进行线性相加然后再乘激活函数。比如最后有一个εi就等于δ在Ii处的导数。Ii等于正向传播的时候,在该店的值,就是它前面神经元乘以对应的权重,相加得到的值
在这里插入图片描述
一般表达式是这样子,就是对应点的导数按照元素乘积后一层的权重乘以后一层的误差。
在这里插入图片描述
中间的这个符号是按照矩阵按照元素乘积,下面这个例子就是一个很好的解释。
在这里插入图片描述
下一步就是权重更新,跟新值为下层的误差乘以该层的神经元在正向传播时候的值。比如图中的Δw32就等于下一层的ε2(该神经元的误差值)乘以h3(该神经元在正向传播时该神经元的值)
在这里插入图片描述
最后一个式子里面一个圆圈里面有一个差的运算是一个矩阵的扩充。
在这里插入图片描述
最后整体来回归一下
第一步就是对输入的x进行前向传播,第二步就是求误差,第三步进行误差的反向传播(就是该神经元激活函数的求导并在该点的值,乘以后一层神经元与其权重的和),第四步调整权重的值(该神经元的前向传播的值乘以下一层的误差)。
在这里插入图片描述
比如举一个例子
x为(N,D_in)
w1为(D_in,H)
w2为(H,D_out)
y为(N,D_out)
h=x.dot(w1)
h_relu = np.maxinum(h,0)
y_pred = h_relu.dot(w2)
loss = np,square(y_pred-y).sum
求梯度就是求导
grad_y_pred = 2.0*(y_pred-y)//相当于就是对y=(x-1)2求导是一样的。
grad_w2=h_relu.T.dot(grad_y_pred )
//这个是怎么求的呢,就是y_pred = h_relu.dot(w2)式子对w2求导,把w2做为一个变量,h_relu就相当于一个常数所以求导后就是h_relu,然后链式法则再乘上y_pred,这两个矩阵是否要转置是看行列是否满足矩阵相乘的规则,前面一个的列等于后面的列,这个是我自己总结的,不一定正确。
grad_h_relu = grad_y_pred.dot(w2.T)//这个暂时不清楚怎么求出来的
grad_h=grad_h_relu.copy()
grad_h[h<0] = 0
grad_w1 = x.T.dot(grad_h)

w1=w1-learning_rategrad_w1
w2=w2-learning_rate
grad_w2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值