机器学习
(这篇是由英文原文翻译的。)
机器学习是本人非常喜欢的学术之一(虽然本人在此项领域并非很深入了解)。当我第一次接触到它的时候,我就非常惊叹,机器是如何能够学习的?若说用电脑来寻找迷宫的出路或是寻找最理想的捷径,我都能理解。因为那是用尝试错误法,就可以找到的。但究竟机器如何能够学习?
机器学习的方法
感知器(Perceptron)是机器学习的最单间的方法。它是人工神经网络(Artificial Neural Network)的基本概念。它可以用来学习很单间的样式或规律。感知器是模仿头脑的脑神经。当人学习某样东西的时候,这些脑神经之间的连接会变得更强。而在感知器中,这连接则由“重量”(weight)来表达,连接越强,重量就越强。
当电信号的能量到达了一个门槛的时候,神经细胞就会被激活,因而传达讯息。相似的,感知器的设计也运用了函数(function),称为激活函数(activation function)。但信号达到了门槛,这个函数就会被激活并将数值传送到下一个神经元(neuron)。
感知器是一种监督式学习(supervised learning)。即一个机器必须通过监督者,告知机器它学习时的输出(output)是对还是错。若机器的实际输出(actual output)和监督者所期望的输出(desired output)是不一样的时候,两种输出的相差数值即是错误(error)。因此,学习的目的就是要减少这个错误数值,好让实际输出的数值能够非常接近所期望的输出数值。这种监督式学习,如同小孩开始学习的时候,都是由长辈们监督着的。
为了让机器学习,则需要训练样本(training samples)。机器会通过学习来更新重量。每一次学习就会更新一次重量。而训练样本的数量应当庞大且多样化,这才能让感知器“体验”到各种不一样的状况。每个样本可以用来训练多次。样本训练的次序应当是随机的。每一轮的训练,称为epoch(时代?)。因此,经过多个epoch后,理论上均方差(mean squared error)会渐渐减少。
机器学习的学习过程可以通过三种方式而停止。1)当均方差接近零的时候。因为这表示说这机器可以得出非常接近所期望的数值。2)当经过连续非常多次的学习后,均方差也不会再减少时,学习就可以停止了。因为这表示无论再多的学习,机器也不会再进步,重量也不会更好的改变。(应当知道,不是所有的资料都有规律,例如随机组成的多个号码是没有规律的,因此这样的资料是无法学习的。)
3)当学习的epoch量已达到了使用者定义的数目,如1000或更多。因为这表示通过长久的学习,重量既不稳定,均方差也不减少。因此,这样的学习是可以停止的了。
经过训练的机器可以给予测试样本(testing samples)。测试样本不应该是由训练样本而来。这测试样本是为了评价经过训练后的机器的性能。零错误的训练结果并不代表在测试样本的测试下也会零错误。通常,测试样本是由真实的数据而来的。只有在测试以后还能表现出满意的结果,那样的机器才算是成功。
学习率(Learning rate)
机器学习,尤其是感知器中,有一个非常有趣的数学公式。为了更新重量,重量必须加(或是减)某个数值。算法如下:
wi(t+1) = wi(t) + α ⋅ e ⋅ xi(t)
wi(t+1) 是更新后的重量, wi(t) 是现在的重量, α 是学习率, e 是错误, xi(t) 是目前神经元的输入值。
有趣的地方是学习率。这学习率是在0与1之间。若学习率越高,每一回重量更新的变化就更大;若学习率较低,每一回的重量更新的变化就小。高学习率,学习得快,但并不保证会得到最好的结果(因为变化太大);低学习率,学习得慢,但却可以得到比高学习率更好的结果。
我们的学习也是如此。有些小孩,学习得快,但当他们成长到某个阶段后,学习能力就开始下降(所谓小时了了大未必佳)。但一些学习较慢的小孩,学习的表现则随着年龄的增长而更好。
过度训练
训练用的样本,若其样式有限,然而现实中的问题包含更多的样式,并将这有限的训练样本给予机器彻底的学习,结果就造成过度训练。即是,机器的神经元间的重量已经达到饱和,适应了训练样本。当给予其它拥有不一样的样式的训练样本时,机器就难以适应新的训练。这也是为何需要在训练时将训练样本随机化。
这与我们相似。若我们过度训练某种东西时,我们就会依附于那种习惯,而难以改变。这就好像我们的语言、习惯、字体等等。
动力(Momentum)
在人工神经网络学习过程中,有时会遇到长时没有进步的阶段。这叫做局部最优解(local optima),即我们认为是最好的结果了。但事实上,继续的训练,也许能够突破局部最优解而达到更好的结果,即全局最优解(global optima)。
比喻式的说法,这就像将一颗球从高处滚到低处,因为表面不平,而球到某个位置时就停了下来。因此我们以为这个位置是最好的。但是通过动力来推动这颗球,这球就有可能突破那些小高峰,而达到更低的位置。(越高的位置,即越大的错误;越低的位置即越小的错误。)
有趣的是,当我们在现实中学习时,往往会遇到瓶颈。这瓶颈令我们觉得没有进步,也很无聊。但坚持就好像动力一般,有可能让我们突破那瓶颈,而达到更高的学习层次。
含义
通过了学习这“机器学习”,我也学到了关于学习的道理。
- 机器只需要两个输入的神经元和一个输出的神经元,就可以示范如何学习。而我等的头脑是何等复杂,怎么可能不能学习?
- 机器可以接着监督而学习。同样,前辈的监督对于新学者来说是非常重要的。
- 当我们学习时,我们就像是要找出那某种规律,如游戏的规律,数学的规律,语言的规律,技巧的规律等。例如,当我们学习数学时,数学题做得越多,我们的数学能力就越好。因为我们接触到了各种各样的题目。这就好像通过大量的训练样本,就能够提升机器的学习效果。
- 当我们学习了书上或其它资源的某种技能,而且我们能够用那技能来完美地解决书上的问题,这并不表示我们可以解决现实中的真实问题。这就像训练样本和测试样本的差别一样。
- 学习较慢的人,未必比较差。稳当且顺利的学习,才是比较好的。
- 当一个人过度训练于某种式样,他就会依附于那个式样,难以改变。
- 想要突破瓶颈,坚持是必须的。
非监督式学习
另一个有趣的,感知器的运算法则是1957年所开发的。之后才有了非监督式学习。我个人认为,这些开发运算法则的过程,如同人生一样。当我们还是小孩时,我们需要父母及师长们监督我们的学习,好让我们知道什么是对与错。当我们到了理智的年岁时,我们就渐渐地能够自己学习了。这正是非监督式的学习方式。
附言:父母能够辨别双胞胎,正是因为他们过度训练了如何分辨他们。对外人而言,因为少接触,双胞胎几乎是一样的。但父母则天天见面,久而久之,就从中学习了其间微妙的差别。
开放源代码(Open Source)
自从接触到开放源代码(Open Source),真是深深地爱上它。先不看它license的问题。就因为开放源代码,身为一个程序编写员,才有机会学到其他人的编写方式。虽然程序编写主要是知道一个程序设计语言(programming language)的语法(syntax),但不同的人会用不一样的习惯(convention),如Microsoft喜欢用Hungarian notation,有的人喜欢用CamelCase等等。只有多接触各种各样的源代码(source code),或是不一样的程序设计语言,才会增强属于自己的程序编写的技巧。(这就像机器学习Machine Learning一样。有机会我会介绍这个。)
开放源代码,主要就是自由和开放,就可以自由学习、自由修改、自由改善,并继续地开放下去。也正是有这种观念,才有今天的Android、才有人人都在用的Google Chrome。就算某某人是Apple的支持者,他所用的Safari的WebKit引擎也是开放源代码的。而HTML,虽然跟开放源代码无关,但是它是属于自由文件格式(Open Format)。如果没有这个自由文件格式,我们就不能用任何一个网页浏览器(web browser)去浏览任何网页。
正是这份自由,很多人才能够加强自身对电脑的认识,比如安装Linux,从中了解harddisk,partition,bootloader等等的术语。这份自由,给了那些愿意学习的学者,一份无疆界的知识领域。也透过类似Linux的操作系统,学会了如何使用“命令”(command),将一部电脑的作用发挥到淋漓尽致。
(当然,并非很多人喜欢“浪费”时间学习。他们由于各种理由,喜欢外表精致,介面看似高级的操作系统。某些人喜欢用手指滑来滑去的介面,认为这才是“高级”。)
正是开放源代码,本人体会到了几个要点:
- 自由。正是自由,一切都返璞归真,无为而治,无招胜有招。
- 取长补短。既然自由,就可以自由修改,也可以从其它的源代码那里学习,甚至是竞争对手的源代码。因此,将各各不同的优点集合起来,就可以取长补短。
- 编写源代码(也)是一种艺术。有人认为,程序编写是科学,因为都是逻辑和数学运算的。讲求的都是资料处理等。但是,一个好的程序编写员,最重要的就是要将源代码写得他人也看得懂(并非只是自己看得懂而已)。因为这些源代码是开放的。他人可以“阅读”。为了让他人明白,语法本身是不能改变的了,所以必须在注释方面解释得清楚。代码风格需要清晰易读。这就是所谓的“艺术”。(它是一种艺术。并非把别人的源代码盗取后修改,就叫做程序编写员。)
- 编写源代码,呈现自己的风格。因为是一种艺术,当拥有一定的程序编写技巧后,自己的风格会渐渐鲜明。这就是每个人艺术的一种风格。
- 群体意识。因为是开放的,每个人都可以分享。共同志向的开发者就会集合在一起,一起分工合作地开发。当然,并非每个开发者都是友善的。就如现实生活中,也是会遇到一些评语不友善的开发者或使用者给予不适当的批评。有些可以不必理会;有些可以当着忠言逆耳。透过这样的群体互动,能够加强自身对他人的批评做出适当的反应。
- 自由选择。正是自由,若不喜欢某个人写的程序,某某人可以不用,也可以修改。就像Linux Distribution一样。有那么多的选择,就选个适合自己的。
总结,开放源代码,就是一种自由的艺术。
在线游戏和Matrix
Matrix(又称《骇客任务》、《黑客帝国》、《二十一世纪杀人网络》),本人的最爱。它表达了万般皆虚幻。当然,它的CG效果和武术特技真的是恰到好处。
在网上常常会读到些文章说玩在线游戏而上瘾、手机上瘾、推特(Twitter)上瘾等。只要跟上瘾有关,都和dopmine离不开。一个游戏,若千篇一律,自然玩了一阵子就觉得沉闷了。但在网上,新鲜事物层出不穷。如玩一个游戏,今天有新的物品、明天有新的关卡、后天有新的角色、再打两个怪物就升级了。所以越玩越有趣。如果有朋友跟你互动,那就更精彩了。因为那“未知”的因素又多加了一层。因为你不知道你的朋友会送什么礼给你,你不知道他会用什么样的新技能来帮助你。更厉害的是,你觉得这个游戏闷了,那就再下载新的一个吧。反正都是免费的。
若觉得人生非常虚幻,那这网上的虚拟世界更虚幻。就像Matrix一样,住在一个虚拟世界里,而耗费自己的时间,耗费自己的人生。
当你把自己的时间花在你所玩(扮演)的角色时,只是为了多加一点的“攻击力”,何不去花一点时间来锻练自己的体力?当你把时间花在你的角色,只为了多加一点的“智慧”而有更强的魔法攻击时,何不花点时间来阅读而增加自己的知识?当你用你的角色去打怪,只为了多加一点经验时,何不去做有意义的事来让自己各各方面都得到一些新的体验?当你在线上游戏里,用你的角色赚了那虚拟的金钱后,再用那笔钱去买虚拟的物品时,不如在现实生活上把钱存起来,然后买些有意义的东西。
你把你的精力、时间、金钱都花在了虚拟的角色身上。它既不是你儿子,也不是你自己,程式也不是你写的,为何要浪费这些珍贵的东西在它身上?
这虚拟世界,就像Matrix一样,让你觉得那“牛排”很好吃,让你觉得这花花世界(虚拟世界)多姿多彩。你的朋友们都拥有美丽的姿态。你的朋友们都跟你一样共患难,因为你们都有同样的敌人。你的朋友们都跟你志同道合,因为在那个世界,你们都有同样的使命。虽然那个世界会有些难题,如很强的boss,很贵的装备。但这一切都是可以解决的,只要多花点时间,多交几个“朋友”,甚至多花点真实的金钱,这一切都不会是问题。
这就是在线游戏的可怕之处。因为在给你这些自我良好的感觉时,你不知不觉中,就成为了那虚拟世界的“电池”了。
“欢迎来到Matrix。”
[caption id=“attachment_413” align=“aligncenter” width=“490”]
Matrix的其中一幕。[/caption]
母亲的忌日
昨天星期天,母亲的忌日。跟六年前一样,也是在星期天。但六年前的那一天是复活节。若不是看我的记录,我也不记得是多少年前的事了,因为对母亲的离世,记忆犹新。
我一生中,(跟别人相比之下)朋友不多。但我的母亲和挚友,都离世了。
人一生的痛,有多少?为何当至亲挚友离开时,会哀嚎痛哭?因为有太多的遗憾。因为有太多的千言万语。因为有太多的未来还在期待着。因为有太多珍贵的回忆,害怕将会遗忘。因为你在这个世上,再也没有机会跟他再见一次面,说一句话,听他的声音。留下的,只有不懂得更珍惜对方的遗憾。
对家人朋友好一点吧。每个人都必定会在某一天离开。先走的未必不好。因为他不用带着遗憾渡过余生。后走的,其实也未必不好,因为他还可以继续珍惜他身边的每一个人。
音乐、游戏、学习
当我们听一首歌的时候,我们觉得好听,就自动的想着它的旋律。并好像预知着接下来的旋律。但我们有时好像猜到接下来的旋律是怎样,有时又好像猜不到。正因为如此,我们才觉得这首歌很有趣。如果整首歌,都是千篇一律,那么我们就觉得这首歌非常无聊,没有新鲜感。但如果一首歌,过于随性,没有一点规律性,那就想噪音一样,完全没有味道。
游戏也是如此。一个烂游戏,正是让玩家觉得不能更进一步了。太容易的游戏,非常无聊。太难的游戏,连有没有“聊”都是个问题。人类会发明类似赌博的游戏,如掷骰子,正是赌博好像有种规律,有时猜到,有时猜不到,因此才觉得有趣。
其实,(我个人认为)这就是学习的本能。我们听一首歌的时候,就在学着这首歌。学习正是寻找一件事物的规律,并用着这个规律来推测接下来的事;或是学会一个技巧,并用这个技巧来解决接下来所有类似的问题。我们觉得“有趣”,因为我们“学会”了一点又一点。我们觉得无聊,因为我们全部都会了。但如果太难,什么都学不到,这根本就不能称得上是无聊还是有趣了。
听歌,正是学习它的旋律。游戏,正是学习游戏里的规律。太容易的,就很无聊;太难的,又很无趣。
过年
“过年”,尤其小孩特别开心,因为可以拿红包。其实不仅如此,曾经阅读过报章,过年的意义可多着呢。
在中国,因为四季的关系,过年即是由冬天转为春天之时。因为冬天寒冷,大地冻结,不宜耕种。而春天则大地回春,百花齐放,万象更新。一切都有更新的现象。因此,过年时,人人都穿新衣。因为以前人穷,新衣并不常有。买了新衣,唯有等过年时才穿。因此才欢天喜地的过着新年。就连老鹰也是一年一次在春天时更换羽毛。
所谓一年之计在于春,一日之计在于晨。(后两句还有“一家之计在于和,一生之计在于勤”,出处《增广贤文》)。因为万象更新,就把过去不好的抛开,在新的一年开始,决定目标,创造出新的未来。这就是过年的意义。
《只有神知道的世界》之简介
因为我常常在G+或Twitter上说《只有神知道的世界》是一部非常好看的漫画。因此我姊就叫我介绍介绍它的好看之处。
……
人一生究竟要如何才觉得活得有意义?赚大钱?梦想成真?成为大人物?对本人而言,就是在某些事件上,我们一开始不明白,觉得只是“偶然”,但有一天,突然明白了,这些事件的发生,原来不是偶然,似乎是命运的安排,这种感觉,才让我觉得人生非常有意思。比如我们不明白,为何我们生在这个世上,但有一天,我们明白了这并非偶然,这样我们的人生就有了意义了。或是某天早上,不小心睡迟了,之后早餐的咖啡又倒了,就错过了班机。中午的时候,新闻报告说飞机失事。这种不幸中的大幸,就明白了,早上发生的这一切,并非没有意义的。
……
进入正题。《只有神知道的世界》是述说一个名叫“桂木桂马”的主人公,是个中学的天才型眼镜宅男,一天到晚都玩girl game(非限制级的恋爱游戏)。人生不需要朋友,只要有girl game就够了。一日,收到了一封由“新地狱”而来的讯息,发自于一位名叫“大骷髅”之人,问桂木桂马是否要挑战高难度的恋爱游戏。主人公认为没有他不能破关的恋爱游戏,就选择了“接受”。之后就出现了一位名叫“艾露西”的女恶魔出现,跟他签订契约。桂木桂马就无端端地要接受任务。不接受的话,就会人头落地。
“新地狱”所赋予的任务,就是要填补女孩们的心灵空隙,因而把“游魂”驱逐,并由恶魔(艾露西)逮捕。要填补心灵空隙,桂木桂马只有选择girl game的恋爱方式,即“攻略”,来解决。(虽然有其它的方法)。被解救后的女孩们,对桂木桂马的整个“攻略”过程没有任何记忆。因此桂木桂马可以放心不留下痕迹地进行攻略。
在故事发展到一个阶段之后,发现了某个女生身上的,并非“游魂”,而是“女神”。因此,这个女生(名叫“鲇川天理”)被攻略后,还是保留着桂木桂马攻略时的记忆。之后,那女神就要求桂木桂马将她所有的姐妹都找出来。她的姐妹们,应该就在桂木桂马之前攻略过的某些女生身上。因此,只要有记忆的,那么她们身上,就有“女神”。
漫画到这段时期,就开始越来越刺激了。桂木桂马攻略过好多个女生,这些女生当中,其中五个身上有女神,因此他要重新探索,找出那五个女生。最精彩的是,他分析了之后,他武断地下了一个结论说,五个女生,必定是最接近他的人,都在他的学校,以他自己为girl game的主人公。这时艾露西问他,为什么会这样判断。桂木桂马(好像)说,因为他就是girl game的主人公。
经过了错综复杂地探索,最后聚集了六位女神。故事就进入了下一个阶段。
女神聚集后,就开始了一些诡异的事。之后桂木桂马就被女神们送到十年前的过去。这个时空穿梭,其实是跟过去的桂马意识交换。因此,回到过去的桂马,拥有现在的记忆,但是却是小孩的身体;而现在的桂马,则像小孩一样。同时艾露西也跟他一起穿越时空。但是艾露西则是以全身回到过去的姿态。
没有正确指令的桂马,只好慢慢探索究竟这一切是什么事。这段回到过去的故事,就是精彩中的精彩。后来他发现,他被送回去的目的,就是要制造一个跟他的“现在”一样的未来,就是能够将女神们隐藏着十年,十年后再聚集的未来。所以,他本来的世界,才是理想的世界。因此,他被送回去,就是为了让一切都能归位。若他做错了某件事,就会reset到时空穿梭后的那个“存档”,且这个reset是有限的。
其实这一切,也是那位“大骷髅”的计划。因为在十年前,大骷髅就知道了“古地狱”有个大阴谋。而为了阻止世界灭亡,她(大骷髅是女的)就制造了一个水晶球为媒介。因为未来是不可知的。若说成是平行世界,那么就会有多种未来出现。当那个“理想的未来”出现的时候,那个水晶球就会发生作用,而女神们就会将那个重要的人物和水晶球送回过去。(那时桂木桂马就说,这就好像衔尾蛇一样,不知哪个是因,哪个是果。)
回到过去的桂马,也跟十年前的大骷髅进行了谈话。因此大骷髅也知道了未来究竟发生了什么事。因此,大骷髅也就在十年后(即现在)派了那个万年吊车尾艾露西和桂木桂马组合,并签订契约。
在十年前的过去,桂木桂马其实并没有这十年前的那段记忆,因为他从以前就是girl game痴,除了打game还是打game,所以不奇怪。回到过去,他做了四件事。第一件事,救了大骷髅的“分身”;第二件事,帮助并认识了个有钱有权有势的相貌年轻的老爷子。而第三件事,桂马一个人没有方法解决,只好将所有的事情都写在信件上,交代给他的同学天理。那第四件事,就是在六个他认识的女生(包括天理)做了预备,好让女神们之后寄宿在她们身上。这就是为何,在十年后,女神们正是寄宿在跟他非常接近的女生。
目前的漫画,就暂时到这里。最新的阶段就是,原来那个大骷髅的“分身”后来成为了桂马现在的班主任。而且她能够成为班主任,则是由那个相貌年轻的老爷子的帮忙才能进去学校的。而老爷子十年来其实都只是执行天理所吩咐的罢了。但天理其实也只不过是根据桂马所交代的吩咐罢了。(这里身为读者的我还不清楚,印像中桂马还不知道他的班主任就是那个大骷髅的分身。但记得大骷髅的分身好像有跟桂马说了某些东西。)
以上有些是凭着本人的记忆所描写的。如有不符,请多多见谅。
“父”与“母”
本人觉得,最奇妙的两个字,就是“父”与“母”。“父”,在中文的读音,为fu4,注音ㄈㄨ;“母”,mu3,注音ㄇㄨ。一个的声母为f;另一个声母为m。妙哉。若会读英文的,想必就会联想到了“father”和“mother”这两个字了。若去查看Wiktionary的father和mother这两个字,会发现很多其它的语言,都有类似的发音。
欧洲的语言,如拉丁语中的pater和mater,这也没什么好奇怪的了。希伯来文的“父”与“母”也是类似,אבא (aba) 和 אמא (ama) 。就连梵语(Sanskrit)都有类似的发音。真是妙。
其实,“父”字较多变化,有f、b、p、v、甚至h的声母。而“母”字,则多数是m声母。两者都是接近双唇音。
我不是个语言学家。但是,我反复思考。双唇音(bilabial consonant)或唇齿音(labiodental consonant)因为在于唇形,因此婴儿较容易观察和学习。并且,人是以哺乳喂养婴儿的,因此当婴儿发出m (双唇)声母的音时,往往会联想到要以母乳喂养。正是如此,m则以“母”关联了。
而“父”字,正如我之前所说的,因为是以唇发音,和“母”相似,渐渐地,就与“父”关联了。