资讯

松弛变量是什么?允许约束条件被适度违反的“缓冲量”

2026-11-053 分钟阅读百科
TL;DR松弛变量(Slack Variables)是在优化问题中引入的非负辅助变量,用来把不等式约束转化为等式约束,或允许约束被适度违反;在软间隔支持向量机中,松弛变量允许部分样本越过间隔甚至被分错,并通过惩罚参数 C 在间隔大小和分类错误之间权衡。

松弛变量(Slack Variables)是在数学优化问题中引入的一种辅助变量,它的作用是让约束条件变得“宽松”一些。它主要有两种用途:一是在线性规划中,把不等式约束转化为等式约束,便于求解;二是在机器学习,特别是支持向量机中,允许部分约束条件被适度地违反,从而让模型能够处理现实中不完美的数据。

在线性规划中

线性规划是在一组线性约束条件下,求一个线性目标函数的最大值或最小值。比如一家工厂生产两种产品,每种产品需要消耗不同数量的原材料和工时,而原材料和工时的总量是有限的,怎样安排生产才能让利润最大?这里的约束条件通常是不等式,比如“消耗的原材料不能超过 100 千克”。

为了使用单纯形法等求解方法,常常需要把不等式转换为等式。做法是引入一个非负的松弛变量,表示“剩余”的部分:“消耗的原材料加上松弛变量等于 100 千克”。如果松弛变量的值是 20,就说明还有 20 千克的原材料没有用完;如果它是零,就说明原材料正好用完了,这个约束是“紧”的。松弛变量的值本身也提供了有用的信息,告诉我们哪些资源还有富余、哪些资源已经成为瓶颈。

在支持向量机中

松弛变量在机器学习中最著名的应用是软间隔支持向量机。支持向量机的目标是在两类数据之间找到一条分界线,或者在高维空间中找到一个超平面,并且让这条分界线离两边最近的数据点都尽可能地远,这个距离叫作“间隔”。最初的支持向量机要求所有的数据点都必须被正确地分开,并且都要在间隔之外,这叫“硬间隔”。

但现实中的数据往往并不完美:两类数据可能有一些重叠,可能存在噪声或者标错的样本,根本无法用一条线完美地分开;即使能够完美地分开,为了照顾个别异常的样本,分界线也可能被“挤”得很别扭,间隔变得很小,模型在新的数据上表现不好。

1995 年,Corinna Cortes 和 Vladimir Vapnik 提出了软间隔支持向量机,为每一个数据点引入一个松弛变量,允许它在一定程度上违反约束:松弛变量为零,表示这个点被正确地分类,而且在间隔之外,完全满足要求;松弛变量在 0 和 1 之间,表示这个点虽然被正确地分类了,但落在了间隔之内;松弛变量大于 1,表示这个点被分到了错误的一侧。

当然,不能无限制地放松约束,否则模型就失去了意义。所以在优化的目标中,会加上所有松弛变量之和乘以一个惩罚系数 C。这个参数 C 用来权衡两个目标:一是让间隔尽可能大,二是让违反约束的程度尽可能小。C 越大,对违反约束的惩罚越重,模型越不能容忍分类错误,但可能会过拟合;C 越小,模型越能容忍一些错误,得到更大的间隔,泛化能力可能更好,但也可能欠拟合。因此 C 是支持向量机中一个需要仔细调节的重要超参数。

可以证明,软间隔支持向量机等价于使用铰链损失加上正则化项来训练模型,这建立起了它与其他机器学习方法之间的联系。