几何与三角
这一章建立向量"方向 + 长度"的直觉,理解基础三角函数,并把坐标系的空间直观作为学习线性代数"向量空间"的铺垫。
单词的 embedding、推荐系统的相似度计算、Transformer 的位置编码,全都建立在这一章的几何直觉上。
平面向量:方向 + 长度
向量是什么
普通数字(标量)只携带"大小"一个信息,比如"温度是 25 度"。
向量同时携带两个信息:方向和长度(模)。
在平面直角坐标系中,向量写成坐标形式 ,表示"从原点出发,沿 x 方向走 x 个单位、沿 y 方向走 y 个单位"所到达的位置,箭头本身就编码了方向和长度。
向量的长度(模)
这就是勾股定理:向量的长度是它在 x 轴和 y 轴上的分量构成的直角三角形的斜边。
向量的加法与数乘
| 运算 | 代数规则 | 几何含义 |
|---|---|---|
| 加法 | 首尾相接:把第二个向量的起点接到第一个向量的终点 | |
| 数乘 | 只改变长度(k 为负时反转方向),不改变方向所在的直线 |
向量点积:衡量"两个方向有多接近"
其中 是两个向量的夹角。点积的符号有明确的几何意义:
| 点积符号 | 夹角范围 | 几何含义 |
|---|---|---|
| 方向大致相同 | ||
| 两向量垂直(正交) | ||
| 方向大致相反 |
为什么向量对 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°,即 弧度,数值重复一次)。
点击"播放",看单位圆上的点如何转出一条正弦波。
关键性质
| 性质 | 表达式 | 含义 |
|---|---|---|
| 有界性 | 无论角度多大,值永远落在 [-1, 1] | |
| 周期性 | 每转一圈,数值重复一次 | |
| 平方关系 | 单位圆半径为 1 的直接推论(勾股定理) |
sin、cos 与位置编码
Transformer 模型在处理一串文字时,天生不知道"词的先后顺序"(它并行处理所有词)。
为了把"位置"信息编码进模型,Transformer 使用了这样的公式:
这里用到 sin/cos 的两个核心性质:
有界性:无论序列多长,位置编码的数值都不会爆炸,始终在 [-1, 1] 之间,不干扰其他数值计算。
周期性 + 不同频率叠加:不同维度使用不同频率的 sin/cos 波形,模型既能区分"相邻位置"(高频波形变化快),也能感知"远距离位置关系"(低频波形变化慢)。
这背后和信号处理中的傅里叶变换思想相通:任何复杂信号都可以用一系列不同频率的正弦波叠加来表示。
实例
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 维向量空间、投影、正交等概念的起点 |
