先忘掉学校里“向量是既有大小又有方向的量”这句话。
这个定义没错,但对于 AI 入门来说不够好用。
现在先把向量理解成:
**一组按照顺序排列的数字。**
例如:
[1, 2, 3]
这就是一个向量。
再比如:
[10, 20, 30, 40]
也是向量。
甚至:
[0.123, -0.827, 1.234, 0.001]
也是向量。
例如:
A = [CPU, Memory, GPU]
假设:
A = [80, 60, 90]
我们约定:
第1个数字 = CPU 第2个数字 = Memory 第3个数字 = GPU
那么:
[80, 60, 90]
和:
[60, 80, 90]
虽然数字一样,但不是同一个向量。
因为它们代表的数据不同。
所以:
[1, 2, 3]
和:
[3, 2, 1]
不是一回事。
这个概念非常重要。
例如:
[1, 2]
有两个数字。
我们说它是:
**2 维向量**
text
[1, 2, 3]
是:
**3 维向量**
text
[1, 2, 3, 4, 5]
是:
**5 维向量**
所以:
向量维度 = 向量中元素的数量
例如:
x = [10, 20, 30, 40]
那么:
dim(x) = 4
假设你测试服务器,每秒采集:
CPU利用率 内存利用率 GPU利用率 GPU温度 功耗
某一时刻:
CPU = 80% Memory = 65% GPU = 95% Temperature = 72℃ Power = 350W
可以表示成:
X = [80, 65, 95, 72, 350]
这就是一个:
**5 维向量**
所以你完全可以把向量理解成:
**描述某一个对象的一组数字。**
这已经非常接近 AI 中的实际用法了。
这是 AI 很重要的思想。
比如我们想描述一辆汽车:
重量 马力 价格 最高速度 油耗
可以:
Car A = [1500, 200, 200000, 220, 8]
另一辆:
Car B = [1800, 250, 300000, 240, 10]
于是:
现实对象 ↓ 提取特征 ↓ 数字 ↓ 向量
这就是机器学习非常核心的思想:
**把现实世界的信息转换成计算机可以计算的数字。**
—
现在进入数学里的另一种理解。
假设有一个二维坐标系:
y
↑
│
│ ● (3,2)
│ /
│ /
│ /
│ /
└────────────→ x
点:
(3, 2)
也可以写成向量:
[3, 2]
表示:
从原点 `(0,0)` 出发,向右 3,向上 2。
所以二维向量:
[3,2]
既可以理解成:
一组数字
也可以理解成:
一个方向 + 一个长度
这就是学校里“有大小和方向”的来源。
假设:
v = [3, 4]
画出来:
● (3,4)
/
/
/
/
●
(0,0)
根据勾股定理:
长度 = √(3² + 4²)
所以:
= √25 = 5
向量的长度通常叫:
**模(Norm)**
写成:
||v||
所以:
v = [3,4] ||v|| = 5
因为以后你会遇到:
Normalization L2 Norm Vector Similarity Cosine Similarity
这些都和向量长度有关。
比如:
A = [3,4]
长度:
我们可以把它“缩短”成长度为 1 的向量。
A' = [3/5, 4/5] = [0.6, 0.8]
它的长度:
√(0.6² + 0.8²) = 1
这叫:
**单位向量**
—
这个很简单。
假设:
A = [1,2] B = [3,4]
那么:
A + B
就是对应位置相加:
[1+3, 2+4]
得到:
[4,6]
所以:
[1,2] + [3,4] = [4,6]
注意:
**对应位置相加。**
—
同样:
A = [5,7] B = [2,3]
那么:
A - B
就是:
[5-2, 7-3]
得到:
[3,4]
这件事情在 AI 中非常重要。
例如:
A = 一个模型的特征 B = 另一个模型的特征
那么:
A - B
可以表示两者之间的差异。
例如:
A = [2,3]
乘以:
得到:
2A = [4,6]
乘以:
0.5
得到:
0.5A = [1,1.5]
这叫:
**标量乘法**
其中:
这种单独的数字叫:
**标量 Scalar**
所以:
标量 × 向量
非常常见。
A+B = [5,7,9]
A-B = [-3,-3,-3]
2A = [2,4,6]
这是今天最值得搞懂的东西。
假设:
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 = [1,2,3] B = [4,5,6]
如果逐元素乘:
[1×4, 2×5, 3×6]
得到:
[4,10,18]
这还是一个向量。
但是点积:
1×4 + 2×5 + 3×6
得到:
32
是一个数字。
所以:
逐元素乘法 [1,2,3] × [4,5,6] ↓ [4,10,18]
而:
点积 [1,2,3] · [4,5,6] ↓ 32
这个区别以后一定要记住。
因为点积可以用来衡量两个向量的“方向相似程度”。
例如:
A = [1,0] B = [1,0]
两个向量完全同方向:
A · B = 1
如果:
A = [1,0] B = [0,1]
两个方向垂直:
A · B = 0
如果:
A = [1,0] B = [-1,0]
方向完全相反:
A · B = -1
所以点积包含了一个非常有意思的信息:
正数 → 大体同方向 0 → 垂直 负数 → 大体反方向
当然,严格判断相似程度通常还要考虑向量长度。
这就引出了:
以后 RAG、Embedding、向量数据库都会遇到。
公式:
cos(θ) = (A · B) / (||A|| ||B||)
先不要被公式吓到。
它实际上就是:
**两个向量的点积 ÷ 两个向量长度的乘积。**
它主要关注:
**两个向量的方向是不是相似。**
例如:
A = [1,1] B = [2,2]
虽然:
比:
长很多。
但是它们方向完全一样。
所以:
Cosine Similarity = 1
这也是为什么 Embedding 搜索经常使用余弦相似度。
假设:
"苹果"
经过 Embedding:
A = [0.2, 0.8, -0.1, 0.5, ...]
而:
"香蕉"
得到:
B = [0.3, 0.7, -0.2, 0.4, ...]
然后计算:
Cosine Similarity(A,B)
如果结果比较高:
0.92
说明:
两个向量在语义空间里比较接近。
这就是:
文字 ↓ Embedding ↓ 向量 ↓ 数学运算 ↓ 相似度
这条链是以后学 RAG 必须理解的。
这是 AI 最有意思的地方之一。
例如模型训练之后,可能得到这样的结果:
国王 ↓ [0.81, 0.22, 0.71, ...]
王后 ↓ [0.78, 0.25, 0.73, ...]
它们的向量比较接近。
而:
汽车 ↓ [-0.32, 0.91, -0.17, ...]
可能距离比较远。
于是:
语义 ↓ 高维空间中的位置
这就是所谓:
**Embedding Space**
你后面学 LLM、RAG、向量数据库都会一直遇到。
这是后面:
Neural Network ↓ Training ↓ Loss ↓ Gradient
的内容。
现在只需要记住:
**AI 会通过训练,让具有相似特征/语义的东西在向量空间中呈现某种结构。**
—
假设我们测试一个 GPU:
GPU A: 性能:100 功耗:300 温度:70 显存:80
表示成:
A = [100,300,70,80]
GPU B:
B = [95,280,68,75]
我们可以:
A-B
||A-B||
Cosine Similarity(A,B)
于是:
**测试数据本身就可以变成向量,然后用数学方法进行比较。**
这就是为什么机器学习特别适合做:
不用背一大堆公式,只记住下面这些:
[1,2,3]
就是一组有顺序的数字。
[1,2,3]
是 3 维向量。
||A||
表示向量有多长。
[1,2] + [3,4] = [4,6]
2 × [1,2] = [2,4]
[1,2,3] · [4,5,6] = 32
用来衡量:
**两个向量方向有多相似。**