分不清楚电脑系统里的家长控制(Parental Control)功能是用来让家长去控制 的,还是控制家长的。反正刚刚听同事说,他家小学快毕业的小孩用这个很牛B的功能把电脑加了密,然后他怎么也登陆不了。他本身就是搞技术开发,可就是没辙。
BTW,说到家长,今天是老妈五十岁生日。小时候不懂事,让您费心了。生日快乐!
分不清楚电脑系统里的家长控制(Parental Control)功能是用来让家长去控制 的,还是控制家长的。反正刚刚听同事说,他家小学快毕业的小孩用这个很牛B的功能把电脑加了密,然后他怎么也登陆不了。他本身就是搞技术开发,可就是没辙。
BTW,说到家长,今天是老妈五十岁生日。小时候不懂事,让您费心了。生日快乐!
Wow, that is a long title. Yes, they are the famous two principles in Software Engineering I’ve learned when I was in ITB. It says that, the software you designed is stable, if in general
While it is realistically impossible to achieve the first goal, although software engineers are trying to reach it as close as possible, there are many ways to accomplish the second one. It sometime can be some procedures, which are what we called "backup plans"; it sometime can be some kind of self recovery mechanism; or, it can be proved that the software will eventually do something good. Here is the video version of the idea.
……但是还是有很多神奇的东西。刚刚从邮箱里发现伊不远万里寄来的一个礼物,欣喜万分。
大家猜猜看这是个什么东西?
9/11 更新:
这个东西叫做i卡拉OK。只要接在水果牌的音乐播放器上,那个小孔出来的音乐就是消过原声的。然后对着另外一端唱歌,声音会自动融入消过原声的音乐里。上面那些按钮是调 key 的,所以不会有破音的机会。厉害吧?
It’s a nice sunny afternoon in the library. So I tried to start a video chat to share this sunshine with her. However, she denied my request. She said that there is a limit on the bandwidth of 1GB per week with the broadband network in her residence.
Bandwidth, is a measure of the amount of data that can be transferred between computers in a network within a specific period.
I’ve been thinking about this for a while: Why do the Internet service providers want to limit the bandwidth? Well, the most reason I’ve heard is that they want to protect the network device from being overloaded and avoid other network users from squeezed out of the information highway.
Hmm, how can they do that by limiting the bandwidth? Let’s take an example in real world. Say there is a bridge on a river and people walk through the bridge from one side to the other side every day. Unfortunately there is a policy from the bridge owner that the bandwidth, the number of times one person allowed to walk through the bridge, is 10 times per day. Sadly, most people need to use the bridge several times only in the morning. It turns out that there are about 100 people walking on the bridge and each person go back and forth 10 times during that time. They don’t really need the bridge for the rest of the day except in the morning. Bridge is overloaded and few guys with bad luck fell into the river because of that.
I think, what the bridge owner really mean, is to limit the throughput.
Throughput, is a measure of the amount of data that can be transferred in a time unit between computers in a network.
It means that, if I am the bridge owner, I don’t care how many time you walk through the bridge everyday. But you must follow the rule that you are allowed to using that bridge for at most twice per hour! So no one will be waiting by the entrance and the bridge is always is good shape.
It’s the same for the computer network. Why can’t they just limit the throughput to, say 256kb per second? Doesn’t that make more sense?
加拿大的朋友们都在问:“你什么时候回来啊?”问到我都不好意思了,因为最近真的很忙。目前论文还没有着落,工作又抓得很紧,所以实在找不出一个借口给自己放个假。争取在圣诞节之前把一系列历史遗留问题都解决,所以过了这一段就会好的,一定要镇定。
战国时期,有一个宋国的农夫,他每天都到森林里去游走。有一天,农夫又像往常一样到树林游走的时候,看到一只跑得非常急的兔子,从草丛中窜出来时,竟然不小心一头撞死在一棵大树旁。“哇!怎么有这种事?我真是幸运。要是天天有这样的兔子,那真的很爽!”农夫心想。从此以后,农夫每天就坐在那棵大树下,等候兔子来撞树。
关于守株待兔的故事,大家应该都很熟悉。故事中农夫从发生了一次兔子撞树的事件中获得了愉悦,于是他每天都站在那棵树下,等待再次获得同样的愉悦。虽然在我们看来这个农夫很愚蠢,但是整个过程如果把农夫换成机器,把兔子换成一次时间和空间的巧合,那么守株待兔就是一个成功的人工智能。在开始写这一篇之前 ,我读了一下彼得写的他对我们讨论过的人工智能的阐述,觉得写的很好。特别是关于记忆带来逻辑能力和关联式记忆,应该可以从下面的例子中找到一些影子。这只是我们把前篇的讨论放在这个例子上的一种尝试。可行与否,要等阐述完才能知道。
还是拿出我们只有时间和空间的二维矩阵,来当作当前这个机器的记忆。纵轴代表时间,横轴代表空间。时间为 7 刻钟重复一次,相当于我们 24 小时的一天。空间为由 A 至 G 的 7 棵树,代表机器人所能行动的整个一维世界。注意,机器在空间里是双向的,但是在时间里是单向的。它可以改变它所处的空间的位置,但是却不能改变它所处的时间的位置。这是我们的常识。然后,我们假设机器的愉悦集里只有一个愉悦,代号叫做爽。而当机器刚刚进入它的世界的时候,欲望集为空。现在的机器对任何一刻时间和任何一步空间都没有关于爽的记忆,所以矩阵里面的每个格子为 0 或者可以说为空。
图一:爽之前的记忆
此时的机器没有任何欲望,所以它的行为是未知的。于是它开始在空间和时间里无欲望地乱走 —— 记住,虽然时间是单向的,但是可以循环。就这样,不知道过了多少次循环,或者说不知道过了多少天,一切开始有了转机。也就是今天 3 刻的时候,机器站在了树 C 。而在此之前,它从来没有在这个时间出现在这个地点过。此时此刻,它有了一种从来没有过的变化,那就是愉悦集里的那个唯一的愉悦处于某种原因被(3 刻,树 C)这个事件产生了。
画外音:“机器同学,请问你现在有什么感觉?”
机器:“爽!”
紧接着,一个包含了(3 刻,树 C)和 爽 的欲望就被生成,并加入了机器的欲望集。而在机器二维矩阵的记忆里,在(3 刻,树 C)的位置,愉悦强度从 0 变成了一个很高的数值,假设为 6。然后向相邻的时间和空间递减。也就是说,此后的机器,越接近(3 刻,树 C)它就越爽。
图二:爽之后的记忆
于是在(3 刻,树 C)事件发生之后,机器希望这个事件再次发生。因为它拥有在空间里行动的能力,它会向树 C 走去,直到到达目的地。这个方向可以由机器记忆里每个删格的愉悦强度来决定。可惜时间是单向的,机器并没有能力像空间行走一样走回上一刻。但是机器一直努力会让自己处于离爽最近的时间和空间上。这个努力可以用图二中的红箭头来表示。红箭头的尾部代表机器出发的时间和空间,红箭头的头部代表机器在自己能力范围内能到达的时间和空间。最终,它会站在 树 C 的位置,等待下一个 3 刻的到来。
能不能再爽一次,就要看机器的造化了。
今天在公司餐厅吃饭,照例拼了一盘沙拉。觅座之后,才发现叉子是这个样子的。仔细看了看,绝对不是断掉的。因为叉子的顶端很光滑,所以有可能是有意做成这样的。小朋友们,谁能回答出来这样形状的叉子有什么用?
之前我们说可以把一个愉悦和产生这个愉悦的事件联系起来,定义成一个欲望放在欲望集里。当欲望集里有了第一个欲望的时候,这个机器就开始有了自己的思维。这个思维很简单,就是寻找再次发生这个事件的可能,以再次获得同样的愉悦。而思维是建立在记忆上的。关于记,是记前面已经发生过了的事件。所以具体一点说,思维是建立在忆上的。
为了方便陈述,我们先假设这个机器的欲望集里只有一个欲望,而且愉悦集里也只有一种愉悦。前面我们定义过,这个欲望是一个愉悦和一个事件的联系。那么接下来我们应该研究一下机器是如何回忆的。根据前面的描述,我们把一个机器所存在的世界定义成一系列发生的事件,这一系列发生的事件的其中一个将会在这个个机器上产生一个愉悦。我们不妨给这个事件加上一些属性,来方便机器的回忆。两个之前提到过的属性,一个是时间,一个是空间。对于时间,在我们人类可以接受的解释中,是一维的。对于空间,为了方便我们的讨论,我们也把它设计成一维。因为我们之前要求这两个属性必须是离散的,所以这两个属性都有可追溯性。比如这一刻的上一刻,这一步的前一步,都是帮助我们寻找上一个事件的依据。就好像一个前锋成功进球以后,他在前一秒,或者前一步,肯定不会是在家里吃泡面,而是在禁区抬脚准备踢向足球。
我们的目的就是希望机器有一定的记忆来保存之前给它带来愉悦的一系列事件。对于每个事件,除了时间和空间这两个属性,我们还可以给它一些其他的属性,比如事件发生时,这个机器所侦测到的温度,如果机器有温度计的话;这个机器所侦测到的亮度,如果机器有感光器的话。事件的属性越多,就越容易把一个事件从另外一个事件区分开来。这些属性放在一起,就变成了这个事件的特征。当然,每一个属性都必须离散化。可以说机器里保存了一个多维矩阵,每一个纬度都对应一个属性。这样矩阵里的每一个栅格里都可以看成是一个事件。为了简化下面的讨论,我们假设我们的事件只有时间和空间这两个属性,就足够与其它事件区分开来。
对于机器,时间是一刻一刻前进的。之所以我们用单位刻,而不是秒,就是怕有人把这个机器所处的离散时间和我们现实的连续时间混淆在一起。同时我们也假设它在一维空间上也是一步一步前进的。当一个产生愉悦的事件发生后,机器会根据当前的时间和空间,向回追溯之前那个时间和空间发生的事件。这所有的属性里面,时间是比较特殊的。因为时间在现实生活当中是不可逆的,但是在机器的世界里,我们可以把时间设计成循环的。就好像我们一年有十二个月,每天二十四小时一样。机器的时间可以由有限个刻度组成,从零开始,一直到最后一个刻度之后,然后重新归零。这样我们就有了一个二维的矩阵。
上面我们说,这样一个矩阵里每一个栅格都可以看成是一个事件。但实际上,这个栅格里还可以保存一个重要的变量。因为目前机器的愉悦集里只有一个愉悦,我们可以在这个栅格里保存一个数值。下限为零,没有上限。数值越高,代表这个事件所产生的愉悦强度越高。然后周围的栅格里的这个愉悦的强度会逐个递减。比如一个很饿的人吃包子的时候会很高兴,就不存在说,在包子进入嘴巴的前一刻他还是很平静。那么有人会问,难道每个栅格里都要看成是一个事件么?从某种意义上说,一个栅格里的愉悦强度,其实就是这个事件的重要性。每个栅格当然应该看成是一个事件,只不过有些事件的重要性为零,可以忽略了。
上一篇留言里彼得说过,我们假设人的所谓思考能力和逻辑判断能力是不存在的,一切只不过是对记忆进行的高速读写操作。所以我们认为实现真正的人工智能就必须模拟这种高速的记忆读写。所谓的智慧,我们可以理解为经验的积累。经验,在这里就是对一系列事件和愉悦的记忆。至此,我们提供了一个保存事件和愉悦的结构,也就是一个机器的记忆。当机器处于某个事件中,会根据这个事件的属性,去矩阵里查找这个栅格里保存的愉悦强度,然后根据附近栅格里的愉悦强度,构成一个向量,表示愉悦强度增长的方向。然后通过自己的手段,来使那个方向的事件系列地发生。通俗一点讲,这个阶段的机器,有了自己的欲望。这里要提一下,时间是不被机器的欲望所改变的。但机器可以顺着时间前进的方向寻找愉悦强度增加或减少的依据。就好像我们人类知道每天早上八点钟的时候太阳会升起,然后我们就会开心地去迎接。我们并不会在下午六点钟的时候去开心地迎接太阳的升起。
洋人的名字名在前姓在后,所以同事们念我的名字就是 Yu Wang,乍一听起来就是“欲望”。我 Yu Wang 的欲望很多。几分钟之前,一碗热腾腾 Soba 泡面刚刚满足了我作为一个人类最基本的食欲。伊最不喜欢的我毛病里,除了贪嘴,其次就是爱夸夸而谈,而一谈就是长篇大论。所以现在又来准备满足我的发表欲。
去年在 Hamilton 的某个下午,跟 Peter 还有穗坐在一个叫做唯一的茶餐厅里,谈到了如何在机器里实现欲望,从而达到一定级别的人工智能。这个话题一开始是从生命的欲望开始的。在汉语词典里,欲望是这样定义的:对能给以愉快或满足的事物或经验的有意识的愿望。生命的存在,从某种角度就可以假设为为了满足种种这样的愿望的存在。正式因为有了这种愿望,才让举止有了目的,让行为有了目标。注意,这里不是讨论哲学和宗教,而是纯粹为了方便理解接下来的话题做的准备,所以就此打住。
为了能更好地从人工智能的角度来理解欲望,让我们进一步规范一下之前的定义:对给以愉悦(pleasure)的事件(event)的愿望,我们称之为欲望(desire)。对于愉悦,我们不知道受否能够再往下定义,也没有必要往下定义。愉悦,是在机器里实现欲望的最原始概念。而针对每个愉悦,我们都可以定义一个相应的欲望。一组愉悦,我们可以称之为愉悦集(pleasure set)。一组欲望,我们可以称之为欲望集(desire set)。这两个集在一个人工智能的实现里是全局的,也就是说一个拥有这种智能的机器人只拥有一组愉悦集和一组欲望集。在最初一个人工智能,或者说一个机器诞生的时候,这个欲望集是空的。随着事件的不断发生,我们要求愉悦集中每一个愉悦都在欲望集里有一个相应的欲望。
这里岔开话题一下,为了最简化我们的讨论,这里不讨论太多的学术术语,比如上面提到的两个集都是有限集(Finite Set);愉悦集到欲望集的关系是 Injective 的。所以,读的人应该尝试把谈到的概念放在最合理的范围内。
在欲望的定义里,我们还谈到了事件。同样,我们也不能并不需要再往下定义。事件,是机器里达到欲望的最原始概念。在我们的人工智能中,任何事件所处于的时间和空间都是离散(Discrete)的。也就是说,时间的前一秒和现在这一秒之间没有间隙给事件去发生;空间的前一个状态和现在这个状态之间也没有空隙给事件去存在。然后我们可以把这个机器所存在的世界定义成一系列发生的事件,这一系列发生的事件将会在一个机器上产生一个或多个愉悦。这是我们所需要实现的人工智能的关键。至此,我们的人工智能模型基本搭建完毕。BTW,我对事件这个概念比较有感情,因为我的硕士论文的课题就是关于离散事件系统(Discrete Event System)的。
在某些控制系统理论里,事件和信号往往是两个分开的概念。一个事件可以产生一个信号,或者反过来被信号激活。这里,我们就可以把信号替换成我们刚刚定义的愉悦。就好像实际生活当中,我们看到一件事情发生了,比如球被射进了球门,在球迷的脑子里会产生一个愉悦;然后因为这个愉悦,可能激活这个等待入球已久的球迷去欢呼。从人工智能的角度,当某个事件发生的时候,我们可以从机器的愉悦集里提取相应的愉悦。然后对于这个机器来说,它会觉得对于这个事件的发生,它很高兴。重申一下,这里所有的东西都是被机器们称之为造物主的我们所定义出来的。机器对于它这种所谓“发自内心”的愉悦的理解,并不能超出它所处于的它的那个宇宙和逻辑。
现在我们有了愉悦,还有了跟与愉悦相对的事件,于是我们可以把这个愉悦和事件联系起来,定义成一个欲望放在欲望集里。
上次说可以通过 hotmail 获得 Space 地址,这次又想知道谁在 MSN 上把我给删了。这年头人心不古啊,今天跟你聊几句打个招呼明天转手就把你 Delete 了。所以很有必要钻研一下,以免热脸贴到冷屁股上。记得好像 Pidgin 可以做到这个,于是就装了一个。
因为 Pidgin 所基于的 GTK 跟 Windows 本身的字体显示子系统是完全不沾边的,所以装上以后无法显示中文,人名显示出来的全是乱码。解决办法是,退出 Pidgin,去 C:\Program Files\Common Files\GTK\2.0\etc\gtk-2.0\gtkrc 把里面的
gtk-font-name = “sans 8″
改为
gtk-font-name = “SimSun 9″
然后运行 C:\Program Files\Common Files\GTK\2.0\bin\gtkthemeselector.exe ,并选择任何一个非 MS-Windows 的主题。最后,重新运行 Pidgin 就可以了。
BTW,Pidgin 还有一个功能,就是可以在别人打字的时候就提醒你,即使打的那句话还没有发过来。这样你可以在别人给你 Hi! 之前提前打招呼,很酷。