现在位置: 首页 > AI 数学基础 > 正文

几何与三角

这一章建立向量"方向 + 长度"的直觉,理解基础三角函数,并把坐标系的空间直观作为学习线性代数"向量空间"的铺垫。

单词的 embedding、推荐系统的相似度计算、Transformer 的位置编码,全都建立在这一章的几何直觉上。


平面向量:方向 + 长度

向量是什么

普通数字(标量)只携带"大小"一个信息,比如"温度是 25 度"。

向量同时携带两个信息:方向长度(模)

在平面直角坐标系中,向量写成坐标形式 ,表示"从原点出发,沿 x 方向走 x 个单位、沿 y 方向走 y 个单位"所到达的位置,箭头本身就编码了方向和长度。

向量的长度(模)

这就是勾股定理:向量的长度是它在 x 轴和 y 轴上的分量构成的直角三角形的斜边。

向量的加法与数乘

运算代数规则几何含义
加法首尾相接:把第二个向量的起点接到第一个向量的终点
数乘只改变长度(k 为负时反转方向),不改变方向所在的直线

向量点积:衡量"两个方向有多接近"

其中 是两个向量的夹角。点积的符号有明确的几何意义:

点积符号夹角范围几何含义
方向大致相同
两向量垂直(正交)
方向大致相反
交互演示:向量的夹角与点积
蓝色向量 a 固定指向右侧,拖动滑块旋转绿色向量 b 并改变它的长度,观察点积符号(绿色表示方向相近,红色表示方向相反,灰色表示垂直)。

为什么向量对 AI 至关重要

在机器学习里,一条样本数据(一张图片、一段文字的 embedding、一个用户的特征)本质上就是高维空间里的一个向量

两个词的 embedding 向量点积(或夹角余弦)越大,通常代表这两个词语义越相似,这是词向量、推荐系统"相似度计算"的数学基础。

神经网络每一层做的 ,本质就是权重向量和输入向量的点积。

实例

# 向量长度、点积与夹角余弦(词向量相似度的雏形)
import math

# 两个"词向量":假设是两个词的 embedding(简化成二维)
king  = (3, 4)
queen = (4, 3)

# 模长 |v| = sqrt(x² + y²)
norm_king  = math.sqrt(3**2 + 4**2)   # 5
norm_queen = math.sqrt(4**2 + 3**2)   # 5
print(norm_king, norm_queen)

# 点积 a·b = a₁b₁ + a₂b₂
dot = king[0] * queen[0] + king[1] * queen[1]
print(dot)

# 夹角余弦 cos θ = (a·b) / (|a||b|),越接近 1 表示两个向量方向越接近
cos_theta = dot / (norm_king * norm_queen)
print(cos_theta)

执行以上代码输出结果为:

5.0 5.0
24
0.96

余弦相似度 0.96 意味着两个向量方向非常接近,这正是"语义相似"的几何表达。

练习:向量 ,求它的长度

点击查看答案


基础三角函数:sin 与 cos

从直角三角形到单位圆

最初学三角函数,往往从直角三角形的边长比值开始:

更通用、也更适合 AI 场景的理解方式是单位圆定义:在半径为 1 的圆上,从 x 轴正方向逆时针转过角度 所对应的点,它的坐标就是

这样定义的好处是: 可以取任意角度(不局限于 0°~90°),sin 和 cos 随 θ 变化不断"绕圈",呈现出周期性(每转一圈 360°,即 弧度,数值重复一次)。

点击"播放",看单位圆上的点如何转出一条正弦波。

动态演示:单位圆转出正弦波
单位圆上的点随角度 θ 逆时针转动,它的高度(sin θ)在右侧被逐点记录,连成红色正弦曲线;水平投影(cos θ)以蓝色标出。

关键性质

性质表达式含义
有界性无论角度多大,值永远落在 [-1, 1]
周期性每转一圈,数值重复一次
平方关系单位圆半径为 1 的直接推论(勾股定理)

sin、cos 与位置编码

Transformer 模型在处理一串文字时,天生不知道"词的先后顺序"(它并行处理所有词)。

为了把"位置"信息编码进模型,Transformer 使用了这样的公式:

这里用到 sin/cos 的两个核心性质:

有界性:无论序列多长,位置编码的数值都不会爆炸,始终在 [-1, 1] 之间,不干扰其他数值计算。

周期性 + 不同频率叠加:不同维度使用不同频率的 sin/cos 波形,模型既能区分"相邻位置"(高频波形变化快),也能感知"远距离位置关系"(低频波形变化慢)。

这背后和信号处理中的傅里叶变换思想相通:任何复杂信号都可以用一系列不同频率的正弦波叠加来表示。

交互演示:位置编码热力图
横轴是序列中的位置(0~49),纵轴是编码维度(0~15),颜色是编码值。可以看到低维度(上方)波形变化快、高维度(下方)波形变化慢--不同频率的 sin/cos 叠加在一起。
红色为正值,蓝色为负值,与 sin/cos 的波形一致。真实 Transformer 的编码维度通常是 512 甚至更高,这里只取前 16 维示意。

实例

# 手算位置编码:d=16 时前几个维度的频率分布
import math

d = 16   # 编码总维度(示意用,真实模型是 512+)

# 维度 2i 的角频率是 1 / 10000^(2i/d)
# 低维度频率高(区分相邻位置),高维度频率低(感知远距离)
for i in [0, 2, 4]:
    freq = 1 / (10000 ** (i / d))
    print(i, round(freq, 6))

# pos=3 在维度 0 上的 sin 编码值:sin(3 * 1.0)
print(round(math.sin(3 * 1.0), 6))

执行以上代码输出结果为:

0 1.0
2 0.316228
4 0.1
0.14112

维度 0 的频率是 1.0,维度 4 就衰减到 0.1--频率沿维度指数衰减,这正是"高频在前、低频在后"的布局。


坐标系与空间直观

二维坐标系是理解"高维空间"的起点

平面直角坐标系 用两条互相垂直的数轴,给平面上每一个点一个唯一的"地址"。

这个直观想法可以直接推广:三维空间加一个 z 轴,n 维空间就是

虽然 n 维空间没法直接画出来,但代数上的处理方式完全一样:每个坐标轴("维度")仍然是相互独立的一个方向。

这对理解线性代数"向量空间"意味着什么

二维直觉高维推广AI 中的应用
投影:向量在某轴上的分量高维向量在任意方向上的投影点积 / 正交分解是降维算法的基础
正交:两方向垂直、互不干扰高维空间的"正交基"PCA 降维寻找相互正交的主方向
基:x 轴和 y 轴是最基础的参照方向任何向量都写成基向量的组合embedding 空间的维度就是基的数量

很多语言模型的 embedding 维度是几百到上千(比如 768 维),你没法在纸上画出这个空间,但可以借助二维、三维里熟悉的操作去"想象"它。

一个具体的类比

想象你在描述一部电影,可以用"打斗场面多少""搞笑程度""剧情复杂度"等很多个维度去打分。

每一部电影都对应这个"多维评分空间"里的一个点(向量)。

两部电影越像,它们对应的向量在空间里就越"接近"(点积大、夹角小)。

这正是推荐系统"相似内容推荐"背后的几何直觉,而这套直觉的源头,就是二维坐标系里"两个点离得近不近"的空间感。

练习:如果一个向量在 x 轴方向的投影很大、在 y 轴方向的投影几乎为 0,这说明这个向量的方向大致朝哪?

点击查看答案

方向几乎沿着 x 轴:它在 y 方向上"贡献"很小,说明它和 y 轴接近垂直、和 x 轴接近平行。


本章小结

主题一句话核心
平面向量同时携带"方向"和"长度"两个信息,是高维数据(embedding)的基本单位
点积衡量两个方向"有多接近",是相似度计算的数学基础
sin / cos单位圆上的坐标,具有周期性和有界性,是位置编码的数学工具
坐标系二维/三维的空间直觉,是理解 n 维向量空间、投影、正交等概念的起点