從了解資料背後看AI

這幾年來,好像只要AI或是ML就可以解決很多很多難題,尤其當各大公司,如Google與微軟紛紛推出ML的開源工具,都宣稱只要有它們,你可以輕鬆解決許多過去包含人的辨識或是無人駕駛等等的議題。對於一個年輕時就開始試著了解機器學習的多種架構,也同時經歷過ML這幾十年來的數度浮沈的我來說有點失落。

曾經,我也試著用ML來解決我在訊號分析上的問題,有時算成功,有時失敗。說算成功是因為效果差強人意,也出過論文,但是自己知道跟真的能用還有一段距離。這麼多年來,在訊號上,也開發過非ML的演算法,一般來說,因為是照著數學與訊號原理以及人怎麼解讀訊號來設計演算法,不太會比用ML差。不過,一個小小實驗室的能量畢竟有極限,過去即使花了再多力氣,總是有個天花板無法突破。然後看著這幾年AI/ML再次熱烈登場,一舉把過去學校多年來進步緩慢的領域的效果提昇了不少。剛開始有點驚訝,不過當知道這是用很多層的架構加上巨量資料配合非常大的運算能力才達成,也就不意外了。雖說,過去的類神經網路架構加上前端的Convolution 確實是一個非常不意外且有用的方法。

當紅的不管是語音辨識,臉部辨識與圍棋,在效能的進展上過去幾十年間都有過數度很長一段時間的停滯,但是並不代表過去的研究是無用的,不管有沒有用上所謂的AI。而這些領域,從開始有人提出研究論文以來,無一不是已經歷經了數十年間,無數學者專家投入,已發表的論文我想要以千與萬來計了。中文語音研究的專家台大的李琳山教授,交大的吳毅成教授對電腦棋的成就也是有目共睹。因為對於該領域的資料分析投入多年的研究,對於資料背後的意義多所了解,所以當遇到新的運算工具,很快就可以迎頭趕上。我相信吳毅成教授的團隊在圍棋上應該不輸Google,即使有也應當相距不遠。

當國家要投入AI的建置時,「理所當然」出現了很多AI的專家,因為他們應該都在各個資料領域或是機器學習領域浸淫多年了。我一直不覺得自己是屬於ML領域的,因為對我來說,不管是哪一類的ML架構,我都是拿來用而已,即使,當年我確實是開發了一個特殊的架構與訓練法,試著解決樂器聲學上的一個問題。

所以當有需求開ML的課程時,我很猶豫。要照著過去我教各式各樣ML的演算法的原理以及怎麼發展,怎麼推導與演算嗎?裡面有很多東西要硬著啃才會進入其核心。我一來怕學生會睡著,但是更怕的是,我們到底有沒想清楚我們是想訓練出未來開發出新的機器學習架構的學者或工程師?還是,開一門讓學生知道各類機器學習演算法的基礎以及可以用在哪個地方,剩下的就是怎麼用Google的工具就好嗎?我又怕我舉的例子太過簡單白痴,誤人子弟。

但是,我心中覺得我想帶的課程是從資料取得,篩節,標記,前處理,然後進入機器學習工具,之後的詮釋,以及再改進的過程,而非機器學習本身。也就是我視機器學習為工具,而要解決什麼問題才是核心。而要真正的解決問題,必須從對資料的了解做起。但是這樣子的課,大家認為要用多少時間?多少學分來進行?學生願意熬嗎?

資料這件事說來只有兩個字,其實千頭萬緒。單單是要怎麼取資料,取什麼資料,怎麼標記就是一大問題了。舉語音辨識為例,要不是過去多年眾人建立的龐大語料庫,機器學習再怎麼厲害也沒辦法做得好。而語料庫該怎麼建是植基於過去多年來全球這麼多學者的經驗結晶才完成的,這裡面有太多人類對語言,發聲原理,字詞用法等等的研究了。

所以怎麼建立研究資料的背後是,一個人該怎麼設計實驗,因為有實驗才有辦法產生資料,有了研究資料才有後續的研究,而這些無一不是建立在許許多多的嘗試錯誤才能得來的。在今時今日,恐怕整體過程需要機器學習的部分還佔不到十分之一呢!

舉尖叫實驗室的學生的音樂斷句的研究來說,單單要確認題目方向就花了將近半年了。確定了方向後,要找測試資料,要做資料標記,要讀論文,等到後來發現還是要回頭去讀樂理與曲式分析才有辦法。之後又轉了好多圈,才發現用來當作參考的主要論文裡有一堆問題,然後再回去修正。老實說,這些才是最花時間的。

講到這裡,大家應該很清楚了,所謂的領域知識的建立有多重要。很多時候,我們發現非資工系的學生進來,因為她們的領域知識,往往會有意想不到的成就。而資訊系的學生往往因為深陷其中,領域知識太窄跨不出去,搞到後來,反而失去興趣。

這個狀況在AI/ML領域也類似。只會用這類的AI/ML的人,往往會希望只要改變這些工具的參數就能得到好的結果,所以「憑感覺」調整架構,真的只能靠僥倖。但是一兩次僥倖真的會讓人迷醉而不願醒的,要是基礎的AI/ML的理論不紮實的話,久而久之,隨著年紀漸長,也就變不出花樣了。

能夠真正了解資料,加上領域知識的人,如果加以AI/ML的使用概念訓練加上善於引用存在於網路上的AI/ML工具,反而很容易可以得到好的結果。別看我說的簡單,前面那段可是要花工夫花時間的。

在學校,學生往往希望老師很快跳到可以解決眼前問題的方法,讓他們可以快速得到好的結果。畢竟結果往往等同分數,所以,希望在網路上可以找到人家的解法也就不意外了。這不是現代學生的問題,從以前到現在都一樣。過去,我會借同學的筆記,抄同學的程式,買習題解答等等,也是出於同樣的心理。

但是一路走過來,就會發覺自己的訓練因此而不紮實。因為自己沒有從一開始的混屯與試誤開始做起,年紀一大,要回過頭來補足這方面的經驗,往往是時間與體力都不允許。所以當我看到諸葛亮給兒子的信時,裡面寫著,「怠慢則不能勵精,險躁則不能冶性。年與時馳,意與歲去,遂成枯落,多不接世。悲守窮廬,將復何及!」感慨很深。

所以在這方面的訓練,我會希望學生是自己收集資料,自己做資料整理,藉以解讀資料背後隱藏的意義。試著用當下他們可以想到的所有的方法,不管有多沒效還是需要試,這樣子才會知道那些精實的演算法是怎麼來的。這樣子的訓練次數不用多,因為這不過是一個基礎研發的方法過程,學會了就不會忘了。

我是做應用的,這是我認為對的方式,養成時間較久,但是會了就會了。要做純AI的,那麼道理也類似,相信只是著眼處不同而已。

寫到這裡,我想也該寫一個短篇,用一個相反角度來平衡一下觀點。




留言

這個網誌中的熱門文章

關於專題生

成功大學資訊工程系的特殊選才乙組上機考

讀書心得:你的獨特,我看見