通過我最近接到的問題反饋來看,有不少學員和朋友都對模糊邏輯充滿興趣,希望能對這部分知識有個較好的認識與理解,特安排此文章幫助大家學習。因為模糊邏輯是個比較大的問題,屬於早期的人工智慧三大算法之一(另外兩個是人工神經網絡與進化計算),其內容恐怕連幾百頁的書都裝不下,鑑於此,本篇文章旨在讓大家能夠理解其基本原理,能夠在Houdini中進行基本推理即可,在講解方面我也儘量做到淺顯易懂,儘量迴避枯燥的數學公式(順便說下,以後大家提問最好直接微信,qq的話我一般不會及時看到)。
1965年,加州大學伯克利分校電子工程系主任Lotfi Zadeh教授發表了著名的論文《Fuzzy sets》,後被譽為「模糊邏輯之父」。我們首先來看模糊邏輯的定義:「基於隸屬度而非二值邏輯中清晰隸屬關係的知識表達的一組數學原理」。該定義較為抽象,下面我用大白話做個簡單解釋。在我們的世界中,存在兩種集合,一種是清晰集,一種是模糊集。比如拿考試成績來說,低於60分是不及格,而等於或高於60分是及格,因此60就是區分及格與不及格的明確分界線,所以構成的是清晰集,也就是定義中所指的二值(及格與不及格)邏輯清晰隸屬關係的含義。那麼,非二值邏輯清晰隸屬關係指的就是,區分兩個集合併沒有一個明確的分界線,他們的分界線是含糊不清的。例如:我們現在不用及格與不及格(即60分)來衡量一個人的學習水平,而是改為優、良、中、差來衡量,那麼很明顯,這種衡量方式就是含糊不清的,比如一個人得了69分,說他是中呢,有點不夠格,說他是差呢,只能說是有些差,但又不是特別差,所以這個分數處於中和差之間的某個狀態比較合理,可見它跨越了兩個集合(中和差),並沒有明確的分界線,這就是模糊的隸屬關係。像這樣的例子生活中隨處可見,像如下所列:
人的財富,到底多少算富,多少算窮?
一個西瓜,到底多大算大,多大算小?
學習Houdini,到底掌握到什麼程度才算好,什麼程度算是不好?
由此可見,生活中的實際問題大多都是模糊的,並沒有一個明確的分界線。我用人類語言描述模糊邏輯,相信大家都能理解,但是如何讓計算機去理解呢,所以,我們要藉助一定的數學手段並定量的去表達它,如下圖所示:
上圖橫軸是人的身高,縱軸是隸屬度,隸屬度為0表示絕對是矮的,隸屬度為1表示絕對是高的,現在我們就可用曲線來表達清晰集(有明確分界線)與模糊集(沒有明確分界線),對於模糊集來說,矮與高之間是有個光滑過度的,不過上圖對於身高的描述太過於籠統,我們可以做的更加精確些,把身高分為矮、中、高三個等級,表示曲線如下圖所示:
由此可見,模糊集更加客觀的反映了矮與中、中與高之間的狀態,比上面的清晰集在數據的表達上更加準確,可以進一步的表達人類語言中的程度副詞,例如:比較高,可以定位在180cm到190cm之間的區域,確實高,可以定位在大於190cm的區域。我們可以根據程度的不同,進一步劃分出更多的區域來提高精度(至於區域多少完全由用戶根據具體問題自行設計)。我們可以進一步的用數學語言來表達它,如上圖,可以設橫軸為x,縱軸隸屬度為μ(x),那麼隸屬度μ(x)就是橫軸身高的函數。
模糊集之間是可以相互協作的,這也正是使用最頻繁的三大集合操作,他們分別是:補集、交集、併集,下面分別介紹:
補集是集合的相反操作,設模糊集為A,則其補集可表示為:
A的補集 = 1 - A,如下圖所示:
註:集合操作都有相應的數學符號,但是微信對於符號的編輯比較麻煩,故這裡就不用數學符號來表示相應的操作了,只要理解其含義足矣。
交集是兩個集合重疊的部分,假設有兩個模糊集A和B,則其交集可表示為:A與B的交集 = min(A,B),也可用A and B表示,如下圖所示:
併集是兩個集合疊加起來,假設有兩個模糊集A和B,則其交集可表示為:A與B的併集 = max(A,B),也可用A or B表示,如下圖所示:
除了上述最基本的操作,模糊集之間還有包含關係,以及交換性、結合性、分配性、冪等性、恆等性、自乘性、傳遞性、摩根定律...等性質,但是這些性質一般在構造比較專業、複雜的人工智慧程序中經常用到,而在Houdini中相對來說邏輯都不太複雜,所以很少用到這些性質,這裡就不一一介紹了。(有興趣深入學習的學員或朋友,可以單獨問我)
下面我們再引入模糊規則的概念,所謂模糊規則就是根據人類積累的經驗所做的各種假設,下面通過清晰規則與模糊規則的區別,來幫助大家理解此概念,比如下面這個例子:
if 車速>100
then 剎車距離較長
注:if是如果的意思,then是那麼的意思
上面的if與then就構成了一個非常簡單的規則,對於車速的判斷有個明確的值,因此這個規則屬於清晰規則,而模糊規則是沒有明確值的,只能是個程度上的描述,如:
if 車速很快
then 剎車距離較長
到底車速是多少,算得上很快呢,那可能每個人的見解都不同,因此它是個模糊值,這就是模糊規則。不難發現,其實我們生活中絕大多數規則都是模糊的,因此它比清晰規則更具實際意義。
值得注意的是,if後面的模糊集與then後面的模糊集存在著一定數量上的對應關係,例如:
if 個子很高
then 體重很大
上面的模糊推理是合乎經驗的,除了這個大體上的認識以外,我們還可以將他們放在一起進行比較,來觀察他們的對應關係,從而可以進行定量的分析,如下圖所示:
從圖中不難看出,隨著左圖中身高的不斷增加,對應右圖中的體重也不斷增加,而且他們有著明確的數量上的對應關係,這就為以後的複雜推理提供了依據。一般來說,我們可以從人類專家那裡獲得一些規則,甚至這些規則之間存在著一定矛盾也沒關係,每個規則的輸出都是一個模糊集,但最終的推理結果我們需要的是一個精確值,而不能是個模糊值。例如:通過模糊邏輯的推理,預測一個項目的風險大小,推理結果不能是個「高風險」就敷衍了事,我們通常需要得到一個明確的風險評估值,比如83%的風險,這樣的結果才更具有指導意義。所以,我們還需要將模糊的結果進行清晰表示,這個過程稱為逆模糊化,此過程稍微複雜些,因此下面通過一個完整實例來幫助大家去理解模糊推理的整個過程,一般分為4步:
1、輸入精確值,並將其模糊化
2、根據模糊規則,評估出模糊結果
3、合併各個模糊結果
4、逆模糊化
本例使用模糊推理去評估一個商業項目的風險值,首先從人類以往的經驗中獲得足夠的規則,這裡我們就以三個規則來演示,規則如下:
規則1:
if 項目資金是充足的 or 人員配置是很少的
then 低風險
規則2:
if 項目資金是一般的 and 人員配置是很多的
then 中風險
規則3:
if 項目資金是很少的
then 高風險
我們可以將項目資金分為三個模糊集,分別是:資金充足、資金一般、資金很少。將人員配置分為兩個模糊集,分別是:人員配置多、人員配置少。將風險分為三個模糊集,分別是:低風險、中風險、高風險。除了進行相應的模糊集劃分,還應該根據經驗將這些模糊集進行準確表達,也即用曲線方式表達出來,項目資金的三個模糊集如下圖所示:
註:模糊集曲線可以採用曲線形式,但更多時候取直線即可,因為這樣會為後續的計算帶來方便,而且速度較快,至於曲線的寬度與衰減強度一般由經驗確定
人員配置的兩個模糊集如下圖所示:
風險的三個模糊集如下圖所示:
準備好上述信息後,就可以開始進行模糊推理了。
第1步:輸入精確值,並將其模糊化
先將項目資金的三個模糊集放在一起表示,並給定一個輸入值x1,查看該輸入值與哪些模糊集相交,並獲取交點的隸屬度,即縱軸坐標。同樣地,也將人員配置的兩個模糊集放在一起,並給定一個輸入值y1,查看該輸入值與哪些模糊集相交,並獲取交點隸屬度,具體過程可參見下圖:
圖中:A1表示資金很少,A2表示資金一般,A3表示資金充足。
B1表示人員配置少,B2表示人員配置多。
C1表示低風險,C2表示中風險,C3表示高風險
x1表示資金的精確輸入,y1表示人員配置的精確輸入。
第2步:根據模糊規則,評估出模糊結果
規則1:
if 項目資金是充足的 or 人員配置是很少的
then 低風險
以上規則表示,在給定A3與B1模糊集,且對應輸入值為x1與y1時,得到的是C1模糊集,如下圖所示:
圖中含義很好理解,A3模糊集在取x1輸入時,隸屬度為0,B1模糊集在取y1輸入時,隸屬度為0.1,因為二者是or併集操作,所以最終結果是C1取0.1。
規則2:
if 項目資金是一般的 and 人員配置是很多的
then 中風險
以上規則表示,在給定A2與B2模糊集,且對應輸入值為x1與y1時,得到的是C2模糊集,如下圖所示:
上圖表示,A2模糊集在取x1輸入時,隸屬度為0.2,B2模糊集在取y1輸入時,隸屬度為0.7,因為二者是and交集操作,所以最終結果是C2取0.2。
規則3:
if 項目資金是很少的
then 高風險
以上規則表示,在給定A1模糊集,且對應輸入值為x1時,得到的是C3模糊集,如下圖所示:
上圖表示,A1模糊集在取x1輸入時,隸屬度為0.5,所以最終結果是C3取0.5。至此,我們一共評估出了三個模糊集結果。
第3步:合併各個模糊結果
此步驟非常簡單,僅僅是將上面得到的三個模糊集結果合併起來,合併方式是求併集,如下圖所示:
第4步:逆模糊化
逆模糊化就是將上一步所得到的合併好的模糊集進行清晰化處理,換句話說,就是從這個模糊集中輸出一個明確的數值,該數值的獲取非常明顯,獲取模糊集圖形的重心位置即可,如下圖所示:
上圖中的z1就是整個模糊推理的最終結果,即最終的風險值百分比。不過確定重心還是需要進行一些計算的,通常可以用加權平均值的方法來求,這是物理中求不規則物體質心的標準方法,當然理論物理中是需要積分來求的,但我們這個實例則完全不用,只需做個簡單的離散採樣即可,一般採樣到20基本足矣滿足要求,我們這裡僅採樣10份即可,如下圖所示:
加權平均的計算方法就是:將值(橫軸)與權重(縱軸)對應相乘並累加起來,再去除以權重的總和。具體算式如下:
a = (0+10+20)*0.1+
(30+40+50+60)*0.2+
(70+80+90+100)*0.5
b = 0.1+0.1+0.1+
0.2+0.2+0.2+0.2+
0.5+0.5+0.5+0.5
z1 = a/b = 67.4
至此,根據所給的三個規則,應用模糊邏輯進行推理,所得到的風險大小評估是:67.4%
最後,我們將上述推理過程整理成Houdini的節點,如下圖所示:
一般來說,一個複雜的推理系統,可能需要成百上千的規則,而這些都是需要一定的先驗知識的,所以人類專家的指導作用是至關重要的,當我們搜集的因果關係信息達到一定程度時,則完全可以使用現在更加主流的機器學習方法,因此對於推理系統的建立方法有很多,但是,Houdini只內置了模糊邏輯節點(或函數),所以該方法仍為Houdini用戶的首選!
更多技術請關注