大三一个学期又过去了,意味着我进入计算机专业两年多过去了,我的大学生活也过去大半了。回顾自己笔下的文字都很少提及自己专业部分的东西,虽然自己总在做东西,但是由于各种原因没记录下有关自己专业的种种想法以及思考。从大一刚过来,把接触电脑当做登QQ弄自己的文章舞文弄墨的自己,到之后拥有自己第一台电脑,那一个个呆呆的做在电脑旁仅仅因为一个分号,一个小错误,编译通不过有些惶恐的大一生活。那时候,连让电脑做做出一个小小的算术题都能给自己一天的好心情,这是那时候计算机带给我的,但是,说句实话自己的C语言学得确实不好,直到之后的C++让我找到了变成最原始的快乐,还有第一次编程给别人纪念礼物,虽然现在想起来很简单,但是从那个时候开始,我就觉得计算机能给这个世界带来神奇甚至是深入骨髓的改变,也是从那个时候,心中有关计算机带给人们震撼的一个世界,一个属于计算机的世界。到之后的寒假,一个人在家折磨自己电脑的时光,那时候每天开机都可能出现各种情况,比如引导程序丢失,磁盘分区信息丢失等等之内的,有时候一个问题就够我倒腾一天,但是这也让我更加的了解电脑,更确切的说是操作系统这块。
到了大二,编程的事情减少了,我依旧会喜欢自己弄点新意的东西,只因为找些乐趣在这里面,这期间有尝试编解决小游戏的计算方法,虽然以失败告终,但是,路途中的思考是我最大的收获,还有上学期为了支持朋友举办的活动,自己写的第一个小游戏,是我初中最爱玩的猜数字的小游戏,还有就是为了进行问卷调查而编程写的一个问卷调查的小程序,虽然重用性不高,但是,那一个个思考的夜晚,一点点解决问题,和朋友讨论问题,最后合作解决问题,最后做出电子版问卷和配套的统计数据的时光,是我大学不可或缺的记忆。
在暑假有看过一个电影,异次元骇客,说的是片中男主角做出了一套系统,一个完全虚拟的世界,其中所有的人都是大量的代码,那个纯虚拟的世界让我憧憬,觉得那就是计算机能带给人们的最震撼的,最绚丽的东西吧。
但是电影只是电影,这种东西暂时还没有出现在现实的世界里,但我相信这一刻不会需要我们等待很远。我想将其称为Computing Life。这个世界所有一切都是虚拟的,我想,对于房屋建筑之类的,做出来已经没有什么困难了,很多软件都能做出逼真的立体建筑界面。但是对于活体生物来说,他们的行为运动等等方面是很难自动模拟的,这是我们需要努力的。众所周知,计算机处理的信息是离散的,更为具体的讲就是0和1的组合,所以,很多人迷恋的游戏,你们就是与0和1为伍,从C之类的编程语言来讲,对于那些精彩的东西,只不过是对数据的比对,数据的处理过程,最简单的概括是对于类似if,switch,的判断语句和 while以及 for之类的循环语句作斗争了。稍稍的扯远了一些,计算机处理的离散数据,就是无法进行连续的数据的处理。但是,在信号与系统的研究中,给出了连续到离散的转换,我们可以将时间等等连续的内容,根据一定的方式分割成很小的段,进行处理。就时间而言,我们可以隔一小段时间,对需要处理的数据进行一次描述或者取样,那么就将连续域上的数据,变成了计算机可以处理的离散域的数据。如果能够做到将间隔的时间取得很小,那么这样出来的数据,以极限的观点看,就是连续的数据了。
就生物模拟而言,因为人的模拟最为复杂,人的模拟最为典型,就以人为例吧。乍一看,0和1模拟人貌似很容易,性别就0为男,1为女就行了。但是慢着,接下来的模拟就不是那么顺利了,我们再来看看如何模拟现在的女性的男性化风,和男性的女性化风呢?这还不是最重要的,因为显然,增加表示性别类型的位数,就足以能够解决这个问题,比如将00认为纯爷们,01认为有女性化的男性等等之类的。但是,接下来的模拟更为的困难了,模拟人的性格,斯普兰格根据人们不同的价值观,把人的性格分为;理论型、经济型、权力型、社会型、审美型、宗教型。海伦。帕玛根据人们不同的核心价值观和注意力焦点及行为习惯的不同,把人的性格分为九种。称为九型性格,包括:1号完美型、2号助人型、3号成就型、4号艺术型、5号理智型、6疑惑型、7号活跃型、8号领袖型、9号和平型。还有各种对于性格的研究,这些研究影响着我们模拟人们的性格,毕竟如果存在性格分类不彻底,那么会出现重叠,但是不是完全重叠而是部分重叠,那么对于模拟就麻烦了,所以还是像时间一样,分得越细越好。对于分到最后不可分了,我们就可以直接对号入座,有这种性格部分的就该位为1,没有就是0。这里可以看到对人行为影响的基础,如性格、人格潜意识的模拟,需要心理学以及有关学科的进一步研究突破,且更为细致的研究。
除了心理方面的模拟,最令人神往的恐怕就是对于人类记忆的模仿了。电影记忆碎片中说到,我们都需要记忆去知道自己是谁,确实没有记忆,那么模拟出来的男性、女性,各种性格都无法体现,其实我们的记忆有点像计算机的存储系统,我们有深藏的记忆,不会丢失,就像计算机的硬盘上存储的数据,如果你不瞎折腾自己的硬盘,一般硬盘能用很久,但是用久了,读数据的速度就会下降,这就像我们过了很久去回忆一个事情,要花上比记起昨天早上吃的什么早餐的时间还要长的时间去回忆,尽管有时候回忆起来后,会觉得那些事情就好像发生在昨天在刚才。而靠近现在的记忆,比如记起刚过去的事情总是很容易,这就像我们电脑里的内存,在打开的文档里面调出自己想要的东西总是比找到文档然后打开查找要快。其实我们的记忆就可以模拟成分级的存储系统,用一个链表去模拟记忆,不断在链表头部添加新的信息,而链表都是里面的内容都是指针指向该段记忆的地址,而第一级的记忆放在闪存中,然后是硬盘,也就是说,如果某一级系统满了,新的记忆要加进来,那么工程就大了,需要删除这个系统最末尾的记忆内容,或者是下移到第一级别的存储中,这样的话,如果只是知道记忆链表首地址是不够的,因为只是有首地址,那么下移需要从链表的第一个结点,找到这个表的最后一个结点,所以这个工作我们一开始就要做,一开始就要保存最后一个的位置。除了这个小问题之外,还有一个大问题,就是下移记忆的问题,如果下一级的记忆还没有存满的话,这个很好办,把下移的记忆拷贝到下一级的存储介质中就行了,那如果下一级满了的话呢?那么下一级首先需要再次下移记忆内容或者删除,删除很好办,但是再次下移就麻烦了,假设我们的记忆模拟系统做出来有十级,第一级满了,但是要加入新的记忆,而这个时候不仅仅是第一级满了,而是整个十级都满了,那么我们就要从第一级开始发现,一直到第十级,然后开始进行第十级的记忆块删除,删除总是很容易做到的,但是下移就麻烦来了,首先,添加的过程是整个十级记忆系统处理的过程,每下降一级其数据查找处理的能力在之前就说过,是呈下降的,这时候想象我们要下移第九级记忆系统中的某一个记忆模块,而这个模块又很大,那么要花费大量时间下移,这并不是最重要的,最重要是,在对记忆系统处理的过程中,是无法读取记忆的。那这样,变成了一个人记忆了一个新的东西,结果整个人卡死在那长达十几分钟,仅仅是为了处理自己庞大的记忆。这样显然是不行的,所以每一个级别的记忆系统与下一级记忆系统之间应该增加一个缓冲区,用于做下移这个庞大的工作,这样,只有在第一级记忆进行处理的时候,无法读取第一级记忆,而且这样的时间显然是很短的。现在再看看这个记忆,之前就有说过,我们需要记忆去知道我们自己是谁,所以应该存在一些记忆是总能直接可以接触的,它让我们明白我们自己,比如我们的性别,价值观等等之类的东西。而具体还有哪些东西是我们一定要记住的,我想就不是计算机专家需要确定的问题了,而是需要哲学家给出答案的问题了。这里想强调的是需要有些记忆是不能删除的,存在永久性的记忆,这也是我们的生活经验。但是这个处理起来很简单了,只是增加一些开销,增加一个是否为永久性记忆的标志。这样做同时会带来新的问题,如果这些记忆散布在各级记忆中,那么找到链表尾部却发现无法对其删除,但是由于不能删除的记忆一般来说量不是很大,所以可以做成专门的系统,查找记忆的时候,在分级记忆和非删除记忆块中同时查找。最后是记忆更新的问题,我们总是重复一些记忆的话,那么我们对那些记忆的可接触性肯定比别的高,比如你经常编程序,那么对于编程的规则之类的记忆那么就会很清晰,怎么模拟这种清晰呢,就是更新记忆了,每一次查找一个新的记忆需要更新该记忆的位置,至于是前移一个位置呢,还是上移一个系统呢,这就需要更加细化规则,细化情况了。题外话是,这也说明,你经常接触的东西,表现着你自己的内在的东西。
这就是暂时我自己对于一个全模拟系统的一些遐想,希望真的有一天能实现我的Computing Life,那将是一个全新的世界,我还是坚信,计算机是划时代的发明,它也终将给我们最绚烂的最震撼的生活。
computing life相遇问题
在纯虚拟世界里,每个人的存在都是代码的存在,所以在生活中看似很简单的事情,在计算机中模拟起来也极为的困难。首先提出一个问题——相遇问题,即虚拟的两个人相遇的问题,这对于陌生人之间的相遇,根本不是什么问题,表示友好的一个微笑,或者只是一瞥而过就行了。第一个关键点在于,怎么确定对方是陌生人,给每个人做一个记号的想法是很自然的,认识标记为1,不认识标记为1,但是这样需要大量的存储空间用于你与他人的关系存储,因为如果完全模拟的话,现在世界人口约为60亿,那么我们每个人的需要开销60多亿位,仅仅用于处理你与他人的关系,虽然人与人之间的关系是复杂的,但是这样的开销还是让我们无法忍受的。更为简单可行的方法是,建立一个查找表,对一个人所认识的人建立一个查询表,遇到了人就进行查找,但是这些查找不再是简单的对数据位的查找了,这涉及到了当前比较新和热的领域,人脸识别技术之类的,这也和我们平时的习惯相近,我们遇到一个人第一反应是自己问自己,认不认识这个人,而不是去看那个人脸上是否写着我们认识之类的话。建立查询表是很有必要的,同时查询表也需要更新,毕竟很久没见的朋友相认有时候是需要些时间来回忆的,查询表的更新也就可以模拟此点,而在查询表方面的更新又有很多种方案,最为常见的是计数方法进行排列查询表的顺序,访问得越多,那么记忆就越深刻,就越容易想起。但是这样也容易出问题,如果之前你想你的兄弟太多,但是之后你们分隔了,你的女友绝不会想你先想起你的兄弟然后再想起她还没吃早饭,这就是说,会出现有些东西仅仅之前出现的频率高,但之后并没有再出现,那么由于之前的那次却总是高居榜首,这是不公平的。所以出现了移至前端法和转置的更新方法,移至前端法是指每次查询一条消息,查询到即将此消息移动到表首,其他消息后移一个位置,这样做开销很大,因为每次更新很可能要移动半个查询表,而转置的方法是,每次查询到一个消息,只要它不在表首,那么它和它前一个消息交换位置,这样开销很小,且不会出现前面出现的问题。
解决了如何识别他人之后,第二个关键点就自然而然冒出来了,而且比之前那个问题更为困难,这就是见面打招呼,对话的部分。虽然现在有很多人在做语音识别系统,但是语音识别解决的是计算机与真实的人沟通的问题,而在computing life中对话问题就变成了,不只是计算机响应人的问题了,而是可以看成计算机与计算机对话的问题了,更为抽象一点可以看成进程间通信,或者说是各个独立的系统之间的通信,可是这个比通信又更为棘手,需要大量的数据的支持,同时通话的内容也与其他事件有关,比如你不可能在考完英语六级出来与人交谈时高兴得和你即将回家时碰到人打招呼时一样开心,嗯,这仅仅是个玩笑,但是说明说话的内容还与所处的环境有关,而不是一台计算机,对另一台计算机说的话的简单的语音识别可以做到的。首先见面谁先说话取决于性格之类的心理学因素,但是这一点很容易做到,因为打招呼一般是同时进行的,而之后的交谈就取决于相遇的时间、背景了,古人言,察言观色,说的是观察别人的言谈、脸色,揣度其心意,这是计算机很难做到的,需要人脸识别技术做更大的提高,而仅仅是做,人脸图像获取,人脸检测,定位人脸区域,预处理,特征抽取,人脸特征,对比识别一系列的一般性人脸识别了。这需要关于心理学的研究,同时识别的是动态的变化,你不可能等你女朋友或者男朋友哭了很久以后才上去给一个温暖的拥抱,所以在短时间内对动态的变化做出响应是必须的。如此看来,整个相遇问题中,其实最难解决的是computing life中最麻烦的几个基本问题之一,对话问题。
但是换种思维方式,会发现,察言观色就很容易实现了。上面说过,相遇问题抽象点说,就是类似于系统之间通信一样,那么相遇若是熟人的对话问题就可以看做是一段数据交流的过程,言语的交谈是最直接和实在能看到的东西,但是与此同时,个人的表情等等决定交流导向的东西也可以在通信间传输,还是像上面提到的那样,这需要心理学家更为细致的研究,之后将影响人交流的情绪因素设置成数据,那么交谈时的情绪就成了简单的一串0和1的描述,那么这样可以大大减少在人脸识别技术上需要的技术支持难度。
将这些再细化一点,这些关于察言观色的信息传输接收能力又限制于个人的心理性格特征等等,那么这个信息传递过程就可以简单的限制于一下几点,一、相遇人的性格特征;二、相遇地点、周边环境因素;三、相遇时,相遇人的心情状况,个人近况等等。对于需要传输的各个数据进行分组然后处理,这样就可以做到相遇问题的模拟了。当然了,如果只是陌生人的相遇,只要不是一见钟情的那种,其处理起来肯定就更为方便了。