当今的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的智慧已经相当不错了,其估算值都符合训练资料的要求。于是,老鼠教练的初步训练工作就算大功告成了。