<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Codes, Notes &#38; Scribbles &#187; 概率</title>
	<atom:link href="http://blog.tomtung.com/tag/%e6%a6%82%e7%8e%87/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.tomtung.com</link>
	<description>about programming, music and my life</description>
	<lastBuildDate>Sun, 15 Jan 2012 23:59:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>[学习笔记] Logistic 回归</title>
		<link>http://blog.tomtung.com/2011/10/logistic-regression/</link>
		<comments>http://blog.tomtung.com/2011/10/logistic-regression/#comments</comments>
		<pubDate>Tue, 25 Oct 2011 20:08:20 +0000</pubDate>
		<dc:creator>逆铭</dc:creator>
				<category><![CDATA[新长征路上的代码]]></category>
		<category><![CDATA[机器学习]]></category>
		<category><![CDATA[概率]]></category>
		<category><![CDATA[笔记]]></category>
		<category><![CDATA[算法]]></category>

		<guid isPermaLink="false">http://blog.tomtung.com/?p=1138</guid>
		<description><![CDATA[<a href="http://blog.tomtung.com/2011/10/logistic-regression/" title="[学习笔记] Logistic 回归"></a>本文为 Stanford 的机器学习公开课第三周的笔记，不过和上课内容的细节有些出入。 Logistic 回归解决的并不是回归问题，而是分类问题，即目标变量（target variable）的值是离散而非连续的。这时目标变量也可称为标签（label）。如果仍用线性回归硬搞，得到的结果会非常不靠谱。 我们先考虑简单的情况：数据点只有 0 和 1 两个标签（binary classification），即 \( y \in \{0,1\} \)，且大致上是线性可分的（linearly separable）。如图： 那么现在问题就是要找到一个 \(\theta\)，使得直线 \(\theta^{\rm T} x = 0\) 能够将上面图中的 positive 和 negative 两类数据点“分开”；这样的一条直线称为决策边界（decision boundary）。——但具体什么叫“分开”？或者说，如果已知 \(\theta\)，对于一个标签未知的数据点 \(x\)，怎么判断它是 positive 还是 negative？ 直观上看，在给定 \(\theta\) 和 \(x\) &#8230;<p class="read-more"><a href="http://blog.tomtung.com/2011/10/logistic-regression/">继续阅读 &#187;</a></p><hr/><blockquote>
可能你对下面的文章也感兴趣：<ol>
<li><a href='http://blog.tomtung.com/2011/10/linear-regression-gradient-descent/' rel='bookmark' title='[学习笔记] 线性回归（及梯度下降）'>[学习笔记] 线性回归（及梯度下降）</a></li>
<li><a href='http://blog.tomtung.com/2011/10/em-algorithm/' rel='bookmark' title='[学习笔记] Expectation-Maximization(EM) 算法'>[学习笔记] Expectation-Maximization(EM) 算法</a></li>
<li><a href='http://blog.tomtung.com/2011/10/plsa/' rel='bookmark' title='[学习笔记] Probabilistic latent semantic analysis (pLSA)'>[学习笔记] Probabilistic latent semantic analysis (pLSA)</a></li>
</ol></blockquote>]]></description>
			<content:encoded><![CDATA[<a href="http://blog.tomtung.com/2011/10/logistic-regression/" title="[学习笔记] Logistic 回归"></a><p>本文为 <a href="http://www.ml-class.org/" target="_blank">Stanford 的机器学习公开课</a>第三周的笔记，不过和上课内容的细节有些出入。</p>
<p>Logistic 回归解决的并不是回归问题，而是分类问题，即目标变量（target variable）的值是离散而非连续的。这时目标变量也可称为标签（label）。如果仍用线性回归硬搞，得到的结果会非常不靠谱。</p>
<p>我们先考虑简单的情况：数据点只有 0 和 1 两个标签（binary classification），即 \( y \in \{0,1\} \)，且大致上是线性可分的（linearly separable）。如图：<br />
<img class="alignnone" src="http://upload.tomtung.com/img/binary-classification.png" alt="" width="561" height="420" /></p>
<p>那么现在问题就是要找到一个 \(\theta\)，使得直线 \(\theta^{\rm T} x = 0\) <sup>[<a href="#logistic-regression-n-1" class="footnoted" id="to-logistic-regression-n-1">1</a>]</sup> 能够将上面图中的 positive 和 negative 两类数据点“分开”；这样的一条直线称为决策边界（decision boundary）。——但具体什么叫“分开”？或者说，如果已知 \(\theta\)，对于一个标签未知的数据点 \(x\)，怎么判断它是 positive 还是 negative？</p>
<p>直观上看，在给定 \(\theta\) 和 \(x\) 的情况下，\(y\) 应该满足一个<a href="http://en.wikipedia.org/wiki/Bernoulli_distribution" target="_blank"> 0-1 分布</a>，即<br />
$$ y|x;\theta \sim Bernoulli\big(\phi(\theta^{\rm T} x)\big) $$<br />
其中 \( \phi(\theta^{\rm T} x) = P(y = 1|x;\theta) \) 应该满足：</p>
<ol>
<li> \( 0 \leq \phi(\theta^{\rm T} x) \leq 1 \)</li>
<li>若 \(\theta^{\rm T} x &gt; 0\)，我们可以认为 \( y=1 \) 的可能性相对更大，即 \( \phi(\theta^{\rm T} x) &gt; 0.5 \)，且如果数据点离边界越远，即 \(\theta^{\rm T} x\) 越大， \(\phi(\theta^{\rm T} x)\) 也应该越大。</li>
<li>反之，若 \(\theta^{\rm T} x &lt; 0\)，则 \( \phi(\theta^{\rm T} x) &lt; 0.5 \)，且随 \(\theta^{\rm T} x\) 减小而减小。</li>
<li>当 \(\theta^{\rm T} x = 0\) 时，点落在决策边界上，我们无从判断它的标签 \(y\)，因此 \( \phi(\theta^{\rm T} x) = 0.5 \)。</li>
</ol>
<p>那 \(\phi\) 应该取什么样的函数呢？我们知道 <a href="http://en.wikipedia.org/wiki/Logistic_function" target="_blank">logistic 函数</a>恰巧满足上述条件，不妨就取它（“logistic 回归”也因此得名）<sup>[<a href="#logistic-regression-n-2" class="footnoted" id="to-logistic-regression-n-2">2</a>]</sup>。即：<br />
$$ \phi(z) = \frac{1}{1+\exp(-z)} $$<br />
logistic 函数的图像是：<br />
<img src="http://upload.tomtung.com/img/logistic-curve.png" width="320" height="240" /><br />
可以直观地看到它确实是满足我们要求的。这样我们就得到了：<br />
$$ P(y = 1|x;\theta) = \phi(\theta^{\rm T} x) = \frac{1}{1+\exp(-\theta^{\rm T} x)} $$<br />
我们记 \( h_\theta(x) = P(y = 1|x;\theta) \)，表示这是我们希望预测的量，也就是模型的假设（hypothesis） <sup>[<a href="#logistic-regression-n-3" class="footnoted" id="to-logistic-regression-n-3">3</a>]</sup>。在实际分类应用中，\(h_\theta(x) > 0.5\) 时我们可以给出判断 \(y = 1\) ，\(h_\theta(x) < 0.5\) 时 \(y = 0\) ，\(h_\theta(x) = 0.5\) 的话就蒙一个吧。</p>
<p>接下来 \(\theta\) 该怎么求呢？根据log极大似然法，可知 \(\theta\) 的最优值就是 \(\arg\max_\theta L(\theta)\)，其中<br />
$$<br />
\begin{eqnarray}<br />
L(\theta) &amp;=&amp; \log \prod_i P(y^{(i)}|x^{(i)};\theta) \\<br />
&amp;=&amp; \log \prod_i h_\theta(x^{(i)})^{y^{(i)}} \big(1-h_\theta(x^{(i)})\big)^{1-y^{(i)}} \\<br />
&amp;=&amp; \sum_i y^{(i)} \log h_\theta(x^{(i)}) + (1-y^{(i)}) \log h_\theta(1-x^{(i)})<br />
\end{eqnarray}<br />
$$<br />
其中第二步有点小 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\) 两种取值的情况合并写在一个式子里了。</p>
<p>接下来我们可以求出梯度 \(\nabla_\theta L(\theta)\)。如果我们像<a href="http://blog.tomtung.com/2011/10/linear-regression-gradient-descent/" target="_blank">上篇笔记</a>中一样定义：<br />
$$<br />
X := \begin{pmatrix} (x^{(1)})^{\rm T} \\ (x^{(2)})^{\rm T} \\ \vdots \\ (x^{(m)})^{\rm T} \end{pmatrix} \quad<br />
\vec{y} := \begin{pmatrix} y^{(1)} \\ y^{(2)} \\ \vdots \\ y^{(m)} \end{pmatrix} \quad<br />
\vec{h_\theta} := \begin{pmatrix} h_\theta(x^{(1)}) \\ h_\theta(x^{(2)}) \\ \vdots \\ h_\theta(x^{(m)}) \end{pmatrix}<br />
$$<br />
可以推导得到：<br />
$$ \nabla_\theta L(\theta) = \frac{1}{m} X^{\rm T} (\vec{y} &#8211; \vec{h_\theta}) $$<br />
接下来，根据梯度上升算法 <sup>[<a href="#logistic-regression-n-4" class="footnoted" id="to-logistic-regression-n-4">4</a>]</sup>，我们就可以迭代计算下式来逼近 \(\arg\max_\theta L(\theta)\)：<br />
$$<br />
\begin{eqnarray}<br />
\theta_{t+1} &amp;:=&amp; \theta_t + \alpha \nabla_\theta L(\theta) \\<br />
&amp;=&amp; \theta_t – \frac{\alpha}{m} X^{\rm T} (\vec{h_\theta} – \vec{y})<br />
\end{eqnarray}<br />
$$<br />
注意到这个更新式的形式和之前线性规划+最小二乘法+梯度下降得到是一样的，只是 \(\vec{h_\theta}\) 变了。</p>
<p>以上就是用梯度上升做 Logistic 回归的算法了。课上还谈到了另外 3 个问题：</p>
<ol>
<li>如果要把 Logistic 回归推广到多个分类的情况，可以利用一种叫“1 vs all”的方法。具体地说，即每次取一个分类为 positive，其它分类都为 negative。这样针对每一个分类都学习得到一个 Logistic 回归模型。要判断一个新数据点的标签，用每一个模型都测一下，取对应 \( h_\theta(x) \) 最大的分类为预测结果。</li>
<li>如果数据点不是线性可分的，类似线性回归到多项式回归（polynomial regression）的推广，可以将同一属性次数不同的项看成是彼此独立的，再和普通 Logistic 回归问题一样处理。</li>
<li>属性过多可能会造成模型过分复杂，导致过拟合问题。关于 overfit 和 underfit 的问题可以参见<a href="http://blog.pluskid.org/?p=39" target="_blank">这篇文章</a>的 3~6 段，这位学长讲得非常深入浅出了。课上提到的一种解决方法叫 regularization，即对 \(\theta\) 中希望加以限制的各项 \(\theta_i\)，在 \(L(\theta)\) 后加上 \(-\lambda \theta_i^2 \)，使这些值过大时“惩罚”目标函数。这里 \(\lambda > 0\) 的取值也要注意，如果取得太小解决不了过拟合问题，但取得太大又会造成 underfit。</li>
</ol>
<p>p.s. 今天早睡的目标又达成失败了……………………</p>

<hr/> 脚注： <br/> <ol class="footnotes">
	<li class="footnote" id="logistic-regression-n-1"><strong><sup>[1]</sup></strong> 和上节线性规划中一样，每个 \(x^{(i)}\) 是一个 \(n+1\) 维向量，为书写简便我们在 \(n\) 个属性前再加一维 \(x^{(i)}_0=1\)。 <a class="note-return" href="#to-logistic-regression-n-1">&#x21A9;</a></li>
	<li class="footnote" id="logistic-regression-n-2"><strong><sup>[2]</sup></strong> 这里说“不妨”似乎有点太随意了。事实上，如果假设在给定 \(x\) 的情况下 \(y\) 服从 0-1 分布，那么\(\phi\) 取 logistic 函数实际上可以由<a href="http://en.wikipedia.org/wiki/Generalized_linear_model" target="_blank">广义线性模式</a>（Generalized linear model）的假设推导得出。 <a class="note-return" href="#to-logistic-regression-n-2">&#x21A9;</a></li>
	<li class="footnote" id="logistic-regression-n-3"><strong><sup>[3]</sup></strong> 注意到和<a href="http://blog.tomtung.com/2011/10/linear-regression-gradient-descent/" target="_blank">上节课</a>讲的线性回归一样，我们要预测的 \(h_\theta(x)\) 其实都是期望 \(E_{y|x;\theta}\)。 <a class="note-return" href="#to-logistic-regression-n-3">&#x21A9;</a></li>
	<li class="footnote" id="logistic-regression-n-4"><strong><sup>[4]</sup></strong> 由于这里要求的是 \(L(\theta)\) 的<strong>最大值</strong>，因此是梯度上升而非梯度下降。课程视频中取要最小化的目标函数\(J(\theta)=-L(\theta)\)，因此是梯度下降。实际是一回事。 <a class="note-return" href="#to-logistic-regression-n-4">&#x21A9;</a></li></ol>
<hr/><blockquote><p>可能你对下面的文章也感兴趣：</p><ol>
<li><a href='http://blog.tomtung.com/2011/10/linear-regression-gradient-descent/' rel='bookmark' title='[学习笔记] 线性回归（及梯度下降）'>[学习笔记] 线性回归（及梯度下降）</a></li>
<li><a href='http://blog.tomtung.com/2011/10/em-algorithm/' rel='bookmark' title='[学习笔记] Expectation-Maximization(EM) 算法'>[学习笔记] Expectation-Maximization(EM) 算法</a></li>
<li><a href='http://blog.tomtung.com/2011/10/plsa/' rel='bookmark' title='[学习笔记] Probabilistic latent semantic analysis (pLSA)'>[学习笔记] Probabilistic latent semantic analysis (pLSA)</a></li>
</ol></blockquote>]]></content:encoded>
			<wfw:commentRss>http://blog.tomtung.com/2011/10/logistic-regression/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>[学习笔记] Expectation-Maximization(EM) 算法</title>
		<link>http://blog.tomtung.com/2011/10/em-algorithm/</link>
		<comments>http://blog.tomtung.com/2011/10/em-algorithm/#comments</comments>
		<pubDate>Wed, 12 Oct 2011 16:54:04 +0000</pubDate>
		<dc:creator>逆铭</dc:creator>
				<category><![CDATA[新长征路上的代码]]></category>
		<category><![CDATA[EM 算法]]></category>
		<category><![CDATA[机器学习]]></category>
		<category><![CDATA[概率]]></category>
		<category><![CDATA[笔记]]></category>
		<category><![CDATA[算法]]></category>

		<guid isPermaLink="false">http://blog.tomtung.com/?p=591</guid>
		<description><![CDATA[<a href="http://blog.tomtung.com/2011/10/em-algorithm/" title="[学习笔记] Expectation-Maximization(EM) 算法"></a>果然还是有必要保持记笔记的习惯呐。前两天实验室讲 pLSA 的推导，用到 EM 竟然完全记不清了，竟然还把 Jensen 不等式和 SVM 的 minmax=maxmin 什么的记混= = （这么一说 SVM 具体怎么回事也记不清了。。。）赶紧补一篇复习笔记。 Expectation-Maximization 算法是统计学中用来给带隐含变量的模型做最大似然（和最大后验概率）的一种方法。EM 的应用特别广泛，经典的比如做概率密度估计用的 Gaussian Mixture Model。这两天我或许还会写 pLSA 的笔记放上来，也是 EM 应用的例子。 下面我会先解释 EM 算法要解决的问题，然后直接给出算法的过程，最后再说明算法的正确性。 问题 首先我们定义要解决的问题。给定一个训练集 \(X=\{x^{(1)},&#8230;,x^{(m)}\}\)，我们希望拟合包含隐含变量 \(z\) 的模型 \(P(x,z;\theta)\) 中的参数 \(\theta\)。根据模型的假设，每个我们观察到的 \(x^{(i)}\) 还对应着一个我们观察不到的隐含变量 \(z^{(i)}\)，我们记 \(Z=\{z^{(1)},&#8230;,z^{(m)}\}\)。做最大对数似然就是要求 &#8230;<p class="read-more"><a href="http://blog.tomtung.com/2011/10/em-algorithm/">继续阅读 &#187;</a></p><hr/><blockquote>
可能你对下面的文章也感兴趣：<ol>
<li><a href='http://blog.tomtung.com/2008/08/cpp-primer-reding-notes-index/' rel='bookmark' title='C++ Primer 读书笔记 &#8211; 索引'>C++ Primer 读书笔记 &#8211; 索引</a></li>
<li><a href='http://blog.tomtung.com/2009/07/agile-development-reading-notes/' rel='bookmark' title='敏捷开发学习笔记（思维导图）'>敏捷开发学习笔记（思维导图）</a></li>
<li><a href='http://blog.tomtung.com/2008/09/cpp-primer-reding-notes-chapter8/' rel='bookmark' title='C++ Primer 读书笔记 &#8211; 第八章'>C++ Primer 读书笔记 &#8211; 第八章</a></li>
</ol></blockquote>]]></description>
			<content:encoded><![CDATA[<a href="http://blog.tomtung.com/2011/10/em-algorithm/" title="[学习笔记] Expectation-Maximization(EM) 算法"></a><p><br />
果然还是有必要保持记笔记的习惯呐。前两天实验室讲 <a href="http://en.wikipedia.org/wiki/PLSA" target="_blank">pLSA</a> 的推导，用到 EM 竟然完全记不清了，竟然还把 <a href="http://en.wikipedia.org/wiki/Jensen's_inequality" target="_blank">Jensen 不等式</a>和 SVM 的 minmax=maxmin 什么的记混= = （这么一说 SVM 具体怎么回事也记不清了。。。）赶紧补一篇复习笔记。</p>
<p>Expectation-Maximization 算法是统计学中用来给带<a href="http://en.wikipedia.org/wiki/Latent_variable" target="_blank">隐含变量</a>的模型做最大似然（和最大后验概率）的一种方法。EM 的应用特别广泛，经典的比如做概率密度估计用的 <a href="http://en.wikipedia.org/wiki/Gaussian_mixture_model" target="_blank">Gaussian Mixture Model</a>。这两天我或许还会写 <a href="http://en.wikipedia.org/wiki/PLSA" target="_blank">pLSA</a> 的笔记放上来，也是 EM 应用的例子。</p>
<p>下面我会先解释 EM 算法要解决的问题，然后直接给出算法的过程，最后再说明算法的正确性。</p>
<h1>问题</h1>
<p>首先我们定义要解决的问题。给定一个训练集 \(X=\{x^{(1)},&#8230;,x^{(m)}\}\)，我们希望拟合包含隐含变量 \(z\) 的模型 \(P(x,z;\theta)\) 中的参数 \(\theta\)。根据模型的假设，每个我们观察到的 \(x^{(i)}\) 还对应着一个我们观察不到的隐含变量 \(z^{(i)}\)，我们记 \(Z=\{z^{(1)},&#8230;,z^{(m)}\}\)。做最大对数似然就是要求 \( \theta \) 的“最优值”：$$\theta=\arg\max_\theta{L(\theta;X)}$$ 其中 $$L(\theta;X)=log{P(X;\theta)}=\log{\sum_Z P(X,Z;\theta)}$$</p>
<p>想用这个\(\log\)套\(\sum\)的形式直接求解 \(\theta\) 往往非常困难。而如果能观察到隐含变量 \(z\) ，求下面的似然函数的极大值会容易许多：$$L(\theta;X,Z)=\log{P(X, Z;\theta)}$$</p>
<p>问题是实际上我们没法观察到 \(z\) 的值，只能在给定 \(\theta\) 时求 \(z\) 的后验概率 \(P(z|x;\theta)\) <sup>[<a href="#em-algorithm-n-1" class="footnoted" id="to-em-algorithm-n-1">1</a>]</sup>。EM 算法就可以帮我们打破这样的困境。</p>
<h1>算法</h1>
<p>下面给出 EM 算法的过程。其中\(\theta_t\) 是第 t-1 次迭代时算出的 \(\theta\) 值；\(\theta_0\) 为任意初值。</p>
<blockquote><p>Repeat until converge {</p>
<ol>
<li>(E-step) Calculate \( P(Z|X;\theta_t) \), in order to get:<br />
$$<br />
\begin{eqnarray}<br />
E_{Z|X;\theta_t}[L(\theta;X,Z)] &amp;:=&amp; E_{Z|X;\theta_t}[\log{P(X,Z;\theta)}] \\<br />
&amp;=&amp; \sum_Z P(Z|X;\theta_t) \log{P(X,Z;\theta)}<br />
\end{eqnarray}<br />
$$
</li>
<li>(M-step) $$\theta_{t+1} := \arg\max_\theta E_{Z|X;\theta_t}[\log{P(X,Z;\theta)}]$$</li>
</ol>
<p>}</p></blockquote>
<p>对，就这么短。所以我总觉得称之为 algorithm 不如称之为 method 更恰当。上面的过程在收敛后就得到了我们需要的 \( \theta=\arg\max_\theta{L(\theta;X)} \) <sup>[<a href="#em-algorithm-n-2" class="footnoted" id="to-em-algorithm-n-2">2</a>]</sup>。</p>
<p>先简单说说这短短两步都做了些啥。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 算法因此得名。</p>
<p>另外，如果数据满足独立同分布的条件，分别枚举 \(z^{(i)}\) 的值可能要比枚举整个 \(Z\) 方便些，可把 \(E_{Z|X;\theta_t}[L(\theta;X,Z)]\) 替换成：<br />
$$<br />
\begin{eqnarray}<br />
\sum_i E_{z^{(i)}|x^{(i)};\theta_t}[L(\theta;x^{(i)},z^{(i)}]<br />
&amp;:=&amp; \sum_i E_{z^{(i)}|x^{(i)};\theta_t}[\log{P(x^{(i)},z^{(i)};\theta)}] \\<br />
&amp;=&amp; \sum_i \sum_{z^{(i)}} P(z^{(i)}|x^{(i)};\theta_t) \log{P(x^{(i)},z^{(i)};\theta)}<br />
\end{eqnarray}<br />
$$</p>
<h1>原理</h1>
<p>为什么这样 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\) 的最优值做单调逼近。</p>
<p>不过首先让我们先抛开最大似然，考虑一个更一般的问题。假设有一个凹函数 \( 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) \)，它一定会满足：<br />
$$ F(\theta_{t+1}) \geq G_{\theta_t}(\theta_{t+1}) \geq G_{\theta_t}(\theta_t) = F(\theta_t) $$<br />
也就是说，\( \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\) 的最优值的算法：</p>
<blockquote><p>Repeat until converge {</p>
<ol>
<li>找到函数 \( F(\theta) \) 的“在 \( \theta_t \) 处相等的下界函数” \( G_{\theta_t}(\theta) \)</li>
<li>\( \theta_{t+1} := \arg\max_\theta G_{\theta_t}(\theta) \)</li>
</ol>
<p>}</p></blockquote>
<p>上面的算法看起来和 EM 算法的每步都分别对应——事实上也正如此。下面是从 <a href="http://research.microsoft.com/en-us/um/people/cmbishop/prml/" target="_blank">PRML</a> 中偷的一张图改的，展示了上述逼近的过程：<br />
<img class="alignnone" title="EM Algorithm" src="http://upload.tomtung.com/img/em-algo.png" alt="" width="494" height="359" /></p>
<p>现在我们回到最大似然问题 \(\theta=\arg\max_\theta{L(\theta;X)}\) 。如果我们想套用上面的算法来逼近 \( \theta \) 的这个最优解，就需要找到对于每个 \( \theta_t \)，函数 \( L(\theta;X) \) 的“在 \( \theta_t \) 处相等的下界函数”。该怎么找呢？让我们从 \( L(\theta) \) 的初始形式开始推导：</p>
<p>$$<br />
\begin{eqnarray}<br />
L(\theta) &amp;=&amp; \log{P(X;\theta)} \\<br />
&amp;=&amp; \log{\sum_Z P(X,Z;\theta)}<br />
\end{eqnarray}<br />
$$</p>
<p>又卡在这个\(\log\)套\(\sum\)的形式上了……我们说过麻烦在于观察不到 \(Z\) 的值，那不妨给它任意引入一个概率分布 \(Q(Z)\) <sup>[<a href="#em-algorithm-n-3" class="footnoted" id="to-em-algorithm-n-3">3</a>]</sup>，利用分子分母同乘 \(Q(Z)\) 的小 trick，得到：</p>
<p>$$<br />
\begin{eqnarray}<br />
L(\theta) &amp;=&amp; \log{\sum_Z P(X,Z;\theta)} \\<br />
&amp;=&amp; \log{\sum_Z Q(Z) \frac{P(X,Z;\theta)}{Q(Z)}} \\<br />
&amp;=&amp; \log E_{Z \sim Q}\left[ \frac{P(X,Z;\theta)}{Q(Z)} \right]<br />
\end{eqnarray}<br />
$$</p>
<p>根据 Jensen 不等式 <sup>[<a href="#em-algorithm-n-4" class="footnoted" id="to-em-algorithm-n-4">4</a>]</sup>，对于任意分布 \(Q\) 都有：</p>
<p>$$<br />
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]<br />
$$</p>
<p>且上面的不等式在 \( \frac {P(X,Z;\theta)} {Q(Z)}\) 为常数时取等号。</p>
<p>于是我们就得到了 \( 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) \) 代入上式，得到：</p>
<p>$$<br />
L(\theta) \geq E_{Z|X;\theta_t}\left[ \log\frac{P(X,Z;\theta)}{P(Z|X;\theta_t)} \right]<br />
$$</p>
<p>且该不等式在 \( \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)} \) 容易不少。</p>
<p>我们还可以再做几步推导，得到一个更简单的形式：</p>
<p>$$\begin{eqnarray}<br />
\theta_{t+1}<br />
&amp;:=&amp; \arg\max_\theta E_{Z|X;\theta_t}\left[ \log\frac{P(X,Z;\theta)}{P(Z|X;\theta_t)} \right] \\<br />
&amp;=&amp; \arg\max_\theta \sum_{Z} P(Z|X;\theta_t) \log\frac{P(X,Z;\theta)}{P(Z|X;\theta_t)} \\<br />
&amp;=&amp; \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)] \\<br />
&amp;=&amp; \arg\max_\theta \sum_{Z} P(Z|X;\theta_t)\log P(X,Z;\theta) \\<br />
&amp;=&amp; \arg\max_\theta E_{Z|X;\theta_t}[\log{P(X,Z;\theta)}]<br />
\end{eqnarray}$$</p>
<p>其中倒数第二步是因为 \(- P(Z|X;\theta_t) \log P(Z|X;\theta_t)]\) 这一项与 \(\theta\) 无关，所以就直接扔掉了。这样就得到了本文第二节 EM 算法中的形式——它就是这么来的。</p>
<p>以上就是 EM 了。至于独立同分布的情况推导也类似。</p>
<p>顺带一提，\( \arg\max_\theta E_{Z|X;\theta_t}[\log{P(X,Z;\theta)}] \) 有时也比较难算。这时我们其实可以退而求其次，不要求这个期望最大化了，只要它在 \( \theta_{t+1} \) 处的值大于在 \( \theta_t \) 处的值就行了。根据上面的推导，这样也能逼近 \( \theta \) 的最优值，只是收敛速度较慢。这就是所谓 GEM (Generalized EM) 算法了。</p>
<p>p.s. <a href="http://www.mathjax.org/" target="_blank">MathJax</a> 很神嘛。<br />
p.p.s. 这篇笔记竟然断断续续写写改改了两天多，我对 EM 的认识也越来越清晰。“<a href="http://mindhacks.cn/2009/02/15/why-you-should-start-blogging-now/" target="_blank">‘教’是最好的‘学’</a>”真是一点没错。</p>
<hr />
更新历史:<br />
2011.10.12 重写了“原理”部分，把利用函数的“在 \(\theta_t\) 处相等的下界函数”逼近 \(\theta\) 的最优值的算法单独提到前面说，这样似乎清楚很多。<br />
2011.10.13 修正了对在利用 Jensen 不等式的那一步要取 \( Q(Z) = P(Z|X;\theta_t) \) 的解释</p>

<hr/> 脚注： <br/> <ol class="footnotes">
	<li class="footnote" id="em-algorithm-n-1"><strong><sup>[1]</sup></strong> 一般可以利用<a href="http://en.wikipedia.org/wiki/Bayes%27_theorem" target="_blank">贝叶斯定理</a>：<br />
$$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)\) 往往是模型假设的一部分。 <a class="note-return" href="#to-em-algorithm-n-1">&#x21A9;</a></li>
	<li class="footnote" id="em-algorithm-n-2"><strong><sup>[2]</sup></strong> 实际上在某些特殊情况下，\(\theta\) 还可能收敛在局部最优点或鞍点上。这时可以多跑几次算法，每次随机不同的 \(\theta_0\)，最后取最好的结果。为简明起见，本文忽略这种情况。 <a class="note-return" href="#to-em-algorithm-n-2">&#x21A9;</a></li>
	<li class="footnote" id="em-algorithm-n-3"><strong><sup>[3]</sup></strong> \(Q(Z)\) 为概率分布，意即需满足 \(\sum_Z Q(Z) = 1\) 且 \(Q(Z) \geq 0\) <a class="note-return" href="#to-em-algorithm-n-3">&#x21A9;</a></li>
	<li class="footnote" id="em-algorithm-n-4"><strong><sup>[4]</sup></strong> Jensen 不等式：<br />
\(f\) 为凸函数，\(X\) 为随机变量。则 $$ E[f(X)] \geq f(EX) $$ 若 \(f\) 是严格凸的，则上式取等号当前仅当 \(X\) 为常数。</p>
<p>在这里 \(\log\) 函数是严格凹的，所以要把上面的不等号方向调转。 <a class="note-return" href="#to-em-algorithm-n-4">&#x21A9;</a></li></ol>
<hr/><blockquote><p>可能你对下面的文章也感兴趣：</p><ol>
<li><a href='http://blog.tomtung.com/2008/08/cpp-primer-reding-notes-index/' rel='bookmark' title='C++ Primer 读书笔记 &#8211; 索引'>C++ Primer 读书笔记 &#8211; 索引</a></li>
<li><a href='http://blog.tomtung.com/2009/07/agile-development-reading-notes/' rel='bookmark' title='敏捷开发学习笔记（思维导图）'>敏捷开发学习笔记（思维导图）</a></li>
<li><a href='http://blog.tomtung.com/2008/09/cpp-primer-reding-notes-chapter8/' rel='bookmark' title='C++ Primer 读书笔记 &#8211; 第八章'>C++ Primer 读书笔记 &#8211; 第八章</a></li>
</ol></blockquote>]]></content:encoded>
			<wfw:commentRss>http://blog.tomtung.com/2011/10/em-algorithm/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>学习笔记：概率统计与随机过程</title>
		<link>http://blog.tomtung.com/2010/02/probability-statistics-and-random-processes/</link>
		<comments>http://blog.tomtung.com/2010/02/probability-statistics-and-random-processes/#comments</comments>
		<pubDate>Sat, 06 Feb 2010 14:33:23 +0000</pubDate>
		<dc:creator>逆铭</dc:creator>
				<category><![CDATA[杂的扯]]></category>
		<category><![CDATA[思维导图]]></category>
		<category><![CDATA[概率]]></category>
		<category><![CDATA[笔记]]></category>

		<guid isPermaLink="false">http://blog.tomtung.com/?p=483</guid>
		<description><![CDATA[<a href="http://blog.tomtung.com/2010/02/probability-statistics-and-random-processes/" title="学习笔记：概率统计与随机过程"></a>上学期“概率统计与随机过程”课的笔记，用xmind做的思维导图，仅供参考。。 （需要下载才能看到全部内容。层次很深，请多用F6下钻功能） 可能你对下面的文章也感兴趣： 敏捷开发学习笔记（思维导图） C++ Primer 读书笔记 &#8211; 索引 C++ Primer 读书笔记 &#8211; 第八章<hr/><blockquote>
可能你对下面的文章也感兴趣：<ol>
<li><a href='http://blog.tomtung.com/2009/07/agile-development-reading-notes/' rel='bookmark' title='敏捷开发学习笔记（思维导图）'>敏捷开发学习笔记（思维导图）</a></li>
<li><a href='http://blog.tomtung.com/2008/08/cpp-primer-reding-notes-index/' rel='bookmark' title='C++ Primer 读书笔记 &#8211; 索引'>C++ Primer 读书笔记 &#8211; 索引</a></li>
<li><a href='http://blog.tomtung.com/2008/09/cpp-primer-reding-notes-chapter8/' rel='bookmark' title='C++ Primer 读书笔记 &#8211; 第八章'>C++ Primer 读书笔记 &#8211; 第八章</a></li>
</ol></blockquote>]]></description>
			<content:encoded><![CDATA[<a href="http://blog.tomtung.com/2010/02/probability-statistics-and-random-processes/" title="学习笔记：概率统计与随机过程"></a><p>上学期“概率统计与随机过程”课的笔记，用<a href="http://www.xmind.net/">xmind</a>做的思维导图，仅供参考。。<br />
<script type='text/javascript'>  
window.onload = document.write("<iframe width='100%' height='250' marginwidth='0' marginheight='0' scrolling='auto' frameborder='0'  src='http://www.xmind.net/share/_embed/tomtung/probability-statistics-and-random-processes/' ></iframe> "); 
 </script><br />
（需要下载才能看到全部内容。层次很深，请多用F6下钻功能）</p>

<hr/><blockquote><p>可能你对下面的文章也感兴趣：</p><ol>
<li><a href='http://blog.tomtung.com/2009/07/agile-development-reading-notes/' rel='bookmark' title='敏捷开发学习笔记（思维导图）'>敏捷开发学习笔记（思维导图）</a></li>
<li><a href='http://blog.tomtung.com/2008/08/cpp-primer-reding-notes-index/' rel='bookmark' title='C++ Primer 读书笔记 &#8211; 索引'>C++ Primer 读书笔记 &#8211; 索引</a></li>
<li><a href='http://blog.tomtung.com/2008/09/cpp-primer-reding-notes-chapter8/' rel='bookmark' title='C++ Primer 读书笔记 &#8211; 第八章'>C++ Primer 读书笔记 &#8211; 第八章</a></li>
</ol></blockquote>]]></content:encoded>
			<wfw:commentRss>http://blog.tomtung.com/2010/02/probability-statistics-and-random-processes/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

