行莫
行莫
发布于 2025-11-05 / 9 阅读
0
0

人工智能中的向量

人工智能中的向量

引言:为什么需要理解向量?

想象一下,你正在向一位新朋友描述你的理想伴侣:

  • "他/她很聪明"(智力水平)
  • "他/她很幽默"(性格特征)
  • "他/她很善良"(道德品质)
  • "他/她喜欢旅行"(兴趣爱好)

如果用数字来表示这些特征,可能是:

  • 智力:8/10
  • 幽默:9/10
  • 善良:9/10
  • 旅行兴趣:7/10

这一组数字 [8, 9, 9, 7] 就是一个向量。它用数字的方式"描述"了一个人。

在人工智能的世界里,向量就是机器用来"理解"和"描述"事物的语言。就像人类用文字描述世界,机器用向量来理解和处理信息。


第一部分:向量是什么?

从日常生活中的比喻开始

比喻 1:地址系统

想象你要告诉朋友如何找到你家:

传统方式(文字描述)

"我家在北京市朝阳区建国路88号,距离地铁站500米,在3楼,朝南"

向量方式(数字坐标)

[116.4074, 39.9042, 3, 180]

  • 116.4074:经度
  • 39.9042:纬度
  • 3:楼层
  • 180:朝向(南)

为什么用向量?

  • 机器可以快速计算两个地址之间的距离
  • 可以在地图上精确标注位置
  • 可以批量处理大量地址信息

比喻 2:身份证号码

每个人的身份证号码都是一串数字,比如:110101199001011234

这串数字可以看作是一个向量,其中:

  • 前6位:地区编码
  • 中间8位:出生日期
  • 最后4位:顺序码

关键理解:向量就是用数字来表示事物的特征或属性。

数学定义:向量就是一组有序的数字

基本概念

向量(Vector) 是一组有序的数字,用方括号表示:

[1, 2, 3]

这表示一个包含3个数字的向量。

维度(Dimension)

向量的维度就是它包含的数字个数:

[1, 2]          → 2维向量
[1, 2, 3]       → 3维向量
[1, 2, 3, 4, 5] → 5维向量

比喻:就像描述一个人需要多个特征一样:

  • 2维:只有身高和体重
  • 3维:身高、体重、年龄
  • 100维:身高、体重、年龄、性格、兴趣...(100个特征)

向量的表示方法

数学符号

v = [v₁, v₂, v₃, ..., vₙ]

例子

猫的特征向量 = [0.8, 0.6, 0.9, 0.2, 0.1]
                ↑    ↑    ↑    ↑    ↑
               毛茸茸 可爱  温顺  凶猛  大小

第二部分:为什么AI需要向量?

问题:机器无法直接理解文字和图像

人类的思考方式

人类看到"猫"这个词,大脑会:

  1. 想起猫的形象(毛茸茸、四条腿、有尾巴)
  2. 想起猫的特征(温顺、可爱、会喵喵叫)
  3. 想起相关的经历(家里养的猫、朋友家的猫)

这些信息都是以"概念"和"图像"的形式存储的。

机器的"思考"方式

机器看到"猫"这个词,只能看到:

"猫" = 01000011 01000001 01010100(二进制编码)

机器无法理解"猫"的含义,它只能看到一串 0 和 1。

解决方案:将一切转换为向量

比喻:翻译系统

想象你是一位翻译官,需要将:

  • 中文世界语(机器能理解的语言)
  • 图像世界语
  • 声音世界语

向量就是这种"世界语"。它让机器能够:

  • 理解文字的含义
  • 理解图像的内容
  • 理解声音的特征
  • 比较不同事物的相似性

向量在AI中的核心作用

1. 统一表示

不同形式的信息都可以转换为向量

文字:"猫" → [0.8, 0.6, 0.9, ...]
图像:猫的图片 → [0.7, 0.5, 0.8, ...]
声音:猫叫声 → [0.6, 0.7, 0.9, ...]

比喻:就像把不同语言翻译成同一种语言,这样就能互相比较了。

2. 计算相似性

向量可以计算"相似度"

向量A:[0.8, 0.6, 0.9]
向量B:[0.7, 0.5, 0.8]
向量C:[0.1, 0.2, 0.3]

向量A 和 向量B 更相似(都表示猫)
向量A 和 向量C 不相似(一个表示猫,一个表示汽车)

比喻:就像比较两个人的性格特征,看他们有多相似。

3. 机器学习和模式识别

AI模型学习的过程

  1. 将输入转换为向量
  2. 在向量空间中寻找模式
  3. 根据模式做出预测

比喻:就像学习识别不同的人,通过观察他们的特征(身高、体重、长相)来区分。


第三部分:向量的实际应用

应用 1:文字转向量(Word Embedding)

例子:理解"猫"和"狗"

传统方式

"猫" = 01000011 01000001 01010100
"狗" = 01000100 01001111 01000111

机器无法理解它们的关系。

向量方式

"猫" = [0.8, 0.6, 0.9, 0.2, 0.1, ...]
"狗" = [0.7, 0.5, 0.8, 0.3, 0.2, ...]

关键理解

  • 向量的每个数字代表某种特征
  • "猫"和"狗"的向量在某些维度上相似(都是动物、都有毛)
  • 在某些维度上不同(大小、性格等)

比喻:就像用"性格测试"的结果来描述一个人:

  • 内向/外向:猫=0.3(较内向),狗=0.7(较外向)
  • 友好程度:猫=0.6,狗=0.9
  • 独立性:猫=0.8,狗=0.4

Word2Vec 的例子

Word2Vec 是一个将文字转换为向量的模型:

"国王" = [0.5, 0.3, 0.8, ...]
"王后" = [0.4, 0.4, 0.7, ...]
"男人" = [0.6, 0.2, 0.9, ...]
"女人" = [0.5, 0.3, 0.8, ...]

神奇的关系

"国王" - "男人" + "女人" ≈ "王后"

比喻:就像数学公式,可以在向量空间中做"加减法"。

应用 2:图像转向量(Image Embedding)

例子:识别猫的图片

传统方式

图片 = 1000×1000 像素 = 1,000,000 个数字
[255, 128, 64, 200, ...](100万个数字)

问题:这个向量太大了,而且包含很多无关信息(背景、光线等)。

向量方式(特征提取)

猫的图片 → 特征提取 → [0.8, 0.6, 0.9, 0.2, ...]
                          ↑    ↑    ↑    ↑
                      毛茸茸 四条腿 有尾巴 大小

比喻:就像用关键词描述一张照片:

  • 不是存储所有像素
  • 而是提取"关键特征"
  • 用这些特征来描述图像

实际例子:人脸识别

人脸照片 → 特征向量
[0.7, 0.8, 0.6, 0.9, 0.5, ...]
  ↑    ↑    ↑    ↑    ↑
眼睛  鼻子  嘴巴  脸型  肤色

不同人的特征向量不同,可以用来识别身份。

应用 3:语义搜索

例子:搜索"可爱的小动物"

传统搜索:只能匹配关键词

  • 搜索"猫" → 只找到包含"猫"这个词的结果

向量搜索:理解语义

  • 搜索"可爱的小动物" → 能找到"猫"、"狗"、"兔子"等
  • 因为它们的向量在"可爱"和"小动物"这些维度上相似

比喻:就像智能助手,能理解你的意图,而不仅仅是关键词。

应用 4:推荐系统

例子:电影推荐

用户特征向量

用户A = [0.8, 0.6, 0.9, 0.2, ...]
         ↑    ↑    ↑    ↑
      喜欢动作 喜欢科幻 喜欢喜剧 喜欢恐怖

电影特征向量

《复仇者联盟》 = [0.9, 0.8, 0.3, 0.1, ...]
《泰坦尼克号》 = [0.2, 0.1, 0.8, 0.0, ...]

推荐逻辑

  • 计算用户向量和电影向量的相似度
  • 相似度高的电影推荐给用户

比喻:就像匹配相亲对象,根据性格、兴趣等特征来匹配。


第四部分:向量的数学运算

1. 向量加法

直观理解

例子

向量A = [1, 2, 3]
向量B = [4, 5, 6]

向量A + 向量B = [1+4, 2+5, 3+6] = [5, 7, 9]

比喻:就像把两个人的特征合并:

  • 身高:A=170cm, B=180cm → 平均=175cm
  • 体重:A=60kg, B=80kg → 平均=70kg

2. 向量减法

直观理解

例子

向量A = [5, 7, 9]
向量B = [1, 2, 3]

向量A - 向量B = [5-1, 7-2, 9-3] = [4, 5, 6]

比喻:就像计算两个人的差异:

  • 身高差:A=175cm, B=170cm → 差=5cm
  • 体重差:A=70kg, B=60kg → 差=10kg

3. 向量点积(Dot Product)

计算相似度的关键

数学公式

向量A = [a₁, a₂, a₃]
向量B = [b₁, b₂, b₃]

点积 = a₁×b₁ + a₂×b₂ + a₃×b₃

例子

向量A = [1, 2, 3]
向量B = [4, 5, 6]

点积 = 1×4 + 2×5 + 3×6 = 4 + 10 + 18 = 32

比喻:就像比较两个人的"匹配度":

  • 如果两个人在很多特征上都相似,点积就大
  • 如果两个人在很多特征上不同,点积就小

4. 向量长度(Magnitude)

计算向量的"大小"

数学公式

向量A = [a₁, a₂, a₃]

长度 = √(a₁² + a₂² + a₃²)

例子

向量A = [3, 4]

长度 = √(3² + 4²) = √(9 + 16) = √25 = 5

比喻:就像计算一个人"综合特征强度":

  • 如果所有特征值都很大,向量长度就大
  • 如果所有特征值都很小,向量长度就小

5. 余弦相似度(Cosine Similarity)

AI中最常用的相似度计算

数学公式

余弦相似度 = (向量A · 向量B) / (|向量A| × |向量B|)

结果范围:-1 到 1

  • 1:完全相似
  • 0:不相关
  • -1:完全相反

例子

向量A = [1, 0]  (指向右)
向量B = [0, 1]  (指向上)
向量C = [1, 1]  (指向右上)

A和B的相似度 = 0(垂直,不相关)
A和C的相似度 = 0.707(45度角,有一定相似)
A和A的相似度 = 1(完全相同)

比喻:就像比较两个人的"方向":

  • 如果两个人的人生方向完全一致,相似度=1
  • 如果两个人的人生方向完全相反,相似度=-1
  • 如果两个人的人生方向垂直,相似度=0

第五部分:向量空间(Vector Space)

比喻:多维空间

2维空间(最容易理解)

想象一个平面地图:

  • X轴:东西方向
  • Y轴:南北方向

每个点就是一个2维向量

[3, 4] 表示:向东3公里,向北4公里

计算距离

点A = [0, 0](起点)
点B = [3, 4](终点)

距离 = √((3-0)² + (4-0)²) = √(9 + 16) = 5公里

3维空间(现实世界)

想象一个房间:

  • X轴:左右
  • Y轴:前后
  • Z轴:上下

每个点就是一个3维向量

[2, 3, 1.5] 表示:向右2米,向前3米,向上1.5米

高维空间(AI的世界)

AI中的向量通常是高维的

  • 100维:100个特征
  • 512维:512个特征
  • 768维:768个特征
  • 甚至更高

比喻:就像在一个超级多维的"房间"里:

  • 每个维度代表一个特征
  • 相似的事物在空间中靠得近
  • 不同的事物在空间中离得远

向量空间中的"聚类"

比喻:物以类聚

在向量空间中,相似的事物会聚集在一起:

空间中的点:
- [0.8, 0.6, 0.9] - 猫
- [0.7, 0.5, 0.8] - 猫
- [0.9, 0.7, 0.9] - 猫
        ↓
    (猫的聚类)

- [0.1, 0.2, 0.3] - 汽车
- [0.2, 0.3, 0.4] - 汽车
- [0.1, 0.1, 0.2] - 汽车
        ↓
    (汽车的聚类)

应用:AI可以通过聚类来识别不同类型的事物。

向量空间中的"方向"和"距离"

方向:表示关系

例子

"国王" - "男人" + "女人" = "王后"

比喻:就像在空间中移动:

  • 从"国王"的位置
  • 减去"男人"的方向
  • 加上"女人"的方向
  • 到达"王后"的位置

距离:表示相似性

距离越近,越相似

"猫"和"狗"的距离 = 0.5(较近,都是动物)
"猫"和"汽车"的距离 = 2.0(较远,完全不同)

第六部分:向量在深度学习中的应用

应用 1:神经网络中的向量

比喻:信息传递

想象神经网络是一栋大楼,每层楼都有很多房间:

输入层(1楼):接收原始数据
  ↓
隐藏层1(2楼):处理数据,转换为向量
  ↓
隐藏层2(3楼):进一步处理向量
  ↓
输出层(4楼):输出结果

向量在每一层的作用

  • 输入向量:原始数据的表示
  • 隐藏向量:中间处理结果的表示
  • 输出向量:最终结果的表示

例子

输入:"猫的图片"
  ↓
输入向量:[像素值1, 像素值2, ..., 像素值1000000]
  ↓
隐藏向量1:[特征1, 特征2, ..., 特征512]
  ↓
隐藏向量2:[高级特征1, 高级特征2, ..., 高级特征256]
  ↓
输出向量:[是猫的概率=0.95, 是狗的概率=0.03, ...]

应用 2:Transformer 中的向量

比喻:注意力机制

想象你在阅读一篇文章,你的大脑会:

  1. 关注重要词汇(注意力)
  2. 理解词汇之间的关系(上下文)
  3. 形成整体理解(语义向量)

Transformer 的工作原理

输入文字:"猫坐在垫子上"
  ↓
词向量:[猫的向量, 坐的向量, 垫子的向量]
  ↓
注意力机制:理解"猫"和"垫子"的关系
  ↓
上下文向量:[理解"猫"在句子中的含义]
  ↓
输出:理解整个句子的含义

关键理解

  • 每个词都有自己的向量
  • 通过注意力机制,模型理解词与词之间的关系
  • 最终形成对整个句子的理解向量

应用 3:CLIP 中的向量

比喻:跨模态翻译

CLIP 是一个能够理解图像和文本的模型:

图像 → 图像编码器 → 图像向量 [0.8, 0.6, 0.9, ...]
文本 → 文本编码器 → 文本向量 [0.7, 0.5, 0.8, ...]

关键:图像和文本被映射到同一个向量空间:

  • 描述相同内容的图像和文本向量相似
  • 描述不同内容的图像和文本向量不相似

例子

"猫的图片" → 图像向量 [0.8, 0.6, 0.9, ...]
"一只猫" → 文本向量 [0.7, 0.5, 0.8, ...]

相似度 = 0.92(非常相似)

第七部分:向量的实际例子

例子 1:文本相似度

场景:判断两句话是否相似

句子A:"我喜欢吃苹果"
句子B:"我爱吃水果"
句子C:"今天天气很好"

转换为向量

句子A = [0.8, 0.6, 0.9, 0.2, ...]
句子B = [0.7, 0.5, 0.8, 0.3, ...]
句子C = [0.1, 0.2, 0.1, 0.9, ...]

计算相似度

A和B的相似度 = 0.85(很相似,都关于吃水果)
A和C的相似度 = 0.15(不相似,完全不同的话题)

例子 2:图像搜索

场景:用文字搜索图片

用户输入:"一只橘色的猫坐在窗台上"
  ↓
转换为文本向量:[0.8, 0.6, 0.9, 0.7, ...]
  ↓
搜索图像库:
  - 图像1向量:[0.7, 0.5, 0.8, 0.6, ...] 相似度=0.92 ✓
  - 图像2向量:[0.2, 0.3, 0.1, 0.4, ...] 相似度=0.15 ✗
  - 图像3向量:[0.9, 0.7, 0.9, 0.8, ...] 相似度=0.95 ✓
  ↓
返回相似度最高的图像

例子 3:推荐系统

场景:电影推荐

用户A的特征向量:
[0.8, 0.6, 0.9, 0.2, 0.1, ...]
 ↑    ↑    ↑    ↑    ↑
动作 科幻 喜剧 恐怖 爱情

电影库:
- 《复仇者联盟》:[0.9, 0.8, 0.3, 0.1, 0.2, ...] 相似度=0.85
- 《泰坦尼克号》:[0.2, 0.1, 0.8, 0.0, 0.9, ...] 相似度=0.75
- 《闪灵》:[0.1, 0.2, 0.1, 0.9, 0.1, ...] 相似度=0.25

推荐:《复仇者联盟》(相似度最高)

例子 4:语义理解

场景:理解同义词

"猫" = [0.8, 0.6, 0.9, 0.2, ...]
"猫咪" = [0.79, 0.61, 0.89, 0.21, ...]
"feline" = [0.78, 0.59, 0.91, 0.19, ...]

相似度都 > 0.9(非常相似)

AI可以理解它们表示同一个概念

第八部分:向量的维度

为什么需要高维向量?

比喻:描述一个人的复杂程度

简单描述(低维)

2维:[身高, 体重]
只能描述基本信息

详细描述(高维)

100维:[身高, 体重, 年龄, 性格, 兴趣, 技能, ...]
可以描述非常详细的信息

为什么AI需要高维向量?

复杂的特征需要更多维度

  • 2维:只能区分"高/矮"、"胖/瘦"
  • 10维:可以区分更多特征
  • 100维:可以区分非常细微的差异
  • 512维:可以捕捉复杂的语义关系

比喻:就像分辨率:

  • 低分辨率:只能看到大概轮廓
  • 高分辨率:可以看到细节和纹理

维度的选择

太少维度的问题

信息丢失

"猫"和"狗"在2维空间中可能重叠
[0.5, 0.5] - 猫
[0.5, 0.5] - 狗(无法区分)

比喻:就像用"身高"和"体重"来区分双胞胎,可能不够。

太多维度的问题

计算成本

  • 512维向量:需要计算512个数字
  • 768维向量:需要计算768个数字
  • 计算量成倍增加

过拟合风险

  • 维度太多可能记住训练数据的细节
  • 但无法泛化到新数据

比喻:就像用1000个特征来描述一个人,可能太详细了,反而不好。

合适的维度

常见选择

  • Word2Vec:100-300维
  • BERT:768维
  • GPT:768-4096维
  • CLIP:512-1024维

原则

  • 足够捕获重要信息
  • 不会过度复杂
  • 计算效率高

第九部分:向量的可视化

2维向量的可视化

散点图

Y轴
  ↑
  |     ● (3, 4)
  |   
  |   ● (2, 2)
  |
  | ● (1, 1)
  |
  +--------→ X轴
 (0,0)

每个点代表一个向量,可以直观看到:

  • 向量的位置
  • 向量之间的距离
  • 向量的聚类

高维向量的可视化

降维技术

问题:无法直接可视化100维向量

解决方案:降维到2维或3维

方法

  • PCA(主成分分析):找到最重要的维度
  • t-SNE:保持相似事物的接近
  • UMAP:更现代的降维方法

比喻:就像把100个特征压缩成2-3个最重要的特征来展示。

例子:词向量的可视化

原始:100维向量
  ↓
降维:2维向量
  ↓
可视化:
  ● 猫  ● 狗  ● 兔子
    (动物聚类)
    
  ● 汽车  ● 飞机  ● 火车
    (交通工具聚类)

第十部分:向量的常见问题

问题1:向量中的数字代表什么?

答案:取决于模型和训练数据

例子1:Word2Vec

"猫" = [0.2, -0.5, 0.8, ...]
每个数字没有明确的含义
但整体向量表示"猫"的语义

例子2:特征向量

人脸特征向量:
[0.8, 0.6, 0.9, ...]
 ↑    ↑    ↑
眼睛  鼻子  嘴巴
(每个数字有明确含义)

关键理解

  • 有些向量的每个维度有明确含义
  • 有些向量的维度没有明确含义,但整体有意义
  • 重要的是向量的整体,而不是单个数字

问题2:向量中的数字范围是多少?

答案:通常是 -1 到 1 或 0 到 1

归一化:为了便于计算,向量通常被归一化:

原始向量:[100, 200, 300]
  ↓
归一化:[0.33, 0.67, 1.0]

好处

  • 所有向量在同一尺度上
  • 便于比较和计算

问题3:如何创建向量?

方法1:手动创建(特征工程)

图像特征向量:
[0.8, 0.6, 0.9, ...]
 ↑    ↑    ↑
红色  绿色  蓝色
(手动提取特征)

方法2:模型学习(深度学习)

输入数据 → 神经网络 → 向量
(模型自动学习如何提取特征)

比喻

  • 手动:像手工制作,需要专家知识
  • 自动:像机器学习,让模型自己学习

问题4:向量会变化吗?

答案:取决于应用场景

固定的向量

训练好的模型,向量是固定的
"猫"的向量在 Word2Vec 中是固定的

动态的向量

在训练过程中,向量会不断调整
直到找到最佳表示

上下文相关的向量

BERT 等模型:
"银行"在"去银行"和"河岸"中向量不同
(根据上下文变化)

第十一部分:实践指南

如何使用向量

Python 示例:计算向量相似度

import numpy as np
from sklearn.metrics.pairwise import cosine_similarity

# 定义向量
vector_a = np.array([1, 2, 3])
vector_b = np.array([4, 5, 6])
vector_c = np.array([0, 0, 1])

# 计算余弦相似度
similarity_ab = cosine_similarity([vector_a], [vector_b])[0][0]
similarity_ac = cosine_similarity([vector_a], [vector_c])[0][0]

print(f"A和B的相似度: {similarity_ab:.2f}")
print(f"A和C的相似度: {similarity_ac:.2f}")

Python 示例:文本转向量(使用预训练模型)

from sentence_transformers import SentenceTransformer

# 加载模型
model = SentenceTransformer('all-MiniLM-L6-v2')

# 将文本转换为向量
texts = ["我喜欢吃苹果", "我爱吃水果", "今天天气很好"]
embeddings = model.encode(texts)

# 计算相似度
similarity = cosine_similarity([embeddings[0]], [embeddings[1]])[0][0]
print(f"相似度: {similarity:.2f}")

Python 示例:图像转向量(使用CLIP)

import clip
import torch
from PIL import Image

# 加载模型
device = "cuda" if torch.cuda.is_available() else "cpu"
model, preprocess = clip.load("ViT-B/32", device=device)

# 加载图像
image = preprocess(Image.open("cat.jpg")).unsqueeze(0).to(device)

# 转换为向量
with torch.no_grad():
    image_vector = model.encode_image(image)
    
print(f"图像向量维度: {image_vector.shape}")

总结

核心概念回顾

  1. 向量是什么:一组有序的数字,用来表示事物的特征

  2. 为什么需要向量:机器无法直接理解文字和图像,需要转换为向量

  3. 向量的作用

    • 统一表示不同形式的信息
    • 计算相似性
    • 支持机器学习
  4. 向量的应用

    • 文本理解(Word Embedding)
    • 图像理解(Image Embedding)
    • 语义搜索
    • 推荐系统

关键比喻总结

  • 向量 = 地址系统:用数字坐标描述位置
  • 向量 = 身份证:用数字编码表示特征
  • 向量 = 翻译系统:将不同语言翻译成统一语言
  • 向量空间 = 多维房间:相似的事物在空间中靠近
  • 向量运算 = 性格匹配:通过比较特征找到相似性

学习建议

  1. 从简单开始:先理解2维、3维向量
  2. 多实践:通过代码示例加深理解
  3. 联想记忆:用比喻帮助记忆概念
  4. 逐步深入:从基础概念到高级应用

延伸学习

  • Word2Vec:文字转向量的经典方法
  • BERT:上下文相关的向量表示
  • CLIP:跨模态的向量表示
  • 向量数据库:专门存储和检索向量的数据库

参考文献

  1. Word2Vec 论文:Efficient Estimation of Word Representations in Vector Space (Mikolov et al., 2013)

  2. BERT 论文:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding (Devlin et al., 2018)

  3. CLIP 论文:Learning Transferable Visual Models From Natural Language Supervision (Radford et al., 2021)

  4. 向量数据库:Pinecone, Weaviate, Milvus 等


评论