首页 > 编程语言 >神经网络反向传播算法(BP)

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

时间:2023-06-11 22:22:05浏览次数:55  
标签:输出 nl 算法 神经网络 BP delta frac partial

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

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

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

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

$J(W, b, x,y)=\frac{1}{2}||h_{(W,b)}(x)-y||^2=\frac{1}{2}||a^{({nl})}-y||^2=\frac{1}{2}||f(z^{(nl)})-y||^2=\frac{1}{2}||f(W^{({nl}-1)}a^{({nl}-1)}+b^{({nl}-1)})-y||^2$ 其中,$L_{nl}$表示输出层

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

$J(W, b)=\frac{1}{m}||\sum \limits_{i=1}^{m} J(W, b, x^{(i)},y^{(i)})||^2 + \frac{\lambda}{2}||W^{(nl-1)}||_2=\frac {1}{2m}\sum \limits_{i=1}^{m}||h_{(W,b)}(x^{(i)})-y^{(i)}||^2+ \frac{\lambda}{2}||W^{(nl-1)}||_2 $     公式1-1,其中,第二项为应用于参数$W$的正则项

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

$\frac{\partial J(W,b)}{\partial W^{(nl-1)}}=\frac{1}{m}\sum \limits_{i=1}^{m}(a^{(nl)}-y)∙f'(z^{(nl)})a^{(nl-1)}+\lambda W^{(nl-1)}$    公式1-2

$\frac{\partial J(W,b)}{\partial b^{(nl-1)}}=\frac{1}{m}\sum \limits_{i=1}^{m}(a^{(nl)}-y)∙f'(z^{(nl)})$      公式1-3

从上面两个偏导数公式中,可看到求参数$W$和$b$时,均需要求解$\frac{\partial J(W,b)}{\partial z^{(nl)}}=(a^{(nl)}-y)f'(z^{(nl)})$。

对于输出层$L_{nl}$,我们可以令$\delta ^{(nl)}=(a^{(nl)}-y)∙f'(z^{(nl)})$

对于$l=nl−1,nl−2,nl−3,…,2$,则$\delta ^{(l)}=\frac{\partial J(W,b)}{\partial z^{(l)}}=\frac{\partial J(W,b)}{\partial z^{(nl)}}\frac{\partial z^{(nl)}}{\partial z^{(nl-1)}}...\frac{\partial z^{(l+1)}}{\partial z^{(l)}}=(W^{(l)})^T\delta ^{(l+1)}∙f'(z^{(l)})$       公式1-4

$W^{(l-1)}$和$b^{(l-1)}$的梯度分别为:

$\frac{\partial J(W,b,x,y)}{\partial W^{(l-1)}}=\frac{\partial J(W,b,x,y)}{\partial z^{(l)}} \frac{\partial z^{(l)}}{\partial W^{(l-1)}}=\delta ^{(l)}(\alpha ^{(l-1)})^T$  公式1-5

$\frac{\partial J(W,b,x,y)}{\partial b^{(l-1)}}=\frac{\partial J(W,b,x,y)}{\partial z^{(l)}} \frac{\partial z^{(l)}}{\partial b^{(l-1)}}=\delta ^{(l)}$       公式1-6

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

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

1. 执行前馈传递,分别计算$L_1$、$L_2$层一直到输出层$L_{nl}$的输出$a^{(l)}=f(z^{(l)})=f(W^{(l-1)}a^{(l-1)}+b^{(l-1)})$;

2. 对于输出层$L_{nl}$,令$\delta ^{(nl)}=(a^{(nl)}-y)∙f'(z^{(nl)})$;

3. 对于$l=nl−1,nl−2,nl−3,…,2$,令$\delta ^{(l)}=(W^{(l)})^T\delta ^{(l+1)}∙f'(z^{(l)})$

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

$W^{(l-1)}=W^{(l-1)}-\alpha \frac {\partial J(W,b,x,y)}{\partial W^{(l)}}=W^{(l-1)}-\alpha \delta ^{(l)}(\alpha ^{(l-1)})^T$

$b^{(l-1)}=b^{(l-1)}-\alpha \frac {\partial J(W,b,x,y)}{\partial b^{(l-1)}}=b^{(l-1)}-\alpha \delta ^{(l)}$

反向传播算法具体步骤

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

2)for 样品$i = 1$ to $m$,

a.首先执行前馈传播,分别计算$L_2$层一直到输出层$L_{nl}$的输出$a^{(i,l)}=f(z^{(i,l)})=f(W^{(i,l-1)}a^{(i,l-1)}+b^{(i,l-1)})$

b.通过损失函数计算输出层$\delta ^{(i,nl)}$

c.对于$l=nl−1,nl−2,nl−3,…,2$,使用反向传播算法计算$\delta ^{(i,l)}=(W^{(i,l)})^T\delta ^{(i,l+1)}∙f'(z^{(i,l)})$

3)分别对每一层的$W$和$b$进行更新迭代

4)如果所有的$W$和$b$均小于阈值,停止迭代,并输出$L_2$层一直到输出层$L_{nl}$对应的参数$W$和$b$

参考资料

1. Neural Networks and Deep Learning by By Michael Nielsen

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

3. 周志华《西瓜书》

4. UFLDL Tutorial

标签:输出,nl,算法,神经网络,BP,delta,frac,partial
From: https://www.cnblogs.com/chaimy/p/17469779.html

相关文章

  • 算法题:找出阿姆斯壮数
    Armstrong(阿姆斯壮)数是等于其数字的立方数之和的数字, 如153可以满足1*1*1+5*5*5+3*3*3=153,试写出一程序找出所有的三位数Armstrong数。采用穷举法,把数分成三位,遍历从100到999,如果三个数立方数之和等于它自己,则输出。//找出所有三位数的Armstrong数function......
  • 图像增强算法受环境影响几种校正方式
    图像增强环境影响几种校正方式由于受到环境,光线、噪音、不同设备拍摄的清晰度和对比度等也会影响到图像最终的采集效果,不能够直接采取图像中的重点部分。以下几种校正方式可以单独应用或者结合使用,以根据图像的特征和需求来提高图像的质量和视觉效果。根据不同的应用场景和目标,选择......
  • 文心一言 VS 讯飞星火 VS chatgpt (38)-- 算法导论5.4 2题
    二、假设我们将球投入到b个箱子里,直到某个箱子中有两个球。每一次投掷都是独立的并且每个球落入任何箱子的机会均等。请问投球次数期望是多少?文心一言:这是一个典型的鸽巢原理(PigeonholePrinciple)问题。假设每次投球时,每个箱子有1/b的概率被选中。我们设投球次数为x。我们首先考虑......
  • 文心一言 VS 讯飞星火 VS chatgpt (38)-- 算法导论5.4 2题
    二、假设我们将球投入到b个箱子里,直到某个箱子中有两个球。每一次投掷都是独立的并且每个球落入任何箱子的机会均等。请问投球次数期望是多少?文心一言:这是一个典型的鸽巢原理(PigeonholePrinciple)问题。假设每次投球时,每个箱子有1/b的概率被选中。我们设投球次数为x。我们首先......
  • 《数据结构与算法》之树
    导言:我们在前面的学习中认识到了栈还有队列这些线性的数据存储结构,而现在我们要了解的数据结构却不是线性的了,我们试想线性的结构最大的缺点查询不方便,不管你是从前往后开始查找数据,还是从后往前开始查找数据都是一个一个的比对,效率很低,所以不推荐使用,那么我们的树结构来存储的......
  • 基于半监督学习的单体型组装算法
    基于半监督学习的单体型组装算法李明阳湖南师范大学摘要:单体型组装(HaplotypeAssembly)是根据测序得到的DNA片段通过各种模型算法来重建出生物个体的单体型。随着人类基因组计划(HumanGenomeProject,HGP)的逐渐完成,人们已经认识到个体之间基因序列的差异是造成个体之间......
  • 0001. Kmeans聚类算法
    一、Kmeans原理Kmeans算法是一种常见的聚类算法,用于将数据集划分成k个不重叠的簇。其主要思想是通过迭代的方式将样本电话分到不同的簇中,使得同一簇内的样本点相似度较高,不同簇之间的相似度较低。Kmeans算法的详细步骤:初始化:选择k个初始聚类中心,可以是随机选择或者根据某种启......
  • 算法题总结-分组背包
    原题有N件物品和一个容量为V的背包。第i件物品的费用是Ci,价值是Wi。这些物品被划分为K组,每组中的物品互相冲突,最多选一件。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。由于截止目前,没有刷到对应的经典题目,以下以依赖背包的转化题......
  • 关于RL 和DRL中的算法总结
    其中:RL分为基于价值的学习和基于策略的学习和AC架构的价值学习DQNDQN=Q_learing+网络使用了价值网络q(..w)DQN训练的过程基础的DQN就是训练Q网络更新w参数代码中梯度下降用的是下面这一张这里有个问题下面这张图片中有不一样的地方即Gradientdescent......
  • 算法题总结-分组背包与依赖背包
    原题https://www.nowcoder.com/practice/f9c6f980eeec43ef85be20755ddbeaf4?tpId=37&tqId=21239&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3Fdifficulty%3D1%26page%3D1%26pageSize%3D50%26search%3D%26tpId%3D37%26type%3D37&am......