吳恩達深度學習筆記(4)-為什麼深度學習會興起?
為什麼深度學習會興起?(Why is Deep Learning taking off?)
本節視訊主要講了推動深度學習變得如此熱門的主要因素。包括 資料規模 、 計算量及演算法的創新 。(3個重點概念!請背書!)
深度學習和神經網路之前的基礎技術理念已經存在大概幾十年了,為什麼它們現在才突然流行起來呢?對啊,為什麼?看過我之前文章:人工智慧的冷落與興起,那麼你就會了解發展歷程了,但是這個深度學習為什麼會獨引爆全場呢?
本節課程主要講述一些使得深度學習變得如此熱門的主要驅動因素,這將會幫助你在你的組織機構內發現最好的時機來應用這些東西。
在過去的幾年裡,很多人都問為什麼深度學習能夠如此有效。當回答這個問題時,通常給他們畫個圖,在 水平軸 上畫一個形狀,在此繪製出 所有任務的資料量 ,而在 垂直軸 上,畫出 機器學習演算法的效能 。比如說準確率體現在垃圾郵件過濾或者廣告點選預測,或者是神經網路在自動駕駛汽車時判斷位置的準確性,根據影象可以發現,如果你把一個傳統機器學習演算法的效能畫出來,作為資料量的一個函式,你可能得到一個彎曲的線,就像圖中這樣,它的效能一開始在增加更多資料時會上升,但是一段變化後它的效能就會像一個高原一樣。假設你的水平軸拉的很長很長,它們不知道如何處理規模巨大的資料,而過去十年的社會裡,遇到的很多問題只有相對較少的資料量。

大量的資料
多虧 數字化社會的來臨,現在的資料量都非常巨大 ,我們花了很多時間活動在這些數字的領域,比如在電腦網站上、在手機軟體上以及其它數字化的服務,它們 都能建立資料 ,同時便宜的相機被配置到行動電話,還有加速儀及各類各樣的感測器,同時在 物聯網領域我們也收集到了越來越多的資料(對哎,什麼是物聯網?有興趣麼?去查下就清楚了) 。僅僅在過去的20年裡對於很多應用,我們便收集到了 大量的資料 ,遠超過機器學習演算法能夠高效發揮它們優勢的規模。
神經網路計算量
神經網路展現出的是,如果你訓練一個小型的神經網路,那麼這個效能可能會像下圖黃色曲線表示那樣;如果你訓練一個稍微大一點的神經網路,比如說一箇中等規模的神經網路(下圖藍色曲線),它在某些資料上面的效能也會更好一些;如果你訓練一個非常大的神經網路,它就會變成下圖綠色曲線那樣,並且保持變得越來越好。
因此可以注意到兩點:如果你想要獲得較高的效能體現,那麼你有兩個條件要完成,
第一個是你需要訓練一個規模足夠大的神經網路 , 以發揮資料規模量巨大的優點 ,
另外你需要能畫到軸的這個位置,所以你需要很多的資料 。
因此我們經常說規模一直在推動深度學習的進步,這裡的規模指的也同時是神經網路的規模,我們需要一個帶有許多隱藏單元的神經網路,也有許多的引數及關聯性,就如同需要大規模的資料一樣。事實上如今最可靠的方法來在神經網路上獲得更好的效能,往往就是 要麼訓練一個更大的神經網路,要麼投入更多的資料 ,這隻能在一定程度上起作用,因為最終你耗盡了資料,或者最終你的網路是如此大規模導致將要用太久的時間去訓練,但是僅僅提升規模的的確確地讓我們在深度學習的世界中摸索了很多時間。為了使這個圖更加從技術上講更精確一點,我在軸下面已經寫明的資料量,這兒加上一個標籤(label)量,通過新增這個標籤量,也就是指在訓練樣本時,我們同時輸入和標籤,接下來引入一點符號,使用小寫的字母表示訓練集的規模,或者說訓練樣本的數量,這個小寫字母就橫軸結合其他一些細節到這個影象中。

在這個小的訓練集中,各種演算法的優先順序事實上定義的也不是很明確,所以如果你沒有大量的訓練集,那效果會取決於你的特徵工程能力,那將決定最終的效能。假設有些人訓練出了一個 SVM (支援向量機)表現的更接近正確特徵,然而有些人訓練的規模大一些,可能在這個小的訓練集中 SVM 演算法可以做的更好。
因此你知道在這個圖形區域的左邊,各種演算法之間的優先順序並不是定義的很明確,最終的效能更多的是取決於你在用工程選擇特徵方面的能力以及演算法處理方面的一些細節,只是在某些大資料規模非常龐大的訓練集,也就是在右邊這個會非常的大時,我們能更加持續地看到更大的由神經網路控制的其它方法,因此如果你的任何某個朋友問你為什麼神經網路這麼流行,我會鼓勵你也替他們畫這樣一個圖形。
所以可以這麼說,(劃重點)在深度學習萌芽的初期, 資料的規模以及計算量,侷限在我們對於訓練一個特別大的神經網路的能力 ,無論是在 CPU 還是 GPU 上面,那都使得我們取得了巨大的進步。但是漸漸地,尤其是在最近這幾年,我們也見證了演算法方面的極大創新。許多演算法方面的創新,一直是在嘗試著使得神經網路執行的更快。
演算法的創新
作為一個具體的例子,神經網路方面的一個巨大突破是從 sigmoid 函式轉換到一個 ReLU 函式,這個函式我們在之前的課程裡提到過。

如果你無法理解剛才我說的某個細節,也不需要擔心,可以知道的一個使用 sigmoid 函式和機器學習問題是,在這個區域(左右兩側靠近邊緣),也就是這個 sigmoid 函式的梯度會接近零,所以學習的速度會變得非常緩慢,因為當你實現梯度下降以及梯度接近零的時候,引數會更新的很慢,所以學習的速率也會變的很慢,

而通過改變這個被叫做啟用函式的東西,神經網路換用這一個函式,叫做 ReLU 的函式(修正線性單元), ReLU 它的梯度對於所有輸入的負值都是零,因此梯度更加不會趨向逐漸減少到零。而這裡的梯度,這條線的斜率在這左邊是零,僅僅通過將 Sigmod 函式轉換成 ReLU 函式,便能夠使得一個叫做梯度下降( gradient descent )的演算法執行的更快,這就是一個或許相對比較簡單的演算法創新的例子。
但是根本上演算法創新所帶來的影響,實際上是對計算帶來的優化,所以有很多像這樣的例子,我們 通過改變演算法,使得程式碼執行的更快,這也使得我們能夠訓練規模更大的神經網路,或者是多埠的網路 。即使我們從所有的資料中擁有了大規模的神經網路,快速計算顯得更加重要的另一個原因是,訓練你的神經網路的過程,很多時候是憑藉直覺的,往往你對神經網路架構有了一個想法,於是你嘗試寫程式碼實現你的想法,然後讓你執行一個試驗環境來告訴你,你的神經網路效果有多好,通過參考這個結果再返回去修改你的神經網路裡面的一些細節,然後你不斷的重複上面的操作,當你的神經網路需要很長時間去訓練,需要很長時間重複這一迴圈,在這裡就有很大的區別,根據你的生產效率去構建更高效的神經網路。當你能夠有一個想法,試一試,看效果如何。
在10分鐘內,或者也許要花上一整天,如果你訓練你的神經網路用了一個月的時間,有時候發生這樣的事情,也是值得的,因為你很快得到了一個結果。在10分鐘內或者一天內,你應該嘗試更多的想法,那極有可能使得你的神經網路在你的應用方面工作的更好、更快的計算,在提高速度方面真的有幫助,那樣你就能更快地得到你的實驗結果。這也同時幫助了神經網路的實驗人員和有關專案的研究人員在深度學習的工作中迭代的更快,也能夠更快的改進你的想法,所有這些都使得整個深度學習的研究社群變的如此繁榮,包括令人難以置信地發明新的演算法和取得不間斷的進步,這些都是開拓者在做的事情,這些力量使得深度學習不斷壯大。
下圖也就是一般的實現思路,有想法 到 寫程式碼實現 到 實驗驗證,得到結果,然後改進想法,迴圈往復。。。(運氣好的話,可以很快實現的)

好訊息是這些力量目前也正常不斷的奏效,使得深度學習越來越好。研究表明我們的社會仍然正在丟擲越來越多的數字化資料,或者用一些特殊的硬體來進行計算,比如說 GPU ,以及更快的網路連線各種硬體。我非常有信心,我們可以做一個超級大規模的神經網路,而計算的能力也會進一步的得到改善,還有演算法相對的學習研究社群連續不斷的在演算法前沿產生非凡的創新。根據這些我們可以樂觀地回答,同時對深度學習保持樂觀態度,在接下來的這些年它都會變的越來越好。