Python可微分编程初步

发布时间:2026/10/6 0:03:36

Python可微分编程初步 文章目录一元标量函数多元函数一元数组函数可微分计算Differentiable Computing或可微分编程Differentiable Programming是近年来计算机科学和科学计算领域最重要的范式转变之一。它的核心思想是将计算机程序变成可微分的从而可以通过梯度下降等优化方法从输出结果反推并优化输入参数或程序内部的逻辑。不用想就知道这种观念的直接来源是深度学习但其应用领域却足以泛化到整个科学计算和工程领域。一元标量函数PyTorch支持可微分计算只需在创建张量时开启【requires_grad】即可自动计算梯度。例如对于y x 2 yx^2yx2而言d y d x 2 x \frac{\mathbf dy}{\mathbf dx}2xdxdy​2x。现令x 3 x3x3则其PyTorch可以依次计算出importtorch xtorch.tensor(3.0,requires_gradTrue)yx**2print(fy 的值:{y.item()})# y 的值: 9.0y.backward()print(fx 的梯度 (dy/dx):{x.grad.item()})# x 的梯度 (dy/dx): 6.0多元函数下面考虑多元函数f ( x , y ) x 2 sin ⁡ y e x y f(x,y) x^2\sin ye^{xy}f(x,y)x2sinyexy其偏导数为∂ f ∂ x 2 x sin ⁡ y y e x y ∂ f ∂ y x 2 cos ⁡ y x e x y \begin{aligned} \frac{\partial f}{\partial x}2x\sin yye^{xy}\\ \frac{\partial f}{\partial y}x^2\cos yxe^{xy}\\ \end{aligned}∂x∂f​∂y∂f​​2xsinyyexyx2cosyxexy​当x 1 , y π 2 x1, y\frac{\pi}{2}x1,y2π​时f 1 e π 2 ≈ 5.81 f x 2 π 2 e π 2 ≈ 9.56 f y e π 2 ≈ 4.81 \begin{aligned} f1e^\frac{\pi}{2}\approx5.81\\ f_x2\frac{\pi}{2}e^\frac{\pi}{2}\approx9.56\\ f_ye^\frac{\pi}{2}\approx4.81 \end{aligned}ffx​fy​​1e2π​≈5.8122π​e2π​≈9.56e2π​≈4.81​PyTorch的自动微分仍旧可以完美运行xtorch.tensor(1.0,requires_gradTrue)ytorch.tensor(torch.pi/2,requires_gradTrue)f(x**2)*torch.sin(y)torch.exp(x*y)f.backward()print(fdf/dx:{x.grad.item():.4f})# df/dx: 9.5563print(fdf/dy:{y.grad.item():.4f})# df/dy: 4.8105一元数组函数回到y x 2 yx^2yx2如果x xx是个数组那么在Python的计算规则中y yy也是同样维度的数组。此时把求导操作视作∂ y ∂ x \frac{\partial y}{\partial x}∂x∂y​那么形式上的展开差不多是∂ ( y 1 , y 2 , ⋯ ) ∂ ( x 1 , x 2 , ⋯ ) \frac{\partial (y_1, y_2, \cdots)}{\partial(x_1, x_2,\cdots)}∂(x1​,x2​,⋯)∂(y1​,y2​,⋯)​有些意义不明感觉最后求出来的是个矩阵。但是如果y i y_iyi​求和那么就会得到s ∑ i y i ( x i ) s\sum_i y_i(x_i)s∑i​yi​(xi​)此时∂ s ∂ ( x 1 , x 2 , ⋯ ) \frac{\partial s}{\partial(x_1, x_2,\cdots)}∂(x1​,x2​,⋯)∂s​的意义却相对明确即s x i ∂ s ∂ x i ∂ y i ∂ x i s_{x_i} \frac{\partial s}{\partial x_i}\frac{\partial y_i}{\partial x_i}sxi​​∂xi​∂s​∂xi​∂yi​​。按照这个逻辑可以用PyTorch继续做反向传播示例如下xtorch.tensor([1.0,2.0,3.0],requires_gradTrue)yx**2# y 是一个向量 [1, 4, 9]# 注意直接 y.backward() 会报错lossy.sum()loss.backward()print(fx 的梯度:{x.grad})# x 的梯度: tensor([2., 4., 6.])
延伸阅读

更多相关文章

2026/9/22 1:31:01

【maya】在maya中对物体创建locator定位器做跟踪

用途:灯光跟随 or 对角色某个顶点跟踪 1、创建 locator又名定位器,有多种创建方式,可以在创建下拉菜单中创建,也可直接在绑定面板创建 方法1方法22、maya使用情况(一) 有一个情景,角色在跑步…

2026/10/6 0:03:23

MRAM+STM32工业断电数据保全实战指南

1. 项目概述:为什么在工业现场非得用 MR25H40CDF 配 STM32F031C6 做数据存储?在工厂产线的PLC柜里、在野外无人值守的环境监测终端里、在高速运转的包装机控制板上,你经常能看到一块指甲盖大小的黑色芯片,旁边贴着“MR25H40CDF”丝…

2026/10/6 0:03:23

MR25H40CDF+STM32F031C6工业级高可靠数据存储方案

1. 项目概述:为什么在工业现场非得用 MR25H40CDF 配 STM32F031C6 做数据存储?在工厂产线的 PLC 控制柜里、在风电变流器的散热片背面、在矿井监测终端的金属外壳下,你经常能看到一块指甲盖大小的黑色芯片——它既不是 Flash,也不是…

2026/10/5 6:32:56

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/4 0:01:02

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/5 17:38:27

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 0:03:23

MR25H40CDF+STM32F031C6工业级高可靠数据存储方案

1. 项目概述:为什么在工业现场非得用 MR25H40CDF 配 STM32F031C6 做数据存储?在工厂产线的 PLC 控制柜里、在风电变流器的散热片背面、在矿井监测终端的金属外壳下,你经常能看到一块指甲盖大小的黑色芯片——它既不是 Flash,也不是…

2026/10/6 0:03:23

MRAM+STM32工业断电数据保全实战指南

1. 项目概述:为什么在工业现场非得用 MR25H40CDF 配 STM32F031C6 做数据存储?在工厂产线的PLC柜里、在野外无人值守的环境监测终端里、在高速运转的包装机控制板上,你经常能看到一块指甲盖大小的黑色芯片,旁边贴着“MR25H40CDF”丝…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑