行莫
行莫
发布于 2025-11-17 / 18 阅读
0
0

向量详解

向量详解

引言:向量就在我们身边

想象一下,你正在给朋友指路:

"从学校出发,向东走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]

运算性质

  1. 交换律A + B = B + A
  2. 结合律(A + B) + C = A + (B + C)
  3. 零向量A + 0 = A(0 = [0, 0, ..., 0])
  4. 负向量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]

运算性质

  1. 分配律k(A + B) = kA + kB
  2. 结合律(kl)A = k(lA)
  3. 单位元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

叉积的性质

  1. 反交换律A × B = -(B × A)
  2. 分配律A × (B + C) = A × B + A × C
  3. 数乘结合律(kA) × B = k(A × B)
  4. 平行向量:如果 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 ✓

长度的性质

  1. 非负性|A| ≥ 0,且 |A| = 0 当且仅当 A = 0
  2. 齐次性|kA| = |k| × |A|
  3. 三角不等式|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维空间:抽象的多维空间

数学定义

向量空间需要满足:

  1. 向量加法封闭
  2. 数乘封闭
  3. 满足交换律、结合律等运算律
  4. 存在零向量和负向量

第八部分:常见问题解答

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中需要高维向量?

原因

  1. 信息容量:更多维度可以存储更多信息
  2. 特征表示:每个维度可以表示一个特征
  3. 语义丰富性:高维空间可以捕捉复杂的语义关系

例子

2维:只能区分"高/矮"、"胖/瘦"
100维:可以区分100个不同的特征
512维:可以捕捉非常细微的语义差异

Q5: 如何可视化高维向量?

方法

  1. 降维:使用PCA、t-SNE、UMAP等降维到2D或3D
  2. 投影:投影到2D平面观察
  3. 部分维度:只显示部分重要维度

例子

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()

总结

核心概念回顾

  1. 向量是什么:既有大小又有方向的量,用有序数组表示

  2. 基本运算

    • 加法:对应分量相加
    • 减法:对应分量相减
    • 数乘:每个分量乘以标量
    • 点积:对应分量相乘后求和
    • 叉积:计算垂直向量(3维)
    • 长度:各分量平方和的平方根
  3. 几何意义

    • 2维:平面上的点与方向
    • 3维:空间中的点与方向
    • 高维:抽象的特征空间
  4. 实际应用

    • 物理学:力、速度、加速度
    • 计算机图形学:3D变换、光照
    • 机器学习:特征表示、相似度计算
    • 人工智能:词向量、图像向量、语义搜索

关键比喻总结

  • 向量 = 导航指令:方向 + 距离
  • 向量 = 箭矢:长度 + 方向
  • 向量加法 = 合力:多个力的合成
  • 点积 = 相似度:衡量两个向量的相似程度
  • 向量空间 = 多维房间:相似的事物在空间中靠近

学习建议

  1. 从2D开始:先理解平面向量,再扩展到3D和高维
  2. 画图理解:用图形帮助理解向量运算的几何意义
  3. 动手实践:用Python实现向量运算,加深理解
  4. 联系实际:思考向量在生活中的应用场景

延伸学习

  • 线性代数:矩阵、线性变换、特征值
  • 向量微积分:梯度、散度、旋度
  • 机器学习:神经网络、深度学习
  • 计算机图形学:3D渲染、游戏开发

参考文献

  1. 线性代数教材:Gilbert Strang《线性代数导论》
  2. 机器学习:Christopher Bishop《模式识别与机器学习》
  3. 深度学习:Ian Goodfellow《深度学习》
  4. 向量数据库:Milvus、Pinecone、Weaviate文档

评论