数据科学算法ch12-子模函数

数据科学算法ch12-子模函数

子模函数时边际效用递减规律的形式化表示。在机器学习和人工智能领域,子模函数有着广泛的应用,如文档摘要、信息扩散、传感器布置和图像采集描述等诸多问题

比如说:要在办公楼里面布置无线网络,由于在不同的位置安装无线路由器的效果是不同的,那么在那些地方安装无线路由器能满足上述条件且总花费越低?要知道,部署的无线路由器越多,对提升网络覆盖率的贡献就越低。

又比如说:在大数据时代,日常看到的信息可能是片面零散的,可以采用文本摘要技术来帮助人们解决碎片化阅读的问题。我们的目标是用尽量少的句子来覆盖用户感兴趣的关键词。当选择的句子越来越多,未被包含的关键词就越少,因此选择句子对文本中的关键词覆盖也符合边际效用递减的规律。

上面例子中都设计边际效用递减规律,在数学上这个规律可以被定义为子模函数

子模函数

在了解子模函数前,我们首先了解一下凸函数和凹函数:

现在我们从凹函数到子模:

对于集合函数$f:{0,1}^n\rightarrow \mathbb R,\forall i,\partial_if(x)=f(x+e_i)-f(x)$ 是非增的,那么$f(x)$就是子模函数

也就是说,从集合中任意调出一个子集来,我们可以将其映射为一个实数,然后这个实数的变化趋势和凹函数是一致的。

但是对于集合函数来讲,单调性并不是说一个大小为5的子集对应的函数的值一定大于一个大小为4的子集。它只大于它自己的大于等于4的子集的函数值。

用集合的话来说:

集合函数: $f:{0,1}^n\rightarrow \mathbb R$ 是子模函数当且仅当对 $\forall A,B\subseteq V$, 以下不等式成立

子模函数的等价定义

子模函数有两个等价定义:

边际效用递减

对任意的 $S\subseteq T\subseteq V$ 和 $v\in V \backslash T$

这实际上就是边际效用递减规律的形式化表述

  • 我们可以把边际效用看做是:$f(S\cup {v})-f(S)$ ,即在集合S中增加元素 $v$ 导致函数值变化。
  • 进一步,随着集合$S$ 的不断增大,比如增加到集合T ,那么显然边际效用 $f(T\cup {v})-f(T)$ 是不断减少的。

因此,我们说当 $S\subseteq T$ 的时候,$f(S\cup {v})-f(S)\geq f(T\cup {v})-f(T)$

集合效用递减:

对于任意的$S\subseteq T\subseteq V$ 以及 $C\subseteq V \backslash T$

满足:

也很容易理解,上面是加一个元素,现在是加一个集合,归根到底就是边际效用递减

子模函数的性质

假设 $f(A)$ 和 $g(A)$ 为任意两个子模函数,则:

  1. 对 $\forall a> 0$ ,$af(A)$ 也是一个子模函数
  2. $f(A)+g(A)$ 也是一个子模函数
  3. $\overline f(A)=f(A^c)$ 也是一个子模函数
  4. 对任意固定的 $S\subset U$,$f(A|S)=f(A\cap S)$ 也是一个子模函数
  5. 对任意固定的 $S\subset U$ ,$f(A|S^c) = f(A\cup S)-f(S)$ 也是一个子模函数

例题

例题1

给定一个集合$ V$,当$A\subseteq V$ 的时候,有 $f(A)$ 是一个子模函数

a. 证明 $\overline f(A)= f(A^c)$ 是一个子模函数

b. 证明 当$S\subset V,~g(A) = f(A\cap S) $ 是一个子模函数

证明什么函数是一个子模函数,我们一定要从定义入手,也就是 $f(S)+f(T)\geq f(S\cup T)+f(S\cap T)$

比如说a, 我们令 $A = S^c,B=T^c$, 带入到 $f(A)$中,得到

已知:

又:

因此,上式可以化为:

得证


对于b,即:

我们令 $S = A\cap S, T = B\cap S$, 那么,根据上式,可知: $g(S)+g(T) \geq g(S\cap T)+g(S\cup T)$

例题2

a. 证明边际效用递减的等价定义

需要分充分性和必要性证明,首先证明必要性

令 $S\subset T$ ,给定集合 $S\cup{V}$ 和 $T$, 如果 $v\notin T$, 根据定义,我们有:

注意到: $f(S\cup{v}\cup T)=f(T\cup{v}),f((S\cup{v})\cap T)=f(S)$

带入上式,有:

然后,我们来证明充分性

给定两个集合 $S$ 和 $T$ ,令 $T\backslash S = {v_1,v_2\cdots,v_k}$, $T_j = {v_1,\cdots,v_j}$ , 我们令:$A_j = (S\cap T)\cup T_j,B_j = S\cup T_j$ , 我们有:

对上式的$k-1$ 个句子求和,可以得到:

b. 证明集合效用递减的等价定义

将上面的$v_i$ 换成集合$C$ 即可

例题3

设 $w: N\rightarrow R$ 表示有限集 $N$ 中元素的权重,考虑一个线性函数为:

证明这个线性函数是一个子模函数

满足 子模函数对 $f(S)+f(T)\geq f(S\cup T)+f(S\cap T)$ 的定义,因此这个函数是一个子模函数

集合覆盖

首先给出覆盖及其相关定义:

集合覆盖

设A是非空集,C是集合A的非空子集组成的集合,即$C={A\alpha|A\alpha\in A,A_\alpha\neq \empty}$ ,C是集合A的覆盖,若C满足:

最小全覆盖问题

令U为一有限集,$\mathcal S = {s_1,\cdots,s_n}$ 为 由U的n个子集构成的集族,全覆盖问题是找到$\mathcal S$最小的子集盖 集合U

简单来说,就是找到最小的 句子集合包含所有的单词

k-最大覆盖问题

令$U$为一有限集,$\mathcal S={s_1,s_2\cdots,s_n}$ 为由$U$的n个子集构成的集族,给定正整数k,最大子覆盖问题就是从$\mathcal S$ 中找到k个子集,使得这k个子集覆盖集合$U$中最多的元素

简单来说,找到k个句子使得其包含的单词数量最多

例题

比如话务验业务技能全集$U={a,b,c,d,e,f,g,h,i,j,k,l}$,现在考虑有7名候选话务员的集合$S={A_1,A_2\cdots,A_7}$ ,其中,7位话务员的技能分别为:

对于最小全覆盖问题:

话务员集合 $C_1 = {A_1,A_2,A_3,A_4}$和$C_2={A_1,A_5,A_6}$ 中的话务员都能满足客户所有类型的需求。但是集族$C_1$需要4位话务员,而集族$C_2$ 只需要3为话务员。因此$C_1$并不可能是$U$的最小全覆盖,而不存在两位话务员的集合就能实现全覆盖,因此$C_2$ 是全集U的一个最小全覆盖。

当然,$S={A_1,A_2,A_3}$ 也是一个大小为3 的全覆盖

对于最大覆盖问题:

假定只能制定两名话务员向客户提供服务,应该选择那两位话务员呢?

由于第6位话务员包含了6种技能,是所有话务员中技能最多的,为了使得应对的客户需求尽可能的多,可以把第6位作为候选之一。而且${A_1,A_2,A_3,A_5}$都有4种业务技能,且:

进一步:

因此,集族$C={A_5,A_6}$ 能够覆盖客户10类不同的需求,因此集族$C={A_5,A_6}$ 构成$k=2$时的最大覆盖

对于这种小数据量问题,从中发现最大覆盖还是比较容易的。但是很多应用中数据规模都很大,比如在文本摘要中全集可以是一些关键词。给定的语料中可能包含成千上万的句子,此时要发现最大覆盖就不那么容易了

抽取式文本摘要

给定用户定义的n个关键词组成的集合 $W={w_1,w_2\cdots,w_n}$ 和 m个候选句子集合$\mathcal S = {s_i|s_i\sub W,i=1,2\cdots,m}$ ,其中句子$s_i$ 表示该句子包含的关键词集合。抽取式文本摘要问题旨在选择k个句子,使得这k个句子能够包含最多数量的关键词

用整数规划的形式来表达,可以是:

令$\mathscr{C}$ 为找出的k个句子,那么设

整数规划问题可写为:

爬山算法

爬山算法是一个解决子模优化问题的局部搜索算法。下图是爬山算法的一个实例,它解决了最大子覆盖问题。该算法在每次迭代过程中选择使得集合覆盖函数$f(A)$边际增幅最大 的候选元素u,通过不停地迭代,从一个候选结果想另一个候选结果”移动”直到终止条件满足

例子

假设给定的关键词集合为 $W={w_1,w_2\cdots,w_S}$ ,共有9个候选句子$D={s_1,s_2\cdots,s_9}$ ,用于文本摘要,其中这9个句子包含的关键词分别为:

  • 第一轮迭代:
子集 f(A) $f(A\cup A_i)$ $\Delta$
$s_1$ 0 3 3
$s_2$ 0 3 3
$s_3$ 0 2 2
$s_4$ 0 4 4
$s_5$ 0 3 3
$s_6$ 0 3 3
$s_7$ 0 1 1
$s_8$ 0 3 3
$s_9$ 0 2 2

我们看到,第一轮,一定是选择包含关键词最多的那个句子,也就是 $s_4$. 现在,$f(A) = {w_1,w_3,w_7,w_8}$

  • 第二轮迭代:
子集 f(A) $f(A\cup A_i)$ $\Delta$
$s_1$ 4 5 1
$s_2$ 4 4 0
$s_3$ 4 5 1
$s_5$ 4 6 2
$s_6$ 4 5 1
$s_7$ 4 5 1
$s_8$ 4 6 2
$s_9$ 4 5 1

在第二轮迭代中,边际效益就少了很多了,我们看到 边际效益最大的是 $s_5,s_8$,这里选择靠前的,也就是$s_5$, 更新 $f(A) = {w_1,w_3,w_5,w_6,w_7,w_8}$

  • 第三轮迭代
子集 f(A) $f(A\cup A_i)$ $\Delta$
$s_1$ 6 7 1
$s_2$ 6 6 0
$s_3$ 6 6 0
$s_6$ 6 6 0
$s_7$ 6 6 0
$s_8$ 6 7 1
$s_9$ 6 7 1

第三轮迭代,大多数边际效益都为0了,这里选择 最靠前的边际效益最大的句子 $s_1$

因此,我们看见,爬山算法并不是只有一种结果,只要让$f(A)$ 到达终止条件即可

-------------本文结束,感谢您的阅读-------------