3.4 神经网络工作过程
一个神经网络完整的工作状态应分为两部分:训练阶段和测试阶段。训练阶段是一个神经网络学习的过程;测试阶段是用来评估已经训练完成的神经网络,面对全新的数据集,该神经网络又会有怎样的表现呢?
针对神经网络的两个工作状态,需要将数据集事先分为独立的两个部分——训练集和测试集,而且二者之间不存在交集。训练集用于神经网络训练阶段;测试集用于神经网络测试阶段。有时根据需要,还可将训练集再细分为训练集和验证集,每完成一个训练时期(epoch),就用验证集来衡量本次epoch的训练好坏。
训练阶段主要由两个过程组成:神经网络的前向传播和反向传播。前向传播(forward-propagation)是指从输入层到隐藏层,再到输出层的顺序,数据沿着这一正向顺序运动,依次计算并存储各层的中间变量,这个过程中没有反向运动。反向传播(back-propagation)是指从输出层到隐藏层,再到输入层的顺序,依次计算并存储各层的中间变量及参数的梯度,这也是一个参数优化的过程。前向传播与反向传播交替进行,相互依赖,使得神经网络在训练阶段的参数不断优化,从而得到一个较好的性能。
神经网络训练阶段流程图如图3-7所示。
图3-7 神经网络训练阶段流程图
神经网络在训练之前,各层参数会进行随机初始化,通过前向传播将输入数据映射为预测值输出。预测值与真实值之间一定会存在误差,误差的存在表明神经网络参数需要改进。这一误差可以通过损失函数计算得到,优化算法则可以根据误差在反向传播中调整并更新参数。理想的训练过程是经过反向传播的参数优化,在下一次前向传播结束后所得到的误差会更小,多次交替进行前向传播与反向传播,误差则可以达到收敛状态,最终满足所设定的误差范围。具体过程可总结为以下5个步骤:
1)确定合理的神经网络结构,用较小的非零随机数对权值进行初始化。
2)以随机或任意的顺序从训练集中选取训练样本,记录其真实值。
3)通过神经网络前向传播得到预测值,由损失函数计算出误差。
4)优化算法在神经网络反向传播过程中更新参数。
5)按顺序重复步骤2)~4),直到所得误差小于某一阈值或训练次数达到设定的总训练次数的上限为止。