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