Submodularity in Machine Learning and Artificial Intelligence
次模函数(submodular function)在机器学习里出现得很频繁,尤其是那些'从一堆东西里选一个子集'的问题。特征选择、数据集子集选择、主动学习、聚类、数据摘要,本质上都带着明显的组合优化味道。变量不是连续数值,而是集合;搜索空间一大,直接穷举就不现实了。次模性提供的,是一种能把这类离散问题变得可处理的结构。
核心目标
很多任务都在做同一件事:在有限预算下,尽量保留信息、减少冗余、控制成本。
- Feature Selection(特征选择):从原始特征里挑子集,既降维,也减少无关项。
- Dataset Subset Selection(数据集子集选择):从大数据里抽出代表性样本,训练和存储都更省。
- Active Learning(主动学习):优先标注最有价值的样本,把标注成本花在刀刃上。
- Clustering(聚类):按相似性组织数据,尽量让同类更集中。
- Data summarization(数据摘要):用少量元素覆盖主要信息。
这类问题的共同点是:决策对象是集合,组合数随规模指数增长。若目标函数满足次模性质,很多时候就能借助贪心法得到不错的近似解。这也是它在 AI 里一直有存在感的原因。
什么是次模函数
对集合函数 $f: 2^V \rightarrow \mathbb{R}$,如果对任意集合 $A, B$ 都有
$$f(A) + f(B) \ge f(A \cup B) + f(A \cap B)$$
就称 $f$ 是次模函数。这条不等式就是次模不等式(submodular inequality)。
更常用的理解是边际收益递减。若 $A \subseteq B$,那么对任意元素 $e$:
$$f(A \cup {e}) - f(A) \ge f(B \cup {e}) - f(B)$$
意思很直白:同一个元素加入小集合时,带来的增益通常比加入大集合时更高。集合越大,新增一个元素的'惊喜'越少。
可以把它理解成离散版的凸/凹结构,但这个类比不要抠得太死。它的价值不在于数学外观像谁,而在于优化时能不能用。
| 集合大小 | f(S) | 增长 |
|---|---|---|
| 0 → 1 | 0 → 1 | +1 |
| 1 → 2 | 1 → 1.41 | +0.41 |
| 2 → 3 | 1.41 → 1.73 | +0.32 |
| ... | ... | 越来越小 |
随着集合变大,新增元素带来的边际收益持续下降,这就是次模性最核心的直觉。
几个常见例子
一个很容易理解的说法是'朋友的价值'。
如果你只有几个朋友,新认识一个人可能能补足很多信息;但当你已经有一大群相似的人,再来一个类似的朋友,价值就没那么高了。这个例子不严格,但足够帮助记住'边际收益递减'这个概念。
再看物品组合:
- Submodular(替代关系):coffee + tea。两者功能相近,组合起来的增益没那么夸张。
- Supermodular(互补关系):coffee + milk。搭配后效果更好,组合收益高于简单相加。
- Modular(独立):lemon + milk。彼此基本不影响,直接线性叠加。


