(文科友善)深度學習與梯度下降

王柏鈞
5 min readMar 13, 2020

--

認識AI小說系列03 FableLearningTest

AI與深度學習

一般我們說的AI,指的都是機器學習,而機器學習裡面有一個叫做深度學習的技術。深度學習是現在最火紅的AI技術。技術原理如下:

「深度學習是用許多神經元來進行決策,並將神經元分層排列,好讓神經元的決策能影響下一層的神經元,直到最後我們用輸出層的神經元來把我們的決策輸出出去。」

但上面的論調看很多次了吧?我們今天換個說法。超直白地來說。

深度學習與下樓梯

深度學習就像是一個試圖蒙眼下樓梯的遊戲,一開始我們會隨機的生成在樓梯的某一個位置,然後開始試圖往下走。而且在到達終點之前,我們是蒙著眼睛的。

而決定要怎麼往下走的方法,就是我們常聽見的梯度下降。

樓梯示意圖

全域、局域最佳解與隨機梯度下降

但很不幸的,我們要走的樓梯並不這麼人性化,就像是一個糟糕的設計師故意整人所設計的產品一樣,你會發現你所走的每一步都有分岔,而不管怎麼走,都不會有限制或阻礙,但可能只有其中幾種走法,可以讓你順利走到一樓,其他的都會讓你停留在過程中的某個平台上。

所以我們會說神經網路有全域最佳解局域最佳解

  1. 全域最佳解代表我們真的走到一樓的平台。
  2. 局域最佳解表示我們只是走進了某一個平台上。

記住,因為我們是蒙著眼睛的,所以某一層樓的平台和一樓對我們來說感覺上是一樣的。而神經網路所想要前往的「一樓」,面積甚至可能比一個小平台還小,所以也沒辦法根據平面面積來判斷到底是否到達一樓。

所以神經網路有特別使用一種稱為隨機梯度下降(SGD)的方法,用來跳樓。如果跳下去還能更低就最好了。但神經網路傻傻的,有時候也會往上跳

上圖所示的樓梯已經顯得十分複雜,但還遠不如神經網路的萬分之一。 https://ny.curbed.com/2019/3/29/18285507/hudson-yards-vessel-thomas-heatherwick-times-square-steps

那梯度下降是怎麼運作的呢?

梯度下降這個方法,有兩個目標:

  1. 找到前進的方向。(梯度計算)
  2. 找出更好的路徑來前往目標。(反向傳播法)

首先是找到前進的方向

我們先忘記過程中的平台,因為神經網路所定義的局域或全域最佳解,也就是這些平台,其實都非常小,不見得比階梯的面積更大,我們把它當作階梯的一部分。

而我們在下樓梯的過程應該能感覺到是否有下降,是否有下降的這種感覺就是斜率或者說,梯度,也就是當一顆球放在傾斜的平面時,這顆球會前進的方向。

不管斜率>0或是斜率<0,梯度下降就是用來找到斜率為0的地方,也就是不斷往下掉。

但是梯度下降還有除了單純的找方向外的第二個意圖:

找出更好的路徑來前往目標

請仔細看,我們是在找出更好的路,表示我們已經走過一遍了。走過一遍就代表我們曾經到達一個終點。但可能這個終點可能不夠理想(離實際上的一樓太遠)、或是我們走累了(設定的epochs到了)。

那這個時候,基於梯度下降的原理,我們就會開始往回走。但要注意:

往回走的路上,我們是睜開眼睛的。

所以我們會在往回走的時候,思考每一步台階更好的走法,也就是下次要怎麼走。這個就是所謂的反向傳播法。

所以,反向傳播法就是我們蒙著眼先走一次,到達終點後我們扯開眼罩,一步一步的找出更好的走法,直到回到起點。然後在蒙一次眼,再走一次。

所以,深度學習就像是一個試圖蒙眼下樓梯的遊戲。正如前面所說。

但下樓梯的過程會碰到一個很麻煩的問題─ 梯度消失:

樓梯太長的時候,沒辦法一路修正路徑回起點(梯度消失)

我們先解釋梯度消失,當樓梯太長(神經層太多)的時候,我們就必須要修正很多次。

例如:當我們從第 0階開始往起點修正時,必須要先修正第 0階台階,也就是移動到第 0階台階的新的位置,再根據這個新的位置來修正第 1階台階應該要踏在哪裡。

但每一次的修正都是基於微積分中稱為偏微分的技術,這個技術有一個缺點:

當連續進行偏微分時,很容易讓變化率歸零。也就是無法繼續修正。

連續的偏微分就是我們之所以連續修正台階走法的原理。

所以考慮到偏微分的缺點,可能在我們才修正到第5~第6階的時候,變化率就已經歸零了。但我們還有數十上百階還沒修正!

而就算沒有修正,我們還是要回到起點,蒙起眼睛重走,所以只有靠近終點時,我們才知道怎麼走,而靠近起點的地方,我們依然無知而徬徨。

這就是深度學習技術最大的障礙,當樓梯越長就代表神經網路中的神經層越多,神經層越多就越能做出複雜的決策。但卻會遇到梯度消失。在2015年以前,我們最多就只有做到22層(Google開發的GoogleNet)。

但我們總是不斷思考要怎麼做出更深的神經網路,終於在2015年, Kaiming He(何凱明)先生,做出了ResNet,深度高達152層,那他是怎麼做到的呢?

倒數第2個寫著 ILSVRC'15的就是何凱明先生提出的ResNet

ResNet的概念其實很簡單,抄捷徑就行啦。

ResNet在不同的台階之間,搭建了好幾個溜滑梯。所以我們就可以直接跳過那幾個台階不需要走。而修正的時候也同樣不需要管那幾個台階,我們就直接從溜滑梯像小屁孩一樣爬回去就好。

這種搭建溜滑梯的技術,叫做Residual(殘差)

藉由ResNet的技術貢獻,我們現在的神經網路,動輒數十上百層,有了過去無法比較的精準度,也讓AI能夠更加有效的解決問題。

--

--

No responses yet