陳凱
蒹葭蒼蒼,白露為霜。所謂伊人,在水一方。
筆者何以突發(fā)雅興,大家且看下面發(fā)生在實(shí)際教學(xué)中的需求。
在人工智能的圖像或聲音識(shí)別任務(wù)中,常會(huì)遇見卷積運(yùn)算的環(huán)節(jié)。所謂卷積運(yùn)算,是將特定的卷積核與卷積區(qū)域進(jìn)行點(diǎn)乘然后取和,從計(jì)算過程上看并不復(fù)雜,而不同卷積核對(duì)圖像特征提取的效果,也可以很直觀地展現(xiàn)出來,網(wǎng)絡(luò)上很容易找到大量的卷積運(yùn)算及特征提取的實(shí)際案例,也可以下載卷積運(yùn)算的代碼,手動(dòng)更改卷積核,并觀察特征提取的效果。
例如,在GitHub上可以找到名為“python-conv2d”的代碼,下載后就能輕松定制卷積核提取圖像特征,圖1和圖2所展示的就是對(duì)圖片進(jìn)行邊緣提取前后的畫面,而圖3則是用來進(jìn)行邊緣提取的卷積核。
卷積核的點(diǎn)乘計(jì)算過程簡單,相關(guān)資料很容易找到,本文不做展開,然而,教學(xué)中可能遇到的一個(gè)大問題,是解釋“何以各種卷積核能達(dá)到特定的特征提取的效果”。這個(gè)問題并不容易回答,因?yàn)樵诮忉屵^程中,必然要回溯到濾波器的概念,進(jìn)而再回溯到與信號(hào)處理相關(guān)的若干數(shù)學(xué)概念。這便讓筆者想起《蒹葭》中的詩句來:
溯洄從之,道阻且長。溯游從之,宛在水中央。
盡管道阻且長,但抱著不懼波折、追根究底的精神,盡可能親自回溯源頭,哪怕是遠(yuǎn)觀佳人綽約風(fēng)姿,總好過道聽途說、人云亦云。本文將要介紹的幾個(gè)小實(shí)驗(yàn),或可成為溯源之舟。
● 簡單的疊加,不簡單的分離
為了能夠更簡單地展現(xiàn)出特征提取的原理,就要先創(chuàng)造出盡可能簡單的數(shù)據(jù)。相較于數(shù)據(jù)量龐大的圖像和聲音,可以試著創(chuàng)建一系列項(xiàng)目數(shù)有限又能展現(xiàn)出波的圖樣的數(shù)據(jù),將數(shù)據(jù)放置在一維的存儲(chǔ)空間中,利用數(shù)據(jù)的變化,來解釋特征提取的意義與方法。這里使用電子表格這種簡單且直觀的工具,創(chuàng)建兩個(gè)頻率不同的正弦波,然后再將兩個(gè)波進(jìn)行疊加。
①使用拖拽功能,在電子表格的第一行生成一個(gè)差值為10的等差數(shù)列,數(shù)列項(xiàng)可以略多一些,如從0、10、20、3一直到720,此數(shù)據(jù)用以反映正弦波在橫軸上角度的變化。
②使用公式“=A1*3.14159/180”,
在第二行拖拽生成對(duì)應(yīng)第一行角度值的弧度值。
③使用公式“=2*SIN(A2)”,在第三行拖拽生成正弦波Y=2*SIN(X)的函數(shù)的值,為敘述方便,稱為正弦波A。以上過程的部分?jǐn)?shù)據(jù)和波形圖如圖4、圖5所示。
④使用與上面類似的方法,生成正弦波B的數(shù)據(jù)和圖像,正弦波B的角度數(shù)據(jù)項(xiàng)差值為60,函數(shù)為Y=SIN(X),也就是說,生成的正弦波B的頻率是正弦波A的6倍,振幅是正弦波A的一半。由于角度數(shù)值的差值比較大,所以這個(gè)正弦波看上去不太平滑,但不影響后續(xù)操作。部分?jǐn)?shù)據(jù)和波形圖如圖6、圖7所示。
⑤使用拖拽功能對(duì)兩個(gè)正弦波相加,得到如圖8所示的部分?jǐn)?shù)據(jù)和如圖9所示的波形,稱為波C,當(dāng)然,這不再是一個(gè)正弦波。
接下來的任務(wù),當(dāng)然就是假裝不知道波C是如何產(chǎn)生的,而要想辦法對(duì)波C進(jìn)行某種操作,使得波C中不同頻率的波形(特征)能重新顯現(xiàn)出來??梢园l(fā)現(xiàn),雖然兩個(gè)波的疊加產(chǎn)生新的波形很容易,但若要將一個(gè)疊加而成的波分離開來,卻麻煩多了。例如,為了讓高頻率的波形(即正弦波B)重新呈現(xiàn)出來,就要過濾掉低頻率的波,反之亦然。可以很容易看出,所謂特征提取,其實(shí)與濾波有關(guān)。因篇幅有限,本文只圍繞高頻信號(hào)的提取,討論相關(guān)教學(xué)策略。
● 簡單的假設(shè),不簡單的過程
想一想,為了實(shí)現(xiàn)高頻信號(hào)提取的任務(wù),可以采用哪些方法?教學(xué)中,不妨鼓勵(lì)學(xué)習(xí)者展開一番頭腦風(fēng)暴。
一個(gè)容易想到的解決思路是:既然當(dāng)前波C是兩個(gè)波的疊加,那么,只要將當(dāng)前的波C減去一個(gè)低頻的平滑的波形,就可以獲得高頻的波B的圖樣了。從直觀上看,這個(gè)低頻的波的形態(tài)大致如下頁圖10中的虛線所示。
雖說大家心知肚明,這個(gè)低頻波的圖樣應(yīng)當(dāng)和Y=2*SIN(X)函數(shù)圖像有關(guān),但這里卻只能繼續(xù)玩假裝不知道的游戲,因?yàn)橐O(shè)法讓計(jì)算機(jī)自己找到能契合圖樣的數(shù)據(jù),而計(jì)算機(jī)當(dāng)前可以利用的,就只有波C的數(shù)據(jù)。
開展頭腦風(fēng)暴所獲得的解決方案可能有:對(duì)鄰近連續(xù)的幾個(gè)數(shù)據(jù)取平均值,或許能獲得一個(gè)低頻的平滑的波X;不停地執(zhí)行將“波峰”削除、“波谷”填滿的操作,或許能獲得一個(gè)低頻的平滑的波X;找出當(dāng)前波的局部最大值和局部最小值,取局部最大值和局部最小值的平均值,利用這些平均值或許可以描畫出一個(gè)低頻的平滑的波X……然后,將波C減去這個(gè)新生成的低頻的波X,觀察能否提取出高頻的信號(hào)。
第一個(gè)方案實(shí)現(xiàn)起來比較簡單,但較難獲得平滑的低頻波形。下頁圖11分別是通過用鄰近5個(gè)數(shù)據(jù)取平均值獲得的低頻波,以及用波形數(shù)據(jù)相減提取出來的高頻波,提取后,高頻的波形形態(tài)較好,但仍然有一定量的低頻信號(hào)混雜其中(宏觀起伏仍較明顯),總體效果尚可。
第二個(gè)方案中,為了削峰填谷,對(duì)每三個(gè)數(shù)據(jù),取左側(cè)和右側(cè)的數(shù)據(jù)計(jì)算平均值,對(duì)獲得的新的數(shù)據(jù)再反復(fù)進(jìn)行迭代操作獲得低頻波。圖12是進(jìn)行四次削峰填谷的迭代操作后,獲得的低頻波和提取出來的高頻波。效果看上去不錯(cuò)。
第三個(gè)方案中,可以在電子表格中使用IF函數(shù),通過比較大小獲得局部最大值和局部最小值,然而麻煩之處是,每兩個(gè)局部最大,或者每兩個(gè)局部最小的數(shù)據(jù),它們中間的數(shù)據(jù)應(yīng)該如何填充?如果按電子表格中容易實(shí)現(xiàn)的方法,按鄰近的局部最大值或局部最小值填充進(jìn)去,獲得的波就不可能是平滑的。操作結(jié)果如圖13所示,特征提取的效果十分勉強(qiáng)。
若是要改進(jìn)方案三,使得低頻信號(hào)變平滑,就要借助如插值、函數(shù)擬合之類的方法。在電子表格中實(shí)現(xiàn)是比較麻煩的。
在教學(xué)中,為了培養(yǎng)學(xué)習(xí)者自主思考和探索的精神,教師應(yīng)鼓勵(lì)學(xué)習(xí)者大膽給出可能的解決方案,并盡力嘗試用當(dāng)前已有的工具,驗(yàn)證在具體的解答過程中,哪些方案更具有可行性,而不是直接將解決方案拋給學(xué)習(xí)者。
● 簡單的表象,不簡單的幕后
在學(xué)習(xí)者充分思考了各種假設(shè),并加以實(shí)施驗(yàn)證之后,教師最后拋出更優(yōu)的方案,才更能促人思考。前文中提到可用取均值的方法來獲得低頻平滑的波,但正如圖11所示,生成的低頻波的圖樣一波三折,不是特別理想。不過,雖有不盡如人意之處,卻能成為進(jìn)一步研究的線索。
之所以采用取均值的方法難以使波形平滑,從直觀上看,是因?yàn)榫植康牟ǚ宀ü冗^于突出,若是在取均值時(shí),能降低突出部分的權(quán)重,加強(qiáng)非突出部分的權(quán)重,或許能使生成的低頻波形的平滑度有所提高。
例如,對(duì)于波形中的5個(gè)數(shù)據(jù),按“=A1*0.25+B1*0.2+C1*0.1+D1*
0.2+E1*0.25”公式獲得C2表格中的數(shù)據(jù)(如下表)。
若當(dāng)前采樣點(diǎn)處于局部波峰或局部波谷處,則公式的作用顯而易見。但如果當(dāng)前采樣點(diǎn)不巧正在局部波峰和局部波谷的中間處,會(huì)不會(huì)反而將波峰和波谷處數(shù)據(jù)放大?對(duì)照波形圖樣計(jì)算一下就會(huì)知道,由于高頻信號(hào)的周期性變化,按每5個(gè)數(shù)據(jù)取值,就算波峰和波谷數(shù)據(jù)同時(shí)被放大,在相加后,波峰處被放大的數(shù)據(jù)也會(huì)和波谷處被放大的數(shù)據(jù)相抵消。
于是,可以用拖拽的方法,每5個(gè)數(shù)據(jù)生成一個(gè)加權(quán)平均值,并按生成的一系列加權(quán)平均值生成波形,該波形圖樣看上去相當(dāng)平滑了(如上頁圖14)。用此波形,對(duì)波C做減法后,得到的高頻波的圖樣也相當(dāng)不錯(cuò)(如圖15)。
到了這一步,大家有沒有想到,既然可以用取加權(quán)平均的方法獲得低頻的波形,那么,能否用同樣的方法,直接把高頻的波形提取出來?試一下就知道果然可以。例如,設(shè)“=A1*(-1)+B1*2+C1*(-1)”這樣的公式,其思路是,將當(dāng)前位置的數(shù)據(jù)權(quán)重加強(qiáng),同時(shí)將當(dāng)前位置兩側(cè)的數(shù)據(jù)權(quán)重減少。雖然說方法十分簡單,但實(shí)施效果之出眾,簡直令人嘆為觀止。部分?jǐn)?shù)據(jù)及波形圖如圖16所示。
仔細(xì)觀察就會(huì)發(fā)現(xiàn),這個(gè)所謂的加權(quán)平均法,其實(shí)就是如假包換的卷積運(yùn)算。這樣一來,就只剩下一個(gè)問題:加權(quán)平均法中的“權(quán)”的取值,究竟應(yīng)該怎么取才最為合理?這個(gè)地方,就立下了一個(gè)未來通往“傅里葉解析”這門課程的路標(biāo)了。但對(duì)于大部分基礎(chǔ)教育階段的學(xué)習(xí)者來說,在人工智能的學(xué)習(xí)中,他們能夠看到路標(biāo)的存在并理解路標(biāo)指向路徑的意義,就算是完成學(xué)習(xí)任務(wù)了。在實(shí)際的特征提取任務(wù)中,通過反復(fù)試錯(cuò),或者團(tuán)隊(duì)暴力搜索,再加上一點(diǎn)推理和空間想象力,要為加權(quán)平均法找出一套合理的權(quán)重值,并不困難,在課堂上,完全可以利用充足的人力,開展一項(xiàng)尋找合理權(quán)重值的挑戰(zhàn)游戲。