Hinge Loss/zh
| Article | |
|---|---|
| Topic area | supervised learning |
| Prerequisites | Loss function, Support vector machine, Convex optimization |
概述
合页损失是一种凸损失函数,用于训练大间隔分类器,最著名的是支持向量机(SVM)。对于二分类标签 $ y \in \{-1, +1\} $ 和实值分类器分数 $ s = f(x) $,标准合页损失为 $ \ell(y, s) = \max(0,\, 1 - y s) $。当分类器正确且自信时——即 $ y s \geq 1 $——损失恰好为零;否则损失随违反程度线性增长。这种分段线性的形状产生了合页训练模型的两个定义性属性:最大间隔的几何解释,以及只有位于或接近间隔的"支持向量"才对梯度有贡献的稀疏性。合页损失作为不连续 0-1 损失的凸替代,并且在适当的正则化下与贝叶斯最优分类器在统计上一致。
起源与动机
合页损失与 SVM 的发展密不可分。Cortes 和 Vapnik 在 1995 年通过放松原始的硬间隔形式以处理不可分数据,提出了软间隔 SVM,用每个样本一个松弛变量替代了严格约束。[1] 由此得到的原始目标可以改写为带合页损失的无约束经验风险最小化问题:
$ {\displaystyle J(w, b) = \frac{1}{n} \sum_{i=1}^{n} \max\!\left(0,\, 1 - y_i (w^\top x_i + b)\right) + \frac{\lambda}{2} \|w\|^2.} $
正则化项强制一个宽间隔 $ 2/\|w\| $;合页项对侵入间隔或被直接错误分类的点进行惩罚。由于对完全位于间隔之外的样本损失恒为零,因此只有支持向量才会影响对偶解——这种结构性稀疏性使合页训练的模型有别于使用平滑损失(如逻辑或交叉熵损失)的分类器。
从学习理论的角度来看,合页损失也是一个有原则的选择:它是 0-1 损失的凸上界,对二分类是 Fisher 一致的,因此最小化它可以渐近地恢复贝叶斯最优决策规则。[2]
公式表述
对于带有标签 $ y \in \{-1, +1\} $ 和标量分数 $ s $ 的二分类,将一个预测的间隔定义为乘积 $ y s $。合页损失将分数轴划分为三个区域:
- $ y s \geq 1 $ — 自信正确:$ \ell = 0 $,无梯度。
- $ 0 < y s < 1 $ — 正确但位于间隔内:$ \ell = 1 - y s \in (0, 1) $。
- $ y s \leq 0 $ — 错误:$ \ell \geq 1 $,线性增长。
该损失是凸的,但在 $ y s = 1 $ 处不可微。一个有效的次梯度为
$ {\displaystyle \partial_s \ell(y, s) = \begin{cases} -y & y s < 1 \\ 0 & y s > 1 \\ \text{any value in }[-y, 0] & y s = 1, \end{cases}} $
这对于随机梯度方法已经足够。$ y s = 1 $ 处的折点正是产生支持向量稀疏性的边界:在 SVM 对偶问题中,$ y s > 1 $ 的样本对偶系数为零,对决策边界没有任何作用。
变体
实践中出现了基本合页的若干变体:
- 平方合页将线性惩罚替换为二次惩罚:$ \ell = \max(0, 1 - y s)^2 $。它在折点之外可微,并且对较大的间隔违反给予更严厉的惩罚,从而可以加快收敛,但代价是对离群点的敏感性更大。L2-SVM 使用此形式。
- 平滑合页(修正Huber 损失)在 $ y s = 1 $ 附近引入二次过渡,得到处处可微的替代损失,适合二阶方法。Zhang 的修正 Huber 损失是广泛使用的一种变体。[3]
- Crammer-Singer 多分类合页通过惩罚得分最高的错误类别推广到 $ K $ 类:$ \ell = \max\!\big(0,\, 1 + \max_{k \neq y} s_k - s_y\big) $。[4]
- Weston-Watkins 多分类合页则对所有错误类别上的合页求和:$ \ell = \sum_{k \neq y} \max(0, 1 + s_k - s_y) $。两种形式在二分类情形下一致,但在梯度分布和统计一致性方面有所不同。
- 排序合页将二分类形式应用于有序对 $ (i, j) $ 的分数差:$ \ell = \max(0, 1 - (s_i - s_j)) $。它支撑了 RankSVM 等成对的学习排序方法。
- 三元组合页(用于度量学习中的三元组损失):对于带间隔 $ m $ 的锚点-正样本-负样本三元组,$ \max(0,\, D_{ap}^2 - D_{an}^2 + m) $。
优化
合页损失是凸的但不光滑,因此一阶方法依赖于次梯度。存在若干实用的算法:
- 随机次梯度下降。 Pegasos[5]证明了:在带正则化的合页目标上,使用 $ 1/t $ 步长的简单逐样本次梯度更新可以达到 $ O(1/(\lambda t)) $ 的收敛速率,并能轻松扩展到数百万个样本。
- 对偶坐标上升。 LIBLINEAR 利用带正则化合页问题的二次对偶,每次更新一个对偶坐标,每步均有闭式解。它是中等规模线性 SVM 的主力方法。[6]
- 割平面方法。 SVMperf 和 OCAS 将合页目标重新表述为带约束的二次规划,迭代地添加线性约束,在结构化输出任务上实现快速收敛。
- 光滑替代。 当偏好二阶方法或拟牛顿优化器(如 L-BFGS)时,用平方合页或修正 Huber 平滑替代合页,可以使梯度连续且 Hessian 信息有意义。
在核化 SVM 对偶中,推理代价随支持向量的数量而扩展,在含噪数据上这可能占训练集的相当大比例。原始的次梯度形式按数据规模线性扩展,是大规模线性分类的首选。
与其他分类损失的比较
合页损失在基于间隔的损失家族中占据着独特的位置:
- 0-1 损失是理想的分类目标,但它非凸且最小化是 NP 难的。
- 逻辑损失 $ \log(1 + e^{-y s}) $ 处处光滑,通过sigmoid给出校准的概率,对自信的正确预测也有非零梯度。
- 指数损失 $ e^{-y s} $ 驱动 AdaBoost 算法,并比合页对间隔违反的惩罚更激进——代价是在标签噪声下脆弱性增加。
- 交叉熵损失将逻辑损失推广到多分类,是神经网络分类器的默认选择。
合页损失的鲜明区别在于它在间隔之外恰好为零:被自信分类的点不施加任何梯度,从而将优化聚焦于困难样本。这带来了稀疏性和一种严格的几何解释——决策边界仅依赖于位于间隔内或违反间隔的点——但产生的是未校准的分数而非概率。从统计上看,合页对贝叶斯分类器的符号是一致的,但对类条件概率不一致;逻辑损失则同时恢复两者。
在深度学习中的应用
尽管交叉熵损失主导着现代深度分类器,但合页损失在若干深度学习场景中再次出现。Tang 表明,将卷积神经网络的softmax头部替换为 L2-SVM(平方合页)层,在标准基准上可以匹敌甚至超过交叉熵的准确率。[7] 合页表述也已成为许多生成对抗网络(GAN)变体中的默认损失——Lim 与 Ye 以及 Miyato 等人提出了"合页 GAN"目标,用合页项替代了原始的 Jensen-Shannon 风格GAN 损失,并提高了高分辨率图像生成的训练稳定性。[8][9] 合页的三元组与对比变体支撑了人脸识别系统及更早的度量学习流水线,而 Madry 等人提出的对抗训练方法则采用了合页风格的鲁棒间隔。
局限性
合页损失有一些公认的缺点。$ y s = 1 $ 处的折点排除了普通的梯度下降,并且除非使用平滑替代,否则也排除了二阶方法。输出未经校准——分数没有概率含义——因此需要概率的下游消费者必须事后应用 Platt 缩放或保序校准。合页对标签噪声的鲁棒性也低于逻辑损失:一个被翻转的标签会产生 $ -1 $ 的间隔,贡献一个恒定的线性梯度,在极端情况下可能主导更新。多分类推广并不唯一,Crammer-Singer 与 Weston-Watkins 形式各自做出不同的统计与计算权衡。最后,间隔常数 $ 1 $ 是约定俗成而非原则性的选择;在实践中,特征缩放与正则化强度与该常数以需要仔细调整超参数的方式相互作用。
参考文献
- ↑ Template:Cite arxiv
- ↑ Lin, Yi, "Support Vector Machines and the Bayes Rule in Classification," Data Mining and Knowledge Discovery, 2002.
- ↑ Zhang, Tong, "Solving Large Scale Linear Prediction Problems Using Stochastic Gradient Descent Algorithms," ICML 2004.
- ↑ Crammer, Koby and Singer, Yoram, "On the Algorithmic Implementation of Multiclass Kernel-based Vector Machines," JMLR 2001.
- ↑ Template:Cite arxiv
- ↑ Hsieh, Cho-Jui et al., "A Dual Coordinate Descent Method for Large-scale Linear SVM," ICML 2008.
- ↑ Template:Cite arxiv
- ↑ Template:Cite arxiv
- ↑ Template:Cite arxiv