【预备知识】深度学习中的计算图详解:显式构建 vs 隐式构建(动态图)

一、什么是计算图(Computational Graph)?

✅ 定义:

计算图是一种表示数学表达式的数据结构,将复杂计算拆解为一个由基本运算节点组成的有向无环图(DAG),是深度学习中实现**自动微分(自动求导)**的核心。

✅ 本质:

  • 节点(Node)表示操作(op),如加法、乘法、ReLU等

  • 边(Edge)表示数据流(tensor),即一个操作的输出传给下一个操作作为输入

  • 图必须是无环的,因为反向传播(链式求导)必须从输出沿依赖方向反推到输入


二、为什么需要计算图?

自动微分框架(如 PyTorch、TensorFlow)要支持:

  • 自动构造复杂函数

  • 自动计算梯度(用于反向传播)

  • 图结构便于内存优化、图编译、跨平台运行(比如 GPU、TPU)

➡️ 这就需要一种结构化表达计算的方法:计算图


三、显式构建 vs 隐式构建:两种计算图的实现方式


🔷 1. 显式构建(Static Graph)

✅ 定义:

显式构建是指:在模型运行前,用户先手动或使用框架工具“搭建好”整个计算图结构,然后再运行数据。

✅ 特点:
特性描述
构图时机运行前,先构图,再执行
可优化性高。可静态优化整个图结构
调试性差。构图和执行分离,不利于用 print、断点等调试
编程风格类似声明式(先“声明”整个图)
静态图框架TensorFlow 1.x、Theano、MXNet(显式模式)等
✅ 示例(TensorFlow 1.x 风格):
import tensorflow as tf

x = tf.placeholder(tf.float32)
y = x * x + 2

with tf.Session() as sess:
    result = sess.run(y, feed_dict={x: 3})
  • x * x + 2 在运行前就已经构建好图

  • sess.run() 时候才会真正执行


🔷 2. 隐式构建(Dynamic Graph / Eager Execution)

✅ 定义:

隐式构建指的是:代码运行时自动按执行顺序构建计算图,你写什么操作,它立刻执行并记录到计算图里。

✅ 特点:

特性描述
构图时机运行时,边执行边构图
可优化性稍弱,但框架有 JIT 编译方式优化(如 TorchScript)
调试性强,能像普通 Python 一样 printif 等调试
编程风格命令式(像写普通 Python 脚本)
动态图框架PyTorch、TensorFlow 2.x、MXNet(默认模式)
✅ 示例(PyTorch 风格):
import torch

x = torch.tensor([3.0], requires_grad=True)
y = x * x + 2
y.backward()
print(x.grad)  # 输出梯度:6
  • 运算 x * x + 2 立即执行

  • 同时记录构图信息

  • 可直接调用 .backward() 自动求导


四、总结对比表

特性显式构建(Static Graph)隐式构建(Dynamic Graph)
构图时机模型运行前模型运行时
编程风格声明式命令式
执行方式构图 → 编译 → 执行边执行边构图
优化能力强,静态优化、跨平台编译稍弱,但支持 JIT 等补强
调试体验不友好,难以追踪具体变量非常友好,调试如普通 Python
代表框架TensorFlow 1.x, Theano, MXNetPyTorch, TensorFlow 2.x, MXNet
常见应用场景生产部署、图优化、硬件加速模型开发、调试、研究试验

五、扩展:MXNet 的“双模式”

MXNet 是一个既支持“显式图”又支持“隐式图”的框架,视使用方式而定:

显式构建(MXNet 静态图):

from mxnet import autograd, nd

with autograd.record():
    a = nd.ones((2,1))
    b = nd.ones((2,1))
    c = 2 * a + b  # 这段被记录进图
c.backward()

隐式构建(MXNet imperative mode):

只要你不加 autograd.record(),就是隐式执行。

✅ 总结一句话:

计算图是深度学习框架实现自动求导的关键结构,
显式构建强调运行前建图,适合部署优化;
隐式构建强调边运行边构图,适合开发调试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值