<?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>沙克 &#187; Hidden-state variable</title>
	<atom:link href="http://www.suzker.cn/tag/hidden-state-variable/feed" rel="self" type="application/rss+xml" />
	<link>http://www.suzker.cn</link>
	<description>可怜之人必有可恨之处</description>
	<lastBuildDate>Sun, 31 Jul 2011 15:40:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>隐马科夫(HMM)模型</title>
		<link>http://www.suzker.cn/computervision/the-hmm-model.html</link>
		<comments>http://www.suzker.cn/computervision/the-hmm-model.html#comments</comments>
		<pubDate>Sun, 16 May 2010 06:30:01 +0000</pubDate>
		<dc:creator>Suz</dc:creator>
				<category><![CDATA[计算机视觉]]></category>
		<category><![CDATA[Computer Vision]]></category>
		<category><![CDATA[Hidden-state variable]]></category>
		<category><![CDATA[HMM]]></category>
		<category><![CDATA[Multi-Class]]></category>
		<category><![CDATA[Multi-Instance]]></category>
		<category><![CDATA[基础知识]]></category>

		<guid isPermaLink="false">http://www.suzker.cn/?p=24</guid>
		<description><![CDATA[本文介绍非常基础、通用的一个分类模型：隐马科夫模型（HMM），尽量以平实的语言，分别通过实例、图片来说明HMM的过程，并简述了HMM的三个问题和解决方法。以下为文章摘要，点击阅读更多：

...隐马科夫(HMM)模型全称：Hidden Markov model，是一种统计学的模型，是马科夫链与无法观察的状态的结合。在这里，我假设看这篇文章的人已经对马科夫过程(Markov Process)有了初步的认识，对概率论有过初步的学习。...

...那么这个HMM模型，隐马模型到底“隐”在哪里呢？其实解释起来也不难，这里...t-1, t, t+1...各个时刻的x状态是一个随机过程，试想一下，你总不能确定一个随机过程中的每个状态吧？所以，上图的x状态对于我们来说，在没有到达t时间之前，他仍然是未知的，隐藏的（Hidden）。这些x被称为“unobserved state”。...

...HMM过程是，我从任意一个筐开始选水果，我去到那一个框那里，随机拿起里面的一个水果，然后把这个水果记录下来，然后再随机地去另外一个筐里面选水果，不断地重复这个过程，知道我选够了L个水果，我就停止。... <span style="color:#777"> . . . &#8594; Read More: <a href="http://www.suzker.cn/computervision/the-hmm-model.html">隐马科夫(HMM)模型</a></span>]]></description>
			<content:encoded><![CDATA[<blockquote><p>HMM已经有很多人研究过了，而我要研究它的目的只是为了那个让我我纠结多天的Hidden-state Variable。说起这个Hidden-state Variable，真是惭愧，应该是我很笨或者很懒的问题，从JMLMIL理论开始，我就一直开始搞不懂Hidden-state Variable究竟是怎么样来的，虽然我知道它的物理意义和怎么使用。可能很多人看论文都会有这样的感觉吧，即使当你清楚了某个东西的框架，也认同这个框架，但是当你细细深入并打算实现的时候，才会发现现实跟框架是有很多差距的啊！</p>
<p>不好意思，扯远了。我从JMLMIL开始追寻这个Hidden-state variable，到HCRF，到CRF，到HMM。而如今对HMM的理解算是对这个Hidden-state Variable的理解的一个开始吧。当我完全搞懂这个Hidden的东西之后，我会详细的把这些东西都串起来。现在，先看看HMM吧。</p></blockquote>
<p>隐马科夫(HMM)模型全称：Hidden Markov model，是一种统计学的模型，是马科夫链与无法观察的状态的结合。在这里，我假设看这篇文章的人已经对马科夫过程(<a href="http://en.wikipedia.org/wiki/Markov_process" target="_blank">Markov Process</a>)有了初步的认识，对概率论有过初步的学习。</p>
<p>用一句话描述马科夫过程，就是后一个事件发生的概率只与当前时间发生的概率相关。在下面的图里面，我们可以清楚看到”马科夫过程”这一属性，注箭头意x(t-1), x(t), x(t+1)之间的的指向，就用这个箭头表示他们之间的关系，这个箭头是单向的，对于t这一个时间的状态x(t)，只有t-1时刻的状态x(t-1)指向它，说明影响t时刻的状态x(t)的，只有t-1时刻的状态x(t-1)。</p>
<div id="attachment_74" class="wp-caption aligncenter" style="width: 510px"><a href="http://www.suzker.cn/wp-content/uploads/2010/05/500px-Hmm_temporal_bayesian_net.svg_.png"><img class="size-full wp-image-74" title="500px-Hmm_temporal_bayesian_net.svg" src="http://www.suzker.cn/wp-content/uploads/2010/05/500px-Hmm_temporal_bayesian_net.svg_.png" alt="Hmm temporal bayesian net" width="500" height="128" /></a><p class="wp-caption-text">Hmm temporal bayesian net</p></div>
<p>那么这个HMM模型，隐马模型到底“隐”在哪里呢？其实解释起来也不难，这里&#8230;t-1, t, t+1&#8230;各个时刻的x状态是一个随机过程，试想一下，你总不能确定一个随机过程中的每个状态吧？所以，上图的x状态对于我们来说，在没有到达t时间之前，他仍然是未知的，隐藏的（Hidden）。这些x被称为“unobserved state”。</p>
<p><strong><span style="color: #ff0000;">Turn to the next page for more.</span></strong></p>
<p><span id="more-24"></span></p>
<p>了解了这个“隐”的概念之后，我们可以深入HMM的一个整体结构和过程了。</p>
<p>为了更好理解，我引用一个实例来说明HMM的结构和过程。</p>
<p>假设我们有5个筐装着很多不同水果，水果的种类有6种（下图中用不同颜色的图案表示）。</p>
<div id="attachment_25" class="wp-caption aligncenter" style="width: 275px"><a rel="attachment wp-att-25" href="http://www.suzker.cn/computervision/the-hmm-model.html/attachment/hmm_1"><img class="size-medium wp-image-25" title="hmm_1" src="http://www.suzker.cn/wp-content/uploads/2010/05/hmm_1-265x300.png" alt="HMM模型的实例_1" width="265" height="300" /></a><p class="wp-caption-text">HMM模型的实例_01</p></div>
<p>HMM过程是，我从任意一个筐开始选水果，我去到那一个框那里，随机拿起里面的一个水果，然后把这个水果记录下来，然后再随机地去另外一个筐里面选水果，不断地重复这个过程，知道我选够了L个水果，我就停止。</p>
<p>在我选水果的过程中，我将遵循以下准则：</p>
<ul>
<li>我从某一个框选完水果后移到另外一个框的概率用一个 Transition-probabilty Matrix来表示。</li>
</ul>
<ul>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="97" valign="top">筐     |     筐</td>
<td width="94" valign="top">1</td>
<td width="94" valign="top">2</td>
<td width="94" valign="top">3</td>
<td width="94" valign="top">4</td>
<td width="94" valign="top">5</td>
</tr>
<tr>
<td width="97" valign="top">1</td>
<td width="94" valign="top">0.5</td>
<td width="94" valign="top">0.1</td>
<td width="94" valign="top">0.2</td>
<td width="94" valign="top">0.2</td>
<td width="94" valign="top">0</td>
</tr>
<tr>
<td width="97" valign="top">2</td>
<td width="94" valign="top">0.3</td>
<td width="94" valign="top">0.4</td>
<td width="94" valign="top">0.1</td>
<td width="94" valign="top">0.1</td>
<td width="94" valign="top">0.1</td>
</tr>
<tr>
<td width="97" valign="top">3</td>
<td width="94" valign="top">0.1</td>
<td width="94" valign="top">0.5</td>
<td width="94" valign="top">0.1</td>
<td width="94" valign="top">0</td>
<td width="94" valign="top">0.3</td>
</tr>
<tr>
<td width="97" valign="top">4</td>
<td width="94" valign="top">0.3</td>
<td width="94" valign="top">0.3</td>
<td width="94" valign="top">0.2</td>
<td width="94" valign="top">0.1</td>
<td width="94" valign="top">0.1</td>
</tr>
<tr>
<td width="97" valign="top">5</td>
<td width="94" valign="top">0</td>
<td width="94" valign="top">0.1</td>
<td width="94" valign="top">0.2</td>
<td width="94" valign="top">0.1</td>
<td width="94" valign="top">0.6</td>
</tr>
</tbody>
</table>
<li>而我从第i个框中选6仲水果中的概率也用一定的概率分布表示，称为这个框中水果的概率分布(Emission-probability Matrix)。（以下概率值省略）</li>
</ul>
<ul>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="83" valign="top">筐   |   水果</td>
<td width="81" valign="top">1</td>
<td width="81" valign="top">2</td>
<td width="81" valign="top">3</td>
<td width="81" valign="top">4</td>
<td width="81" valign="top">5</td>
<td width="78" valign="top">6</td>
</tr>
<tr>
<td width="83" valign="top">1</td>
<td width="81" valign="top">&#8230;</td>
<td width="81" valign="top"></td>
<td width="81" valign="top"></td>
<td width="81" valign="top"></td>
<td width="81" valign="top"></td>
<td width="78" valign="top"></td>
</tr>
<tr>
<td width="83" valign="top">2</td>
<td width="81" valign="top"></td>
<td width="81" valign="top">&#8230;</td>
<td width="81" valign="top"></td>
<td width="81" valign="top"></td>
<td width="81" valign="top"></td>
<td width="78" valign="top"></td>
</tr>
<tr>
<td width="83" valign="top">3</td>
<td width="81" valign="top"></td>
<td width="81" valign="top"></td>
<td width="81" valign="top">&#8230;.</td>
<td width="81" valign="top"></td>
<td width="81" valign="top"></td>
<td width="78" valign="top"></td>
</tr>
<tr>
<td width="83" valign="top">4</td>
<td width="81" valign="top"></td>
<td width="81" valign="top"></td>
<td width="81" valign="top"></td>
<td width="81" valign="top">&#8230;</td>
<td width="81" valign="top"></td>
<td width="78" valign="top"></td>
</tr>
<tr>
<td width="83" valign="top">5</td>
<td width="81" valign="top"></td>
<td width="81" valign="top"></td>
<td width="81" valign="top"></td>
<td width="81" valign="top"></td>
<td width="81" valign="top">&#8230;</td>
<td width="78" valign="top">&#8230;.</td>
</tr>
</tbody>
</table>
<li>我们还必须牢记一点，因为下一次转移到哪一个框是不确定的，所以当我还没选够水果的之前，你还是不会准确得知我的路径的。我选的水果你也将不会准确得知。</li>
</ul>
<p>实例的一个结果是这样的： 我选完水果之后，发现我的路径是[筐2&gt;筐1&gt;筐1&gt;筐5&gt;筐2&gt;筐3&gt;筐4]，即我选了7个水果，L=7。而我最终选出来的水果依次是[f2, f1, f3, f5, f5, f2, f4]。</p>
<p>之前已经假设过大家已经了解了一点Markov process和随机过程，所以这里你们应该会很自然地想到其实这个HMM就是这两个过程的结合：</p>
<p style="text-align: center;"><span style="text-decoration: underline;">[Markov process：选框] &gt; [普通随机过程：选水果]；</span></p>
<p style="text-align: left;">假设我们的模型参数是 lambda(N, M, pi, A, B);</p>
<ul>
<li>L: 将会观察的长度。对应上面例子中的我将要选取的水果个数。</li>
<li>N: 状态数目。对应上面例子中，水果筐的个数。</li>
<li>M:每个状态可能的观察值数。对应上面例子中，水果的种类。</li>
<li>pi: 初始状态空间的分布。对应上面例子中，哪个水果筐将会成为我选的第一个筐的概率。</li>
<li>A: 代表状态转移矩阵(Transition-probability matrix)。对应上面例子中，我从某个筐移到另外一个筐的概率。</li>
<li>B: 代表观察值的概率分布(Emission-probability matrix)。对应上面例子中，某个筐中，水果的分布概率。</li>
</ul>
<p>状态的序列标记为S。对应上面例子中，我最终选筐的移动路径[筐2&gt;筐1&gt;筐1&gt;筐5&gt;筐2&gt;筐3&gt;筐4]。</p>
<p>观察到的序列标记为O。对应上面例子中，我最终选出来的水果序列[f2&gt; f1&gt; f3&gt; f5&gt; f5&gt; f2&gt; f4]。</p>
<p>HMM将涉及以下三个问题：</p>
<ol>
<li>给定一个观察到得序列O，及参数lambda，求出P(O|lambda)，即发生这种观察序列的可能性。对应上面例子中，即是我给定一个最终确定了的水果序列S，求我选到这样的水果的可能性。</li>
<li>给定一个观察到的序列O，及参数lambda，求出最有可能产生这种序列的状态序列S。对应上面例子中，即我给定一个最终确定了的水果序列S，求我最可能的选水果筐路径。</li>
<li>同样给定一个观察得到的序列O，求如何调整参数lambda，使P(O|lambda)最大。</li>
</ol>
<p>由于涉及具体算法和论证，这里不再详述这三个问题的解决算法。只简单地标出：</p>
<ol>
<li>问题一的一种有效解决算法是前向法(<a href="http://en.wikipedia.org/wiki/Forward_algorithm" target="_blank">forward algorithm</a>)，是一种<a href="http://en.wikipedia.org/wiki/Dynamic_programming" target="_blank">动态规划</a>的方法，用来减少程序运算的复杂度。</li>
<li>问题二的一种有效解决算法是维特比算法(<a href="http://en.wikipedia.org/wiki/Viterbi_algorithm" target="_blank">Viterbi algorithm</a>)，也是一种动态的规划方法，用来找出最可能的状态路径。</li>
<li>问题三的一种有效解决算法是<a href="http://en.wikipedia.org/wiki/Baum-Welch_algorithm" target="_blank">Baum-Welch</a>算法，通过给定一个O，不断估算一个适合的lambda参数，使发生这个O的概率P(O|lambda)最大。</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.suzker.cn/computervision/the-hmm-model.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

