自动微分变量

表面上看,自动微分变量与普通张量没有区别,都可以进行运算,但自动微分变量内部数据结构更加复杂。

在深度学习中,微分是一个关键的概念,因为我们需要计算梯度来优化模型的参数。然而,手动计算微分公式可能非常复杂,特别是对于复杂的深度学习模型。这就是自动微分变量的作用所在。

在 PyTorch 1.5 中,自动微分变量已经与张量合并,任何一个张量都是一个自动微分变量。

使用自动微分变量后,不论计算多么复杂,系统都会自动构造一个计算图来记录运算过程。构建好计算图后,可非常方便地自动执行反向传播算法,算出每个自动微分变量的梯度信息。

核心属性

自动微分变量核心属性:

示例

通过PyTorch的自动微分变量来计算下面函数的导数:

t(x)=m(x+2)2

其中 m 表示求平均。具体代码:

x = torch.ones(2, 2, requires_grad=True)
y = x + 2
z = y * y
t = torch.mean(z)

对于输入 x=[[1, 1], [1, 1]],得到 z.data=[[9, 9], [9, 9]]

t 会对 z 矩阵取平均,最终得到 9。

执行求导,PyTorch 会从 t 到 x 执行反向传播算法

t.backward()

查看梯度:

print(z.grad)
print(y.grad)
print(x.grad)
None
None
tensor([[1.5000,  1.5000],
        [1.5000,  1.5000]])

PyTorch 规定,只有计算图上的叶节点才可以通过.backward()获得梯度信息。z和y不是叶节点,所以都没有梯度信息。

因此,计算得到的tx的值为:

tensor([[1.5000,  1.5000],
        [1.5000,  1.5000]])

在上面代码中:requires_grad=True是为了保证它可以在执行反向传播算法的过程中获得梯度信息


本文作者:Maeiee

本文链接:自动微分变量

版权声明:如无特别声明,本文即为原创文章,版权归 Maeiee 所有,未经允许不得转载!


喜欢我文章的朋友请随缘打赏,鼓励我创作更多更好的作品!