神经网络反向传播算法(BP)

前面讲了神经网络的前向传播算法,下面再对反向传播算法进行总结。

反向传播算法也称为误差逆传播(error BackPropagation),是指基于梯度下降对神经网络的损失函数进行迭代优化求极小值的过程,它不仅可应用于前馈神经网络,还可以用于其他类型的神经网络。需要注意的是,大家提及到的“BP网络”,通常是指用BP算法训练的前馈神经网络。

神经网络反向传播工作原理

首先,定义神经网络的损失函数。神经网络的损失函数有很多,这里采用平方误差来度量。对于单个样品输出层的参数,损失函数可表示为:

J(W,b,x,y)=12||h(W,b)(x)y||2=12||a(nl)y||2=12||f(z(nl))y||2=12||f(W(nl1)a(nl1)+b(nl1))y||2 其中,Lnl表示输出层

假设我们有m个样品,则总体的损失函数为:

J(W,b)=1m||i=1mJ(W,b,x(i),y(i))||2+λ2||W(nl1)||2=12mi=1m||h(W,b)(x(i))y(i)||2+λ2||W(nl1)||2     公式1-1,其中,第二项为应用于参数W的正则项

接下来,求参数Wb,使上述损失函数取极小值。分别对Wb求偏导就可以啦!

J(W,b)W(nl1)=1mi=1m(a(nl)y)f(z(nl))a(nl1)+λW(nl1)    公式1-2

J(W,b)b(nl1)=1mi=1m(a(nl)y)f(z(nl))      公式1-3

从上面两个偏导数公式中,可看到求参数Wb时,均需要求解J(W,b)z(nl)=(a(nl)y)f(z(nl))

对于输出层Lnl,我们可以令δ(nl)=(a(nl)y)f(z(nl))

对于l=nl1,nl2,nl3,,2,则δ(l)=J(W,b)z(l)=J(W,b)z(nl)z(nl)z(nl1)...z(l+1)z(l)=(W(l))Tδ(l+1)f(z(l))       公式1-4

W(l1)b(l1)的梯度分别为:

J(W,b,x,y)W(l1)=J(W,b,x,y)z(l)z(l)W(l1)=δ(l)(α(l1))T  公式1-5

J(W,b,x,y)b(l1)=J(W,b,x,y)z(l)z(l)b(l1)=δ(l)       公式1-6

将公式1-4、1-5和1-6结合起来,就可以求出来每层的参数Wb啦!

将反向传播算法的矩阵形式进行总结如下:

1. 执行前馈传递,分别计算L1L2层一直到输出层Lnl的输出a(l)=f(z(l))=f(W(l1)a(l1)+b(l1))

2. 对于输出层Lnl,令δ(nl)=(a(nl)y)f(z(nl))

3. 对于l=nl1,nl2,nl3,,2,令δ(l)=(W(l))Tδ(l+1)f(z(l))

4. 对Wb求偏导,一次梯度下降迭代更新参数W,b为:

W(l1)=W(l1)αJ(W,b,x,y)W(l)=W(l1)αδ(l)(α(l1))T

b(l1)=b(l1)αJ(W,b,x,y)b(l1)=b(l1)αδ(l)

反向传播算法具体步骤

1)初始化各隐藏层与输出层的权重w和偏倚量b为接近0的随机值(设置的起始值不能完全相等);

2)for 样品i=1 to m

a.首先执行前馈传播,分别计算L2层一直到输出层Lnl的输出a(i,l)=f(z(i,l))=f(W(i,l1)a(i,l1)+b(i,l1))

b.通过损失函数计算输出层δ(i,nl)

c.对于l=nl1,nl2,nl3,,2,使用反向传播算法计算δ(i,l)=(W(i,l))Tδ(i,l+1)f(z(i,l))

3)分别对每一层的Wb进行更新迭代

4)如果所有的Wb均小于阈值,停止迭代,并输出L2层一直到输出层Lnl对应的参数Wb

参考资料

1. Neural Networks and Deep Learning by By Michael Nielsen

2. 刘建平Pinard博客https://www.cnblogs.com/pinard/p/6422831.html 

3. 周志华《西瓜书》

4. UFLDL Tutorial

posted @   yayagogogo  阅读(142)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示