五.前馈运算和反馈运算

前馈运算

无论训练模型时计算误差还是模型训练完毕后获得样本预测,卷积神经网络的前馈运算都较直观。同样以图像分类任务为例,假设网络已训练完毕,即其中参数ω1, . . . , ωL-1 已收敛到某最优解,此时可用此网络进行图像类别预测。预测过程实际就是一次网络的前馈运算:将测试集图像作为网络输入x1 送进网络,之后经过第一层操作 ω1 可得 x2,依此下去……直至输出xL ∈ RC。其中, xL 是与真实标记同维度的向量。

在利用交叉墒损失函数训练后得到的网络中,xL 的每一维可表示 x1 分别隶属 C 个类别的后验概率。

这样,可以通过下式得到输入图像x1对应的预测标记:

反馈运算

深度学习模型采用随机梯度下降法和误差反向传播进行模型参数更新。

批处理的随机梯度下降法在训练模型阶段随机选取 n 个样本作为一批样本,先通过前馈运算得到预测并计算其误差,后通过梯度下降法更新参数,梯度从后往前逐层反馈,直至更新到网络的第一层参数,这样的一个参数更新过程称为一个“批处理过程”。不同批处理之间按照无放回抽样遍历所有训练集样本,遍历一次训练样本称为“一轮”(epoch)。

我们来看误差反向传播的详细过程。假设某批处理前馈后得到 n 个样本上的误差为 z,且最后一层 L 为 ℓ2 损失函数,则易得:

不难发现,实际上每层操作都对应了两部分导数:一部分是误差关于第 i 层参数的导数∂z/∂ωi ,另一部分是误差关于该层输入的导数 ∂z/∂xi 。其中:

下面以第 i 层参数更新为例。当误差更新信号(导数)反向传播至第 i 层时,第i + 1 层的误差导数为 ∂z/∂xi+1 ,第 i 层参数更新时需计算 ∂z/∂ωi 和 ∂z/∂xi 的对应值。根据链式法则,可得:

反向传播算法训练步骤:

当然,上述方法是通过手动书写导数并用链式法则计算最终误差对每层不同参数的梯度,之后仍需通过代码将其实现。可见这一过程不仅繁琐,且容易出错,特别是对一些复杂操作,其导数很难求得甚至无法显式写出。针对这种情况,一些深度学习库,如tensorflow都采用了符号微分的方法进行自动求导来训练模型。

符号微分可以在编译时就计算导数的数学表示,并进一步利用符号计算方式进行优化。在实际应用时,只需把精力放在模型构建和前向代码书写上,不用担心复杂的梯度求导过程。

你可能感兴趣的:(五.前馈运算和反馈运算)