深度学习·神经网络·计算机视觉读书个人收藏

前向传播和反向传播

2019-06-17  本文已影响2人  格物致知Lee

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

1.前向传播Forward-Propagation

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


Forward-propagation
Input Layer-->h1 Layer矩阵计算细节:
Matrix Operation
Relu operation

举个例子:


Input -->h1 example
h1 Layer-->h2 Layer矩阵计算细节:
Matrix Operation Sigmoid Operation

例子:


h1-->h2 example
h2 -->output 矩阵计算细节:
Matrix Operation
Softmax Operation

例子:


h2-->output example

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

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

2.损失函数 loss function

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

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

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

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

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


cross entropy

例子:


loss

3.反向传播 Back-Propagation

output Layer-->h2 Layer的反向传播:
Backpropagating errors to h2 weights

a. E_1O_{out1} 的变化关系:

交叉熵偏导公式 Matrix of cross-entropy derivatives

例子:


cross entropy偏导矩阵值

b.O_{out1}O_{in1}的变化关系:

softmax偏导公式
Matrix of softmax derivatives
例子:
softmax偏导矩阵值

c.O_{in1}W_{k1l1}的变化关系:

偏导公式
例子:
偏导矩阵和偏导矩阵值

d.E_1W_{k1l1}的变化关系:由链式法则可得

Chain rule breakdown of Error derivative
output-->h2的反向传播
例子:
数值矩阵

以0.01的学习率对 W_{kl} 更新:

反向传播对W的更新值
h2 Layer-->h1 Layer的反向传播:
Backpropagating errors to h1 weights

a.h2_{out1}h2_{in1}的变化关系:

Derivative of sigmoid output wrt h2 input
例子:
h2 output 和 input 的偏导矩阵值

b.h2_{in1}W_{j1k1}的变化关系:

h2 input 和 weight的偏导公式
例子:
h2 input 和 weight_jk 的偏导矩阵值

c.E_totalh2_{out1}的变化关系:由链式法则可得





例子:

d.E_totalW_{j1k1}的变化关系:由链式法则可得

error 和 weight_jk的偏导公式
error 和 weight_jk的偏导矩阵
例子:

以0.01的学习率对W_{jk}进行更新:

h1 Layer-->Input Layer 的反向传播:

a.h1_{out1}h1_{in1}的变化关系:



例子:

b.h1_{in1}W_{i1j1}的变化关系:


例子:

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

例子:

c.E_{total}W_{ij}的变化关系:由链式法则可得


例子:

以0.01的学习率对W_{ij}进行更新:

4.总结

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


向模型输入一个样本x:[0.1, 0.2, 0.7]和y:[1.0, 0.0, 0.0],通过forward propagation 模型输出一个结果\hat y:[0.2698, 0.3223, 0.4078]。然后利用loss function 计算y\hat y 的loss,以loss 变小为原则指导back propagation,最终实现weight的一次更新。

更新后的全部weight:


summary

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

上一篇下一篇

猜你喜欢

热点阅读