當今的AI是屬於機器學習(Machine Learning)的一支,基於神經(jīng)網(wǎng)路(Neural Network)的深度學習。現(xiàn)在,很多人想去理解AI電腦(即機器)到底是如何學習的,以便掌握AI技術(shù)熱潮,踏進這項未來10年的主流產(chǎn)業(yè)。
然而,AI機器學習的演算法(Algorithm)又非常依賴於高等數(shù)學的運算式,包括線性、非線性函數(shù)、N維矩陣(Array)、張量(Tensor)、微分導(dǎo)數(shù)、梯度(Gradient)下降、梯度消失等大家很陌生的數(shù)學概念和術(shù)語,這些複雜性大幅阻礙親近AI的機會和途徑。
觀摩一隻老鼠的學習
例如,有一隻老鼠居住在一個房間裡,這房間的只有四個洞可以出入,而洞外常常會有貓咪住在那裡。當老鼠走出洞時,若有貓咪住在洞外,就會受到貓咪的追逐和玩弄,老鼠會害怕、不快活。
最近,老鼠聽說房間外面來了幾隻貓,可能住在洞外,所以可能有些洞外沒有貓,老鼠可以安全地愉快進出,只是老鼠並不清楚到底那些洞外沒有貓。
這個時候,老鼠只好勇敢地試錯,從經(jīng)驗學習中來提升其智慧。一開始,老鼠沒有任何經(jīng)驗和知識來採取最好的抉擇,牠想從任何一個洞出去,幸與不幸的遭遇機會大概各一半,也就是有0.5的機率性不會碰到貓(圖1)。
於是,老鼠就展開行動,首先選擇A洞試試看,小心翼翼地從A洞走出來,發(fā)現(xiàn)有一隻貓追過來,牠(老鼠)被嚇得立刻奔回到洞裡,牠知道自己原來估算的0.5機率值是錯了,就把腦海裡這個機率值調(diào)整為0.0了。牠記下0.0機率值,也就記住了A洞外有貓(圖2)。
重複一樣的行動,繼續(xù)展開探索行動,選擇B洞試試看,小心翼翼地從B洞探出頭來,赫然看到也有一隻貓追撲過來,牠(老鼠)又立刻奔回到洞裡,牠知道對B洞的所估算的0.5機率值也是錯了,就把腦海裡這個機率值調(diào)整為0.0了(圖3)。
再重複一樣的行動,繼續(xù)展開探索行動,選擇C洞試試看,小心翼翼地探出頭來,哈哈,很輕鬆愉快地走出來了。玩一玩之後又安全地回到房間裡了。牠知道自己原來估算的0.5機率值也是不對的,就把腦海裡這個機率值調(diào)整為1.0了(圖4)。
最後一個洞,也想試試看,也展開探索行動,選擇D洞試試看,大膽地走出來,突然有一隻貓衝過來,差一點就被抓了。好險,幸運地逃回洞裡。牠知道自己原來估算(D洞)的0.5機率值是錯的,就把腦海裡這個機率值調(diào)整為0.0了(圖5)。老鼠經(jīng)過4次的探索之後,從經(jīng)驗中學習到智慧,變聰明了。
記錄老鼠的探索選擇及結(jié)果
由於老鼠會擔心過幾天自己忘記了這些經(jīng)驗,所以就想把這些經(jīng)驗寫在紙張上。同時,如果有其他老鼠朋友來訪時,也可以把紙張給朋友們看看,學習一下就可以具有一樣的智慧了,以免好朋友們被貓抓去玩弄了。
第1次探索時,選擇了A洞而沒有選擇B、C和D洞,就以數(shù)學的陣列(Array)來表示之,就表示為:[1,0,0,0]。接著,把第2次的探索經(jīng)驗也記錄下來,以免忘記了。
這次探索選擇了B洞而沒有選擇A、C和D洞,就以數(shù)學的陣列(Array)來表示之,就表示為:[0,1,0,0]。同樣地,也把第3、4次的探索經(jīng)驗也記錄下來。總共寫下了4次的探索經(jīng)驗。如圖6所示。
接著,老鼠發(fā)現(xiàn)到了,這樣的紀錄似乎仍不夠完整,最好把「有沒有看到貓」的實際結(jié)果也記載下來,就更完美了。如下圖7所示。
其實,結(jié)果只有兩種可能:「沒有貓」或是「有貓」。於是,老鼠就拿1與0來代表之。也就是,以1代表成功走出洞外;而0代表看到貓又逃回洞裡。這就包含兩個陣列了,分別是:「探索選擇」陣列與「探索結(jié)果」陣列。並且拿X來表示「探索選擇」陣列;並且拿T來表示「探索結(jié)果」陣列。如圖8所示。於是,就紀錄完整、不必擔心會忘記這些探索的經(jīng)驗了。
老鼠當教練:訓(xùn)練AI機器人
以簡單數(shù)學式,讓機器人表達智慧
話說有一天,老鼠的一位朋友來訪,想在老鼠家(這個房間)居住幾天。這位朋友是華碩公司出產(chǎn)的Zenbo機器人,老鼠知道Zenbo也很怕貓,所以很想把自己的經(jīng)驗迅速傳授給Zenbo機器人。
於是,老鼠就來想一想,如何讓自己成為教練,把自己的探索經(jīng)驗和智慧傳授給Zenbo。而且基於機器人的超快運算能力,只要幾秒鐘的學習,就能得到很好的智慧。如圖9所示,老鼠就進一步思考:如何教導(dǎo)(或訓(xùn)練)這些機器人朋友呢?
於是,老鼠就正式擔任起教練的角色了,讓Zenbo機器人來模擬老鼠的學習和提升智慧的過程。一開始,老鼠沒有任何經(jīng)驗和知識來採取最好的抉擇,牠想從任何一個洞出去,幸與不幸的遭遇機會大慨各一半,也就是有0.5的機率性不會碰到貓。所以,一開始估算各洞的機率值都是0.5。就拿一個簡單的數(shù)學式來表示為:
y = x1*0.5 + x2*0.5 + x3*0.5 + x4*0.5
其中,x1、x2、x3、x4就代表一次探索的選擇,現(xiàn)在就把這數(shù)學式寫入到Zenbo機器人的腦海裡(圖10)。
拿第1筆資料來訓(xùn)練機器人
老鼠第1次探索時選擇了A洞,就是:
[x1, x2, x3, x4] = [1, 0, 0, 0]
而y就代表這次探索的整體估算值,可以估算出這次能順利走出房間的機率值,也就是這隻老鼠的信心度。於是,就把這個陣列值[1,0,0,0]帶入數(shù)學式裡,可以讓機器人來運算(圖11)。
把這個陣列值[1,0,0,0]帶入數(shù)學式裡,經(jīng)過機器人的快速運算,可以算出y值為:0.5。這y值就代表這次探索的整體估算值,也就是這次能順利走出房間的機率值(圖12)。
以上,完成了老鼠智慧的模仿,也成為機器人智慧的表達,就能讓機器人運用智慧來進行估算,以達到三思而後行的效果。
老鼠在房間裡針對其探索的選擇,在還沒有任何經(jīng)驗下,運用其現(xiàn)有智慧來估算後,得出0.5估算值(即猜想有50%是沒有貓)之後,展開行動走出A洞。卻發(fā)現(xiàn)了貓追撲過來,趕快轉(zhuǎn)身奔回洞內(nèi)。
牠回到洞內(nèi),靜下心想了一想,以牠現(xiàn)在所紀錄的智慧,所估算的值0.5與實際值0(即有貓),兩者來比較一下,是很大落差的。機器人也可以模仿及表達如圖13所示。
走出A洞之前的估算值0.5,與走出A洞時得到的實際值0,兩者拿來比較一下,發(fā)現(xiàn)其所依賴的智慧是有待改進的。俗語說:不經(jīng)一事、不長一智。所以老鼠經(jīng)歷了這次的探索之後,牠的智慧就會有所成長了。
那麼,又如何讓機器人來表達其智慧的成長呢?也就是如何調(diào)整上一小節(jié)裡所紀錄的智慧呢?可以來看看估算值和實際值的差距有多大,兩者相減得到-0.5的誤差。接著拿這項誤差值(即-0.5)來修正機器人裡的數(shù)學式(圖14)。

圖14 : 修正數(shù)學式的參數(shù)(權(quán)重) |
|
此時,拿這項誤差值(即-0.5)來與權(quán)重相加,其計算是:-0.5 + 0.5 = 0.0。因此,得到新的權(quán)重是:0.0。如圖15所示。
此時,已經(jīng)修正了數(shù)學式裡的參數(shù),又稱為:權(quán)重(Weight)。修正後,其數(shù)學式變成為:
y = x1*0.0 + x2*0.5 + x3*0.5 + x4*0.5
由於第1次探索時選擇了A洞,就是:
[x1, x2, x3, x4] = [1, 0, 0, 0]
而y就代表這次探索的整體估算值,機器人可以估算出這次能順利走出房間的機率值。於是,就把這個陣列值[1,0,0,0]帶入數(shù)學式裡,如下:
y = x1*0.0 + x2*0.5 + x3*0.5 + x4*0.5
= 1 * 0.0 + 0 * 0.5 + 0 * 0.5 + 0 * 0.5
= 0
所以修正數(shù)學式之後,經(jīng)由運算而得到的估算值是:0。而實際值也是0,非常準確,沒有誤差,這呈現(xiàn)機器人智慧的成長了。
拿第2筆資料來訓(xùn)練機器人
接著,老鼠準備給予Zenbo展開第2筆資料的訓(xùn)練,這次是基於老鼠先前探索B洞的經(jīng)驗記錄,來做為訓(xùn)練資料。於是,把X[]陣列值[0,1,0,0]帶入數(shù)學式裡(圖16)。
![圖16 : 帶入X[]資料,展開第2筆的訓(xùn)練](/art/2018/12/251641143920/P16S.JPG)
圖16 : 帶入X[]資料,展開第2筆的訓(xùn)練 |
|
把這個陣列值[0,1,0,0]帶入數(shù)學式裡,經(jīng)過機器人的快速運算,可以算出y值為:0.5。這y值就代表這次探索的整體估算值,也就是這次能順利走出房間的機率值(圖17)。
依據(jù)老鼠的經(jīng)驗,牠走出B洞之前的估算值0.5,與走出B洞時得到的實際值0,兩者拿來比較一下,發(fā)現(xiàn)其所依賴的智慧是有待改進的。所以老鼠經(jīng)歷了這次的探索之後,牠的智慧就會有所成長了。
那麼,也讓Zenbo機器人的智慧也繼續(xù)成長吧。現(xiàn)在來看看估算值和實際值的差距有多大,兩者相減得到-0.5的誤差。就拿這項誤差值(即-0.5)來修正機器人裡的數(shù)學式(圖18)。

圖18 : 修正數(shù)學式的權(quán)重 |
|
也就是,拿這項誤差值(即-0.5)來與權(quán)重相加,其計算是:-0.5 + 0.5 = 0.0。因此,得到新的權(quán)重是:0.0。如圖19所示。
此時,已經(jīng)修正了數(shù)學式裡的權(quán)重,修正後,其權(quán)重變?yōu)椋?.0。而數(shù)學式也變成為:
y = x1*0.0 + x2*0.0 + x3*0.5 + x4*0.5
由於這是基於老鼠的第2次探索經(jīng)驗,當時選擇了B洞,就是:
[x1, x2, x3, x4] = [0, 1, 0, 0]
而y就代表這次探索的整體估算值,機器人可以估算出這次能順利走出房間的機率值。於是,就把這個陣列值[0,1,0,0]帶入數(shù)學式裡,如下:
y = x1*0.0 + x2*0.0 + x3*0.5 + x4*0.5
= 0 * 0.0 + 1 * 0.0 + 0 * 0.5 + 0 * 0.5 = 0
所以修正數(shù)學式之後,經(jīng)由運算而得到的估算值是:0。而實際值也是0,非常準確,沒有誤差。這呈現(xiàn)了機器人的智慧繼續(xù)成長了。至此,老鼠已經(jīng)對機器人朋友完成第2筆資料的調(diào)教(訓(xùn)練)了。其藉由訓(xùn)練資料來驅(qū)動機器人對其數(shù)學式做修正,讓其估算更加準確。
拿第3筆資料來訓(xùn)練機器人
剛才已經(jīng)展開了2次訓(xùn)練了,依循同樣的過程,老鼠準備給予Zenbo展開第3筆資料的訓(xùn)練,這次是基於老鼠先前探索C洞的經(jīng)驗記錄,來做為訓(xùn)練資料。
依據(jù)老鼠的經(jīng)驗,牠走出C洞之前的估算值0.5,與走出C洞時得到的實際值1,兩者相減得到誤差值:0.5。接著,繼續(xù)拿這項誤差值(即0.5)來修正機器人裡的數(shù)學式。如圖20所示。

圖20 : 修正數(shù)學式的權(quán)重 |
|
也就是,拿這項誤差值(即0.5)來與權(quán)重相加,其計算是:0.5 + 0.5 = 1.0。因此,得到新的權(quán)重是:1.0。
拿第4筆資料來訓(xùn)練機器人
剛才已經(jīng)展開了3次訓(xùn)練了,依循同樣的過程,現(xiàn)在,老鼠準備給予Zenbo展開第4筆資料的訓(xùn)練。依據(jù)老鼠的經(jīng)驗,牠走出D洞之前的估算值0.5,與走出D時得到的實際值0,兩者拿來比較一下,發(fā)現(xiàn)其所依賴的智慧是有待改進的。此時,已經(jīng)修正了數(shù)學式裡的權(quán)重,修正後,其權(quán)重變?yōu)椋?.0。如圖21。

圖21 : 經(jīng)過4筆資料的訓(xùn)練 |
|
至此,老鼠已經(jīng)對機器人朋友完成第4筆資料的調(diào)教(訓(xùn)練)了。
驗證
經(jīng)過4筆資料的訓(xùn)練,其訓(xùn)練後的權(quán)重值,可以表示為:
W = [w1, w2, w3, w4] = [ 0.0, 0.0, 1.0, 0.0]
於是,老鼠就來檢測一下Zenbo機器人的智慧,看看它依據(jù)數(shù)學式而計算出來的估算值,是否與實際值是一致的。
Step-1
首先,老鼠再拿取訓(xùn)練資料X[]和T[],把其中的第1筆: X = [1,0,0,0 ]
交給Zenbo機器人,它立即展開數(shù)學是的計算:
y = x1*w1 + x2*w2 +x3*w3 + x4*w4
= 1*0.0 + 0*0.0 + 0*1.0 + 0*0.0 = 0
得出的估算值是0,它與實際值0是一致的。
Step-2
檢測過了第1筆資料,接著檢驗第2筆: X = [ 0,1,0,0 ]
交給Zenbo機器人,它立即展開數(shù)學是的計算:
y = x1*w1 + x2*w2 +x3*w3 + x4*w4
= 0*0.0 + 1*0.0 + 0*1.0 + 0*0.0 = 0
得出的估算值是0,它與實際值0是一致的。
Step-3
檢測過了第2筆資料,接著檢驗第3筆:X = [ 0,0,1,0 ]
交給Zenbo機器人,它立即展開數(shù)學是的計算:
y = x1*w1 + x2*w2 +x3*w3 + x4*w4
= 0*0.0 + 0*0.0 + 1*1.0 + 0*0.0 = 1.0
得出的估算值是1.0,它與實際值1是一致的。至此,經(jīng)過了檢測,看到Zenbo的智慧已經(jīng)相當不錯了,其估算值都符合訓(xùn)練資料的要求。於是,老鼠教練的初步訓(xùn)練工作就算大功告成了。