Mac*_*ack 5 python gradient-descent pytorch fast-ai
我正在研究“使用 fastai 和 Pytorch 为编码人员进行深度学习”。第 4 章通过一个简单的例子介绍了 PyTorch 库中的 autograd 函数。
x = tensor([3.,4.,10.]).requires_grad_()
def f(q): return sum(q**2)
y = f(x)
y.backward()
Run Code Online (Sandbox Code Playgroud)
我的问题归结为:y = f(x)
is的结果tensor(125., grad_fn=AddBackward0)
,但这到底意味着什么?为什么我要将三个完全不同的输入值相加?
我知道.backward()
在这种情况下使用是在这种情况下的简写.backward(tensor[1.,1.,1.])
,但我没有看到在列表中对 3 个不相关的数字求和如何帮助获得任何东西的梯度。我不明白什么?
我不是在这里寻找研究生级别的解释。我正在使用的这本书的副标题是没有博士学位的人工智能应用程序。我在学校的渐变经验是我应该恢复一个功能,但我知道 Autograd 不是这种情况。这个简短示例的图表会有所帮助,但我在网上看到的那些通常包含太多参数或权重和偏差而无用,我的思绪迷失在路径中。
太长了;函数和的导数是它们的导数之和
设x
为由x_i
(i
其中[0,n]
)y = x**2
和组成的输入向量L = sum(y_i)
。您正在计算,一个与其分量dL/dx
相同大小的向量(其中)。x
dL/dx_j
j
[0,n]
对于j
in [0,n]
,dL/dx_j
就是简单的dy_j/dx_j
(和的导数是导数之和,并且只有一个与零不同),即d(x_j**2)/dx_j
,即 2*x_j
。所以,dL/dx = [2*x_j where j in [0,n]]
。
x.grad
这是计算梯度时得到的结果x
:
y = f(x)
y.backward()
Run Code Online (Sandbox Code Playgroud)
x
或分别的每个分量的梯度:
y = x**2
y.backward(torch.ones_like(x))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
55 次 |
最近记录: |