深度學習及其在凝態物理上的應用 – 上篇:什麼是深度學習

  • 物理專文
  • 撰文者:皮旭庭
  • 發文日期:2018-12-01
  • 點閱次數:601

機器學習是一個歷史悠久的領域,早在 1950 年代就由英國的計算機科學家圖靈提出了,此後隨著各式各樣模型的提出,機器學習逐漸成為了一個成熟發展的領域。然而在很長的一段時間,這個領域並沒有得到相當的注意,甚至經歷了好幾次的 AI 寒冬[1],一直到 2012 年開始才重新走入公眾的視野,到了 2015 年,AlphaGo 大敗韓國頂尖圍棋高手李世石,機器學習才走入了大爆發的領域。好奇的人可能都很想問,究竟在 2012 年之後發生了什麼事情導致 AI 大爆發呢?

在電腦視覺領域有一個著名的圖片數據集叫做 ImageNet[2],最早是 2009 年由當時在 Princeton 大學的李飛飛等人所建構,這個數據集中現在包含了超過一千四百萬張的圖片,每張圖片上的內容都被人工標註了上面所包含的物體,總計達兩萬多類,是一個相當龐大的數據集。自 2010 年開始,開始由任教於 Stanford 的李飛飛主導,舉辦了ILSVRC大賽。該大賽的主題相當簡單,每次從ImageNet數據集中抽取大約一百萬張影像,共一千種類別,參賽的團隊提出新的演算方法透過電腦來辨識圖片上的內容是否與人工標記的結果相同,準確率高者得名。在此前受限於演算法能力的不足,準確率一直無法有效地提升上來,一直到 2012 年由 U of Toronto 的 G. Hinton 所主導的團隊提出了基於現代深度學習架構的 AlexNet[3],一下子把準確率拉高了十幾個百分點,這一下子才讓機器學習變成了一個火熱的主題,到了 2015 年微軟研究院提出了 ResNet[4] ,機器的影像識別率第一次在 ImageNet 上超越了人類,而推動這此大變革的核心, 便是我們今天的主題:深度學習!


什麼是深度學習


深度學習其實並不是新的領域,最早的雛形在 1950 年代就已經被提出了,只是當時用的是別的名字「人工神經網路」(Artificial Neural Network)。他其實是一種數學結構,透過矩陣相乘以及非線性變換,將一個向量映射成另一個向量的過程。


我們考慮有一個輸入向量 \(X\),我們希望經過一個矩陣操作使它變成 ,那麼我們只需要定義一個矩陣 \(M\),使得 \(M\) 滿足 \(Y=MX\) 這個過程就是一個最簡單的神經網路。然而並不是所有的映射關係都可以透過一個簡單的線性變化來達成的,為了解決非線性的變化,我們必須引入一個非線性的操作 \(f\) 使得非線性的映射變得可能,因此上述的關係可以改成 \(Y=f(MX+B)\)。這裡我們多引入了一個常數向量 主要是為了增加非線性映射的複雜性,多引入一個變數,讓上述的數學操作能夠包含更多樣的映射關係,這就是一個最簡單的神經網路架構了。

在神經網路的術語中,我們把 \(M\) 稱作權重項 (weight),\(B\) 稱作偏置項(bias), \(f\) 稱作激勵函數 (activation function)。講到這裡,可能很多人都糊塗了,上面這些數學公式和機器學習有什麼關係?當然有關係!例如我們有一堆數據,例如圖片,或是聲音訊號,只要我們能夠透過某種合理的手段在盡可能保留所有資訊的情況下,把這些輸入轉換成一個向量,那麼我們就可以問,是否存在一個操作可以將該向量轉換成該輸入所對應到的答案。例如我們把狗編號為 1 ,把貓編號為 2,那麼我們希望找到一個操作,使得當一張狗的圖片作為輸入時,給出 1,當一張貓的照片輸入時給出 2,如果我們能找到這樣的操作,這表示機器「學到」東西了,這就是神經網路最原始的思想。 對數學稍有感覺的人一定會馬上意識到,上述的數學操作可以任意的推廣到無限次的連續操作。例如我們可以定義兩個權重矩陣 \(M1\)  ,  \(M2\) , 兩個偏置項 \(B1\) , \(B2\) , 以及兩個激勵函數 \(f1\) ,  \(f2\) ,那麼我們可以寫下如下的數學表達式: \(Y=f2(M2(f1(M1X+B1))+B2)\) ,而這個過程其實就對應到了一個如同圖一的多層的神經網路操作。

因此如果一次非線性映射做不到的事情,我們就作兩次映射,兩次不行就做三次,多做幾次總是可以把各式各樣複雜的映射給對應出來吧?這是的合理的猜想,然而事情並不如想像中順利。主要的原因是因為,想法雖然有了,卻不知道該怎麼找出這樣的操作。激勵函數 該長什麼樣子?權重矩陣 \(M\) 又該怎麼找出矩陣中的值?在這問題上雖然有過各種嚐試,但最終都以失敗告終,種種問題都讓神經網路這個想法停滯不前。

圖一.png
圖一:神經網路示意圖


 

從神經網路走向深度學習

神經網路第一次獲得了巨大的躍進是在 80 年代,由 U of Toronto 的 Hinton 等人提出了後向傳播之後。 Hinton 等人認為,要得出神經網路中的參數最簡單的方式就是透過計算預測值 \(Y\) 與真實值 \(Y'\) 的差異,然後透過梯度下降法將誤差修正反向傳播回神經網路中,藉此修正神經網路中的參數,達到減少 \(Y\) \(Y'\) 間誤差的目的。經過實驗的結果,這個方法獲得了空前的成功!神經網路果然在許多任務上達到了和傳統的機器學習相當的表現了。然而這樣的成功並沒有因此完成了革命。神經網路的計算量非常巨大,在表現上也並不比傳統的機器學習來的優異到哪裡去,相較於傳統的機器學習能夠使用很少的資源就達成了很不錯的準確率,神經網路仍然談不上是較好的選擇。然而隨著時間的發展,到了 2012 年才真正曙光乍現。2012 年由 Hinton 領導的團隊在 ImageNet 大賽中提出了 AlexNet,在這個神經網路架構中,他們一下子把準確率提升了十幾個百分點,達到了其他所有機器學習模型都無法企及的高度,這才讓神經網路重新復興。之後其他更優秀的 VGG, Inception Net, ResNet 等架構被陸續提出,神經網路達到了前所未有的興盛,這才推動了 AI 革命的到來。而神經網路這種數學架構因而被重新包裝上市,改了一個更拉風的名字:「深度學習」,用來擺脫過往不成功的印象。

那麼回到 2012 年的 AlexNet,到底在這個模型中 Hinton 的團隊做了什麼事情讓神經網路脫胎換骨呢?三件事情:1). 選用了 Relu 作為的激勵函數 2). 使用了 GPU 做計算 3). 使用了 dropout 抑制過擬合。這三件事情基本上奠定了現代深度學習的基礎,下面就讓我們來談談這三件事情到底是什麼。


使用 Relu 做為激勵函數


在本文的一開始我們曾經提到過了激勵函數這個觀念。他基本上就是一個非線性函數,當神經網路透過矩陣乘法從上一層走到這一層時,我們會把計算出來的向量送入這個函數中,主要的目的如同前面所說的,是為了在神經網路入引入非線性的行為。但是這個函數該怎麼選擇,一直很傷腦筋。不過透過觀察生物體內神經的行為,科學家多半選用了 sigmoid 這個函數。

 

圖二.png
圖二:激勵函數:sigmoid以及Relu



這個函數兩個特徵,首先當輸入訊號不夠強的時候,輸出的訊號會接近 0,而當輸入訊號過強的時候,會飽和到 1。這樣的行為非常符合科學家對生物神經的觀察,然而當時科學家並沒有意識到,這樣的激勵函數會造成一個嚴重的問題「梯度消失」。所謂梯度消失指的是當神經網路要透過後向傳播做梯度誤差修正時,因為 sigmoid 這個函數的微分是一個小於 1 的數,所以當誤差在做後向傳播時,多個小於(1)的數相乘,最後的結果會快速的衰減成一個接近 0 的數,這意味著無論我們建構了一個多深的神經網路,其結果都與一個很淺的神經網路無異,我們永遠只能對網路後端的幾層網路參數做修正,網路中段與前段的參數幾乎完全不會改變,自然就嚴重的限制了神經網路的特徵提取能力了。

而在 2012 年的 AlexNet 中,Hinton 等人捨棄了使用 Sigmoid 改用 Relu 作為激勵函數,上述的問題才被解決。Relu 是個很簡單的函數,當輸入小於 0 時,輸出為 0,當輸入大於 0 時,就把輸入的值照常輸出,這函數雖然比 Sigmoid 簡單許多,但是他在大於0的部分的微分卻是一個常數!這意味著當我們在做梯度修正的時候,一定程度上的避開了指數衰減的問題,讓網路可以做得更深,而參數依然可以得到修正,這個做法大大提升了神經網路的能力,成功的讓神經網路走向了「深度」,因此Relu可以說是神經網路走向深度的第一步。


使用GPU來加速計算來加速計算


早期神經網路一個致命的缺點就是運算量過大。神經網路涉及大量的矩陣運算,以及梯度微分,這些需求使得運算變得十分沈重,當數據量一大的時候,要使用神經網路幾乎變得不可能。然而由於 GPU 的發展迅速,加上 nVidia 已經在通用 GPU 計算上耕耘多年,有了 CUDA 這個 GPU 通用計算語言以及多個成熟的函式庫,將神經網路這樣涉及大量矩陣運算的計算移到 GPU 上做加速也就變的水到渠成了。在使用最新的 Intel CPU 與 nVidia 的 GPU 相比較,兩者在進行深度學習的運算上效率可以相差數十倍甚至百倍之譜,如果使用多張 GPU 同時進行運算,更會形成巨大的差距。時至今日,幾乎所有的深度學習訓練都在 GPU 上進行了, Intel 這樣的巨人在 AI 計算領域也只能在後苦苦追趕,AMD雖然同為GPU製造商,但是因為缺乏nVidia早早投入GPU計算的遠見,至今仍難以涉足由CUDA主導的GPU計算市場。可以說深度學習的復興,除了理論上的重大突破之外, nVidia的遠見及其在GPU計算上的大量投資也功不可沒。


使用 drouput 來抑制過擬合


前面我們簡單的描述了神經網路運作的原理。它的核心目標就是盡可能找到一組神經網路參數,使得當你輸入 \(X\) 時,神經網路會輸出 \(Y\),而這個 \(Y\) 跟真實的觀測值 \(Y'\) 要盡可能接近。但即便我們真的能做到這件事情,充其量也只表示我們對已知的數據擬合得很好,並不意味著模型能夠預測未知的數據。簡單的說,如果我餵給模型 100 張狗的照片,模型確實能夠保證對這 100 張狗的照片都給我輸出這是一隻狗的答案,但如果有一張照片,上面也是一隻狗,可是是模型從未見過的狗呢?如果模型不能正確的識別出這是一隻狗,那麼我們無法說模型真的學習到東西了。所以一個模型對於未知的,從來沒讀過的數據是否有預測性,這件事稱作泛化(generalization)。泛化性好的模型,除了對已知的數據能夠有好的擬合之外,對於未知的數據也能夠有好的預測性,而對於那些缺乏泛化性的模型 (對已知數據預測率極高,對未知數據缺乏預測性),則稱為過擬合,意指模型過度的擬合了數據中的噪音,沒有學到普世性的知識。 所以常有人問,機器學習是不是就是數據擬合?當然不是!差別就在於,數據擬合不在乎泛化 性,但是機器學習在乎,而且不只是在乎,這甚至是核心問題。

不過在開始討論 dropout 之前,我們必須先特別提出奥卡姆剃刀法則 (Occam's Razor)。這是一個在哲學上的假設,簡單的說, 如果我有兩個模型都可以對同一件事情描述的很好,那麼我應該挑簡單的那個。所謂的簡單指的就是更少的假設,更少的參數。理由是,如果一個多出的假設卻無法提升模型的準確率,那麼它唯一的功用就只能是破壞這個模型。這當然是一個哲學上的假設,數學上也很難被嚴格證明,但有趣的是在很多情況下這樣的原則都是對的。而早期的神經網路模型恰恰違背了這個法則。早期神經網路的致命傷之一,就是參數過多。前面我們介紹到,神經網路除了有權重矩陣 \(M\) 外,還有偏置項 \(B\),另外還可以有多層結構,這導致神經網路的參數會隨著深度成指數迅速上升,這使得神經網路往往會產生嚴重的過擬合,預測能力有限。雖然科學家並不是完全沒有抑制過擬合的技巧,但總的來說效果都並不好。 Hinton 提出在訓練神經網路時,每次隨機的將一些神經元的輸出設為 0,這相當於在損失函數中引入了隨機性,也破壞了神經元間的共適應性 (co-adaptive),其結果是導致了神經網路有大量的參數自發的變成了 0,大大的提升了模型的泛化性,這也是神經網路能夠大幅超越傳統神經網路的原因之一[5]。後來科學家又陸陸續續提出了許多能夠提升模型泛化性的方法,但總的來說 dropout 還是有著難以取代的地位。


深度學習到底在學什麼?


前面簡單的介紹了深度學習的歷史,多半都是從數學上做了一些定性的描述,但是我想讀者讀到這裡,還是會想問一個問題,到底深度學習如何提取出知識?關於這點實在一言難盡,開一整個學期的課可能也講不完。現在對深度學習為什麼能夠有效的原因主要有兩中觀點,一種是從拓樸幾何的觀點,另一種則是由資訊熵的觀點。關於拓樸幾何的觀點因為要需要展開比較大的論述,從數據在高維空間中分布的流形 (manifold) 討論起,在此我們先按下不表,在後面的文章中我們會提及,這裡我們先從資訊熵的觀點來討論深度學習如何學習。

關於這個觀點,其中一篇代表作便是 2017 年由以色列科學家 Tishby 所提出的資訊瓶頸(information bottlenect) 理論[6]。 在資訊理論中,有所謂交互熵 (mutual entropy) 的概念,細節在這裡我們就略去不提了,簡單的說,當我們將一個訊息 \(X\) 輸入到一個系統中,\(X\) 經過了某些操作變成了 \(Y\),我們可以問,究竟 \(Y\) 中還保留了多少關於 \(X\) 的資訊?而衡量這件事情的物理量便是交互熵。

Tishby 在他的論文中計算了一個神經網路中不同層的輸出究竟包含了多少輸入訊息以及多少輸出訊息。結果他意外的發現,當神經網路剛開始進行訓練時,神經網路會從一無所知走向盡可能記住,或者保留較多的輸入訊息 \(X\) 輸入到一個系統中,對於正確的輸出訊息則一無所知,然而隨著訓練到了中後期,神經網路會開始逐漸遺忘了關於輸入訊息的資訊,只保留能夠給出正確輸出的資訊。

 

圖三.png
圖三: 資訊瓶頸理論的結論。提中x軸對應到輸入資訊的含量,y軸對應到對輸出資訊的含量,顏色的深淺表示訓練的迭代數目,不同的子圖比較了神經網路不同的層數。從圖中可見,當訓練進入後期時,後段的神經層已經幾乎不再保有輸入資訊只含有輸出資訊了。


看到這裡,想必很多人都糊塗了,這是什麼意思?

我們拿個學生準備考試作比方好了,假如你要準備期中考,你會怎麼做?一開始不外乎是拿起書本狂啃、狂背,這個時候的學習偏向記憶,盡可能地記住書上的知識,記住考古題上的答案。然而隨著書越讀越通,開始能舉一反三了,你就不再進行強記了,甚至開始遺忘了書上講的各種細節了,只會記住一些大的觀念、圖像, 還有最核心的知識。這個從什麼都不懂,走到強記最後走向遺忘所有細節只記住核心知識的過程,恰恰正是 Tishby 在神經網路中所觀察到的現象。

講到這裡,你會不會覺得深度學習和人類的學習確實有很多類似之處呢?

既然各位已經對深度學習有了一個粗淺的認識了,在下一篇文章中,我會再往下深入討論深度學習裡面兩個最重要的架構:卷積神經網路 (convolution neural network,簡稱CNN) 以及循環神經網路 (recurrent neural network,簡稱RNN)。

 

參考資料

  1. https://en.wikipedia.org/wiki/AI_winter
  2. http://image-net.org/
  3. Alex Krizhevsky et. al., ImageNet classification with deep convolutional neural networks. Advances in neural information processing systems. 1097-1105, 2012.
  4. K. He et. al., Deep residual learning for image recognition. arXiv 1512.03385, 2015.
  5. N Srivastava et. al., Dropout: a simple way to prevent neural networks from overfitting. Journal of Machine Learning Research 15 1929-1958, 2014.
  6. Ravid Shwartz-Ziv & Naftali Tishby., Opening the black box of deep neural networks via Information arXiv 1703.00810, 2017.