从向量点乘到矩阵哈达玛积:图解AI论文里那些花式‘乘’法

从向量点乘到矩阵哈达玛积:图解AI论文里那些花式‘乘’法

第一次翻开深度学习论文时,那些密密麻麻的矩阵运算符号总让人头晕目眩——QK^T究竟是哪种乘法?门控机制里的⊙符号又代表什么?更让人困惑的是,为什么同样的"外积"在Numpy和数学教材里竟是完全不同的两种运算?本文将用最直观的图示和类比,带你拆解这些让初学者望而生畏的"花式乘法"。

1. 向量世界的二元运算:点乘与叉乘

想象你在相亲派对上给心仪对象打分。如果把你的择偶标准(颜值、学历、收入)和对方的条件都看作向量,那么**点乘(Dot Product)**就是你们的匹配度总分——每个维度相乘后相加的结果。用PyTorch实现这个"相亲算法"只需一行:

match_score = torch.dot(torch.tensor([8,7,6]), torch.tensor([7,8,9])) # 8*7 +7*8 +6*9 = 154

而**叉乘(Cross Product)**则像基因重组实验。当两个三维向量"结合"时,会产生一个垂直于它们的新向量(法向量),其长度恰好等于这两个向量张成的平行四边形面积。这个特性在计算物体表面法线时非常有用:

surface_normal = np.cross([1,0,0], [0,1,0]) # 得到[0,0,1]

表:向量乘法的两种基本形式对比

特性

点乘

叉乘

输入维度

任意相同维度

仅限三维空间

输出类型

标量

向量

几何意义

投影长度乘积

法向量与面积

交换律

满足(a·b=b·a)

不满足(a×b=-b×a)

典型应用

相似度计算、投影

物理力矩、法线计算

注意:在高等数学中,叉乘属于 Exterior Product 的一种特例,而线性代数里的 Outer Product 则是完全不同的概念

2. 矩阵乘法:从基础版到豪华套餐

当数据升级为矩阵形式时,乘法运算就变得丰富多彩起来。最常见的**矩阵乘法(MatMul)**就像出版社的印刷流水线——左边矩阵的每一行(一本书的内容)与右边矩阵的每一列(印刷成本要素)进行点乘,最终得到出版成本矩阵:

book_contents = torch.randn(3,100) # 3本书各100个章节

printing_factors = torch.randn(100,5) # 纸张、油墨等5种成本

total_cost = torch.matmul(book_contents, printing_factors) # 得到3x5成本矩阵

但在注意力机制中,你会遇到 哈达玛积(Hadamard Product) ——两个形状相同的矩阵像调色盘混色一样逐元素相乘。这种运算在门控机制中至关重要:

attention_gate = torch.sigmoid(control_signal) * feature_map # 逐元素相乘

表:深度学习中的三大矩阵乘法对比

运算类型

运算符

形状要求

计算方式

典型应用场景

标准矩阵乘

@

m×n 与 n×p

行列点乘

全连接层、注意力QK^T

哈达玛积

完全相同

逐元素相乘

门控机制、掩码操作

克罗内克积

任意

块状扩展

梯度计算、参数扩展

3. 外积的双面人生:从升维运算到张量积

同一个"外积"称谓下其实藏着两个完全不同的概念。在Numpy中, np.outer 实现的**向量外积(Outer Product)**就像制作产品规格表——将列向量的每个特性与行向量的每个参数组合,生成完整的参数矩阵:

features = np.array([3,4]) # 产品特性

params = np.array([0.1,0.2,0.3]) # 参数选项

spec_table = np.outer(features, params)

"""

[[0.3, 0.6, 0.9],

[0.4, 0.8, 1.2]]

"""

而**克罗内克积(Kronecker Product)**则是更彻底的升维运算,它像用乐高积木搭建分形结构——将右边矩阵的每个元素与整个左边矩阵相乘后拼接。这种运算在梯度计算中经常出现:

A = torch.tensor([[1,2],[3,4]])

B = torch.tensor([[0,5],[6,7]])

kronecker = torch.kron(A,B) # 结果是一个4x4矩阵

4. 实战:识别论文中的乘法符号

现在让我们用"乘法侦探游戏"检验学习成果。当你看到这些典型符号时:

:这是点乘的另一种表示,常见于自注意力机制中的相似度计算

A⊙B :哈达玛积,Transformer中的门控特征融合会用到

QK^T :标准矩阵乘法,注意这里的转置是为了对齐维度

∂L/∂W ⊗ x :克罗内克积,出现在梯度计算过程中

遇到不确定的情况时,最可靠的方法是查阅框架文档。例如PyTorch中:

torch.mm() 用于矩阵乘法

torch.mul() 或 * 运算符实现哈达玛积

torch.ger() 对应向量外积

提示:实际代码中经常出现 * 和 @ 的混用,要特别注意numpy和PyTorch对这两个运算符的定义可能不同

理解这些运算的几何意义后,再看注意力机制的公式就不再是符号谜题了。比如缩放点积注意力中的计算流程:

QK^T矩阵乘法计算相似度

除以√d_k进行数值稳定

Softmax转换为概率分布

最后与V矩阵相乘完成加权求和

下次当论文中的乘法符号让你困惑时,不妨画个简单的2×2矩阵示例,亲手计算一遍就能豁然开朗。记住,这些看似复杂的运算本质上都是基础乘法的排列组合,就像乐高积木,用有限的模块能搭建出无限可能。


TOP