向量详解
引言:向量就在我们身边
想象一下,你正在给朋友指路:
"从学校出发,向东走500米,再向北走300米,就到了图书馆。"
这句话其实就包含了向量的概念!向量就是既有大小又有方向的量。
在日常生活中,我们无时无刻不在使用向量:
- 导航:GPS告诉你"向东500米,向北300米"
- 物理:力有大小和方向(推门需要多大的力,向哪个方向推)
- 游戏:角色移动的速度和方向
- AI:用数字描述事物的特征
向量是连接现实世界和数学世界的桥梁,让我们用数学语言精确描述那些既有大小又有方向的事物。
第一部分:什么是向量?
从日常比喻开始
比喻1:导航系统
想象你正在使用手机导航:
传统描述(文字):
"从当前位置向东走500米,再向北走300米"
向量描述(数学):
[500, 300]或(500, 300)
- 第一个数字:向东的距离(正数表示东,负数表示西)
- 第二个数字:向北的距离(正数表示北,负数表示南)
关键理解:
- 向量 = 方向 + 大小
[500, 300]表示:向东500米,向北300米[-500, 300]表示:向西500米,向北300米
比喻2:箭矢
向量就像一支箭:
- 箭的长度 = 向量的大小(模长)
- 箭的方向 = 向量的方向
↑
| (箭的长度 = 5)
| (箭的方向 = 向上)
|
数学表示:
- 向量
[0, 5]:长度为5,方向向上 - 向量
[3, 4]:长度为5(√(3²+4²)=5),方向指向右上方
比喻3:身份证号码
每个人的身份证号码可以看作一个向量:
110101199001011234- 每个数字代表不同的信息(地区、出生日期、顺序码)
- 这串数字唯一标识一个人
类比:向量用一组数字唯一标识一个"方向+大小"的组合。
数学定义
基本概念
向量(Vector) 是既有大小又有方向的量,用有序数组表示:
v = [v₁, v₂, v₃, ..., vₙ]
例子:
二维向量:[3, 4] → 在平面上
三维向量:[1, 2, 3] → 在空间中
n维向量:[a₁, a₂, ..., aₙ] → 在高维空间中
向量的表示方法
1. 坐标表示法(最常用):
v = [3, 4]
或
v = (3, 4)
2. 几何表示法:
从点A到点B的向量:AB⃗
起点:A
终点:B
3. 单位向量表示法:
v = |v| × ê
其中:
- |v| 是向量的长度(模)
- ê 是单位向量(长度为1的方向向量)
向量的维度
维度就是向量中数字的个数:
[3, 4] → 2维向量(平面)
[1, 2, 3] → 3维向量(空间)
[1, 2, ..., 100] → 100维向量(高维空间)
比喻:
- 2维:就像地图上的位置(经度、纬度)
- 3维:就像房间里的位置(左右、前后、上下)
- 高维:就像用多个特征描述一个人(身高、体重、性格、兴趣...)
第二部分:向量的基本运算
1. 向量加法
直观理解
比喻:两个人合力推箱子
想象两个人推一个箱子:
- 第一个人:向东推100N的力 →
[100, 0] - 第二个人:向北推50N的力 →
[0, 50] - 合力:
[100, 0] + [0, 50] = [100, 50](向右上方推)
数学定义
向量加法:对应分量相加
向量A = [a₁, a₂, a₃]
向量B = [b₁, b₂, b₃]
A + B = [a₁+b₁, a₂+b₂, a₃+b₃]
计算示例
例子1:二维向量加法
A = [3, 4]
B = [1, 2]
A + B = [3+1, 4+2] = [4, 6]
几何意义:
起点 → A → (A+B的终点)
↘
B
例子2:三维向量加法
A = [1, 2, 3]
B = [4, 5, 6]
A + B = [1+4, 2+5, 3+6] = [5, 7, 9]
运算性质
- 交换律:
A + B = B + A - 结合律:
(A + B) + C = A + (B + C) - 零向量:
A + 0 = A(0 = [0, 0, ..., 0]) - 负向量:
A + (-A) = 0
2. 向量减法
直观理解
比喻:计算两个位置的相对位移
从学校到图书馆:[500, 300]
从学校到超市:[200, 100]
从图书馆到超市:[500, 300] - [200, 100] = [300, 200]
数学定义
向量减法:对应分量相减
A - B = [a₁-b₁, a₂-b₂, a₃-b₃]
等价关系:
A - B = A + (-B)
计算示例
例子1:二维向量减法
A = [5, 7]
B = [2, 3]
A - B = [5-2, 7-3] = [3, 4]
几何意义:
从B的终点指向A的终点的向量
例子2:计算位移
起点位置:[10, 20]
终点位置:[15, 25]
位移向量 = [15, 25] - [10, 20] = [5, 5]
3. 数乘(标量乘法)
标量是只有大小没有方向的量,比如一条直线上的一点。
直观理解
比喻:放大或缩小箭矢
- 向量
[3, 4]表示:向东3米,向北4米 2 × [3, 4] = [6, 8]表示:向东6米,向北8米(方向不变,长度翻倍)-1 × [3, 4] = [-3, -4]表示:向西3米,向南4米(方向相反)
数学定义
数乘:向量每个分量乘以标量
k × A = [k×a₁, k×a₂, k×a₃]
其中 k 是标量(实数)。
计算示例
例子1:放大向量
A = [2, 3]
3 × A = [3×2, 3×3] = [6, 9]
例子2:反向向量
A = [1, 2]
-A = -1 × A = [-1, -2]
例子3:单位向量
A = [3, 4]
|A| = √(3² + 4²) = 5
单位向量 = A / |A| = [3/5, 4/5] = [0.6, 0.8]
运算性质
- 分配律:
k(A + B) = kA + kB - 结合律:
(kl)A = k(lA) - 单位元:
1 × A = A
4. 向量点积(内积)
直观理解
比喻1:投影的乘积
想象一束光垂直照射,向量A在向量B方向上的投影长度,乘以向量B的长度。
比喻2:相似度计算
两个向量越相似(方向越接近),点积越大。

数学定义
点积:对应分量相乘后求和
A = [a₁, a₂, a₃]
B = [b₁, b₂, b₃]
A · B = a₁×b₁ + a₂×b₂ + a₃×b₃
几何定义:
A · B = |A| × |B| × cos(θ)
其中:
- |A| 是向量A的长度
- |B| 是向量B的长度
- θ 是两向量之间的夹角
计算示例
例子1:基本点积计算
A = [1, 2, 3]
B = [4, 5, 6]
A · B = 1×4 + 2×5 + 3×6
= 4 + 10 + 18
= 32
例子2:垂直向量
A = [1, 0] (向右)
B = [0, 1] (向上)
A · B = 1×0 + 0×1 = 0
结论:垂直向量的点积为0
例子3:平行向量
A = [3, 4]
B = [6, 8] = 2 × [3, 4]
A · B = 3×6 + 4×8 = 18 + 32 = 50
验证:|A| = 5, |B| = 10, cos(0°) = 1
A · B = 5 × 10 × 1 = 50 ✓
下面用几个例子说明:向量点积越大,通常越相似(在向量长度相近时)。
为什么点积可以衡量相似度?
点积公式:
A · B = |A| × |B| × cos(θ)
当两个向量长度相近时:
- 方向相同(θ=0°)→ cos(0°)=1 → 点积最大
- 方向相反(θ=180°)→ cos(180°)=-1 → 点积最小(负值)
- 方向垂直(θ=90°)→ cos(90°)=0 → 点积为0
关键:在向量长度相近的情况下,点积越大,方向越接近,越相似。
例子1:电影推荐系统,场景用向量表示用户对电影类型的偏好:
# 用户A的偏好向量 [动作, 科幻, 喜剧, 恐怖, 爱情]
用户A = [0.9, 0.8, 0.2, 0.1, 0.3]
# 电影特征向量
复仇者联盟 = [0.95, 0.85, 0.15, 0.05, 0.2] # 动作+科幻
泰坦尼克号 = [0.1, 0.0, 0.2, 0.0, 0.95] # 爱情片
闪灵 = [0.2, 0.1, 0.0, 0.95, 0.0] # 恐怖片
计算点积:
用户A · 复仇者联盟 = 0.9×0.95 + 0.8×0.85 + 0.2×0.15 + 0.1×0.05 + 0.3×0.2
= 0.855 + 0.68 + 0.03 + 0.005 + 0.06
= 1.63
用户A · 泰坦尼克号 = 0.9×0.1 + 0.8×0.0 + 0.2×0.2 + 0.1×0.0 + 0.3×0.95
= 0.09 + 0.0 + 0.04 + 0.0 + 0.285
= 0.415
用户A · 闪灵 = 0.9×0.2 + 0.8×0.1 + 0.2×0.0 + 0.1×0.95 + 0.3×0.0
= 0.18 + 0.08 + 0.0 + 0.095 + 0.0
= 0.355
结论:
- 点积最大(1.63)→ 复仇者联盟与用户A最相似 → 推荐
- 点积较小(0.415, 0.355)→ 不太相似 → 不推荐
例子2:文本相似度,场景用向量表示文档的主题特征:
# 文档向量 [科技, 商业, 娱乐, 体育, 政治]
文档1 = "人工智能的发展" = [0.9, 0.7, 0.1, 0.0, 0.2]
文档2 = "机器学习应用" = [0.85, 0.75, 0.05, 0.0, 0.15]
文档3 = "足球比赛精彩" = [0.1, 0.2, 0.3, 0.95, 0.1]
计算点积:
文档1 · 文档2 = 0.9×0.85 + 0.7×0.75 + 0.1×0.05 + 0.0×0.0 + 0.2×0.15
= 0.765 + 0.525 + 0.005 + 0.0 + 0.03
= 1.325
文档1 · 文档3 = 0.9×0.1 + 0.7×0.2 + 0.1×0.3 + 0.0×0.95 + 0.2×0.1
= 0.09 + 0.14 + 0.03 + 0.0 + 0.02
= 0.28
结论:
- 点积 1.325 → 文档1和文档2相似(都是科技主题)
- 点积 0.28 → 文档1和文档3不相似(主题不同)
例子3:图像特征匹配,场景用向量表示图像的特征:
# 图像特征向量 [红色, 绿色, 蓝色, 边缘, 纹理, 形状]
猫的图片1 = [0.7, 0.6, 0.5, 0.8, 0.7, 0.9] # 毛茸茸、有尾巴
猫的图片2 = [0.65, 0.55, 0.48, 0.75, 0.65, 0.85]
狗的图片 = [0.6, 0.5, 0.4, 0.7, 0.6, 0.8] # 相似但不同
汽车的图片 = [0.3, 0.4, 0.5, 0.9, 0.8, 0.6] # 完全不同
计算点积:
猫1 · 猫2 = 0.7×0.65 + 0.6×0.55 + 0.5×0.48 + 0.8×0.75 + 0.7×0.65 + 0.9×0.85
= 0.455 + 0.33 + 0.24 + 0.6 + 0.455 + 0.765
= 2.845
猫1 · 狗 = 0.7×0.6 + 0.6×0.5 + 0.5×0.4 + 0.8×0.7 + 0.7×0.6 + 0.9×0.8
= 0.42 + 0.3 + 0.2 + 0.56 + 0.42 + 0.72
= 2.62
猫1 · 汽车 = 0.7×0.3 + 0.6×0.4 + 0.5×0.5 + 0.8×0.9 + 0.7×0.8 + 0.9×0.6
= 0.21 + 0.24 + 0.25 + 0.72 + 0.56 + 0.54
= 2.52
结论:
- 点积 2.845 → 两只猫的图片最相似
- 点积 2.62 → 猫和狗有一定相似(都是动物)
- 点积 2.52 → 猫和汽车差异较大
重要提醒:点积 vs 余弦相似度
点积的局限性
点积受向量长度影响:
A = [1, 1] → |A| = √2 ≈ 1.41
B = [10, 10] → |B| = √200 ≈ 14.14
A · A = 2
B · B = 200 (虽然方向相同,但点积差异很大)
当向量长度差异较大时,使用余弦相似度更准确:
余弦相似度 = (A · B) / (|A| × |B|)
A = [1, 1]
B = [10, 10]
点积:A · B = 20
余弦相似度 = 20 / (√2 × √200) = 20 / 20 = 1.0 ✓(完全相似)
总结:
- 向量长度相近时:点积越大越相似 ✓
- 向量长度差异大时:使用余弦相似度更准确 ✓
点积的应用
1. 计算向量长度
|A| = √(A · A) = √(a₁² + a₂² + a₃²)
例子:
A = [3, 4]
|A| = √(A · A) = √(3² + 4²) = √25 = 5
2. 计算夹角
cos(θ) = (A · B) / (|A| × |B|)
θ = arccos((A · B) / (|A| × |B|))
例子:
A = [1, 0]
B = [1, 1]
A · B = 1×1 + 0×1 = 1
|A| = 1
|B| = √2
cos(θ) = 1 / (1 × √2) = 1/√2
θ = 45°
3. 判断垂直
如果 A · B = 0,则 A ⊥ B
5. 向量叉积(外积,仅限3维)
直观理解
比喻:右手定则
想象用右手:
- 食指指向向量A
- 中指指向向量B
- 拇指指向A × B的方向

几何意义:
- 叉积的结果是一个向量
- 方向:垂直于A和B所在的平面
- 大小:等于以A和B为邻边的平行四边形的面积

数学定义
叉积(仅限3维向量):
A = [a₁, a₂, a₃]
B = [b₁, b₂, b₃]
A × B = [a₂×b₃ - a₃×b₂,
a₃×b₁ - a₁×b₃,
a₁×b₂ - a₂×b₁]
记忆方法(行列式):
A × B = |i j k |
|a₁ a₂ a₃|
|b₁ b₂ b₃|
计算示例
例子1:基本叉积
A = [1, 2, 3]
B = [4, 5, 6]
A × B = [2×6 - 3×5, 3×4 - 1×6, 1×5 - 2×4]
= [12 - 15, 12 - 6, 5 - 8]
= [-3, 6, -3]
例子2:标准基向量
i = [1, 0, 0]
j = [0, 1, 0]
k = [0, 0, 1]
i × j = k
j × k = i
k × i = j
叉积的性质
- 反交换律:
A × B = -(B × A) - 分配律:
A × (B + C) = A × B + A × C - 数乘结合律:
(kA) × B = k(A × B) - 平行向量:如果
A ∥ B,则A × B = 0
叉积的应用
1. 计算面积
平行四边形的面积 = |A × B|
三角形的面积 = |A × B| / 2
2. 计算法向量
平面法向量 = A × B(A和B是平面上的两个向量)
3. 判断方向
如果 A × B 指向"上",则A到B是逆时针旋转
如果 A × B 指向"下",则A到B是顺时针旋转
6. 向量长度(模)
直观理解
比喻:箭矢的长度
向量 [3, 4] 的长度就是从起点到终点的直线距离。
数学定义
向量长度(模):
对于 n 维向量 A = [a₁, a₂, ..., aₙ]
|A| = √(a₁² + a₂² + ... + aₙ²)
计算示例
例子1:二维向量
A = [3, 4]
|A| = √(3² + 4²) = √(9 + 16) = √25 = 5
例子2:三维向量
A = [1, 2, 2]
|A| = √(1² + 2² + 2²) = √(1 + 4 + 4) = √9 = 3
例子3:单位向量
A = [3, 4]
|A| = 5
单位向量 = A / |A| = [3/5, 4/5] = [0.6, 0.8]
验证:|单位向量| = √(0.6² + 0.8²) = √(0.36 + 0.64) = √1 = 1 ✓
长度的性质
- 非负性:
|A| ≥ 0,且|A| = 0当且仅当A = 0 - 齐次性:
|kA| = |k| × |A| - 三角不等式:
|A + B| ≤ |A| + |B|
7. 向量夹角与余弦相似度
直观理解
比喻:两个人的人生方向
- 如果两个人的人生方向完全一致,夹角为0°,相似度为1
- 如果两个人的人生方向完全相反,夹角为180°,相似度为-1
- 如果两个人的人生方向垂直,夹角为90°,相似度为0
数学定义
夹角公式:
cos(θ) = (A · B) / (|A| × |B|)
θ = arccos((A · B) / (|A| × |B|))
余弦相似度:
similarity = cos(θ) = (A · B) / (|A| × |B|)
取值范围:-1 到 1
1:完全相似(方向相同)0:不相关(垂直)-1:完全相反(方向相反)
计算示例
例子1:相同方向
A = [1, 0]
B = [2, 0] = 2 × [1, 0]
A · B = 1×2 + 0×0 = 2
|A| = 1
|B| = 2
cos(θ) = 2 / (1 × 2) = 1
θ = 0°
例子2:垂直方向
A = [1, 0]
B = [0, 1]
A · B = 1×0 + 0×1 = 0
|A| = 1
|B| = 1
cos(θ) = 0 / (1 × 1) = 0
θ = 90°
例子3:45度角
A = [1, 0]
B = [1, 1]
A · B = 1×1 + 0×1 = 1
|A| = 1
|B| = √2
cos(θ) = 1 / (1 × √2) = 1/√2 ≈ 0.707
θ = 45°
第三部分:向量的几何意义
1. 二维向量:平面上的点与方向
坐标表示
Y轴
↑
| ● (3, 4)
| /
| / (向量长度 = 5)
| /
| /
+--------→ X轴
(0,0)
向量 [3, 4] 表示:
- 从原点
(0, 0)出发 - 向右移动3个单位
- 向上移动4个单位
- 到达点
(3, 4)
向量运算的几何意义
加法:
A = [2, 1]
B = [1, 2]
A + B = [3, 3]
几何意义:先沿A移动,再沿B移动,最终到达(3, 3)
数乘:
A = [1, 1]
2A = [2, 2]
几何意义:方向不变,长度翻倍
2. 三维向量:空间中的点与方向
坐标表示
Z轴
↑
|
| ● (1, 2, 3)
| /
| /
| /
+--------→ Y轴
/
/
X轴
向量 [1, 2, 3] 表示:
- 沿X轴移动1个单位
- 沿Y轴移动2个单位
- 沿Z轴移动3个单位
3. 高维向量:抽象空间
比喻:特征空间
想象用多个特征描述一个人:
人A = [身高=175, 体重=70, 年龄=25, 性格=0.8, 兴趣=0.6, ...]
→ 100维向量
人B = [身高=180, 体重=75, 年龄=30, 性格=0.7, 兴趣=0.8, ...]
→ 100维向量
关键理解:
- 每个维度代表一个特征
- 相似的人在向量空间中靠近
- 不同的人在向量空间中远离
第四部分:向量的实际应用场景
1. 物理学中的应用
力与运动
例子1:合力计算
两个力作用在物体上:
F₁ = [100, 0] (向右100N)
F₂ = [0, 50] (向上50N)
合力 F = F₁ + F₂ = [100, 50]
合力大小 = |F| = √(100² + 50²) = √12500 ≈ 111.8N
合力方向 = arctan(50/100) = 26.6°(相对于水平方向)
例子2:速度合成
船的速度:v₁ = [10, 0] (向东10m/s)
水流速度:v₂ = [0, 3] (向北3m/s)
实际速度:v = v₁ + v₂ = [10, 3]
实际速度大小 = √(10² + 3²) = √109 ≈ 10.4 m/s
电场与磁场
电场强度:
E = [Eₓ, Eᵧ, Eᵧ]
每个分量表示在对应方向上的电场强度
磁场方向:
使用叉积计算洛伦兹力:
F = q(v × B)
2. 计算机图形学中的应用
3D变换
平移:
点P = [x, y, z]
平移向量 T = [tₓ, tᵧ, tᵧ]
新位置 = P + T = [x+tₓ, y+tᵧ, z+tᵧ]
旋转:
使用旋转矩阵(本质上是向量的线性变换)
缩放:
缩放向量 S = [sₓ, sᵧ, sᵧ]
新位置 = [sₓ×x, sᵧ×y, sᵧ×z]
光照计算
法向量:
使用叉积计算表面法向量:
n = (v₁ - v₀) × (v₂ - v₀)
反射:
使用向量运算计算光的反射方向
3. 机器学习中的应用
特征表示
例子:文本分类
文档1:"我喜欢机器学习"
文档2:"我爱人工智能"
转换为向量:
文档1 = [0.8, 0.6, 0.9, 0.2, ...] (100维)
文档2 = [0.7, 0.5, 0.8, 0.3, ...] (100维)
计算相似度:
similarity = cos(θ) = (文档1 · 文档2) / (|文档1| × |文档2|)
推荐系统
用户特征向量:
用户A = [喜欢动作片=0.9, 喜欢科幻=0.8, 喜欢喜剧=0.3, ...]
电影1 = [动作元素=0.95, 科幻元素=0.7, 喜剧元素=0.2, ...]
相似度 = 用户A · 电影1 / (|用户A| × |电影1|)
相似度高的电影推荐给用户
4. 导航与地理信息系统
GPS定位
位置向量:
当前位置:[经度, 纬度, 海拔]
目标位置:[目标经度, 目标纬度, 目标海拔]
位移向量 = 目标位置 - 当前位置
距离 = |位移向量|
方向 = arctan(纬度差 / 经度差)
路径规划
路径向量:
路径 = [起点] + t₁×[方向1] + t₂×[方向2] + ...
5. 游戏开发中的应用
角色移动
速度向量:
角色速度:v = [vₓ, vᵧ]
每帧更新位置:新位置 = 当前位置 + v × Δt
碰撞检测:
使用向量运算检测两个物体是否碰撞
使用法向量计算碰撞后的反弹方向
第五部分:向量在人工智能中的应用
1. 词向量(Word Embedding)
Word2Vec
原理:
- 将每个词转换为一个固定维度的向量(通常100-300维)
- 语义相似的词在向量空间中靠近
例子:
"猫" = [0.2, -0.5, 0.8, 0.1, ...]
"狗" = [0.3, -0.4, 0.7, 0.2, ...]
"汽车" = [-0.1, 0.6, -0.3, 0.9, ...]
"猫"和"狗"的向量距离较近(都是动物)
"猫"和"汽车"的向量距离较远(完全不同)
神奇的关系:
"国王" - "男人" + "女人" ≈ "王后"
在向量空间中可以进行"语义运算"
BERT与Transformer
上下文相关的向量:
"银行"在"去银行取钱"中 → 向量A(金融机构)
"银行"在"河岸"中 → 向量B(河岸)
同一个词在不同上下文中向量不同
2. 图像向量(Image Embedding)
卷积神经网络(CNN)
特征提取:
原始图像:1000×1000像素 = 1,000,000维向量
↓
CNN特征提取
↓
特征向量:512维向量
[0.8, 0.6, 0.9, 0.2, ...]
↑ ↑ ↑ ↑
边缘 纹理 颜色 形状
CLIP模型
跨模态向量:
图像 → 图像编码器 → 图像向量 [0.8, 0.6, 0.9, ...]
文本 → 文本编码器 → 文本向量 [0.7, 0.5, 0.8, ...]
关键:图像和文本映射到同一向量空间
相似内容的图像和文本向量相似
应用:
- 图像搜索:用文字搜索图片
- 图像分类:理解图像内容
- 图像生成:根据文字描述生成图像
3. 语义搜索
向量相似度搜索
传统搜索:
搜索"猫" → 只匹配包含"猫"这个词的文档
向量搜索:
搜索"可爱的小动物" → 转换为向量
↓
在向量数据库中搜索相似向量
↓
找到"猫"、"狗"、"兔子"等相关内容
优势:
- 理解语义,不仅仅是关键词匹配
- 支持多语言(不同语言的相同概念向量相似)
- 支持多模态(文字、图像、声音统一表示)
4. 推荐系统
协同过滤
用户-物品矩阵:
用户1 = [喜欢电影1=0.9, 喜欢电影2=0.3, 喜欢电影3=0.8, ...]
用户2 = [喜欢电影1=0.7, 喜欢电影2=0.9, 喜欢电影3=0.2, ...]
计算用户相似度:
similarity(用户1, 用户2) = cos(用户1, 用户2)
相似用户喜欢的物品推荐给目标用户
内容推荐
物品特征向量:
电影1 = [动作=0.9, 科幻=0.8, 喜剧=0.2, 恐怖=0.1, ...]
电影2 = [动作=0.3, 科幻=0.1, 喜剧=0.9, 恐怖=0.0, ...]
用户偏好向量:
用户A = [喜欢动作=0.8, 喜欢科幻=0.7, 喜欢喜剧=0.3, ...]
推荐相似度高的电影
5. 神经网络中的向量
前向传播
输入层:
输入向量:x = [x₁, x₂, ..., xₙ]
隐藏层:
隐藏向量:h = f(W × x + b)
其中:
- W 是权重矩阵
- b 是偏置向量
- f 是激活函数
输出层:
输出向量:y = g(V × h + c)
注意力机制
Self-Attention:
查询向量 Q = [q₁, q₂, ..., qₙ]
键向量 K = [k₁, k₂, ..., kₙ]
值向量 V = [v₁, v₂, ..., vₙ]
注意力分数 = softmax(Q · Kᵀ / √d)
输出 = 注意力分数 × V
应用:
- Transformer模型
- BERT、GPT等大语言模型
- 图像理解(Vision Transformer)
6. 向量数据库
专门存储向量的数据库
特点:
- 高效的向量相似度搜索
- 支持大规模向量存储
- 优化的索引结构(如LSH、HNSW)
应用场景:
- 语义搜索
- 推荐系统
- 图像检索
- 异常检测
例子:
存储100万个文档的向量
用户查询 → 转换为向量
↓
在向量数据库中快速找到最相似的文档
(使用近似最近邻搜索,如HNSW算法)
第六部分:向量运算的Python实现
1. 基础向量运算
import numpy as np
# 创建向量
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
# 向量加法
c = a + b
print(f"a + b = {c}") # [5 7 9]
# 向量减法
d = a - b
print(f"a - b = {d}") # [-3 -3 -3]
# 数乘
e = 2 * a
print(f"2 * a = {e}") # [2 4 6]
# 向量长度
length_a = np.linalg.norm(a)
print(f"|a| = {length_a}") # 3.741...
# 单位向量
unit_a = a / length_a
print(f"单位向量 = {unit_a}")
2. 点积计算
# 点积
dot_product = np.dot(a, b)
print(f"a · b = {dot_product}") # 32
# 或者使用 @ 运算符
dot_product2 = a @ b
print(f"a @ b = {dot_product2}") # 32
3. 叉积计算(3维)
# 叉积(仅限3维)
a_3d = np.array([1, 2, 3])
b_3d = np.array([4, 5, 6])
cross_product = np.cross(a_3d, b_3d)
print(f"a × b = {cross_product}") # [-3 6 -3]
4. 夹角与余弦相似度
# 计算夹角
def angle_between_vectors(a, b):
cos_angle = np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
angle = np.arccos(np.clip(cos_angle, -1.0, 1.0))
return np.degrees(angle)
angle = angle_between_vectors(a, b)
print(f"夹角 = {angle}°")
# 余弦相似度
def cosine_similarity(a, b):
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
similarity = cosine_similarity(a, b)
print(f"余弦相似度 = {similarity}")
5. 实际应用示例
文本相似度
from sentence_transformers import SentenceTransformer
from sklearn.metrics.pairwise import cosine_similarity
# 加载预训练模型
model = SentenceTransformer('all-MiniLM-L6-v2')
# 文本转向量
texts = [
"我喜欢吃苹果",
"我爱吃水果",
"今天天气很好"
]
embeddings = model.encode(texts)
# 计算相似度
similarity_matrix = cosine_similarity(embeddings)
print("相似度矩阵:")
print(similarity_matrix)
# 文本1和文本2的相似度
similarity_12 = cosine_similarity([embeddings[0]], [embeddings[1]])[0][0]
print(f"文本1和文本2的相似度: {similarity_12:.3f}")
推荐系统示例
# 用户特征向量
user_features = np.array([0.8, 0.6, 0.9, 0.2, 0.1])
# 电影特征向量
movies = {
"复仇者联盟": np.array([0.9, 0.8, 0.3, 0.1, 0.2]),
"泰坦尼克号": np.array([0.2, 0.1, 0.8, 0.0, 0.9]),
"闪灵": np.array([0.1, 0.2, 0.1, 0.9, 0.1])
}
# 计算相似度并推荐
recommendations = []
for movie_name, movie_features in movies.items():
similarity = cosine_similarity([user_features], [movie_features])[0][0]
recommendations.append((movie_name, similarity))
# 按相似度排序
recommendations.sort(key=lambda x: x[1], reverse=True)
print("推荐电影(按相似度排序):")
for movie, sim in recommendations:
print(f"{movie}: {sim:.3f}")
第七部分:向量的高级概念
1. 线性相关与线性无关
直观理解
比喻:依赖关系
- 线性相关:一个向量可以表示为其他向量的组合
- 就像"你可以用其他工具组合出这个工具"
- 线性无关:向量之间相互独立
- 就像"每个工具都有独特用途,无法替代"
数学定义
线性相关:
如果存在不全为零的标量 k₁, k₂, ..., kₙ,使得:
k₁v₁ + k₂v₂ + ... + kₙvₙ = 0
则向量 v₁, v₂, ..., vₙ 线性相关
线性无关:
如果只有当 k₁ = k₂ = ... = kₙ = 0 时,
k₁v₁ + k₂v₂ + ... + kₙvₙ = 0
则向量 v₁, v₂, ..., vₙ 线性无关
例子
线性相关:
v₁ = [1, 2]
v₂ = [2, 4] = 2 × [1, 2] = 2v₁
2v₁ - v₂ = 0
所以 v₁ 和 v₂ 线性相关
线性无关:
v₁ = [1, 0]
v₂ = [0, 1]
只有当 k₁ = k₂ = 0 时,k₁v₁ + k₂v₂ = 0
所以 v₁ 和 v₂ 线性无关
2. 基向量与坐标系统
直观理解
比喻:坐标系
就像地图上的经纬度系统:
- 基向量:定义坐标系的"方向标"
- 坐标:用基向量的组合表示任意向量
数学定义
标准基向量(2维):
e₁ = [1, 0] (X轴方向)
e₂ = [0, 1] (Y轴方向)
任意向量 v = [a, b] 可以表示为:
v = a × e₁ + b × e₂
标准基向量(3维):
e₁ = [1, 0, 0] (X轴方向)
e₂ = [0, 1, 0] (Y轴方向)
e₃ = [0, 0, 1] (Z轴方向)
任意向量 v = [a, b, c] 可以表示为:
v = a × e₁ + b × e₂ + c × e₃
3. 向量投影
直观理解
比喻:影子
向量A在向量B上的投影,就像A在B方向上的"影子"。
数学定义
投影向量:
proj_B(A) = ((A · B) / |B|²) × B
投影长度:
|proj_B(A)| = |A| × cos(θ) = (A · B) / |B|
例子
A = [3, 4]
B = [1, 0] (X轴方向)
A · B = 3×1 + 4×0 = 3
|B|² = 1² = 1
proj_B(A) = (3/1) × [1, 0] = [3, 0]
几何意义:A在X轴上的投影是[3, 0]
4. 向量空间
直观理解
比喻:多维房间
- 2维空间:平面(如桌面)
- 3维空间:立体空间(如房间)
- n维空间:抽象的多维空间
数学定义
向量空间需要满足:
- 向量加法封闭
- 数乘封闭
- 满足交换律、结合律等运算律
- 存在零向量和负向量
第八部分:常见问题解答
Q1: 向量和标量有什么区别?
标量:只有大小,没有方向
- 例子:温度(25°C)、质量(5kg)、时间(10秒)
向量:既有大小,又有方向
- 例子:速度(向东50km/h)、力(向上100N)、位移(向右3米)
关键区别:
标量:5
向量:[3, 4] (有方向)
Q2: 向量中的数字可以是负数吗?
可以!
负数表示相反方向:
[3, 4] 表示:向右3,向上4
[-3, 4] 表示:向左3,向上4
[3, -4] 表示:向右3,向下4
[-3, -4] 表示:向左3,向下4
Q3: 向量的维度可以不同吗?
可以!
不同维度的向量不能直接相加,但可以:
- 在各自的空间中独立运算
- 通过填充或降维统一维度
例子:
2维向量:[1, 2]
3维向量:[1, 2, 3]
不能直接相加,但可以:
- 将2维向量扩展为3维:[1, 2, 0]
- 然后相加:[1, 2, 0] + [1, 2, 3] = [2, 4, 3]
Q4: 为什么AI中需要高维向量?
原因:
- 信息容量:更多维度可以存储更多信息
- 特征表示:每个维度可以表示一个特征
- 语义丰富性:高维空间可以捕捉复杂的语义关系
例子:
2维:只能区分"高/矮"、"胖/瘦"
100维:可以区分100个不同的特征
512维:可以捕捉非常细微的语义差异
Q5: 如何可视化高维向量?
方法:
- 降维:使用PCA、t-SNE、UMAP等降维到2D或3D
- 投影:投影到2D平面观察
- 部分维度:只显示部分重要维度
例子:
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
# 100维向量
vectors_100d = np.random.rand(100, 100)
# 降维到2D
pca = PCA(n_components=2)
vectors_2d = pca.fit_transform(vectors_100d)
# 可视化
plt.scatter(vectors_2d[:, 0], vectors_2d[:, 1])
plt.show()
总结
核心概念回顾
-
向量是什么:既有大小又有方向的量,用有序数组表示
-
基本运算:
- 加法:对应分量相加
- 减法:对应分量相减
- 数乘:每个分量乘以标量
- 点积:对应分量相乘后求和
- 叉积:计算垂直向量(3维)
- 长度:各分量平方和的平方根
-
几何意义:
- 2维:平面上的点与方向
- 3维:空间中的点与方向
- 高维:抽象的特征空间
-
实际应用:
- 物理学:力、速度、加速度
- 计算机图形学:3D变换、光照
- 机器学习:特征表示、相似度计算
- 人工智能:词向量、图像向量、语义搜索
关键比喻总结
- 向量 = 导航指令:方向 + 距离
- 向量 = 箭矢:长度 + 方向
- 向量加法 = 合力:多个力的合成
- 点积 = 相似度:衡量两个向量的相似程度
- 向量空间 = 多维房间:相似的事物在空间中靠近
学习建议
- 从2D开始:先理解平面向量,再扩展到3D和高维
- 画图理解:用图形帮助理解向量运算的几何意义
- 动手实践:用Python实现向量运算,加深理解
- 联系实际:思考向量在生活中的应用场景
延伸学习
- 线性代数:矩阵、线性变换、特征值
- 向量微积分:梯度、散度、旋度
- 机器学习:神经网络、深度学习
- 计算机图形学:3D渲染、游戏开发
参考文献
- 线性代数教材:Gilbert Strang《线性代数导论》
- 机器学习:Christopher Bishop《模式识别与机器学习》
- 深度学习:Ian Goodfellow《深度学习》
- 向量数据库:Milvus、Pinecone、Weaviate文档