反向传播算法(backpropagation)

算法简介

百度百科:

BP算法(即反向传播算法)适合于多层神经元网络的一种学习算法,它建立在梯度下降法的基础上。BP网络的输入输出关系实质上是一种映射关系:一个n输入m输出的BP神经网络所完成的功能是从n维欧氏空间向m维欧氏空间中一有限域的连续映射,这一映射具有高度非线性。它的信息处理能力来源于简单非线性函数的多次复合,因此具有很强的函数复现能力。这是BP算法得以应用的基础。

什么是反向传播?

反向传播是神经网络中最基本的学习算法,他是可以根据输出层的误差来更新每一层的参数。

看了很多博客,说反向传播就是链式求导,这句话很好理解。可是我对这个生僻的词语还是很难产生一个形象的理解。阅读了大量博客后我知道这是一个学习算法,可以用来更新参数。有人把它跟逻辑回归的梯度下降做对比,把逻辑回归看做是一个没有隐层的神经网络。意思是说,“梯度下降”可以看做是“没有隐层的神经网络”的反向传播算法。这么说我不知道是不是准确,但是我对反向传播有了一个大致的理解了:“反向传播就是一个类似梯度下降的算法嘛。”

可是用最普通的梯度下降不可以吗,梯度下降和反向传播有什么区别?那我来回顾一下梯度下降是什么,用白话说,梯度下降就是计算出预测结果与真实结果的误差,然后计算当时参数下误差的梯度是什么,然后沿着梯度,把误差“下降”下来,这就是梯度下降。公式这么写:

误差(损失函数)可以写为:

对误差求导(梯度):

\frac{\partial}{\partial \theta _j}J\left( \theta \right) =2\cdot \frac{1}{2}\left( h_{\theta}\left( x \right) -y \right) \cdot \frac{\partial}{\partial \theta _j}\left( h_{\theta}\left( x \right) -y \right) =\left( h_{\theta}\left( x \right) -y \right) x_j

梯度下降:

带入求导后的结果:

\theta _j=\theta _j-\alpha \left( h_{\theta}\left( x^{\left( i \right)} \right) -y^{\left( i \right)} \right) x_{j}^{\left( i \right)}

这是一个线性回归的梯度下降公式,y 是真实值,(b+\sum w_ix_i^{(n)}) 是预测函数计算出来的预测值,线性回归使用的是平方误差(为什么使用平方误差可以看我写的这篇博客),然后根据误差,计算梯度,再对参数进行调整,这就是梯度下降。

这里可以看到,对于这个没有隐层的神经网络,对于输出层的参数可以直接计算出误差然后进行梯度下降,因为也没有其他层了。可是如果对于一个多层的神经网络,每一层都有参数,因此如果想要使用梯度下降,要对每一层分别求梯度下降,而梯度下降时误差主导的,也就是说没有误差是无法进行梯度下降的(通过上面的公式可以看出,梯度是和每个样本的x和y有关,也就是输入输出值)。可对于神经网络来说,中间的隐层是没有目标值的,那也就没办法计算误差,自然也没办法进行梯度下降,因此就引出了反向传播

所以梯度下降只能对于单层使用,多层还得反向传播,梯度下降和反向传播的区别就在于此。现在我对反向传播这个词也有了大概的理解,因为在计算梯度的时候是需要计算出误差后,才能计算出梯度,而中间层没有办法计算出误差,所以需要把输出层的误差 反向传播 到前面的隐层,这样才能计算梯度。

反向传播算法细节

===》原文详见《===

如图所示这是一个三层的神经网络,包含两个隐层:
在这里插入图片描述

其中e=w*xf(e)是激活函数,可以理解为是一个非线性的函数,例如sigmoid
在这里插入图片描述

下面是前向传播过程:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

以上完成了前向传播过程,就是把 x_1x_2 输入网络计算出 y 的过程。(w_{ij} 表示从第 i 个神经元指向第 j 个神经元路径上的权重,例如 w_{46} 就是从第四个神经元指向第六个神经元路径上的权重,结合上图。)

下面开始反向传播,首先计算每个神经元的误差:

(这里误差直接使用了真实值与预测值的差)
在这里插入图片描述

然后将误差反向传播回去:
在这里插入图片描述
(If propagated errors came from few neurons they are added. The illustration is below: )

在这里插入图片描述

下面开始利用反向传播的误差,计算各个神经元(权重)的导数,开始反向传播修改权重(When the error signal for each neuron is computed, the weights coefficients of each neuron input node may be modified. In formulas below df(e)de\dfrac {df\left( e\right) }{de}dedf(e)​ represents derivative of neuron activation function (which weights are modified). ):
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

参考:

https://www.sohu.com/a/168767295_826434

https://blog.csdn.net/ft_sunshine/article/details/90221691

http://galaxy.agh.edu.pl/~vlsi/AI/backp_t_en/backprop.html

你可能感兴趣的:(历程,Deep,Learning,算法,神经网络,深度学习,人工智能,机器学习)