模糊逻辑严格意义上来说与之前讲的机器学习没有什么太大的关系,但是对于人工智能AI来说,我认为是一个非常重要的概念。所以这篇文章就来讲讲什么是模糊逻辑,以及模糊逻辑的应用。
1. 经典的布尔逻辑
布尔数值就是0和1,是和非,也是计算机逻辑的基础,其基本运算就是"与、或、非",体现在编程中就是“If .... then...”,这个相信大家都很熟悉了,我们大部分的自动化程序就是用布尔逻辑设计的。
布尔逻辑赋予计算机自动判断和决策的能力,但是却并不完美,甚至限制了计算机的能力,因为人类判断和决策往往没那么简单。比如布尔逻辑能够很好处理那种是非很清晰的场景,比如用电脑可以轻松编写“如果下雨就提醒我出门带伞“”这样的程序,因为下不下雨是一个清晰的是非逻辑。
然而人在实际决定带不带伞出门时常是考虑雨的大小,雨会下多久。那多大的雨算大雨需要带伞,多小的雨算小雨不用带伞呢?对于人类的决策来说往往没有一个清晰的雨量的门槛。
模糊逻辑就是用来解决这样的分类和决策难题的。
2. 隶属度(Degree of Membership)
在模糊逻辑的眼中,大雨,小雨,和中雨之间是没有严格的界限的,也就是说某一种雨量的大小并不完全归属于某一个类,而是以隶属度来衡量的。比如对于10mm降雨,隶属于小雨的隶属度为0.5, 中雨的隶属度为0.4,大雨的隶属度为0.1,100mm降雨小雨的隶属度为0, 中雨的隶属度为0.3,大雨的隶属度为0.7。
将逻辑的输入数值(降雨量)转化成各个集合(小雨,中雨,大雨)的隶属度的过程就叫做Fuzzification。 也是模糊逻辑的第一步。
3. Fuzzyfication(模糊化)
如何确定输入数值与隶属度的关系呢,这就要用到隶属度函数。通常可以用下图这种方式表示。
上图是考试分数和学生成绩的隶属度关系。 比如考0分,Poor的隶属度为1,Avg. 和Good为0。 考试为32.5分(红黑交叉点),Poor的隶属度为0.5,Avg.为0.5, Good为0。 在任意一点都能找到其所对应的集合的隶属度。
4. 模糊逻辑的“与,或,非”运算
模糊逻辑的运算实际上就是模糊逻辑中分解出的各个隶属度的运算。我们将逻辑的两个输入定义为A,B,输出为C(A与B -> C),举个例子,A = Poor: 0.5(Poor的隶属为0.5 )B = Good:0.2, 那么C= A与B是多少呢?
其实有好多计算C的方法,这里介绍一个最简单的“最小隶属法(MAX implication)”,于是 C=A与B中最小那个(0.2)。于是C= Good: 0.2.
那D = A或B怎么计算呢?还是介绍一个最简单的“最大隶属法(MIN implication)”,即 C=A或B中最大的那个(0.5)。 于是D= Poor: 0.5
"非"的运算就更简单了,直接如下图所示取相反的折线就完了。
5. 模糊逻辑的决策规则(Rule Base)
将输入模糊化了之后,需要通过规则,和模糊逻辑的运算来重新组合。下面我们通过一个实例来介绍一下什么是模糊逻辑的规则。
你要编写一个程序来给自己分配食物,食物的多少由你饥饿的程度(Hunger)和事物的味道(Taste)共同决定的,两者分别有少、中、多(S, M, L)三个集合
如下图,表格为规则,隶属度函数在表格下面,Taste 和 Hunger 的取值为了方便起见,分别设为5.625和5。因此模糊化之后 Taste(S)=0:Taste(M)=0.75,Taste(L)=0.25, Hunger(S)=0, Hunger(M)=5, Hunger(L)=0。规则就是比如:Taste(M)与Hunger(M)输出M,Hunger(M)与Taste(L)输出L。
可见除了规则表中标记成红色和绿色的部分,其他的输出都为0。
表中:
- 红色M是Taste(M)与Hunger(M)的输出结果可以用最小法则Min(1, 0.75)=0.75
- 绿色L是Taste(L)与Hunger(M)的输出结果可以用最小法则Min(1, 0)=0。
同样的如果Taste和Hunger分别取5.625和4.375,如图会有下面结果
表中:
- 红色S是Taste(M)与Hunger(S)的输出结果可以用最小法则Min(0.75, 0.25)=0.25
- 绿色M是Taste(M)与Hunger(M)的输出结果可以用最小法则Min(0.75, 0.75)=0.75
- 黄色M是Taste(L)与Hunger(S)的输出结果可以用最小法则Min(0.25, 0.25)=0.25
- 紫色L是Taste(L)与Hunger(M)的输出结果可以用最小法则Min(0.25, 0.75)=0.25
- 其他输出为0。
这些输出我们在模糊逻辑中定义为Fire Strength(FS)。
6. 去模糊化(De-fuzzyfication)
模糊逻辑通过模糊化将输入的数值转化成各个集合的隶属度之后,再通过规则和运算可以得到若干个FS。这些FS并不能为我们解决实际问题。以之前分配事物的为例,我们想知道给出任意两个输入值(Taste 和 Hunger)能输出一个确定的数值,这时我们就要用去模糊化来得到这个输出值了。
去模糊化有很多方法,这里我同样只介绍一个简单和应用广泛的方法:加权平均判决法
其中FS就是上一步输出的Fire Strength, OW (Output Wight)是权重。权重通常是取每个集合的中间值,分配食物的例子OW(S)=2.5, OW(M)=5, OW(L)=7.5。
如果Taste = 5.625, Hunger = 4.375
FS1(S)=0.25, FS2(M)=0.75, FS3(M)=0.25, FS4(L)=0.25.
用上面的公式可以求得
Output = (0.252.5+0.755+0.255+0.257.5)/(0.25+0.75+0.25+0.25)=5
尾声
模糊逻辑就介绍完了,是不是非常简单。模糊逻辑已经广泛应用在电冰箱,电饭锅等家电设备的自动控制,同时还广泛运用在了游戏的开发中了。