Matrix Multiplication|矩阵乘法

bolin
发布于 2025-07-03 / 2 阅读
0
0

Matrix Multiplication|矩阵乘法

一、矩阵乘法简介

矩阵乘法(Matrix Multiplication)是一种将两个矩阵合并生成新矩阵的运算,其核心规则是“行乘列求和”:结果矩阵的第 i 行第 j 列元素,由第一个矩阵的第 i 行与第二个矩阵的第 j 列对应元素相乘后相加得到。

通俗理解

想象两个快递公司,一个负责收集包裹(矩阵A的行),一个负责派送路线(矩阵B的列)。矩阵乘法就是计算“从收集点到派送路线”的总运输量——每个结果数字是某条收集路线和某条派送路线所有包裹的匹配总和。


二、For循环 vs. 向量化 (NumPy)

14B845BD-3984-4C57-A926-B1FF903F0514.png

  1. For 循环实现

    • 输入 x 是一个向量 [200, 17],权重矩阵 M(实际应为 W)是 2x3 的矩阵。

    • 函数 dense(a_in, W, b) 通过循环逐列计算加权和 Z = np.dot(w, x) + b[j],再经过激活函数 g(z) 得到输出 a_out

    • 效率较低,适合理解计算过程,但实际应用中较少使用。

  2. 向量化实现

    • 输入 X1x2 矩阵,权重 W2x3 矩阵,偏置 B1x3 矩阵。

    • 使用 np.matmul(A_in, W) + B 直接计算矩阵乘法和偏置相加,再通过激活函数 g(Z) 得到输出 A_out

    • 代码更简洁,计算效率高,适合实际部署(如深度学习框架)。

  3. 其他细节

    • 图片底部有一个 1x3 矩阵 [[1, 0, 1]],可能是示例输出或中间结果。

    • 激活函数 g(z) 未具体定义(如 Sigmoid、ReLU 等)。

核心对比

  • For 循环:显式逐元素计算,适合教学。

  • 向量化:利用 NumPy 的矩阵运算,高效且代码简洁。


三、向量点积

2D79F31B-06D8-4EF7-815C-0C09A3D21F9D.png

  1. 点积示例

    CA1052C1-419B-44E5-BE14-9F188F8F3AFD.png

  2. 转置与矩阵乘法形式

    • 通过转置 a⃗T,将点积表示为矩阵乘法:

      F6DD0D98-A90E-414D-B568-5B9F44DC31D9.png

    • 强调这是理解矩阵乘法的基础(“行乘列求和”)。

  3. 用途说明

    • 图中标注点积对理解矩阵乘法非常有用(“useful for understanding matrix multiplication”)。

核心内容

  • 点积是向量对应元素相乘后求和的结果。

  • 转置后可用矩阵乘法表示,直接关联到矩阵乘法的计算规则。


四、向量矩阵乘法

B1837A78-F8A4-479D-A240-2A155BCA1F57.png

  1. 向量与矩阵的乘法

9CA4F0AA-E08B-4C44-B8FB-AF0996C507F1.png

  1. 计算步骤可视化

  • 图片通过箭头和分步计算强调了“行向量乘矩阵列”的过程。

核心内容

  • 向量与矩阵的乘法本质是行向量与矩阵的每一列依次做点积

  • 结果是一个新的行向量,其维度与矩阵的列数相同。


五、矩阵乘法

1A3ECB71-661A-4A73-B243-5D40D942B168.png

B5B33043-9B01-4854-9149-2CB29B731DB6.png

  1. 矩阵乘法计算

F68EBC34-CE39-4C35-8723-B8C7204F19CB.png

核心内容

  • 矩阵乘法的本质是左矩阵的行 × 右矩阵的列的点积求和。

  • 图片中的数值和矩阵定义存在多处笔误或矛盾,但计算逻辑符合矩阵乘法规则。


六、矩阵乘法的规则

B8E85B41-C7D5-4468-A9F2-B818A09705CE.png52B8538C-55DE-4EBF-A50B-28DDE85CE374.png

0226AA7E-10B7-49CA-B474-5B93E3AC282E.png

核心内容

  • 矩阵乘法要求第一个矩阵的列数等于第二个矩阵的行数

  • 结果矩阵的行数等于第一个矩阵的行数,列数等于第二个矩阵的列数

  • 每个元素的计算都是对应行向量与列向量的点积


六、NumPy中实现矩阵乘法

4835F1A7-2596-4238-A2F8-5597A5BEE754.png

  1. 数学表达式

    • DEBD763B-036B-429C-90BD-A80EC4131AA9.png

  2. NumPy代码实现

    • 矩阵初始化:

      python

      A = np.array([[1, -1, 0.1], [2, -2, 0.2]])
      W = np.array([[3, 5, 7, 9], [4, 6, 8, 0]])
    • 转置操作:

      • 直接赋值:AT = np.array([[1, 2], [-1, -2], [0.1, 0.2]])

      • 或使用属性:AT = A.T(图中拼写有误:"rawsposc"应为"transpose")

    • 矩阵乘法:

      • 函数式:Z = np.matmul(AT, W)

      • 运算符简写:Z = AT @ W

  3. 结果验证

    • 代码输出结果与数学计算结果一致:

      python

      [[11, 17, 23, 9], 
       [-11, -17, -23, -9], 
       [1.1, 1.7, 2.3, 0.9]]

核心内容

  • NumPy提供两种矩阵乘法方式:np.matmul()@运算符。

  • 转置可通过.T属性快速实现。


七、全连接层(Dense Layer)的向量化实现

EB636099-44C8-490E-8FEF-C3D65F132CDA.png

  1. 数学表达式

    • 951AAFDE-4C70-48BD-8391-160A4DA4A969.png

  2. NumPy代码实现

    • 变量初始化:

      python

      A = np.array([[200, 17]])  # 注意是二维数组
      W = np.array([[1, -3, 5], [-2, 4, -6]])
      b = np.array([[-1, 1, 2]])
    • 全连接层函数:

      python

      def dense(AT, W, b, g):
          z = np.matmul(AT, W) + b  # 向量化计算
          a_out = g(z)  # 激活函数
          return a_out
    • 结果示例:[[1, 0, 1]](模拟二分类输出)

  3. 维度说明

    • 输入 AT: 1×2

    • 权重 W: 2×3 → 输出 Z: 1×3

    • 图中标注的维度(如"4×3")可能有误,实际应为1×3。

核心内容

  • 全连接层的向量化实现通过np.matmul一次性完成所有神经元的计算。

  • 输入、权重、偏置的维度需严格匹配(如AT的列数=W的行数)。


评论