对于反向传播来说,首先要根据神经网络计算出的值和期望值计算损失函数的值,然后再计算损失函数对每个权重或偏置的偏导,最后进行参数更新。
上节示例给出的神经网络采用均方误差作为损失函数,则损失函数在样本( x , y )上的误差为
由于权重参数 W 是随机初始化的,因此损失函数值比较大。
为了衡量 W 对损失函数的影响,下面以隐层的第2个节点到输出层的第1个节点的权重 (简记为 ω )为例,采用链式法则计算损失函数 L ( W )对 ω 的偏导。首先计算损失函数 L ( W )对 的偏导,再计算 对 z 1 的偏导,然后计算 z 1 对 ω 的偏导,最后将三者相乘
结合上一节的示例,计算损失函数对 ω 的偏导。总的损失函数为
其对 的偏导为
神经网络输出 是 通过sigmoid激活函数得到的,即 。其对 的偏导为
z 1 是通过隐层的输出 h 1 , h 2 , h 3 与对应权重 分别相乘后求和,再加上偏置 得到的
因此, z 1 对 ω 的偏导为
最后可以得到损失函数对 ω 的偏导为
下一步可以更新 ω 的值。假设步长 η 为1,由初始化的权重矩阵(2.25)得到 ω 的初始值为0.35,更新后的 ω 为
同理,可以更新 W (2) 上的其他元素的权重值。
上面是反向传播的第一步,从输入到隐层、从隐层到输出层的 W 都可以用同样的链式法则进行计算和更新。
反向传播就是要将神经网络的输出误差一级一级地传播到神经网络的输入。在该过程中,需要计算每一个 w 对总的损失函数的影响,即损失函数对每个 w 的偏导。根据 w 对误差的影响,再乘以步长,就可以更新整个神经网络的权重。当一次反向传播完成之后,网络的参数模型就得到更新。更新一轮之后,接着输入下一个样本进行正向传播,算出误差后又可以更新一轮,再输入一个样本,又来更新一轮,通过不断地输入新的样本迭代地更新模型参数,就可以缩小计算值与真实值之间的误差,最终完成神经网络的训练。
训练好神经网络模型之后,就可以用该模型对新的数据进行预测(即正向传播过程),完成推理(inference)任务。