2018年3月27日

人工智慧浪潮下的數學教育

魏澤人/任教於國立東華大學,創立花蓮—py社群及實做數學粉專。


在人工智慧(artificial intelligence, AI)的風潮下,數學科普、教育或者甚至數學本身,微妙地陷入一個尷尬的處境;或者應該說,陷入兩個尷尬處境。

馮紐曼曾說,如果人們不相信數學很簡單,
那只是因為他們沒有發現生活有多複雜。
(Wikipedia)

我們曾學過的數學,究竟對人生有什麼幫助?
第一個尷尬點是,數學的實用性變得十分明顯,明顯到令人尷尬。學數學的人,常會聽到人問:「學數學有什麼用?」、「我高中數學都忘光了,還不是活得好好的?」、「工作上好像完全沒用到。」、「我寫程式這麼久了,也沒用到什麼數學。」


當然,內行人都知道數學在科學、技術、工程中,應用十分廣泛。特別在網路時代,網路加密、電腦運算、影像壓縮,甚至網頁和應用程式的自動排版都得用到數學。即使連照片編修這種屬於藝術文化的活動,其中的圖層操作就包含了向量概念,調色盤會看到16進位及顏色轉換的線性變換,更不用說伽馬校正、貝茲曲線、高斯濾鏡、邊界加強、內容感知拉長、內容感知填滿等功能,處處都是微積分與線性變換,最後如果要輸出JPEG,也少不了傅立葉轉換和資訊熵。

生活中沒有數學嗎?只要知道看哪裡,你根本沒辦法不看到,到處都是密密麻麻的數學。高中生所學習的log與三角函數絕對不是徒勞無功,若沒有三角函數及log的幫忙,我們無法像現在這樣隨時都能輕鬆地拿出手機拍照,就算不懂數學,數學也能默默發揮功用。然而,若看不到數學,人們可能會活在一個非常無聊的世界,一個很多東西都看不到的世界、失去顏色跟細節的世界。

寶寶知道數學有用,但寶寶很難說清楚。

「那些聽不見音樂的,認為那些跳舞的人都瘋了的」,在哈利波特的魔法世界中,看不見魔法的人覺得魔法師都是怪胎和瘋子。我們也許像查拉圖斯特拉一樣願意相信一位會跳舞的神,但對於還不能聽到音樂的人來說,我們光在那跳來跳出、跟他說音樂有多好聽,只會被當成瘋子,就像巫師世界不會對看不到魔法的一般群眾推廣魔法的好處一樣。當然,身為數學專業人員,在數學科普推廣方面,情況也不是那麼一籌莫展。我們嘗試了各式各樣的方法與理論,來讓一般大眾了解數學的好處,如邏輯訓練、數學遊戲等等。讀到這裡,應該也大致了解數學專業人員在社交場合及招生推廣方面的一些困境及努力,常常需要像是「無用之用方為大用」這些論點及觀點來循循善誘,說明數學「隱藏」的好處。

勒丘恩:「人工智慧完全是數學。」(Wikipedia)

在這個時代裡,數學能為何所用?
在深度學習及人工智慧成為顯學的今日,情形已經有所不同;原來隱藏的魔法世界就像突然曝光似的,數學的用途變得顯而易見。

電腦工程師們重新拿起統計、微積分及線性代數課本,想要了解現代的人工智慧在玩什麼把戲。現代人工智慧的領軍人物之一勒丘恩(Yann LeCun)說「人工智慧就是數學(artificial intelligence is all about math)」,他給想從深入人工智慧領域大學生的建議是:「如果在『iOS程式設計』及『量子力學』中要選一門課來修的話,選量子力學,且一定要選修微積分一、微積分二、微積分三……、線性代數、機率與統計,和盡可能的多選物理課程。即便如此,最重要的還是要會寫程式。」

大眾能認同數學的實用性和好處,對數學推廣來說,自然是好事;問題是,辦到這件事情的人,不是數學家和數學老師。除了情況有些困窘外,之前大言不慚「無用之用是為大用」之類的講法,相形之下更加空虛寂寞,而數學遊戲、魔術等等親民的方式,相形之下也變得太過可愛,甚至有點多餘。撇開面子層面,更實際問題是,大部分數學老師不見得清楚人工智慧的進展以及數學在其中扮演的角色然而其實有很多地方能跟數學課程連結。另外一個熱門的技術──「區塊鏈(block chain)」也有一堆數學課程內容能夠連結,但並非多半數學教師不熟悉。不過在此我們先把重點放在人工智慧這塊。人工智慧、機器學習、深度學習裡,究竟用到了什麼數學呢?

極值問題與梯度下降法
在深度學習相關的數學中,最先被提到的往往是「梯度下降法(gradient descent)」。梯度,即gradient,簡單來說就是多變數函數的微分,而梯度下降法廣泛用來處理「極值問題」。在深度學習、機器學習中常會設計一個損失函數(loss function),用來評估機器有多接近我們的理想目標。越接近理想的行為,比方說文字與圖片辨識得越準確、下棋下得越好、翻譯得越正確,那損失函數的值就會越小,如此一來只要找到適當的參數,讓損失函數盡量小,那機器就能執行我們希望的行為。

梯度下降法示意圖(圖左)。連鎖法則示意圖(圖右)。
齒輪2的轉速為齒輪1的0.5倍、齒輪1的轉速為齒輪3的3倍,
故齒輪2的轉速為齒輪3的0.5×3=1.5倍。

這個損失函數一定都是數學上能計算的函數,而這就是數學上標準的極值問題,有很多方法來處理。其實不只是機器學習與人工智慧,許多的科學、工程技術、甚至日常生活問題,都能以極值問題的形式出現。舉例來說,當你快樂地計畫著出門旅行,就會碰到好幾個極值問題:在你收拾行李時,想在有限的包包裡塞入最多的物品,就是一個有名的組合極值問題──「背包問題(knapsack problem)」;你想要用最短的路徑、時間來參觀所有景點,又會碰上另外一個有名的組合極值問題──「旅行推銷員問題(traveling salesman problem)」。兩個極值問題都以「困難」聞名,屬於NP完全問題,在某種理論意義上要完整解決這些問題,至少跟破解RSA密碼一樣難(一般相信是比破解RSA更難)。

不過這兩個問題都是「離散」的極值問題,好在深度學習中,我們要處理的損失函數通常是「連續」的。而微積分就是處理「連續」問題的利器。在談到數學有多可怕時,「微積分」常常被拿來扮演虎姑婆或者大野狼這種嚇人的角色。但就像創立現代電腦與博奕論的數學家馮紐曼(John von Neumann)說的:「如果人們不相信數學很簡單,那只是因為他們沒有發現生活有多複雜。」,真要比較的話,出門旅行要比微積分複雜而困難得多,因為「連續」是一種規律,而有規律才可能讓問題變簡單。

連續極值問題中,梯度就是這樣被利用的。在數學上,我們知道梯度是函數值上升最快的方向,而反梯度方向則是下降最快的方向,所以我們只要把「損失函數」對我們想調整的「參數」去微分得到梯度,然後就知道要往哪個方向去調整參數、進而讓損失函數有效地降低。這樣簡單到有點天真的想法,真的有效嗎?在某些假設下,還真的能讓我們找到最好的參數,而深度學習中的損失函數,其實常常不合乎這些假設,就像馮紐曼說的,真實生活比數學複雜,既然沒什麼辦法可言,就閉著眼睛拿梯度下降法來用看看吧!還好,常常也能得到夠好的結果。


在這個基礎上,將原始梯度下降法做了一些改良,調整每次下坡的幅度,就是現今深度學習大量使用的方式。此外,除了梯度下降法這類的一次微分方法外,利用二次微分的牛頓法及用近似二次微分的擬牛頓法也常常用來解決極值問題。在深度學習中,像是圖片畫風轉移,有時也會利用這些方法。

反向傳播算法、合成函數及連鎖法則
梯度下降法的確能有效,但前提是要能將損失函數對參數微分,有時函數比較簡單一點,像是線性迴歸或邏輯迴歸(logistic regression),微分起來還算簡單,但深度學習所用的類神經網路(artificial neural network)就複雜多了。當簡單的模型不足以應付複雜任務時,我們就需要更複雜的網路。數學上處理複雜事物的一種標準作法,就是分而擊之:先將大問題分成幾個小問題,然後各個擊破。比方說數學歸納法就是典型的例子:有無窮多個式子要證明?不要緊,找出規律、一次只處理一個情況即可;線性代數中的基底也是,將複雜的情形分解成有線情形的線性組合;而合成函數是另外一個例子,用簡單的函數組合出複雜的函數。所以在微積分中,我們只要知道基本函數的微分即可。更複雜的函數,只要看成是基本函數的合成函數就行了,藉由連鎖法則(Chain rule),就能把合成函數的微分計算出來,而神經網路也是這樣的概念。邏輯迴歸或者線性迴歸太簡單、不夠用?把這些簡單的函數一層一層合成在一起就變複雜了。而微分呢?交給連鎖法則就行了。看起來問題解決了,但不是都說深度學習神經網路要靠反向傳播算法(Back Propagation)了嗎?怎麼都沒有看到呢?

反向傳播算法基本上就是連鎖法則。啊,又是一個裝潮的時下用語(buzzword)?......【更多內容請閱讀科學月刊第580期】




沒有留言: