一、矩阵乘法简介
矩阵乘法(Matrix Multiplication)是一种将两个矩阵合并生成新矩阵的运算,其核心规则是“行乘列求和”:结果矩阵的第 i 行第 j 列元素,由第一个矩阵的第 i 行与第二个矩阵的第 j 列对应元素相乘后相加得到。
通俗理解:
想象两个快递公司,一个负责收集包裹(矩阵A的行),一个负责派送路线(矩阵B的列)。矩阵乘法就是计算“从收集点到派送路线”的总运输量——每个结果数字是某条收集路线和某条派送路线所有包裹的匹配总和。
二、For循环 vs. 向量化 (NumPy)
For 循环实现
输入
x
是一个向量[200, 17]
,权重矩阵M
(实际应为W
)是2x3
的矩阵。函数
dense(a_in, W, b)
通过循环逐列计算加权和Z = np.dot(w, x) + b[j]
,再经过激活函数g(z)
得到输出a_out
。效率较低,适合理解计算过程,但实际应用中较少使用。
向量化实现
输入
X
是1x2
矩阵,权重W
是2x3
矩阵,偏置B
是1x3
矩阵。使用
np.matmul(A_in, W) + B
直接计算矩阵乘法和偏置相加,再通过激活函数g(Z)
得到输出A_out
。代码更简洁,计算效率高,适合实际部署(如深度学习框架)。
其他细节
图片底部有一个
1x3
矩阵[[1, 0, 1]]
,可能是示例输出或中间结果。激活函数
g(z)
未具体定义(如 Sigmoid、ReLU 等)。
核心对比
For 循环:显式逐元素计算,适合教学。
向量化:利用 NumPy 的矩阵运算,高效且代码简洁。
三、向量点积
点积示例
转置与矩阵乘法形式
通过转置 a⃗T,将点积表示为矩阵乘法:
强调这是理解矩阵乘法的基础(“行乘列求和”)。
用途说明
图中标注点积对理解矩阵乘法非常有用(“useful for understanding matrix multiplication”)。
核心内容
点积是向量对应元素相乘后求和的结果。
转置后可用矩阵乘法表示,直接关联到矩阵乘法的计算规则。
四、向量矩阵乘法
向量与矩阵的乘法
计算步骤可视化
图片通过箭头和分步计算强调了“行向量乘矩阵列”的过程。
核心内容
向量与矩阵的乘法本质是行向量与矩阵的每一列依次做点积。
结果是一个新的行向量,其维度与矩阵的列数相同。
五、矩阵乘法
矩阵乘法计算
核心内容
矩阵乘法的本质是左矩阵的行 × 右矩阵的列的点积求和。
图片中的数值和矩阵定义存在多处笔误或矛盾,但计算逻辑符合矩阵乘法规则。
六、矩阵乘法的规则
核心内容
矩阵乘法要求第一个矩阵的列数等于第二个矩阵的行数
结果矩阵的行数等于第一个矩阵的行数,列数等于第二个矩阵的列数
每个元素的计算都是对应行向量与列向量的点积
六、NumPy中实现矩阵乘法
数学表达式
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
结果验证
代码输出结果与数学计算结果一致:
python
[[11, 17, 23, 9], [-11, -17, -23, -9], [1.1, 1.7, 2.3, 0.9]]
核心内容
NumPy提供两种矩阵乘法方式:
np.matmul()
和@
运算符。转置可通过
.T
属性快速实现。
七、全连接层(Dense Layer)的向量化实现
数学表达式
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]]
(模拟二分类输出)
维度说明
输入 AT: 1×2
权重 W: 2×3 → 输出 Z: 1×3
图中标注的维度(如"4×3")可能有误,实际应为1×3。
核心内容
全连接层的向量化实现通过
np.matmul
一次性完成所有神经元的计算。输入、权重、偏置的维度需严格匹配(如AT的列数=W的行数)。