前向传播和反向传播

前向传播和反向传播是神经网络中的重要基础。两者存在一些联系,所以本文将两者一起讲述,有利于大家理解。同时反向传播是理解神经网络模型训练的重点,需要一些微积分基础(导数,偏导数,链式法则)。如果你准备好了,那我们开始吧。

1.前向传播Forward-Propagation

前向传播如图所示:图片下方的单词表示该层所使用的active function。


前向传播和反向传播_第1张图片
Forward-propagation
Input Layer-->h1 Layer矩阵计算细节:
前向传播和反向传播_第2张图片
Matrix Operation

Relu operation

举个例子:


前向传播和反向传播_第3张图片
Input -->h1 example
h1 Layer-->h2 Layer矩阵计算细节:
Matrix Operation
前向传播和反向传播_第4张图片
Sigmoid Operation

例子:


前向传播和反向传播_第5张图片
h1-->h2 example
h2 -->output 矩阵计算细节:
Matrix Operation

前向传播和反向传播_第6张图片
Softmax Operation

例子:


前向传播和反向传播_第7张图片
h2-->output example

上面的[0.2698, 0.3223, 0.4078],便是我们将[0.1, 0.2, 0.7]输入模型后得到的结果。好了我们来通俗解释一下什么是前向传播。

Forward-propagation:将固定的数值的一个样本输入模型,模型利用weight ,bias(随机初始),active function对进行一系列的运算最后输出一个结果(actual output)。

2.损失函数 loss function

好奇的小伙伴可能会想不是要说back-propagation么?为什么搞个loss function 出来?慢慢看下去你就明白了。
在监督学习的任务中,我们会有大量的固定的输入和固定的输出(desired output)作为样本。我们将一个样本输入参数随机初始化后的模型得到一个输出,但只是一个估计值,我们想得到的是。于是就想怎么样可以使尽量的接近呢?这个问题好像有点复杂,那我们先衡量一下和的差距吧。
均方误差 MSE(mean square error)常用于回归任务:

前向传播和反向传播_第8张图片
MSE

交叉熵 (cross-entropy)常用于分类任务:
cross entropy

我们知道在训练阶段,模型的输入和输出是固定的,只能够调节模型中的weight和bias 使 尽量的接近 ,即调节模型中的参数使loss function计算出的loss尽可能的小。更进一步的可以理解为:

当loss 逐步变小时,weight和bias应该如何变化。原来loss function 就像一个教练,它能够指导模型去学习最优的weight和bias去完成预测任务。

具体的weight和bias的更新过程就是back-propagation所要做的啦。


cross entropy

例子:


loss

3.反向传播 Back-Propagation

output Layer-->h2 Layer的反向传播:
前向传播和反向传播_第9张图片
Backpropagating errors to h2 weights

a. 与 的变化关系:

前向传播和反向传播_第10张图片
交叉熵偏导公式

前向传播和反向传播_第11张图片
Matrix of cross-entropy derivatives

例子:


前向传播和反向传播_第12张图片
cross entropy偏导矩阵值

b. 与的变化关系:

前向传播和反向传播_第13张图片
softmax偏导公式

前向传播和反向传播_第14张图片
Matrix of softmax derivatives

例子:
前向传播和反向传播_第15张图片
softmax偏导矩阵值

c.与的变化关系:

前向传播和反向传播_第16张图片
偏导公式

例子:
前向传播和反向传播_第17张图片
偏导矩阵和偏导矩阵值

d.与的变化关系:由链式法则可得

Chain rule breakdown of Error derivative

前向传播和反向传播_第18张图片
output-->h2的反向传播

例子:
前向传播和反向传播_第19张图片
数值矩阵

以0.01的学习率对 更新:

前向传播和反向传播_第20张图片
反向传播对W的更新值

h2 Layer-->h1 Layer的反向传播:
前向传播和反向传播_第21张图片
Backpropagating errors to h1 weights

a.与的变化关系:

前向传播和反向传播_第22张图片
Derivative of sigmoid output wrt h2 input

例子:
前向传播和反向传播_第23张图片
h2 output 和 input 的偏导矩阵值

b.与的变化关系:

前向传播和反向传播_第24张图片
h2 input 和 weight的偏导公式

例子:
前向传播和反向传播_第25张图片
h2 input 和 weight_jk 的偏导矩阵值

c.与的变化关系:由链式法则可得

前向传播和反向传播_第26张图片

前向传播和反向传播_第27张图片

前向传播和反向传播_第28张图片

前向传播和反向传播_第29张图片

例子:
前向传播和反向传播_第30张图片

d.与的变化关系:由链式法则可得

error 和 weight_jk的偏导公式

前向传播和反向传播_第31张图片
error 和 weight_jk的偏导矩阵

例子:
前向传播和反向传播_第32张图片

以0.01的学习率对进行更新:

前向传播和反向传播_第33张图片

h1 Layer-->Input Layer 的反向传播:
前向传播和反向传播_第34张图片

a.与的变化关系:


前向传播和反向传播_第35张图片

例子:
前向传播和反向传播_第36张图片

b.与的变化关系:

前向传播和反向传播_第37张图片

例子:
前向传播和反向传播_第38张图片

c.与的变化关系:由链式法则可得
前向传播和反向传播_第39张图片

例子:
前向传播和反向传播_第40张图片

c.与的变化关系:由链式法则可得

前向传播和反向传播_第41张图片

例子:
前向传播和反向传播_第42张图片

以0.01的学习率对进行更新:

前向传播和反向传播_第43张图片

4.总结

模型随机初始化的全部weight:


前向传播和反向传播_第44张图片
向模型输入一个样本:[0.1, 0.2, 0.7]和:[1.0, 0.0, 0.0],通过forward propagation 模型输出一个结果:[0.2698, 0.3223, 0.4078]。然后利用loss function 计算与 的loss,以loss 变小为原则指导back propagation,最终实现weight的一次更新。

更新后的全部weight:


前向传播和反向传播_第45张图片
前向传播和反向传播_第46张图片
summary

小伙伴们如果觉得文章还行的请点个赞呦!!同时觉得文章哪里有问题的可以评论一下 谢谢你!

你可能感兴趣的:(前向传播和反向传播)