第1章 专家系统与量化投资专家系统

1.1 专家系统

很久以前几乎所有的智能都是伴随着生命而存在的,这种传统的智能我们称其为生物智能,后来计算机出现后,人们才开始尝试用电子计算机等人工的方式创造智能,可以说现在的人工智能是与计算机的发展密不可分的,其中计算机之父图灵先生就在第二次世界大战以后出版了《智能型机器》和《电子计算机与智能》两本著作,书中着重讨论了如何用电子计算机来实现智能的问题,从此人工智能的序幕也被正式拉开了,发展到目前如火如荼的强人工智能时代。

早期人们对人工智能并不像我们现在对强人工智能或超级智能这么奢望,人们主要希望人工智能能进行一些诸如问题的求解和模式识别这样简单的工作,后来才开始了自然语言处理、博弈和自动程序设计。

在研究的过程中科学家普遍发现:人们之所以能够成为某个领域的专家,关键就在于他掌握了关于该领域的大量知识,这些知识一部分是从书本上或他人那里学来的,另外一部分是在长期的实践中逐渐积累起来的,正是这些经验才让专家比普通人技高一筹。

那么,我们能不能利用计算机技术把专家的这种优势发挥出来呢?答案是肯定的。专家系统就是这样一种利用计算机存储某个领域的大量知识,并能够有效地利用这些知识去解决问题的系统。

因此,科学家参照人类的逻辑思考过程,创造了以心理过程为主导的逻辑主义(也叫符号主义),逻辑主义特别强调逻辑和推理。而推理则取决于知识。一般来说,人工智能根据解决问题的不同,所需要的知识也是不同的,一般的人工智能解决一般的问题需要一般的知识,专业的人工智能解决专业的问题需要专业的知识。而这种专业的人工智能就是专家系统(另一种是通用专家系统),也正是因为这个原因专家系统才变得与专家密不可分,比如工程设计专家系统、化学专家系统、地质勘探专家系统、农业病虫害专家系统和内科疾病诊断专家系统等。

最早的专家系统主要是使用LISP或Prolog语言设计的,但是实际上任何一个专家系统发展到后来都是一门理论性和实用性很强的交叉学科,它有时候并不追求所谓的“逻辑与智能”,而是更多地强调人机交互。因为专家系统的使用者往往也有很强的专业知识,所以现在的专家系统做的更多的是批处理、大计算的辅助决策工作。

专家系统是人工智能的一个重要分支,目前专家系统经过长达60年的发展已然成为一门非常成熟的技术,广泛地应用于数学、天气、金融、农业、地理、医疗、交通、军事和化学等领域。专家系统的目的就是模拟专家来完成日常工作的全过程,从而实现人人都是专家的梦想。

在专家系统中,专家的知识起到了非常重要的作用,在知识就是力量的今天,专家系统的价值已然等于知识的数量乘以质量,也就是说知识的数量越多,其质量就越高、价值就越大。

专家的知识虽然宝贵,但是缺乏严谨的理论依据,很难保证在各种情况下都适用,所以专家知识只是在一定条件下有效,换句话说就是专业知识适用于专业领域,而不具备科学性。所以,推崇科学教育的近代学校,一般是不会将专家知识作为教科书内容进行讲解的,尽管在实际工作中非常有效,也是如此。

专家知识更多的是一种经验,而经验又都是不确定的,它的发生有一定的概率分布。比如金融(股票投资)专家系统,就是靠概率来获得收益的。

专家系统多种多样,一般都是按照应用领域进行分类的,比如量化投资专家系统就是金融类的,而如果按照用途分类的话,专家系统还可以分为解释型、预测型、诊断型、调试型、规划型、设计型、监督型、控制型和教育型等,其关系图如图1-1所示。

图1-1 专家系统用途关系图

一般气象、军事、人口、交通、财政、经济等属于预测型;图像分析、集成电路分析、染色体分析等属于解释型;医疗诊断、电子仪器失效诊断等属于解释型;辅助教学、聋哑人语言训练等属于教育型。

而我们刚才所说的量化投资专家系统一般都是预测型(尤其是和投资相关的部分)的。一般来讲,预测型的专家系统主要是以似然推理或不精确推理为主的,因为我们所依据的数据会随着时间的变化而变化,而我们的目的则是“能够描述和模拟各种数据随时间变化而变化的情况、各个事件在时间关系上的先后顺序及其所在时间内关联事件时所产生的影响”。

所以,这就要求量化投资专家系统既能够处理不完整的信息,又能够在不确定的未来做出正确的选择。为了更好地实现上述目的,我们通常的做法是一方面利用各种渠道获得有效数据,另一方面注重长远预测与近期预测的相互影响。

虽然每位专家的专注领域不同,但是专家之所以能够成为专家,还是有很多共性的,我们通过计算机技术可以把这种共性结构化,比如股票投资专家系统就是一个把交易员的思想转换成计算机可以理解的代码并执行的过程。

我们通过计算机技术完全可以把交易员常用的数据分解成知识库、行情库、支持库和交易指令库四个部分。

我们通过计算机依据知识库并借助支持库对实时的行情库进行推理,最后根据推理的结果决定是否调用具体的交易指令

专家系统一般包括三个方面,分别是知识库、推理机和解释器。

(1)知识库

知识库是指那些经过验证的真实知识或经验,哪怕你的知识是一个假设,这个假设也必须是真实的,否则不能记录在知识库体系中。比如假设“1+1=2”或“1+1=10”,那么这个假设必须是真实的,所谓的真实就是指在一定条件下要么为真、要么为假,而不能同时既为真又为假,否则即使有一丁点的歧义,后续都将无法进行推理和演绎。

也正是这个原因,知识库里面的知识特别强调一切要从事实出发,而且知识库中至少有一个事实。比如“它是动物”,那么这个知识就要百分之百正确,不能有任何不确定性。

知识库对专家系统的重要性不言而喻,不过知识库干得更多的是体力活的工作,在实际工作中更多的是支持工程师的工作,对于程序员而言,我们接触的很少。

(2)推理机

推理机是什么呢?推理机实际上就是我们对一些事情有自己的理解和判断,是一个判断过程。比如,如果这个动物长羽毛,那么我们判断它是鸟类。我们是怎么知道它是动物而不是植物的呢?因为前面的知识库已经百分之百地告诉了我们它是动物,所以我们才有后面的推理。

其实很多时候,推理机和知识库是相辅相成的,知识库为推理机提供事实依据,推理机推理出来的结论又可以成为新的事实存入知识库。

至于推理的过程,我们可以采用正向推理,也可采用逆向推理,甚至双向推理。一般从事实出发,沿着规则最终得出结论的方法就是正向推理,而从目标出发,沿着规则最终找到事实的方法就是逆向推理。另外,从统计中找出规律,再把规律推广后得出结果叫作归纳推理。不管哪种推理,量化投资专家系统都强调其结果的最优解。

在众多的解中寻找到一个最优解,一般都是多因素构成的,需要考虑这些指标对解的综合影响。一般来讲,最优解可以交给决策者自己来判断,受到最终决策者的主观影响,这个也是专家系统的一个非常重要的地方,就是辅助决策。另外,比较常用的是综合指标法,综合指标法就是把多因素决策换成单因素决策,然后变成雷达图,尤其是在多个专家决策时,可以设置不同的权重进行选择,如图1-2所示。

图1-2 雷达(综合指标)决策图

虽然还有一些非常有趣的推理机,比如那些颠倒语句、偷换概念的诱导性回答,在量化投资专家系统里一般是不用的,或许这些在心理治疗专家系统中才可能看到。

患者:我很难过。

机器人:你为什么难过?

患者:突然感觉很想念他。

机器人:他是谁?

患者:我的一个朋友。

机器人:那么我们说说你的朋友吧。

……

(3)解释器

解释器同样是专家系统不可或缺的一部分。这个系统是给人用的,既然要和人打交道,就要让人们知道怎么用,还要告诉人们是怎样做出这样的结论的。

那么,这种告诉人们系统是怎样推理的过程或与使用者之间的交互过程就是解释器。

正是解释器的这个优点,才让它经久不衰,既让人们知道结果,又让人们知道原因,即知其然并知其所以然。

就拿刚才的例子来说,用户可能会问:“你怎么知道这个动物是鸟类呢?”答:“因为它身上长羽毛,所以它是鸟类。”

但是解释器并不像程序员理解的这么简单,因为很多专家和用户并不都是编程高手,他们可以用自己行业的语言描述清楚,并不表示他就能用计算机语言编写完整。为了解决这个问题,科学家提出了一种面向自然语言的编程语言(也叫第五代编程语言),比如 LISP 和 Prolog,不过真正意义上的第五代编程语言至今为止尚未出现。一般来讲,第一代编程语言是机器语言,面向机器设备;第二代编程语言是汇编语言,面向指令(如Win32汇编);第三代编程语言是高级语言,面向过程(如 C、)或面向对象(如C++);第四代编程语言是框架语言,面向应用(如.NET——以C#为主、面向 Windows 应用程序,TensorFlow——以 Python 为主、面向人工智能, Laravel——以PHP为主、面向Web开发,Hibernate——以Java为主、面向企业应用);第五代编程语言是智能语言,面向自然语言。

自然语言(第五代编程语言)目前制约着专家系统的全面普及并影响人工智能的发展,为了解决这个问题,量化投资专家系统可以尝试从以下几个方面进行突破。

(1)代码高亮和语法提示。

(2)可以使用母语进行一定意义上的编程。

(3)自动语法纠正和源码格式化。

(4)可以人为修改已有函数的映射关系。

(5)拥有与汉语言相似的语法结构。

(6)框架尽量做到可视化编程。

(7)弱类型语言,对变量、大小写甚至语法结构不敏感。

(8)将金融常用的模型算法组件化。

(9)有完备的教程和示例代码。

(10)拥有一个相对完善的社区。

也就是说,我们尽量让计算机自己去完成编程的工作,用户只要表达清楚自己的意图就可以了。至于1和1.00是什么变量类型那不是用户该考虑的问题。

其实,解释器还有一个努力发展的方向就是要求这个语言有学习的功能,不过就目前来看,还有很长一段路要走。

综上所述,专家系统的三大要素如图1-3所示。

图1-3 专家系统的三大要素

前面讲解了专家系统的三大要素,那么真正的专家系统大概是怎样的流程和结构呢?专家系统的三大要素的流程图如图1-4所示。

专家在专家系统中仍然扮演专家的角色,只不过这个专家需要通过人机交互界面让系统理解专家的知识和思想。比如,这是一个量化投资专家系统,那么金融专家就需要通过人机交互界面把一些公式和模型录入到知识库,或者告诉专家系统从哪里导入并抓取值得信赖的知识,这个过程对于金融专家而言可能有些庞杂,所以我们可以找那些既懂计算机编程又懂一些金融知识的工程师来做这件事。

图1-4 专家系统的三大要素的流程图

当金融专家录入知识后,金融用户就可以使用了,金融用户通过人机交互界面与系统的数据库和推理机打交道,所以量化投资专家系统真实的流程图可能如图1-5所示。

图1-5 量化投资专家系统真实的流程图

我们这里举一个例子。比如,一个量化投资专家系统有三个专家,并且三个专家都是炒股高手,但是他们具体的思想有所不同。

专家A认为:当均线出现金叉时买入。

专家B认为:当布林线向上突破80时买入。

专家C认为:当成交量大于100手时买入。

用户在使用专家系统时发现均线出现了金叉,并且布林线向上突破了80,而且成交量大于100手,于是他就兴高采烈地买入了。既然三个专家都说要买入,那就听专家的好了。

但是你会发现,事实上随着专家人数的增加,专家的意见可能相反,或者很难同时满足所有专家提出的条件,怎么办?这时就可以通过给每个专家打分来设置他的权重。

比如,你认为专家 A很重要,给他打60分;专家 B也很好,给他打30分;专家C感觉一般,给他打10分。

这样量化投资专家系统就把海量的用户和众多的专家结合起来了。如果我们把金融专家换成数学专家或化学专家,那么这个专家系统就是数学专家系统或化学专家系统了。

专家系统与传统计算机程序相比优势是很明显的,下面看一下两者的对比,如表1-1所示。

表1-1 专家系统与传统计算机程序对比

讲了这么多专家系统的知识,最后给出一个专家系统发展的大致时间表,供读者参考。

1937年,图灵发表了理想计算机的论文,提出了著名的图灵机原型。

1954年,提出控制规则执行的马尔可夫算法。

1956年,达特茅茨会议,这一年也被称为AI元年。

1957年,提出通用问题求解办法。

1960年,麦卡锡发明了LISP编程语言。

1965年,斯坦福大学的 Feigenbaum和J.Lederberg开发出 DENDRAL (化学专家系统),这是世界上第一个专家系统。

1969年,开发出MACSYMA(数学符号运算专家系统)。

1972年,开发出MYCIN(传染病诊断系统)和矿床探测专家系统。

1974年,出现OPS(人工智能编程语言)。

1975年,明斯基提出了框架知识表示法。

1977年,Feigenbaum等人提出了知识工程的概念,知识工程是人工智能的原理和方法。出现了EMYCIN(医生专家系统)、CLIPS(C语言集成产生式系统)、G2(实时智能专家系统)。

1978年,开发出R1(通用专家系统)。

1979年,开发出Rete算法(模式结构匹配)。

1982年,日本宣布开发第五代机器人(以Prolog为开发语言)。

1983年,开发出KEE(综合多样知识表现与推理方法的专家系统)。

1985年,NASA开发出CLIPS专家系统工具,我国开发了砂姜黑土小麦施肥专家咨询系统(我国第一个农业专家系统)。

1988年,开发出以神经网络为基础的专家系统。

1989年,日本宣布实施人类领域科学计划(第六代计算机)。

1990年,大量专家系统不断涌现,但维护成本居高不下。

2000年以后,专家系统协同办公软件开始全面普及。