当前位置: 首页 > news >正文

从向量到张量:图解‘内积’、‘外积’与‘克罗内克积’在PyTorch/TensorFlow里的那些事儿

从向量到张量:图解‘内积’、‘外积’与‘克罗内克积’在PyTorch/TensorFlow里的那些事儿

当你第一次在PyTorch或TensorFlow中看到torch.matmultf.tensordot*这些运算符时,是否感到困惑?它们有什么区别?什么时候该用哪一个?本文将用直观的图解和代码示例,带你理清这些概念,让你在编写神经网络模型时能够游刃有余。

1. 向量运算:从基础到框架实现

1.1 内积(点积):神经网络中的基础构建块

内积(Inner Product),也称为点积(Dot Product),是深度学习中最基础的运算之一。在PyTorch和TensorFlow中,实现向量内积有多种方式:

# PyTorch实现 import torch a = torch.tensor([1, 2, 3]) b = torch.tensor([4, 5, 6]) dot_product = torch.dot(a, b) # 32 dot_product_alt = torch.sum(a * b) # 等价实现 # TensorFlow实现 import tensorflow as tf a = tf.constant([1, 2, 3]) b = tf.constant([4, 5, 6]) dot_product = tf.tensordot(a, b, axes=1) # 32

内积在神经网络中的应用场景包括:

  • 全连接层的计算
  • 注意力机制中的query-key相似度计算
  • 损失函数(如余弦相似度)的实现

注意:框架中的dot函数通常只支持一维向量的点积运算。对于更高维度的张量,需要使用matmultensordot

1.2 外积:两种容易混淆的概念

在中文语境中,"外积"实际上对应着两个不同的数学概念:

  1. Outer Product(张量积)
    • 结果是一个矩阵
    • 计算方式:列向量 × 行向量
    • 框架实现:
# PyTorch a = torch.tensor([1, 2, 3]) b = torch.tensor([4, 5]) outer = torch.outer(a, b) # 3x2矩阵 # TensorFlow outer = tf.tensordot(a, b, axes=0)
  1. Exterior Product(叉积/叉乘)
    • 仅适用于3D空间中的向量
    • 结果是一个垂直于输入向量的新向量
    • 框架实现:
# PyTorch a = torch.tensor([1, 0, 0]) b = torch.tensor([0, 1, 0]) cross = torch.cross(a, b) # [0, 0, 1] # TensorFlow cross = tf.linalg.cross(a, b)
特性Outer ProductExterior Product
输入维度任意向量仅3D向量
输出维度矩阵向量
数学符号×
主要应用特征交互、核方法3D图形学、物理模拟

2. 矩阵运算:从基础概念到框架API

2.1 矩阵乘法:神经网络的核心运算

矩阵乘法(matmul)是深度学习中最常见的运算之一。在框架中,有几种等效的实现方式:

# PyTorch A = torch.randn(2, 3) B = torch.randn(3, 4) matmul = torch.matmul(A, B) # 2x4 matmul_alt = A @ B # 等效写法 # TensorFlow matmul = tf.matmul(A, B)

矩阵乘法在神经网络中的应用包括:

  • 全连接层的前向传播
  • 卷积运算的im2col实现
  • 注意力机制中的QKV变换

2.2 逐元素乘法与哈达玛积

逐元素乘法(Element-wise Multiplication)和哈达玛积(Hadamard Product)实际上是相同的概念:

# PyTorch A = torch.randn(2, 2) B = torch.randn(2, 2) hadamard = A * B # 逐元素相乘 # TensorFlow hadamard = tf.multiply(A, B)

应用场景:

  • 注意力权重与value的加权
  • 门控机制(如LSTM中的门控)
  • 数据增强中的掩码操作

3. 高阶张量运算:克罗内克积与张量缩并

3.1 克罗内克积:矩阵的升维运算

克罗内克积(Kronecker Product)是一种将两个矩阵组合成更大矩阵的运算:

# PyTorch实现 def kronecker(A, B): return torch.einsum('ab,cd->acbd', A, B).reshape(A.size(0)*B.size(0), A.size(1)*B.size(1)) # TensorFlow实现 def kronecker(A, B): return tf.reshape(tf.einsum('ab,cd->acbd', A, B), [A.shape[0]*B.shape[0], A.shape[1]*B.shape[1]])

克罗内克积在深度学习中的应用:

  • 卷积神经网络中的膨胀卷积(Dilated Convolution)
  • 某些类型的注意力机制
  • 参数矩阵的结构化扩展

3.2 张量缩并:einsum的强大威力

爱因斯坦求和约定(einsum)是处理高阶张量运算的利器:

# 矩阵乘法 torch.einsum('ij,jk->ik', A, B) # 批量矩阵乘法 torch.einsum('bij,bjk->bik', batch_A, batch_B) # 注意力分数计算 torch.einsum('bqd,bkd->bqk', Q, K)

常见缩并模式及其应用:

缩并模式等效运算应用场景
'ij,jk->ik'矩阵乘法全连接层
'bij,bjk->bik'批量矩阵乘序列模型
'bqd,bkd->bqk'矩阵乘+转置注意力分数
'bhqd,bhkd->bhqk'多头注意力Transformer

4. 实战应用:从理论到代码实现

4.1 自注意力机制中的各种积

让我们看看这些运算如何在Transformer的自注意力机制中发挥作用:

def scaled_dot_product_attention(Q, K, V, mask=None): """Q, K, V的形状: (batch_size, seq_len, d_model)""" d_k = Q.size(-1) # 计算注意力分数(内积的批量版本) scores = torch.matmul(Q, K.transpose(-2, -1)) / math.sqrt(d_k) if mask is not None: scores = scores.masked_fill(mask == 0, -1e9) # 计算注意力权重(softmax) attention_weights = torch.softmax(scores, dim=-1) # 应用注意力权重到V上(加权求和) output = torch.matmul(attention_weights, V) return output, attention_weights

在这个实现中,我们使用了:

  1. matmul计算query和key的相似度(本质是批量内积)
  2. 逐元素运算(softmax和masking)
  3. 最后的matmul实现注意力权重对value的加权

4.2 核方法中的外积应用

外积在核方法中有着重要应用,特别是在特征映射方面:

def polynomial_kernel(X, Y, degree=2): """多项式核函数""" # 先计算内积 inner = torch.matmul(X, Y.T) # 然后加上偏置并取幂 return (inner + 1) ** degree def rbf_kernel(X, Y, gamma=None): """RBF核函数""" if gamma is None: gamma = 1.0 / X.size(1) # 计算两两距离 XX = torch.sum(X**2, dim=1, keepdim=True) YY = torch.sum(Y**2, dim=1, keepdim=True) XY = torch.matmul(X, Y.T) distances = XX - 2 * XY + YY.T return torch.exp(-gamma * distances)

在实际项目中,选择合适的运算需要考虑以下因素:

  1. 输入张量的形状和维度
  2. 期望的输出形状
  3. 计算效率(某些运算在特定硬件上更高效)
  4. 数值稳定性(如softmax前的缩放)
http://www.zskr.cn/news/1486367.html

相关文章:

  • 潍坊黄金回收探店实测:六家店真实回收体验全记录 - 余生黄金回收
  • Hermes Agent 周报 #8:v0.15.0 Velocity Release 落地,729 commits 实测
  • 多维聚合实战:从GROUP BY到数据立方体的工程化跃迁
  • 韶关母婴除甲醛CMA甲醛检测治理公司深度测评:绿呼吸环保稳居榜首 - 绿呼吸检测中心
  • MC68HC08单片机C语言编程优化:从数据类型到循环控制的全方位实战指南
  • LLM特殊标记符攻击原理与防御:96%成功率的token层越狱
  • 2026 广州天河汇算清缴干货,专业代账帮企业合理做好成本抵扣 - 资讯综合站
  • 基于SSM的音乐视频播放与管理网站(含数据库脚本+部署文档+开发报告)
  • 抖音批量下载器:3分钟学会高效下载抖音无水印视频的完整指南
  • 抖音无水印下载器:5分钟掌握批量下载的高效技巧
  • Cadence 17.4 安装避坑指南:用阿狸狗破戒大师V3.1.9绕过杀软报错(附阿里云盘资源)
  • 嵌入式Linux远程调试实战:基于i.MX 8M的GDB与IDE配置指南
  • 2026大同靠谱黄金白银铂金回收门店盘点 全域上门变现指南 - 余生黄金回收
  • 曲阜母婴除甲醛CMA甲醛检测治理公司深度测评:绿呼吸环保稳居榜首 - 绿呼吸检测中心
  • MySQL并行复制原理与调优实战:LOGICAL_CLOCK到WRITESET_SESSION全链路优化
  • S32M244 FTM/PDB/ADC协同配置实现无感PMSM FOC硬件触发链路
  • LPC86x FTM同步机制详解:实现无毛刺PWM动态更新
  • MC9S08PB16硬件互连实现纳秒级过流保护:OPAMP、ACMP与FDS实战
  • 武汉云克隆Luminex多因子检测骨代谢多标志物(ACP5、ALPL、CTXI、DKK1、IL6、LEP、OC、OPG、OPN、PDGF BB、PINP等),引领骨骼研究,守护骨骼健康
  • 嵌入式DSP实时内存管理:VSMM原理、配置与工程实践指南
  • 2026扬州贵金属回收避坑指南 正规门店大盘价回收汇总 - 余生黄金回收
  • 如何在Android设备上实现专业级FT8通信?FT8CN开源项目实战指南
  • 谷歌ads搜索广告怎么关闭:避开搜索合作伙伴,让跳出率骤降40%
  • 深入YOLOv5的‘骨架’与‘神经’:从模型yaml文件到训练超参的完整配置解析
  • IPXWrapper技术解析:现代Windows系统下的IPX/SPX协议兼容解决方案
  • 抖音无水印下载终极指南:5分钟掌握高效批量下载技巧
  • 5步掌握Grammarly Premium高级版免费使用方案:自动Cookie搜索工具详解
  • Python深度解析:pyautocad如何重新定义AutoCAD自动化编程范式
  • 2026 天河个体工商户创业指南,低成本注册 合规代账搭配方案 - 资讯综合站
  • 大麦抢票脚本终极指南:告别手速焦虑,轻松抢到心仪演出票