【研究生随笔】Pytorch中的线性代数(微分)

在深度学习中,导数和微分是优化算法的关键步骤,对于每个参数,如果把这个参数增加或减少⼀个⽆穷小的量,就可以知道损失会以多快的速度变化。

  • 求导

    ○ 下面构造一个Y = X^2 的求导过程

python 复制代码
		X = tensor(3.0,requires_grad=True)#让X的初始值为3.0,参数后面讲
		Y = torch.pow(X,2)#构建X^2
		Y.backward()
		Print(X.grad) #输出为tensor(6.)

上面就是求导的基本过程。

标量对向量或矩阵的求导,会比较复杂一点,但是基本是一样的,如下:

python 复制代码
import torch as torch
# 创建一个多元函数,即Y=xw+b=Y=x1*w1+x2*w2+x3*w3+b,x不可求子,M,b设置可求子
X = torch.tensor([1.5,2.5,3.5], requires_grad = False)
W = torch.tensor([0.2,B,4,日.6], requires_grad = True)
b = torch,tensor(.1, requires_grad = True)
Y = torch.add(torch.dot(x,W), b)
# 判断每个tensor是否是可以求导的
print(X.requires_grad)
print(W.requires_grad)
print(b.requfres_grad)
print(Y.requires_grad)
# 求导,通过backward函数来实现
Y.backward()
# 查看导数,即所谓的梯度
print(W.grad)
print(b.grad)
'''
运行结果为:
False
True
True
Trua
ten5or([1.5000, 2.5000, 3.5000])
tensor(1.)
'''

○ 相关参数和函数:

requires_grad:构建一个tensor时的一个参数,默认为false即不可导,相反。可以通过X.requires_grad()的返回值来判断是否可导。

一个表达式中,只有当所有元素都不可导时,这个表达式才不可导(因为可以求偏导)

backward():直接调用的话只能求普通函数的求导,复合函数的话会复杂一点。

只能是【标量】对【标量】,或者【标量】对【向量/矩阵】求导!这个很关键,很重要!

• 向量对向量、矩阵对矩阵的求导:通过backword的一个参数gradient来实现(第六行)gradient参数的维度与最终的函数y保持一样的形状,每一个元素表示当前这个元素所对应的权重。

这就可以在之后的实验中,对特定的数据增加权重来进行对比实验,但正式实验中一般不这样做,权重是不可以随意修改的。

python 复制代码
import torch as torch
x = torch.tensor([[1.,2.,3.],[4.,5.,6.]], requires_grad = True)
y = torch.add(torch.pow(x,2), x)
gradient = torch.tensor([[1.0,1.0,1.0], [1.0,1.0,1.0]])
y.backward(gradient)
print(x.grad)
'''
运行结果为:
tensor([[ 3.,5.,7.],
[9.,11.,13.]])
'''

• 一般求导所用到的参数解释(包括上面的gradient):

○ y.backward(grad_tensors=None, retain_graph=None, create_graph=False)

grad_tensors:同gradient

retain_graph:保留运算图,就是求导的顺序图,一般复合函数求导会用到,一个计算图在进行反向求导之后,为了节省内存,这个计算图就销毁了。 如果你想再次求导,就会报错。

create_graph:应该就是允许计算高阶导数吧,还不是很清楚,之后遇到再百度。

○ torch.autograd.backward(tensors,grad_tensors=None, retain_graph=None, create_graph=False)(反求导)

多了个tensors,这个就是要进行反求导的函数了。

相关推荐
NAGNIP1 小时前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
冬奇Lab2 小时前
一天一个开源项目(第36篇):EverMemOS - 跨 LLM 与平台的长时记忆 OS,让 Agent 会记忆更会推理
人工智能·开源·资讯
冬奇Lab2 小时前
OpenClaw 源码深度解析(一):Gateway——为什么需要一个"中枢"
人工智能·开源·源码阅读
AngelPP6 小时前
OpenClaw 架构深度解析:如何把 AI 助手搬到你的个人设备上
人工智能
宅小年6 小时前
Claude Code 换成了Kimi K2.5后,我再也回不去了
人工智能·ai编程·claude
九狼6 小时前
Flutter URL Scheme 跨平台跳转
人工智能·flutter·github
ZFSS6 小时前
Kimi Chat Completion API 申请及使用
前端·人工智能
天翼云开发者社区8 小时前
春节复工福利就位!天翼云息壤2500万Tokens免费送,全品类大模型一键畅玩!
人工智能·算力服务·息壤
知识浅谈8 小时前
教你如何用 Gemini 将课本图片一键转为精美 PPT
人工智能
Ray Liang8 小时前
被低估的量化版模型,小身材也能干大事
人工智能·ai·ai助手·mindx