“希望”可以让人坚持;“绝望”则可以令人改变
人生苦多乐少,但正是因为有“希望”,所以才能够坚持下去。相对的,“绝望”则是完全看不到一丝“希望”。
正是因为有“希望”,才能够坚强地面对一天所受的苦恼,因为明天会更好。但“希望”,要在好的事上,才好;在不好的事上,则一点都不好。比如一个赌徒,正是因为充满赢钱的希望,而不能戒赌。小孩不要把今天的功课做完,因为他想,“还有明天”。
“绝望”,往往是负面的。就像一个破产的人,因为看不到一丝“希望”,不能面对现实,只好自我了断。但是,“绝望”也可以是好的。就像一个男生,知道自己跟所心仪的女生没有希望了,为了渡过一切,只有诚然接受,并改变自己的想法。
有时候,因为希望而执着,反而不好。有时因为绝望而改变,则退一步而有了走另一步的空间。这正是“绝处逢生”。
圣召(God‘s call)
话说少年时期,遇到一个对我神修上有很大启发的一位神父。是非常严厉的神父。
因为跟着益友(益友难求),就参加了生活营,类似避静的那种。参加人数寥寥无几,都是中学生。
神父叫我们自我介绍,并叫我们说出自己的优点或爱好。话说,那个时候还很青涩非常嫩草的我,对自己的存在、人生都还很模糊。说优点,也说不出口;说爱好,也没什么爱好,总不能在那样的生活营里说我喜欢看漫画吧。说才能,也没有什么才能。运动嘛,又没有运动细胞;读书嘛,也平平无奇。高富帅也完全不在我的世界里。
神父当时说,他很开心我们这些年轻人会参加这种小型的生活营。他就告诉了我们什么是“圣召”。他说:圣召其实并非只是指着成为神职人员而言。圣召是指,天主召叫每一个人去做真正属于自己的事,即是天主所安排于每个人的事。因此通常人们都会以去当神父而言。若我们知道这个圣召,我们可以回应这个圣召。回应这圣召的话,我们才会过着充实的生活,在各各方面都会得到成长。但有些人,因某些原因而不愿回应圣召,也许为了钱财,或是其它原因,最后选择了另一种生活或工作,这样的工作叫做career。这样的工作,是没有任何热情的。并在各各方面都不会成长,尤其神修方面。
而要认得我们自己的圣召,就要知道我们自己的兴趣、嗜好等。就是当我们在做某些事的时候,会感觉到力量源源不绝的涌出来。这其中就是我们自身的才能,或叫做“天赋”,一种独特的能力。因为这才能是天赐的,一种恩赐。
话说另一个神父也讲说圣经里的塔冷通的比喻,也就是talentum,也就是talent(天赋)。说每个人都至少有一项天赋。
当时的我,还不知道自身的天赋是什么。但很好的,就是透过这样的生活营的启发,才会不断寻找自己的塔冷通,并建立自己的才能。
庆幸父母是自由派的。只要不是做伤天害理下流低俗浪费人生的事,基本上都不怎么反对。因此我才有机会接触到生活上属于自己的人事物。经过岁月的摧残,人生的历练,终于渐渐地形成自己的才能。当然,才能要成长,那才有趣。如果才能一下就成长到饱和的状态,没有可进步的余地,就没有什么意义了。
身为教育工作者,经常告诉年轻人去做自己喜欢的,且有意义的事。只有那样的事,做了才不会后悔。
(但话又说回来,曾经看过一部漫画,其中一段有个人问主角说,若把自己的爱好变成了事业,那还会否对这个似爱好又似事业的工作充满热情?我忘了其中的答案,不过应该不是很重要。)
后记:人生中往往有时会做出了错误的选择。若能放弃,也许退一步反而让自己有更进一步的空间。但有些错误的选择,却没有后悔的余地。若是如此,只有坦然承受一切后果,弃绝自身的欲念,改变自己的观点,也是成长的过程之一。就用“苦尽甘来”度过人生吧。或往好的方面想:这就是“天命”。
最逍遥的Linux发行版——Arch Linux
本人是Linux的忠实支持者。曾经尝试过Ubuntu、Xubuntu、Linux Mint,到现在的Arch Linux,最爱最满意的就是Arch Linux。
Arch Linux并不适合初学者。因为它需要输入很多指令。但是,只要安装一次,使用者就几乎可以要风得风、要雨得雨。
我称之为“最逍遥”,因为它可以说是最自由,最无形,但又是最快的。最自由是指它随使用者的喜好,可以安装几乎任何的软件包。使用者并不会被限制于开放源代码的软件而已。若AUR(Arch用户软件仓库)中找不到需要的软件,就自己制作软件包,并不是难事。它唯一的哲学就是“简洁”,将一切简单化。
称之为最无形的,因为它安装后,并没有一个正式的桌面环境(Desktop Environment)。由使用者的喜好选择。它不拘泥于任何形式。虽然很多使用者非常讨厌systemd这个Linux的init软件,但Arch Linux也只不过是官方式地使用systemd来让整个操作系统能够完整地运行。若使用者不喜欢,可以自行更换。它不拘泥于任何形式,它可以是用于任何用途的操作系统。
称之为最快,并非指它的运行速度而言,而是指它的软件安装和制作而言。跟其它的Linux发行版相比,如Gentoo、Slackware,它不需要编译(compile),除了AUR的软件包。就算用AUR的软件包,制作的过程也快过其它的发行版,因为用PKGBUILD就好了。它另一个“快",是快在滚动更新(rolling release)。很多软件都是最新的。虽然与Fedora相比,Fedora也许略高一筹,但Fedora的软件包多数是beta版本。若比较它俩的稳定性,我个人认为Arch Linux恰到好处(因为论稳定性,Debian方是最有名的)。
若你喜欢道家思想、逍遥派、自由,就尝试Arch Linux吧。本人认为它才是自由软件的佼佼者。是指自由而言,不是指免费而言的。
机器学习
(这篇是由英文原文翻译的。)
机器学习是本人非常喜欢的学术之一(虽然本人在此项领域并非很深入了解)。当我第一次接触到它的时候,我就非常惊叹,机器是如何能够学习的?若说用电脑来寻找迷宫的出路或是寻找最理想的捷径,我都能理解。因为那是用尝试错误法,就可以找到的。但究竟机器如何能够学习?
机器学习的方法
感知器(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年所开发的。之后才有了非监督式学习。我个人认为,这些开发运算法则的过程,如同人生一样。当我们还是小孩时,我们需要父母及师长们监督我们的学习,好让我们知道什么是对与错。当我们到了理智的年岁时,我们就渐渐地能够自己学习了。这正是非监督式的学习方式。
附言:父母能够辨别双胞胎,正是因为他们过度训练了如何分辨他们。对外人而言,因为少接触,双胞胎几乎是一样的。但父母则天天见面,久而久之,就从中学习了其间微妙的差别。
有形无形
话说,当年年轻的时候,阅读圣经时,读到一段印象非常深刻的章节,即格林多后书4:18
那看得见的,原是暂时的;那看不见的,才是永远的。
那时我就明白了一个道理。所有有形的,都会有消逝的一天;而无形的,才是永恒的。
买了名车,车会坏掉。买了房子,房子会旧掉。电脑、电视、手表、钱包、鞋子、衣服等,都会有坏掉的一天。就连土地都会荒废的一天。太阳近乎永恒,也是会有消逝。更何况是人?人的青春美貌也是短暂的。所有有形的,都会尘归尘、土归土。
那些看不见的,才是永恒的。如爱情和智慧,甚至天主,都是看不见的。
因此,当我读到列王记上,撒罗满求了智慧,就明白了智慧的美妙。并且在圣经中,可以看到多处章节都教人要追求智慧。如约伯传、箴言篇、训道篇、智慧篇、德训篇。这几部经书也是本人的最爱。人拥有了一切物质,却没有智慧,也一无是处。唯有智慧才是王道。
最后,让我引用另一段圣经来结尾。
普世是藉天主的话形成的,看得见的是由看不见的化成的。(希11:3)
一切有形的,都是由无形的而来。
这也是当我学习编写计算机图形(Computer Graphics)应用程序的时候,就感受到了那份莫名的感慨。
爱与恶
有所爱,就必有所恶(wù)。爱恶分明者,即性格鲜明者,亦作有性格之人,或有个性之人。
性格鲜明之人,即有原则之人,因为爱恶分明。爱恶分明,未必是非分明。因为要明辨是非,是用理智;而爱恶主要是出于性情。
性格鲜明之人,如两刃之刀。有利亦有弊。遇到相似之人,一拍即合;遇到相斥之人,一拍即散。因此,遇好则更好;遇坏则更坏。
有所爱恶,人之本性。但因性格鲜明,个性方刚,而不能随波逐流。因不能随波逐流,而无法生存(物竞天择)。因为性格过于鲜明,而有违生存之道。
因此,性格鲜明,个性方刚者,应学会收敛性情,修心养性。人可以有所爱,亦有所恶,但应表达中庸,不该轻易将性格张扬。正如有一技之长者,不可到处张扬。
性格有如人之本领。发挥本领有时(机),如说话亦有时。
因此,见时机而行事方为妙策。
开放源代码(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一样。有那么多的选择,就选个适合自己的。
总结,开放源代码,就是一种自由的艺术。
待人
耶稣的名言,大概就是“爱自己的敌人”了。要爱人如己,还好;要以德报怨,真是很难。
话说当年,我到大学读书时,遇到了很多种人。因为大学是个很有趣的地方。各各地方的人都会齐集而来,所以可以认识到各式各样的人。
那时,有个跟我比较有“共鸣”的朋友,当时虽然我们还未很稔熟,但她待人很不错。
我就对她说:“妳人很好(不像某某),待人都很不错。”
她回应我说:“当然啦。我妈々教我,人家怎样待我(好),我就也要怎样待人。”
在世俗而言,能够做到像她这样子,就可以算很好了。先别说“爱你的敌人”,很多人连对待对自己好的人,都不能予以回报。很多都是吃里扒外、以怨报德、笑里藏刀、暗箭伤人。这些人都不会知恩图报,只会欺善怕恶。
如果遇到类似我朋友那种类型的人,已经是千载能逢的奇遇了。
“爱自己的敌人”的确很难。但对待对自己好的人好一点,应该不会很难吧。