如何理解最大熵模型里面的特征?

一般的机器学习算法都是先表示样本,然后对标注值进行回归。 最大熵模型里面的特征看起来是x和y的联合分布函数,该怎么理解呢? 而且,从最终的模型形式上来…
关注者
475
被浏览
76,199

13 个回答

题主提出了一个好问题。这个问题的核心是找到下面两者的联系:

  1. 仅仅对输入抽取特征。即特征函数为\mathbf{f}(\mathbf{x})
  2. 对输入和输出同时抽取特征。即特征函数为\mathbf{f}(\mathbf{x}, y)

要看清二者的关系,一个简单的办法就是去考察题主提到的最大熵模型logistic 回归模型。确切地说,看看怎么把最大熵模型推导成 logistic 回归模型就可以了。

最大熵模型定义了在给定输入变量\bf x时,输出变量y的条件分布:

P(y | \mathbf{x}, \boldsymbol\theta) = \frac{ \exp\left( \boldsymbol\theta \cdot \mathbf{f}(\mathbf{x}, y) \right) }{ \sum_{\mathbf{y} \in \textit{Dom}(y)} { \exp\left( \boldsymbol\theta \cdot \mathbf{f}(\mathbf{x}, y) \right) } }

此处\textit{Dom}(y)y所有可能取值的集合。

如果我们限定y为二元变量,即\textit{Dom}(y) = \{ y_0, y_1 \},那么就可以把最大熵模型转换为 logistic 回归模型。我们还需要定义特征函数为

\bf{f} ({\bf{x}},y) = \left\{ \begin{array}{*{20}{c}} {{\bf{g}}({\bf{x}})}&{y = {y_1}}\\ {\bf{0}}&{y = {y_0}} \end{array} \right.

即仅在y=y_1时抽取\bf x的特征。在y=y_0时不抽任何特征(直接返回全为 0 的特征向量)。

将这个特征函数带回最大熵模型,我们得到当y=y_1

\begin{align} P(y_1 | \mathbf{x}) &= \frac{ \exp\left( \boldsymbol\theta \cdot \mathbf{f}(\mathbf{x},y_1) \right) }{ \exp\left( \boldsymbol\theta \cdot \mathbf{f}(\mathbf{x},y_0) \right) + \exp\left( \boldsymbol\theta \cdot \mathbf{f}(\mathbf{x},y_1) \right) } & \text{最大熵模型定義} \\ &= \frac{ \exp\left( \boldsymbol\theta \cdot \mathbf{g}(\mathbf{x}) \right) }{ \exp\left( \boldsymbol\theta \cdot \mathbf{0} \right) + \exp\left( \boldsymbol\theta \cdot \mathbf{g}(\mathbf{x}) \right) } & \text{特徵函數 \textbf{f} 的定義} \\ &= \frac{ \exp\left( \boldsymbol\theta \cdot \mathbf{g}(\mathbf{x}) \right) }{ 1 + \exp\left( \boldsymbol\theta \cdot \mathbf{g}(\mathbf{x}) \right) } & e^0 = 1 \\ &= \frac{ 1 }{ \exp\left(-\boldsymbol\theta \cdot \mathbf{g}(\mathbf{x}) \right) + 1 } & \text{分子分母同除以} \exp\left( \boldsymbol\theta \cdot \mathbf{g}(\mathbf{x}) \right) \\ &= \sigma\left( \boldsymbol\theta \cdot \mathbf{g}(\mathbf{x}) \right) & \text{logistic 函數定義} \end{align}

y=y_0

\begin{align} P(y_0 | \mathbf{x}) &= \frac{ \exp\left( \boldsymbol\theta \cdot \mathbf{f}(\mathbf{x},y_0) \right) }{ \exp\left( \boldsymbol\theta \cdot \mathbf{f}(\mathbf{x},y_0) \right) + \exp\left( \boldsymbol\theta \cdot \mathbf{f}(\mathbf{x},y_1) \right) } \\ &= \frac{ \exp\left( \boldsymbol\theta \cdot \mathbf{0} \right) }{ \exp\left( \boldsymbol\theta \cdot \mathbf{0} \right) + \exp\left( \boldsymbol\theta \cdot \mathbf{g}(\mathbf{x}) \right) } \\ &= \frac{ 1 }{ 1 + \exp\left( \boldsymbol\theta \cdot \mathbf{g}(\mathbf{x}) \right) }\\ &= \frac{ \exp\left(-\boldsymbol\theta \cdot \mathbf{g}(\mathbf{x}) \right) }{ \exp\left(-\boldsymbol\theta \cdot \mathbf{g}(\mathbf{x}) \right) + 1 } \\ &= 1 - P(y_1 | \mathbf{x}) \end{align}

我们发现,当类标签(class label)只有两个的时候,最大熵模型就是 logistic 回归模型。

表面上看,logistic 回归模型里面的特征函数的确只考虑\bf x不考虑y。然而通过上面的推导,我们发现其实\bf g抽取的特征仅仅在y=y_1时被用到。

另外,logistic 回归模型当然有特征的概念。给模型一句自然语言,它肯定不认识。我们必须抽出像 n 元组(n-gram)、 词性(part-of-speech tag)等特征,才能把数据传给模型。特征函数无非就是模型的「眼睛」。

没错,一般说的“特征”都是指输入的特征,而最大熵模型中的“特征”指的是输入和输出共同的特征。

最大熵模型中的每个特征会有一个权重,你可以把它理解成这个特征所描述的输入和输出有多么倾向于同时出现。

可以以多类logistic regression为例,来感受一下两种视角的不同。

在一般的视角下,每条输入数据会被表示成一个n维向量,可以看成n个特征。而模型中每一类都有n个权重,与n个特征相乘后求和再经过softmax的结果,代表这条输入数据被分到这一类的概率。

在最大熵模型的视角下,每条输入的n个“特征”与k个类别共同组成了nk个特征,模型中有nk个权重,与特征一一对应。每个类别会触发nk个特征中的n个,这n个特征的加权和经过softmax,代表输入被分到各类的概率。