模糊逻辑学习笔记

序言

先说一下为什么会有模糊逻辑这个概念,在我们现实生活中,往往会遇到一些比较让人纠结的问题,比如一个人的IQ90算聪明,60算笨拙,那么一个IQ=89的人算什么呢?如果根据离散逻辑来考虑,那么即使是89,只要没达到90就是笨拙,这在我们人类的理解范围内会感觉很奇怪(正常感性认知),所以在1965年美国数学家L. Zadeh首先提出了Fuzzy集合的概念,目的就是未了解决这种模棱两可的问题。

模糊逻辑介绍

模糊逻辑能使电脑等人工智能按照类似人的思考方式去考虑推理一些类似与“远”“近”,“快”“慢”等具有模糊概念的问题,人们所谓的远近并没有一个绝对的标准,即大于多少就是远,否则就是近,然而机器思考就是按照这样的离散规则,非远即近。通过模糊集合,使得一个变量可能同时属于多个集合,每个集合部分占有这个变量,来将一个具体的离散值给模糊化。这是模糊逻辑的第一步,有了这么一个模糊集合,我们再通过许多不同角度的模糊规则去解释这个集合,是的这个模糊的值计算得到一个确定的值,这个过程叫做去模糊化,也是整个模糊逻辑中最重要的一步

模糊逻辑学习笔记_第1张图片

【模糊集合】
上面我们提到,模糊集合允许一个变量同时属于多个集合,那么对于任意变量A,A属于集合α,β,γ的隶属度可以是不一样的,比如A的20%是属于α,40%是属于β,40%是属于γ。所以我们需要一个具体的方法(函数)来定义要A要怎么隶属于三个不同的集合是很重要的。这些函数的图形可以是任意,但常用的方法是三角形或者梯形。
模糊逻辑学习笔记_第2张图片
比如我们刚刚的那个例子,IQ80-100分内才可能被算作聪明,其中90分被作为聪明的可能性最大,超过100分可能就是天才 范围了(我只是举个例子),所以这里用了个三角形的模糊函数来计算聪明对应不同分数的隶属度。然而实际情况可能是这样多个模糊函数交织在一起,所以我们需要对重叠在一起的部分选择一个合适的算法,来具体计算出89这个值在聪明和平凡两个集合的或集合,与集合中所占有的隶属度。
在这里,我们常用
max{f(平凡),f(聪明)}函数计算89这个值在聪明或平凡这个集合的可能性
min{f(平凡),f(聪明)}函数计算89这个值在聪明与平凡这个集合的可能性
模糊逻辑学习笔记_第3张图片

【模糊语言变量】
也许读到这里有人问了,为什么我能确定IQ70-90可能是平凡的范围,80-100可能是聪明的范围呢?其实这个是根据开发者经验设计的,这也就是模糊逻辑最麻烦的地方。很多概念我们自己都模棱两可,不能给出一个绝对的值,比如有的人认为可能超过IQ70都可以叫聪明了,不同的人对与不同的模糊语言变量有不同的理解。当然,我们在设计一些比较真是的情况下可以去请教相关的专家或者领域权威人物,比如我们在做模拟篮球的语言变量设定的时候,是我们坐在这里自己yy得出的数据准确,还是去请教姚明对呀这方面的感觉准确呢?当然是后者。

【模糊规则】
模糊规则主要是有一组因果推理的逻辑关系表达式,比如如果前提 那么就结果
用猿语表示就是if(条件){执行结果}
模糊规则不同与传统的条件规则的地方是:传统条件推导出的结果是要么是,要么不是,模糊规则推导出的结果是一定程度上是,一定程度上不是。这里的条件可能是一个单个的模糊集合,也可能是像我们上面平凡与聪明这种复合性的集合。前提的隶属度定义的是对这种结果的的隶属程度。一整套模糊逻辑推理系统是由众多这样的模糊推理规则组成的,规则的数目与你在整个系统中模糊变量和隶属集合数目成爆炸增长的关系(因为规则数目=模糊语言变量和隶属集合做笛卡尔积,后面会讲到)

【模糊推理】
Now ,let‘s beginning the inference!
有了丰富的模糊规则,让我们来一起看看要怎么根据每条规则进行模糊推理,从而推导出我们想要的结果。
1. 对于每条规则的前提条件,计算输入数据的隶属度
2. 基于规则中给出的值,确定这条规则计算得到的确定的结果(此时可能得到许多重复的结果,所以我们要进行下一步)
3. 将所有推理结论整合成一个单一的结论,一个模糊集合
4. 将这个得到的模糊集合进行去模糊化,即可得到我们想要的结果
下面我们以一个具体的例子来讲解:
比如一个人的聪明度是有他的IQ和EQ觉定的,那么对呀一个iq=89,eq=89(假设,IQ89对于高的隶属度是0.8,对于低的隶属度是0,EQ89对呀高的隶属度是0.7,对于低的隶属的是0.3)的人是否聪明,我们有如下规则
规则1. 如果iq高 与 eq高 那么聪明
规则2. 如果iq高 与 eq低 那么笨拙
规则3. 如果iq低 与 eq低 那么笨拙
规则4. 如果iq低 与 eq高 那么笨拙
…………
其实就是对枚举每种可能性,或者交对两个不同的模糊变量做笛卡尔积,然后根据其隶属度计算出结果 可能性,如规则1,iq高的隶属度是0.8,eq高的可能性是0.7,由于是与运算,所以我们选用min函数作为模糊函数,所以在这里聪明的可能性是min(0.8,0.7)=0.7,对于规则2,iq高的隶属度是0.8,eq低的隶属度是0.3,所以聪明的可能性是min(0.7,0.3)=0.3,对于规则,聪明的隶属度是min(0,0.7)=0,以此类推
最后我们得到这样一张表

模糊逻辑学习笔记_第4张图片
可以看出,即使对于EQ/IQ都是89的人,他聪明的可能性 0.7,笨拙的可能性是0(MIn(0,0.3,0)),当然我这里仅仅是举例,这样设置模糊语言变量的数值并不合适,实际情况中要复杂的多。
然后根据我们得到的结果裁剪我们预先设置 结果期望模糊变量
模糊逻辑学习笔记_第5张图片
由于这里笨拙的可能性为0,所以修剪后,笨拙的模糊变量为0 了(我承认这个例子举的不好…..)
假设如果这里笨拙和聪明都不为0 的话(假设我们得到的笨拙0.3),我们将得到一张这样的图,将两张裁剪后的模糊变量整合到一个模糊集合里,准备去模糊化。
模糊逻辑学习笔记_第6张图片

【去模糊化】
下一步就是要进行我们 最后一步,去模糊化了,去模糊化就是把一个复合的模糊集合通过一些去模糊函数计算得到一个离散的量,也就是我们想要的聪明/笨拙程度的描述值。去模糊其实就是我们之前模糊的逆过程,这里介绍几种比较常见的方法
1 最大值均值法(MOM)
这是一种最简单,但是却误差很高的方法,远离就是去取模糊集合中隶属度最高的部分的中点期望当做整个结论的期望。由于实际使用较少,所以这里不多做说明
2. 中心法
中心法是一种最为准确,但却也是最为复杂的 一种方法,其原理就是对不同的期望值进行采样平均处理,计算每个样点对于总体的隶属度的贡献之和,比如我对(10,20.30.40……100)每10期望进行一次采样,计算采样点的期望和,再除以样本的隶属度之和。
在中心法中,取的样本密度越大,其准确性越大。
模糊逻辑学习笔记_第7张图片
3. 最大值平均法(MAXAV)
这是一种综合前两种方法得到的一种折中算法,其结果准确的近似与中心法,且其运算复杂性要远低于中心法。一个模糊集合的最大值或代表值应该是一个这样的值,比如三角形模糊函数的正中点,或者梯形函数的上边,对于三角形函数,其最大期望平均值就是其正中点,对于梯形函数其最大期望平均值为上边的中点。这样计算即避免了中心法大量采样的性能消耗问题,也在一定程度上贴近了中心法的计算结果。
模糊逻辑学习笔记_第8张图片
最终,不管我们选那种方法,做到这里们都得到了我们用来描述聪明-笨拙程度的数值或者从智能决策的角度考虑就是某种事情发生-不发生的可能性。
【模糊规则的优化】
好了,到目前为止我们已经介绍了模糊逻辑的整个流程和基本概念,相信很多读者读到这里和我都有同样的疑问,现在我们前面IQ/EQ的例子只有两个条件模糊变量即(IQ/EQ),且每个变量只有两个集合(高低,因为前面我为了说明模糊规则,选择了简单的例子),所在这里短短只有四条模糊规则,然而,实际使用中,我们的模糊变量和模糊集合都不只2个,而且随着我们变量和集合的增多,其规则的数量更是指数倍的增长,所以我们有没有其他方法可以优化模糊规则的数量呢?还真的有–库伯方法
先让我们来看看库伯法与传统方法的优势,我们假设每个变量有5个模糊集合模糊逻辑学习笔记_第9张图片
从表格上来看,当模糊变量数量很多的时候,库伯法比起传统方法有巨大的优势。那我们现在来讲讲什么是库伯法。
[p^q]->r 可以转换为 [p->r或q->r]
这就是库伯法的精髓,将一条复杂的规则,分解为多个规则的或运算。
这样在定义规则的时候就可以只定义最简单的规则,通过最简单的方法的或运算来避免枚举冗长的且运算,从而简化我们的模糊规则。

然而库伯法也有一定的缺陷,在复杂的模糊变量和模糊集合环境下,可能会导致设计者你逻辑混乱且不利于修改模糊规则。

【总结】
OK,到这里我们的模糊逻辑讲解基本上就是完结了,撒花撒花~~~~
其实模糊逻辑这个算法并不是一种对精准度要求高的算法,这只是一种以拟人为核心的思维方式,本来很多定义我们人类自己都不明确,我们更没办法让机器去帮我们分析明确,所以这种思想并不适用与机器学习这些对精准度要求苛刻的领域,相反,更适合于仿真,拟合等领域。

> 参考文章:游戏人工智能编程精粹 作者[美] Mat Buckland 著;罗岱 等 译

你可能感兴趣的:(AI,学习笔记)