前言
在学习神经网络的时候,一直不理解反向传播算法,看到一大堆公式,总是一头雾水。看了很多大佬的分析和解说,最后通过自己一步步的分析和理解发现,相比直接看公式和方程,似乎一个简单的例子更容易理解这种看似复杂实际上并不复杂的算法,下面主要通过一个简单的例子来表达我对BP(反向传播算法)的理解。
链式法则(乘法法则)
如果已经理解链式法则的可以忽略这一部分。
链式法则可以说是反向传播算法的重中之重,几乎每一步的运算都会用到它。
核心理解如下:
假设有两个函数:
很显然:
为了求,我们就需要用到链式法则:
反向传播算法引例
看下面这个网络:
一共有3层:输入层、隐藏层、输出层。输入层有两个神经元 ,隐藏层有两个神经元 (这里为了简化问题,方便我们理解算法,我们可以先不用考虑激活函数),输出有一个神经元 .
为了直观的理解这个网络,我们可以为每个参数赋上具体的数值,比如,令 ,假设各个权重的真实值分别是 ,这样,通过正向运算,我们可以得到 的目标真实值 。
因此,在反向传播的过程中,我们只知道 以及 , 是未知的,为了使反向传播进行下去,我们需要随机初始化各个权重值,假设我们随机初始化的结果是:
下面就是反向传播算法的具体计算过程了:
首先,我们要计算误差,也就是真实值与预测值之间的误差 。上面提到,真实值 ,需要我们计算预测值 :
然后,我们就要开始更新各个权重值了,我们先来更新 和 ,为了更新 ,需要计算 ,根据链式法则:
已知 ,则
又 ,则
因此,
最后,我们就可以运用梯度下降法来更新,假设学习率 ,则
同理,我们可以按照上面的方法更新:
上面已经求得 .
根据 :
则,
下面,我们来更新 .
对 ,根据链式法则:
上面已经求过,根据 可以求得:
根据 可以求得:
所以,
因此,
同理,
现在,我们已经更新了所有的权重值:
再次根据前向运算可以求得 ,,我们可以发现,新的预测值更接近真实值了,而且,误差变得更小了,就这样,只要重复上面的步骤,我们就可以得到越来越准确的预测模型了!!!!
这就是我对反向传播算法的理解,希望对大家有所帮助。