读完这一课,你将能够
- 把一个样本说成向量,并在"数据行 / 几何箭头 / 坐标列"三种视角间自由切换。
- 手算范数 \(\|a\|=\sqrt{\sum a_i^2}\),并预测 \(2a\)、\(-0.5a\)、\(0\cdot a\) 的长度与方向。
- 判断两个向量张成的是一条过原点的直线还是整个平面,并说清线性相关与无关的区别。
- 用 \(\sum a_i b_i\) 和 \(\|a\|\|b\|\cos\theta\) 两种方式算出同一个点积,并说出它度量"方向有多接近"。
- 从点积推出余弦相似度,解释它为什么是语义检索 / RAG 的核心。
1. 开场:为什么从向量讲起
如果把机器学习(machine learning)拆到最底层,你会发现一个反复出现的"原子"——向量 vector。无论是一个数据点、一张图片、一个词的语义、还是模型自己的参数,在计算机眼里它们统统是一串有序的数。理解了向量,你就拿到了打开后面所有内容(矩阵、梯度、神经网络、注意力机制)的钥匙。
先看四个真实例子,感受"万物皆向量":
- 一封邮件 → 词频向量。假设我们只关心 5 个词 \([\text{免费},\ \text{中奖},\ \text{会议},\ \text{发票},\ \text{你好}]\),某封邮件里这些词分别出现 \(3,1,0,0,2\) 次,那么这封邮件就是向量 \([3,1,0,0,2]\)。垃圾邮件分类器看到的就是这一串数。
- 一张 28×28 灰度图 → 784 维向量。MNIST 手写数字数据集里每张图有 \(28\times28=784\) 个像素,每个像素是一个 0–255 的灰度值。把这些像素按行展平(flatten)排成一长列,就得到一个 784 维向量 \(x\in\mathbb{R}^{784}\)。这张"图"对模型而言不过是 784 个数。
- 一个词 → 词嵌入 word embedding。在现代语言模型里,"国王"这个词被表示成一个比如 300 维的向量。语义相近的词,向量在空间中也靠得近。
- 一组模型权重 → 参数向量。一个有一百万个参数的模型,它的全部"知识"就是一个一百万维的向量;训练就是在这个高维空间里挪动这个点。
记住这句话:一个样本 = 一个向量;一个特征维度 = 向量的一个坐标分量。从此"数据集"在你脑中应该变成"一堆点"或"一摞向量"。本课所有内容,都是在为"如何度量、组合、变换这些点"打地基。
2. 向量的三种视角:同一个对象,三种语言
同一个向量,可以用三种完全不同的语言来说,它们指的是同一个东西。以二维向量 \(v=[3,2]\) 为例:
| 视角 | 长什么样 | 什么时候最好用 |
|---|---|---|
| 数据行 data row | 表格里的一行:身高=3, 体重=2 | 处理数据集时——这正是 pandas / NumPy 里的一行 |
| 几何箭头 arrow | 从原点 \((0,0)\) 指向 \((3,2)\) 的有向箭头 | 想理解方向、长度、相似度、变换时 |
| 坐标列 column | \(\begin{bmatrix}3\\2\end{bmatrix}\),竖排的数 | 做矩阵运算、写权重 \(w\) 时 |
三者可以自由切换:数据行强调"它是一条记录",几何箭头强调"它有方向和长度",坐标列强调"它能参与代数运算"。会切换视角,是学好线性代数的核心技能——很多看起来难的问题,换个视角就一目了然。
记号约定:向量用粗体或带箭头表示,本课写作 \(v=[v_1, v_2, \dots, v_n]\),其中 \(n\) 是维度 dimension。习惯上向量默认是"列向量",写成一行只是为了排版方便;后面我们会看到,把列向量"转置"成行,正好用来写点积。
ML 和 ML 的联系
这三种视角在代码和模型里天天出现:数据行视角对应 df.iloc[0] 取出的一行样本;坐标列视角对应神经网络里的权重列向量 \(w\);几何箭头视角对应词嵌入在语义空间里的位置——"猫"和"狗"的箭头方向相近,"猫"和"火箭"则相差很远。同一份数据,工程时当它是行,建模时当它是列,理解时当它是箭头。
3. 向量的长度、加法与数乘
向量的长度:范数 norm
在做加法、数乘之前,先把一个最基础的量讲清楚:向量有多"长"。一个向量的长度叫作它的范数 norm,记作 \(\|v\|\)。在二维里,它就是从原点到箭头尖的距离,由勾股定理给出:
\[ \|[a_1,a_2]\|=\sqrt{a_1^2+a_2^2} \]推广到 \(n\) 维,就是把所有分量平方求和再开根号:
\[ \|a\|=\sqrt{a_1^2+a_2^2+\cdots+a_n^2}=\sqrt{\sum_{i=1}^{n} a_i^2} \]例如 \(\|[3,4]\|=\sqrt{3^2+4^2}=\sqrt{25}=5\)。范数衡量的就是"这个箭头有多长",后面讲数乘的伸缩、点积的几何定义、投影和余弦相似度时都要反复用到它,所以先把它放在最前面。
向量加法:尖尾相接 / 平行四边形
两个向量相加,代数上就是对应分量相加:
\[ a+b=[a_1,a_2]+[b_1,b_2]=[a_1+b_1,\ a_2+b_2] \]几何上有两种等价画法:
- 尖尾相接:把 \(b\) 的尾巴接到 \(a\) 的箭头尖上,从 \(a\) 的起点到 \(b\) 的终点画一支新箭头,就是 \(a+b\)。直觉是"先走 \(a\),再走 \(b\)"。
- 平行四边形法则 parallelogram rule:以 \(a\) 和 \(b\) 为相邻两边作平行四边形,对角线就是 \(a+b\)。这强调加法的对称性:\(a+b=b+a\)。
数乘:沿方向伸缩或翻转
一个数(标量 scalar)\(c\) 乘以向量,就是把每个分量都乘以 \(c\):
\[ c\,a=[c\,a_1,\ c\,a_2] \]几何意义非常直观(这里"长度翻倍/减半"指的就是上面讲的范数 \(\|a\|\)):
- \(c>1\):沿原方向拉长(如 \(2a\) 长度翻倍,方向不变)。
- \(c=1\):原封不动,\(1\cdot a=a\)。
- \(0
缩短。 - \(c=0\):得到零向量 zero vector \(\mathbf{0}=[0,0]\)——长度为 0、落在原点的特殊向量。
- \(c<0\):翻转方向,再按 \(|c|\) 缩放(如 \(-0.5a\) 反向且长度减半)。
留意 \(c=0\) 这一档:任何向量乘以 \(0\) 都得到零向量(原点)。更一般地,把一组向量的线性组合系数全取为 \(0\),结果也是零向量。这件小事在下一节很关键——它意味着用一组向量"搭"出来的所有点(它们的 span)必然包含原点,所以我们后面才会反复说"过原点的直线/平面"。
ML 和 ML 的联系
数乘 = 参数更新的一步。梯度下降里,参数更新写作 \(w \leftarrow w - \eta\,\nabla L\),其中 \(\eta\) 是学习率 learning rate(一个标量),\(\nabla L\) 是梯度(一个向量)。\(\eta\,\nabla L\) 就是数乘——决定这一步沿梯度方向迈多大。
加法 = 嵌入相加。Transformer 里,每个 token 的表示 = 词嵌入 + 位置编码(position embedding),两个向量逐分量相加,既保留"是什么词"又注入"在第几个位置"。
4. 线性组合、张成 span 与基 basis
有了加法和数乘,就能做线性组合 linear combination——这是整门线性代数最核心的操作。给定向量 \(v_1,v_2,\dots,v_k\) 和标量 \(c_1,c_2,\dots,c_k\),下式就是一个线性组合:
\[ c_1 v_1 + c_2 v_2 + \cdots + c_k v_k \]当 \(c_i\) 取遍所有可能的实数时,所有能"搭"出来的向量构成的集合,叫作这组向量的张成 span。(回忆上一节:当所有 \(c_i=0\) 时得到零向量,所以任何 span 都包含原点。)
二维直觉:两个不共线向量张成整个平面
取两个标准向量 \(e_1=[1,0]\) 和 \(e_2=[0,1]\)。任何二维向量 \([x,y]\) 都能写成 \(x\,e_1+y\,e_2\)。所以 \(\{e_1,e_2\}\) 的 span 就是整个平面 \(\mathbb{R}^2\)。其实只要两个向量不共线(不指向同一条直线),它们就能张成整个平面。
反过来,如果两个向量共线,比如 \([1,2]\) 和 \([2,4]\)(后者是前者的 2 倍),那它们的所有线性组合都落在同一条过原点的直线上——span 只是一条直线,覆盖不了整个平面。这种"一个能被另一个表示出来"的情形叫线性相关 linearly dependent;反之,谁也表示不了谁,叫线性无关 linearly independent。
一组线性无关且能张成整个空间的向量,就叫这个空间的一组基 basis。基是空间的"最小骨架":二维平面的基恰好需要 2 个向量,多了冗余,少了不够。基里向量的个数,就是空间的维度 dimension。
这里正好把第 2 节的"维度"和这里的"维度"打通:第 2 节说维度是分量个数 \(n\),这里说维度是基向量个数——两者一致,正是因为标准基 \(e_1,\dots,e_n\) 恰好有 \(n\) 个向量。还有一个关键直觉:基不是唯一的。同一个平面有无穷多组基(任意两个不共线的向量都能当基),"换一组基"本质上就是"换一个坐标系"——这正是下一课矩阵变换、以及 PCA 选主轴的出发点。
要点
- 线性组合:用加法和数乘把一组向量"搭"成新向量。
- span:所有能搭出来的向量的集合(一条线、一个面、或更高维空间),必过原点。
- 线性无关:组里没有哪个向量是其他向量的线性组合(没有冗余)。
- 基 basis:线性无关 + 张成全空间;基向量个数 = 维度;同一空间的基不唯一。
ML 和 ML 的联系
神经元输出就是线性组合。单个神经元先算 \(w^\top x = w_1x_1+w_2x_2+\cdots+w_nx_n\),这正是输入特征以权重为系数的线性组合。
嵌入空间的类比。著名现象"国王 − 男人 + 女人 ≈ 王后"——一个概念可以由已知向量线性组合得到,这正是 span 思想的体现。需要提醒的是:这种漂亮的线性结构在词向量中常被观察到,但并非处处成立,近年研究也指出它部分依赖具体的训练和后处理方式,不必把它当成铁律。理解 span,能帮你理解为什么模型有时能"组合"出训练中没直接见过的概念。
5. 点积的两副面孔
点积 dot product(又叫内积 inner product)是机器学习里出现频率最高的运算,几乎没有之一。它有两个等价的定义。
代数定义
\[ a\cdot b=\sum_{i=1}^{n} a_i b_i = a_1b_1+a_2b_2+\cdots+a_nb_n \]把对应分量相乘再求和,得到一个数(标量)。
记号小桥:\(w^\top x\) 是什么?
ML 文献里点积常写成 \(w^\top x\)。这里的 \(^\top\) 是转置 transpose,意思就是"行列互换":把列向量 \(w\) 转置成一行,再与列向量 \(x\) 逐分量相乘求和。所以 \(w^\top x\)、\(w\cdot x\)、\(\sum_i w_i x_i\) 是同一个数,只是写法不同。下面 ML 框里出现的 \(q^\top k\) 同理。
你只需要知道的三角
下面的几何定义会用到夹角 \(\theta\) 和 \(\cos\theta\)。不熟三角也没关系,你只需要记住 \(\cos\theta\) 衡量"两个方向有多接近",并记牢三个锚点:
- 夹角 \(0^\circ\)(同向):\(\cos 0^\circ=1\)(最接近)。
- 夹角 \(90^\circ\)(垂直):\(\cos 90^\circ=0\)(互不相干)。
- 夹角 \(180^\circ\)(反向):\(\cos 180^\circ=-1\)(最相反)。
角度从 \(0^\circ\) 增大到 \(180^\circ\),\(\cos\theta\) 就从 \(1\) 平滑地下降到 \(-1\)。直角三角形里"邻边比斜边"就是 \(\cos\),这点直觉足够支撑本课所有内容。
几何定义
\[ a\cdot b=\|a\|\,\|b\|\cos\theta \]其中 \(\|a\|=\sqrt{a\cdot a}=\sqrt{\sum_i a_i^2}\) 就是第 3 节讲过的范数(长度),\(\theta\) 是两向量之间的夹角。这个定义告诉我们:点积衡量的是"两个向量有多大程度指向同一个方向"。
- 方向相同(\(\theta=0,\ \cos\theta=1\)):点积最大、为正。
- 垂直(\(\theta=90^\circ,\ \cos\theta=0\)):点积为 0——这正是正交 orthogonal的定义。
- 方向相反(\(\theta=180^\circ,\ \cos\theta=-1\)):点积为负。
两个定义为什么等价? 这里给一个直觉版理由,不是严格证明。我们先承认一个事实:点积只跟两个向量的长度和夹角有关,与坐标系怎么摆放无关(即点积在旋转坐标系下不变)。既然如此,我们干脆把坐标轴转一下,让 \(a\) 正好躺在 \(x\) 轴上,于是 \(a=[\|a\|,\,0]\)。此时 \(b\) 与 \(x\) 轴的夹角正好是 \(\theta\),由直角三角形分解,它的水平分量是 \(\|b\|\cos\theta\)、竖直分量是 \(\|b\|\sin\theta\),即 \(b=[\|b\|\cos\theta,\ \|b\|\sin\theta]\)。代入代数定义:
\[ a\cdot b=\|a\|\cdot\|b\|\cos\theta+0\cdot\|b\|\sin\theta=\|a\|\,\|b\|\cos\theta \]两副面孔合二为一。(这里"旋转不变性"被当作直觉前提,严格证明留待后面学了正交矩阵再补。)
易错
点积的结果是一个标量,不是向量!\(a\cdot b\) 算完是一个数。另外别把点积和"逐分量相乘"混为一谈——逐分量相乘 \([a_1b_1, a_2b_2]\) 仍是向量(NumPy 里是 a*b),而点积要再求和(a@b 或 np.dot)。
ML 和 ML 的联系
点积是 ML 计算的"基本粒子":单个神经元的加权和 \(w^\top x\) 是点积;Transformer 注意力机制里 query 和 key 的打分 \(q^\top k\) 是点积;线性回归的预测 \(\hat y=w^\top x\) 是点积。当你看到矩阵乘法时,记住它无非是大量点积的批量打包。
6. 从点积到投影、夹角与余弦相似度
投影:标量投影与投影向量
把 \(b\) 投影到 \(a\) 的方向上,先看标量投影 scalar projection——也就是 \(b\) 在 \(a\) 方向上的"影子"长度(带符号):
\[ \text{标量投影}=\|b\|\cos\theta=\frac{a\cdot b}{\|a\|} \]它回答的问题是:"沿着 \(a\) 这个方向看,\(b\) 有多大成分?" 注意这个值可正可负:当夹角 \(\theta>90^\circ\)(\(\cos\theta<0\))时它为负,负号表示投影落在 \(a\) 的反方向,并不是"长度为负"。
很多场景(最小二乘、正交分解、PCA)真正要的是投影向量 projection vector——\(b\) 沿 \(a\) 方向的那个分量向量,它把上面的标量再乘回 \(a\) 的单位方向:
\[ \operatorname{proj}_a(b)=\frac{a\cdot b}{\|a\|^2}\,a=\frac{a\cdot b}{a\cdot a}\,a \]几何上,\(\operatorname{proj}_a(b)\) 就是把 \(b\) 投到 \(a\) 所在直线上得到的那支箭头;\(b\) 减去它,剩下的部分恰好与 \(a\) 正交——这就是"正交分解"的雏形,后面 PCA、最小二乘都是它的放大版。
夹角与余弦相似度
把几何定义反解出 \(\cos\theta\),就得到余弦相似度 cosine similarity:
\[ \cos\theta=\frac{a\cdot b}{\|a\|\,\|b\|} =\frac{\sum_i a_i b_i}{\sqrt{\sum_i a_i^2}\,\sqrt{\sum_i b_i^2}} \]它的取值范围是 \([-1, 1]\),含义是"两个向量方向有多接近",与长度无关——这是它相比裸点积的关键优势:只比方向,不比大小。
- \(\cos\theta\approx 1\):几乎同向 → 高度相似。
- \(\cos\theta\approx 0\):接近正交 → 基本不相关。
- \(\cos\theta\approx -1\):几乎反向 → 强烈相反。
ML 和 ML 的联系
余弦相似度是语义检索的引擎。把每个文档/句子编码成嵌入向量后,要找"和查询最相关的内容",就是找与 query 向量夹角最小(余弦相似度最大)的那些向量。这正是 RAG(检索增强生成)召回、语义搜索、"猜你喜欢"推荐相似商品背后的核心计算。用余弦而非欧氏距离,是因为我们关心"主题方向"而非"向量大小"——一篇长文和一篇短文只要主题一致,方向就该接近。
例题
例题 1:向量的和、范数与点积
设 \(a=[3,4]\),\(b=[4,3]\)。
(1) 求 \(a+b\):
\[a+b=[3+4,\ 4+3]=[7,\ 7]\](2) 求范数:
\[\|a\|=\sqrt{3^2+4^2}=\sqrt{9+16}=\sqrt{25}=5\] \[\|b\|=\sqrt{4^2+3^2}=\sqrt{16+9}=\sqrt{25}=5\](3) 求点积(代数定义):
\[a\cdot b=3\times4+4\times3=12+12=24\]例题 2:夹角的余弦(接例题 1)
用余弦相似度公式计算 \(a=[3,4]\) 与 \(b=[4,3]\) 的夹角余弦:
\[ \cos\theta=\frac{a\cdot b}{\|a\|\,\|b\|}=\frac{24}{5\times5}=\frac{24}{25}=0.96 \]所以 \(\theta=\arccos(0.96)\approx 16.26^\circ\)。两个向量方向相当接近,余弦相似度 \(0.96\),说明高度相似。
验证两副面孔等价:几何定义应给出 \(\|a\|\|b\|\cos\theta=5\times5\times0.96=24\),与代数定义算出的点积 \(24\) 完全一致。
例题 3:正交与反向(体会余弦的三种情形)
设 \(u=[1,0]\),\(v=[0,1]\),\(w=[-1,0]\)。
- \(u\cdot v=1\times0+0\times1=0\),故 \(\cos\theta=0\),二者正交(夹角 \(90^\circ\)),不相关。
- \(u\cdot w=1\times(-1)+0\times0=-1\),而 \(\|u\|=\|w\|=1\),故 \(\cos\theta=-1\),二者完全反向(夹角 \(180^\circ\))。
调一调,观察现象
下面三个小实验都只用 numpy 和 print,几秒就能跑完。建议你先猜结果,再运行对照——"猜错"的地方往往就是直觉需要修正的地方。
实验 1:数乘只缩放长度,方向感由符号决定
改什么:把同一个向量 \(a=[3,4]\) 分别乘以 \(2、0.5、-1、0\)。
预期看到:范数依次变成 \(10、2.5、5、0\)(即原长 \(5\) 的 \(2、0.5、1、0\) 倍);\(-1\) 那档长度没变但每个分量都翻了号(变成 \([-3,-4]\)),\(0\) 那档变成零向量。
为什么:数乘 \(c\,a\) 把范数缩放 \(|c|\) 倍,所以 \(c=-1\) 长度不变、只是反向;\(c=0\) 把向量压到原点。
import numpy as np
a = np.array([3.0, 4.0])
for c in [2, 0.5, -1, 0]:
v = c * a
print("c=", c, "vec=", v, "norm=", np.linalg.norm(v))
# norm 依次: 10.0, 2.5, 5.0, 0.0 (= 原长5 的 2,0.5,1,0 倍)
# vec 依次: [6. 8.], [1.5 2.], [-3. -4.], [0. 0.]
实验 2:转动第二个向量,看点积如何从正穿过零再变负
改什么:固定 \(u=[1,0]\),让 \(v\) 依次取同向、垂直、钝角、反向四种方向。
预期看到:夹角依次约 \(0^\circ、90^\circ、135^\circ、180^\circ\),余弦依次约 \(1、0、-0.707、-1\),点积符号跟着由正 → 零 → 负。
为什么:点积 \(=\|u\|\|v\|\cos\theta\),符号完全由 \(\cos\theta\) 决定——垂直时点积恰为 \(0\)(正交),这正是课文里的三个锚点。
import numpy as np
u = np.array([1.0, 0.0])
for v in [[1,0], [0,1], [-1,1], [-1,0]]:
v = np.array(v, float)
d = u @ v
cos = d / (np.linalg.norm(u) * np.linalg.norm(v))
deg = np.degrees(np.arccos(np.clip(cos, -1, 1)))
print("v=", v, "dot=", d, "cos=", round(cos,3), "deg=", round(deg,1))
# dot: 1.0, 0.0, -1.0, -1.0 ; cos: 1.0, 0.0, -0.707, -1.0 ; deg: 0, 90, 135, 180
实验 3:共线就"塌成一条线"——用面积判 span
改什么:用 \(2\times2\) 行列式(= 两向量张成的平行四边形带符号面积)判断三组向量。
预期看到:\(\{[1,0],[0,1]\}\) 行列式 \(=1\),\(\{[2,1],[4,2]\}\) 行列式 \(=0\),\(\{[1,1],[1,-1]\}\) 行列式 \(=-2\)。
为什么:行列式为 \(0\) 说明面积塌没了、两向量共线,span 只是一条过原点的直线;非 \(0\) 则不共线,张成整个平面。(行列式的正负号只反映两向量的左右次序,判 span 只看它是不是 \(0\)。)
import numpy as np
sets = {
"e1,e2": ([1,0], [0,1]),
"collinear":([2,1], [4,2]),
"indep": ([1,1], [1,-1]),
}
for name, (p, q) in sets.items():
M = np.array([p, q], float).T # 两向量作为列
print(name, "det=", round(np.linalg.det(M), 3))
# det: 1.0(平面), 0.0(直线), -2.0(平面)
动手练习
- 手算热身:设 \(a=[1,2,2]\),\(b=[2,2,1]\)。手算 \(a+b\)、\(\|a\|\)、\(\|b\|\)、\(a\cdot b\) 与 \(\cos\theta\)。(提示:\(\|a\|=3\),\(a\cdot b=8\),\(\cos\theta=8/9\approx0.889\)。)
- 三视角切换:把向量 \([5,-2]\) 分别写成"数据表里的一行"、"坐标列",并用一句话描述它作为几何箭头的方向(指向第几象限)。
- span 判断:判断下面每组向量张成什么——是一条直线还是整个平面?(a) \([1,0]\) 与 \([0,1]\);(b) \([2,1]\) 与 \([4,2]\);(c) \([1,1]\) 与 \([1,-1]\)。(提示:判断共线的代数判据是"是否存在常数 \(k\) 使一个向量等于另一个的 \(k\) 倍"——存在则共线,span 是直线;不存在则不共线,span 是整个平面。)
- 进阶:高维与"必相关":(a) 判断三维向量 \([1,2,3]\) 与 \([2,4,6]\) 是否共线(提示:找有没有公共倍数 \(k\))。(b) 给定三个二维向量 \([1,0]\)、\([0,1]\)、\([1,1]\),它们的 span 是什么?想一想:在二维平面里,三个向量为什么必然线性相关(总有一个能被另外两个表示出来)?
- NumPy 小实验:补全下面的代码骨架,用 NumPy 计算范数、点积、夹角与余弦相似度,并验证它和你手算的结果一致。
import numpy as np
# 构造两个向量
a = np.array([3.0, 4.0])
b = np.array([4.0, 3.0])
# 1) 向量加法与数乘
print("a + b =", a + b) # 期望 [7. 7.]
print("2 * a =", 2 * a) # 期望 [6. 8.]
print("-0.5 * a =", -0.5 * a) # 期望 [-1.5 -2.]
print("0 * a =", 0 * a) # 期望 [0. 0.] 零向量,落在原点
# 2) 范数(L2 长度)
norm_a = np.linalg.norm(a)
norm_b = np.linalg.norm(b)
print("||a|| =", norm_a, " ||b|| =", norm_b) # 期望 5.0 5.0
# 3) 点积:以下三种写法等价
dot1 = np.dot(a, b)
dot2 = a @ b
dot3 = np.sum(a * b) # 注意 a*b 是逐分量相乘,再求和
print("dot =", dot1, dot2, dot3) # 期望 24.0
# 4) 余弦相似度与夹角
cos_sim = (a @ b) / (norm_a * norm_b)
theta_rad = np.arccos(np.clip(cos_sim, -1.0, 1.0))
print("cosine similarity =", cos_sim) # 期望 0.96
print("angle (deg) =", np.degrees(theta_rad))# 期望 ~16.26
# 5) 动手:换成你自己的两个向量,验证手算结果
# c = np.array([...]); d = np.array([...])
# ...
掌握自检
- 我能用一句话说清楚:为什么数据点、特征、嵌入、模型权重本质都是向量,并各举一个真实例子。
- 给我一个向量,我能在"数据行 / 几何箭头 / 坐标列"三种视角间自由切换,并说出每种视角各自适合的场景。
- 我能用勾股定理写出范数 \(\|a\|=\sqrt{\sum a_i^2}\),用平行四边形法则解释加法、用沿轴缩放解释数乘,并预测 \(2a\)、\(-0.5a\)、\(0\cdot a\) 的方向与长度。
- 我能判断两个向量张成的是一条直线还是整个平面,能解释 span(为何必过原点)、基 basis(为何不唯一)、线性相关/无关的区别,并说清两套"维度"定义为何一致。
- 我能同时用 \(\sum a_i b_i\) 和 \(\|a\|\|b\|\cos\theta\) 算出点积,知道 \(w^\top x\) 与 \(a\cdot b\) 是一回事,并能解释二者为何等价(含承认旋转不变性这一前提)。
- 我能从点积推出标量投影与投影向量,区分二者,并说明余弦相似度为什么是语义检索/RAG 的核心。
- 我能用 NumPy 算出范数、点积、夹角和余弦相似度,并验证它与手算一致。
要点:小结与下一课预告
本课我们确立了 ML 的"原子"——向量,掌握了三种视角、范数(长度)、加法与数乘的几何(含零向量)、线性组合 / span / 基这套地基,以及点积的两副面孔和由它衍生的投影与余弦相似度。下一课:矩阵 = 线性变换。如果说向量是空间里的"点",那么矩阵就是"移动整个空间的动作"——旋转、拉伸、投影。我们会看到,"换一组基 = 换坐标系"如何用矩阵表达,以及神经网络的每一层,本质上就是一次"矩阵变换 + 非线性"。
可以先放过的点
- 点积"两副面孔为何等价"那段旋转不变性的推导,现在只要记住"代数版 = 几何版、结果是同一个数"就够了,等下一课《矩阵即线性变换》学了正交矩阵,再回来补严格证明。
- 投影向量 \(\operatorname{proj}_a(b)\) 和"正交分解"暂时不必吃透,它真正发力是在后面 PCA 和最小二乘那几课,到时你会反复用到它。
- "基不唯一 = 换坐标系"这句话现在听个直觉印象即可,下一课用矩阵表达"换一组基"时它会突然变得很具体。
- 词向量"国王 − 男人 + 女人 ≈ 王后"这种线性结构,知道它体现了 span 思想就好,别纠结它为什么不总成立,那是研究层面的细节。