第二章 程序的优化
作者:南非闲人      更新:2017-12-19 12:26      字数:2989

为了更好的训练这个智能程序,王石已经把这个核心挂在聊天程序上好几个月了,程序也确实按照王石的设想那想变得越来越人性化。

现在基本上王石的聊天活动都是由这个程序代劳的,而对方也基本没有看出来,自己在与一个程序在聊天,只是有时候会觉得王石的回复有点弱智,有点惊讶罢了。

虽然程序的表现越来越好,可是王石也有苦恼,那就是越来越大的神经元数据库和越来越慢的反应速度。

虽然一早就料到了程序在成长的过程中,这些问题是迟早会出来的,但是由于成长的速度超出了王石的想象,所以,这些问题就提前到来了。

程序的成长性主要是由可扩展的神经元数据库和外挂的语言库决定的,到现在为止,神经元数据库的条目已经有十几万条了。而语言库则由开始的2兆多不到3兆字节扩展到了2个多G的体积。足足增加了近上千倍。由于核心基本没变,在体积变大的同时,程序的反应速度也就不可避免的开始变得迟钝。

既然出现这样的问题,那么就要把它给解决,这是王石的一贯作风,其实,王石因为早就料到了这个问题,所以王石老早也就准备好了好几套解决方案,最简单的方案就是升级硬件,让计算机的速度加快,但是王石现在还是学生,虽然由于不错的计算机水平,还能接点活赚点外快,但也不是很多。所以这方案基本被否决了。

那么只能从程序优化上作文章了,由于一开始设计的时候,把神经元的工作模式制作成了核心,把神经元构造成了数据库的模式。而且一开始虽然定义了每个神经元的连结数量,按照使用频率的权值进行增减,但是由于开始时库的容量比较小,所以没有启用这个功能,这就导致了这个连接的数目是按照神经元的条数的指数形式进行增长的。因为每个连接都要被处理的,所以最后计算资源全部消耗在这个地方上了。

幸好核心程序一开始就预留了这个功能模块的接口,使得这一步的工作量大大减小。王石大约花了一个下午时间编好了模块,重新编译连接了整个模块,又通过一星期时间的调试。算是完成了这一步,按照王石的估计,这下连接的数目增长方式可能会变成线性增长的方式。因为,对于单个神经元来说,连接的数目最大数是按照使用频率的来确定的,使用频率越高,那么可连接到其它神经元的连接最多的数目也可以更多,这从整体上限制了连接数目暴发式增长的可能性。但是为了消除由于设置这个限制的影响。这就有必要考虑这个连接的取舍问题。若是由于不加考虑的随便取消一个连接,则将会导致整个系统的逻辑混乱和失去稳定定性。

举个例子,比如说,一个人的关系网,一个人上有爸爸妈妈爷爷奶奶,旁边有老婆,下有儿子女儿孙子孙女,还有兄弟姐妹,而且还有工作上的一些关系,而这些人基本上这也有这么一些关系。而这些关系呢,也就有了远近亲疏之分,而所有这些关系里面,对这个人影响最大的,当然就是最亲最近的人了,然后按照亲疏远近的不同,影响力逐渐减小。所以当关系较远的人发生什么事情,基本上影响不到这个人,自然没有这种关系也无所谓,但是关系较近的人发生了这种事情,那么就会发生很大的影响,当突然之间取消掉这个关系的话,那么情况就会发生突然的变化,从而导致关系网的混乱。而王石构造的这个神经网络与此类似。那个影响力大小和亲近程度就代表了那个连结的强度。这个连接的强度是在的训练中不断调整并趋向于稳定的。很显然,假如有一天,要让你选择你只能保留一百个人之间的关系的话,你会怎么选择呢?自然是按照关系的亲近程度来进行选择的。

幸好由于一开始的时候已经考虑了这个问题,所以王石没花多少时间就完成了这个模块的编制,这个模块的首要问题就是将当前的神经元的输出端按连结强度进行排序,取消超额的末尾那些连结。

一开始的时候,系统的限额并不好估计,大了的话,没有达到精简的效果,小了的话,会导致系统的不稳定。最后,王石通过统计现有神经元数据库中的连结分布情况,发现结果是确实存在使用次数与连结数量的之间的关系,使用次数多了,连结数量都比较庞大。王石最后选择一些简单的函数用最小二乘法去拟合后,没花多少功夫就确定了一个反三角的函数可以较好的拟合这些统计结果。

采用这个函数作为确定连结配额的函数,以连结的使用次数作为参数,就能计算出该神经元所能拥有连结数的限制值,这样,当核心执行这条神经元的时候,会不再计算超出限制值以外的连结。因为限额以外的那些连结是无关紧要的。不会对整个系统产生太大的影响。

在这个模块的代码完成后,王石觉得还可以再做一个优化工作,那就是对整个神经元数据库进行排序,按使用的频率来进行,由于整个程序在进行“思考”的时候,很是消耗计算资源,所以这个排序工作就不能在放在核心之中,必须是另做一个线程,而且优先级必须低于这个核心线程。当核心线程执行的时候,它必须无条件的停止,让出计算资源来。

大约花了两个月的时间,程序的优化工作算是完成了。反应速度快了,回答问题的准确性,逻辑性也增加了。以前CPU占用率长时间100%也降下来了。现在平均40%左右上下浮动,也算是暂时解决了王石的当前问题。

这下子,王石基本上把聊天这部分工作扔给了这个程序。因为已经没有人在不知道的情况下还能分辨得出来,与自己聊天的是程序还是人。己经砌底人性化起来了。

而这时,王石的大学生涯也只剩下最后一学期了。由于把所有时间都花在了这个程序上面,王石在其他方面一片苍白。人其貌不扬,性格孤僻,无恋爱史,成绩也就能刚刚过,虽然不少同学都知道他在程序方面水平不错,不过也没听说有什么成果出来,熟悉的一些同学也只知道他在编一个聊天程序。不过呢,那也太简漏了。根本看不上眼。而本身王石的性格也是比较孤僻的,基本上也太多要好的朋友。这也导致了王石也不愿意把这个程序公开出来。王石的直觉觉得这样做是不妥当的。

最后一学期,一般主要任务就是毕业论文或毕业作品,比如象王石他们计算机专业的,既可以写一篇论文,也可以做一个软件。本来,王石想给智能聊天程序做个语音输入输出模块的,不过有一件事情让他改变了主意。