×

PyTorch教程5.3之前向传播、反向传播和计算图

消耗积分:0 | 格式:pdf | 大小:0.14 MB | 2023-06-05

1123127317

分享资料个

到目前为止,我们已经用小批量随机梯度下降训练了我们的模型。然而,当我们实现该算法时,我们只担心通过模型进行前向传播所涉及的计算。当需要计算梯度时,我们只是调用了深度学习框架提供的反向传播函数。

梯度的自动计算(自动微分)大大简化了深度学习算法的实现。在自动微分之前,即使是对复杂模型的微小改动也需要手动重新计算复杂的导数。令人惊讶的是,学术论文常常不得不分配大量页面来推导更新规则。虽然我们必须继续依赖自动微分,以便我们可以专注于有趣的部分,但如果您想超越对深度学习的肤浅理解,您应该知道这些梯度是如何在底层计算的。

在本节中,我们将深入探讨反向传播(通常称为反向传播)的细节。为了传达对技术及其实现的一些见解,我们依赖于一些基本的数学和计算图。首先,我们将重点放在具有权重衰减的单隐藏层 MLP 上(ℓ2 正则化,将在后续章节中描述)。

5.3.1. 前向传播

前向传播(或forward pass)是指神经网络从输入层到输出层依次计算和存储中间变量(包括输出)。我们现在逐步了解具有一个隐藏层的神经网络的机制。这可能看起来很乏味,但用放克演奏家詹姆斯布朗的永恒名言来说,你必须“付出代价才能成为老板”。

为了简单起见,我们假设输入示例是 x∈Rd并且我们的隐藏层不包含偏差项。这里的中间变量是:

(5.3.1)z=W(1)x,

在哪里W(1)∈Rh×d是隐藏层的权重参数。运行中间变量后 z∈Rh通过激活函数 ϕ我们获得了长度的隐藏激活向量h,

(5.3.2)h=ϕ(z).

隐藏层输出h也是一个中间变量。假设输出层的参数只具有权重W(2)∈Rq×h,我们可以获得一个输出层变量,其向量长度为q:

(5.3.3)o=W(2)h.

假设损失函数是l示例标签是 y,然后我们可以计算单个数据示例的损失项,

(5.3.4)L=l(o,y).

根据定义ℓ2我们稍后将介绍的正则化,给定超参数λ,正则化项是

(5.3.5)s=λ2(‖W(1)‖F2+‖W(2)‖F2),

其中矩阵的 Frobenius 范数就是ℓ2将矩阵展平为向量后应用范数。最后,模型在给定数据示例上的正则化损失为:

(5.3.6)J=L+s.

我们指的是J作为下面讨论中的目标函数。

5.3.2. 前向传播的计算图

绘制计算图有助于我们可视化计算中运算符和变量的依赖关系。图 5.3.1 包含与上述简单网络相关的图形,其中方块表示变量,圆圈表示运算符。左下角表示输入,右上角表示输出。请注意箭头的方向(说明数据流)主要是向右和向上。

https://file.elecfans.com/web2/M00/A9/C6/poYBAGR9NK6AJFQWAACGowUha5Y731.svg

图 5.3.1前向传播计算图。

5.3.3. 反向传播

反向传播是指计算神经网络参数梯度的方法。简而言之,该方法根据微 积分的链式法则以相反的顺序遍历网络,从输出层到输入层。该算法存储计算某些参数的梯度时所需的任何中间变量(偏导数)。假设我们有函数 Y=f(X)Z=g(Y), 其中输入和输出 X,Y,Z是任意形状的张量。通过使用链式法则,我们可以计算导数 Z关于X通过

(5.3.7)∂Z∂X=prod

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !