经典机器学习可视化

经典机器学习中的计算规模较小,适合逐步核对。两个向量做点积得到一个分数,多个分数形成预测,平面上的边界决定类别。本组课程展示这些运算,以及它们在深层网络中保留的性质。

点积也是 Transformer 反复执行的基本操作;逐类打分再取最大值,也是许多图像分类器输出层的规则。维度和计算量会增加,基本机制仍可从小例子理解。

课程内容

课程观察内容
向量与点积逐项乘加如何对应直线上的投影,夹角如何决定符号
矩阵乘法A 的一行与 B 的一列对准它们算出的格子,同样两个矩阵换个顺序得到形状不同的表
线性分类器三个评分函数划分凸区域,以及无法表示分离岛屿类别的原因
k 近邻在距离排序中移动 k 的截点,同一查询在 k = 1 和 k = 3 时改判
决策树按信息增益选择轴对齐切分,增加一层深度后为噪声点划出独立区域
支持向量机找到最宽间隔,十二个点中只有三个决定边界
线性回归残差平方变成面积,一次汇总计算拟合,一处离群点拉动结果
逻辑回归分数经 sigmoid 变为概率,(w, b) 翻倍而边界不变,交叉熵判断更强置信度是否有利
K-Means 聚类无标签点形成分组,目标值不增,相同数据从不同初值收敛到 28.80 或 133.10
主成分分析捕获方差与丢弃误差组成固定总量,方向和单位如何改变表示
朴素贝叶斯各词的固定因子累积到对数赔率,重复同一词两次使赔率放大约 13.6 倍

建议学习顺序

从点积到分类边界

先学向量与点积:对应分量相乘再相加。固定夹角并拉长向量,分数按比例变化;固定长度并旋转,分数沿余弦从最大值经过零到最小值。零点说明为什么 w·x = 0 可以定义边界。

矩阵乘法把这个循环扩展成一张表。C = AB 的每个格子是一次点积:A 的第 i 行对 B 的第 j 列。课程把三个矩阵摆成行与列恰好在结果格子处交叉的样子,由此解释形状规则(点积需要两个等长列表,所以内侧维度必须相等)和代价(m·n·p 次乘法)。随后 A 和 B 交换位置:默认输入下 AB 是 2×2、12 次乘法,BA 是 3×3、18 次乘法,顺序本身就是问题的一部分。神经网络的一层就是这个乘积:输入作为行,权重向量作为列。

线性分类器对每个类别执行一次点积,再由 argmax 选出最大分数。边界从“一个分数等于零”变成“两个分数相等”,平面分成凸区域。旋转一个权重行会转动对应区域,改变偏置会平移边界。失败数据把同一类别放在两个岛屿,中间夹着其他类别;单个凸区域无法正确容纳这种布局。

k 近邻提供另一种方式。线性分类器把信息压进参数矩阵,预测时不必保留全部样本;本课 kNN 保存每个点,查询到来后才计算距离并排序。调节 k 只是在同一排序中改变截点,不必重算距离。islands 数据在线性模型中无法分开,kNN 用三票可以解决,但 k = 13 又会失败:这里的限制来自投票规模。k = 1 对存储点达到 100%,却在一个错标点周围形成错误预测的小岛,展示记忆训练数据与泛化的差别。

学习树和间隔

决策树在动画中构建模型。每个节点检查全部候选轴对齐切分,按减少的熵评分,保留最大信息增益,再递归处理两边。矩形决策图由这些问题导出。线性分类器无法解决的双岛数据,在这里用两次贪心切分即可处理;反过来,一条斜线可分的数据需要阶梯式切分,深度 3 时仍会出错。噪声实验中,深度 2 接受一个错分点,深度 3 为它分出专属区域,训练误差归零,却是在拟合噪声。

支持向量机在可分数据的众多正确边界之间选择最宽间隔。固定方向,把不包含样本的带状区域扩到碰到点,宽度就是该方向的得分,再比较方向。

实验把一个 α = 0 的点移动七个单位,重新求解后结果逐位相同;把一个支持向量从间隔边界向外移两个单位,间隔变宽并旋转,另一点成为支持向量。十二点中,三个点决定模型。失败场景把一个样本放入间隔,数据仍可分,间隔却从 2.83 缩为 0.71。软间隔降低违例惩罚后,允许一次有意的误分,换回更宽间隔。

从平方误差到概率

线性回归把目标改为数值拟合。残差上画出的正方形让“最小化平方误差”变成“减小总面积”。本例用汇总和计算斜率,再用均值点确定截距,无需搜索。把一个点移离趋势后,同一个最优公式会让直线偏离另外八点。这是平方损失对大残差的惩罚产生的结果。

逻辑回归连接边界和损失。分数 z = w·x + b 经 sigmoid 变为概率。固定方向比例,把 (w, b) 同时翻倍,决策边界不动,不确定带宽减半。存在一个落在错误一侧的点时,总交叉熵反而上升,因为自信的错误会付出不断增大的损失;在本例的可分数据上,继续放大权重仍能降低损失,权重趋向无穷。这个缩放实验区分了决定哪一类和置信度多强两个方面,损失的变化反映后者。

没有标签时优化什么

K-Means 聚类去掉类别标签,用分组内平方距离衡量紧凑程度。交替执行:每点归入最近质心,质心移到成员均值。两步都不会增加目标值;本例以一轮后的状态不再变化作为停止条件,没有容差或轮次预算。

收敛不保证找到最好分组。同样十五个点和相同 k,从两个初值分别停在惯性 28.80 和 133.10;差的结果把左侧两团合并,又把右团拆开。枚举从点中选三个初始中心的全部 455 种方式,332 种得到好结果,123 种没有,单次运行自身无法说明属于哪种。k = 4 会拆开真实群组,目标值却更低,因此惯性不能单独选择 k。同心圆环则受形状限制:质心的 Voronoi 区域由直线边界划分,不能表示完整环状分组,换初值也解决不了。

主成分分析(PCA)把问题改为用更少的数表示数据。数据居中后,任意方向上的投影方差与垂直方向的重建误差之和都是固定总量。由直角三角形的关系可知,捕获最多方差等价于最小化平方重建误差。

直接删掉一列只保留 63.75% 方差,典型偏差为 2.30 cm。扫描九个方向,固定总条形图中的两部分此消彼长。精确解来自 2 × 2 矩阵的最大特征值对应特征向量:方向为 36.16°,保留 95.26%。九个采样方向夹住了答案,却没有命中它,说明解析求解的价值。

两个失败场景不同。把第二特征从厘米换成毫米,解释方差升到 99.67%,第一主成分却几乎只表示“毫米单位的宽度”。统一标准化到单位方差后,单独改变测量单位不再影响结果。另一个场景有来自两个真实群组的十二个样本:PC1 保留 86.91% 方差,却把两组完全重叠,丢弃的 13.09% 恰好承担分组信息。PCA 不读取标签,方差不能代替任务相关信息。

词如何累积为判断

朴素贝叶斯是这组分类课程中的生成式模型。它问每个类别产生这篇文档的可能性,按词相乘,再选更大的类别分数。本课只有八封训练邮件、二十三个词,一次计数即可检查。对数赔率轴把乘法变成固定距离的移动:free 用 ×2.46 推向垃圾邮件,meeting 用 ×0.41 推回正常邮件,最后的乘积决定分类。

“朴素”的代价是把词的证据当成条件独立。再加入两次最强词,赔率从 5.47 : 1 变为 74.28 : 1,增加约 13.6 倍,尽管新词与已计数的词完全重复。argmax 分类不变,置信程度却变了。单词与包含它的词组、主题行重复正文等相关信息也会遇到相同问题,因此这里的概率更适合用作排序,不能直接当成校准良好的置信度。

关闭平滑后,一个类别从未见过的词会让乘积归零。默认邮件在两类中都遇到这种词,argmax 只能比较 −∞ 与 −∞。平滑调到 5 时,每类引入 115 个伪计数,压过 32 个真实词元,使判断趋近抛硬币。

这些课程解释模型计算什么、优化什么。接下来可学习梯度方法:梯度下降决定参数调整方向,反向传播计算各权重的梯度,训练循环反复执行更新。K-Means 用均值直接更新质心;梯度下降则不直接求解,只沿斜率逐步下降,该课用单参数的碗形曲线演示,而不是线性回归的直线。感知机则学习线性分类器课程中预先给出的那类边界。

全部经典机器学习可视化课程

选择课程,修改输入,逐步执行,检查代码高亮与图形变化是否对应。