謝作如 浙江省溫州中學(xué)
王博倫 上海人工智能實(shí)驗(yàn)室
在2017年時(shí),筆者曾和諸暨的李琦老師一起做過一個(gè)跨學(xué)科學(xué)習(xí)案例,研究用超聲波傳感器來識(shí)別前方障礙物的方向,并且寫了一篇名為《基于距離差的方向跟蹤》的文章(刊登在本刊2017年第7期)。這一研究的原理,是利用三角函數(shù)的知識(shí),通過障礙物和不同傳感器之間的距離來計(jì)算出角度。而根據(jù)超聲波傳感器來測(cè)量障礙物的方向,可以應(yīng)用于無人駕駛、目標(biāo)跟蹤等場(chǎng)景。
近年來,有不少義務(wù)教育階段的創(chuàng)客教師與筆者討論,認(rèn)為文章列舉的案例是很好的學(xué)習(xí)案例,可惜小學(xué)和初中的學(xué)生沒有學(xué)過三角函數(shù),無法進(jìn)行研究。前段時(shí)間復(fù)習(xí)AI知識(shí),想起神經(jīng)網(wǎng)絡(luò)在理論上可以擬合各種曲線,那么,是否可以用一個(gè)深層的神經(jīng)網(wǎng)絡(luò)來模擬這個(gè)計(jì)算公式呢?如果可以,即使學(xué)生沒有學(xué)過三角函數(shù),也能用訓(xùn)練模型的方式來完成障礙物角度的計(jì)算。有了這個(gè)想法后,筆者立刻開始著手驗(yàn)證。
測(cè)量障礙物方向的方法有很多。2017年時(shí)采用的方法是通過距離差,根據(jù)平面幾何原理計(jì)算出被測(cè)物體與觀察者正前方視線的水平夾角。如圖1所示,障礙物和超聲波傳感器1、2形成了一個(gè)三角形,只要測(cè)量出障礙物和超聲波傳感器1、2的距離(D1和D2這兩條邊),就能計(jì)算障礙物和超聲波傳感器之間的中點(diǎn)C的夾角α(即方向)。
從圖1中可以看出,決定夾角α的變量有三個(gè),除了D1和D2,還有兩個(gè)超聲波之間的距離。為了減少數(shù)據(jù)量,可以先固定這一距離,那么此問題就可以轉(zhuǎn)換為一個(gè)典型的數(shù)學(xué)回歸問題:找出兩個(gè)輸入量和一個(gè)輸出量之間的關(guān)系。我們可以用機(jī)器學(xué)習(xí)的方式,借助現(xiàn)有的真實(shí)數(shù)據(jù),訓(xùn)練一個(gè)AI模型來“推測(cè)”出這三個(gè)量之間的關(guān)系。

圖1
現(xiàn)實(shí)中有多種方式采集數(shù)據(jù)。第一種是最真實(shí)的,即在障礙物和中點(diǎn)之間拉一條線,然后讀取兩個(gè)超聲波傳感器的數(shù)據(jù),同時(shí)測(cè)量角度并記錄;或者是拉三條線,因?yàn)槌暡▊鞲衅鞯臄?shù)值和真實(shí)長(zhǎng)度誤差是很小的。
當(dāng)然,因?yàn)檫@一角度是可以用三角函數(shù)計(jì)算的,那么最方便的數(shù)據(jù)采集方式莫過于用Python寫一段代碼,然后將一組數(shù)據(jù)輸出到CSV文件中,或者使用Excel的公式來計(jì)算,再導(dǎo)出關(guān)鍵數(shù)據(jù),如圖2所示。

圖2
除了做實(shí)地測(cè)量外,還有沒有其他簡(jiǎn)便的辦法呢?答案當(dāng)然是有,可以借助geogebra來獲取數(shù)據(jù)。如圖3所示,只要畫出這個(gè)圖,用鼠標(biāo)拖動(dòng)兩個(gè)滾動(dòng)條的圓點(diǎn),即可看到D1和D2,以及角α的數(shù)據(jù)在不斷變化。可以用100條數(shù)據(jù)作為訓(xùn)練集,再用20條作為驗(yàn)證集,這樣就完成了數(shù)據(jù)集的整理工作。

圖3
這里需要強(qiáng)調(diào)一點(diǎn),因?yàn)樽詈筝敵龅慕嵌仁窃?~180之間(真實(shí)情況會(huì)小很多),這和輸入的三組數(shù)據(jù)在數(shù)據(jù)大小上差距較大,容易導(dǎo)致訓(xùn)練時(shí)Loss值不正常,甚至無法收斂,因此最好使用弧度值來訓(xùn)練。通過實(shí)際測(cè)試可知,只要除以18,把數(shù)據(jù)范圍控制在0~10之間,訓(xùn)練時(shí)就很正常。
筆者選擇用BaseNN來搭建神經(jīng)網(wǎng)絡(luò)。BaseNN是神經(jīng)網(wǎng)絡(luò)Python庫,延續(xù)了MMEdu極簡(jiǎn)的訓(xùn)練流程和風(fēng)格,聚焦于基礎(chǔ)原理的探究和模型的快速應(yīng)用。BaseNN類似Keras,只不過底層是Pytorch,初學(xué)者用簡(jiǎn)短的代碼即可搭建出各種網(wǎng)絡(luò)模型,調(diào)整神經(jīng)元的個(gè)數(shù)、層數(shù)、激活方式等。

圖4
筆者準(zhǔn)備用一個(gè)最基礎(chǔ)的全連接神經(jīng)網(wǎng)絡(luò)來解決這一問題。BaseNN的代碼很簡(jiǎn)潔,幾乎類似偽代碼。下面的數(shù)行代碼搭建了一個(gè)三層的神經(jīng)網(wǎng)絡(luò),輸入維度是3(3列數(shù)據(jù)),最后輸出維度是1(1列數(shù)據(jù)),隱藏層是30和6,激活函數(shù)使用ReLU(如下頁圖5)。這里的隱藏層的層數(shù)和寬度僅用于參考,可以根據(jù)具體的情況修改。

圖5
筆者繪制了一個(gè)神經(jīng)網(wǎng)絡(luò)示意圖,由于30層畫起來密密麻麻,所以僅畫出了15層,如圖6所示。

圖6
經(jīng)過多次測(cè)試,200輪訓(xùn)練就能夠得到較好的效果,程序如圖7所示。

圖7
接下來用model.inference函數(shù)進(jìn)行推理,即可得到模型預(yù)測(cè)的結(jié)果,程序如圖8所示。

圖8
為直觀呈現(xiàn)結(jié)果,筆者畫出了一張對(duì)比圖(如圖9),可以看出,預(yù)測(cè)結(jié)果和真實(shí)值幾乎一致。

圖9
本項(xiàng)目訪問地址是https://www.openinnolab.org.cn/pjlab/project?id=639d352b3791ab 1c3aa8b987,“克隆”后即可體驗(yàn)。
通過這一實(shí)驗(yàn),證明了用多層神經(jīng)網(wǎng)絡(luò)果然可以訓(xùn)練出一個(gè)能夠擬合三角函數(shù)曲線的AI模型,能夠根據(jù)距離差來準(zhǔn)確預(yù)測(cè)方向,或者說,驗(yàn)證了“神經(jīng)網(wǎng)絡(luò)能擬合任意曲線”這一結(jié)論。但是有AI專家表示擔(dān)憂:這會(huì)不會(huì)導(dǎo)致神經(jīng)網(wǎng)絡(luò)被濫用,明明可以用三角函數(shù)精確計(jì)算,卻偏偏用神經(jīng)網(wǎng)絡(luò)來擬合?
這一擔(dān)心不無道理。但任何一項(xiàng)新技術(shù)最開始總會(huì)被指責(zé)“濫用”,而之后才會(huì)發(fā)現(xiàn)其實(shí)是常態(tài)。既然神經(jīng)網(wǎng)絡(luò)能夠讓數(shù)學(xué)較差或者沒學(xué)過較復(fù)雜公式的孩子,利用采集數(shù)據(jù)的方式進(jìn)行“粗略計(jì)算”,那么就等同于他們掌握了一種萬能工具,不應(yīng)該以“濫用”的名義進(jìn)行否認(rèn)。
當(dāng)然,真實(shí)世界中還存在很多有關(guān)聯(lián)卻無法用精確的數(shù)學(xué)公式來表示的物理量,這在科學(xué)研究和工程應(yīng)用中經(jīng)常會(huì)遇到。那么,用采集數(shù)據(jù)加上訓(xùn)練模型的方式來“擬合”多種物理量之間的關(guān)系,顯然是一種有效的解決辦法,希望有更多的教師去探索這一領(lǐng)域,讓AI成為學(xué)生開展科創(chuàng)活動(dòng)的好幫手,真正培養(yǎng)他們的數(shù)據(jù)意識(shí)和AI思維。