作者 | 锦恢 编辑 | 自动驾驶之心
原文链接:https://www.zhihu.com/question/598278407/answer/3573288190
点击下方卡片,关注“自动驾驶之心”公众号
戳我-> 领取自动驾驶近15个方向学习路线
本文只做学术分享,如有侵权,联系删文
我发现很多人没有说到重点,首先,数学上的 tensor 和编程上的(pytorch)内的 tensor 是两个概念。数学上的 tensor 是用来研究高维矩阵之间的一些表达方式和运算性质的(比如高维空间的度量如何更加通用的定义),pytorch 里面的 tensor 是一个数据结构,不严谨且不恰当地讲,这个 class 是 numpy 的 np.ndarray 的子类。
请阁下备好红茶,然后回答我这么几个问题,当然我也附上了答案。
深度学习框架最重要的是什么?答:是自动求导系统。
为什么要自动求导系统?答:因为目前的损失函数的优化方法全都基于一阶梯度信息进行梯度下降。
如何实现梯度的计算?答:计算图。
因此,pytorch 的 tensor 和 numpy 最大的区别在于当你使用 tensor 进行加减乘除运算时,torch 后台会自动帮你构建出计算图,当你计算完成后,通过运算结果的 backward 函数反向传播后,你就可以得到一路上所有 requires_grad=True
的 tensor 的梯度了(必须是叶子节点)。因为这个过程中,每个 tensor 是计算图上的一个节点,在 HPC 或者 infra 工程师的语境中,我们更喜欢用 node 而非 tensor 来描述参与运算的单元。
具体的内部原理可以看我之前写的专栏,2024年了,计算图技术已经不是什么高深技术了:
K的深度学习框架
www.zhihu.com/column/c_1486851133511995393
用代码演示就是这个样子的,比如我们计算一个标量乘法的运算:
![8d2bd838f5fcc4ec744ee212422bce85.png](https://img-blog.csdnimg.cn/img_convert/8d2bd838f5fcc4ec744ee212422bce85.png)
![0ee7e315cc98935dce6bf29e0af24084.png](https://img-blog.csdnimg.cn/img_convert/0ee7e315cc98935dce6bf29e0af24084.png)
import torch
a = torch.tensor(1., requires_grad=True)
b = torch.tensor(2., requires_grad=True)
c = a * b
c.backward()
print(a.grad)
print(b.grad)
![494a68463df5ad062ab1a16a3121a6ef.png](https://img-blog.csdnimg.cn/img_convert/494a68463df5ad062ab1a16a3121a6ef.png)
那么回到最初的问题,tensor 和 numpy 的区别是什么?主要在于两点:
tensor 在运算时会构建计算图,numpy 不会。
![259b04088f0c94c63d76e1f5d3d591b9.png](https://img-blog.csdnimg.cn/img_convert/259b04088f0c94c63d76e1f5d3d591b9.png)
当然,你说我用 tensor 就是进行普通矩阵运算,不要什么计算图,可以吗?当然可以,你套上一个 no_grad() 的 上下文就 bingo 了:
with torch.no_grad():
# 此上下文中将不会生成计算图
反向计算很废的 =_=,不仅要把 grad_fn 一个个写出来,你还得考虑该死的广播运算呀,运算溢出如何处理呀。我开发自动求导系统时最怕遇到指数函数了。。。
最后多提一句,除了上面的不同外,pytorch 的 tensor 的基础运算在底层也做了一点点的优化。具体表现为,在 CPU 上,比较大的三维数组的计算(比如爱因斯坦乘),tensor 的速度显著优于 numpy。可以看我曾经给 CT 的 FBP 算法进行优化加速的博客:
kirigaya.cn/blog/article
而且 torch 的 tensor 还可以吃到 intel 的 mkldnn 驱动或者 nvidia 的 cuda 驱动的红利。这些都是一些数值计算上的优化差异了。
至于为什么这个领域的数组被叫成了 张量 tensor,楼上 酱紫君 的回答已经说得很到位了。毕竟,你们懂的,人们总是需要通过附庸风雅或者叶公好龙之为来弥补自己脆弱的认同感和安全感。MBTI 这种廉价的人格量表技术能如此流行也是大抵如此。
投稿作者为『自动驾驶之心知识星球』特邀嘉宾,欢迎加入交流!重磅,自动驾驶之心科研论文辅导来啦,申博、CCF系列、SCI、EI、毕业论文、比赛辅导等多个方向,欢迎联系我们!
① 全网独家视频课程
BEV感知、BEV模型部署、BEV目标跟踪、毫米波雷达视觉融合、多传感器标定、多传感器融合、多模态3D目标检测、车道线检测、轨迹预测、在线高精地图、世界模型、点云3D目标检测、目标跟踪、Occupancy、cuda与TensorRT模型部署、大模型与自动驾驶、Nerf、语义分割、自动驾驶仿真、传感器部署、决策规划、轨迹预测等多个方向学习视频(扫码即可学习)
② 国内首个自动驾驶学习社区
国内最大最专业,近3000人的交流社区,已得到大多数自动驾驶公司的认可!涉及30+自动驾驶技术栈学习路线,从0到一带你入门自动驾驶感知(2D/3D检测、语义分割、车道线、BEV感知、Occupancy、多传感器融合、多传感器标定、目标跟踪)、自动驾驶定位建图(SLAM、高精地图、局部在线地图)、自动驾驶规划控制/轨迹预测等领域技术方案、大模型、端到端等,更有行业动态和岗位发布!欢迎扫描下方二维码,加入自动驾驶之心知识星球,这是一个真正有干货的地方,与领域大佬交流入门、学习、工作、跳槽上的各类难题,日常分享论文+代码+视频
![db73b41a9f6dac283f687024bef41e3e.png](https://img-blog.csdnimg.cn/img_convert/db73b41a9f6dac283f687024bef41e3e.png)
③【自动驾驶之心】技术交流群
自动驾驶之心是首个自动驾驶开发者社区,聚焦感知、定位、融合、规控、标定、端到端、仿真、产品经理、自动驾驶开发、自动标注与数据闭环多个方向,目前近60+技术交流群,欢迎加入!扫码添加汽车人助理微信邀请入群,备注:学校/公司+方向+昵称(快速入群方式)
④【自动驾驶之心】全平台矩阵