从前面章节可知,神经网络利用每个神经元实现简单的数据变换,并通过逐层连接将神经元组合起来,能够模拟输入到目标的复杂映射。一般情况下,激活函数的类型需要事先定义好,此时,神经网络中每层对输入数据所做的运算操作依赖该层的连接权值w和偏置b,其也被称为该层的参数。神经网络的训练是指,针对搭建好的网络结构,利用训练数据不断地优化网络的连接权值w和偏置b,最终为神经网络的所有层找到一组参数值,实现预测输出与真实输出的误差最小。在神经网络训练场中,可以观察到神经元之间的连线粗细会发生变化,代表权重参数值的大小变化,如图4-18所示。
从多层感知器开始,神经网络的研究人员开始使用各种技术进行神经网络的训练。例如用大量的数据,设计优化算法等。其中也包括设计神经网络的损失函数,用以衡量网络预测输出值与真实目标值之间的距离。损失函数的输入是网络预测值与真实目标值,输出为一个可采用多种定义形式的距离值,设计或选择合适的损失函数同样是神经网络设计的重要内容之一。损失函数能够衡量神经网络在训练过程中的某个时刻训练效果的好坏,而且能够将这个距离值作为反馈信号来对神经网络的权重等参数值进行微调,以降低当前对应训练样本的损失值。这种微调过程交由优化器来完成,它实现了所谓的反向传播算法(BP算法),这是神经网络及深度学习的核心算法。损失函数和优化器在神经网络的作用如图4-19所示。
图4-18 神经网络权重参数
图4-19 损失函数和优化器的作用
反向传播算法是使用数据来训练神经网络的算法,利用了神经网络的层次结构进行计算。不是一次计算所有参数的梯度,而是首先计算输出层的梯度,调整输出层的权重,然后计算隐含层的梯度,接着调整隐含层的权重。梯度的计算从后往前,一层层反向传播,最终更新整个网络中的所有权重。其实现流程如下:
(1)在给定的数据集中抽取一批训练样本x和对应目标y组成的数据组。
(2)利用初始权重,针对样本输入x上运行前向传播,从而得到网络的预测输出y_pred。(www.xing528.com)
(3)根据定义的损失函数计算网络在这批数据上的损失,衡量输出值y_pred与目标值y之间的距离。
(4)计算损失相对于输出层参数的梯度,然后根据误差降低最快的方向调整输出层权重参数。
(5)将这些输出误差反向传播给隐含层以便计算相应误差。
(6)计算这些误差的梯度,并利用同样的方式调整隐含层的权重。
(7)不断抽取训练样本迭代,直到网络收敛。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。