首先,反向传播传播的是什么?传播的是信息,偏差的信息。
偏差是什么?偏差就是模型预测结果和实际结果之间的差异,通常用损失函数表示。
如果大家已经明白了损失函数的在神经网络中的意义,那么反向传播就可以用非常简单的话来表示:根据每个参数对最后损失值的贡献大小来相应地调整参数的值,贡献大就调整的多,贡献小就调整的少,目的是为了使损失值不断地减少,即让预测的结果不断地贴近真实值。
那么,如何确定参数对损失值的贡献就成了新的问题。
直接说解决方法,数学家们使用了梯度来代表这里的贡献。学过高数的同学应该知道,梯度是一个综合了多维方向的偏导数的向量。这里我就不讲为什么会选择梯度来表示贡献,以及梯度的相关概念了。
所以,最后反向传播就成了一个数学问题,需要计算梯度,即损失函数对各个参数的偏导数,再结合梯度下降算法,不断地更新参数值使得损失函数不断地减少,这就是反向传播,其实质就是利用结果反向更新参数来使结果更好的过程。
(视频:三蓝一棕)
接下来我需要对这里面的一些知识进行补充。
这就要从模型的训练说起,模型的训练说到底就是正向传播和反向传播的循环过程,用简单的话来讲,训练就是先正向传播,即将数据放进神经网络得到结果值,并算出损失值,再通过反向传播来更新参数。这样不断地放入图片,不断地进行正向-反向-正向-反向的循环过程,每一次循环都会让损失值变得更低,也就是让模型变得更好,直到达到模型的阈值或者我们设定的循环次数,这就是训练的过程,结果就是得到一个参数更新很多次,比较好的一个模型。
首先,我们想要运用神经网络,就得先设置好一个模型,模型可以直接选择别人做好的,也可以自己去搭建,比如最初的LeNet,到之后的AlexNet,再到ResNet,这里就不细讲模型的构建。

这里选择了一个输入层-2个隐藏层-输出层的用于识别数字0-9的模型
输入的是什么?
输入的是28*28的图片的所有像素值(0-255)→(0-1),把所有的像素值拼到同一行,就形成一个784个值的向量,这个向量也就是神经网络的输入

那么,输出又是什么?