2009年3月18日星期三

Mini Introduction to Factor Graph & Sum-Product-Algorithm

I'll give a brief presentation tomorrow in class.
The following is my slides :

2009年3月16日星期一

The past Pi Day

March 14 is known as The Pi Day, quite funny :-)

U can find more at its offical site.

The pity is that online-shop under the site seems not available for the time being, however u may get what u want at here :P

First 10,000 bits of Pi can be found at here


2009年3月14日星期六

All about ACM Honored Class

“人生到这个世界上的唯一职责就是活下去,去证明自己的生命,自己的反抗,自己的自由”
—— Albert Camus

“只有为他人而生活的生命才是值得的”
—— Albert Einstein


O.我像每个涉世未深的、受过教育的年轻人一样,受困于我们为什么存在于这个世界上、为什么周而复始地学习劳作、该怎样寻找自由这样严肃而颇为深奥的问题,也经常让对个人、家庭、国家、民族、人类、宇宙、时间的思考占据整整一个午后,任由思绪的跳跃。当我还没有作好准备去迎接这些问题的挑战之时,我走进了ACM班的课堂,往后伴随着来自老师和同学不经意的只言碎语,这些问题,毫不客气地与公式、理论、模型争先恐后地索取着大脑每一分钟的运转以及脉搏的每一次跳动。即便一天永远只有二十四小时,去除必须的睡眠、被附以种种理由的玩乐、对新鲜事物的流连忘返所占去的时间,我并不觉得去思考这些问题是一种浪费,至于精力就更不用担心了,闭眼睁眼,它就回来了。这个班级乃至真正的大学存在的理由,正是在于给一群尚显脆弱的追梦者提供最初的、宁静的家园,将陈旧的枷锁、对梦想的嘲笑、对思索的逃避、对身份的焦虑、对暂时无知的苛求尽可能地挡在门外,而门上赫然可见:患得患失行往他处,怕苦怕累勿入斯门,无怨无悔。

任何一代人不光有他们的爱与恨,更有使命,我相信走出ACM班大门的那一刻,每个人都将接过接力棒,科学家、学者、企业家、工程师、教育家、作家、演说家等等,无论身为其一亦或兼任述职,都将成为革新力量的贡献者,成为书写未来的浪漫诗人。

今日离我怀揣朦胧向往怯生生踏入那扇大门已经五个学期有余,那么,做对了什么?做错了什么?坚持了什么?放弃了什么?得到了什么?给予了什么?自问自答。

I.做错了什么?

-没有自己的风格。
还在中学里念书的时候,时常手头做着物理题,环望四周,发现别人都在做数学,便会放下手头的物理,心想还是先把数学做了吧,这样有问题大家还可以讨论一下。步入大学,进入ACM班,面对相当数量可自由支配的时间与经常同期而至的几件事情,我就像无头苍蝇一样在它们之间撞来撞去,这个做一点,那个看一点,于是最后都没做好做完整,还让自己始终处于一种焦虑的状态。这是一种依靠,对于陌生的情况,我企图依靠别人给我一盏指示灯,却不想迷失在五颜六色中,空留困惑与烦躁。

-没有在实践中追求真知。
在过去一段时间的学习中,我曾经相当地呆板,我把课本当成了小说,并没有在精读前浏览通读的习惯,这导致我有时会固执地纠结于某个细节,当最终再翻几页,才发现先前的功夫并不是所谓的“独立思考”,仅是无意义而浪费时间的。在计算机科学这样一门实践占很大比重学科的学习中,我曾经拒绝一边看书一边动手,而是非要等到书看得差不多了,才着手应用,或者因为没有时间根本就流于纸上谈兵。事实上边做边学并不需要付出多少代价,如同单元测试,可以尽可能早的就地更正理解上的错误,因而过去我常常在考场中发现有些东西只是看的时候我以为自己理解了而已,经不起敲打,现在阅读的时候我通常在一边放上一支铅笔、一张纸。

II.做对了什么?

-将美与简洁作为追求与评判依据。
这里所说的美与艺术范畴的美是有区别的,后者需要特殊的天赋,而前者则是有规律可寻、是每个人都能够也应该铭记于心的东西,通过阅读并且在实践中的运用和体会,就能体会到这种美给自身与他人带来的愉悦;至于简洁,本身就是美的一种体现,也是减少潜在错误的有力武器。

-不断的自我审视。
对自己决不麻木不仁,当感觉到问题的存在,就应当剖析它、试图解决它,这也是我现在觉得自己终于走出了前几个学期的阴霾的原因,从一开始认为自己只是因为太懒惰了,接着觉得是因为自己不讲究学习方法的“技术问题”,后来认为原因是没有把心态摆正、太盲目高估自己,直到最后发现是因为潜意识中对他人的依赖,这就像个漫长的 debug 过程,却别在于,当你找到一个方案后运行时测试的代价并非朝夕,但肯定远小于回避导致的代价。

III.坚持了什么?放弃了什么?

-坚持用自己的光亮照亮自己
胡适先生有一句格言:“多研究些问题,少谈些主义”。在追求科学与真理的过程中,尤其是愿意进行深刻思考的人,会陷入一种信仰,或者主义,但这种信仰很可能是盲目的,虔诚被人认作是一种美德,但请仔细想一想,全盘地接受一套制度、跟从一种说法,实际上把人带入了臣服、懒惰、压抑的境地,况且一旦此时萌发了不同于说教的想法,会感到恐惧、没有安全感,因为这是“他们”的标准,做得再好,也只是“他们”,而不是“我们”,把自己至于月亮的境地,当背向太阳时,就将冰冷无比而感觉不到生命的炙热。“答案只有一个”,“幸福的家庭都是相似的”,然而通向真理的道路却是取之不尽而各不相同的,对于每个个体而言。

-坚持浪漫的态度
革新、学习、爱,如果坚持生活、拥有一种浪漫的态度,那它们就可以免于分离而得以融合,几乎所有被我们津津乐道的科学巨匠都是浪漫的生活诗人、生活乐师,而今天许多从事科研的人却丢失、或者主动放弃了这种宝贵的特质,很遗憾也许他们至多能被称作学者,而非大师,也正是这个原因科学这一充满情趣的词汇可能被社会误解。我愿意摘录印度大师 Krishnamurti 的文集《人生中不可不想的事》中的一段话:“你知道学习的意义是什么吗?当你是真的学习时,你是通过你的生活在学的,你没有任何特定的老师,每一件事情都在教导你——一片枯叶、一只飞鸟、一种气味、一滴眼泪;有钱的、贫穷的、哭泣的人们;女人的微笑、男人的骄傲——你从所有的事物中学习,所以你并没有一个特别的指导者,没有哲学家,没有灵性导师。生活本身就是你的老师,你是处在不停歇的学习状态中的”。

-放弃了模棱两可
国人有一个劣习,那就是模棱两可,一张口就闻“大约”、“也许”、“差不多”,做事亦是如此,《差不多先生》于1924年6月28日在申报上发表至今已有如此漫漫八十四载有余,看到今日的情形,不知胡适先生会不会摇头叹气。我要求自己只在确实不知道而弄清楚又会造成耽搁的情况下才使用如上词汇,因为它们对于解决问题不会产生任何帮助,反而减弱了一句话、一段表述其余部分的可信度。事实上,譬如在特定的条件A下,结论是B,完全可以说:“在A的情况下我得到了B的结论”而不是“结论也许是B”,这样一句模糊的废话就不再掩盖两个有价值的依据。

-放弃了聪明
为了更接近智慧。翻看室友记载的课堂笔记,发现就在刚进入ACM班的时候,老师就重弹道:聪明是智慧的天敌。那么当时,断然是被我无视了,日后的很长时间我也只是偶尔感叹(小)聪明不再像以往那么管用,而没有真正想过主动放弃聪明。就像 Knuth 那句被收录在UNIX设计哲学中的格言所示,聪明,好比(自以为是的)“过早的优化”,会成为“是一切罪恶的根源”。

IV.得到了什么?给予了什么?

-诚如在开篇部分提到的,得到的,是庇护所,是天空,如果愿意,就没有面向黑海的彼得大帝雕像,唯有没有一个形容词的万言长卷。于是判断力、领导力、自由等等等等,有了被孕育的土壤,不会因为雕像的指引被黑暗遮蔽而轰然迷失,而是播撒到何处都能绽放。

-给予,就目前而言,我力量微薄,但我给予我的激情、光芒、热量,成为庇护所的一块岩石,未知天空的探索者,长卷下一页的撰写人。

2009年3月13日星期五

Essay On AI

根据我对AI的一些看法,我被归类为:弱AI论者

下面的讨论,服从一个假设,即词语“智能”指的是人类的智能,它的表现形式、它的作用、它的形成。

如何衡量智能?
人类为什么会产生智能,因为有需求,需求有两种,发现与创造。发现是指发现客观世界本来就存在的物质、规律,并用已有的或者创造的符号去刻画它们,所谓新事物在这里更像矛盾修饰法;创造就很难用前面这种语言来定义了,无妨大刀阔斧地认为是发现的补集。人类周而复始地发现与创造,从而使得世界的刻画变得越来越复杂,是的,刻画,而世界本身却岿然不动,当然话说回来,正是这种幻像般的刻画,才是有意义的东西。那么衡量(人类)智能的粗的标准,大可以提这么两个问题:能不能发现,能不能创造。

如何发现?如何质疑?如何交流?
人类发现“新”事物,需要经验、运气、舆论肯定。
在这三点中,经验是机器最容易获得的,至少从表面上看来,随着存储技术的发展机器可以将任何“历史”变成经验的候选,尽管目前如何从中提取出有价值的信息来提升自身的智能仍然是机器面临的瓶颈之一,可至少在经验这一环节上,佐料完全不成问题,菜怎么煮以后可以慢慢琢磨,在这之前,生吞也无妨;
运气则不同,众所周知人类数不清的科学发现是基于误会,得益于鬼使神差做错了实验步骤或者根本就把证明实验做成了证伪,人类中不怎么固执的群体在这种情况下不会放过异常结论,在重现这种异常后,能够再度审视“金科玉律”,发现被误引入的假设或者条件,不是吗?错误经常是由于潜意识中的假设没有被破坏。糟糕的是,机器在这种情况下会干什么?把数据标注为一个负例,即机器不能质疑,实际上也不太可能,因为对机器来说,没有潜在的可破坏的假设,也就没了质疑的线索。机器就像是一个无比忠于老师的学生,认为老师教授的一切都是对的。
舆论的肯定,很奇怪吧,这算哪门子必要条件...当一个人类科学家有了“新”的发现,他会写一篇论文,公诸于众后被权威或者大众肯定或者接受,然后史书记上一笔,某年某月某日某人发现了某物。那么机器怎么知道它发现了新事物呢?物理学规律被提出的时候,不同派别的智者们会坐下来,开个会,吵上几架,占上风的一方满怀信心地凯旋,落下风的则风尘仆仆赶回去思量别人理论中的漏洞,再不济,还有客观世界这个万能检验议告诉世人孰是孰非,或者根本就是两派谁的理论都不完整(参见光学理论的变迁),美中不足的只是该检验仪工作效率较低,有时得花上若干个世纪。回到机器,上文提到“所谓新事物在这里更像矛盾修饰法”,但对机器来说,它们却是如假包换的新事物,而并非“没见过的事物”那么简单,也就是说机器界没有“客观世界”这样一个万能检验仪,机器界只有管用与高效,没有对错,所以机器要么自己判断、要么通过吵架来判断。OK,问题来了,为了避免机器们各自为战发展到最后A派机器们完全不明白B派机器的信息表达形式,需要有一种统一信息表达的方式,伤脑筋阿...人类的语言虽然不止一种,语法也许相径庭,但一方面,人起码都有五官四肢(输入输出设备一致)、一样的大脑(指令体系结构一致)等等,所以衍生出来的东西不会八竿子打不着,还是那句话,再不济,一个中国人可以指着一件东西说:苹果!而大洋彼岸的人会道:Apple! 翻译的鼻祖就是这么干的,不是天上掉下来的,以上一致,在自由发展的情况下,机器基本上做不到,以为他们本来就不同,一台生物计算机和一台量子计算机的交流,也许能达到海豚与人类心有灵犀的程度,但这种交流的能力离需求还是太远了。

如何创造?如何任性?
苦思冥想以后,我仍然无法给“创造”下一个哪怕很罗嗦的定义,但有一点可以肯定,创造力与循规蹈矩是天生格格不入的,这正是机器的命门所在,它只做正确的事情,即便引入随机性,也断然不会有成气候数量的情况机器因为“任性”做了有悖于它价值观的事,机器实在是太功利了...

如何波浪式前进、螺旋式上升?
波浪式前进,螺旋式上升,念经之余,又发现一个问题,机器是个性急的家伙,它总是希望一件事情很快得出是俄非结论,用于今后,并且这些结论基于实实在在的“实验事实“,并不存在提出假设或者推翻假设之说,纠结于是非,也是机器很难孕育智能的重要原因。

Then What is AI ?
根据上面的论述,即最忠实、最孤独、最按部就班、最功利、最死脑经的智能。

2009年3月12日星期四

地平线上的 Network OS

我们当年ACM班面试的时候,群殴的题目是:一个计算机科学家要具备哪些素质
我自己胡说了些什么,已经不太记得了
黄牛当时说的,是计算机科学家要能够预见CS的未来(to some extend)
PH不久前在日志里提到,忙碌是独立思考的核武器

不久前跟黄牛讨论到我们面临的尴尬境地:看得少,自然可做的东西少,看得多了,框框也多了,被带入了轨道,能做的,也就是小修小补的事情。尚没有能力把握平衡点前,以前还是选择看,现在则觉得,还不如先想象,再看看现实长什么样,如此,当知道所考虑的东西已有前人踏青,也不至于沮丧,因为很可能在方法上都有很大区别。
所有的新东西,在它发展的伊始,总是百家争鸣的,慢慢地,再优胜劣汰或者优汰劣胜、标准化、失去活力、被淘汰、写入历史书。我们在书上看到的东西,基本上就是大鱼吃完小鱼、虾米后的产物了,很少有剖析发展历程的,因此我们很难知道一样东西变成这样的动机、曲折、最初目标、依附的背景,就像看那些引理+定理+推论的书籍一样,很容易遗忘并产生自卑感,因为摊开在你面前的是精巧而面面据到的、系统的方面,而自己某一时间只会做一些看上去很naive的东西,如此,即便独立思考,也是思考不出什么东西的,所以还是适当break一些为妙

我坚信网络操作系统会改变人们运用互联网获取(提供)资源的方法、运用电脑办公娱乐的方法、使用软硬件的方法...
它肯定不是没有生命力的新技术,也不会只是一个概念,操作系统只是外衣,云计算都不知道算不算序曲。如果足够细心的话,互联网上的点滴基本上都预示着即将滚滚而至的新时代

对出现在地平线上的 Network OS,感觉还是太过朦胧,想象它可以怎样改变世界,带来怎样的研究点与商机;或者现有的工具,比如某种网络协议、某种程序设计语言,在新时代是走向废纸篓还是铁树开新花?
不幸的是,我知道的太少了,如果知识库能有SXR一半的容量,前瞻也不是不可能,当然我还有想象,某实验室每周都要召开闲聊会议,我觉得这很好,不知道YB能不能接受一个外人也参加呢

最后附上某天记录在自己的 google note 上的一段话,可以看出还是带有很多旧想法的,就算抛砖引玉好了 :-)

-----------------------------------------------------------

隐藏在界面下面的“废铜烂铁”,嗡嗡作响的风扇、滴滴答答的硬盘磁头移动声,最好都不要被我看到,事实上,MVC都应该被运用到硬件中。
如果 NetworkOS的时代到了,那么人们大可以在增加的仓库里放上主机,而笔记本电脑只要剩下输入输出设备就可以了,那个时候,Mac Air 那种级别的轻便肯定就不稀奇了。与主机的互联,要么是无线,要么,可以实现像装修时排布电线一样把信号线路配置好,主机和“终端”只要插上标准接口就可以了。

NetworkOS 还能带来新的社区,试想当你打开终端,搜索“可用的操作系统”,一串“系统”罗列在你面前,这是什么感受?绝妙的感受!当然前提是,有好心人开放他们的系统(主机),或者系统的某些服务是公开的。由此可以带来很多新的话题,比如操作系统也作为了一种元素被纳入了社会化协作网络的讨论,用什么协议保证安全?维持高效?提供便利?是的,人们又有的好热烈探讨一番了,当然商家们也不会放过这一契机,总之,又有活干了,并且伴随着一革命性的变化,Computer Science的方方面面又将进入新的一轮循环,算法是否高效、数据分布是否合理、密码协议有无漏洞等等等等,都必须拿出来重新审视,就像缓存技术与多核技术曾经逼迫(或者说驱动)人们一样。

-----------------------------------------------------------

未完待续,有什么比较有意思的想法会继续贴出来,欢迎交流

2009年3月7日星期六

害怕从而依靠

对于陌生不再害怕。

差不多一年前这个时候,编译课设刚开始,好难的任务呀,这么多模块,于是拿来Qianfeng文档瞅瞅,不知不觉陷入框框,路途是坦荡了一些,但提交以后,却没什么尽兴的感觉

大概因为一二年级成绩不太好,所以潜意识有点对自己信心不足,虽然被生活中的乐观与自信掩盖,但碰到这种陌生的东西,就会感到心里没底,感叹:这东西怎么做呀....然后就像yyu所说的,开始找依靠 ,比如以前常见的景象,我拉着谁说,帮我看看这个程序,开始抱怨诡异的错误。时间久了,就越发对自己的代码能力有所否定,甚至一度觉得,我丫就不适合拍代码...

花了整整一个学期的时间,在砍柴前磨刀,是思维上的打磨,理清了思路,看清了问题所在,是时候不再困惑了。

最近在做的两件事情,都是阴差阳错,一是原本挂着“社会化搜索研究”的PRP实际上是参加IBM的web应用大赛,二是答应了mentor参与一个聚类(Cluster)的项目而我答应的时候以为是机群(Cluster)。这两件事情,totally,陌生的,于我。

前者mentor说他只负责牵线搭桥,就是组队,其他的就看我们了,而我变成了所谓的leader,称不称职当由别人去说,至少,我成了被依靠的对象;

后者mentor干脆把我托孤给远在大洋彼岸的老同学,于是完全没有face-to-face的交流,并且由于不熟,甚至都不好意思去依靠什么,唯独生怕给mentor丢脸呢;

是啊,干脆没有依靠,经历了,反而觉得陌生的东西也就纸老虎....天朝女乒顶多也就被神秘之师咬疼一次..

在这之前,开发网络应用的技术、流程、规范,团队里没一个人知道,面对长长的开源库list我只好一个个去google看是做什么的。现在,learning by doing,不也挺有声有色么

原来bishop的那本机器学习讲义,随便翻翻,满目不认识的符号,被我认定为不可看的东西,后来因为项目需要硬着头皮开了个头去看图模型的部分,纯理论,不也津津有味么

伟大领袖yyu说,抱着走---》搀着走---》扶着走---》独当一面。甚是。

From .csv To Derby

对于Web应用来说什么最重要?数据。因此这次我们来探讨一种比较山寨的数据迁移方式。
没有数据毫无疑问是痛苦的,人们YY数据的时候一般习惯在 Exel 或者 WPS 的电子表单里把表格填写好,然后呢?怎么把表格放到数据库里呢?又或者,我要把表格的Ci、Cj、Ck列放到数据库里某个表(关系)的Ai、Aj、Ak列(属性)呢?

简单地寻觅一下,你就可以发现 xls 格式的文件可以转为 csv 格式,后者的全称是 Comma Separated Value,言下之意就是(若干)用(英文)逗号分开的值,本质是一种文本格式,Exel 和 WPS 都可以把电子表单直接另存为这种格式,并且让人振奋的是,很多数据库都提供了内嵌过程从 csv 文件导入数据,或者把数据导出到 csv 文件,从而提供了不同数据库间数据迁移的一种可能。

当然事情没那么简单,有两个地方是相当头疼的。

第一,既然是用逗号分隔表单的列、用成对双引号指明字符串,那如果原始数据中就有逗号呢?如果字符串中也有引号呢?不幸的是,Exel 和 WPS 并没有支持配置这两种分隔符,并且让我颇感意外的是,数据库也没有支持通过转义字符的方式解决此类问题,至少我正在使用的 Derby 是没有的。
第二,如果使用的是轻量级的数据库比如 Derby,那么很可能它对内嵌过程的支持比较差,所谓比较差可能仅仅是错误提示不靠谱,但这都一个新手来说可能是致命的...

第一个问题的解决办法有三种:
A. 一种看上去比较不靠谱的方法,并且需要修改操作系统设置,很不美。
B. 适合数据规模比较小的情况,换句话说,如下操作是可以完成而不会让你的机器卡上半天的:打开电子表单-->选中需要导入的区域-->把该区域内容复制到记事本中并保存为 csv 格式。这样做的原因,是操作系统会在列与列之间自动补一个用于分隔的制表符(\t),相对于逗号,它引起错误识别的概率就小很多了
C. database@yssy 上有一位热心水友提供了如下解决方案(引用他的原话):
写一个批处理:
@echo off
setlocal ENABLEDELAYEDEXPANSION
rem InputFile:输入文件 OrgDelimiter:要修改的的分隔符 NewDelimiter:替换后的分隔

set /p "InputFile=Input the filename to be processed:"
set "OutputFile=Modfied_%InputFile%"
set "OrgDelimiter=;"
set "NewDelimiter= "
set "TempLine="
echo Processing the file!!!
for /f "usebackq tokens=*" %%c in ("%InputFile%") do (
set TempLine=%%c
set TempLine=!TempLine:%OrgDelimiter%=%NewDelimiter%!
echo !TempLine!>>%OutputFile%
)
:End
echo Finish Processing,The result file was saved as %OutputFile% in the same d
irectory as %InputFile%.

复制上面一段到*.txt文件中,存成和你已经导出的csv文件同目录下的*.bat文件双击运行*.bat输入要修改的csv文件。可以得到一个新文件。
可以支持大规模,并且不一定非把逗号替换成制表符,而是任意的,我想最好应该是不可打印字符,这样最不可能导致错误,但注意,只能是字符,而不能替换成字符串,这是因为 Derby 的内嵌过程把分隔符的类型定义为了 char(1)

下面讨论第二个问题:
在 Derby 中,数据迁移的内嵌函数主要有3个:
具体的参数定义就不细说了,读官方文档即可,罗列一下我觉得需要注意的几个地方:
  • 如果有恰好有两个用户都建立了同名 Schema ,Derby不会报重名错,而是会使用默认,并报出完全不着边际的错误信息
  • .csv 文件中,EOF不能跟在最后一行数据后,而要另起一行
  • 在参数表中分隔符的表示方法是 ' ' 而不是 '\t'
  • Derby的错误信息真的很烂 - - b
  • 设定目标文件参数时注意相对路径(或者干脆用绝对路径)
  • 虽然理论上应该是大小写不敏感的,但这几条内嵌过程中,表名却不接受小写...
最后附上一个 Sample : 把 data.csv 中的数据迁移到 TEST 表中
建立 TEST 表:
create table TEST (foo int, bar varchar(100), foobar varchar(100));
data.csv 中的文本:
1 hello world!
2 goodbye cruel world!

调用 Derby 的内嵌过程:
CALL SYSCS_UTIL.SYSCS_IMPORT_TABLE(null,'TEST','data.csv',' ',null,null,0);

PS : 区分字符串的双引号问题还有待解决,Plz contact me if u know a non-ugly solution :P