【AI】矩阵、向量与乘法
矩阵 x 矩阵 :可以看作是多个独立的 矩阵 x 向量 操作的集合。矩阵 x 向量 :可以看作是多个独立的 行向量 · 列向量 (点积) 操作的集合。矩阵 x 向量 (另一视角):也可以看作是矩阵的 列向量 的 线性组合。所以,最复杂的矩阵乘法,其最底层的基石就是 向量乘法 (主要是点积)。现代计算库(如BLAS)和硬件(如GPU)就是将上层复杂的运算,层层分解成海量的、简单的、可并行处理的向量运
简单来说,高级的矩阵运算可以被看作是多个低级向量运算的集合。这不仅是概念上的简化,也是硬件(如GPU)实际执行并行计算的方式。
我们用一个具体的例子,从矩阵乘法一步步分解到向量乘法。
假设我们有两个矩阵 A 和 B ,要计算 C = A * B 。
- A 是一个 2x3 矩阵
- B 是一个 3x2 矩阵
- 结果 C 将是一个 2x2 矩阵
A = [[1, 2, 3],
[4, 5, 6]]
B = [[10, 11],
[20, 21],
[30, 31]]
级别1:矩阵 x 矩阵 (Matrix-Matrix Multiplication)
这是最高级别的操作。按照定义, C 中的每个元素 C[i, j] 是由 A 的第 i 行和 B 的第 j 列的点积(Dot Product)得到的。
- C[0, 0] = (A的第0行) · (B的第0列) = (110) + (220) + (3*30) = 10 + 40 + 90 = 140
- C[0, 1] = (A的第0行) · (B的第1列) = (111) + (221) + (3*31) = 11 + 42 + 93 = 146
- C[1, 0] = (A的第1行) · (B的第1列) = (410) + (520) + (6*30) = 40 + 100 + 180 = 320
- C[1, 1] = (A的第1行) · (B的第2列) = (411) + (521) + (6*31) = 44 + 105 + 186 = 335
所以,最终结果是:
C = [[140, 146],
[320, 335]]
级别2:简化为 矩阵 x 向量 (Matrix-Vector Multiplication)
现在,我们换个角度看 C = A * B 。我们可以把矩阵 B 看作是由两个列向量 b1 和 b2 并排组成的。
- b1 (B的第一列) = [10, 20, 30]
- b2 (B的第二列) = [11, 21, 31]
那么, A * B 的结果 C ,它的每一列其实就是 A 分别乘以 B 的每一列的结果。
计算 C 的第一列 c1 : c1 = A * b1
c1 = [[1, 2, 3], * [10,
[4, 5, 6]] 20,
30]
这变成了一个 矩阵-向量乘法 。
- c1 的第一个元素 = (110) + (220) + (3*30) = 140
- c1 的第二个元素 = (410) + (520) + (6*30) = 320 所以, c1 = [140, 320] 。这正是 C 的第一列!
计算 C 的第二列 c2 : c2 = A * b2
c2 = [[1, 2, 3], * [11,
[4, 5, 6]] 21,
31]
- c2 的第一个元素 = (111) + (221) + (3*31) = 146
- c2 的第二个元素 = (411) + (521) + (6*31) = 335 所以, c2 = [146, 335] 。这正是 C 的第二列!
结论 :一个矩阵-矩阵乘法 A * B ,可以被完美地分解成一系列并行的矩阵-向量乘法。GPU就是利用这个原理,同时计算 Ab1 , Ab2 … ,从而实现大规模并行加速。
级别3:简化为 向量 x 向量 (Vector-Vector Multiplication)
现在我们再把 矩阵-向量乘法 c1 = A * b1 进行分解。这里有两种等价的视角。
视角A:点积 (Dot Product) 的集合
这是最经典的视角,也是我们刚才实际计算时用的方法。 c1 的每个元素,都是 A 的一个 行向量 和向量 b1 的 点积 。
- c1[0] = (A的第0行) · b1 = [1, 2, 3] · [10, 20, 30] = 140
- c1[1] = (A的第1行) · b1 = [4, 5, 6] · [10, 20, 30] = 320
结论 :一个矩阵-向量乘法,可以被分解成一系列 向量-向量点积 。每个点积都是独立计算的,这又是大规模并行的基础。
视角B:列向量的线性组合 (Linear Combination)
这是另一个非常重要且直观的视角。一个矩阵乘以一个向量,等于这个矩阵所有 列向量 的 加权和 ,而权重就是那个向量里的元素。
让我们看看 c1 = A * b1 :
c1 = [[1, 2, 3], * [10,
[4, 5, 6]] 20,
30]
A 的列向量分别是: a_col1 = [1, 4] , a_col2 = [2, 5] , a_col3 = [3, 6] b1 的元素是 10, 20, 30 。
根据这个视角, c1 应该是: c1 = (b1的第1个元素 * A的第1列) + (b1的第2个元素 * A的第2列) + (b1的第3个元素 * A的第3列) c1 = 10 * [1, 4] + 20 * [2, 5] + 30 * [3, 6] c1 = [10, 40] + [40, 100] + [90, 180] c1 = [10+40+90, 40+100+180] c1 = [140, 320]
结果完全一样!
结论 :这个视角告诉我们矩阵-向量乘法的几何意义。它把向量 b1 从一个坐标系(标准坐标系)转换到了由矩阵 A 的列向量所张成的新的坐标系中。
总结
- 矩阵 x 矩阵 :可以看作是多个独立的 矩阵 x 向量 操作的集合。
- 矩阵 x 向量 :可以看作是多个独立的 行向量 · 列向量 (点积) 操作的集合。
- 矩阵 x 向量 (另一视角):也可以看作是矩阵的 列向量 的 线性组合 。
所以,最复杂的矩阵乘法,其最底层的基石就是 向量乘法 (主要是点积)。现代计算库(如BLAS)和硬件(如GPU)就是将上层复杂的运算,层层分解成海量的、简单的、可并行处理的向量运算,从而获得惊人的计算速度。
更多推荐


所有评论(0)