改进迭代尺度法 (Improved Iterative Scaling, IIS)
1. 最大熵模型回顾与优化目标
在最大熵模型中,我们关注的是条件概率分布 P(y∣x),其形式为:
P(y∣x;w)=Z(x,w)1exp(∑j=1kwjfj(x,y))
其中:
- w=(w1,…,wk) 是我们希望学习的权重向量,每个 wj 对应一个特征函数 fj(x,y)。
- fj(x,y) 是二值特征函数,表示输入 x 和输出 y 是否满足特定条件(通常取 0 或 1)。
- Z(x,w)=∑y′exp(∑j=1kwjfj(x,y′)) 是归一化因子(配分函数),确保对所有可能的 y′ 求和时 P(y′∣x;w)=1。
我们的优化目标是最大化训练数据集的对数似然函数 L(w)。假设训练数据集中的样本 (x,y) 服从经验分布 P~(x,y),则对数似然函数为:
L(w)=∑x,yP~(x,y)logP(y∣x;w)
将 P(y∣x;w) 的定义代入:
L(w)=∑x,yP~(x,y)(∑j=1kwjfj(x,y)−logZ(x,w))
L(w)=∑x,yP~(x,y)∑j=1kwjfj(x,y)−∑x,yP~(x,y)logZ(x,w)
解释:第二项中 logZ(x,w) 只依赖于 x,不依赖于 y。因此 ∑yP~(x,y)logZ(x,w)=P~(x)logZ(x,w)(因为 ∑yP~(x,y)=P~(x))。所以:
L(w)=∑x,yP~(x,y)∑j=1kwjfj(x,y)−∑xP~(x)logZ(x,w)
我们的目标是找到 w 来最大化 L(w)。
2. 似然函数增量与辅助函数的构建
IIS 算法通过迭代地更新权重 w。假设当前权重为 w,我们希望找到一个更新量 δ=(δ1,…,δk),使得新的权重 w+δ 能够提高似然函数值。
我们考虑似然函数的增量 L(w+δ)−L(w):
L(w+δ)−L(w)=∑x,yP~(x,y)(∑j=1k(wj+δj)fj(x,y)−logZ(x,w+δ))−∑x,yP~(x,y)(∑j=1kwjfj(x,y)−logZ(x,w))
展开并合并相似项:
L(w+δ)−L(w)=∑x,yP~(x,y)∑j=1kδjfj(x,y)−∑xP~(x)(logZ(x,w+δ)−logZ(x,w))
L(w+δ)−L(w)=∑x,yP~(x,y)∑j=1kδjfj(x,y)−∑xP~(x)log(Z(x,w)Z(x,w+δ))
解释:这是似然函数增量的精确表达式。我们现在需要找到它的一个下界,构建一个更容易最大化的辅助函数。
关键不等式应用:
我们使用基本不等式:对于任何实数 α>0,有 −logα≥1−α。
解释:这个不等式可以通过对函数 ϕ(t)=t−1−logt 求导并分析其最小值来证明。 ϕ′(t)=1−1/t。当 t=1 时 ϕ′(t)=0,此时 ϕ(1)=1−1−log1=0。因此 ϕ(t)≥0,即 t−1≥logt,或者 −logt≥1−t。
我们将 α=Z(x,w)Z(x,w+δ) 代入上述不等式:
−log(Z(x,w)Z(x,w+δ))≥1−Z(x,w)Z(x,w+δ)
将此不等式代回到似然函数增量表达式中:
L(w+δ)−L(w)≥∑x,yP~(x,y)∑j=1kδjfj(x,y)+∑xP~(x)(1−Z(x,w)Z(x,w+δ))
L(w+δ)−L(w)≥∑x,yP~(x,y)∑j=1kδjfj(x,y)+∑xP~(x)−∑xP~(x)Z(x,w)Z(x,w+δ)
解释:∑xP~(x)=1,所以第二项为 1。
现在我们展开 Z(x,w)Z(x,w+δ):
Z(x,w)Z(x,w+δ)=Z(x,w)∑y′exp(∑j(wj+δj)fj(x,y′))
=Z(x,w)∑y′exp(∑jwjfj(x,y′))exp(∑jδjfj(x,y′))
解释:利用指数的性质 exp(A+B)=exp(A)exp(B)。
我们知道 P(y′∣x;w)=Z(x,w)exp(∑jwjfj(x,y′))。所以 exp(∑jwjfj(x,y′))=P(y′∣x;w)Z(x,w)。
代入上式:
Z(x,w)Z(x,w+δ)=Z(x,w)∑y′P(y′∣x;w)Z(x,w)exp(∑jδjfj(x,y′))
=∑y′P(y′∣x;w)exp(∑jδjfj(x,y′))
解释:归一化因子 Z(x,w) 被约去。
将此结果代回到似然函数增量下界表达式中,我们得到辅助函数 A(δ):
A(δ)=∑x,yP~(x,y)∑j=1kδjfj(x,y)+1−∑xP~(x)∑y′P(y′∣x;w)exp(∑j=1kδjfj(x,y′))
解释:这个 A(δ) 是我们通过最大化它来间接最大化 L(w) 的函数。请注意,这里 δ 是一个向量,所有 δj 都出现在指数项的求和中。
3. 最大化辅助函数
为了最大化 A(δ),我们对其关于每个 δi 求偏导数,并令其等于零。
∂δi∂A(δ)=0
我们对 A(δ) 的各项分别求偏导:
-
第一项 ∑x,yP~(x,y)∑j=1kδjfj(x,y) 对 δi 求偏导:
∂δi∂(∑x,yP~(x,y)∑j=1kδjfj(x,y))
解释:只有当求和符号中的 j 等于 i 时,δj 项才依赖于 δi。其他项是常数,求导为零。
=∑x,yP~(x,y)fi(x,y)
解释:这正是特征 fi 在经验分布上的期望 EP~[fi]。
-
第二项 1 对 δi 求偏导:
为 0。
-
第三项 −∑xP~(x)∑y′P(y′∣x;w)exp(∑j=1kδjfj(x,y′)) 对 δi 求偏导:
−∂δi∂(∑xP~(x)∑y′P(y′∣x;w)exp(∑j=1kδjfj(x,y′)))
解释:求和符号前的项和 P(y′∣x;w) 都是常数。我们主要对指数项 exp(⋅) 求导。根据链式法则, ∂z∂exp(h(z))=exp(h(z))∂z∂h(z)。在这里,h(δ)=∑j=1kδjfj(x,y′)。
∂δi∂(∑j=1kδjfj(x,y′))=fi(x,y′)
解释:只有当 j=i 时,δjfj(x,y′) 依赖于 δi。
所以,第三项的偏导数为:
=−∑xP~(x)∑y′P(y′∣x;w)exp(∑j=1kδjfj(x,y′))⋅fi(x,y′)
解释:这就是模型期望的一个变体,其中包含了指数项。
将所有偏导数结果合并,并令其为零:
∑x,yP~(x,y)fi(x,y)−∑xP~(x)∑y′P(y′∣x;w)exp(∑j=1kδjfj(x,y′))fi(x,y′)=0
重新排列,得到每个 δi 需要满足的方程:
EP~[fi]=∑xP~(x)∑y′P(y′∣x;w)fi(x,y′)exp(∑j=1kδjfj(x,y′))
问题:
请注意这个方程,对于要解的 δi,它仍然存在于指数项内部的求和 ∑j=1kδjfj(x,y′) 中,这意味着 δi 是与其他所有 δj 耦合在一起的。我们不能直接独立地求解每个 δi。每次迭代都需要解一个包含所有 δj 的复杂非线性方程组,这实际上是比牛顿法(需要Hessian)更困难的问题。
这与标准的 IIS 算法(或其更常见的推导)略有不同。标准的 IIS 引入了一个额外的数学技巧来解耦这些 δj 项,使其可以独立求解。
4. 标准 IIS 的核心技巧:解耦 δ (引入 f#(x,y))
为了能够独立地求解每个 δi,标准的 IIS 引入了特征总和函数 f#(x,y)。
定义 f#(x,y)=∑j=1kfj(x,y),表示样本 (x,y) 中所有激活特征的数量。
为了保证后续推导的有效性,IIS 通常要求 f#(x,y) 对于所有 (x,y) 样本是一个常数 M。如果不是,可以通过引入一个虚拟特征 f0(x,y)=M−∑j=1kfj(x,y) 来实现,其中 M 是一个大于或等于所有样本最大特征总和的常数。这样,新的特征总和就变成了恒定的 M。
标准的 IIS 算法使用一个更精巧的下界替换:
log∑y′P(y′∣x;w)exp(∑jδjfj(x,y′))
通常被替换为以下形式的下界(这里省略了详细的推导,它涉及到将 exp(∑jδjfj) 分解成 ∏jexp(δjfj),并使用加权几何平均值或 Jensen 不等式的一个特定变体):
∑y′P(y′∣x;w)∑j=1kf#(x,y′)fj(x,y′)δjf#(x,y′)
更具体地,标准的 IIS 辅助函数 A(δ) 的形式是:
A(δ)=∑x,yP~(x,y)∑j=1kδjfj(x,y)−∑xP~(x)∑y′P(y′∣x;w)∑j=1kf#(x,y′)fj(x,y′)exp(δjf#(x,y′))
解释:
- 这个辅助函数中的指数项变成了 exp(δjf#(x,y′)),关键在于指数内部的 δj 被解耦了,不再是 ∑jδjfj(x,y′)。
- 这里的 f#(x,y′)fj(x,y′) 扮演了权重或概率的角色。
现在,对这个标准 IIS 辅助函数关于 δi 求偏导数并令其为零:
-
第一项的导数与之前相同: ∑x,yP~(x,y)fi(x,y)=EP~[fi]。
-
第二项(负号后面的大求和项)对 δi 求偏导:
−∂δi∂(∑xP~(x)∑y′P(y′∣x;w)∑j=1kf#(x,y′)fj(x,y′)exp(δjf#(x,y′)))
解释:只有当内部求和中的 j=i 时,项才依赖于 δi。
=−∑xP~(x)∑y′P(y′∣x;w)f#(x,y′)fi(x,y′)⋅∂δi∂(exp(δif#(x,y′)))
=−∑xP~(x)∑y′P(y′∣x;w)f#(x,y′)fi(x,y′)⋅f#(x,y′)exp(δif#(x,y′))
解释:这里的 f#(x,y′) 项可以被约去。
=−∑xP~(x)∑y′P(y′∣x;w)fi(x,y′)exp(δif#(x,y′))
将两部分求导结果结合,并令其等于零:
EP~[fi]−∑xP~(x)∑y′P(y′∣x;w)fi(x,y′)exp(δif#(x,y′))=0
重新排列,得到标准 IIS 的核心更新方程:
EP~[fi]=∑xP~(x)∑y′P(y′∣x;w)fi(x,y′)exp(δif#(x,y′))
解释:现在,对于每个特征 fi,这个方程中待解的 δi 只出现在它自己的指数项中,而没有与其他 δj 耦合。这意味着我们可以为每个 i 独立地求解一个单变量非线性方程。
5. 求解每个 δi 的方程
对于每个特征 fi,我们需要求解形如 A=B⋅exp(C⋅δi) 的方程,其中 A,B,C 都是常数。更准确地说,是:
EP~[fi]=∑xP~(x)∑y′P(y′∣x;w)fi(x,y′)exp(δif#(x,y′))
令 Cx,y′=P~(x)P(y′∣x;w)fi(x,y′) 和 Dx,y′=f#(x,y′).
则方程可以写成:
EP~[fi]=∑x,y′Cx,y′exp(δiDx,y′)
这是一个关于 δi 的超越方程,通常不能解析求解,但可以通过单变量数值方法高效求解。最常用的方法是:
- 牛顿法(求根):
定义函数 G(δi)=∑x,y′Cx,y′exp(δiDx,y′)−EP~[fi]。
目标是找到 δi 使得 G(δi)=0。
迭代公式: δinew=δiold−G′(δiold)G(δiold)。
其中 G′(δi)=∑x,y′Cx,y′Dx,y′exp(δiDx,y′)。
(这里的 G(δi) 和 G′(δi) 都可以高效计算)。
6. 改进迭代尺度法 (IIS) 算法步骤
- 数据预处理与初始化:
- 计算所有特征函数 fj(x,y) 在训练数据上的经验期望 EP~[fj]。
- 确定一个常数 M,使得对于所有 (x,y),激活特征的总和 f#(x,y)=∑j=1kfj(x,y)≤M。如果 f#(x,y) 不恒定,则引入一个虚拟特征 f0(x,y)=M−∑j=1kfj(x,y)。此时特征总数变为 k+1,且新的 f#(x,y)=∑j=0kfj(x,y)=M。为 f0 引入权重 w0。
- 初始化所有权重 wj=0 (或随机小值)。
- 迭代过程 (直到收敛):
a. 计算当前模型期望:对于训练数据中的每个 (x,y′) 对,计算当前权重 w 下的模型条件概率 P(y′∣x;w)。
b. 计算每个特征的更新量 δj:
对于每个特征 j=0,1,…,k:
* 构建单变量非线性方程:
EP~[fj]=∑xP~(x)∑y′P(y′∣x;w)fj(x,y′)exp(δjf#(x,y′))
* 使用牛顿法(求根)或其他数值方法,求解此方程得到 δj。
c. 更新权重:
对于每个特征 j=0,1,…,k:
* wj←wj+δj。
d. 检查收敛:如果所有 δj 的绝对值都小于一个预设的小阈值,或者对数似然函数的增量小于一个阈值,则算法停止。
7. 总结
- 目标:最大化最大熵模型的对数似然函数。
- 核心策略:通过构造一个辅助函数 A(δ) 作为似然函数增量的下界,并通过迭代最大化这个下界来逐步提升似然函数。
- 辅助函数推导(关键不等式):
- 最初的推导利用了 −logα≥1−α 这个基本不等式,导致了辅助函数 A(δ)=∑x,yP~(x,y)∑j=1kδjfj(x,y)+1−∑xP~(x)∑y′P(y′∣x;w)exp(∑j=1kδjfj(x,y′))。
- 重要提示:直接使用这个辅助函数求导后得到的方程中,δj 仍然与其他 δl 耦合在指数内部的求和中,使得每个 δj 无法独立求解。
- 标准 IIS 的解耦技巧:
- 引入特征总和函数 f#(x,y)=∑j=1kfj(x,y),并通过可能引入虚拟特征 f0(x,y) 来保证 f#(x,y) 为常数 M。
- 利用一个更精巧的辅助函数构建方法(它导致了不同的下界),使得指数项中的 δj 被解耦为 exp(δjf#(x,y′)) 形式。
- 由此得到的每个 δj 的更新方程是单变量的:
EP~[fj]=∑xP~(x)∑y′P(y′∣x;w)fj(x,y′)exp(δjf#(x,y′))
- 求解 δj:由于是单变量非线性方程,可以使用**牛顿法(求根)**等数值方法高效求解。
- 优点:
- 无需计算和存储 Hessian 矩阵:避免了牛顿法在高维问题上的计算瓶颈。
- 每次迭代保证似然函数增加:算法具有收敛性保证,能收敛到全局最优解(因为最大熵的对数似然函数是凸函数)。
- 比梯度下降快:通常比朴素的梯度下降法收敛更快。
- 缺点:
- 计算复杂:每次迭代需要对每个特征求解一个非线性方程,这仍然是计算密集型的。
- 虚拟特征的引入:为了满足 f#(x,y) 为常数的条件,可能需要引入虚拟特征,这增加了模型的复杂性。
- 不如L-BFGS流行:在现代大规模机器学习任务中,L-BFGS 通常被认为是更有效和更常用的优化最大熵模型的方法。