本文为合集收录,欢迎查看合集/专栏链接进行全部合集的系统学习。
合集完整版请参考这里。
上一节介绍了训练和推理的概念,这一节接着训练和推理的概念讲一下,神经网络的正向传播和反向传播。
正反向传播
其实单看正向传播和反向传播这两个概念,很好理解。
正向传播(Forward Propagation)是指数据从神经网络的第一层(也叫输入层)到最后一层(也叫输出层)的数据流动过程。
而反向传播(Backpropagation)是指数据从输出层到输入层的反向流动过程。
正常情况下,利用神经网络推理一张图像。图像数据从神经网络的输入层一直流到输出层就可以得到推理的结果,这是典型的正向传播过程,因此在推理时只有正向传播。
那反向传播是用在什么地方呢?没错,是训练。
上一节举了个例子,训练的过程就好像我们在初中高中学习课本知识一样,不断的校正我们大脑中对于知识的理解。
因此训练的过程需要有一个不断反馈、不断校正的过程,在神经网络中被校正的参数被称为神经网络的权重(或权值)。
还记得之前在介绍传统计算机视觉的时候提到的均值滤波器吗?均值滤波器中的参数都是1,可以完成对噪声的均匀滤除。
而神经网络中很多算法的参数是不确定的,我们没有办法来进行设计,只能让神经网络自己去学习,自己不断的去调整这些。
因此科学家们设计了一个反向传播机制,专门用来调整这个参数,下面用通俗的语言来介绍训练过程,以及反向传播是如何运行的。
训练和反向传播的模拟介绍
首先,在神经网络最后的输出层后面,都会有一个损失函数,该函数用来评判神经网络输出的结果与真实结果的接近程度。预测结果与真实结果越接近,那么损失函数的输出值就越低,如果损失函数输出值为0,那么说明预测结果和输出结果完全一致。
假设,AI模型在第一次训练时,神经网络里的参数权重都是随机值(实际情况也是这样),那么基本上第一次的预测结果与真实结果差着十万八千里。
比如真实值是10,而预测结果是1000,此时预测结果比真实结果高了很多,那我们就希望模型的参数进行调整,使得预测的结果继续变小。
这里就要用到神经网络的反向传播过程。
它会把本次预测结果与真实结果之间的差距(这里是1000 -10 = 990)反向传给神经网络的每一层,神经网络的每一层拿到后面传过来的 990 的变化量之后就会知道,本次预测高了,神经网络就会把自己的权重进行调整,调整的方向是使下一次的预测变得低一些。
若是下一次预测的结果是 800,结果还是偏高,会继续把这一次的变化量 (800-10=790) 再次进行反向传播,然后每一层继续往下调整参数,直到网络输出的结果为10。
学习率
上面描述的是一个大致的过程。在实际模型训练中,损失函数的输出是有波动的。
比如某一次预测值为 20,这是高于真实值的,我们希望继续往下调,下一次的预测值可能会变成0,此时又低于真实值,模型需要再继续调整参数使输出变得大一些,此时可能输出又变成了 20,这样反复调整会使得预测结果在真实的结果10之间上下波动,但是不收敛到10。
这是因为每次反向传播时,调整的幅度过大,在这个时候可以适当的将调整的幅度降低。
这个幅度,可以通过配置学习率来控制。学习率是神经网络模型的一个超参数,我们可以在训练模型时配置这个参数。
学习率降低后,假设输出可以做到每次调整的变化量为 5,这样结果就在5和15之间波动,如果在继续降低学习率,调整成0.1,那么预测值就在9.9和10.1之间波动,基本上就可以认为模型收敛到10了。
在真实的训练过程中,刚开始可以将学习率设置的大一些,到了后期将学习率设置的小一些,从而实现前期快速收敛、后期精度微调的效果。
以上便是训练的大致过程,反向传播在其中发挥了巨大的作用。
具体而言,反向传播在实际神经网络中计算的过程如下(了解即可):
根据预测结果和真实标签计算损失函数,输出损失值。
计算损失值对权重的偏导数(得到反向传播的梯度)。
通过链式法则依次计算前一层的梯度。
使用梯度下降法或其他优化算法,更新网络参数,使损失函数的输出值最小化。
正向传播和反向传播是神经网络中的核心概念,通过这两个过程,神经网络可以通过大量样本的训练来调整模型的权重,从而使模型逐渐优化并具备较好的泛化能力。
后面会有一个实战:在笔记本上训练一个图像识别的小模型。