Matrix Multiplication|矩阵乘法

Matrix Multiplication|矩阵乘法

-----------------------------------------------------------------------------------------------

这是我在我的网站中截取的文章,有更多的文章欢迎来访问我自己的博客网站rn.berlinlian.cn,这里还有很多有关计算机的知识,欢迎进行留言或者来我的网站进行留言!!!

-----------------------------------------------------------------------------------------------

一、矩阵乘法简介

矩阵乘法(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的行数)。

-----------------------------------------------------------------------------------------------

这是我在我的网站中截取的文章,有更多的文章欢迎来访问我自己的博客网站rn.berlinlian.cn,这里还有很多有关计算机的知识,欢迎进行留言或者来我的网站进行留言!!!

-----------------------------------------------------------------------------------------------

相关文章

【原】“宍”,是我们天天吃的东西!你知道是什么吗?它的拼音怎么读?
怎样使用“余”字?
365网站打不开了

怎样使用“余”字?

🕒 08-13 👁️ 583
养森减肥瘦瘦包是不是坑人的?
bet5365亚洲版

养森减肥瘦瘦包是不是坑人的?

🕒 07-23 👁️ 9103