<?xml version="1.0" encoding="UTF-8"?><rss version="0.92">
<channel>
	<title>Free Mind</title>
	<link>http://blog.pluskid.org</link>
	<description>We are drowning in information and starving for knowledge.</description>
	<lastBuildDate>Thu, 09 Sep 2010 02:22:42 +0000</lastBuildDate>
	<docs>http://backend.userland.com/rss092</docs>
	<language>en</language>
	<!-- generator="WordPress/3.0.1" -->

	<item>
		<title>Display Equation with MathJaX</title>
		<description><![CDATA[<p>之前一直用一个 LaTeX 的 WordPress 插件来显示公式，插件的工作原理很简单，把公式用 LaTeX 编译为 dvi ，然后用 dvi2png 之类的工具转换为图片，最后根据公式的文本内容算出一个 Hash 值，作为图片的文件名，缓存起来，下次遇到需要显示同样的公式的时候，如果文件已经存在的话，就不重新生成一遍了。</p>
<p>不过最近换成了用 MathJaX 来显示公式。这个东西易用性实在是非常好，安装配置基本上没有什么可说的，几乎是解压一下，然后把一条引用它脚本的语句加到 WordPress 的页面显示模版就可以了。和之前我使用的方式不同的是，这是一个 Javascript 插件，主要工作都在客户端完成，因此服务端基本上不需要做什么配置，所以不只是 WordPress ，配合几乎任何 web application 都是很简单的。</p>
<p>当然，由此也带来另外的问题：比如，如果不支持或者关闭了 Javascript 的浏览器，就不能显示公式了。不过我想这个问题应该不是很大，因为看不到公式的情况下会显示出 LaTeX 代码，使用这么原始的浏览器的人看个 LaTeX 代码格式的公式应该不成什么问题。不过还有一个情况就是通过 Google Reader 等方式来看文章的时候，也是看不到公式的了。我后来想了想，觉得应该也不是太大的问题，因为通常在 Google Reader 里都没有太多的耐心看一堆公式什么的，若是真的觉得有趣，通常会点过来看或者把网址记下来有时间的时候再仔细看，也就没有问题了。</p>
<p>当然另外一个促使我切换的原因是原来的插件写个公式太繁琐，inline 的公式要用 [ tex ] 这样的标签包起来，单行的公式则更麻烦了，虽然应该也是可以 hack 的，但是既然 MathJaX 提供了现成的解决方案，干嘛不用呢？现在只要像在写 LaTeX 文档那样用美元号就可以写 inline equation 了。另外 MathJaX 渲染出来的公式并不是整个是一个图片，而是文字的形式，这一点让人更加亲切一些，也和周围的文本结合得更紧密一些，不过也因此导致在不同的平台下面结果看上去可能就有些差别。比如我就觉得在 Windows 下的 Firefox [...]]]></description>
		<link>http://blog.pluskid.org/?p=680</link>
			</item>
	<item>
		<title>支持向量机: Maximum Margin Classifier</title>
		<description><![CDATA[<p>支持向量机即 Support Vector Machine，简称 SVM 。我最开始听说这头机器的名号的时候，一种神秘感就油然而生，似乎把 Support 这么一个具体的动作和 Vector 这么一个抽象的概念拼到一起，然后再做成一个 Machine ，一听就很玄了！</p>
<p>不过后来我才知道，原来 SVM 它并不是一头机器，而是一种算法，或者，确切地说，是一类算法，当然，这样抠字眼的话就没完没了了，比如，我说 SVM 实际上是一个分类器 (Classifier) ，但是其实也是有用 SVM 来做回归 (Regression) 的。所以，这种字眼就先不管了，还是从分类器说起吧。</p>
<p>SVM 一直被认为是效果最好的现成可用的分类算法之一（其实有很多人都相信，“之一”是可以去掉的）。这里“现成可用”其实是很重要的，因为一直以来学术界和工业界甚至只是学术界里做理论的和做应用的之间，都有一种“鸿沟”，有些很 fancy 或者很复杂的算法，在抽象出来的模型里很完美，然而在实际问题上却显得很脆弱，效果很差甚至完全 fail 。而 SVM 则正好是一个特例——在两边都混得开。</p>
<p>好了，由于 SVM 的故事本身就很长，所以废话就先只说这么多了，直接入题吧。当然，说是入贴，但是也不能一上来就是 SVM ，而是必须要从线性分类器开始讲。这里我们考虑的是一个两类的分类问题，数据点用 $x$ 来表示，这是一个 $n$ 维向量，而类别用 $y$ 来表示，可以取 1 或者 -1 ，分别代表两个不同的类（有些地方会选 0 和 1 ，当然其实分类问题选什么都无所谓，只要是两个不同的数字即可，不过这里选择 +1 和 -1 是为了方便 SVM 的推导，后面就会明了了）。一个线性分类器就是要在 $n$ 维的数据空间中找到一个超平面，其方程可以表示为</p>
<p>\[
w^Tx [...]]]></description>
		<link>http://blog.pluskid.org/?p=632</link>
			</item>
	<item>
		<title>Acrobat meets Embedding</title>
		<description><![CDATA[<p>今天遇到一个非常 weird 的问题。实际上，这个问题已经困扰了我好几天了，那就是我发现我系统里的 Acrobat ，打开 PDF 文件的时候有时候需要“打开两次”才能真正打开，就是双击一下没有反应，要双击第二下才会出现 Acrobat 窗口。令我困惑的是并不是总是这样的，而是“偶尔出现”，实在是让人摸不着头脑。</p>
<p>今天又碰到了这个问题，终于忍无可忍，打开任务管理器观察一番，发现第一次双击的时候确实会出现 Acrobat.exe 这个进程，但是窗口并不显示出来，第二次双击的时候就可以了。当然，如果有其他 Acrobat 窗口打开着，总之后台如果有一个 Acrobat.exe 进程在运行着的话，就一切正常。</p>
<p>我很无语，正要去学校的论坛上抱怨一番，琢磨着怎么描述我的问题，想起来这个问题似乎并不是总是可以重现的，但是为什么今天一直都可以确定地重现出来？于是又随便找了桌面上一个 PDF 打开，一切正常。然后我把桌面上这个 PDF 拷贝到刚才我试验的那个目录下面，果然，问题又出来了。我觉得无比诡异，Acrobat 总不会是会栽在路径中有空格或者路径太长这种古老的错误上吧？于是我把那个文件一层一层地往上移动，再尝试，最后发现它放在一个叫做 “Manifold Embedding” 的目录下面，就会出事，我甚至把这个目录移动到其他地方，也都是这样，比如 “C:\Manifold Embedding\” 。我就尴尬了，Acrobat 怎么可以如此？ -,-bb</p>
<p>最后再尝试一番，发现罪魁祸首是 Embedding ，嗯，只要是在一个叫做 Embedding 的目录下就不成。Acrobat 可真是奇怪的癖好，实际上，在命令行下面输入</p>

acrobat.exe Embedding

<p>就有这个效果——在后台打开一个 Acrobat 进程，但是如果参数是其他的东西，甚至是小写的 embedding ，就会是另一个效果——窗口显示出来了，不过有一个错误对话框，说“打开本文档是发生错误，无法找到本文件”，这才是正常的行为嘛。甚至是 fooEmbeddingbar 这样的参数也会被识别出来，要说这是一个命令行参数实在是说不过去。找另一台装了 Acrobat 的机器尝试也是这样，搞不明白，这货究竟是个 bug 呢？还是个隐藏 feature 啊？</p>
<p>ps: 我被迫把我的 Manifold Embedding 目录改了个名字…… =.=bb</p>
]]></description>
		<link>http://blog.pluskid.org/?p=627</link>
			</item>
	<item>
		<title>You do (not) know</title>
		<description><![CDATA[<p>SPIEGEL: The genome project hasn&#8217;t just raised hopes &#8212; but also worries. Do you understand those concerns?</p>
<p>Venter: Yes. There are two groups of people. People either want to know the information or they prefer to live like an ostrich with their head in the sand, not knowing anything. The fear is based on the ill-founded [...]]]></description>
		<link>http://blog.pluskid.org/?p=607</link>
			</item>
	<item>
		<title>Generate Recursive Images</title>
		<description><![CDATA[<p>在上一篇 blog 中我提到了递归图片，还给了一个有趣的例子，这次还说递归图片，再给另一个例子：</p>
<p></p>
<p>不过这次的例子是我自己生成的，而篇 blog 就是要讲如何来生成这样一张递归图片。其实方法很简单，类推一下，多花一些功夫的话，之前给的那个“二次递归”的例子也是可以“轻松”做出来的。  </p>
<p>秘密就在于不动点迭代。我在上一篇 blog 中已经说过了，这个递归的东西要找的其实是一个“不动点”。对于一个函数  来说，一个不动点  就是满足  的值。而不动点的求法就是一个迭代，简单来说，就是随便找一个初始值  ，带进函数里得到  ，然后再带回去得到  ，如此迭代，如果数列  收敛的话，极限  将会是  的一个不动点。</p>
<p>不过，因为我见过的用不动点迭代来求解的情况  都是比较简单的可以写出解析式的函数，由于思维定式，我觉得图片的情况应该会很复杂没有办法这样来解。后来由 van 大神的提点，让我混乱的思维渐渐清晰起来，其实只要这个函数可以求值就好了，并不需要太多的其他条件，如果迭代收敛的话，就可以得到想要的递归图片了！</p>
<p>具体来说，现在我们有一张大图，里面有一个小框，这个小框里将包含这个大图本身的一个缩小版本，当然，缩小版本里还有更小的版本，如此递归。我们令  为所求的递归图的话，那么令  为不动点迭代的函数，这里的  其实代表了这样的操作：把  缩小，然后再贴到一个背景图上去（这个背景图就是最开始的那张大图里除去那个小框的部分。当然，这个函数如果要写出解析式也许是很复杂，但是给定一张图片作为输入，要求出经过这些运算过后的结果是很简单的，那这样是不是就可以求出前面的递归图片了呢？</p>
<p>我写了简单的 Matlab 代码来验证，随便找了一张场景类似的图来做试验，代码里面硬编码了许多数字，就不要说我代码丑了啊！  </p>

ratio = 0.45;
pi = 759; pj = 1496;
w = 1914; h = 1254;
Nit [...]]]></description>
		<link>http://blog.pluskid.org/?p=580</link>
			</item>
	<item>
		<title>Beyond Recursion</title>
		<description><![CDATA[<p>Quine，或者说可以打印自己源代码的程序，通常被认为是比递归更神奇的东西，我以前也聊过这个话题。这次再提起来，是因为发现了另一个有趣的例子。</p>
<p>真相是，今天早上实验室网络检修，没法上网，而且由于考试周的接近自习室和图书馆都成了人山人海，几乎没有我等“散户”的容身之地，于是无聊中就把昨天下载的一篇传说很有趣的论文翻出来看了——发现果然很有趣。其实就是 Dahua 之前曾经介绍过的今年 CVPR 会议上分发的一篇最有趣的论文 Paper Gestalt。论文主要是讲了如何用 Computer Vision 的方法来自动判别提交到会议的论文的好坏并决定是否 accept，Dahua 的 blog 上已经介绍得很详细了，我在这里也就不多说了。总的来说，推荐去看一看论文原文，现在可以可以下载到了，语言既严谨又诙谐，简直就是给不幸被断网的小朋友的最佳读物啊！  看到赫然出现的麦克斯韦方程组的时候，我就乐坏了，当然我认为这篇论文的作者并不是 seriously 真的想要用这个系统来作为以后审稿的辅助工具的，但是这个确实很好玩，更重要的是，我看到作者对这个学术社区现状的反思，当然除了诙谐，还略带一些讽刺的意味。所以呀，学术圈也是有可爱的人以及不无聊的事的！  </p>
<p>不过我看到关于这篇论文的介绍的时候，第一时间想到的问题就是：不知道用它自己的这个方法来测试它自己这篇论文，结果会怎样呢？等我看了论文，才发现原来它已经做了这个实验了，根据论文里说的结果，后验概率是 88.4% （adaboost 我不熟悉，不知道这个概率如何得来的，呼唤 kily），也就是说显然这篇论文应该被 CVPR 录用的。  </p>
<p>那么有意思的地方在哪里呢？这里的问题就和你试图构造一个打印自身的程序是会碰到的几乎一模一样。因为论文里说了，88.4% 的后验概率，这个数字是论文的一部分，也就是说如果没有这个数字的话，这篇论文还是不完整的，也就是说这个 88.4% 的概率应该是那篇不完整的论文的概率。那么好了，我填上 88.4% 之后再运行，这个时候，如果出来的结果不是 88.4% 就惨了，是不是需要再更新一下论文，然后再跑？也许这样永远轮回都达不到目标。这里必须要找到一个“不动点”一样的东西，这个 x% 填到论文这里，再运行分类器，得到的结果刚好也是 x%，看起来算是一个方程，如果说对于printf来说还可以巧妙地构造解的话，对于一个（即使相对简单的）分类器来说大概还是有些困难了。</p>
<p>不过其实这里的问题也没有那么严重，因为论文里用的方法是把一篇 paper 的 PDF 文件转换为图片再连接起来，最后抽取一些诸如 Histograms of Oriented Gradients 一类的视觉feature来进行分类。可以想像一个数字的变动对于这样 feature 抽取的影响其实是非常小的，所以几乎可以忽略不计啦。</p>
<p>只是这篇论文它又给自己出了第二个难题：为了展示算法的工作方式（当然，也许仅仅是为了在视觉上欺骗分类器获得更高的 accept 的概率  ），作者在论文中给出了本论文的 PDF 文件在转化为图片之后连接起来的结果。问题出来了：这张图片里，应该是包含它本身的一个缩略图的，这成了一个循环依赖，要完成论文的内容，必须先有一张论文的缩略图，而论文的缩略图必须是基于论文完整的内容的。</p>
<p>当然缩略图嵌套到一定小的范围内人眼不能分辩了之后，就可以作假了，所以这样的图，或者说至少看起来像这样的图，还是可以构造出来的。不过，在这篇论文里，作者似乎没有去钻这个牛角尖，仔细看它的缩略图，其中的布局也和最终版本的论文有些出入，也许只是简单地用了论文的某一个之前的版本吧。看来还不够完美啊！ [...]]]></description>
		<link>http://blog.pluskid.org/?p=572</link>
			</item>
	<item>
		<title>浅谈流形学习</title>
		<description><![CDATA[<p>总觉得即使是“浅谈”两个字，还是让这个标题有些过大了，更何况我自己也才刚刚接触这么一个领域。不过懒得想其他标题了，想起来要扯一下这个话题，也是因为和朋友聊起我自己最近在做的方向。Manifold Learning 或者仅仅 Manifold 本身通常就听起来颇有些深奥的感觉，不过如果并不是想要进行严格的理论推导的话，也可以从许多直观的例子得到一些感性的认识，正好我也就借这个机会来简单地谈一下这个话题吧，或者说至少是我到目前为止对这它的认识。</p>
<p>这两个词，在谈 Manifold 之前，不妨先说说 Learning ，也就是 Machine Learning 。而说道 Machine Learning 而不提一下 Artificial Intelligence 的话似乎又显得有些不厚道。人说 AI 是一门最悲剧的学科，因为每当它的一个子领域发展得像模像样之后，就立马自立门户，从此和 AI “再无瓜葛”了，而 Machine Learning 大概要算是最新的一个典型吧。这就让人有点奇怪，比如说数学，分门别类总算是够多了吧？可以不管怎么分，大家兄弟姐妹也都还承认自己是叫“数学”的。那 AI 呢？我觉得这里有很大一部分是它自身定位的问题。</p>
<p>反正现在我是不太清楚 AI 是做什么的，不知道其他人到底清楚不清楚。Wikipedia 上说</p>
<p>Artificial intelligence (AI) is the intelligence  of machines and the branch of computer science that aims to create it.</p>
<p>可是这相当于一个 tautology ，因为到底什么又是 the intelligence of machines [...]]]></description>
		<link>http://blog.pluskid.org/?p=533</link>
			</item>
	<item>
		<title>Disable TRAMP on Windows</title>
		<description><![CDATA[<p>TRAMP 是 Emacs 的一个很重要的组件，可以用于无缝地处理 ssh 、ftp 等远程文件编辑（甚至远程编译、调试等），还包括本地的 sudo 编辑文件等，总之是一个很强大的组件。今天要写这篇关于禁用 TRAMP 的文章，让我一时觉得真是光阴荏苒。</p>
<p>第一是关于 Emacs ，因为我实际上已经好久没有用 Emacs 了，有时候发现不知为什么好像在有意无意地避开它。不过最近编辑 LaTeX 文件比较多，尝试了很多编辑器，最后还是忆起 Emacs 的 cdlatex.el 最趁手，用其他的编辑器来写 TeX 简直就是体力活，所以即使在 Windows 下，也还是决定再启用 Emacs 。第二是关于 TRAMP ，我曾经是很喜欢这个东西的，因为它确实是很好用，如果在中文 Google 上搜索 Emacs TRAMP 的话，第一条的结果依然还是我很古老的那个 blog 上 4 年前的那篇半翻译半整理的文章。</p>
<p>不过这次我真的要禁用 TRAMP 了，因为我是在 Windows 下用 Emacs ，包括 ssh 、sudo 等功能都处于鸡肋或者非常难以配置的状态，而且我也不需要，毕竟我的目的就是编辑 TeX 文件。当然，最主要的原因还是它速度太慢，启动之后第一次按下 C-x C-f 打开文件，总是会在 mini-buffer 显示 loading [...]]]></description>
		<link>http://blog.pluskid.org/?p=526</link>
			</item>
	<item>
		<title>关于同行互审</title>
		<description><![CDATA[<p>搞科研学术的，对于大部分人来说，发论文就是必不可少的了。可是这个发论文不像平时上课交作业一样，有个老师或者至少是助教来帮你批改，特别是对于一些本身就已经是该领域的领军人物了的人，根本不存在比他们“更高层次”的人来做这种审核。这是一个没法避免的事实，所以学术界几乎都采用同行互审的方式。</p>
<p>其实学术界似乎远没有想象中的那么简单和纯粹，所以我在想是不是什么东西发展到这样一个规模之后必然会有一些诸如潜规则之类的东西出现？总之先不说这个，说 peer review ，其实太具体的东西我也还没有仔细了解过，不过大致的结构还是可以理解的，也就是会有一些比较有声望的人会被选作一个（比如）conference 的评委，然后投到这个会议的论文就（随机地，可能会有一些先验，比如相关研究方向等）分配给各个 reviewer 去审，中间有一些细节可能会有所不同，比如如果自己也投了这个会议的论文的话是不是就不能同时做 reviewer 了，以及 review 到最终决定的过程是否有和原作者之间的 feedback 互动等，但是整体上通常都是如此。不过通常也被划分陈两种比较大的变种，或者说，实际上是三种：</p>

author 公开，reviewer 不公开：也就是最普通的方式了，reviewer 知道自己在审谁的 paper ，但是 author 不知道被谁审了。
author 不公开，reviewer 也不公开：也就是盲审，现在在很多会议上都实行这样的方式。
author 公开，reviewer 也公开：全部公开，似乎不是特别常见，但是也有一些试行。

<p>我想应该第一种是以前最普遍的吧，但是后来人们发现了一个问题，就是如果你是一个很牛的人的话，你的论文或者你挂了名字的论文通常就几乎“百发百中”，一方面可能是大家看到你的名号都不得不给面子，另一方面是一看到你的名号，肯定就会以一种不同的态度（比如，一种仰慕的神色）去读你的论文，相比之下，那些名不见经传的作者通常就比较惨了。</p>
<p>其实这一点我自己也有体会，比如一篇论文是导师告诉你，XX 大牛写的文章，经典，去好好读一下，那么肯定就会无比仰慕地去细读，这个时候是抱着“找亮点”的心情去读的；但是另一方面如果是一篇需要 review 的文章，通常就会是另一种情况——抱着“找毛病”的心情去读。</p>
<p>这似乎也属于发展的趋势，因为现在搞科研学术的人也越来越多，论文的数量也急剧增长，不得不说大部分的论文都还是质量比较低劣的（accept rate 大于 50% 的会议可不多吧？），所以也只好以这样的态度来 review 。所以，有些人就提出要采取盲审的方式，让 reviewer 不知道作者是谁，就不会在 review 的过程中有 bias （或者说不同的 bias ）了。其实简单地说，之前的方式是名人受益，普通人会很惨，而换成盲审之后变成了名人和普通人都很惨了……不过至少看起来有些公平了。 =.=</p>
<p>但是问题还是有，前面说了，peer review 本身就是一个不得已的情况，大家是同行，水平都差不多，凭什么你就能 judge 我的 work 是不是有意义呢？特别是对于大牛来说，让比自己水平低很多的人来 judge 自己的工作似乎就更说不过去了。也确实，并不是所有的 reviewer 都是有能力或者态度端正或者有时间等等的。想想，如果我是一个大牛，我做了很有意义的工作，但是三番五次投出去总是被很弱的 reviewer 看不到我 work [...]]]></description>
		<link>http://blog.pluskid.org/?p=468</link>
			</item>
	<item>
		<title>如何生成随机数（上）</title>
		<description><![CDATA[<p>快三个月没有写日志了，大概是我开始认真写 blog 来第一次，也是因为发生了一些预料之外的事情，中断了许久，到后来又一直非常非常忙，不过我终于又爬上来冒个泡了，表明我还活着。  </p>
<p>第二点要澄清的是，我这里并不是要讲“伪随机”、“真随机”这样的问题，而是关于如何生成服从某个概率分布的随机数（或者说 sample）的问题。比如，你想要从一个服从正态分布的随机变量得到 100 个样本，那么肯定抽到接近其均值的样本的概率要大许多，从而导致抽到的样本很多是集中在那附近的。当然，要解决这个问题，我们通常都假设我们已经有了一个生成 0 到 1 之间均匀分布的随机数的工具，就好像 random.org 给我们的结果那样，事实上许多时候我们也并不太关心它们是真随机数还是伪随机数，看起来差不多就行了。  </p>
<p>现在再回到我们的问题，看起来似乎是很简单的，按照概率分布的话，只要在概率密度大的地方多抽一些样本不就行了吗？可是具体要怎么做呢？要真动起手来，似乎有不是那么直观了。实际上，这个问题曾经也是困扰了我很久，最近又被人问起，那我们不妨在这里一起来总结一下。为了避免一下子就陷入抽象的公式推导，那就还是从一个简单的具体例子出发好了，假设我们要抽样的概率分布其概率密度函数为  ，并且被限制在区间  上，如右上图所示。</p>
<p>好了，假设现在我们要抽 100 个服从这个分布的随机数，直观上来讲，抽出来的接近 3 的数字肯定要比接近 0 的数字要多。那究竟要怎样抽才能得到这样的结果呢？由于我们实际上是不能控制最原始的随机数生成过程的，我们只能得到一组均匀分布的随机数，而这组随机数的生成过程对于我们完全是透明的，所以，我们能做的只有把这组均匀分布的随机数做一些变换让他符合我们的需求。找到下手的点了，可是究竟要怎样变换呢？有一个变换相信大家都是很熟悉的，假设我们有一组  之间的均匀分布的随机数  ，那么令  的话， 就是一组在  之间均匀分布的随机数了，不难想象， 等于某个数  的概率就是  等于  的概率（“等于某个数的概率”这种说法对于连续型随机变量来说其实是不合适的，不过大概可以理解所表达的意思啦）。似乎有一种可以“逆转回去”的感觉了。</p>
<p>于是让我们来考虑更一般的变换。首先，我们知道  的概率密度函数是  ，假设现在我们令  ，不妨先假定  是严格单调递增的函数，这样我们可以求其逆函数  （也是严格单调递增的）。现在来看变换后的随机变量  会服从一个什么样的分布呢？</p>
<p>这里需要小心，因为这里都是连续型的随机变量，并不像离散型随机变量那样可以说成“等于某个值的概率”，因此我们需要转换为概率分布函数来处理，也就是求一个积分啦：</p>

<p>那么  [...]]]></description>
		<link>http://blog.pluskid.org/?p=430</link>
			</item>
	<item>
		<title>CV 课程 Project：简单验证码的识别</title>
		<description><![CDATA[<p>验证码的识别可以说是一个非常困难的问题，更何况现在有一些验证码让人来辨认都有些不容易，当然正如我标题里说的，我这里讨论的是一种简单的验证码，具体来说就是经过旋转、缩放之后再加上一些随机线条作为干扰而得到的图片，如右图所示。其实这个问题最开始是 MSTC 第四届趣味程序设计竞赛中的一道题，这个学期上了一门《计算机视觉》课，最后要求交一个 Project ，老师给了一些题目，也可以自己想主题，于是我就定了这个主题。</p>
<p>由于最近各种 deadline ，我也没空把详细过程再用 blog 的方式写一遍了，如果感兴趣可以直接看我的 Report 文档以及完整的代码。</p>
<p>其实这个问题我在当时趣味程序设计竞赛的时候就尝试解决过，不过我当时用的办法是 PCA ，事实上，我尝试了 PCA 、LPP 以及 NPE ，从各种 paper 上还有理论推导中的道理来看，似乎都是后两者要更加先进一些，然而结果却是 PCA 最好，当时就令我有些诧异。其实我一直以来都有一些极端的“理想”，就是总希望有那么一些非常“自动化”或者“傻瓜化”的方法，把问题放进去就能得出结果，例如我在中学的时候凡是遇到几何题，几乎都是首先尝试建立坐标系用解析几何的方法来做，虽然构造各种精巧的辅助线来解决问题是许多人的最爱，然而我似乎不太喜欢这种“专门针对某一个问题要重新想一个方法”的方式，却更偏爱通用性更强的办法，就算有时候计算会变得很繁琐，但是最后通常总是能算出来的。在这里也一样，我似乎有一种愿望，或者甚至是一种错觉，我们可以有一种算法，只要把数据放进去，就能得出最完美的结果来，比如通常特征提取和构造的问题，我似乎不太喜欢使用太多 domain 相关的先验知识来人工构造 feature 的方式，而比较偏爱直接使用最原始的 feature ，然后使用降维来自动选择——我甚至在想，是不是首先通过升维（例如，使用 Kernel 的方法）来够找更多的特征以增加数据的区分度，然后再紧接着用降维的方法来提炼，是不是就可以完美地解决一切特征构造和抽取的问题了？</p>
<p>当然，现在我知道这只是一个美好的愿望，其实我一直也都知道这只是一个愿望了，只是仍然有点不自觉地往那个方向倾斜。其实这样的问题，也许如果我们可以得到无穷多的训练数据和无穷多的计算资源的话，应该是可以实现的啦，哈哈！  </p>
<p>总的来说，我正在纠正自己的一些偏见，所以在学习了《计算机视觉》这门课之后我决定做一些尝试，特别是在知道了有一种叫做 SIFT 的特征可以保持旋转和缩放的不变性的时候，我就在想——这不就是正好是解决这个问题所需要的吗？所以我定了这个题目。然而不幸的是当我做出最后结果的时候发现实际结果并不好，还是经典的 PCA 最强。当然，到这个 deadline 前夕，肯定不能再换题目了，另一方面，虽然我一开始的设想被验证是错误的，但是这个 project 并不是没有意义的，我把它和 PCA 做了一些对比，并对结论做了一些分析，自己的理解也更深刻了一些，可以说还是收获挺多的。</p>
<p>另外就是这次我对噪音过滤的方法做了不少对比和尝试，最后的结论是中值滤镜最好，我印象中自己在做趣味程序设计竞赛的时候只做了非常简单的处理，于是好奇地找出以前的代码来看了一下，发现居然就是一个中值滤镜而已！不过当时不知道 OpenCV 也没有学过滤镜什么的，怎么找到这么个方法的来着？真是想不起来了。不过，有时候翻翻自己以前写的代码，确实会如同在论坛上考古一样别有一番趣味的，代码里也散发着岁月的味道，不是吗？  </p>
]]></description>
		<link>http://blog.pluskid.org/?p=428</link>
			</item>
	<item>
		<title>荐书：《女士品茶》</title>
		<description><![CDATA[<p>这本书的全名为《女士品茶：20世纪统计怎样变革了科学》，英文原名为 The Lady Tasting Tea: How Statistics Revolutionized Science in the Twentieth Century 。从副标题已经可以看出来它讲的内容是什么了，而从主标题也可以看出这应该会是一本很有趣的书。事实也确实如此。</p>
<p>我最近发现这本书之后它就几乎占满了我所有的空余时间，本来准备看完以后再来推荐，但是现在看到一半已经实在是忍不住了。总的来说这是一本好书，我最开始发现它也是在 newsmth 的统计版上看到有人推荐，而且书的作者 David Salsburg 本身也是牛人，我们会发现并不是所有的科学家都是那种自己思维极度活跃跟正常人根本无法沟通的，其实有许多牛人写的科普类读物是非常易懂并且非常有趣的，并且这些看似随意的文字描述的背后其实有着坚实的理论基础，完全的外行人会觉得这是一本有趣的书，另一方面，在该领域有很深造诣的人，又会从字里行间读到其背后隐藏掉的复杂数学，可以看作对自己所学知识的一次整理。</p>
<p>当然我是属于前一类读者，虽然有听说过 Pearson 、Fisher 之类的名字，但是对于统计学的产生和发展以及一些更深层次的应用和理论并不是特别了解。所以我就完全把它当作一本休闲读物来看了——确实是非常有趣的。此外，我觉得等以后自己对这个领域有了更多的一些了解之后再回来看一遍这个书，估计又能尝到另一番味道呢。如果容许我剧透一下的话，里面会有各种 8g 趣闻，比如但凡学过“数理统计”这门课的人应该都知道有一个叫做“t 分布”的东西，如果不是特别死板的老师的话，通常会告诉大家叫 t 分布这个名字是因为发表该分别的家伙以 student 署名，不过如果你想知道这个以 student 署名的家伙到底是谁，以及为何要这样匿名来发表，就需要看这本书了。</p>
<p>此外，你还将看到几位统计巨头老 Pearson 、Fisher、Neyman 之间的恩恩怨怨，当然，为何书的名字会叫做《女士品茶》？如果你不了解这个典故的话，也会在书的第一章揭晓。作者带我们目睹整个二十世纪里统计学本身的发展以及为各个领域带来的变革的同时，也为我们展示了上个世纪做 research 的情形。虽然也有各种混乱的情况，但是，至少可以看到许多人做 research 都是为了解决（不管是实际的还是理论上的）某个问题，而不是像今天这样很多人的目的好像就变成发表 paper 了，很难想像今天有谁作出重要成果之后会以“student”这样的匿名方式来发表论文。当然，也许书中所描述的都是巨牛型的人物，所以这个样本并不足以代表“二十世纪整个科研界”的情况吧。从各种牛人们的故事中其实我们也应该认识到：环境并不是决定成功与否的因素，即使在最恶劣的环境下，也会有无法掩盖的璀璨的光芒，所以，环境并不能作为我们不努力的借口啊。  </p>
<p>最后，还是忍不住引用了书中的一段：  </p>
<p>
列昂惕夫最初对经济部门的分类得到了一个 12&#215;12 的矩阵，这样，杰尔姆·科恩菲尔德就要来求它的逆矩阵，看是否存在唯一的逆矩阵。大概花了他一周的时间，得到的结论是分类过粗，必须扩大经济部门的分类数目。于是，科恩菲尔德和列昂惕夫惴惴不安地对经济体系作进一步地细分，最后得到一个 24&#215;24 的矩阵，他们认为这是或许可行的最简单的矩阵形式了。两人都知道，这一项任务根本不可能由一个人完成。科恩菲尔德估计，计算一个 24&#215;24 的矩阵的逆矩阵，即使是一周工作 7 天，也要花上几百年的时间。</p>
<p>第二次世界大战期间，哈佛大学发明了第一台非常原始的计算机。这台计算机采用机械式继电器开关，还常常卡住。战争结束后，没有什么军事任务需要做了，哈佛大学正在找项目来使用这台怪物似的机器，于是科恩菲尔德和列昂惕夫决定将这个 24&#215;24 的矩阵拿过去，用这台叫作“马克Ⅰ号”（Mark Ⅰ）的机器来求它的逆矩阵，完成这一繁琐的计算。事后，当他们要为这一去处过程付费时，却被劳工统计局的会计部门制止。原来，那时政府部门有一项政策，货物可以购买，而服务不能购买。这一理论意味着，政府部门自身拥有各种各样的专业人员来为它服务，如果有什么事情要做，政府机构内部应该有能做这件事的人。</p>
<p>他们对政府中的那名会计解释说，理论上这件事有人能够做到，但是他活不了直到把这件事情做完那么长时间。那名会计对此非常同情，但文件就是那样规定的，所以也无能为力。最后，科恩菲尔德想出了一个办法，顺利地解决了这个难题。方法是由劳工统计局开出一张购买固定资产的订单。什么固定资产呢？在发票上写的是劳工统计局从哈佛大学购买一个“逆矩阵”。
</p>
<p>购买一个“逆矩阵”，看来美国政府制造笑话的能力也并不比我们差，哈哈。向来听说美国那边机构办事都相当死板，严格按照程序来走，一点通融的余地都没有，这下也算真是见识到了。 [...]]]></description>
		<link>http://blog.pluskid.org/?p=426</link>
			</item>
	<item>
		<title>Proggit 圣诞套餐</title>
		<description><![CDATA[<p>大家圣诞快乐！</p>
<p>看论文看到崩溃之后，去 Proggit 逛了一圈，发现那边也很热闹，一连看到几个有趣的帖子，于是决定推荐几个：</p>
<p>&#8230;is there anything Emacs CANNOT do?
“Emacs is an OS” 的说法其实早就不陌生了，虽然大多数时候我会选择坚决捍卫这句话，但是其实自己也是把他当作一句有趣的玩笑来看待的。进入这个 thread ，看到有人说 Emacs 目前还不能编辑视频——这是理所当然的啊，我也这么觉得，不过下面立即有人给了这样一个链接：Acturally&#8230; ，自己点过去看吧，我决定再把 Emacs 打开来拜一拜！  
<p>
Best SourceForge project ever
<p>说实话我也有几次翻看过 SourceForge 的项目列表，不过这个 Best 究竟是什么呢？点开一看，原来一个 MacOS X 用户使用 GIMP 时出了 bug ，于是他专门建立了一个 SourceForge 项目，来说了自己的问题，那看来是相当不能忍了，因为在 SourceForge 上建立一个项目是相当费时的，好像还需要审核（不知道有没有记错，年代久远了），填一大堆乱七八糟的东西，相比之下 Google Code 就要简便许多，github 更是随便就可以建立一个 project 。不过今天算是第一次知道原来 SourceForge 还有这样的功能。</p>
<p>Merry Quine-mas
最后这个点进去是一个日文网站，不过没有关系，看 Ruby 代码就好了：</p>
open("/dev/dsp","wb"){&#124;h&#124;s=%q{d=["-KQW[UZbgu*HNT+]TNOOOTZ+cZTUUUUUZbagmssUZbagm
ss+wmpgja+KQW[dfnu","-KEKOINV[W*HBH+QHBCCCHN+WNHIIIIINVU[aUUINVU[aUU+YOR[^I+KEK
OXZbW","-W[acg vsc*TZ`+eaaaaa--vucavuca+eadsvs+W[dgvrtc","-K991LIL77777dIIIII--
LKKILKKI+Mad[   ^U+K991LHJK"].map{&#124;l&#124;l.unpack("C*").map{&#124;c&#124;[(c/6-4)*12/7-8,"012
35b"[c%6,1].  [...]]]></description>
		<link>http://blog.pluskid.org/?p=422</link>
			</item>
	<item>
		<title>解决 Matlab MEX 编译时 GCC 版本的问题</title>
		<description><![CDATA[<p>在 Matlab 里使用 mex 来编译 C/C++ 代码失败，这个问题算是困扰了我好几个月了，主要是我的环境比较恶劣：系统是 Arch Linux ，感觉这个系统比较喜欢追求最新版本，比较无视老版本软件的兼容性问题吧。再加上系统是 64 位的，出现各种兼容性问题似乎也觉得是理所当然的，然后像 Matlab 这样的软件通常使用较老版本的 GCC ，而 GCC 更新的时候又做了一些大改动，总之结果是我每次试图编译的时候都得到类似这样的错误：

/usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.2/cc1: /opt/matlab/sys/os/glnxa64/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by /usr/lib/libgmpxx.so.4)

因为 GCC 新版本里把 GLIBCXX_3.4.11 这个符号去掉了，所以挂掉了。搞得我每次需要运行 mex 编译的代码都要放到另外一台 Windows 机器上跑。也 Google 了很多次都没有找到解决方案。今天一怒之下用了最暴力的方法：/opt/matlab/sys/os/glnxa64/libstdc++.so.6 其实是指向该目录下的另一个文件 libstdc++.so.6.0.9 的软连接，我将他改成指向系统里的新版本的 libstdc++：/usr/lib/libstdc++.so.6.0.13 ，结果问题解决了。那个目录下还有一个 README ，说了这几个文件是从 GCC distribution 里拷贝过来的。于是这样用新版本覆盖应该不会有太大的问题吧？  至少目前还没有出什么问题的。</p>
]]></description>
		<link>http://blog.pluskid.org/?p=421</link>
			</item>
	<item>
		<title>2009 飘着</title>
		<description><![CDATA[<p>2009 年快要过去了，虽然我总是觉得奥运会明明就是今年举行的，但是日历上确实写着 2009 年。大家都写总结了，于是我也写吧，又不想用“总结”这么土的标题，就打开播放列表，找来找去看到“飘着”这首歌，回想自己这一年，也许这个词是很贴切的呢，寒假没有回家，也就飘在学校了，上半年住在玉泉校区，几乎每天飘来紫金港，下半年搬到紫金港校区，也几乎每天飘去玉泉。所以，就这个标题吧，很合适呢，歌也是很好听的。</p>
<p>说起来要写总结还真不是一件容易的事，我自己的记忆向来比较混乱，又是喜欢大幅度跳跃式的搜索，所以需要借助一些辅助的东西，比如 blog 、记事本、零碎的日记等等。其实这个新 blog 的开始大致就是从 2009 年开始的，所以目前的 Post 几乎就可以代表 2009 年了。</p>
<p>2009 年的第一篇 blog 就是关于 2008 年的总结，在那里提到了要给 2009 年定计划，然而最后其实也没有什么计划，甚至连新年愿望也没有什么想法，然而一下子就又该新年了，似乎是到了每天都要感慨光阴似箭的年龄，所以今年写总结的气氛明显感觉比去年要沉重一些呀。  </p>
<p>2009 年其实发生的事情还是比较多的吧，一个寒假和一个暑假让我明白了不少事。</p>
<p>寒假没有回家，没有回家的原因当然不是为了要好好学习，但是既然留在了学校就想一定要好好学习吧！实际上收获似乎比较小，主要的事情是在实验室做一个实验，好像是 Active Learning 以及  Content Based Image Retrieval 相关的，不过既然我连实验是做些什么都不记得了，可以看出来并没有太多 interesting 的东西出来。不过由于时间比较宽松，虽然可以在一些现有的代码基础上跑新的实验，我还是重新把整个 code base 写了一遍，并开始尝试各种 fancy 的 Matlab 代码组织方式，包括 packaging 以及 OOP 等，最后我写了一篇 blog 放弃在 Matlab 中 OOP 了，结论很明显，此路不通，自找麻烦。当然，与 Matlab 的斗争并没有这么终止，反正我是相当方案那种杂乱无章的代码组织方式，于是我还评估过一些 alternative [...]]]></description>
		<link>http://blog.pluskid.org/?p=420</link>
			</item>
</channel>
</rss>
