Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

1.4.1 回归与分类基本问题设置

学习导航

  • 本章主题:1.4.1 回归与分类基本问题设置
  • 前置知识:高中/本科数学基础(线代、概率、微积分)。
  • 建议用时:102-122 分钟
  • 阅读顺序:先看概念框架,再看公式/代码,最后做自测。

在具身智能场景中,“模型”最常干两件事: 预测一个数值(如机械臂末端未来 0.1s 的位移),或预测一个类别(如“这次抓取会不会成功”)。前者是回归,后者是分类。这两类问题构成了监督学习的根基。


1.4.1.1 回归问题

定义与形式化

回归问题中,目标是从输入特征 \(\mathbf{x}\in\mathbb{R}^d\) 预测一个或多个连续实数输出 \(y\in\mathbb{R}\) 或 \(\mathbb{R}^k\):

\[ f_\theta: \mathbf{x} \mapsto \hat{y} \]

其中 \(\theta\) 是模型参数(例如线性回归中的权重向量)。损失函数常用均方误差(MSE)

\[ \mathcal{L}(\theta)=\frac{1}{N}\sum_{i=1}^N (\hat{y}_i - y_i)^2 \]

通过最小化损失来学习参数。

典型例子

  • 预测机器人末端执行器在下一时刻的位姿偏移量(连续 3D 坐标与角度)。
  • 预测接触力、扭矩、滑动速度等物理量。
  • 预测电机温度、能耗等运行指标。

与具身智能的关系

在具身智能中,回归通常用于:

+动力学建模:根据当前状态和控制输入预测下一个状态(状态转移模型)。 +代价函数学习:用回归拟合“动作是否优良”的连续评分,为后续规划或强化学习服务。

【可插图:二维平面上一条拟合数据点的直线或曲线,展示回归模型拟合连续目标的直观图像。】


1.4.1.2 分类问题

定义与形式化

分类问题中,目标是预测一个离散标签

\[ f_\theta: \mathbf{x} \mapsto \hat{y},\quad \hat{y}\in\{1,2,\dots,C\} \]

通常模型先输出每个类别的概率\(\hat{p}_c = P(y=c|\mathbf{x})\),再取概率最大的类别作为预测。

典型例子

  • 场景识别:桌面是否“整理干净/未整理完”。
  • 抓取可行性:当前抓取姿态是“可抓取 / 不可抓取”。
  • 障碍物类型分类:行人 / 桌子 / 箱子 / 墙面等。

常用损失:交叉熵

对于单标签多分类,标准损失为交叉熵:

\[ \mathcal{L}(\theta)=-\frac{1}{N}\sum_{i=1}^N \sum_{c=1}^C \mathbf{1}(y_i=c)\log \hat{p}_{i,c} \]

与前面在深度学习章节中出现的交叉熵损失是一致的,只是这里强调其在一般分类问题中的意义。(Google for Developers)


1.4.1.3 输入特征与模型输出的关系

监督学习的基本设定

给定训练数据集 \(\mathcal{D}=\{(\mathbf{x}_i,y_i)\}_{i=1}^N\),我们假设存在某个未知的“真实函数”:

\[ y = f^*(\mathbf{x}) + \epsilon \]

其中 \(\epsilon\) 是噪声或未建模因素。模型的目标就是在一个预先选好的“假设空间”(例如线性函数、决策树、神经网络等)内,找到一个 \(f_\theta\) 尽量逼近 \(f^*\)。

  • 输入 \(\mathbf{x}\) 称为特征:可以是原始传感器读数(图像像素、关节角度),也可以是经过预处理的高层特征(PCA 主成分、CNN 的特征向量等)。
  • 输出 \(\displaystyle y\) 是我们关心的目标(回归中的数值,分类中的类别)。

经验风险最小化

大多数监督学习算法可以统一理解为经验风险最小化(ERM)

\[ \hat{\theta} = \arg\min_\theta \frac{1}{N}\sum_{i=1}^N \ell(f_\theta(\mathbf{x}_i), y_i) \]

其中 \(\ell(\cdot,\cdot)\) 是合适的损失函数(回归用 MSE,分类用交叉熵等)。(科学导向)

在具身智能场景中,这种“输入特征 \(\to\) 输出预测”的监督学习模块,往往嵌在更大系统中(如用于状态估计、成功预测),与后续的规划或强化学习协同工作。


1.4.2 过拟合、欠拟合与偏差–方差权衡

仅靠在训练集上“把损失压到很低”并不等于模型就好用。真正重要的是:在未见过的新数据上的表现——即泛化能力。(bmc.com)


1.4.2.1 过拟合

现象

  • 模型在训练集上的损失很低,准确率很高;
  • 但在验证集/测试集上表现显著变差。

这说明模型不仅学到了有用规律,还记住了训练数据中的噪声和偶然性模式。在机器人场景中,这常表现为:在实验台上训练得很好,换一个桌面或灯光条件就“智商骤降”。(Interview Coder)

典型原因

  • 模型过于复杂(参数太多、结构太灵活),相对训练数据量而言容量过大。
  • 训练轮数太多,在训练集上“磨”过头。
  • 特征维度远大于样本数,模型可以用复杂组合记住具体样本。

【可插图:横轴为模型复杂度,画出训练误差持续下降,而验证误差先下降后上升的两条曲线,说明过拟合区域。】


1.4.2.2 欠拟合

现象

  • 模型在训练集和测试集上表现都不好(误差都很大)。
  • 换用更复杂的模型或加入更多有用特征后,训练误差和测试误差都会明显下降。

这是因为模型过于简单,表达能力不足,无法捕捉数据内在规律,称为高偏差情形。(geeksforgeeks.org)

在具身智能中,例如你用一个简单的线性模型预测高度非线性的机械臂动力学,结果就是无论如何调参都拟合不好——典型欠拟合。


1.4.2.3 偏差–方差权衡

误差分解直觉

可以将预测误差(例如 MSE)拆成三部分: “不可约噪声 + 偏差² + 方差”,其中:(bmc.com)

+偏差(Bias):模型“平均”预测与真实函数 \(f^*\) 的系统性偏离,反映模型是否“想错了问题”。

  • 模型太简单 → 高偏差。 +方差(Variance):因训练数据不同(采样不同)导致模型预测波动的程度。
  • 模型太复杂 → 容易对数据的小扰动反应剧烈 → 高方差。

权衡

  • 提高模型复杂度:偏差下降,但方差上升(更容易过拟合)。
  • 降低模型复杂度:方差下降,但偏差上升(更容易欠拟合)。

目标是在某个适中复杂度处,使二者综合导致的测试误差最小。这就是偏差–方差权衡的核心。(compneuro.neuromatch.io)

【可插图:三条曲线——偏差²随模型复杂度单调下降,方差单调上升,总测试误差呈 U 形,最低点对应最优复杂度。】

在具身机器人中,这个权衡尤其关键:

  • 过于复杂的模型在真实机器人数据有限的情况下几乎必然过拟合;
  • 过于简单的模型又无法应对复杂接触动力学和视觉变化。

后续我们会通过正则化、早停、交叉验证等手段,在工程上实现这种权衡。


1.4.3 正则化(L1/L2)、早停与交叉验证

这一节可以理解为:如何在实践中与过拟合打“持久战”


1.4.3.1 L1/L2 正则化

基本思想

在经验风险最小化的目标函数中加入对参数大小的惩罚项,鼓励模型“更简单”、参数“更小”,从而降低方差、提升泛化能力。(Built In)

给定原始损失 \(\mathcal{L}_0(\theta)\),加正则化后变为:

\[ \mathcal{L}(\theta) = \mathcal{L}_0(\theta) + \lambda \Omega(\theta) \]

其中 \(\lambda\) 控制惩罚强度。

L2 正则化(Ridge)

\[ \Omega_{L2}(\theta) = |\theta|_2^2 = \sum_j \theta_j^2 \]

特点:

  • 倾向将所有参数“缩小”但不变为 0。
  • 对异常值更敏感。
  • 在许多线性模型、深度学习中非常常用(权重衰减)。(Medium)

L1 正则化(LASSO)

\[ \Omega_{L1}(\theta) = |\theta|_1 = \sum_j |\theta_j| \]

特点:

  • 更倾向把一部分参数直接压到 0,产生稀疏解,起到类似“自动特征选择”的作用。
  • 对异常值更鲁棒。(neptune.ai)

在机器人应用中,L1 可用于从大量传感器特征中“自动挑出更重要的一小部分”;L2 更适合作为通用的稳定化手段。

【可插图:二维参数空间中,L2 约束是圆,L1 约束是菱形,展示为什么 L1 更容易压出稀疏解(交点落在坐标轴上)。】


1.4.3.2 早停策略

早停(Early Stopping)是深度学习中最实用的“隐式正则化”之一,本质思想非常简单:

  1. 将数据分为训练集与验证集。
  2. 训练过程中监控验证集的损失或评价指标。
  3. 一旦发现验证性能在若干轮内不再提升,甚至开始变差,就停止训练,并回滚到验证集性能最好的那一轮的模型参数。(Interview Coder)

从偏差–方差的角度看:

  • 前期训练:模型偏差快速下降,方差还不高;
  • 后期训练:模型开始对训练集噪声“死磕”,方差明显上升,验证误差反而上升。

早停把学习过程“截断”在最佳点附近,相当于对参数大小施加了一种时间维度上的约束,可以视作一种正则化。

在具身机器人系统训练中,早停尤其常用,因为:

  • 真实数据很贵,不希望过拟合少量轨迹;
  • 训练时间长,多跑几轮意味着真实机器人磨损和风险增加。

1.4.3.3 交叉验证

核心目的:更可靠地评估模型与超参数

单次划分训练/验证集往往运气成分大。**交叉验证(Cross-Validation)**通过多次划分并平均结果,得到更稳健的性能估计。(RCAC)

K 折交叉验证(K-fold CV)

  1. 将数据随机划分为 K 个大小近似相等的子集。
  2. 每次选其中 1 折作为验证集,其余 K-1 折作为训练集,训练并评估模型。
  3. 循环 K 次,K 个验证结果取平均,作为这个模型/超参数的最终评价。

留一交叉验证(LOO CV)

  • 特殊情况:K = N,每次只留出 1 个样本做验证,其余 N-1 个样本训练。
  • 理论上偏差很小,但计算开销极大。

交叉验证常用于:

  • 比较不同模型(如线性回归 vs 带核的 SVM);
  • 搜索正则化系数 \(\lambda\)、核函数参数等超参数的“最佳组合”。

在具身智能项目中,由于收集到的数据往往结构复杂(多机器人、多任务),可以按任务或场景划分折,从而评估模型的任务泛化能力,而不仅仅是随机样本的泛化。

【可插图:把数据集切成 K 份的小块,依次轮流作为验证集的示意图。】


1.4.4 核方法与高维特征空间直觉

当数据在原始特征空间中非线性可分时,我们可以尝试将它映射到一个更高维的空间,使其线性可分,然后再在该空间里做线性模型。这就是核方法背后的核心直觉。(维基百科)


1.4.4.1 核技巧

假设有一个显式特征映射:

\[ \phi: \mathcal{X} \to \mathcal{H} \]

将原始输入 \(\mathbf{x}\) 映射到高维(甚至无限维)特征空间 \(\mathcal{H}\)。在该空间中,我们做的是线性模型,例如线性分类或线性回归。

问题在于:\(\phi(\mathbf{x})\) 可能极高维,显式计算代价巨大

核技巧(Kernel Trick)利用如下事实:许多线性算法只依赖于数据点之间的内积\(\phi(\mathbf{x}_i)^\top\phi(\mathbf{x}_j)\)。如果我们找到一个函数 \(\displaystyle K\) 使得:(维基百科)

\[ K(\mathbf{x}_i,\mathbf{x}_j) = \phi(\mathbf{x}_i)^\top\phi(\mathbf{x}_j) \]

那么就可以直接在原空间计算 \(K(\mathbf{x}_i,\mathbf{x}_j)\),而不必显式计算 \(\phi(\mathbf{x})\) 本身,从而“隐式地”在高维空间里做线性学习——这就是核技巧。

【可插图:左边是原空间中无法线性分开的红蓝点;右边是高维特征空间中被超平面分开的示意,中间标注“\(\phi(x)\)”与“\(K(x,x')\)”的关系。】


1.4.4.2 常见核函数

常用核函数包括:(维基百科)

1.线性核

\[ K(\mathbf{x},\mathbf{z}) = \mathbf{x}^\top\mathbf{z} \]

对应没有显式映射(\(\phi\) 为恒等映射),即普通线性模型。 2.多项式核(Polynomial Kernel)

\[ K(\mathbf{x},\mathbf{z}) = (\gamma \mathbf{x}^\top\mathbf{z} + r)^d \]

  • 参数 \(\displaystyle d\) 控制多项式次数,\(\displaystyle r\) 是偏置项,\(\gamma\) 控制尺度。
  • 对应在高维空间里包含各种单项式组合(如 \(x_1^2x_2\) 等)。 3.高斯核 / RBF 核(Radial Basis Function)

\[ K(\mathbf{x},\mathbf{z}) = \exp\left(-\frac{|\mathbf{x}-\mathbf{z}|^2}{2\sigma^2}\right) \]

  • \(\sigma\) 控制“影响范围”。
  • 对应于无限维特征空间,具有很强的非线性拟合能力。

在机器人具身智能中,核方法可以用于:

  • 在低维状态特征上构造非线性回归模型(如动力学、接触力预测);
  • 在有限训练数据下构建较强的非线性分类器(如“可抓取 vs 不可抓取”)。

1.4.4.3 支持向量机中的核方法

线性 SVM 回顾

支持向量机(SVM)是一类通过最大化分类间隔来获得鲁棒决策边界的监督学习方法,可用于分类与回归。其线性版在特征空间中学习一个超平面:(Particle Data Group)

\[ f(\mathbf{x}) = \text{sign}(\mathbf{w}^\top\mathbf{x} + b) \]

训练目标可以写成仅依赖于样本之间的内积 \(\mathbf{x}_i^\top\mathbf{x}_j\)。

核 SVM

将内积替换为核函数:

\[ \mathbf{x}_i^\top\mathbf{x}_j \quad \Rightarrow \quad K(\mathbf{x}_i,\mathbf{x}_j) \]

得到的就是核 SVM。它等价于:

  • 首先用 \(\phi\) 将数据映射到高维空间;
  • 然后在该空间里寻找最大间隔的线性超平面。

优点在于我们从未显式构建高维特征,只是通过核函数计算内积。(Cross Validated)

在具身智能早期研究中(尤其在深度学习尚未主导的时期),核 SVM 曾是处理中小规模机器人数据(如力觉分类、简单视觉识别)的经典选择。即使在深度学习时代,核方法仍为理解高维特征空间和相似度度量提供重要直觉基础。


1.4.5 评价指标(准确率、精确率、召回率、AUC 等)

训练好模型之后,需要用统一、可比较的评价指标量化其性能,尤其在类别不平衡、错误代价不对称的场景中,仅看“准确率”会非常误导。(Google for Developers)

我们先从二分类的混淆矩阵讲起。

混淆矩阵

以“正类 = 机器人成功抓取”的二分类为例,模型输出“抓取/不抓取”,与真实标签对比得到四种情况:

  • TP(True Positive):真实成功,预测也成功。
  • FN(False Negative):真实成功,但预测失败(错杀)。
  • FP(False Positive):真实失败,但预测成功(误报)。
  • TN(True Negative):真实失败,预测也失败。

所有衡量指标都可以用 TP, FP, TN, FN 表达。


1.4.5.1 准确率

定义

\[ \text{Accuracy} = \frac{TP + TN}{TP + TN + FP + FN} \]

即预测正确的样本占总样本的比例。(Google for Developers)

适用场景

  • 类别相对均衡,且正负样本的重要性相近。
  • 比如机器人在大量正常状态与异常状态中识别异常,其中两类比例相近时,可直接用准确率。

局限性

高度不平衡数据集上(如异常率 1%),模型只要“全部预测为负类”,准确率也能达到 99%——显然毫无实际意义。因此在具身智能的安全相关任务(异常检测、碰撞预测)中,准确率通常不足以单独使用。(Jinwoo’s Devlog)


1.4.5.2 精确率与召回率

精确率(Precision)

\[ \text{Precision} = \frac{TP}{TP + FP} \]

表示:模型预测为“正类”的样本中,有多少是真的正类。精确率高意味着误报少。(Google for Developers)

召回率(Recall)

\[ \text{Recall} = \frac{TP}{TP + FN} \]

表示:真实为正类的样本中,有多少被模型找出来。召回率高意味着漏报少。(Google for Developers)

在具身智能中的典型权衡:

  • 机器人抓取任务中,“抓空/掉落”带来中等损失,“误抓危险物体”带来巨大损失时,可能希望高精确率(预测要谨慎)。
  • 安全监控或异常检测任务中,更重要的是不要漏检危险情况,往往更关注高召回率

F1 分数(可简单提一下)

为了在单个数值中综合考虑精确率和召回率,可以使用 F1:

\[ F1 = 2\cdot\frac{\text{Precision}\cdot\text{Recall}}{\text{Precision}+\text{Recall}} \]

当精确率与召回率相近且都较高时,F1 也会高;两者有一者很低时,F1 会被拉低。(Google for Developers)


1.4.5.3 ROC 曲线与 AUC

许多分类模型(如逻辑回归、神经网络)并不是直接给出“正/负”标签,而是给出“属于正类的概率”或“得分”。我们通过设置一个阈值(例如 0.5)将概率转为类别。改变阈值就会改变 TP、FP、TN、FN,从而改变精确率与召回率。

ROC 曲线

ROC(Receiver Operating Characteristic)曲线以:(Jinwoo’s Devlog)

  • 横轴:假正例率

\[ \text{FPR} = \frac{FP}{FP + TN} \]

  • 纵轴:真正例率(也就是召回率)

\[ \text{TPR} = \frac{TP}{TP + FN} \]

为不同阈值下得到的一系列点连成的曲线。

直观理解:

  • 随着阈值从 1 降到 0,模型会把越来越多样本判为正类,TPR 和 FPR 都会增加。
  • 一个完美分类器的 ROC 曲线接近左上角(高 TPR,低 FPR)。
  • 完全随机的分类器 ROC 曲线接近对角线(TPR≈FPR)。

AUC(Area Under ROC Curve)

AUC 是 ROC 曲线下的面积,介于 0 和 1 之间:(Jinwoo’s Devlog)

  • AUC = 0.5:与随机猜测差不多。
  • AUC → 1:越接近完美分类器。

一个重要解释是:AUC 等于“随机抽取一个正样本和一个负样本时,模型给正样本的得分高于负样本的概率”。

在具身智能中的使用建议

  • 二分类任务(例如“当前姿态是否危险”、“当前轨迹是否会导致碰撞”)中,常用 ROC-AUC 来衡量模型区分正负样本的整体能力。
  • 当正负样本极度不平衡且我们更关心正类行为(如少数危险情况),PR 曲线(Precision-Recall Curve)及其面积 PR-AUC往往更敏感,也值得在后续深入任务时使用。(Jinwoo’s Devlog)

【可插图:展示一个典型的 ROC 曲线(良好模型曲线高于随机对角线),并标注 AUC 区域;可以附一个简单的 PR 曲线对比。】


到这里,1.4 节从“基本监督学习任务设定(回归和分类)”出发,讨论了模型复杂度与泛化的偏差–方差权衡,并引出了控制复杂度的工具(正则化、早停、交叉验证),以及用于评价模型好坏的一整套指标体系。 在后续深度学习章节中,这些概念会以更复杂的形式再次出现——但本节提供的直观图景将持续作为理解更高级方法的“坐标系”。

本章小结与自测

三行小结

  1. 本章提供后续全部模型章节的数学地基。
  2. 重点是把符号、公式和几何/概率直觉对应起来。
  3. 学完后应能独立检查推导与实现中的维度和假设。

检查题

  1. 用你自己的话总结本章最核心的一个公式/机制。
  2. 给出一个“如果要落地到项目里,你会怎么用”的具体例子。

常见误区

  1. 只背公式,不检查适用条件。
  2. 忽略维度一致性。
  3. 把符号记忆当成理解。

公式到代码(最小示例)

import numpy as np

x = np.array([1.0, 2.0, -1.0])
y = np.array([0.5, -1.0, 3.0])
inner = float(x @ y)
norm_x = float(np.linalg.norm(x, ord=2))
print(inner, norm_x)

本章外部参考(集中)

  1. Google for Developers
  2. 科学导向
  3. bmc.com
  4. Interview Coder
  5. geeksforgeeks.org
  6. compneuro.neuromatch.io
  7. Built In
  8. Medium
  9. neptune.ai
  10. RCAC
  11. 维基百科
  12. Particle Data Group
  13. 本章其余链接可在正文中按上下文继续查阅。