标签存档: 概率

[学习笔记] Logistic 回归

本文为 Stanford 的机器学习公开课第三周的笔记,不过和上课内容的细节有些出入。

Logistic 回归解决的并不是回归问题,而是分类问题,即目标变量(target variable)的值是离散而非连续的。这时目标变量也可称为标签(label)。如果仍用线性回归硬搞,得到的结果会非常不靠谱。

我们先考虑简单的情况:数据点只有 0 和 1 两个标签(binary classification),即 \( y \in \{0,1\} \),且大致上是线性可分的(linearly separable)。如图:

那么现在问题就是要找到一个 \(\theta\),使得直线 \(\theta^{\rm T} x = 0\) [1] 能够将上面图中的 positive 和 negative 两类数据点“分开”;这样的一条直线称为决策边界(decision boundary)。——但具体什么叫“分开”?或者说,如果已知 \(\theta\),对于一个标签未知的数据点 \(x\),怎么判断它是 positive 还是 negative?

直观上看,在给定 \(\theta\) 和 \(x\) 的情况下,\(y\) 应该满足一个 0-1 分布,即
$$ y|x;\theta \sim Bernoulli\big(\phi(\theta^{\rm T} x)\big) $$
其中 \( \phi(\theta^{\rm T} x) = P(y = 1|x;\theta) \) 应该满足:

  1.  \( 0 \leq \phi(\theta^{\rm T} x) \leq 1 \)
  2. 若 \(\theta^{\rm T} x > 0\),我们可以认为 \( y=1 \) 的可能性相对更大,即 \( \phi(\theta^{\rm T} x) > 0.5 \),且如果数据点离边界越远,即 \(\theta^{\rm T} x\) 越大, \(\phi(\theta^{\rm T} x)\) 也应该越大。
  3. 反之,若 \(\theta^{\rm T} x < 0\),则 \( \phi(\theta^{\rm T} x) < 0.5 \),且随 \(\theta^{\rm T} x\) 减小而减小。
  4. 当 \(\theta^{\rm T} x = 0\) 时,点落在决策边界上,我们无从判断它的标签 \(y\),因此 \( \phi(\theta^{\rm T} x) = 0.5 \)。

那 \(\phi\) 应该取什么样的函数呢?我们知道 logistic 函数恰巧满足上述条件,不妨就取它(“logistic 回归”也因此得名)[2]。即:
$$ \phi(z) = \frac{1}{1+\exp(-z)} $$
logistic 函数的图像是:

可以直观地看到它确实是满足我们要求的。这样我们就得到了:
$$ P(y = 1|x;\theta) = \phi(\theta^{\rm T} x) = \frac{1}{1+\exp(-\theta^{\rm T} x)} $$
我们记 \( h_\theta(x) = P(y = 1|x;\theta) \),表示这是我们希望预测的量,也就是模型的假设(hypothesis) [3]。在实际分类应用中,\(h_\theta(x) > 0.5\) 时我们可以给出判断 \(y = 1\) ,\(h_\theta(x) < 0.5\) 时 \(y = 0\) ,\(h_\theta(x) = 0.5\) 的话就蒙一个吧。

接下来 \(\theta\) 该怎么求呢?根据log极大似然法,可知 \(\theta\) 的最优值就是 \(\arg\max_\theta L(\theta)\),其中
$$
\begin{eqnarray}
L(\theta) &=& \log \prod_i P(y^{(i)}|x^{(i)};\theta) \\
&=& \log \prod_i h_\theta(x^{(i)})^{y^{(i)}} \big(1-h_\theta(x^{(i)})\big)^{1-y^{(i)}} \\
&=& \sum_i y^{(i)} \log h_\theta(x^{(i)}) + (1-y^{(i)}) \log h_\theta(1-x^{(i)})
\end{eqnarray}
$$
其中第二步有点小 tricky。注意到 \( h_\theta(x)^y \big(1-h_\theta(x)\big)^{1-y} \) 在 \(y=0\) 时值为 \(h_\theta(x)^y\),在 \(y=1\) 时值为 \(\big(1-h_\theta(x)\big)^{1-y}\)。这样就把 \(y\) 两种取值的情况合并写在一个式子里了。

接下来我们可以求出梯度 \(\nabla_\theta L(\theta)\)。如果我们像上篇笔记中一样定义:
$$
X := \begin{pmatrix} (x^{(1)})^{\rm T} \\ (x^{(2)})^{\rm T} \\ \vdots \\ (x^{(m)})^{\rm T} \end{pmatrix} \quad
\vec{y} := \begin{pmatrix} y^{(1)} \\ y^{(2)} \\ \vdots \\ y^{(m)} \end{pmatrix} \quad
\vec{h_\theta} := \begin{pmatrix} h_\theta(x^{(1)}) \\ h_\theta(x^{(2)}) \\ \vdots \\ h_\theta(x^{(m)}) \end{pmatrix}
$$
可以推导得到:
$$ \nabla_\theta L(\theta) = \frac{1}{m} X^{\rm T} (\vec{y} – \vec{h_\theta}) $$
接下来,根据梯度上升算法 [4],我们就可以迭代计算下式来逼近 \(\arg\max_\theta L(\theta)\):
$$
\begin{eqnarray}
\theta_{t+1} &:=& \theta_t + \alpha \nabla_\theta L(\theta) \\
&=& \theta_t – \frac{\alpha}{m} X^{\rm T} (\vec{h_\theta} – \vec{y})
\end{eqnarray}
$$
注意到这个更新式的形式和之前线性规划+最小二乘法+梯度下降得到是一样的,只是 \(\vec{h_\theta}\) 变了。

以上就是用梯度上升做 Logistic 回归的算法了。课上还谈到了另外 3 个问题:

  1. 如果要把 Logistic 回归推广到多个分类的情况,可以利用一种叫“1 vs all”的方法。具体地说,即每次取一个分类为 positive,其它分类都为 negative。这样针对每一个分类都学习得到一个 Logistic 回归模型。要判断一个新数据点的标签,用每一个模型都测一下,取对应 \( h_\theta(x) \) 最大的分类为预测结果。
  2. 如果数据点不是线性可分的,类似线性回归到多项式回归(polynomial regression)的推广,可以将同一属性次数不同的项看成是彼此独立的,再和普通 Logistic 回归问题一样处理。
  3. 属性过多可能会造成模型过分复杂,导致过拟合问题。关于 overfit 和 underfit 的问题可以参见这篇文章的 3~6 段,这位学长讲得非常深入浅出了。课上提到的一种解决方法叫 regularization,即对 \(\theta\) 中希望加以限制的各项 \(\theta_i\),在 \(L(\theta)\) 后加上 \(-\lambda \theta_i^2 \),使这些值过大时“惩罚”目标函数。这里 \(\lambda > 0\) 的取值也要注意,如果取得太小解决不了过拟合问题,但取得太大又会造成 underfit。

p.s. 今天早睡的目标又达成失败了……………………


脚注:
  1. [1] 和上节线性规划中一样,每个 \(x^{(i)}\) 是一个 \(n+1\) 维向量,为书写简便我们在 \(n\) 个属性前再加一维 \(x^{(i)}_0=1\)。
  2. [2] 这里说“不妨”似乎有点太随意了。事实上,如果假设在给定 \(x\) 的情况下 \(y\) 服从 0-1 分布,那么\(\phi\) 取 logistic 函数实际上可以由广义线性模式(Generalized linear model)的假设推导得出。
  3. [3] 注意到和上节课讲的线性回归一样,我们要预测的 \(h_\theta(x)\) 其实都是期望 \(E_{y|x;\theta}\)。
  4. [4] 由于这里要求的是 \(L(\theta)\) 的最大值,因此是梯度上升而非梯度下降。课程视频中取要最小化的目标函数\(J(\theta)=-L(\theta)\),因此是梯度下降。实际是一回事。

[学习笔记] Expectation-Maximization(EM) 算法


果然还是有必要保持记笔记的习惯呐。前两天实验室讲 pLSA 的推导,用到 EM 竟然完全记不清了,竟然还把 Jensen 不等式和 SVM 的 minmax=maxmin 什么的记混= = (这么一说 SVM 具体怎么回事也记不清了。。。)赶紧补一篇复习笔记。

Expectation-Maximization 算法是统计学中用来给带隐含变量的模型做最大似然(和最大后验概率)的一种方法。EM 的应用特别广泛,经典的比如做概率密度估计用的 Gaussian Mixture Model。这两天我或许还会写 pLSA 的笔记放上来,也是 EM 应用的例子。

下面我会先解释 EM 算法要解决的问题,然后直接给出算法的过程,最后再说明算法的正确性。

问题

首先我们定义要解决的问题。给定一个训练集 \(X=\{x^{(1)},…,x^{(m)}\}\),我们希望拟合包含隐含变量 \(z\) 的模型 \(P(x,z;\theta)\) 中的参数 \(\theta\)。根据模型的假设,每个我们观察到的 \(x^{(i)}\) 还对应着一个我们观察不到的隐含变量 \(z^{(i)}\),我们记 \(Z=\{z^{(1)},…,z^{(m)}\}\)。做最大对数似然就是要求 \( \theta \) 的“最优值”:$$\theta=\arg\max_\theta{L(\theta;X)}$$ 其中 $$L(\theta;X)=log{P(X;\theta)}=\log{\sum_Z P(X,Z;\theta)}$$

想用这个\(\log\)套\(\sum\)的形式直接求解 \(\theta\) 往往非常困难。而如果能观察到隐含变量 \(z\) ,求下面的似然函数的极大值会容易许多:$$L(\theta;X,Z)=\log{P(X, Z;\theta)}$$

问题是实际上我们没法观察到 \(z\) 的值,只能在给定 \(\theta\) 时求 \(z\) 的后验概率 \(P(z|x;\theta)\) [1]。EM 算法就可以帮我们打破这样的困境。

算法

下面给出 EM 算法的过程。其中\(\theta_t\) 是第 t-1 次迭代时算出的 \(\theta\) 值;\(\theta_0\) 为任意初值。

Repeat until converge {

  1. (E-step) Calculate \( P(Z|X;\theta_t) \), in order to get:
    $$
    \begin{eqnarray}
    E_{Z|X;\theta_t}[L(\theta;X,Z)] &:=& E_{Z|X;\theta_t}[\log{P(X,Z;\theta)}] \\
    &=& \sum_Z P(Z|X;\theta_t) \log{P(X,Z;\theta)}
    \end{eqnarray}
    $$
  2. (M-step) $$\theta_{t+1} := \arg\max_\theta E_{Z|X;\theta_t}[\log{P(X,Z;\theta)}]$$

}

对,就这么短。所以我总觉得称之为 algorithm 不如称之为 method 更恰当。上面的过程在收敛后就得到了我们需要的 \( \theta=\arg\max_\theta{L(\theta;X)} \) [2]

先简单说说这短短两步都做了些啥。EM 算法每次迭代都建立在上轮迭代对 \(\theta\) 的最优值的估计 \(\theta_t\) 上,利用它可以求出 \(Z\) 的后验概率 \(P(Z|X;\theta_t)\),进而求出 \(L(\theta;X,Z)\) 在分布 \(Z \sim P(Z|X;\theta)\) 上的期望 \(E_{Z|X;\theta_t}[L(\theta;X,Z)]\)。在第一节中我们提到 \( \arg\max_\theta L(\theta;X,Z) \) 在未知 \(Z\) 的情况下难以直接计算,于是 EM 算法就转而通过最大化它的期望 \(E_{Z|X;\theta_t}[L(\theta;X,Z)]\) 来逼近 \(\theta\) 的最优值,得到 \(\theta_{t+1}\) 。注意由于 \(L(\theta;X,Z)\) 的这个期望是在 \(Z\) 的一个分布上求的,这样得到的表达式就只剩下 \(\theta\) 一个未知量,因而绕过了 \(z\) 未知的问题。而 \(\theta_{t+1}\) 又可以作为下轮迭代的基础,继续向最优逼近。算法中 E-step 就是在利用 \(\theta_t\) 求期望 \(E_{Z|X;\theta_t}[L(\theta;X,Z)]\),这就是所谓“Expectation”;M-step 就是通过寻找 \(\theta_{t+1}\) 最大化这个期望来逼近 \( \theta \) 的最优值,这就叫“Maximization”。EM 算法因此得名。

另外,如果数据满足独立同分布的条件,分别枚举 \(z^{(i)}\) 的值可能要比枚举整个 \(Z\) 方便些,可把 \(E_{Z|X;\theta_t}[L(\theta;X,Z)]\) 替换成:
$$
\begin{eqnarray}
\sum_i E_{z^{(i)}|x^{(i)};\theta_t}[L(\theta;x^{(i)},z^{(i)}]
&:=& \sum_i E_{z^{(i)}|x^{(i)};\theta_t}[\log{P(x^{(i)},z^{(i)};\theta)}] \\
&=& \sum_i \sum_{z^{(i)}} P(z^{(i)}|x^{(i)};\theta_t) \log{P(x^{(i)},z^{(i)};\theta)}
\end{eqnarray}
$$

原理

为什么这样 E一步,M一步,一步E,一步M,就能逼近极大似然?具体而言,为什么通过迭代计算 \(\arg\max_\theta E_{Z|X;\theta_t}[L(\theta;X,Z)]\) 可以逼近 \(\theta\) 的最优值 \(\arg\max_\theta L(\theta;X,Z)\)?我们稍后会看到,这是因为每次迭代得到的 \(\theta_{t+1}\) 一定比 \(\theta_t\) 更优,即算法是在对 \(\theta\) 的最优值做单调逼近。

不过首先让我们先抛开最大似然,考虑一个更一般的问题。假设有一个凹函数 \( F(\theta) \),我们想求 \( \arg\max_\theta F(\theta) \),但直接求很困难。不过对于任意给定的 \( \theta_t \),假设我们都能找到 \( F(\theta) \) 的一个下界函数 \( G_{\theta_t}(\theta) \),满足 \( F(\theta) \geq G_{\theta_t}(\theta) \) 且 \( F(\theta_t) = G_{\theta_t}(\theta_t) \) ——我管 \( G_{\theta_t}(\theta) \) 这样的函数叫 \( F \) 的“在 \( \theta_t \) 处相等的下界函数”。现在考虑 \( \theta_{t+1} := \arg\max_\theta G_{\theta_t}(\theta) \),它一定会满足:
$$ F(\theta_{t+1}) \geq G_{\theta_t}(\theta_{t+1}) \geq G_{\theta_t}(\theta_t) = F(\theta_t) $$
也就是说,\( \theta_{t+1} \) 一定比 \( \theta_t \) 更优。而接下来我们又可以用 \( \theta_{t+1} \) 找到一个 \( G_{\theta_{t+1}}(\theta) \),再据此算出比 \( \theta_{t+1} \) 还优的 \( \theta_{t+2} := \arg\max_\theta G_{\theta_{t+1}}(\theta) \) 。如此不断迭代,就能不断步步逼近  \( \theta \) 的最优值了。由此可见,如果对任意 \( \theta_t \) 都能找到 \(F\) 的“在 \( \theta_t \) 处相等的下界函数”\( G_{\theta_t}(\theta) \),我们就得到了一个能单调逼近 \(\theta\) 的最优值的算法:

Repeat until converge {

  1. 找到函数 \( F(\theta) \) 的“在 \( \theta_t \) 处相等的下界函数” \( G_{\theta_t}(\theta) \)
  2. \( \theta_{t+1} := \arg\max_\theta G_{\theta_t}(\theta) \)

}

上面的算法看起来和 EM 算法的每步都分别对应——事实上也正如此。下面是从 PRML 中偷的一张图改的,展示了上述逼近的过程:

现在我们回到最大似然问题 \(\theta=\arg\max_\theta{L(\theta;X)}\) 。如果我们想套用上面的算法来逼近 \( \theta \) 的这个最优解,就需要找到对于每个 \( \theta_t \),函数 \( L(\theta;X) \) 的“在 \( \theta_t \) 处相等的下界函数”。该怎么找呢?让我们从 \( L(\theta) \) 的初始形式开始推导:

$$
\begin{eqnarray}
L(\theta) &=& \log{P(X;\theta)} \\
&=& \log{\sum_Z P(X,Z;\theta)}
\end{eqnarray}
$$

又卡在这个\(\log\)套\(\sum\)的形式上了……我们说过麻烦在于观察不到 \(Z\) 的值,那不妨给它任意引入一个概率分布 \(Q(Z)\) [3],利用分子分母同乘 \(Q(Z)\) 的小 trick,得到:

$$
\begin{eqnarray}
L(\theta) &=& \log{\sum_Z P(X,Z;\theta)} \\
&=& \log{\sum_Z Q(Z) \frac{P(X,Z;\theta)}{Q(Z)}} \\
&=& \log E_{Z \sim Q}\left[ \frac{P(X,Z;\theta)}{Q(Z)} \right]
\end{eqnarray}
$$

根据 Jensen 不等式 [4],对于任意分布 \(Q\) 都有:

$$
L(\theta) = \log E_{Z \sim Q}\left[ \frac{P(X,Z;\theta)}{Q(Z)} \right] \geq E_{Z \sim Q}\left[ \log\frac{P(X,Z;\theta)}{Q(Z)} \right]
$$

且上面的不等式在 \( \frac {P(X,Z;\theta)} {Q(Z)}\) 为常数时取等号。

于是我们就得到了 \( L(\theta;X) \) 的一个下界函数。我们要想套用上面的算法,还要让这个不等式在 \( \theta_t \) 处取等号,这就这要求在 \( \theta = \theta_t \) 时 \( \frac {P(X,Z;\theta)} {Q(Z)}\) 为常数,即 \(Q(Z) \propto P(X,Z;\theta_t)\)。由于 \(Q(Z)\) 是一个概率分布,必须满足 \(\sum_z Q_i(z) = 1\),所以这样的 \(Q(Z)\) 只能是 \(Q(Z) = \frac {P(X,Z;\theta_t)} {\sum_Z P(X,Z;\theta_t)} = P(Z|X;\theta_t)\)。那我们就把 \( Q(Z) = P(Z|X;\theta_t) \) 代入上式,得到:

$$
L(\theta) \geq E_{Z|X;\theta_t}\left[ \log\frac{P(X,Z;\theta)}{P(Z|X;\theta_t)} \right]
$$

且该不等式在 \( \theta = \theta_t \) 时取到等号。那么……\( E_{Z|X;\theta_t}\left[ \log\frac{P(X,Z;\theta)}{P(Z|X;\theta_t)} \right] \) 就是 \( L(\theta;X) \) 的“在 \( \theta_t \) 处相等的下界函数”——这不就是我们要找的么!于是把它塞进本节开始得到的算法里替换“\( G_{\theta_t}(\theta) \)”就可以用啦。也就是说,迭代计算 \( \arg\max_\theta E_{Z|X;\theta_t}\left[ \log\frac{P(X,Z;\theta)}{P(Z|X;\theta_t)} \right] \) 就可以逼近 \( \theta \) 的最优值了。而由于利用 Jensen 不等式的那一步搞掉了\(\log\)套\(\sum\)的形式,它算起来往往要比直接算 \( \arg\max_\theta{L(\theta;X)} \) 容易不少。

我们还可以再做几步推导,得到一个更简单的形式:

$$\begin{eqnarray}
\theta_{t+1}
&:=& \arg\max_\theta E_{Z|X;\theta_t}\left[ \log\frac{P(X,Z;\theta)}{P(Z|X;\theta_t)} \right] \\
&=& \arg\max_\theta \sum_{Z} P(Z|X;\theta_t) \log\frac{P(X,Z;\theta)}{P(Z|X;\theta_t)} \\
&=& \arg\max_\theta \sum_{Z} [P(Z|X;\theta_t)\log P(X,Z;\theta) - P(Z|X;\theta_t) \log P(Z|X;\theta_t)] \\
&=& \arg\max_\theta \sum_{Z} P(Z|X;\theta_t)\log P(X,Z;\theta) \\
&=& \arg\max_\theta E_{Z|X;\theta_t}[\log{P(X,Z;\theta)}]
\end{eqnarray}$$

其中倒数第二步是因为 \(- P(Z|X;\theta_t) \log P(Z|X;\theta_t)]\) 这一项与 \(\theta\) 无关,所以就直接扔掉了。这样就得到了本文第二节 EM 算法中的形式——它就是这么来的。

以上就是 EM 了。至于独立同分布的情况推导也类似。

顺带一提,\( \arg\max_\theta E_{Z|X;\theta_t}[\log{P(X,Z;\theta)}] \) 有时也比较难算。这时我们其实可以退而求其次,不要求这个期望最大化了,只要它在 \( \theta_{t+1} \) 处的值大于在 \( \theta_t \) 处的值就行了。根据上面的推导,这样也能逼近 \( \theta \) 的最优值,只是收敛速度较慢。这就是所谓 GEM (Generalized EM) 算法了。

p.s. MathJax 很神嘛。
p.p.s. 这篇笔记竟然断断续续写写改改了两天多,我对 EM 的认识也越来越清晰。“‘教’是最好的‘学’”真是一点没错。


更新历史:
2011.10.12 重写了“原理”部分,把利用函数的“在 \(\theta_t\) 处相等的下界函数”逼近 \(\theta\) 的最优值的算法单独提到前面说,这样似乎清楚很多。
2011.10.13 修正了对在利用 Jensen 不等式的那一步要取 \( Q(Z) = P(Z|X;\theta_t) \) 的解释


脚注:
  1. [1] 一般可以利用贝叶斯定理
    $$P(z|x;\theta) = \frac{P(x|z;\theta)P(z;\theta)}{\sum_z{P(x|z;\theta)P(z;\theta)}}$$ 而 \(P(x|z;\theta)\) 和 \(P(z;\theta)\) 往往是模型假设的一部分。
  2. [2] 实际上在某些特殊情况下,\(\theta\) 还可能收敛在局部最优点或鞍点上。这时可以多跑几次算法,每次随机不同的 \(\theta_0\),最后取最好的结果。为简明起见,本文忽略这种情况。
  3. [3] \(Q(Z)\) 为概率分布,意即需满足 \(\sum_Z Q(Z) = 1\) 且 \(Q(Z) \geq 0\)
  4. [4] Jensen 不等式:
    \(f\) 为凸函数,\(X\) 为随机变量。则 $$ E[f(X)] \geq f(EX) $$ 若 \(f\) 是严格凸的,则上式取等号当前仅当 \(X\) 为常数。

    在这里 \(\log\) 函数是严格凹的,所以要把上面的不等号方向调转。

学习笔记:概率统计与随机过程

上学期“概率统计与随机过程”课的笔记,用xmind做的思维导图,仅供参考。。

(需要下载才能看到全部内容。层次很深,请多用F6下钻功能)

标签云

豆瓣