回归与分类
监督学习只有两个基本问题:输出是一个连续的数(回归),还是若干类别之一(分类)。本节说明两者其实是同一个想法,即给数据写一个噪声模型,再做最大似然:高斯噪声给出最小二乘,伯努利与类别噪声给出交叉熵。我们在浏览器里现场训练一个预测抓取成败的逻辑回归、一个分辨地形的 softmax 分类器和一个 k 近邻分类器,最后用测试集、混淆矩阵、精确率与召回率判断它能不能上机器人。
1为什么机器人需要它
一台机械臂准备抓一个零件。它在动手之前就想知道:这次抓取会不会成功?它能测到的只有几个数,比如夹爪最大张开量比物体宽出多少毫米,夹爪方向和物体主轴偏了多少度。成败与这些数之间的关系没有现成的公式:摩擦、表面、物体重心都会影响结果。但机器人可以把过去几百次尝试记下来,每次记一行“特征 → 成败”,然后从这些数据里学出一个规则。
这就是监督学习:给定数据 \(\{(\mathbf x_i,y_i)\}_{i=1}^n\),其中 \(\mathbf x_i\) 是输入(特征),\(y_i\) 是我们想预测的目标,找一个函数 \(\hat y=f_{\boldsymbol\theta}(\mathbf x)\) 让它在没见过的输入上也预测得准。目标 \(y\) 是连续数值时叫回归(关节摩擦力矩、电池剩余时间、物体距离);目标是若干类别之一时叫分类(抓取成/败、地面是沥青/碎石/草地、图像里是哪个物体)。Part VI 的模仿学习本质上也是监督学习:输入是观测,目标是专家的动作(22.1 节)。
本节不需要神经网络。我们用最简单的模型(线性模型、逻辑回归、softmax、k 近邻)把监督学习的骨架讲清楚:模型 + 噪声假设 → 似然 → 损失 → 优化 → 在测试集上评估。后面的每一节(深度网络、扩散策略、强化学习里的价值网络)都只是把这里的“模型”换得更大,骨架不变。
2直觉:拟合就是在问“这条线让数据有多可能”
1.13 节把直线拟合当作几何问题:方程比未知数多,取让残差平方和最小的解。4.6 节从概率角度给了同一个答案的理由:如果测量 = 真值 + 高斯噪声,那么最大似然估计就是最小二乘。现在把两者放在一起,用到“拟合一个函数”上。假设数据来自下面的模型,各点的噪声 \(\varepsilon_i\) 相互独立、同分布:
每一条候选直线都对应一个“生成数据的故事”:在每个 \(x_i\) 处,\(y\) 应该落在以直线为中心、宽度为 \(\sigma\) 的高斯钟形里。数据的似然是所有钟形在各自数据点处的高度之积;它越大,这条直线把数据解释得越好。取负对数,乘积变成求和,就得到负对数似然(NLL):残差平方和除以 \(2\sigma^2\),再加一个只与 \(\sigma\) 有关的常数。所以无论 \(\sigma\) 取多少,让 NLL 最小的直线就是最小二乘直线。下图里你可以亲手拖直线、拖数据点,看两者怎样一起变。
- 在“手动”模式下拖直线的两个端点,把残差平方和压到最小二乘最小值的 1.15 倍以内(读数会显示两者的比)。
- 切到“最小二乘”,再拖 \(\sigma\) 滑块:直线纹丝不动,只有 NLL 在变。把 \(\sigma\) 调到让 NLL 最小的位置(与 RMS 残差相差 0.02 以内)。
默认数据下,最小二乘直线是 \(\hat y=0.54x+0.49\),残差平方和 2.04,RMS 残差 0.48;你在初始的水平线 \(y=0\) 处看到的残差平方和是 17.97。第二个任务揭示了一件事:\(\sigma\) 的最大似然估计恰好是 RMS 残差 \(\hat\sigma=\sqrt{\tfrac1n\sum r_i^2}\)(第 5 节推导)。它比生成数据用的 0.7 小,一部分是只有 9 个点的抽样波动,另一部分是系统性的:直线本身是照着这 9 个点拟合的,残差天然偏小,这正是 4.6 节说 \(\hat\sigma^2_{\mathrm{ML}}\) 偏小、常把分母换成 \(n-2\)(这里减去两个参数)的原因。
“线性”指的是参数,不是输入
直线太简单了。真实的关节摩擦力矩 \(\tau_f\) 和关节速度 \(v\) 的关系是弯的:静止附近有一个跳变(库仑摩擦,8.4 节),再加上随速度线性增长的粘滞摩擦。好消息是,只要把输入先变成一组特征 \(\boldsymbol\phi(v)=(\phi_1(v),\dots,\phi_d(v))\),再让模型是特征的线性组合 \(\hat y=\boldsymbol\theta^\top\hl{phi}{\boldsymbol\phi}(v)\),那么预测对 \(\boldsymbol\theta\) 仍是线性的,NLL 仍是 \(\boldsymbol\theta\) 的二次函数,解仍然是 1.13 节的正规方程,只是矩阵 \(A\) 的每一行换成了 \(\boldsymbol\phi(v_i)^\top\)。特征可以是多项式 \(1,v,v^2,\dots\),可以是一排高斯“鼓包”(径向基函数,RBF),也可以是物理给出的 \(1,\operatorname{sgn}v,v\)。
- 在“多项式”下找出测试 RMSE 最低的阶数(右图紫色曲线的最低点),再切到“物理特征”:只用 3 个数就比它更准。
- 把多项式阶数拉到 11 或 12:训练误差降到噪声水平附近,测试误差却是训练误差的 5 倍以上,曲线在数据点之间乱甩。
默认数据下,多项式在 7 阶时测试 RMSE 最低(0.098 N·m);12 阶时训练 RMSE 0.040,正好是噪声水平,测试 RMSE 却到了 2.5 N·m,比摩擦本身还大。物理特征 \((1,\operatorname{sgn}v,v)\) 学到 \(\hat{\boldsymbol\theta}=(0.062,\,0.364,\,0.249)\),与真值 \((0.05,\,0.35,\,0.25)\) 很接近,测试 RMSE 0.065:剩下的误差主要来自 \(\operatorname{sgn}\) 在零速附近与真实的平滑过渡不一样(模型误差)。这里只是先碰一下“过拟合”:训练误差低不等于模型好,一定要在没参与训练的数据上打分。为什么会这样、怎样系统地选模型复杂度(验证集、交叉验证、正则化),是 16.2 节的内容。
回归的损失函数不是随便挑的,它是你对噪声的假设:高斯噪声 → 平方损失(如果噪声有重尾,换成别的分布就得到别的损失,见 16.2 节)。“线性回归”可以拟合曲线,只要模型对参数是线性的;好的特征(尤其是物理给的特征)比更多的特征更值钱。8.3 节的惯性参数辨识就是这样一个线性回归:力矩对惯性参数是线性的。
3动手:现场训练一个抓取成败预测器
回到开头的抓取。每次尝试记两个特征:\(x_1\) = 张开余量(夹爪最大张开量减物体宽度,mm),\(x_2\) = 夹爪与物体主轴的夹角偏差(°),标签 \(y=1\) 表示成功、\(y=0\) 表示失败。能不能还用最小二乘去拟合 0 和 1?可以算,但它的输出会跑到 \([0,1]\) 之外,也不是一个概率,而且远处那些“明显成功”的点会把直线拽偏(第 7 节误区 5)。更好的做法还是先写一个噪声模型:结果是一枚有偏的硬币,成功的概率随特征平滑变化,
这里 \(\sigma(\cdot)\) 是 logistic(sigmoid)函数,不是噪声的标准差。\(z\) 叫 logit,即对数几率 \(\log\frac{p}{1-p}\):4.2 节的“对数几率”专栏已经说明,两类特征是等方差高斯时后验恰好是 \(z\) 线性的 sigmoid。\(L\) 是伯努利分布的平均负对数似然,也就是标签分布与预测分布之间的交叉熵(4.11 节),机器学习库里叫二元交叉熵(BCE)。它没有闭式解,但它是凸的(第 5 节),用 6.3 节的梯度下降一定能走到全局最优,而且梯度出奇地简单:\(\nabla_{\mathbf w}L=\frac1n\sum_i(\sigma(z_i)-y_i)\,\mathbf x_i\),即“预测概率减标签”乘以输入。
- “含噪”数据、不添加点,按“训练”:训练交叉熵降到 0.304 以下(约 170 步,学习率 0.5)。此时它已低于真实模型在同一批数据上的 0.3041;继续训练,学到的 \(\mathbf w,b\) 收敛到 \((0.307,-0.114)\)、0.56,接近真值 \((0.30,-0.12)\)、0.6。
- 换成“可分”数据,训练至少 3000 步:损失降到 0.005 以下,而(标准化后的)权重长度 \(\|\mathbf w\|\) 越过 9 还在涨,边界两侧的过渡带越来越窄。
(1) 准确率早就不动了,损失还在降:第一步之后训练准确率就是 87.5%(测试 84.7%),再训练几百步也只到 87.5% / 86.3%。变的是概率:交叉熵从 0.69 降到 0.303,模型从处处 \(p=0.5\) 变成自信的概率(一半成功样本的预测超过 0.96)。只看准确率会以为训练早已结束。 (2) 学到的模型在训练集上的交叉熵(0.3027)低于真实模型(0.3041),这和 11.6 节 BA 收敛处代价低于真值处是同一回事:优化器多少拟合了这批数据的噪声。在测试集上两者几乎一样(0.3105 对 0.3106)。 (3) 测试准确率 86.3% 是一个上限附近的值:即使知道真实模型,按 \(p>0.5\) 去判,在这 300 个测试样本上也只有 85.3%。标签本身是抛硬币,剩下的错误是数据里固有的,不是模型的错。
可分数据为什么停不下来?当一条直线能把两类完全分开时,把 \(\mathbf w\) 和 \(b\) 一起放大 2 倍,边界不动,但每个点的 \(|z|\) 都变大,每个点的概率都更接近它的标签,交叉熵就更小。所以损失没有最小值,只有下确界 0,最大似然解在无穷远处:梯度下降会让 \(\|\mathbf w\|\) 大致按 \(\log t\) 一直增长,模型变得无比自信(3000 步时 9.4,20000 步时 13.6)。实践中的解药是正则化(给 \(\mathbf w\) 一个先验,4.6 节的 MAP)或提前停止,见 16.2 节。
4另外两个视角:多类别,以及“不训练”的分类器
多于两类:softmax 回归
一台轮式机器人想知道自己正在什么地面上走,好调整速度和牵引控制。它有两个便宜的特征:车身竖直方向振动的 RMS(m/s²)和车轮打滑率(%)。类别有三个:沥青、碎石、草地。逻辑回归的推广是给每一类 \(k\) 一个 logit \(z_k=\mathbf w_k^\top\mathbf x+b_k\),再用 softmax 把 \(K\) 个 logit 变成 \(K\) 个加起来为 1 的概率:
噪声模型是“掷一个 \(K\) 面的有偏骰子”(类别分布),损失仍是负对数似然 = 交叉熵。类别 \(k\) 与 \(j\) 之间的边界是 \(z_k=z_j\),即 \((\mathbf w_k-\mathbf w_j)^\top\mathbf x+(b_k-b_j)=0\):仍是直线,所以 softmax 回归把平面切成若干个凸的多边形区域。想要弯曲的边界,就像 FIG 2 一样先做特征映射:加入 \(x_1^2,x_2^2,x_1x_2\) 之后,边界在原平面里变成二次曲线(椭圆、双曲线),但模型对参数仍是线性的,损失仍是凸的。
- “地形”数据训练至少 200 步,然后悬停在碎石与草地之间的交界处,找一个三类概率都低于 0.6 的位置:模型在那里知道自己没把握。
- 切到“圆环”,用线性特征训练至少 200 步:测试准确率卡在 55% 以下;再切到二次特征重新训练:测试准确率到 95% 以上。
“地形”数据上线性 softmax 训练 200 步后测试准确率 94.0%。继续训练,训练准确率还会升到 98.7%,测试交叉熵却在约 200 步后从 0.194 慢慢回升(5000 步时 0.227):这又是一次过拟合的预告。“圆环”上线性模型的测试准确率只有 49%,因为没有任何一组直线能围出一个圆;二次特征 200 步就到 97.3%,1000 步到 99.3%。
不训练的分类器:k 近邻
前面的模型都是参数化的:训练把数据“压缩”进 \(\mathbf w,b\),之后数据可以扔掉。k 近邻(k-NN)走另一个极端:根本不训练,把所有训练样本都存着;要分类一个新点,就找离它最近的 \(k\) 个训练样本,让它们投票。它是非参数方法:模型的复杂度随数据量增长,任何形状的边界都能表示,所以常被用作“不做任何假设时能做到多好”的基线。它的代价是:预测时要和所有样本比距离;“距离”完全取决于你怎样度量各个特征,单位不同的特征必须先标准化;维数高时“最近的邻居”也离得很远(维数灾难)。
- “地形”数据、标准化开启:先把 \(k\) 设为 1(训练 100%,测试只有 90%,边界支离破碎),再找一个让测试准确率达到 94% 的 \(k\)。
- “地形”数据,关掉标准化并把 \(k\) 设为 25 或更大:测试准确率掉到 85% 以下。看邻域的形状:打滑率(单位 %,数值范围大十倍)几乎独占了距离。
标准化开启时,测试准确率在 \(k=17\) 和 \(k=23\) 到 \(35\) 之间达到 94.0%,与 FIG 4 的线性 softmax 一样;关掉标准化,\(k=25\) 时只有 83.3%,\(k=41\) 时 80.0%。小 \(k\) 的边界跟着每一个噪声点走(方差大),大 \(k\) 的边界被远处的点抹平(偏差大),这又是 16.2 节偏差–方差权衡的一个例子。在“圆环”上,k-NN 不需要任何特征工程,\(k=3\) 就有 96.7%:这正是非参数方法的长处。
5再看数学
提示:把鼠标悬停在公式中带底色的符号上,图中对应的元素会被高亮(残差、钟形、特征函数、决策边界、概率等高线、softmax 底色、k-NN 邻域、混淆矩阵的行与列)。
回归:高斯似然与正规方程
模型 \(y_i=\boldsymbol\theta^\top\boldsymbol\phi(\mathbf x_i)+\varepsilon_i\),\(\varepsilon_i\sim\mathcal N(0,\sigma^2)\) 独立同分布。把 \(\boldsymbol\phi(\mathbf x_i)^\top\) 排成设计矩阵 \(\Phi\in\R^{n\times d}\) 的第 \(i\) 行,\(\mathbf y=(y_1,\dots,y_n)\)。负对数似然是
对 \(\boldsymbol\theta\) 求最小时第一项与 \(\boldsymbol\theta\) 无关,第二项正是 1.13 节的 \(\|A\mathbf x-\mathbf b\|^2\)(\(A=\Phi\),\(\mathbf b=\mathbf y\)),所以 \(\hat{\boldsymbol\theta}\) 满足正规方程 \(\Phi^\top\Phi\,\hat{\boldsymbol\theta}=\Phi^\top\mathbf y\),与 \(\sigma\) 无关(FIG 1 的第二个任务)。再对 \(\sigma\) 求导并令其为零:\(-n/\sigma+\|\mathbf r\|^2/\sigma^3=0\),得 \(\hat\sigma^2=\tfrac1n\|\mathbf y-\Phi\hat{\boldsymbol\theta}\|^2\),即残差的均方。数值上不要真的去求 \((\Phi^\top\Phi)^{-1}\):多项式特征的 \(\Phi\) 条件数很大,\(\Phi^\top\Phi\) 把它平方,FIG 2 用的是 QR 分解(1.13 节的伪逆也可以)。每个噪声不同的点可以给权重 \(1/\sigma_i^2\),就是 1.13 节的加权最小二乘。
逻辑回归:伯努利似然、梯度与凸性
\(y_i\in\{0,1\}\),\(p_i=\sigma(z_i)\),\(z_i=\mathbf w^\top\mathbf x_i+b\)。伯努利分布 \(p(y\mid\mathbf x)=p^{y}(1-p)^{1-y}\) 的平均负对数似然就是二元交叉熵。用 \(\sigma'(z)=\sigma(z)(1-\sigma(z))\) 求导,几项会神奇地消掉:
三点值得记住。梯度的形状:“预测减目标”乘输入,和线性回归的 \(\nabla_{\boldsymbol\theta}=\frac1n\sum(\hat y_i-y_i)\boldsymbol\phi_i\)(差一个常数因子)一模一样;softmax 也一样,\(\partial L/\partial\mathbf z_i=\frac1n(\mathbf p_i-\mathbf e_{y_i})\),\(\mathbf e_{y_i}\) 是独热向量。这不是巧合:三者都是“指数族分布 + 典范连接函数”的广义线性模型。到了 16.3 节,这个 \(\mathbf p-\mathbf e_y\) 就是反向传播从输出层送回去的第一个信号。凸性:Hessian 是一组半正定矩阵的加权和,所以 \(L\) 是凸的,没有坏的局部极小,梯度下降、牛顿法(逻辑回归里叫 IRLS,迭代重加权最小二乘)都收敛到全局最优(数据可分时除外:最优在无穷远)。边界的几何:
决策边界是一个超平面,\(\mathbf w\) 是它的法向量(1.7 节点积的几何)。\(p=0.1\) 和 \(p=0.9\) 两条等高线到边界的距离是 \(2.197/\|\mathbf w\|\):\(\|\mathbf w\|\) 越大,过渡带越窄、模型越自信,FIG 3 的可分数据里你看到的就是它。上式里的 \(d_\perp(\mathbf x)\) 是点 \(\mathbf x\) 到边界的欧氏距离(在标准化后的坐标里)。阈值不一定取 0.5:把判成功的阈值改成 \(t\),边界就平移到 \(z=\log\frac{t}{1-t}\),第 6 节会利用这一点。
softmax:K 类的推广
\(\mathbf z=W\mathbf x+\mathbf b\),\(W\in\R^{K\times d}\),\(p_k=e^{z_k}/\sum_je^{z_j}\)。给所有 logit 加同一个常数,概率不变,所以 \(K\) 组参数里只有 \(K-1\) 组是可辨识的;\(K=2\) 时 \(p_1=\sigma(z_1-z_0)\),正是逻辑回归,\(\mathbf w=\mathbf w_1-\mathbf w_0\)。数值上要先减去最大的 logit 再取指数(否则 \(e^{z}\) 会溢出),库里的交叉熵函数都直接吃 logit 而不是概率,就是为了把 log 和 softmax 合在一起稳定地算。
k 近邻
\(\hat y(\mathbf x)=\arg\max_k\big|\{i\in\hl{nbr}{\mathcal N_k(\mathbf x)}:y_i=k\}\big|\),\(\mathcal N_k(\mathbf x)\) 是离 \(\mathbf x\) 最近的 \(k\) 个训练样本(这里的距离是标准化后的欧氏距离)。平票时本页取票数并列的类里离得最近的那个样本的类别。Cover 与 Hart(1967)证明,样本数趋于无穷时,1-NN 的错误率不超过最优(贝叶斯)错误率的两倍。预测一次要 \(O(nd)\) 次运算;机器人上数据量大时用 k-d 树或近似最近邻搜索(与 12.1 节点云最近邻搜索用的 k-d 树相同)。
评估:混淆矩阵与它派生的指标
把“判为成功”当作正类。在测试集上数四个数:TP(判成功,真成功)、FP(判成功,实际失败)、FN(判失败,实际成功)、TN(判失败,真失败)。于是
这里 Acc 是准确率,Prec 是精确率(precision),Rec 是召回率(recall),FPR 是假阳性率。精确率问的是“我说会成功的里面,有多少真成功了”,召回率(recall,也叫真阳性率 TPR)问的是“真能成功的里面,我抓住了多少”。阈值 \(t\) 从 0 扫到 1,召回率单调下降,精确率大体上升,画出来就是 PR 曲线;以 FPR 为横轴、TPR 为纵轴画就是 ROC 曲线,它下方的面积 AUC 等于“随机取一个成功样本和一个失败样本,前者得分更高”的概率。ROC 不受类别比例影响,PR 曲线和精确率则直接受它影响:失败很少时,ROC 可能很好看,但精确率仍可能不够。
6机器人中的它:这个抓取预测器能上机吗?
训练准确率说明不了什么(FIG 2 和 FIG 5 已经看到),所以要留出一份测试集:训练、调参时都不碰它,最后只用一次。可即便在测试集上,“准确率 90%”也可能毫无用处。下图是一个抓取分类器在 400 次测试抓取上给出的分数(预测的成功概率)。机器人只在分数超过阈值 \(t\) 时才执行抓取。执行了却失败(FP)的代价很高:零件掉落、产线停下;放弃了本能成功的抓取(FN)只是浪费一点时间,换一个候选抓取就行。真实的拣选场景里,候选抓取大多是能成功的,失败是少数:把“类别比例”切到“现实(90% 成功)”看看会发生什么。
- 选“现实(90% 成功)”,把阈值拉到最左(0.01 或更低):准确率是 90%,可它一次失败也没拦住(TN = 0),这个“分类器”等于什么都不做。
- 仍在“现实”下,找一个阈值让执行的抓取里一次失败都没有(FP = 0),同时召回率不低于 0.85。
“均衡”数据下阈值 0.5 时准确率 92.5%、精确率 0.934、召回率 0.915。“现实”数据下,让准确率最高的阈值移到了 0.22 附近(95.75%),因为失败很少,多判成功几乎不吃亏;而满足 FP = 0 且召回率 ≥ 0.85 的阈值只有 0.58 到 0.61 这一小段。别把“0 个失败”看得太绝对:测试集里一共只有 40 次失败,0/40 只能说明“失败的候选被执行”的真实比例(FPR)大概率低于 7.5% 左右(统计里的“三分之法则”:0 次发生时,95% 置信上界约为 \(3/n\))。要宣称这个比例低于 1%,需要几百次失败样本。
学习抓取成功率:Pinto 与 Gupta(ICRA 2016)用机器人自己收集的 5 万次尝试(标题里的 50K tries、700 robot hours)训练 CNN,从图像块预测 18 个夹爪角度各自的成功与否;Levine 等(IJRR 2018)用多台机械臂在两个月里收集了约 80 万次抓取尝试,训练一个 CNN 预测“给定图像和一个运动指令,抓取会成功”的概率,再用它挑选指令。Dex-Net 2.0(Mahler 等,RSS 2017)的 GQ-CNN 在 670 万个合成点云样本上训练,从深度图预测平行夹爪抓取的鲁棒性。三者的输出层实质上都是本节的逻辑回归(一个 sigmoid 加交叉熵),只是特征 \(\mathbf x\) 换成了网络从图像里提出的特征(17.1 节)。 地形分类:Brooks 与 Iagnemma(IEEE T-RO 2005)用车体结构上测到的振动信号给行星车分类地形,正是 FIG 4 的问题;今天的足式和轮式机器人仍常把本体感知(IMU、电机电流、打滑)当分类特征。 动力学辨识:8.3 节提到的 Atkeson、An 与 Hollerbach(1986)把连杆和负载的惯性参数辨识写成线性最小二乘;后来的辨识工作常把摩擦项(库仑 + 粘滞)作为额外的回归列加进去,FIG 2 就是这一部分的单关节版本。 软件:scikit-learn 的 LogisticRegression 默认带 L2 正则(C=1.0),所以在可分数据上不会像 FIG 3 那样无限增长;KNeighborsClassifier 默认 \(k=5\)。PyTorch 的 nn.CrossEntropyLoss 与 nn.BCEWithLogitsLoss 都输入 logit,内部合并 log 与 softmax/sigmoid 以保证数值稳定。
7常见误区
FIG 2 的 12 阶多项式训练误差等于噪声水平,测试误差却大了 60 倍;FIG 5 的 1-NN 训练准确率永远是 100%。训练分数只说明模型能背下数据。还有更隐蔽的泄漏:用全部数据(含测试集)的均值和方差做标准化,按测试分数反复挑模型,或者把同一次抓取的相邻帧分到训练和测试两边(几乎是重复样本)。机器人数据要按场景、按物体或按时间段切分,否则测试集里全是训练集的“近亲”。
FIG 5 关掉标准化,打滑率(0 到 35)把振动(0 到 3.5)完全压住,k-NN 的测试准确率从 94% 掉到 83%。梯度下降也受害:特征尺度相差 10 倍,损失的等高线就被拉长,条件数变大,6.3 节的“之字形”就出现了,所以 FIG 3、FIG 4 训练前都先标准化。标准化的均值和标准差只能从训练集算,存下来,部署时对新数据用同样的数。
FIG 6 里,失败占 10% 时“全判成功”就有 90% 的准确率。要看混淆矩阵,按代价选指标(误执行贵就盯精确率或 FP 数,漏检贵就盯召回率),并按代价选阈值,而不是默认 0.5。报告结果时也要报告测试集里每一类有多少个样本:少数类只有几十个时,任何百分比都带着很宽的误差棒。
逻辑回归的输出只有在模型假设成立(对数几率真的对特征线性)且数据足够时才接近真实频率。FIG 3 的可分数据训练 3000 步后,模型给 62% 的训练点 0.999 以上的把握,给每个点至少 0.93,而且还在升高,可这只是 \(\|\mathbf w\|\) 无限增长的副作用。更大的模型(深度网络)往往系统性地过于自信。输出的分数可以排序,但要当概率用(例如“成功率低于 0.8 就请人帮忙”),必须先在留出数据上检验校准,见 21.3 节。而且它描述的只是训练分布里的不确定性,遇到没见过的物体,它可能非常自信地错。
对 0/1 标签做最小二乘,输出会超出 \([0,1]\),而且离边界很远、本来分对了的点仍会产生很大的平方误差,把直线拽过去,边界反而变差;交叉熵对这些点的梯度 \(p-y\) 几乎为零,不受它们影响。把“沥青 = 0、碎石 = 1、草地 = 2”当作数去回归更糟:它暗含“碎石在沥青和草地中间”“草地和沥青差得最远”这种并不存在的顺序。多类别就用 softmax 和独热标签。(反过来,真正有序的目标,例如抓取力档位,有时可以当回归或有序回归处理。)
8小练习
9延伸阅读
- C. M. Bishop, Pattern Recognition and Machine Learning, Springer, 2006, Ch. 3–4 — 线性回归与线性分类的概率视角:基函数、最大似然、逻辑回归、IRLS
- T. Hastie, R. Tibshirani & J. Friedman, The Elements of Statistical Learning, 2nd ed., Springer, 2009, Ch. 2–4 — 最小二乘与最近邻的对比、线性分类方法
- K. P. Murphy, Probabilistic Machine Learning: An Introduction, MIT Press, 2022 — 现代、免费在线的教材,回归、逻辑回归、评估指标都有详细讨论
- D. R. Cox, The Regression Analysis of Binary Sequences, Journal of the Royal Statistical Society B, 1958 — 逻辑回归的经典来源之一
- T. M. Cover & P. E. Hart, Nearest Neighbor Pattern Classification, IEEE Transactions on Information Theory, 1967 — 1-NN 的错误率不超过贝叶斯错误率的两倍
- J. Davis & M. Goadrich, The Relationship Between Precision-Recall and ROC Curves, ICML 2006 — 何时看 PR 曲线、何时看 ROC
- L. Pinto & A. Gupta, Supersizing Self-supervision: Learning to Grasp from 50K Tries and 700 Robot Hours, ICRA 2016 — 机器人自己收集标签,学习抓取成败
- S. Levine, P. Pastor, A. Krizhevsky, J. Ibarz & D. Quillen, Learning Hand-Eye Coordination for Robotic Grasping with Deep Learning and Large-Scale Data Collection, IJRR 2018 — 大规模抓取成功率预测
- J. Mahler et al., Dex-Net 2.0: Deep Learning to Plan Robust Grasps with Synthetic Point Clouds and Analytic Grasp Metrics, RSS 2017 — 用合成数据训练的抓取质量分类器