实现矩阵的点积:从数学原理到 NumPy 实战

目录

一、前言

二、什么是点积

三、点积的几何意义

四、矩阵点积是什么

五、矩阵乘法规则

六、矩阵点积计算过程

七、矩阵点积流程图

八、使用Python手写点积

九、手写矩阵乘法

十、NumPy中的dot

十一、矩阵点积

[十二、推荐写法 @ 运算符](#十二、推荐写法 @ 运算符)

十三、dot与*的区别

十四、机器学习中的应用

十五、神经网络中的应用

十六、批量数据点积

十七、性能对比

十八、矩阵点积与深度学习

十九、点积与余弦相似度

二十、总结


一、前言

如果说机器学习领域有一个最重要的数学运算,那么答案大概率是:

复制代码
矩阵点积(Dot Product)

无论是:

复制代码
线性回归

逻辑回归

PCA

神经网络

Transformer

卷积神经网络

其底层都离不开矩阵点积。

甚至可以说:

整个深度学习,本质上就是大量矩阵点积的组合。

因此,理解矩阵点积是学习机器学习和深度学习的重要基础。


二、什么是点积

在线性代数中:

两个向量可以进行一种特殊运算:

复制代码
点积

Dot Product

例如:

向量A:

复制代码
[1,2,3]

向量B:

复制代码
[4,5,6]

点积定义:

复制代码
A·B

=

1×4

+

2×5

+

3×6

结果:

复制代码
=

4

+

10

+

18

=

32

因此:

复制代码
[1,2,3]

·

[4,5,6]

=

32

三、点积的几何意义

点积不仅仅是数字运算。

它还表示:

复制代码
两个向量之间的相似程度

公式:

复制代码
A·B

=

|A|

×

|B|

×

cosθ

其中:

复制代码
θ

表示两个向量夹角

当:

复制代码
θ = 0°

则:

复制代码
cosθ = 1

点积最大。

说明:

复制代码
两个向量方向完全一致

当:

复制代码
θ = 90°

则:

复制代码
cosθ = 0

点积为0。

说明:

复制代码
两个向量垂直

这也是:

复制代码
推荐系统

文本相似度

向量检索

大量使用点积的原因。


四、矩阵点积是什么

向量点积可以扩展到矩阵。

例如:

矩阵A:

复制代码
[
 [1 2]
 [3 4]
]

矩阵B:

复制代码
[
 [5 6]
 [7 8]
]

矩阵乘法:

复制代码
A × B

并不是:

复制代码
对应位置相乘

而是:

复制代码
行 × 列

进行点积。


五、矩阵乘法规则

矩阵:

复制代码
(m,n)

可以乘:

复制代码
(n,k)

结果:

复制代码
(m,k)

即:

复制代码
前一个矩阵列数

=

后一个矩阵行数

否则无法计算。


例如:

复制代码
(2,3)

×

(3,4)

合法。

结果:

复制代码
(2,4)

例如:

复制代码
(2,3)

×

(2,4)

非法。

因为:

复制代码
3 ≠ 2

六、矩阵点积计算过程

矩阵A:

复制代码
[
 [1 2]
 [3 4]
]

矩阵B:

复制代码
[
 [5 6]
 [7 8]
]

计算:

第一行第一列:

复制代码
1×5 + 2×7

=

19

第一行第二列:

复制代码
1×6 + 2×8

=

22

第二行第一列:

复制代码
3×5 + 4×7

=

43

第二行第二列:

复制代码
3×6 + 4×8

=

50

最终:

复制代码
[
 [19 22]
 [43 50]
]

七、矩阵点积流程图


八、使用Python手写点积

先实现向量点积。

python 复制代码
a = [1,2,3]
b = [4,5,6]

result = 0

for i in range(len(a)):
    result += a[i] * b[i]

print(result)

输出:

复制代码
32

九、手写矩阵乘法

python 复制代码
A = [
    [1,2],
    [3,4]
]

B = [
    [5,6],
    [7,8]
]

result = [
    [0,0],
    [0,0]
]

for i in range(len(A)):
    for j in range(len(B[0])):
        for k in range(len(B)):
            result[i][j] += (
                A[i][k] * B[k][j]
            )

print(result)

输出:

复制代码
[
 [19,22],
 [43,50]
]

十、NumPy中的dot

NumPy提供:

复制代码
np.dot()

实现点积。

示例:

python 复制代码
import numpy as np

a = np.array([
    1,
    2,
    3
])

b = np.array([
    4,
    5,
    6
])

print(
    np.dot(a,b)
)

输出:

复制代码
32

十一、矩阵点积

python 复制代码
import numpy as np

A = np.array([
    [1,2],
    [3,4]
])

B = np.array([
    [5,6],
    [7,8]
])

print(
    np.dot(A,B)
)

输出:

复制代码
[
 [19 22]
 [43 50]
]

十二、推荐写法 @ 运算符

Python 3.5以后:

支持:

复制代码
@

作为矩阵乘法符号。

python 复制代码
import numpy as np

A = np.array([
    [1,2],
    [3,4]
])

B = np.array([
    [5,6],
    [7,8]
])

print(A @ B)

输出:

复制代码
[
 [19 22]
 [43 50]
]

这是目前最推荐的写法。


十三、dot与*的区别

很多新手容易混淆:

复制代码
A * B

和:

复制代码
A @ B

假设:

python 复制代码
A = np.array([
    [1,2],
    [3,4]
])

B = np.array([
    [5,6],
    [7,8]
])

元素乘法:

复制代码
A * B

结果:

复制代码
[
 [5 12]
 [21 32]
]

矩阵乘法:

复制代码
A @ B

结果:

复制代码
[
 [19 22]
 [43 50]
]

区别非常大。


十四、机器学习中的应用

线性回归公式:

复制代码
y = Wx + b

实际上:

复制代码
W 与 x 的点积

NumPy实现:

python 复制代码
import numpy as np

W = np.array([
    0.5,
    1.2,
    0.8
])

X = np.array([
    100,
    80,
    60
])

b = 10

y = np.dot(W,X) + b

print(y)

十五、神经网络中的应用

一个神经元:

复制代码
z

=

W·X

+

b

然后:

复制代码
激活函数

例如:

复制代码
ReLU

Sigmoid

Tanh

整个神经网络:

本质上就是:

复制代码
矩阵点积

+

非线性函数

不断重复。


十六、批量数据点积

假设:

复制代码
X.shape

(1000,784)

表示:

复制代码
1000张图片

每张784个特征

权重:

复制代码
W.shape

(784,128)

计算:

复制代码
Z = X @ W

结果:

复制代码
(1000,128)

一次完成:

复制代码
1000个样本

128个神经元

的计算。


十七、性能对比

普通Python循环:

复制代码
for ...

复杂度高。


NumPy:

复制代码
A @ B

底层调用:

复制代码
BLAS

OpenBLAS

MKL

高性能数学库。

速度通常提升:

复制代码
几十倍

甚至上百倍

十八、矩阵点积与深度学习

现代深度学习训练过程中:

GPU大部分时间都在执行:

复制代码
矩阵乘法

例如:

复制代码
CNN

Transformer

BERT

GPT

本质都是:

复制代码
超大规模矩阵点积

因此:

复制代码
GPU算力

≈

矩阵乘法能力

十九、点积与余弦相似度

推荐系统经常使用:

复制代码
Cosine Similarity

公式:

复制代码
cosθ

=

A·B

/

(|A| × |B|)

NumPy实现:

python 复制代码
import numpy as np

A = np.array([1,2,3])
B = np.array([4,5,6])

similarity = (
    np.dot(A,B)
    /
    (
        np.linalg.norm(A)
        *
        np.linalg.norm(B)
    )
)

print(similarity)

输出:

复制代码
0.9746

说明:

复制代码
两个向量非常相似

二十、总结

矩阵点积是机器学习和深度学习最重要的基础运算之一。

核心思想:

复制代码
行与列做点积

数学规则:

复制代码
(m,n)

×

(n,k)

=

(m,k)

NumPy常用实现:

复制代码
np.dot(A,B)

或者:

复制代码
A @ B

应用场景:

复制代码
线性回归

逻辑回归

PCA

神经网络

Transformer

推荐系统

可以这样理解:

复制代码
机器学习中的"学习"

本质是在不断调整权重矩阵

而模型的预测过程

本质就是矩阵点积

掌握矩阵点积之后,你就真正迈进了机器学习和深度学习的大门。

相关推荐
HZ·湘怡1 小时前
树 的定义 与 性质
算法·
梦想的颜色1 小时前
Docker 入门指南:从零开始掌握容器化技术
运维·服务器·vscode·python·算法·docker·云原生
HyperAI超神经1 小时前
在线教程丨英伟达开源LocateAnything,3B模型可实现图像+视频的目标指向/开放词汇目标检测/指代表达定位/OCR文本定位等功能
人工智能·目标检测·计算机视觉·ocr·目标文本定位
库拉大叔1 小时前
KULAAI 一站式 AI 编程与模型聚合平台效果实测
人工智能
诸葛务农1 小时前
溶液纳米颗粒净化技术及其在光刻胶纳过滤和提纯中的应用(上)
人工智能
oort1231 小时前
VLStream 全开源决策式 AI 视频平台 技术视角完整说明
大数据·开发语言·人工智能·经验分享·python·开源·音视频
Cloud_Shy6181 小时前
解读《Effective Python 3rd Edition》:从练气到老魔(第二章 Item 10 - 12)
c语言·开发语言·网络·人工智能·windows·python·编辑器
cpp_25011 小时前
P10109 [GESP202312 六级] 工作沟通
数据结构·c++·算法·题解·洛谷·gesp六级