<?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>MrYang&#039;s Blog</title>
	<atom:link href="http://www.mryang.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mryang.org</link>
	<description>记录生活，思考人生——如果想比你的影子跑得快，那么就请面向太阳吧！</description>
	<lastBuildDate>Wed, 16 Nov 2011 07:06:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>数学之美番外篇：平凡而又神奇的贝叶斯方法[转]</title>
		<link>http://www.mryang.org/2011/11/bayse/</link>
		<comments>http://www.mryang.org/2011/11/bayse/#comments</comments>
		<pubDate>Wed, 16 Nov 2011 07:06:30 +0000</pubDate>
		<dc:creator>mryang</dc:creator>
				<category><![CDATA[学习笔记]]></category>
		<category><![CDATA[人工智能]]></category>
		<category><![CDATA[数学]]></category>
		<category><![CDATA[机器学习]]></category>
		<category><![CDATA[贝叶斯]]></category>

		<guid isPermaLink="false">http://www.mryang.org/?p=793</guid>
		<description><![CDATA[原文地址：http://mindhacks.cn/2008/09/21/the-magical-bayesian-method/

概率论只不过是把常识用数学公式表达了出来。

——拉普拉斯

<span class="readmore"><a href="http://www.mryang.org/2011/11/bayse/" title="数学之美番外篇：平凡而又神奇的贝叶斯方法[转]">阅读全文——共18571字</a></span>]]></description>
			<content:encoded><![CDATA[<p>原文地址：<a href="http://mindhacks.cn/2008/09/21/the-magical-bayesian-method/">http://mindhacks.cn/2008/09/21/the-magical-bayesian-method/</a></p>
<p>概率论只不过是把常识用数学公式表达了出来。</p>
<p>——拉普拉斯</p>
<p>记得读本科的时候，最喜欢到城里的计算机书店里面去闲逛，一逛就是好几个小时；有一次，在书店看到一本书，名叫贝叶斯方法。当时数学系的课程还没有学到概率统计。我心想，一个方法能够专门写出一本书来，肯定很牛逼。后来，我发现当初的那个朴素归纳推理成立了——这果然是个牛逼的方法。</p>
<p>——题记</p>
<p><strong>目录</strong></p>
<p>0. 前言<br />
1. 历史<br />
1.1 一个例子：自然语言的二义性<br />
1.2 贝叶斯公式<br />
2. 拼写纠正<br />
3. 模型比较与贝叶斯奥卡姆剃刀<br />
3.1 再访拼写纠正<br />
3.2 模型比较理论（Model Comparasion）与贝叶斯奥卡姆剃刀（Bayesian Occam’s Razor）<br />
3.3 最小描述长度原则<br />
3.4 最优贝叶斯推理<br />
4. 无处不在的贝叶斯<br />
4.1 中文分词<br />
4.2 统计机器翻译<br />
4.3 贝叶斯图像识别，Analysis by Synthesis<br />
4.4 EM 算法与基于模型的聚类<br />
4.5 最大似然与最小二乘<br />
5. 朴素贝叶斯方法（又名“愚蠢者的贝叶斯（idiot’s bayes）”）<br />
5.1 垃圾邮件过滤器<br />
5.2 为什么朴素贝叶斯方法令人诧异地好——一个理论解释<br />
6. 层级贝叶斯模型<br />
6.1 隐马可夫模型（HMM）<br />
7. 贝叶斯网络</p>
<p><strong>0. </strong><strong>前言</strong></p>
<p>这是一篇关于贝叶斯方法的科普文，我会尽量少用公式，多用平白的语言叙述，多举实际例子。更严格的公式和计算我会在相应的地方注明参考资料。贝叶斯方法被证明是非常 general 且强大的推理框架，文中你会看到很多有趣的应用。</p>
<p><strong>1. </strong><strong>历史</strong></p>
<p>托马斯·贝叶斯（Thomas Bayes）同学的详细生平在<a href="http://en.wikipedia.org/wiki/Thomas_Bayes">这里</a>。以下摘一段 wikipedia 上的简介：</p>
<blockquote><p>所谓的贝叶斯方法源于他生前为解决一个“逆概”问题写的一篇文章，而这篇文章是在他死后才由他的一位朋友发表出来的。在贝叶斯写这篇文章之前，人们已经能够计算“正向概率”，如“假设袋子里面有N个白球，M个黑球，你伸手进去摸一把，摸出黑球的概率是多大”。而一个自然而然的问题是反过来：“如果我们事先并不知道袋子里面黑白球的比例，而是闭着眼睛摸出一个（或好几个）球，观察这些取出来的球的颜色之后，那么我们可以就此对袋子里面的黑白球的比例作出什么样的推测”。这个问题，就是所谓的逆概问题。</p></blockquote>
<p>实际上，贝叶斯当时的论文只是对这个问题的一个直接的求解尝试，并不清楚他当时是不是已经意识到这里面包含着的深刻的思想。然而后来，贝叶斯方法席卷了概率论，并将应用延伸到各个问题领域，所有需要作出概率预测的地方都可以见到贝叶斯方法的影子，特别地，贝叶斯是机器学习的核心方法之一。这背后的深刻原因在于，现实世界本身就是不确定的，人类的观察能力是有局限性的（否则有很大一部分科学就没有必要做了——设想我们能够直接观察到电子的运行，还需要对原子模型争吵不休吗？），我们日常所观察到的只是事物表面上的结果，沿用刚才那个袋子里面取球的比方，我们往往只能知道从里面取出来的球是什么颜色，而并不能直接看到袋子里面实际的情况。这个时候，我们就需要提供一个猜测（hypothesis，更为严格的说法是“假设”，这里用“猜测”更通俗易懂一点），所谓猜测，当然就是不确定的（很可能有好多种乃至无数种猜测都能满足目前的观测），<strong>但也绝对不是两眼一抹黑瞎蒙——具体地说，我们需要做两件事情：1. 算出各种不同猜测的可能性大小。2. 算出最靠谱的猜测是什么。第一个就是计算特定猜测的后验概率，对于连续的猜测空间则是计算猜测的概率密度函数。第二个则是所谓的模型比较，模型比较如果不考虑先验概率的话就是最大似然方法。</strong></p>
<p><strong>1.1 </strong><strong>一个例子：自然语言的二义性</strong></p>
<p>下面举一个自然语言的不确定性的例子。当你看到这句话：</p>
<blockquote><p>The girl saw the boy with a telescope.</p></blockquote>
<p>你对这句话的含义有什么猜测？平常人肯定会说：那个女孩拿望远镜看见了那个男孩（即你对这个句子背后的实际语法结构的猜测是：The girl saw-with-a-telescope the boy ）。然而，仔细一想，你会发现这个句子完全可以解释成：那个女孩看见了那个拿着望远镜的男孩（即：The girl saw the-boy-with-a-telescope ）。那为什么平常生活中我们每个人都能够迅速地对这种二义性进行消解呢？这背后到底隐藏着什么样的思维法则？我们留到后面解释。</p>
<p><strong>1.2 </strong><strong>贝叶斯公式</strong></p>
<p>贝叶斯公式是怎么来的？</p>
<p>我们还是使用 wikipedia 上的一个例子：</p>
<blockquote><p>一所学校里面有 60% 的男生，40% 的女生。男生总是穿长裤，女生则一半穿长裤一半穿裙子。有了这些信息之后我们可以容易地计算“随机选取一个学生，他（她）穿长裤的概率和穿裙子的概率是多大”，这个就是前面说的“正向概率”的计算。然而，假设你走在校园中，迎面走来一个穿长裤的学生（很不幸的是你高度近似，你只看得见他（她）穿的是否长裤，而无法确定他（她）的性别），你能够推断出他（她）是男生的概率是多大吗？</p></blockquote>
<p>一些认知科学的研究表明（《决策与判断》以及《<a href="http://www.douban.com/subject/3199621/">Rationality for Mortals</a>》第12章：小孩也可以解决贝叶斯问题），我们对形式化的贝叶斯问题不擅长，但对于以频率形式呈现的等价问题却很擅长。在这里，我们不妨把问题重新叙述成：你在校园里面<a href="http://en.wikipedia.org/wiki/Random_walk">随机游走</a>，遇到了 N 个穿长裤的人（仍然假设你无法直接观察到他们的性别），问这 N 个人里面有多少个女生多少个男生。</p>
<p>你说，这还不简单：算出学校里面有多少穿长裤的，然后在这些人里面再算出有多少女生，不就行了？</p>
<p>我们来算一算：假设学校里面人的总数是 U 个。60% 的男生都穿长裤，于是我们得到了 U * P(Boy) * P(Pants|Boy) 个穿长裤的（男生）（其中 P(Boy) 是男生的概率 = 60%，这里可以简单的理解为男生的比例；P(Pants|Boy) 是条件概率，即在 Boy 这个条件下穿长裤的概率是多大，这里是 100% ，因为所有男生都穿长裤）。40% 的女生里面又有一半（50%）是穿长裤的，于是我们又得到了 U * P(Girl) * P(Pants|Girl) 个穿长裤的（女生）。加起来一共是 U * P(Boy) * P(Pants|Boy) + U * P(Girl) * P(Pants|Girl) 个穿长裤的，其中有 U * P(Girl) * P(Pants|Girl) 个女生。两者一比就是你要求的答案。</p>
<p>下面我们把这个答案形式化一下：我们要求的是 P(Girl|Pants) （穿长裤的人里面有多少女生），我们计算的结果是 U * P(Girl) * P(Pants|Girl) / [U * P(Boy) * P(Pants|Boy) + U * P(Girl) * P(Pants|Girl)] 。容易发现这里校园内人的总数是无关的，可以消去。于是得到</p>
<p><strong>P(Girl|Pants) = P(Girl) * P(Pants|Girl) / [P(Boy) * P(Pants|Boy) + P(Girl) * P(Pants|Girl)]</strong></p>
<p>注意，如果把上式收缩起来，分母其实就是 P(Pants) ，分子其实就是 P(Pants, Girl) 。而这个比例很自然地就读作：在穿长裤的人（ P(Pants) ）里面有多少（穿长裤）的女孩（ P(Pants, Girl) ）。</p>
<p>上式中的 Pants 和 Boy/Girl 可以指代一切东西，所以其一般形式就是：</p>
<p><strong>P(B|A) = P(A|B) * P(B) / [P(A|B) * P(B) + P(A|~B) * P(~B) ]</strong></p>
<p>收缩起来就是：</p>
<p><strong>P(B|A) = P(AB) / P(A)</strong></p>
<p>其实这个就等于：</p>
<p><strong>P(B|A) * P(A) = P(AB)</strong></p>
<p>难怪拉普拉斯说<strong>概率论只是把常识用数学公式表达了出来</strong>。</p>
<p>然而，后面我们会逐渐发现，看似这么平凡的贝叶斯公式，背后却隐含着非常深刻的原理。</p>
<p><strong>2. </strong><strong>拼写纠正</strong></p>
<p>经典著作《人工智能：现代方法》的作者之一 Peter Norvig 曾经写过一篇介绍如何写一个拼写检查/纠正器的文章（原文在<a href="http://norvig.com/spell-correct.html">这里</a>，徐宥的翻译版在<a href="http://blog.youxu.info/spell-correct.html">这里</a>，这篇文章很深入浅出，强烈建议读一读），里面用到的就是贝叶斯方法，这里我们不打算复述他写的文章，而是简要地将其核心思想介绍一下。</p>
<p>首先，我们需要询问的是：“<strong>问题是什么？</strong>”</p>
<p>问题是我们看到用户输入了一个不在字典中的单词，我们需要去猜测：“这个家伙到底真正想输入的单词是什么呢？”用刚才我们形式化的语言来叙述就是，我们需要求：</p>
<p><strong>P(</strong><strong>我们猜测他想输入的单词 | 他实际输入的单词)</strong></p>
<p>这个概率。并找出那个使得这个概率最大的猜测单词。显然，我们的猜测未必是唯一的，就像前面举的那个自然语言的歧义性的例子一样；这里，比如用户输入： thew ，那么他到底是想输入 the ，还是想输入 thaw ？到底哪个猜测可能性更大呢？幸运的是我们可以用贝叶斯公式来直接出它们各自的概率，我们不妨将我们的多个猜测记为 h1 h2 .. （ h 代表 hypothesis），它们都属于一个有限且离散的猜测空间 H （单词总共就那么多而已），将用户实际输入的单词记为 D （ D 代表 Data ，即观测数据），于是</p>
<p><strong>P(</strong><strong>我们的猜测1 | 他实际输入的单词)</strong></p>
<p>可以抽象地记为：</p>
<p>P(h1 | D)</p>
<p>类似地，对于我们的猜测2，则是 P(h2 | D)。不妨统一记为：</p>
<p>P(h | D)</p>
<p>运用一次贝叶斯公式，我们得到：</p>
<p><strong>P(h | D) = P(h) * P(D | h) / P(D)</strong></p>
<p>对于不同的具体猜测 h1 h2 h3 .. ，P(D) 都是一样的，所以在比较 P(h1 | D) 和 P(h2 | D) 的时候我们可以忽略这个常数。即我们只需要知道：</p>
<p>P(h | D) ∝ P(h) * P(D | h) （注：那个符号的意思是“正比例于”，不是无穷大，注意符号右端是有一个小缺口的。）</p>
<p>这个式子的抽象含义是：对于给定观测数据，一个猜测是好是坏，取决于“这个猜测本身独立的可能性大小（先验概率，Prior ）”和“这个猜测生成我们观测到的数据的可能性大小”（似然，Likelihood ）的乘积。具体到我们的那个 thew 例子上，含义就是，用户实际是想输入 the 的可能性大小取决于 the 本身在词汇表中被使用的可能性（频繁程度）大小（先验概率）和 想打 the 却打成 thew 的可能性大小（似然）的乘积。</p>
<p>下面的事情就很简单了，对于我们猜测为可能的每个单词计算一下 P(h) * P(D | h) 这个值，然后取最大的，得到的就是最靠谱的猜测。</p>
<p><strong>一点注记</strong>：Norvig 的拼写纠正器里面只提取了编辑距离为 2 以内的所有已知单词。这是为了避免去遍历字典中每个单词计算它们的 P(h) * P(D | h) ，但这种做法为了节省时间带来了一些误差。但话说回来难道我们人类真的回去遍历每个可能的单词来计算他们的后验概率吗？不可能。实际上，根据认知神经科学的观点，我们首先根据错误的单词做一个 bottom-up 的关联提取，提取出有可能是实际单词的那些候选单词，这个提取过程就是所谓的基于内容的提取，可以根据错误单词的一些模式片段提取出有限的一组候选，非常快地缩小的搜索空间（比如我输入 explaination ，单词里面就有充分的信息使得我们的大脑在常数时间内把可能性 narrow down 到 explanation 这个单词上，至于具体是根据哪些线索——如音节——来提取，又是如何在生物神经网络中实现这个提取机制的，目前还是一个没有弄清的领域）。然后，我们对这有限的几个猜测做一个 top-down 的预测，看看到底哪个对于观测数据（即错误单词）的预测效力最好，而如何衡量预测效率则就是用贝叶斯公式里面的那个 P(h) * P(D | h) 了——虽然我们很可能使用了<a href="http://www.douban.com/subject/1599035/">一些启发法来简化计算</a>。后面我们还会提到这样的 bottom-up 的关联提取。</p>
<p><strong>3. </strong><strong>模型比较与奥卡姆剃刀</strong></p>
<p><strong>3.1 </strong><strong>再访拼写纠正</strong></p>
<p>介绍了贝叶斯拼写纠正之后，接下来的一个自然而然的问题就来了：“<strong>为什么？</strong>”为什么要用贝叶斯公式？为什么贝叶斯公式在这里可以用？我们可以很容易地领会为什么贝叶斯公式用在前面介绍的那个男生女生长裤裙子的问题里是正确的。但为什么这里？</p>
<p>为了回答这个问题，一个常见的思路就是想想：<strong>非得这样吗？</strong>因为如果你想到了另一种做法并且证明了它也是靠谱的，那么将它与现在这个一比较，也许就能得出很有价值的信息。那么对于拼写纠错问题你能想到其他方案吗？</p>
<p>不管怎样，一个最常见的替代方案就是，选择离 thew 的<a href="http://en.wikipedia.org/wiki/Edit_distance">编辑距离</a>最近的。然而 the 和 thaw 离 thew 的编辑距离都是 1 。这可咋办捏？你说，不慌，那还是好办。我们就看到底哪个更可能被错打为 thew 就是了。我们注意到字母 e 和字母 w 在键盘上离得很紧，无名指一抽筋就不小心多打出一个 w 来，the 就变成 thew 了。而另一方面 thaw 被错打成 thew 的可能性就相对小一点，因为 e 和 a 离得较远而且使用的指头相差一个指头（一个是中指一个是小指，不像 e 和 w 使用的指头靠在一块——神经科学的证据表明紧邻的身体设施之间容易串位）。OK，很好，因为你现在已经是在用最大似然方法了，或者直白一点，你就是在计算那个使得 P(D | h) 最大的 h 。</p>
<p>而贝叶斯方法计算的是什么？是 P(h) * P(D | h) 。多出来了一个 P(h) 。我们刚才说了，这个多出来的 P(h) 是特定猜测的先验概率。为什么要掺和进一个先验概率？刚才说的那个最大似然不是挺好么？很雄辩地指出了 the 是更靠谱的猜测。有什么问题呢？既然这样，我们就从给最大似然找茬开始吧——我们假设两者的似然程度是一样或非常相近，这样不就难以区分哪个猜测更靠谱了吗？比如用户输入tlp ，那到底是 top 还是 tip ？（这个例子不怎么好，因为 top 和 tip 的词频可能仍然是接近的，但一时想不到好的英文单词的例子，我们不妨就假设 top 比 tip 常见许多吧，这个假设并不影响问题的本质。）这个时候，当最大似然不能作出决定性的判断时，先验概率就可以插手进来给出指示——“既然你无法决定，那么我告诉你，一般来说 top 出现的程度要高许多，所以更可能他想打的是 top ”）。</p>
<p>以上只是最大似然的一个问题，即并不能提供决策的全部信息。</p>
<p>最大似然还有另一个问题：即便一个猜测与数据非常符合，也并不代表这个猜测就是更好的猜测，因为这个猜测本身的可能性也许就非常低。比如 MacKay 在《Information Theory : Inference and Learning Algorithms》里面就举了一个很好的例子：-1 3 7 11 你说是等差数列更有可能呢？还是 -X^3 / 11 + 9/11*X^2 + 23/11 每项把前项作为 X 带入后计算得到的数列？此外曲线拟合也是，平面上 N 个点总是可以用 N-1 阶多项式来完全拟合，当 N 个点近似但不精确共线的时候，用 N-1 阶多项式来拟合能够精确通过每一个点，然而用直线来做拟合/线性回归的时候却会使得某些点不能位于直线上。你说到底哪个好呢？多项式？还是直线？一般地说肯定是越低阶的多项式越靠谱（当然前提是也不能忽视“似然”P(D | h) ，明摆着一个多项式分布您愣是去拿直线拟合也是不靠谱的，这就是为什么要把它们两者乘起来考虑。），原因之一就是低阶多项式更常见，先验概率（ P(h) ）较大（原因之二则隐藏在 P(D | h) 里面），这就是为什么我们要用<a href="http://en.wikipedia.org/wiki/Spline_interpolation">样条</a>来插值，而不是直接搞一个 N-1 阶多项式来通过任意 N 个点的原因。</p>
<p>以上分析当中隐含的哲学是，观测数据总是会有各种各样的误差，比如观测误差（比如你观测的时候一个 MM 经过你一不留神，手一抖就是一个误差出现了），所以如果过分去寻求能够完美解释观测数据的模型，就会落入所谓的数据<a href="http://en.wikipedia.org/wiki/Overfitting">过配（overfitting）</a>的境地，一个过配的模型试图连误差（噪音）都去解释（而实际上噪音又是不需要解释的），显然就过犹不及了。所以 P(D | h) 大不代表你的 h （猜测）就是更好的 h。还要看 P(h) 是怎样的。所谓<a href="http://en.wikipedia.org/wiki/Occam%27s_razor">奥卡姆剃刀</a>精神就是说：如果两个理论具有相似的解释力度，那么优先选择那个更简单的（往往也正是更平凡的，更少繁复的，更常见的）。</p>
<p>过分匹配的另一个原因在于当观测的结果并不是因为误差而显得“不精确”而是因为真实世界中对数据的结果产生贡献的因素太多太多，跟噪音不同，这些偏差是一些另外的因素集体贡献的结果，不是你的模型所能解释的——噪音那是不需要解释——一个现实的模型往往只提取出几个与结果相关度很高，很重要的因素（cause）。这个时候观察数据会倾向于围绕你的有限模型的预测结果呈<a href="http://en.wikipedia.org/wiki/Normal_Distribution">正态分布</a>，于是你实际观察到的结果就是这个正态分布的<a href="http://en.wikipedia.org/wiki/Random_sample">随机取样</a>，这个取样很可能受到其余因素的影响偏离你的模型所预测的中心，这个时候便不能贪心不足地试图通过改变模型来“完美”匹配数据，因为那些使结果偏离你的预测的贡献因素不是你这个有限模型里面含有的因素所能概括的，硬要打肿脸充胖子只能导致不实际的模型，举个教科书例子：身高和体重的实际关系近似于一个二阶多项式的关系，但大家都知道并不是只有身高才会对体重产生影响，物理世界影响体重的因素太多太多了，有人身材高大却瘦得跟稻草，有人却是横长竖不长。但不可否认的是总体上来说，那些特殊情况越是特殊就越是稀少，呈围绕最普遍情况（胖瘦适中）的正态分布，这个分布就保证了我们的身高——体重相关模型能够在大多数情况下做出靠谱的预测。但是——刚才说了，特例是存在的，就算不是特例，人有胖瘦，密度也有大小，所以完美符合身高——体重的某个假想的二阶多项式关系的人是不存在的，我们又不是欧几里德几何世界当中的理想多面体，所以，当我们对人群随机抽取了 N 个样本（数据点）试图对这 N 个数据点拟合出一个多项式的话就得注意，它肯定得是二阶多项式，我们要做的只是去根据数据点计算出多项式各项的参数（一个典型的方法就是最小二乘）；它肯定不是直线（我们又不是稻草），也不是三阶多项式四阶多项式.. 如果硬要完美拟合 N 个点，你可能会整出一个 N-1 阶多项式来——设想身高和体重的关系是 5 阶多项式看看？</p>
<p><strong>3.2 </strong><strong>模型比较理论（Model Comparasion）与贝叶斯奥卡姆剃刀（Bayesian Occam’s Razor）</strong></p>
<p>实际上，模型比较就是去比较哪个模型（猜测）更可能隐藏在观察数据的背后。其基本思想前面已经用拼写纠正的例子来说明了。我们对用户实际想输入的单词的猜测就是模型，用户输错的单词就是观测数据。我们通过：</p>
<p>P(h | D) ∝ P(h) * P(D | h)</p>
<p>来比较哪个模型最为靠谱。前面提到，光靠 P(D | h) （即“似然”）是不够的，有时候还需要引入 P(h) 这个先验概率。奥卡姆剃刀就是说 P(h) 较大的模型有较大的优势，而最大似然则是说最符合观测数据的（即 P(D | h) 最大的）最有优势。整个模型比较就是这两方力量的拉锯。我们不妨再举一个简单的例子来说明这一精神：你随便找枚硬币，掷一下，观察一下结果。好，你观察到的结果要么是“正”，要么是“反”（不，不是少林足球那枚硬币:P ），不妨假设你观察到的是“正”。现在你要去根据这个观测数据推断这枚硬币掷出“正”的概率是多大。根据最大似然估计的精神，我们应该猜测这枚硬币掷出“正”的概率是 1 ，因为这个才是能最大化 P(D | h) 的那个猜测。然而每个人都会大摇其头——很显然，你随机摸出一枚硬币这枚硬币居然没有反面的概率是“不存在的”，我们对一枚随机硬币是否一枚有偏硬币，偏了多少，是有着一个先验的认识的，这个认识就是绝大多数硬币都是基本公平的，偏得越多的硬币越少见（可以用一个 <a href="http://en.wikipedia.org/wiki/Beta_distribution">beta 分布</a>来表达这一先验概率）。将这个先验正态分布 p(θ) （其中 θ 表示硬币掷出正面的比例，小写的 p 代表这是<a href="http://en.wikipedia.org/wiki/Probability_density_function">概率密度函数</a>）结合到我们的问题中，我们便不是去最大化 P(D | h) ，而是去最大化 P(D | θ) * p(θ) ，显然 θ = 1 是不行的，因为 P(θ=1) 为 0 ，导致整个乘积也为 0 。实际上，只要对这个式子求一个导数就可以得到最值点。</p>
<p>以上说的是当我们知道先验概率 P(h) 的时候，光用最大似然是不靠谱的，因为最大似然的猜测可能先验概率非常小。然而，有些时候，我们对于先验概率一无所知，只能假设每种猜测的先验概率是均等的，这个时候就只有用最大似然了。实际上，统计学家和贝叶斯学家有一个有趣的争论，统计学家说：我们让数据自己说话。言下之意就是要摒弃先验概率。而贝叶斯支持者则说：数据会有各种各样的偏差，而一个靠谱的先验概率则可以对这些随机噪音做到健壮。事实证明贝叶斯派胜利了，胜利的关键在于所谓先验概率其实也是经验统计的结果，譬如为什么我们会认为绝大多数硬币是基本公平的？为什么我们认为大多数人的肥胖适中？为什么我们认为肤色是种族相关的，而体重则与种族无关？先验概率里面的“先验”并不是指先于一切经验，而是仅指先于我们“当前”给出的观测数据而已，在硬币的例子中先验指的只是先于我们知道投掷的结果这个经验，而并非“先天”。</p>
<p>然而，话说回来，有时候我们必须得承认，就算是基于以往的经验，我们手头的“先验”概率还是均匀分布，这个时候就必须依赖用最大似然，我们用前面留下的一个自然语言二义性问题来说明这一点：</p>
<blockquote><p>The girl saw the boy with a telescope.</p></blockquote>
<p>到底是 The girl saw-with-a-telescope the boy 这一语法结构，还是 The girl saw the-boy-with-a-telescope 呢？两种语法结构的常见程度都差不多（你可能会觉得后一种语法结构的常见程度较低，这是事后偏见，你只需想想 The girl saw the boy with a book 就知道了。当然，实际上从大规模语料统计结果来看后一种语法结构的确稍稍不常见一丁点，但是绝对不足以解释我们对第一种结构的强烈倾向）。那么到底为什么呢？</p>
<p>我们不妨先来看看 MacKay 在书中举的一个漂亮的例子：</p>
<p><a href="http://mindhacks.cn/wp-content/uploads/2009/02/i1.jpg"><img title="i1" src="http://mindhacks.cn/wp-content/uploads/2009/02/i1-thumb.jpg" border="0" alt="i1" width="384" height="371" /></a></p>
<p>图中有多少个箱子？特别地，那棵书后面是一个箱子？还是两个箱子？还是三个箱子？还是.. 你可能会觉得树后面肯定是一个箱子，但为什么不是两个呢？如下图：</p>
<p><a href="http://mindhacks.cn/wp-content/uploads/2009/02/i2.jpg"><img title="i2" src="http://mindhacks.cn/wp-content/uploads/2009/02/i2-thumb.jpg" border="0" alt="i2" width="262" height="368" /></a></p>
<p>很简单，你会说：要是真的有两个箱子那才怪了，怎么就那么巧这两个箱子刚刚好颜色相同，高度相同呢？</p>
<p>用概率论的语言来说，你刚才的话就翻译为：猜测 h 不成立，因为 P(D | h) 太小（太巧合）了。我们的直觉是：巧合（小概率）事件不会发生。所以当一个猜测（假设）使得我们的观测结果成为小概率事件的时候，我们就说“才怪呢，哪能那么巧捏？！”</p>
<p>现在我们可以回到那个自然语言二义性的例子，并给出一个完美的解释了：如果语法结构是 The girl saw the-boy-with-a-telecope 的话，怎么那个男孩偏偏手里拿的就是望远镜——一个可以被用来 saw-with 的东东捏？这也忒小概率了吧。他咋就不会拿本书呢？拿什么都好。怎么偏偏就拿了望远镜？所以唯一的解释是，这个“巧合”背后肯定有它的必然性，这个必然性就是，如果我们将语法结构解释为 The girl saw-with-a-telescope the boy 的话，就跟数据完美吻合了——既然那个女孩是用某个东西去看这个男孩的，那么这个东西是一个望远镜就完全可以解释了（不再是小概率事件了）。</p>
<p>自然语言二义性很常见，譬如上文中的一句话：</p>
<blockquote><p>参见《决策与判断》以及《<a href="http://www.douban.com/subject/3199621/">Rationality for Mortals</a>》第12章：小孩也可以解决贝叶斯问题</p></blockquote>
<p>就有二义性：到底是参见这两本书的第 12 章，还是仅仅是第二本书的第 12 章呢？如果是这两本书的第 12 章那就是咄咄怪事了，怎么恰好两本书都有第 12 章，都是讲同一个问题，更诡异的是，标题还相同呢？</p>
<p>注意，以上做的是似然估计（即只看 P(D | h) 的大小），不含先验概率。通过这两个例子，尤其是那个树后面的箱子的例子我们可以看到，似然估计里面也蕴含着奥卡姆剃刀：树后面的箱子数目越多，这个模型就越复杂。单个箱子的模型是最简单的。似然估计选择了更简单的模型。</p>
<p>这个就是所谓的<strong>贝叶斯奥卡姆剃刀（Bayesian Occam’s Razor）</strong>，因为这个剃刀工作在贝叶斯公式的似然（P(D | h) ）上，而不是模型本身（ P(h) ）的先验概率上，后者是传统的奥卡姆剃刀。关于贝叶斯奥卡姆剃刀我们再来看一个前面说到的曲线拟合的例子：如果平面上有 N 个点，近似构成一条直线，但绝不精确地位于一条直线上。这时我们既可以用直线来拟合（模型1），也可以用二阶多项式（模型2）拟合，也可以用三阶多项式（模型3），.. ，特别地，用 N-1 阶多项式便能够保证肯定能完美通过 N 个数据点。那么，这些可能的模型之中到底哪个是最靠谱的呢？前面提到，一个衡量的依据是奥卡姆剃刀：越是高阶的多项式越是繁复和不常见。然而，我们其实并不需要依赖于这个先验的奥卡姆剃刀，因为有人可能会争辩说：你怎么就能说越高阶的多项式越不常见呢？我偏偏觉得所有阶多项式都是等可能的。好吧，既然如此那我们不妨就扔掉 P(h) 项，看看 P(D | h) 能告诉我们什么。我们注意到越是高阶的多项式，它的轨迹弯曲程度越是大，到了八九阶简直就是直上直下，于是我们不仅要问：一个比如说八阶多项式在平面上随机生成的一堆 N 个点偏偏恰好近似构成一条直线的概率（即 P(D | h) ）有多大？太小太小了。反之，如果背后的模型是一条直线，那么根据该模型生成一堆近似构成直线的点的概率就大得多了。这就是贝叶斯奥卡姆剃刀。</p>
<p>这里只是提供一个关于贝叶斯奥卡姆剃刀的科普，强调直观解释，更多理论公式请参考 MacKay 的著作 《Information Theory : Inference and Learning Algorithms》第 28 章。</p>
<p><strong>3.3 </strong><strong>最小描述长度原则</strong></p>
<p>贝叶斯模型比较理论与信息论有一个有趣的关联：</p>
<p>P(h | D) ∝ P(h) * P(D | h)</p>
<p>两边求对数，将右式的乘积变成相加：</p>
<p>ln P(h | D) ∝ ln P(h) + ln P(D | h)</p>
<p>显然，最大化 P(h | D) 也就是最大化 ln P(h | D)。而 ln P(h) + ln P(D | h) 则可以解释为模型（或者称“假设”、“猜测”）h 的编码长度加上在该模型下数据 D 的编码长度。使这个和最小的模型就是最佳模型。</p>
<p>而究竟如何定义一个模型的编码长度，以及数据在模型下的编码长度则是一个问题。更多可参考 Mitchell 的 《Machine Learning》的 6.6 节，或 Mackay 的 28.3 节）</p>
<p><strong>3.4 </strong><strong>最优贝叶斯推理</strong></p>
<p>所谓的推理，分为两个过程，第一步是对观测数据建立一个模型。第二步则是使用这个模型来推测未知现象发生的概率。我们前面都是讲的对于观测数据给出最靠谱的那个模型。然而很多时候，虽然某个模型是所有模型里面最靠谱的，但是别的模型也并不是一点机会都没有。譬如第一个模型在观测数据下的概率是 0.5 。第二个模型是 0.4 ，第三个是 0.1 。如果我们只想知道对于观测数据哪个模型最可能，那么只要取第一个就行了，故事到此结束。然而很多时候我们建立模型是为了推测未知的事情的发生概率，这个时候，三个模型对未知的事情发生的概率都会有自己的预测，仅仅因为某一个模型概率稍大一点就只听他一个人的就太不民主了。所谓的最优贝叶斯推理就是将三个模型对于未知数据的预测结论加权平均起来（权值就是模型相应的概率）。显然，这个推理是理论上的制高点，无法再优了，因为它已经把所有可能性都考虑进去了。</p>
<p>只不过实际上我们是基本不会使用这个框架的，因为计算模型可能非常费时间，二来模型空间可能是连续的，即有无穷多个模型（这个时候需要计算模型的概率分布）。结果还是非常费时间。所以这个被看作是一个理论基准。</p>
<p><strong>4. </strong><strong>无处不在的贝叶斯</strong></p>
<p>以下我们再举一些实际例子来说明贝叶斯方法被运用的普遍性，这里主要集中在机器学习方面，因为我不是学经济的，否则还可以找到一堆经济学的例子。</p>
<p><strong>4.1 </strong><strong>中文分词</strong></p>
<p>贝叶斯是机器学习的核心方法之一。比如中文分词领域就用到了贝叶斯。Google 研究员吴军在《数学之美》系列中就有一篇是介绍中文分词的，这里只介绍一下核心的思想，不做赘述，详细请参考吴军的文章（<a href="http://www.googlechinablog.com/2006/04/blog-post_10.html">这里</a>）。</p>
<p>分词问题的描述为：给定一个句子（字串），如：</p>
<p>南京市长江大桥</p>
<p>如何对这个句子进行分词（词串）才是最靠谱的。例如：</p>
<p>1. 南京市/长江大桥</p>
<p>2. 南京/市长/江大桥</p>
<p>这两个分词，到底哪个更靠谱呢？</p>
<p>我们用贝叶斯公式来形式化地描述这个问题，令 X 为字串（句子），Y 为词串（一种特定的分词假设）。我们就是需要寻找使得 P(Y|X) 最大的 Y ，使用一次贝叶斯可得：</p>
<p>P(Y|X) ∝ P(Y)*P(X|Y)</p>
<p>用自然语言来说就是 这种分词方式（词串）的可能性 乘以 这个词串生成我们的句子的可能性。我们进一步容易看到：可以近似地将 P(X|Y) 看作是恒等于 1 的，因为任意假想的一种分词方式之下生成我们的句子总是精准地生成的（只需把分词之间的分界符号扔掉即可）。于是，我们就变成了去最大化 P(Y) ，也就是寻找一种分词使得这个词串（句子）的概率最大化。而如何计算一个词串：</p>
<p>W1, W2, W3, W4 ..</p>
<p>的可能性呢？我们知道，根据<a href="http://en.wikipedia.org/wiki/Joint_probability">联合概率</a>的公式展开：P(W1, W2, W3, W4 ..) = P(W1) * P(W2|W1) * P(W3|W2, W1) * P(W4|W1,W2,W3) * .. 于是我们可以通过一系列的条件概率（右式）的乘积来求整个联合概率。然而不幸的是随着条件数目的增加（P(Wn|Wn-1,Wn-2,..,W1) 的条件有 n-1 个），<a href="http://en.wikipedia.org/wiki/Curse_of_dimensionality">数据稀疏问题</a>也会越来越严重，即便语料库再大也无法统计出一个靠谱的 P(Wn|Wn-1,Wn-2,..,W1) 来。为了缓解这个问题，计算机科学家们一如既往地使用了“天真”假设：我们假设句子中一个词的出现概率只依赖于它前面的有限的 k 个词（k 一般不超过 3，如果只依赖于前面的一个词，就是2元<a href="http://en.wikipedia.org/wiki/N-gram">语言模型</a>（2-gram），同理有 3-gram 、 4-gram 等），这个就是所谓的“有限地平线”假设。虽然这个假设很傻很天真，但结果却表明它的结果往往是很好很强大的，后面要提到的朴素贝叶斯方法使用的假设跟这个精神上是完全一致的，我们会解释为什么像这样一个天真的假设能够得到强大的结果。目前我们只要知道，有了这个假设，刚才那个乘积就可以改写成： P(W1) * P(W2|W1) * P(W3|W2) * P(W4|W3) .. （假设每个词只依赖于它前面的一个词）。而统计 P(W2|W1) 就不再受到数据稀疏问题的困扰了。对于我们上面提到的例子“南京市长江大桥”，如果按照自左到右的贪婪方法分词的话，结果就成了“南京市长/江大桥”。但如果按照贝叶斯分词的话（假设使用 3-gram），由于“南京市长”和“江大桥”在语料库中一起出现的频率为 0 ，这个整句的概率便会被判定为 0 。 从而使得“南京市/长江大桥”这一分词方式胜出。</p>
<p><strong>一点注记</strong>：有人可能会疑惑，难道我们人类也是基于这些天真的假设来进行推理的？不是的。事实上，统计机器学习方法所统计的东西往往处于相当表层（shallow）的层面，在这个层面机器学习只能看到一些非常表面的现象，有一点科学研究的理念的人都知道：越是往表层去，世界就越是繁复多变。从机器学习的角度来说，特征（feature）就越多，成百上千维度都是可能的。特征一多，好了，<a href="http://en.wikipedia.org/wiki/Curse_of_dimensionality">高维诅咒</a>就产生了，数据就稀疏得要命，不够用了。而我们人类的观察水平显然比机器学习的观察水平要更深入一些，为了避免数据稀疏我们不断地发明各种装置（最典型就是显微镜），来帮助我们直接深入到更深层的事物层面去观察更本质的联系，而不是在浅层对表面现象作统计归纳。举一个简单的例子，通过对大规模语料库的统计，机器学习可能会发现这样一个规律：所有的“他”都是不会穿 bra 的，所有的“她”则都是穿的。然而，作为一个男人，却完全无需进行任何统计学习，因为深层的规律就决定了我们根本不会去穿 bra 。至于机器学习能不能完成后者（像人类那样的）这个推理，则是人工智能领域的经典问题。至少在那之前，<a href="http://www.yeeyan.com/articles/view/sylviaangel/9995">声称统计学习方法能够终结科学研究</a>（<a href="http://www.wired.com/science/discoveries/magazine/16-07/pb_theory">原文</a>）的说法<a href="http://scienceblogs.com/goodmath/2008/07/petabyte_scale_dataanalysis_an.php">是纯粹外行人说的话</a>。</p>
<p><strong>4.2 </strong><strong>统计机器翻译</strong></p>
<p>统计机器翻译因为其简单，自动（无需手动添加规则），迅速成为了机器翻译的事实标准。而统计机器翻译的核心算法也是使用的贝叶斯方法。</p>
<p>问题是什么？统计机器翻译的问题可以描述为：给定一个句子 e ，它的可能的外文翻译 f 中哪个是最靠谱的。即我们需要计算：P(f|e) 。一旦出现条件概率贝叶斯总是挺身而出：</p>
<p>P(f|e) ∝ P(f) * P(e|f)</p>
<p>这个式子的右端很容易解释：那些先验概率较高，并且更可能生成句子 e 的外文句子 f 将会胜出。我们只需简单统计（结合上面提到的 N-Gram 语言模型）就可以统计任意一个外文句子 f 的出现概率。然而 P(e|f) 却不是那么好求的，给定一个候选的外文局子 f ，它生成（或对应）句子 e 的概率是多大呢？我们需要定义什么叫 “对应”，这里需要用到一个分词对齐的平行语料库，有兴趣的可以参考 《Foundations of Statistical Natural Language Processing》第 13 章，这里摘选其中的一个例子：假设 e 为：John loves Mary 。我们需要考察的首选 f 是：Jean aime Marie （法文）。我们需要求出 P(e|f) 是多大，为此我们考虑 e 和 f 有多少种对齐的可能性，如：</p>
<p>John (Jean) loves (aime) Marie (Mary)</p>
<p>就是其中的一种（最靠谱的）对齐，为什么要对齐，是因为一旦对齐了之后，就可以容易地计算在这个对齐之下的 P(e|f) 是多大，只需计算：</p>
<p>P(John|Jean) * P(loves|aime) * P(Marie|Mary)</p>
<p>即可。</p>
<p>然后我们遍历所有的对齐方式，并将每种对齐方式之下的翻译概率 ∑ 求和。便可以获得整个的 P(e|f) 是多大。</p>
<p><strong>一点注记</strong>：还是那个问题：难道我们人类真的是用这种方式进行翻译的？highly unlikely 。这种计算复杂性非常高的东西连三位数乘法都搞不定的我们才不会笨到去使用呢。根据认知神经科学的认识，很可能我们是先从句子到语义（一个逐层往上（bottom-up）抽象的 folding 过程），然后从语义根据另一门语言的语法展开为另一门语言（一个逐层往下（top-down）的具体化 unfolding 过程）。如何可计算地实现这个过程，目前仍然是个难题。（我们看到很多地方都有 bottom-up/top-down 这样一个对称的过程，实际上有人猜测这正是生物神经网络原则上的运作方式，对视觉神经系统的研究尤其证明了这一点，Hawkins 在 《On Intelligence》 里面提出了一种 <a href="http://en.wikipedia.org/wiki/Hierarchical_Temporal_Memory">HTM</a> （Hierarchical Temporal Memory）模型正是使用了这个原则。）</p>
<p><strong>4.3 </strong><strong>贝叶斯图像识别，Analysis by Synthesis</strong></p>
<p>贝叶斯方法是一个非常 general 的推理框架。其核心理念可以描述成：Analysis by Synthesis （通过合成来分析）。06 年的认知科学新进展上有一篇 paper 就是讲用贝叶斯推理来解释视觉识别的，一图胜千言，下图就是摘自这篇 paper ：</p>
<p><a href="http://mindhacks.cn/wp-content/uploads/2009/02/i3.jpg"><img title="i3" src="http://mindhacks.cn/wp-content/uploads/2009/02/i3-thumb.jpg" border="0" alt="i3" width="604" height="216" /></a></p>
<p>首先是视觉系统提取图形的边角特征，然后使用这些特征自底向上地激活高层的抽象概念（比如是 E 还是 F 还是等号），然后使用一个自顶向下的验证来比较到底哪个概念最佳地解释了观察到的图像。</p>
<p><strong>4.4  EM </strong><strong>算法与基于模型的聚类</strong></p>
<p><a href="http://en.wikipedia.org/wiki/Data_clustering">聚类</a>是一种<a href="http://en.wikipedia.org/wiki/Unsupervised_learning">无指导的机器学习</a>问题，问题描述：给你一堆数据点，让你将它们最靠谱地分成一堆一堆的。聚类算法很多，不同的算法适应于不同的问题，这里仅介绍一个基于模型的聚类，该聚类算法对数据点的假设是，这些数据点分别是围绕 K 个核心的 K 个正态分布源所随机生成的，使用 Han JiaWei 的《Data Ming： Concepts and Techniques》中的图：</p>
<p><a href="http://mindhacks.cn/wp-content/uploads/2009/02/i4.jpg"><img title="i4" src="http://mindhacks.cn/wp-content/uploads/2009/02/i4-thumb.jpg" border="0" alt="i4" width="532" height="324" /></a></p>
<p>图中有两个正态分布核心，生成了大致两堆点。我们的聚类算法就是需要根据给出来的那些点，算出这两个正态分布的核心在什么位置，以及分布的参数是多少。这很明显又是一个贝叶斯问题，但这次不同的是，答案是连续的且有无穷多种可能性，更糟的是，只有当我们知道了哪些点属于同一个正态分布圈的时候才能够对这个分布的参数作出靠谱的预测，现在两堆点混在一块我们又不知道哪些点属于第一个正态分布，哪些属于第二个。反过来，只有当我们对分布的参数作出了靠谱的预测时候，才能知道到底哪些点属于第一个分布，那些点属于第二个分布。这就成了一个先有鸡还是先有蛋的问题了。为了解决这个循环依赖，总有一方要先打破僵局，说，不管了，我先随便整一个值出来，看你怎么变，然后我再根据你的变化调整我的变化，然后如此迭代着不断互相推导，最终收敛到一个解。这就是 EM 算法。</p>
<p>EM 的意思是“Expectation-Maximazation”，在这个聚类问题里面，我们是先随便猜一下这两个正态分布的参数：如核心在什么地方，方差是多少。然后计算出每个数据点更可能属于第一个还是第二个正态分布圈，这个是属于 Expectation 一步。有了每个数据点的归属，我们就可以根据属于第一个分布的数据点来重新评估第一个分布的参数（从蛋再回到鸡），这个是 Maximazation 。如此往复，直到参数基本不再发生变化为止。这个迭代收敛过程中的贝叶斯方法在第二步，根据数据点求分布的参数上面。</p>
<p><strong>4.5 </strong><strong>最大似然与最小二乘</strong></p>
<p><a href="http://mindhacks.cn/wp-content/uploads/2009/02/i5.png"><img title="i5" src="http://mindhacks.cn/wp-content/uploads/2009/02/i5-thumb.png" border="0" alt="i5" width="184" height="232" /></a></p>
<p>学过线性代数的大概都知道经典的最小二乘方法来做线性回归。问题描述是：给定平面上 N 个点，（这里不妨假设我们想用一条直线来拟合这些点——<a href="http://en.wikipedia.org/wiki/Regression_analysis">回归</a>可以看作是<a href="http://en.wikipedia.org/wiki/Curve_fitting">拟合</a>的特例，即允许误差的拟合），找出一条最佳描述了这些点的直线。</p>
<p>一个接踵而来的问题就是，我们如何定义最佳？我们设每个点的坐标为 (Xi, Yi) 。如果直线为 y = f(x) 。那么 (Xi, Yi) 跟直线对这个点的“预测”：(Xi, f(Xi)) 就相差了一个 ΔYi = |Yi – f(Xi)| 。最小二乘就是说寻找直线使得 (ΔY1)^2 + (ΔY2)^2 + .. （即误差的平方和）最小，至于为什么是误差的平方和而不是误差的绝对值和，统计学上也没有什么好的解释。然而贝叶斯方法却能对此提供一个完美的解释。</p>
<p>我们假设直线对于坐标 Xi 给出的预测 f(Xi) 是最靠谱的预测，所有纵坐标偏离 f(Xi) 的那些数据点都含有噪音，是噪音使得它们偏离了完美的一条直线，一个合理的假设就是偏离路线越远的概率越小，具体小多少，可以用一个正态分布曲线来模拟，这个分布曲线以直线对 Xi 给出的预测 f(Xi) 为中心，实际纵坐标为 Yi 的点 (Xi, Yi) 发生的概率就正比于 EXP[-(ΔYi)^2]。（EXP(..) 代表以常数 e 为底的多少次方）。</p>
<p>现在我们回到问题的贝叶斯方面，我们要想最大化的后验概率是：</p>
<p>P(h|D) ∝ P(h) * P(D|h)</p>
<p>又见贝叶斯！这里 h 就是指一条特定的直线，D 就是指这 N 个数据点。我们需要寻找一条直线 h 使得 P(h) * P(D|h) 最大。很显然，P(h) 这个先验概率是均匀的，因为哪条直线也不比另一条更优越。所以我们只需要看 P(D|h) 这一项，这一项是指这条直线生成这些数据点的概率，刚才说过了，生成数据点 (Xi, Yi) 的概率为 EXP[-(ΔYi)^2] 乘以一个常数。而 P(D|h) = P(d1|h) * P(d2|h) * .. 即假设各个数据点是独立生成的，所以可以把每个概率乘起来。于是生成 N 个数据点的概率为 EXP[-(ΔY1)^2] * EXP[-(ΔY2)^2] * EXP[-(ΔY3)^2] * .. = EXP<strong>{-[(ΔY1)^2 + (ΔY2)^2 + (ΔY3)^2 + ..</strong>]} 最大化这个概率就是要最小化 (ΔY1)^2 + (ΔY2)^2 + (ΔY3)^2 + .. 。 熟悉这个式子吗？</p>
<p><strong>5. </strong><strong>朴素贝叶斯方法</strong></p>
<p>朴素贝叶斯方法是一个很特别的方法，所以值得介绍一下。我们用朴素贝叶斯在垃圾邮件过滤中的应用来举例说明。</p>
<p><strong>5.1 </strong><strong>贝叶斯垃圾邮件过滤器</strong></p>
<p>问题是什么？问题是，给定一封邮件，判定它是否属于垃圾邮件。按照先例，我们还是用 D 来表示这封邮件，注意 D 由 N 个单词组成。我们用 h+ 来表示垃圾邮件，h- 表示正常邮件。问题可以形式化地描述为求：</p>
<p>P(h+|D) = P(h+) * P(D|h+) / P(D)</p>
<p>P(h-|D) = P(h-) * P(D|h-) / P(D)</p>
<p>其中 P(h+) 和 P(h-) 这两个先验概率都是很容易求出来的，只需要计算一个邮件库里面垃圾邮件和正常邮件的比例就行了。然而 P(D|h+) 却不容易求，因为 D 里面含有 N 个单词 d1, d2, d3, .. ，所以P(D|h+) = P(d1,d2,..,dn|h+) 。我们又一次遇到了数据稀疏性，为什么这么说呢？P(d1,d2,..,dn|h+) 就是说在垃圾邮件当中出现跟我们目前这封邮件一模一样的一封邮件的概率是多大！开玩笑，每封邮件都是不同的，世界上有无穷多封邮件。瞧，这就是数据稀疏性，因为可以肯定地说，你收集的训练数据库不管里面含了多少封邮件，也不可能找出一封跟目前这封一模一样的。结果呢？我们又该如何来计算 P(d1,d2,..,dn|h+) 呢？</p>
<p>我们将 P(d1,d2,..,dn|h+)  扩展为： P(d1|h+) * P(d2|d1, h+) * P(d3|d2,d1, h+) * .. 。熟悉这个式子吗？这里我们会使用一个更激进的假设，我们假设 di 与 di-1 是完全条件无关的，于是式子就简化为 P(d1|h+) * P(d2|h+) * P(d3|h+) * .. 。这个就是所谓的<a href="http://en.wikipedia.org/wiki/Conditional_independence">条件独立假设</a>，也正是朴素贝叶斯方法的朴素之处。而计算 P(d1|h+) * P(d2|h+) * P(d3|h+) * .. 就太简单了，只要统计 di 这个单词在垃圾邮件中出现的频率即可。关于贝叶斯垃圾邮件过滤更多的内容可以参考<a href="http://en.wikipedia.org/wiki/Bayesian_spam_filtering">这个条目</a>，注意其中提到的其他资料。</p>
<p><strong>一点注记</strong>：这里，为什么有这个数据稀疏问题，还是因为统计学习方法工作在浅层面，世界上的单词就算不再变多也是非常之多的，单词之间组成的句子也是变化多端，更不用说一篇文章了，文章数目则是无穷的，所以在这个层面作统计，肯定要被数据稀疏性困扰。我们要注意，虽然句子和文章的数目是无限的，然而就拿邮件来说，如果我们只关心邮件中句子的语义（进而更高抽象层面的“意图”（语义，意图如何可计算地定义出来是一个人工智能问题），在这个层面上可能性便大大缩减了，我们关心的抽象层面越高，可能性越小。单词集合和句子的对应是多对一的，句子和语义的对应又是多对一的，语义和意图的对应还是多对一的，这是个层级体系。神经科学的发现也表明大脑的皮层大致有一种层级结构，对应着越来越抽象的各个层面，至于如何具体实现一个可放在计算机内的大脑皮层，仍然是一个未解决问题，以上只是一个原则（principle）上的认识，只有当 computational 的 cortex 模型被建立起来了之后才可能将其放入电脑。</p>
<p><strong>5.2 </strong><strong>为什么朴素贝叶斯方法令人诧异地好——一个理论解释</strong></p>
<p>朴素贝叶斯方法的条件独立假设看上去很傻很天真，为什么结果却很好很强大呢？就拿一个句子来说，我们怎么能鲁莽地声称其中任意一个单词出现的概率只受到它前面的 3 个或 4 个单词的影响呢？别说 3 个，有时候一个单词的概率受到上一句话的影响都是绝对可能的。那么为什么这个假设在实际中的表现却不比决策树差呢？有人对此提出了一个理论解释，并且建立了什么时候朴素贝叶斯的效果能够等价于非朴素贝叶斯的充要条件，这个解释的核心就是：有些独立假设在各个分类之间的分布都是均匀的所以对于似然的相对大小不产生影响；即便不是如此，也有很大的可能性各个独立假设所产生的消极影响或积极影响互相抵消，最终导致结果受到的影响不大。具体的数学公式请参考<a href="http://www.cs.unb.ca/profs/hzhang/publications/FLAIRS04ZhangH.pdf">这篇 paper</a> 。</p>
<p><strong>6. </strong><strong>层级贝叶斯模型</strong></p>
<p><a href="http://mindhacks.cn/wp-content/uploads/2009/02/i6.png"><img title="i6" src="http://mindhacks.cn/wp-content/uploads/2009/02/i6-thumb.png" border="0" alt="i6" width="226" height="262" /></a></p>
<p><a href="http://en.wikipedia.org/wiki/Hierarchical_Bayes_model">层级贝叶斯模型</a>是现代贝叶斯方法的标志性建筑之一。前面讲的贝叶斯，都是在同一个事物层次上的各个因素之间进行统计推理，然而层次贝叶斯模型在哲学上更深入了一层，将这些因素背后的因素（原因的原因，原因的原因，以此类推）囊括进来。一个教科书例子是：如果你手头有 N 枚硬币，它们是同一个工厂铸出来的，你把每一枚硬币掷出一个结果，然后基于这 N 个结果对这 N 个硬币的 θ （出现正面的比例）进行推理。如果根据最大似然，每个硬币的 θ 不是 1 就是 0 （这个前面提到过的），然而我们又知道每个硬币的 p(θ) 是有一个先验概率的，也许是一个 beta 分布。也就是说，每个硬币的实际投掷结果 Xi 服从以 θ 为中心的正态分布，而 θ 又服从另一个以 Ψ 为中心的 beta 分布。层层因果关系就体现出来了。进而 Ψ 还可能依赖于因果链上更上层的因素，以此类推。</p>
<p><strong>6.1 </strong><strong>隐马可夫模型（HMM）</strong></p>
<p><a href="http://mindhacks.cn/wp-content/uploads/2009/02/i7.png"><img title="i7" src="http://mindhacks.cn/wp-content/uploads/2009/02/i7-thumb.png" border="0" alt="i7" width="304" height="244" /></a></p>
<p>吴军在数学之美系列里面介绍的<a href="http://en.wikipedia.org/wiki/Hidden_Markov_model">隐马可夫模型</a>（HMM）就是一个简单的层级贝叶斯模型：</p>
<blockquote><p>那么怎么根据接收到的信息来推测说话者想表达的意思呢？我们可以利用叫做“隐含马尔可夫模型”（Hidden Markov Model）来解决这些问题。以语音识别为例，当我们观测到语音信号 o1,o2,o3 时，我们要根据这组信号推测出发送的句子 s1,s2,s3。显然，我们应该在所有可能的句子中找最有可能性的一个。用数学语言来描述，就是在已知 o1,o2,o3,…的情况下，求使得条件概率 P (s1,s2,s3,…|o1,o2,o3….) 达到最大值的那个句子 s1,s2,s3,…</p></blockquote>
<p>吴军的文章中这里省掉没说的是，s1, s2, s3, .. 这个句子的生成概率同时又取决于一组参数，这组参数决定了 s1, s2, s3, .. 这个马可夫链的先验生成概率。如果我们将这组参数记为 λ ，我们实际上要求的是：P(S|O, λ) （其中 O 表示 o1,o2,o3,.. ，S表示 s1,s2,s3,..）</p>
<blockquote><p>当然，上面的概率不容易直接求出，于是我们可以间接地计算它。利用贝叶斯公式并且省掉一个常数项，可以把上述公式等价变换成</p>
<p>P(o1,o2,o3,…|s1,s2,s3….) * P(s1,s2,s3,…)</p>
<p>其中</p>
<p>P(o1,o2,o3,…|s1,s2,s3….) 表示某句话 s1,s2,s3…被读成 o1,o2,o3,…的可能性, 而 P(s1,s2,s3,…) 表示字串 s1,s2,s3,…本身能够成为一个合乎情理的句子的可能性，所以这个公式的意义是用发送信号为 s1,s2,s3…这个数列的可能性乘以 s1,s2,s3.. 本身可以一个句子的可能性，得出概率。</p></blockquote>
<p>这里，s1,s2,s3…本身可以一个句子的可能性其实就取决于参数 λ ，也就是语言模型。所以简而言之就是发出的语音信号取决于背后实际想发出的句子，而背后实际想发出的句子本身的独立先验概率又取决于语言模型。</p>
<p><strong>7. </strong><strong>贝叶斯网络</strong></p>
<p>吴军已经对贝叶斯网络作了科普，请直接跳转到<a href="http://googlechinablog.com/2007/01/bayesian-networks.html">这里</a>。更详细的理论参考所有机器学习的书上都有。</p>
<p><strong>参考资料</strong></p>
<p>一堆机器学习，一堆概率统计，一堆 Google ，和一堆 Wikipedia 条目，一堆 paper 。</p>
<p>部分书籍参考<a href="http://blog.csdn.net/pongba/archive/2008/09/11/2915005.aspx">《机器学习与人工智能资源导引》</a>。</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mryang.org/2011/11/bayse/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>dotproject 2.1.5几个问题的解决</title>
		<link>http://www.mryang.org/2011/10/dotproject-2-1-5_some_problem/</link>
		<comments>http://www.mryang.org/2011/10/dotproject-2-1-5_some_problem/#comments</comments>
		<pubDate>Sat, 22 Oct 2011 13:56:26 +0000</pubDate>
		<dc:creator>mryang</dc:creator>
				<category><![CDATA[学习笔记]]></category>
		<category><![CDATA[dotporject]]></category>
		<category><![CDATA[项目管理]]></category>

		<guid isPermaLink="false">http://www.mryang.org/?p=791</guid>
		<description><![CDATA[在尝试了众多开源项目管理软件后，还是觉得Dotproject比较靠谱一点。但Dotproject安装后，有两个比较重要的问题需要解决。

第一个就是甘特图乱码问题，这个问题比较常见，参照【dotproject 2.1.5 乱码问题】解决了部分乱码问题，但是在公司和代办事项中的甘特图还是乱码，最后参照【解决DotProject 甘特图中文乱码】解决。

第二个问题是在文件管理中新增文件时，在选择任务的对话框中出现“Incorrect parameters passed”错误，最终发现是文件modules/files/addedit.php的139行中window.open的参数中，在代码dialog=1和callback=setTask之间少了一个“&#38;”，正确的应该如下：

<span class="readmore"><a href="http://www.mryang.org/2011/10/dotproject-2-1-5_some_problem/" title="dotproject 2.1.5几个问题的解决">阅读全文——共1035字</a></span>]]></description>
			<content:encoded><![CDATA[<p>在尝试了众多开源项目管理软件后，还是觉得<a title="DotProject" href="http://www.dotproject.net/" target="_blank">Dotproject</a>比较靠谱一点。但Dotproject安装后，有两个比较重要的问题需要解决。</p>
<p>第一个就是甘特图乱码问题，这个问题比较常见，参照【<a title="dotproject 2.1.5 乱码问题" href="http://www.minierp.cn/blog/?post=15" target="_blank">dotproject 2.1.5 乱码问题</a>】解决了部分乱码问题，但是在公司和代办事项中的甘特图还是乱码，最后参照【<a href="http://juwen.blog.51cto.com/135311/84919" target="_blank">解决DotProject 甘特图中文乱码</a>】解决。</p>
<p>第二个问题是在文件管理中新增文件时，在选择任务的对话框中出现“Incorrect parameters passed”错误，最终发现是文件modules/files/addedit.php的139行中window.open的参数中，在代码dialog=1和callback=setTask之间少了一个“&amp;”，正确的应该如下：</p>
<blockquote><p>window.open(&#8216;?m=public&amp;a=selector&amp;dialog=1&amp;callback=setTask&amp;table=tasks&amp;task_project=&#8217;		            + f.file_project.options[f.file_project.selectedIndex].value, &#8216;task&#8217;,'left=50,top=50,height=250,width=400,resizable&#8217;)</p></blockquote>
<p>以下是使用过的开源项目管理软件：</p>
<ol>
<li><a title="streber" href="http://www.streber-pm.org/" target="_blank">Streber</a>：一个用Wiki语法表达项目中所有内容的项目管理系统，比较欣赏这种模式，通过Wiki语法，把项目中的各知识链在了一起，速度也比较快，页面简洁。但是需要使用wiki语法，填写内容时需要花费点时间，而且要求成员都需要遵循wiki语法来填写日志，要求有点高。目前来看还不太成熟，但这应该是项目管理的一个趋势。</li>
<li><a href="http://collabtive.o-dyn.de/" target="_blank">Collabtive</a>：一个基于Web的项目管理系统。提供的功能包括：项目管理，即时聊天工具，任务、文件管理，时间跟踪，多语言支持。Bug较多，使用起来不太方便，特别是软件开发项目。</li>
<li><a href="http://www.projectpier.org/" target="_blank">ProjectPier</a>：一个项目管理和团队协作系统。可管理一个或数个团队的项目，并提供讨论版、站内讯息、档案管理、里程碑来协助团队管理。用的时间还比较长，但是其中的功能模块不太完善，不太适合软件开发。</li>
<li><a href="http://code.google.com/p/zentaoms/" target="_blank">禅道</a>：基于极限编程理念的项目管理系统，与传统的有区别，用了一段时间，很难理解和实施极限编程，最后只好放弃了。</li>
</ol>
<p>昨日又看到一个用.net写的项目管理系统TeamLab，系统基于现在的云计算，并提供免费的在线空间，代码开源，可以下载自己部署。感觉还不错，有空了可以尝试一下。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mryang.org/2011/10/dotproject-2-1-5_some_problem/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>给未来的你 ——李开复在2011级大学新生学习规划讲座上的演讲[转]</title>
		<link>http://www.mryang.org/2011/09/%e7%bb%99%e6%9c%aa%e6%9d%a5%e7%9a%84%e4%bd%a0-%e2%80%94%e2%80%94%e6%9d%8e%e5%bc%80%e5%a4%8d%e5%9c%a82011%e7%ba%a7%e5%a4%a7%e5%ad%a6%e6%96%b0%e7%94%9f%e5%ad%a6%e4%b9%a0%e8%a7%84%e5%88%92%e8%ae%b2/</link>
		<comments>http://www.mryang.org/2011/09/%e7%bb%99%e6%9c%aa%e6%9d%a5%e7%9a%84%e4%bd%a0-%e2%80%94%e2%80%94%e6%9d%8e%e5%bc%80%e5%a4%8d%e5%9c%a82011%e7%ba%a7%e5%a4%a7%e5%ad%a6%e6%96%b0%e7%94%9f%e5%ad%a6%e4%b9%a0%e8%a7%84%e5%88%92%e8%ae%b2/#comments</comments>
		<pubDate>Sun, 18 Sep 2011 13:54:23 +0000</pubDate>
		<dc:creator>mryang</dc:creator>
				<category><![CDATA[读书感悟]]></category>
		<category><![CDATA[大学]]></category>
		<category><![CDATA[李开复]]></category>

		<guid isPermaLink="false">http://www.mryang.org/?p=789</guid>
		<description><![CDATA[原文地址：http://blog.sina.com.cn/s/blog_475b3d560102dt81.html

李开复

很高兴与这么多刚刚入学的大学新生交流，今天的演讲，希望和大家讨论一下，经过大学四年的学习生活，未来的你可能成为什么样子。

<span class="readmore"><a href="http://www.mryang.org/2011/09/%e7%bb%99%e6%9c%aa%e6%9d%a5%e7%9a%84%e4%bd%a0-%e2%80%94%e2%80%94%e6%9d%8e%e5%bc%80%e5%a4%8d%e5%9c%a82011%e7%ba%a7%e5%a4%a7%e5%ad%a6%e6%96%b0%e7%94%9f%e5%ad%a6%e4%b9%a0%e8%a7%84%e5%88%92%e8%ae%b2/" title="给未来的你 ——李开复在2011级大学新生学习规划讲座上的演讲[转]">阅读全文——共10817字</a></span>]]></description>
			<content:encoded><![CDATA[<p>原文地址：<a href="http://blog.sina.com.cn/s/blog_475b3d560102dt81.html">http://blog.sina.com.cn/s/blog_475b3d560102dt81.html</a></p>
<p>李开复</p>
<p>很高兴与这么多刚刚入学的大学新生交流，今天的演讲，希望和大家讨论一下，经过大学四年的学习生活，未来的你可能成为什么样子。</p>
<p>有人也许会问，我未来成为什么样的人，开复怎么会知道呢？其实，我并不确切地知道未来你们每个人会怎样。但请相信我，通过过去十几年和大学生的交流，在创新工场、谷歌和微软，我了解我们雇用的每一个毕业生，我也了解来创新工场申请项目、希望得到投资的每一位年轻的创业者，还有在微博上留言、与我讨论互动的每一位年轻网友，在他们身上，我看到了未来的你。</p>
<p>我很喜欢英国小说家狄更斯的作品。他写过一部短篇小说叫《圣诞欢歌》，故事讲的是一位本性善良，但因为受环境影响，变得非常小器、吝啬、刻薄的商人。他在平安夜被三个精灵分别带到了自己过去、现在和未来的生活场景，看到了未来的自己，并因此彻底醒悟，领会到生活的意义，决心改过自新，做个好人。</p>
<p>这个故事告诉我们，假如能看到未来的你可能变成什么样，许多人也许就不会按照现在的方式去生活。四年后，你们中的一些人可能会出现这样那样的困惑，可能陷入迷茫，也可能发现，你们距离自己的目标还存在许多不足。未雨绸缪，如果想避免四年后的困惑和迷茫，就必须从现在开始，认真规划自己的大学生活，努力提高自己。</p>
<h3>一、寻找兴趣和天赋，避免成为迷茫、困惑的人</h3>
<p>去年，创新工场做校园招聘时，我们去了15所高校，给面试筛选出的顶尖计算机系毕业生发出了大约200份录取通知。然后，我一一打电话，看每个人是否愿意加入创新工场学习创业。在说服他们加入创新工场前，我不想误导任何学生。所以，我的第一个问题总是：“你有没有想过，在你人生的未来，创业是否是你真正想做的一件事。”</p>
<p>既然是顶尖大学的顶尖学生，对这个问题就应该胸有成竹。如果你并非真正想创业，可能你就不适合加入创新工场，也许，你会在大企业或政府机构里得到更好的发展。</p>
<p>出乎我的意料，超过80%的顶尖毕业生给我的答案是：“不知道，没想过。”</p>
<p>这，就是一种迷茫。80%来创新工场申请工作并成功得到录取通知的人都没有认真想过这个问题，不知道创业是不是自己未来的道路。这个比例还是在顶尖学生中统计得到的。我在网上看到更多即将毕业的同学在发问，他们不知道专业不对口该怎么办，不知道自己想做什么，也不知道自己爱做什么……每个疑问都透露出毕业生在毕业时对未来的迷茫和困惑。</p>
<p>大学四年，必须要认清你自己，弄清楚自己想要成为一个什么样的人，特别要知道，自己的兴趣在哪里，天赋在哪里。</p>
<p>你必须摈弃过去一些错误的理解：自己想要成为什么样的人，这件事跟别人认为你是谁，或别人想要你成为谁，丝毫没有关系。无论是同学、老师、家长，他们都不能决定你想成为什么样的人；或者，他们想要你成为的人，很可能根本不是你自己真正想要成为的人。</p>
<p>为什么认清自己的天赋如此重要？试想，如果我们非要把比尔·盖茨变成一个音乐家，他能取得多大的音乐成就？如果非要把贝多芬变成一名程序员，他有可能成为比尔·盖茨吗？肯定不行。天生我材必有用，每个人都有自己的天赋。只有找到天赋所在，才能把自己的潜力发挥到极致。</p>
<p>此外，找到自己的兴趣也同样重要，甚至更为重要。如果做的事情是自己最喜欢的事，那么你会在吃饭、睡觉甚至洗澡时都在想着这件事，想不成功都很难。</p>
<p>大学生该怎样寻找兴趣和天赋呢？我的建议非常简单：多尝试！多尝试自己可能有兴趣的东西：无论是选修课程还是实习工作，无论是参加社团还是去网上求知，花足够的时间去尝试、体验，努力寻找天赋和兴趣所在。</p>
<p>当然，求知不能太功利。千万不要因为你的某个职业规划，就只去学那些“用得上、有帮助”的技能，而放弃那些你可能有兴趣或有天赋的领域。否则，你可能会错失心中真正喜爱的事情。乔布斯曾经说：“我们的人生面临各种选择，应该追随我们的心。”乔布斯还说：“你在憧憬未来时不可能将以前积累的点点滴滴串连起来，你只能在回顾过去时将它们串连起来。所以你必须相信，当前积累的点点滴滴，会在你未来的某一天串连起来。你必须相信某些东西——你的勇气、目的、生命、因缘等等——相信它们会串联起你的生命，这会让你更加自信地追随你的心，甚至，这会指引你不走寻常路，使你的生命与众不同。”</p>
<p>拿我自己来说，我上大学时选修的课程可以分为三类：</p>
<p>第一类是选课前觉得可能有兴趣，上课后却发现非常枯燥，听得昏昏欲睡的课程，包括经济学、美国政治、美国政策、欧洲文学、欧美文学、艺术经典、音乐经典等等。但我一点都不后悔花时间选这些课，因为这样的尝试会让人生的选择更少些。通过尝试，多划掉些可能的选项，这有利于我们认清自己的真正方向。</p>
<p>第二类课程是上了几堂课、做了几次作业就爱不释手的课程。爱上一门课程的感觉特别好，这不可能第一次就撞上，我也是选了那么多自己不喜欢的课之后，才发现自己最喜欢的是计算机相关的课程。</p>
<p>第三类课程学的时候很感兴趣，但不知道以后有什么用。这没关系，就像乔布斯所说的，这都是人生中积累的点点滴滴，也许未来有一天，你会把这些点点滴滴串联起来。比如，当时我发现自己对哲学很有兴趣，但自己并不想做哲学家。虽然没有直接的用途，哲学类的课程还是教会了我如何思考，如何认识人生的价值，也成了我一生的指南针。我还学了中国文学和英语写作，这对我的专业也没有直接用途。但我这几年出了五本书，其中至少有两本非常畅销。如果没有学过中国文学、写作和哲学，很可能也不会有成为业余作家的李开复。另外，我学的中国近代史和国际关系等课程，也对我决定首次到中国工作产生了重要的影响。</p>
<p>我当时那些选课的决定，并不是刻意做出的。当时就是想试一试。对于第一种课程，发现自己不喜欢，就直接丢掉；对于第二种课程，发现自己爱上了它，就马上去追随；对于第三种喜欢但没用的课程，那就先留着，以后总归会把它串联起来。</p>
<p>也许有同学会说，在美国换专业、选课当然轻松，可在中国却有很多限制。这里，我想跟大家分享一名优秀的创新工场工友的故事。这位工友名叫向若辉，毕业于一所非常普通，几乎没人听过的大学。当时，父母建议他学会计，因为毕业后好找工作。但他进了大学才发现，自己对会计根本没兴趣，没法学好，甚至出现了挂科。与此同时，他在网上发现，自己对用户体验设计的专业方向特别感兴趣。通过互联网，他自学了各种相关课程，交了很多设计师朋友，在论坛里与国内外的用户体验设计师交流。他不但有兴趣，也有这方面的天赋。他在读书期间兼职打工，做用户体验方面的工作，很快就赚了四万元。他的设计作品让人赞不绝口。但就在这时，他发现自己的专业课程越学越差，一个学期挂了四科。他不得不和父母商量。他的意见是，自己将全力学习专业课程，达到可毕业的标准，但毕业后不会去做会计，而是要追寻自己的兴趣。父母被他的真诚打动了，同意了他的意见。于是，他一边努力读书提高专业成绩，一边在新浪找到了用户体验设计方面的兼职工作，之后又在创新工场实习。一毕业，他就被创新工场投资的知乎团队聘为整个团队的用户体验负责人。这个例子告诉我们，当你发现自己所爱的时候，会像变魔术一样充分发掘出自己的最大潜能。</p>
<p>乔布斯在2005年斯坦福毕业典礼的演讲中说：“你们的时间有限，不要将时间浪费在重复他人的生活上。不要被教条束缚，那意味着你活在其他人思考的结果中。不要被他人的喧嚣遮蔽了你自己内心的声音、思想和直觉，它们在某种程度上知道你真正想成为什么样子，所有其他的事情都是次要的。”</p>
<p>如果你对未来迷茫，希望你能把握时间，找到自己的天赋和兴趣，这样，你在大学毕业的时候，才会真正拥有一片充满自信的天空。</p>
<h3>二、学会学习和思考，避免成为应试机器</h3>
<p>在创新工场，每年都会收到几万份简历。很多时候，每打开一份简历我都不得不摇头叹息。大多数大学毕业生的简历千篇一律，比如，某人，男，出生年月，政治面貌，英语四六级，平均成绩80分，刻苦努力，三好学生，等等。几乎每份简历都是在用应试体系里枯燥的成绩数字来描述、评价一个人。</p>
<p>这样的描述没有任何吸引力。难道一个人在大学四年之后，只能展示这些数字吗？你是否变成了应试教育培训出来的一台机器？你自己的特点在什么地方？除了分数之外，你学懂了什么？你在所学的领域有没有好的创意？在实际工作中，你学到的知识能否派上用场？</p>
<p>不要被应试教育训练成机器。在座的每一位都是应试教育的受害者，你们经过了十几年的应试教育，今天进入了大学，应该划上一个句号。希望你们能挣脱一切束缚，开始真正的学习和思考。</p>
<p>如何真正学会学习和思考呢？在大学期间，必须学会三种学习和思考的能力，这三种能力可以帮助你们从应试教育的束缚中摆脱出来。</p>
<p>第一种也是最重要的一种能力，是自学的能力。读中学时，老师会一次次重复课本内容，但进了大学后，老师只能充当引路人，学生必须积极主动地探索、学习和实践。在大学四年，要学会从一个被填充知识的人，变为自学知识的人。不能只会背诵，还必须要有理解的能力——这包括举一反三的能力，知其然也知其所以然的能力，无师自通的能力，等等。</p>
<p>该怎样培养自学能力？很简单，你必须学会问“为什么”。在应试教育体系中，只要学会“什么”就可以及格了，但在大学里，一定要学“为什么”。当你真正理解一件事为什么如此时，你才能举一反三，无师自通。问“为什么”，要有打破砂锅问到底的决心，随时发问，上课问、上网问、问同学、问朋友……只有这样，你才真正学懂了，学到了。</p>
<p>第二种能力是从理论到实践的能力。不要只知道公式是什么，理论是什么，而且要知道在实际工作中如何运用。很多人进入社会才知道，以前学的会计、统计、哲学、文学之类，可能都不是你的老板要求你掌握的知识。有人说，其实在大学里学到的真正有用的知识，只是一生中要用到的5%而已。</p>
<p>所以，更重要的是要知道如何学以致用。例如，老师教了你怎么写英文，你要知道，怎么把英文技能应用到写一个真正的公关稿上；再比如，老师教了你怎么编程，你要知道，编程如何转换成商业价值，成为一个真正的产品。</p>
<p>这需要在学习时多问一个问题——“有什么用”。我记得，我女儿小时候非常不喜欢学数学，她觉得像指数之类的东西没有实际用处。直到有一天，我问她：“如果有100元钱，存在银行，每年10%的利息，10年以后你会有多少钱？”当她知道这个问题的答案居然不是200元，而是259元的时候，她突然对数学有兴趣了，她想知道为什么。我当时就告诉她，指数，还有其他很多数学知识，都是非常有用的，关键在于融会贯通，知道如何将理论付诸实践。</p>
<p>第三种能力是critical thinking，也就是批判式思维的能力。每一件事情，都有多方看法，不是只有一个非黑即白的答案。不同的人有不同的意见，每个意见都值得了解和珍惜。不要被教条束缚，要学会用不同的观点来看问题。</p>
<p>创新工场的工友王俊煜是北大元培班的高材生，毕业后进入了谷歌。谷歌是一家很了不起的公司，但是这家公司有非常强烈的工程师文化，每做一个产品，都想着技术如何酷，如何难，如何难以被竞争对手效仿。但谷歌工程师较少去想，用户要这个东西有什么用。王俊煜是个特别重视用户体验的人，十分在乎用户的感觉。他深深地了解，一个产品不论技术有多难，如果用户不喜欢用，还是无法取得成功的。他在谷歌的时候就多次和人发生争执，因为公司里的工程师文化，他的声音经常被淹没。那时，大部分用户体验设计师都会“识相”地做些强势、资深的工程师希望做的东西，但王俊煜执着地提出自己的想法，在三四款产品上做出了重要的贡献，并从这个过程中学到了很多东西，也得到了工程师的尊敬。批判式思维给了他信心，于是他决定加入创新工场，成为豌豆荚的共同创始人。今天，豌豆荚可能是创新工场投资的所有产品里，用户评价最高的一个。王俊煜的故事说明，我们不能只从一个角度来看问题，一定要尊重不同的观点。</p>
<p>怎么样培养批判式思维能力呢？建议你们每碰到一个知识点的时候，不但要学会问“为什么”，还要学会问“为什么不”。为什么一定是这样，为什么不可能是那样？这会让你更深入地了解问题的本质。</p>
<p>我女儿以前参加辩论社时，她问爸爸：“我辩论一个问题的时候，应该怎么选择我所支持的观点？”我给她的建议是：“你永远要选择那个你不认可的观点。”她觉得很奇怪，明明不认可这个观点，为什么要去辩论它呢？按照我的话做了几次之后，她慢慢了解了，当你去辩论你所不认可的观点时，会有很多好处。首先，对方的辩论方向你已经了如指掌，知己知彼，更容易取胜；通过变换视角，你一定会很惊讶：你原先不认可的观点其实也有一定的道理；最重要的是，你会真心理解并相信多视角看问题的好处。这种练习可以让你更容易平衡不同的观点，成为一个有批判式思维的思想家。</p>
<p>如果你不希望在四年大学后成为应试机器，就应该多问“为什么”，“有什么用”，以及“为什么不”。这几个问题能帮助你学到自学的能力、实践的能力和批判式思维的能力。</p>
<h3>三、培养情商，避免成为孤独、被动的人</h3>
<p>不少大学毕业生都对我说：“李老师，我感觉很孤独，很被动。”有一位同学说：“我的人际能力不强，人际圈子小，又没有什么特长引起别人的注意，即便在社团，也不知道怎么跟别人建立关系。”</p>
<p>这种现象很自然。在应试教育的氛围中长大，你们可能很少有时间，在学习之外培养人际关系。我建议你们利用大学四年，努力提高自己的情商。</p>
<p>所谓情商，就是和别人交流的能力、将心比心的能力以及得到别人信任的能力。以后进入业界你就会发现，这些能力都是非常重要的事，特别是得到别人信任的能力，因为信任需要很多时间来培养，但犯一次错就可能将其毁于一旦。</p>
<p>培养情商的第一步是培养友情。读大学时一定要交几个要好的朋友。大学的友情不容易变质，往往可以受益终生。希望你们能将心比心，像好朋友对待你一样对待好朋友，成为你的好朋友的好朋友，与朋友分享你的喜怒哀乐。分享能让痛苦减半，分享能让快乐加倍。希望你们在大学四年交到一批真正的好朋友。</p>
<p>第二，要培养自己的表达能力，也就是口才。不要认为自己很聪明、能够思考就足够了。希腊哲人说过，一个善于思考的人如果不善于表达，其实就等于一个不善于思考的人。</p>
<p>美国一位著名的创业家，Pandora公司的创始人蒂姆·韦斯特格伦（Tim Westergren）说：“如果我作为一个创业家，可以从上帝那里要求一样礼物，那我会挑选‘口才’。”</p>
<p>创业者想要成功，他必须影响他周围的人，如投资者、顾客、用户等等。一个有口才的创业者，可以更好地领导员工，可以让员工理解自己的愿景，可以激发员工的斗志和潜力。虽然只有口才是不够的，但我见到的每一个成功的创业者都有出色的表达能力。口才不是学校里哪一门课程可以学到的，必须自己努力锻炼。</p>
<p>第三，在校期间要多争取实习、实践的机会。大学四年，如果想成为一个受人喜欢、有魅力的人，就要多学习团队合作。进入社会后，团队合作代表了一切，但在课堂里面，通常是不那么鼓励团队合作的——考试时的团队合作不就等于作弊了么？所以，在读书时一定要充分利用实习、实践的机会学习、培养团队合作能力。</p>
<p>“我听到的会忘掉，我看到的能记住，我做过的才真正明白。”这句话告诉我们，必须去实践，才能明白一个团队是怎么工作、怎么设定目标、怎么达到目标的。只有学习如何跟人协作，才能增加你的情商，提高与人沟通的能力。</p>
<p>我在谷歌工作四年，在创新工场工作两年，在这6年的时间里，我没有雇用过一个没有实习经历的毕业生。所以，当明年暑假到来的时候，你们不要回家去玩一个暑假，而要去找实习的机会，因为暑假是少数难得的可以自己支配所有时间的机会。</p>
<p>没有一个从未实习过的学生能够进入谷歌或创新工场。学校的老师、学校的课程并不真的了解企业需要什么。唯一掌握实际工作经验的方法就是去企业实习。如果找不到创新工场、谷歌、百度等好的公司去实习，你们可以去任何一家公司。能去一个对口的公司最好，不能也没问题。找不到技术公司，就找服务业，哪怕是到餐馆里端盘子都有价值。虽然你不会想端一辈子盘子，但端盘子的时候，你有机会跟周围的人接触，这会让你成为一个情商更高的人。</p>
<p>除了实习，学生社团也是学习处理人际关系的好地方。社团其实是一个微观的社会，参加社团是进入社会的一种非常好的学习方式。</p>
<p>总之，提高情商的三个好办法是：培养友情，锻炼口才，争取实习机会。</p>
<p>如果在社团活动中犯错了怎么办？在争取工作机会时碰壁了怎么办？万一去百度应聘被拒绝了怎么办？万一他们嘲笑我怎么办？万一发现自己能力不强，周围的人都比我优秀怎么办？出现这些困惑都很正常。这时一定要积极主动，不要畏惧失败。</p>
<p>从大学第一天开始，你就必须从被动转向主动。要成为自己的主人，积极管理自己的学业甚至未来的计划。只有你能管理自己的未来，没有人比你更在乎你未来想成为什么样的人。在今天的社会里，只有一个积极主动、不怕失败的人，才能在瞬息万变的竞争环境中赢得成功。只有善于展示自己的人，才能在工作里得到最多的机会。遇到挫折时，绝不能消极甚至放弃，你的被动其实就是弃权。你不去解决问题，也是一种解决；你不去做决定，也是在做决定——这只会让你成为一个被动的、消极的、不成功的人。</p>
<p>谈到犯错，我们这个社会往往是不鼓励犯错的。但仔细想想，我们每个人都失败了很多次。你可能不记得，你第一次尝试走路的时候肯定跌倒过，你第一次张嘴说话的时候肯定说错过，你第一次游泳的时候也许差点儿被淹死，你第一次投篮肯定没有投进……但现在这些事情你都会做了，因为你没有被失败打倒，从失败中学到更多。在我个人的职业生涯里，我学到的最大的教训、最好的经验都是来自于失败，而不是来自于成功。</p>
<p>乔布斯有一句话让我特别感动：“‘记住你即将死去’是我一生中遇到的最重要箴言。它帮我指明了生命中重要的选择。因为几乎所有的事情，包括所有的荣誉、所有的骄傲、所有对难堪和失败的恐惧，这些在死亡面前都会消失。我看到的是留下的真正重要的东西。有时候人们会担心自己将会失去某些东西。记住你将要死去，这是我所知道的避免这个念头的最好办法。你已经了无牵挂，没有理由不去追随你的心。”</p>
<h3>四、脚踏实地，避免成为浮躁、贪婪的人</h3>
<p>浮躁和贪婪，这两种负面的人生态度，我在年轻人身上一次又一次看到。这更多是由环境因素造成的。在你们所处的环境中，有太多的不公平，有一些不诚信的人迅速致富，他们很不幸成为了部分年轻人效仿的偶像。</p>
<p>年轻人应当奋斗，但不要将侥幸致富作为你的动力。在今天的社会里，创业也好，就业也好，一定要脚踏实地，通过努力学习达到目标。</p>
<p>有一本名叫《异类》的书里告诉我们：每个了不起的大师都是经过差不多一万个小时的练习才最终成功的。莫扎特大约练习了一万个小时才成为杰出的音乐家，比尔·盖茨大约练习了一万个小时编程才取得成功。</p>
<p>千万不要浮躁，不要认为可以侥幸得到成功。那种侥幸的成功即便得到了，可能也是短暂的；就算不是短暂的，也是不值得的。</p>
<p>在创新工场，我们投资了一个团队，团队的负责人叫小冯（化名），美国名校毕业，才华横溢，对技术、产品都很有感觉，口才也非常好，被团队一致推为领导者。但他非常浮躁，认为自己什么都懂，可以驾驭整个团队，可以独立做商业计划。另外，他在业界小有名气，得到不少外界天使的认可和同龄人的追捧。但很不幸的是，他浮躁地希望能快速成功，快速出名。结果，他把更多的时间花在怎么出风头上，而不是脚踏实地把产品做好。最后，团队的产品做得非常不成功。团队成员一个接一个离开，最后他自己也不得不离职。很不幸，一个完全有机会成功的人才，因为浮躁而功亏一篑。</p>
<p>这件事给我的触动很深，创新工场之后面对创业者时，就常常会询问和考核这些创业者，确保他们做了必须的功课，把足够的时间花在了产品方向上。而且，在相关领域里，创业者一定要懂得比我们这些投资者多。如果你没有花苦功夫，懂得还没有我们多，那我们就不会投资你。</p>
<p>另一件浮躁的事情发生在某大学。一群学生发了一篇假新闻稿，说创新工场投资了他们的电影。他们希望利用这个新闻吸引眼球，并洋洋得意地等着创新工场出来辟谣。一旦辟谣，他们就可以把事情越搞越大。最后，即便大家知道了真相，他们也已经出名了。这是他们的如意算盘。但这种浮躁的人总会聪明反被聪明误。看到这种不诚信的做法，我认为，做这种事情的人需要得到一个教训，于是，他们接到了我们律师的电话。律师通过电话警告他们，如果不停止侵权，就起诉他们。随即，他们也收到了校领导的通知，禁止他们再继续胡闹。这个事情也是对那些浮躁的人的一个警醒。</p>
<p>创新工场曾经考虑投资一位名叫小高（化名）的创业者，他几乎拥有创业者需要的所有才华，不但懂技术、懂产品，而且有创业经验，有在大公司任职的经历，口才很好，非常自信，30出头。在我们眼里，或者在任何风险投资者眼里，他都是一个需要追捧的创业者。小高跟我们讲了他的创业计划，很让人激动，我们当时恨不得就掏出支票来投资了。但我又问了几个问题。我问他：“这个计划多久能做出来？”他说：“四个月。”我是搞技术的，我知道这个产品没有一两年的时间绝对做不出来。我又问他：“这个想法为什么和你在现公司做的业务非常相似？”他惊慌地回答：“不会不会的，我们有很多新的想法，做出来一定是不一样的。”听了这两句话，我心里大概知道了，他可能打算从现公司偷窃一些源代码，另起炉灶打造自己的产品。</p>
<p>当时，创新工场有一位投资经理说：“开复啊，别这么较真，这些事情，不要问这么清楚。你问清楚了，大家都不好。他没说他是偷窃，我们也没问，大家都不说，不就行了么？”听了这些话，我非常失望，我没有教育好创新工场的员工。于是，我在周末给创新工场的员工发了一封邮件：</p>
<p>我们今天有缘聚在创新工场，有一个共同点就是：我们不仅仅是为了一份工作和金钱，也希望做有意义的事情。</p>
<p>我们不仅仅希望能成为顶尖早期风投，也希望能正面影响中国创业生态环境。</p>
<p>我们不仅仅希望能够孵化顶尖企业，也希望能帮助它们成为值得尊敬的品牌。</p>
<p>我们不仅仅希望能扶持最能干的创业者，也希望培养德才兼备的创业者典范。</p>
<p>所以，当我们看一个创业者时，我们不能只关注他是否能成功和赚钱，是否聪明努力，也要深度认识这个人，看看他是否有潜力成为值得尊重的好领导。如果一个创业者有诚信的问题，例如盗窃别人的代码，或践踏性骚扰他人。这样的一个人是绝对不能投的，无论他的公司能多成功，能赚多少钱。</p>
<p>作为创新工场，我们的一举一动都代表了工场，无论是对平台员工，投资的公司，还是大众。如果我们支持犯罪，我们就是在犯罪。如果我们投资邪恶，我们就是邪恶。如果我们容忍卑鄙，我们就是卑鄙。</p>
<p>最后，分享杰克·韦尔奇的一句话：</p>
<p>Integrity is just a ticket to the game. If you don&#8217;t have it in your bones, you shouldn&#8217;t be allowed on the field.（诚信是基本要求，如果你没有发自内心的诚信，我们不允许你参与。）</p>
<p>想创业的同学，一定不要太浮躁。一毕业就创业，失败的概率太大了。就算你有实习经验，你也不会深入了解财务、法务、运作、市场、技术、产品、用户……你不可能这么快成为全才。给自己至少几年时间，再去创业。最好的培训学习方法是加入一家创业公司，逐步累计自己的实力、人脉。当你觉得自己积累够了的时候，再开始创业。</p>
<p>在豌豆荚团队有一位北大的才女，名叫崔瑾。她的经历最让人最感叹的一点是，她作为北大国际关系专业的毕业生，非常想学习创业。她先是去申请百度的职位，当时百度才刚起步，没有合适的职位，就跟她说，要来的话只能做前台。作为一个北大毕业生，她答应了。今天，崔瑾经过在百度、奥美、谷歌的积累，学到了很多做事、做人的方法。她今天能够成为豌豆荚的首席运营官，很大程度来自于毕业那一天的决定。她没有因为北大人可能会有的自豪感而拒绝接受一个前台的工作。她愿意从基层做起，虚心地学习。</p>
<p>我们投资的另一位创业者叫许朝军，他从清华大学毕业，先从ChinaRen干起，然后被收购进搜狐，又到了陈一舟的千橡，启动校园社交领域，最后负责整个人人网的运行。后来人人网成功上市，首日达到74亿美元的市值。许朝军在人人上市前离职，到了盛大，成为边锋的总裁。他是个非常能干的人，今年才30岁。今天他很成功，拿到了千万美元的投资，在创新工场支持下，做了点点网，崛起非常快。但我想讲的不是他有多成功，而是他有一个多么谦卑的第一天。在12年前，他从乡下来到北京，发现周围的人懂得都比他多。他傻傻地进了计算机系，却从来没摸过计算机。他周围的人在城里长大，基本都会编程。他告诉自己，一定要学习、赶上这些人。他先学习打字，但买不起键盘，就在纸做的键盘上练习打字。他没有电脑可用时，就在纸上编程。通过这些艰苦的训练，他成为了计算机高手，在很多著名企业里做得非常好。他从搜狐出来的时候，曾经有风险投资家对他说：“你很厉害，在中国最早的社区ChinaRen做得这么好，搜狐收购后，23岁就成了技术总监，这简直前途无量。我们想投一百万美金，让你做任何你想做的事情。”没想到，他说：“对不起，我还没有学习到足够的知识。我现在懂技术了，但我在运营、市场、用户方面还要继续学习。”然后，他就一次次参加不同的企业，学会了他所需要的一切，最后才在创新工场支持下，创业做了点点网。</p>
<p>在脚踏实地的话题上，我想再分享一句乔布斯的座右铭：求知若饥，虚心若愚（stay hungry，stay foolish）。这句话不是乔布斯说的，是一个叫凯文·凯利（Kevin Kelly）的人写的，凯文·凯利是美国著名的科技预言家和科技作家，也是我非常尊敬的朋友。我去年问他：“乔布斯从你那里学到了人生的座右铭，stay hungry，stay foolish，这句话你是如何理解的？你可不可以用最简单、最容易懂的语言，阐述、诠释这四个英文字？”他是这么说的：“我们必须了解自己的渺小，如果我们不学习，科技的发展速度会让我们所有的一切在五年后被清空。所以，我们必须用初学者谦虚的自觉，饥饿者渴望的求知态度来拥抱未来的知识。”希望大家都能记得这句话。</p>
<p>谦虚、渴望、脚踏实地、一步步地学习，这样就可以避免成为浮躁、贪婪的你。</p>
<p>&nbsp;</p>
<h3>寄予大学新生</h3>
<p>各位同学，人生在世，我们拥有两个最大的财富，我们的才华和我们的时间。才华越来越多，时间越来越少。我们的这一生可以说是在用我们的时间来换取才华。</p>
<p>大学这四年，可能是一生中拥有最多可以自己掌控的时间的阶段。希望你们务必把握这四年的时间，培养自己的才华。昨天，刚踏入校门的时候，你可能还是一个青涩的、被动的、为了应试而读书的、被家庭呵护的学生。</p>
<p>今天，希望你们了解如何避免迷茫困惑、应试机器、孤独被动、浮躁贪婪这些可能对你们的未来造成负面影响的因素。在四年后，希望你们能够追随你们的心，学习思考、脚踏实地，成为高智商、高情商、有潜力、有思想、有价值、有前途并且讲诚信的中国未来的主人翁。</p>
<p>同学们，祝福你们度过精彩的四年，成为一个精彩的人。</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mryang.org/2011/09/%e7%bb%99%e6%9c%aa%e6%9d%a5%e7%9a%84%e4%bd%a0-%e2%80%94%e2%80%94%e6%9d%8e%e5%bc%80%e5%a4%8d%e5%9c%a82011%e7%ba%a7%e5%a4%a7%e5%ad%a6%e6%96%b0%e7%94%9f%e5%ad%a6%e4%b9%a0%e8%a7%84%e5%88%92%e8%ae%b2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>相似图片搜索的原理[转]</title>
		<link>http://www.mryang.org/2011/07/imgsearch/</link>
		<comments>http://www.mryang.org/2011/07/imgsearch/#comments</comments>
		<pubDate>Fri, 22 Jul 2011 15:04:12 +0000</pubDate>
		<dc:creator>mryang</dc:creator>
				<category><![CDATA[学习笔记]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[图片搜索]]></category>

		<guid isPermaLink="false">http://www.mryang.org/?p=785</guid>
		<description><![CDATA[今日看到的一片文章，转发在这里。

上个月，Google把“相似图片搜索”正式放上了首页。

你可以用一张图片，搜索互联网上所有与它相似的图片。点击搜索框中照相机的图标。你输入网片的网址，或者直接上传图片，Google就会找出与其相似的图片。类似的”相似图片搜索引擎”还有不少，TinEye甚至可以找出照片的拍摄背景。

<span class="readmore"><a href="http://www.mryang.org/2011/07/imgsearch/" title="相似图片搜索的原理[转]">阅读全文——共1067字</a></span>]]></description>
			<content:encoded><![CDATA[<p>今日看到的一片文章，转发在这里。</p>
<p>上个月，Google把<a rel="nofollow" href="http://www.google.com/insidesearch/searchbyimage.html" target="_blank">“相似图片搜索”</a>正式放上了首页。</p>
<p>你可以用一张图片，搜索互联网上所有与它相似的图片。点击<a rel="nofollow" href="http://images.google.com.hk/" target="_blank">搜索框</a>中照相机的图标。你输入网片的网址，或者直接上传图片，Google就会找出与其相似的图片。类似的”相似图片搜索引擎”还有不少，<a rel="nofollow" href="http://www.tineye.com/" target="_blank">TinEye</a>甚至可以找出照片的拍摄背景。</p>
<p>这种技术的原理是什么？计算机怎么知道两张图片相似呢？</p>
<p>根据<a rel="nofollow" href="http://www.hackerfactor.com/blog/index.php?/archives/432-Looks-Like-It.html" target="_blank">Neal Krawetz</a>博士的解释，原理非常简单易懂。我们可以用一个快速算法，就达到基本的效果。</p>
<p>这里的关键技术叫做”感知哈希算法”（Perceptual hash algorithm），它的作用是对每张图片生成一个”指纹”（fingerprint）字符串，然后比较不同图片的指纹。结果越接近，就说明图片越相似。</p>
<p>下面是一个最简单的实现：</p>
<p><strong>第一步，缩小尺寸。</strong></p>
<p>将图片缩小到8×8的尺寸，总共64个像素。这一步的作用是去除图片的细节，只保留结构、明暗等基本信息，摒弃不同尺寸、比例带来的图片差异。</p>
<p><img title="阮一峰 | 相似图片搜索的原理" src="http://image.beekka.com/blog/201107/bg2011072107.png" alt="bg2011072107 阮一峰 | 相似图片搜索的原理" /> <img title="阮一峰 | 相似图片搜索的原理" src="http://image.beekka.com/blog/201107/bg2011072107.png" alt="bg2011072107 阮一峰 | 相似图片搜索的原理" width="64" height="64" /></p>
<p><strong>第二步，简化色彩。</strong></p>
<p>将缩小后的图片，转为64级灰度。也就是说，所有像素点总共只有64种颜色。</p>
<p><strong>第三步，计算平均值。</strong></p>
<p>计算所有64个像素的灰度平均值。</p>
<p><strong>第四步，比较像素的灰度。</strong></p>
<p>将每个像素的灰度，与平均值进行比较。大于或等于平均值，记为1；小于平均值，记为0。</p>
<p><strong>第五步，计算哈希值。</strong></p>
<p>将上一步的比较结果，组合在一起，就构成了一个64位的整数，这就是这张图片的指纹。组合的次序并不重要，只要保证所有图片都采用同样次序就行了。</p>
<p><img title="阮一峰 | 相似图片搜索的原理" src="http://image.beekka.com/blog/201107/bg2011072109.png" alt="bg2011072109 阮一峰 | 相似图片搜索的原理" /> = <img title="阮一峰 | 相似图片搜索的原理" src="http://image.beekka.com/blog/201107/bg2011072109.png" alt="bg2011072109 阮一峰 | 相似图片搜索的原理" width="64" height="64" /> = 8f373714acfcf4d0</p>
<p>得到指纹以后，就可以对比不同的图片，看看64位中有多少位是不一样的。在理论上，这等同于计算<a rel="nofollow" href="http://zh.wikipedia.org/wiki/%E6%B1%89%E6%98%8E%E8%B7%9D%E7%A6%BB" target="_blank">“汉明距离”</a>（Hamming distance）。如果不相同的数据位不超过5，就说明两张图片很相似；如果大于10，就说明这是两张不同的图片。</p>
<p>具体的代码实现，可以参见<a rel="nofollow" href="http://www.reddit.com/r/programming/comments/hql8b/looks_like_it_for_the_last_few_months_i_have_had/c1xkcdd" target="_blank">Wote</a>用python语言写的<a rel="nofollow" href="http://www.ruanyifeng.com/blog/2011/07/imgHash.txt" target="_blank">imgHash.py</a>。代码很短，只有53行。使用的时候，第一个参数是基准图片，第二个参数是用来比较的其他图片所在的目录，返回结果是两张图片之间不相同的数据位数量（汉明距离）。</p>
<p>这种算法的优点是简单快速，不受图片大小缩放的影响，缺点是图片的内容不能变更。如果在图片上加几个文字，它就认不出来了。所以，它的最佳用途是根据缩略图，找出原图。</p>
<p>实际应用中，往往采用更强大的<a rel="nofollow" href="http://www.phash.org/" target="_blank">pHash</a>算法和<a rel="nofollow" href="http://en.wikipedia.org/wiki/Scale-invariant_feature_transform" target="_blank">SIFT</a>算法，它们能够识别图片的变形。只要变形程度不超过25%，它们就能匹配原图。这些算法虽然更复杂，但是原理与上面的简便算法是一样的，就是先将图片转化成Hash字符串，然后再进行比较。</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mryang.org/2011/07/imgsearch/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Ubuntu配置Web Server和FTP</title>
		<link>http://www.mryang.org/2011/05/ubuntu_web-server_ftp/</link>
		<comments>http://www.mryang.org/2011/05/ubuntu_web-server_ftp/#comments</comments>
		<pubDate>Mon, 02 May 2011 12:27:23 +0000</pubDate>
		<dc:creator>mryang</dc:creator>
				<category><![CDATA[学习笔记]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.mryang.org/?p=781</guid>
		<description><![CDATA[Linux作为Web服务器维护起来方便多了，不需要太担心病毒问题。以下对近日在Ubuntu 10.4上配置的Web服务做个记录。

1、安装web服务器环境

#sudo apt-get install apache2

<span class="readmore"><a href="http://www.mryang.org/2011/05/ubuntu_web-server_ftp/" title="Ubuntu配置Web Server和FTP">阅读全文——共733字</a></span>]]></description>
			<content:encoded><![CDATA[<p>Linux作为Web服务器维护起来方便多了，不需要太担心病毒问题。以下对近日在Ubuntu 10.4上配置的Web服务做个记录。</p>
<p>1、安装web服务器环境</p>
<blockquote><p>#sudo apt-get install apache2<br />
#sudo apt-get install php5 php5-gd php5-cli<br />
#sudo apt-get install mysql-server<br />
#sudo apt-get install libapache2-mod-auth-mysql<br />
#sudo apt-get install php5-myql<br />
#sudo /etc/init.d/apache2 restart</p></blockquote>
<p>在安装mysql的过程中，会提示输入数据访问的密码，根据提示设置即可。</p>
<p>2、开启Apache的mod_rewrite</p>
<blockquote><p>#a2enmod rewrite<br />
#vi /etc/apache2/sites-enabled/000-default<br />
将：AllowOverride None    修改为：AllowOverride All<br />
#/etc/init.d/apache2 restart</p></blockquote>
<p>3、安装FTP并配置通过域名加用户名访问的个人主页</p>
<blockquote><p>#sudo a2enmod userdir<br />
#sudo apt-get install vsftpd<br />
#sudo vi /etc/vsftpd.conf          //根据提示配置<br />
# sudo /etc/init.d/vsftpd restart<br />
#useradd -m yangcm             //新增用户<br />
#passwd yangcm                     //设置用户密码</p></blockquote>
<p>然后只需要在用户目录下新建“public_html”，将网页文件放置其中，就可以通过http://域名（IP）/~用户名访问了。</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mryang.org/2011/05/ubuntu_web-server_ftp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>文献管理工具Mendeley</title>
		<link>http://www.mryang.org/2011/03/mendeley/</link>
		<comments>http://www.mryang.org/2011/03/mendeley/#comments</comments>
		<pubDate>Tue, 22 Mar 2011 14:40:08 +0000</pubDate>
		<dc:creator>mryang</dc:creator>
				<category><![CDATA[学习笔记]]></category>
		<category><![CDATA[Mendeley]]></category>
		<category><![CDATA[文献管理]]></category>

		<guid isPermaLink="false">http://www.mryang.org/?p=773</guid>
		<description><![CDATA[Mendeley是一款基于云的文献管理工具，跨平台，可以在windows、Linux、iPhone、iPad等终端上使用。还为你提供500M的文献存储，500M的文献共享，共计1G的免费空间，如果需要，花钱购买即可获得更大的空间。

Mendeley与EndNote和Zotero最大的不同是：Mendeley Desktop可以自动扫描本地硬盘上的PDF文件，并从文件中抽取出文献信息；同时还提供PDF文件浏览、笔记和文字选择等功能。这个功能很实用，在扫描PDF文件的时候，还会根据作者对文献进行组织，省去 手动组织文献的麻烦。不过遗憾的是对中文文献支持较差，很多中文文献的信息抽取不出来，不过中文的文献数据库喜欢在文献中加入其他东西，信息的抽取自然会有问题。

<span class="readmore"><a href="http://www.mryang.org/2011/03/mendeley/" title="文献管理工具Mendeley">阅读全文——共788字</a></span>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.mendeley.com/"><img class="alignleft" title="Mendeley" src="http://www.mendeley.com/graphics/commonnew/logo-mendeley_1248201417297118.png" alt="" width="345" height="81" /></a><a title="mendeley" href="http://www.mendeley.com" target="_blank">Mendeley</a>是一款基于云的文献管理工具，跨平台，可以在windows、Linux、iPhone、iPad等终端上使用。还为你提供500M的文献存储，500M的文献共享，共计1G的免费空间，如果需要，花钱购买即可获得更大的空间。</p>
<p>Mendeley与<a title="文献管理及分析软件" href="http://www.mryang.org/2008/06/endnote/">EndNote</a>和<a title="文献管理工具Zotero" href="http://www.mryang.org/2009/09/zotero-brie/">Zotero</a>最大的不同是：Mendeley Desktop可以自动扫描本地硬盘上的PDF文件，并从文件中抽取出文献信息；同时还提供PDF文件浏览、笔记和文字选择等功能。这个功能很实用，在扫描PDF文件的时候，还会根据作者对文献进行组织，省去 手动组织文献的麻烦。不过遗憾的是对中文文献支持较差，很多中文文献的信息抽取不出来，不过中文的文献数据库喜欢在文献中加入其他东西，信息的抽取自然会有问题。</p>
<p>Mendeley还有一个实用的功能就是文献同步与共享，这可以让你在不同的计算机和终端，以及在不同的地方都可以阅读文献，共享功能也可以让你轻松的开展团队协作。</p>
<p>Mendeley还有一个优点就是提供了一个科研工作者的社区，在Mendeley Web上可以找到那些具有共同研究的人员，建立群组。并且还可以看到该领域内的论文，虽然不能获取原文，但是可以了解到研究领域中那些文献是经典的。</p>
<p>Mendeley的一个缺点是引文格式较差，主要指中文的引文格式，基本不能使用。Mendeley的引文格式和Zotero的一致，但具体内容有些不一样，在中文支持方面不如Zotero，这一点还是国产的NoteExpress支持的比较好。不过这一点可以结合Zotero来解决，Mendeley中支持从Zotero中直接引入文献（在Option中设置），只要Zotero中有新文献，Mendeley就直接引入了。因此可以用Mendeley来管理文献，而用Zotero来进行引文管理。不过最好的还是希望Mendeley能在这方面做些改进，就不许要这样麻烦了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mryang.org/2011/03/mendeley/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Ubuntu中安装Dropbox</title>
		<link>http://www.mryang.org/2011/03/dropbox-install-in-ubuntu/</link>
		<comments>http://www.mryang.org/2011/03/dropbox-install-in-ubuntu/#comments</comments>
		<pubDate>Mon, 07 Mar 2011 03:55:02 +0000</pubDate>
		<dc:creator>mryang</dc:creator>
				<category><![CDATA[学习笔记]]></category>
		<category><![CDATA[dropbox]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.mryang.org/?p=771</guid>
		<description><![CDATA[这年头，好的应用总是会被GFW和谐，不过还是有一些方法可以使用。

Dropbox提供的Ubuntu版本只有一个Deb的安装包，但是这个安装包只是个外壳，要想使用其功能，必须还要从网上下载the  proprietary daemon。所以你在按章了Deb饱后，启动时会给你一个提示：In order to use Dropbox, you must download the  proprietary daemon.

这是一个致命的问题，因为被和谐，你不可能从他的官网上下载这个程序。不过倒是可以从何其他网站上下载这个daemon，文件名为：dropbox-lnx.x86-0.7.110.tar.gz。下载后解压到你的个人文件夹里面，然后在启动Dropbox就没问题了。

<span class="readmore"><a href="http://www.mryang.org/2011/03/dropbox-install-in-ubuntu/" title="Ubuntu中安装Dropbox">阅读全文——共360字</a></span>]]></description>
			<content:encoded><![CDATA[<p>这年头，好的应用总是会被GFW和谐，不过还是有一些方法可以使用。</p>
<p>Dropbox提供的Ubuntu版本只有一个Deb的安装包，但是这个安装包只是个外壳，要想使用其功能，必须还要从网上下载the  proprietary daemon。所以你在按章了Deb饱后，启动时会给你一个提示：In order to use Dropbox, you must download the  proprietary daemon.</p>
<p>这是一个致命的问题，因为被和谐，你不可能从他的官网上下载这个程序。不过倒是可以从何其他网站上下载这个daemon，文件名为：dropbox-lnx.x86-0.7.110.tar.gz。下载后解压到你的个人文件夹里面，然后在启动Dropbox就没问题了。</p>
<p>提示，daemon解压后的文件明为.dorpbox-dist，不会直接显示出来。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mryang.org/2011/03/dropbox-install-in-ubuntu/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>重新开始记录生活</title>
		<link>http://www.mryang.org/2011/03/record-new-life/</link>
		<comments>http://www.mryang.org/2011/03/record-new-life/#comments</comments>
		<pubDate>Tue, 01 Mar 2011 03:46:50 +0000</pubDate>
		<dc:creator>mryang</dc:creator>
				<category><![CDATA[生活杂记]]></category>
		<category><![CDATA[儿子]]></category>
		<category><![CDATA[生活]]></category>

		<guid isPermaLink="false">http://www.mryang.org/?p=662</guid>
		<description><![CDATA[是在不能忍受BlogBus的速度了，最后还是回到了WP，重新搭建了荒废一年的博客。

一年的时间过得很快，从上一篇日志到现在整整一年了，这一年的时间主要在迎接儿子的到来。只有当了父母，才会真正体会到做父母的辛劳，整个生活的中心也发生了变化。

本来想把Blogbus积累的两百多篇日志搬过来，但是折腾了半天，发现导入后只剩下文章，原来的分类、tag和评论均不在了，只有等有空了再来弄这个东西了！

]]></description>
			<content:encoded><![CDATA[<p>是在不能忍受BlogBus的速度了，最后还是回到了WP，重新搭建了荒废一年的博客。</p>
<p>一年的时间过得很快，从上一篇日志到现在整整一年了，这一年的时间主要在迎接儿子的到来。只有当了父母，才会真正体会到做父母的辛劳，整个生活的中心也发生了变化。</p>
<p>本来想把Blogbus积累的两百多篇日志搬过来，但是折腾了半天，发现导入后只剩下文章，原来的分类、tag和评论均不在了，只有等有空了再来弄这个东西了！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mryang.org/2011/03/record-new-life/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eclipse不能启动</title>
		<link>http://www.mryang.org/2009/09/cant-start-eclips/</link>
		<comments>http://www.mryang.org/2009/09/cant-start-eclips/#comments</comments>
		<pubDate>Fri, 18 Sep 2009 06:03:06 +0000</pubDate>
		<dc:creator>mryang</dc:creator>
				<category><![CDATA[生活杂记]]></category>
		<category><![CDATA[Eclipse]]></category>

		<guid isPermaLink="false">http://www.mryang.org/?p=669</guid>
		<description><![CDATA[早上准备使用安装了多日的Eclipse，点击了桌面建立好的快捷方式后，却出现了一个对话框，提示“JVM   terminated.Exit   code=1 ……”之类的信息，确定后就退出了。

查看了Eclipse的Readme后，说是可以在命令行方式下通过命令启动，如下：

eclipse -vm c:\jdk1.4.1_01\jre\bin\javaw

<span class="readmore"><a href="http://www.mryang.org/2009/09/cant-start-eclips/" title="Eclipse不能启动">阅读全文——共346字</a></span>]]></description>
			<content:encoded><![CDATA[<p>早上准备使用安装了多日的Eclipse，点击了桌面建立好的快捷方式后，却出现了一个对话框，提示“JVM   terminated.Exit   code=1 ……”之类的信息，确定后就退出了。</p>
<p>查看了Eclipse的Readme后，说是可以在命令行方式下通过命令启动，如下：</p>
<p>eclipse -vm c:\jdk1.4.1_01\jre\bin\javaw</p>
<p>于是干脆把这个命令的参数加到了快捷方式中，这样就不用每次都要到命令行下敲入命令了。当然，还可以在命令中直接指定workspace，如下：</p>
<p>eclipse -data d:\workspace -vm c:\jdk1.4.1_01\jre\bin\javaw</p>
<p>快捷方式加命令行参数，只需在快捷方式上点击右键，在属性里可以看到指定到文件，在文件名的后面加上相应参数即可。</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mryang.org/2009/09/cant-start-eclips/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>文献管理工具Zotero</title>
		<link>http://www.mryang.org/2009/09/zotero-brie/</link>
		<comments>http://www.mryang.org/2009/09/zotero-brie/#comments</comments>
		<pubDate>Tue, 08 Sep 2009 06:05:27 +0000</pubDate>
		<dc:creator>mryang</dc:creator>
				<category><![CDATA[学习笔记]]></category>
		<category><![CDATA[zotero]]></category>
		<category><![CDATA[文献管理]]></category>

		<guid isPermaLink="false">http://www.mryang.org/?p=672</guid>
		<description><![CDATA[Zotero是一个类似EndNote的文献管理工具，它可以方便的收集、组织、分析文献，并且可以引用到Word、OpenOffice中，提供了多种期刊杂志的引用格式，方便论文的撰写。Zotero是一个Firefox的扩展，文献的收集也只需要通过Firefox浏览时点击地址栏的相应图标就可以收集了。收集可以通过Google scholar、Amazon和一些文献数据库网站直接浏览导入，也可以现在标准的文献数据导入。对于撰写论文来说用得最多的可能是论文的引用了，有了这个就不需要在写参考文献时在论文中到处寻找，在参考文献出考虑排序这些繁杂的工作，只需要点击几个按钮就可以实现上述功能了。同时还提供了30多种语言，最关键的是免费，不用像EndNote那样，缴费才能用。

<span class="readmore"><a href="http://www.mryang.org/2009/09/zotero-brie/" title="文献管理工具Zotero">阅读全文——共943字</a></span>]]></description>
			<content:encoded><![CDATA[<p>Zotero是一个类似EndNote的文献管理工具，它可以方便的收集、组织、分析文献，并且可以引用到Word、OpenOffice中，提供了多种期刊杂志的引用格式，方便论文的撰写。Zotero是一个Firefox的扩展，文献的收集也只需要通过Firefox浏览时点击地址栏的相应图标就可以收集了。收集可以通过Google scholar、Amazon和一些文献数据库网站直接浏览导入，也可以现在标准的文献数据导入。对于撰写论文来说用得最多的可能是论文的引用了，有了这个就不需要在写参考文献时在论文中到处寻找，在参考文献出考虑排序这些繁杂的工作，只需要点击几个按钮就可以实现上述功能了。同时还提供了30多种语言，最关键的是免费，不用像EndNote那样，缴费才能用。</p>
<p><img class="alignleft" src="http://www.zotero.org/support/lib/exe/fetch.php?media=http%3A%2F%2Fwww.zotero.org%2Fstatic%2Fimages%2Fsupport%2Fquick_start%2Fsmall%2Finstall.png" alt="" width="150" height="100" />Zotero的使用是很简单的。首先到<a href="http://www.zotero.org/" target="_blank">http://www.zotero.org</a>安装Firefox扩展（在该网站的右上部提供了1.0版本和2.0的beta版，直接点击就可以安装了），也可以在Firefox的工具菜单-&gt;附加组件里查找安装。安装好后会在Firefox的右下角出现一个<a href="http://www.zotero.org/" target="_blank">zotero</a>的图标，点击就可以看到管理界面了。</p>
<p><img class="alignright" src="http://www.zotero.org/support/lib/exe/fetch.php?media=http%3A%2F%2Fwww.zotero.org%2Fstatic%2Fimages%2Fsupport%2Fquick_start%2Fsmall%2Fcapture.png" alt="" width="150" height="100" />Zoteor可以收集的文献种类很多，常见的就是期刊、书籍、杂志等，也能收集网页、和图片，并且可以将附件保存在本地。收集时只需要浏览器的地址栏里出现书本或文件夹的图标，表示该页面就有收集的内容，点击该图标就可以选择收集的文献项目了。也可以通过文件或手工导入，只要按照标准格式就行，如维普期刊查询后导出的结果。</p>
<p><img class="alignleft" src="http://www.zotero.org/support/lib/exe/fetch.php?media=http%3A%2F%2Fwww.zotero.org%2Fstatic%2Fimages%2Fsupport%2Fquick_start%2Fsmall%2Fword_plugin.png" alt="" width="148" height="100" />在Word中引用文献只需要安装一个插件即可。<a href="http://www.zotero.org/download/integration/Zotero-Word-Plugin-Installer-1.0b4.exe" target="_blank">2.0版本</a>的插件和<a href="http://www.zotero.org/download/integration/Zotero-Word-Plugin-Installer-1.0b3.exe" target="_blank">1.0</a>的不一样，在1.0上使用的，2.0上就不能使用。安装非常方便，下载后双击，按提示安装即可。安装好后在Word的工具栏中会出现新的工具。如图所示，在Word2007中会在加载项中出现。工具栏中的第一个图标就是引用文献图标，点击后先选择引用格式，然后选择相应文献即可。第三个按钮是生成引用文献细节的，就是文章后部的文献列表。第四一个图标还可以随时改变文献引用格式。这样，写文章时就非常方便了。</p>
<p>这几个是常用的功能，更多的使用功能可以参见<a href="http://www.zotero.org/support/quick_start_guide" target="_blank">http://www.zotero.org/support/quick_start_guide</a>。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mryang.org/2009/09/zotero-brie/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

