最大熵模型
最大熵模型也是很典型的分类算法,它和逻辑回归类似,都是属于对数线性分类模型。
对一个随机事件的概率分布进行预测时,预测应当满足全部已知的约束,而对未知的情况不要做任何主观假设,也就是说对
未知的情况,概率分布最均匀(等概率),预测的风险最小,模型不会妄加揣测,因此得到的概率分布的熵是最大。
比如:对于随机变量 $X$,其可能的取值为 ${A,B,C}$,给定一个约束 $P(A) = \frac{1}{2}$,则认为最好的模型为
$$P(A) = \frac{1}{2} \\
P(B) = P(B) = \frac{1}{4}$$
总之:在满足约束的集合中寻找熵最大的模型。
最大熵模型损失函数
给定一个训练数据集 $T$,我们的目标就是利用最大熵原理选择最好的分类模型。
$$T = \left \{(x_{1},y_{1}),(x_{2},y_{2}),...,(x_{n},y_{n})\right \}$$
按照最大熵原理,我们应该优先保证模型满足已知的所有约束。那么如何得到这些约束呢?
我们通过观察数据集往往能发现一些事实,例如在一份扔骰子的数据集中,我们发现 $6$ 朝上占比为 $\frac{1}{5}$;再例如一份
关于天气的数据集中,我们发现湿度高且多云的天气下,几乎都会下雨。对于这些观察到的事实,往往采用特征函数去表示:
这个事实是从样本中观察而来的,既然认为它是一个事实,那意味着满足该规律的样本在观测到的所有样本中是是占一定比例的,
并且该比例足以让我们确信存在 $f(x,y)$ 这样一个事实。
比如:在所有以湿度高且多云的条件下,天气晴朗的样本占比很小,那就不能认为 [湿度高,多云,晴朗] 能构成一个事实。
那么这个 $x$ 是代表输入的向量吗?
并不是的,它是从输入的所有特征中抽取的任意个特征,可以由 $1$ 个特征构成,也可以由 $2,3,...,n$ 个特征组成。
再举一个例子:下图中,第一列是输出 $Y$,右边 $3$ 列是输入 $X$。
可以观察到当第二列这个特征是 $Cloudy$ 的时候,在这个条件下,输出 $Outdoor$ 的占比是 $100 %$ 的,那么就可以认为它构成了一个事实:
$$f(x,y) = \left\{\begin{matrix}
1, & if \; x^{(0)} = Cloudy \; and \; y = Outdoor. \\
0, & else
\end{matrix}\right.$$
从样本中继续观察,发现当输入同时有 $Cloudy$ 和 $Humid$ 的时候,$Outdoor$ 的概率为 $\frac{3}{4}$,那也可以认为它是一个事实,定义特征函数如下:
$$f(x,y) = \left\{\begin{matrix}
1, & if \; x^{(0)} = Cloudy \; and \; x^{(2)} = Humid \; and \; y = Outdoor. \\
0, & else
\end{matrix}\right.$$
我们在定义特征函数的时候,每个函数都是互斥的,即若干个样本只能定义唯一一个特征函数。比如上面定义的这两个函数就有重叠的样本,只能取其一。
另外,当输入的特征向量不是数值向量时,比如文本或图片,此时特征函数的功能更像是特征向量的制作,对于给定的输入 $x$,使用
一系列定义好的特征函数,将其转化为需要的向量形式。
特征函数可以是任意的实值函数,输出不一定是 $1$,也可以是其它数,如 $0.1$。
定义了关于事实的特征函数,那怎么描述约束呢?
特征函数 $f(x,y)$ 本身就是一个随机变量,取值为 $0$ 或者 $1$,我们通过统计样本数来得到特征函数取每个值的概率。
$$E_{\tilde{P}}(f) = \sum_{x,y}^{}\tilde{P}(x,y)f(x,y)$$
$$E_{P}(f) = \sum_{x,y}^{}P(x,y)f(x,y) = \sum_{x,y}^{}P(x)P(y|x)f(x,y)$$
这里的 $x,y$ 并不是代表训练集中的样本点,而是所有可能的取值,假如 $p$ 为 $x$ 可能取值个数,$q$ 为 $y$ 可能取值个数,那么
$$\sum_{x,y}^{}xy = \sum_{i = 1}^{p}\sum_{j = 1}^{q}x_{i}y_{j}$$
只有当取值满足某个事实的时候,$f(x,y)$ 才为 $1$。
我们的目标是求解 $P(y|x)$,贝叶斯公式也是求这个,因为贝叶斯做了一个特征条件独立的假设,可以用样本来求出联合分布 $f(x,y)$,
继而求出条件概率分布。
最大熵模型也想求出一个条件概率分布,这里用经验概率 $\tilde{P}(x)$ 来代替总体概率 $P(x)$,并且认为两个期望相等:
$$\sum_{x,y}^{} \tilde{P}(x,y)f(x,y) = \sum_{x,y}^{}\tilde{P}(x)P(y|x)f(x,y) \\
E_{\tilde{P}}(f) = E_{P}(f)$$
那就只剩一个未知量了,即我们要求解的 $P(y|x)$,这个式子也可以解出无数个 $P(y|x)$,因为所定义的特征函数不同,对应的模型便不同。
总结:特征函数在样本中的经验期望与总体期望一致作为约束来求解 $P(Y|X)$,无需求解联合分布 $P(X,Y)$。
下面完整描述一下这个模型:
$$\min_{P \in C} \;\; -H(P) = \sum_{x,y}^{}\tilde{P}(x)P(y|x)\log P(y|x) \\
s.t. \;\; E_{P}(f_{i}) = E_{\tilde{P}}(f_{i}), i=1,2,\cdots,s \\
\sum_{y}^{}P(y | x) = 1$$
式子中的对数为自然对数。
最大熵模型求解
对于这类等式约束问题,通常采用拉格朗日乘数法解决。引入拉格朗日乘子,可以得到拉格朗日函数 $L(P,w)$ 有
$$L(P,w) = -H(P) + w_{0}\left ( 1 - \sum_{y}^{}P(y | x) \right ) + \sum_{i=1}^{s}w_{i}\left ( E_{P}(f_{i}) - E_{\tilde{P}}(f_{i}) \right ) \\
= \sum_{x,y}^{}\tilde{P}(x)P(y|x)\log P(y|x) + w_{0}\left ( 1 - \sum_{y}^{}P(y | x) \right ) + \sum_{i=1}^{s}w_{i}\left ( \sum_{x,y}^{} \tilde{P}(x,y)f_{i}(x,y) - \sum_{x,y}^{}\tilde{P}(x)P(y|x)f_{i}(x,y) \right )$$
上面这个式子是书上给的原始式子,但是感觉不对。
设 $x$ 的所有可能取值有 $p$ 个,$y$ 的所有可能取值有 $q$ 个,那么第二项 $\sum_{y}^{}P(y | x)$ 应该是有 $p$ 个,即对每一个 $x$,其条件概率和都为 $1$,
但是书上的式子却只有一项。而且采用这个约束似乎后面也无法合并。
现在我们从联合概率的角度来看,有 $\sum_{x,y}^{}P(x,y) = 1$,所以可以得到约束:
$$\sum_{x,y}^{}P(x,y) = \sum_{x,y}^{}\tilde{P}(x)P(y|x) = 1$$
只要满足联合概率和为 $1$ 这个约束即可,所以将上面的拉格朗日函数函数改为:
$$L(P,w) = \sum_{x,y}^{}\tilde{P}(x)P(y|x)\log P(y|x) + w_{0}\left ( 1 - \sum_{x,y}^{}\tilde{P}(x)P(y|x) \right ) + \sum_{i=1}^{s}w_{i}\left ( \sum_{x,y}^{} \tilde{P}(x,y)f_{i}(x,y) - \sum_{x,y}^{}\tilde{P}(x)P(y|x)f_{i}(x,y) \right )$$
其中,$\sum_{xy}^{}P(y|x) = \sum_{i=1}^{p}\sum_{j=1}^{q}P(y_{j} | x_{i})$
考虑一下函数 $L(P,w)$ 有几个变量。首先要明白,每一对 $(x_{i},y_{j})$ 都是已知的(给定训练集),但是它们在总体中出现的概率是未知的,所以 $P(y_{j} | x_{i})$
是变量,$w_{0},w_{1},...,w_{s}$,所以变量总共有:
$$pq + s + 1$$
原始问题记为:
$$\min_{P} \; \max_{w} \; L(P,w)$$
下面考虑其对偶问题,如果不懂可先阅读博客:
$$\max_{w} \; \min_{P} \; L(P,w)$$
对式子中的变量 $P(y_{j} | x_{i})$ 求偏导可得:
$$\frac{\partial L(P,w)}{\partial P(y_{j} | x_{i})} = \tilde{P}(x_{i}) \left (\log P(y_{j}|x_{i}) + 1 - w_{0} - \sum_{k = 1}^{s}w_{k}f_{k}(x_{i},y_{j}) \right )$$
全部写出来应该是下面这样的,总共有 $pq$ 个式子:
$$\frac{\partial L(P,w)}{\partial P(y_{1} | x_{1})} \\
\; \\
\frac{\partial L(P,w)}{\partial P(y_{1} | x_{2})} \\
\vdots \\
\frac{\partial L(P,w)}{\partial P(y_{1} | x_{p})} \\
---------------\; \\
\frac{\partial L(P,w)}{\partial P(y_{2} | x_{1})} \\
\; \\
\frac{\partial L(P,w)}{\partial P(y_{2} | x_{2})} \\
\vdots \\
\frac{\partial L(P,w)}{\partial P(y_{2} | x_{p})} \\
\vdots $$
令 $\frac{\partial L(P,w)}{\partial P(y_{j} | x_{i})} = 0$,可得
$$P(y_{j} | x_{i}) = \frac{e^{\sum_{k = 1}^{s}w_{k}f_{k}(x_{i},y_{j})}}{e^{1-w_{0}}}$$
因为 $\sum_{j = 1}^{q}P(y_{j} | x_{i}) = 1$,所以有
$$\sum_{j = 1}^{q}\frac{e^{\sum_{k = 1}^{s}w_{k}f_{k}(x_{i},y_{j})}}{e^{1-w_{0}}} = \frac{\sum_{j = 1}^{q}e^{\sum_{k = 1}^{s}w_{k}f_{k}(x_{i},y_{j})}}{e^{1-w_{0}}} = 1 \\
\Rightarrow e^{1-w_{0}} = \sum_{j = 1}^{q}e^{\sum_{k = 1}^{s}w_{k}f_{k}(x_{i},y_{j})}$$
所以最终得到
$$P(y | x) = \frac{e^{\sum_{k = 1}^{s}w_{k}f_{k}(x,y)}}{Z_{w}(x)} \\
Z_{w}(x) = \sum_{y}^{}e^{\sum_{k = 1}^{s}w_{k}f_{k}(x,y)}$$
我们将所求得的所有 $P(y|x)$ 代入函数 $L(P,w)$,就可以得到一个只关于 $w$ 的函数 $\min_{P}L(P,w)$,然后求其极大值对应的 $w$。
下面我们就代入看看,首先有
$$\log P(y | x) = \sum_{k = 1}^{s}w_{k}f_{k}(x,y) - \log Z_{w}(x)$$
所以
$$\Phi(w) = \sum_{x,y}^{}\tilde{P}(x)P(y|x)\log P(y|x) + \sum_{i=1}^{s}w_{i}\left ( \sum_{x,y}^{} \tilde{P}(x,y)f_{i}(x,y) - \sum_{x,y}^{}\tilde{P}(x)P(y|x)f_{i}(x,y) \right ) \\
= \sum_{x,y}^{}\tilde{P}(x,y)\sum_{i=1}^{s}w_{i}f_{i}(x,y) + \sum_{x,y}^{}\tilde{P}(x)P(y|x)\left ( \log P(y|x) - \sum_{i=1}^{s}w_{i}f_{i}(x,y) \right ) \\
= \sum_{x,y}^{}\tilde{P}(x,y)\sum_{i=1}^{s}w_{i}f_{i}(x,y) - \sum_{x,y}^{}\tilde{P}(x)P(y|x)\log Z_{w}(x) \\
= \sum_{x,y}^{}\tilde{P}(x,y)\sum_{i=1}^{s}w_{i}f_{i}(x,y) - \sum_{x}^{}\tilde{P}(x) \log Z_{w}(x)$$
然后求其极大值对应的 $w$,求出来后再代入 $P(y | x)$ 就得到最大熵模型的条件概率分布。