前向反馈
前向反馈是神经网络用来将输入变成输出的流程。如下图,利用输入向量,对其应用一系列模型和sigmoid函数,这些图组合后成为高级的非线性图
再看一遍这个过程,对输入向量先应用W1,然后进行sigmoid,再应用W2,再进行sigmoid,然后最后W3,sigmoid,就得到了y^,这个过程就是前向反馈
反向传播
和之前一样,神经网络将产生误差函数,最终我们需要最小化该误差函数。
现在,我们准备好训练神经网络了。为此,我们将使用一种方法,叫做反向传播。简而言之,反向传播将包括:
- 进行前向反馈运算。
- 将模型的输出与期望的输出进行比较。
- 计算误差。
- 向后运行前向反馈运算(反向传播),将误差分散到每个权重上。
- 更新权重,并获得更好的模型。
- 继续此流程,直到获得很好的模型。
听起来比较复杂,实际上要简单些。
例如图中蓝色的点就是一次前向反馈中的到的点,反向传播就像是问这个点,“你希望我做什么?”点说“我希望这条分界线离我近一点”,表现在权重上就是更新权重,得到w1’ w2’。
这个过程就像是从误差之巅下来,每次下来一点就得到一个更好一点的模型。
对于更复杂的神经网络来说,这个过程是这样的,输入向量经过两个模型的预测(这部分参考前面的【Pytorch】5. 神经网络结构),然后结合之后预测为蓝色的点,但是这个预测结果并不好,我们希望这条线能更往点那边靠靠,可以看到上面哪个模型的预测效果并不好,我们要做的就是减小来自上面这个模型的权重
对于一个多层感知机,也就是神经网络来说,它的反向传播的梯度如下
链式法则
链式法则就是用于复合函数的求导,它就是一系列倒数的乘积。这个法则的作用就是帮助我们进行反向传播计算梯度。因为前向反馈就是多种函数的复合,反向传播就是计算出每一步的导数,也就是把每一层的偏导数求出来,然后相乘就可以了
再重复一下,前向反馈的过程:
反向传播就是计算出误差函数对于每个权重的导数,试着计算一下W11的偏导,如图:
然后顺便提一下,sigmoid 函数有一个完美的导数,我们可以在下面的计算中看到。这将使我们的反向传播步骤更加简洁。