第一週:深度學習引言(Introduction to Deep Learning)

 

一、第一門課 神經網絡和深度學習(Neural Networks and Deep Learning)

1.1 什麼是神經網絡?(What is a Neural Network)

 我們常常用深度學習這個術語來指訓練神經網絡的過程。

讓我們從一個房價預測的例子開始講起。假設你有一個數據集,它包含了六棟房子的信息。所以,你知道房屋的面積是多少平方英尺或者平方米,並且知道房屋價格。這時,你想要擬合一個根據房屋面積預測房價的函數。

如果你對線性迴歸很熟悉,你可能會說:“好吧,讓我們用這些數據擬合一條直線。”於是你可能會得到這樣一條直線。

我們知道價格永遠不會是負數的。因此,爲了替代一條可能會讓價格爲負的直線,我們把直線彎曲一點,讓它最終在零結束。這條粗的藍線最終就是你的函數,用於根據房屋面積預測價格。有部分是零,而直線的部分擬合的很好。

一個神經網絡我們把房屋的面積作爲神經網絡的輸入(我們稱之爲x),通過一個節點(一個小圓圈),最終輸出了價格(我們用y表示)。其實這個小圓圈就是一個單獨的神經元。接着你的網絡實現了左邊這個函數的功能。

在有關神經網絡的文獻中,你經常看得到這個函數。從趨近於零開始,然後變成一條直線。這個函數被稱作ReLU激活函數,它的全稱是Rectified Linear Unit。rectify(修正)可以理解成max(0,x),這也是你得到一個這種形狀的函數的原因。

先把ReLU函數放在一邊,後面進行相關的介紹。

上圖是一個單神經元網絡,不管規模大小,它正是通過把這些單個神經元疊加在一起來形成。如果你把這些神經元想象成單獨的樂高積木,你就通過搭積木來完成一個更大的神經網絡。

 另外,我們不僅僅用房屋的面積來預測它的價格,現在你有了一些有關房屋的其它特徵,比如臥室的數量,或許有一個很重要的因素,一家人的數量也會影響房屋價格,這個房屋能住下一家人或者是四五個人的家庭嗎?而這確實是基於房屋大小,以及真正決定一棟房子是否能適合你們家庭人數的臥室數。 而且郵政編碼能作爲一個特徵,告訴你步行化程度。比如這附近是不是高度步行化,你是否能步行去雜貨店或者是學校,以及你是否需要駕駛汽車。有些人喜歡居住在以步行爲主的區域,另外根據郵政編碼還和富裕程度相關(在美國是這樣的)。但在其它國家也可能體現出附近學校的水平有多好。

在圖上每一個畫的小圓圈都可以是ReLU的一部分,也就是指修正線性單元,或者其它稍微非線性的函數。基於房屋面積和臥室數量,可以估算家庭人口,基於郵編,可以估測步行化程度或者學校的質量。 

家庭人口、步行化程度以及學校的質量都能幫助你預測房屋的價格。以此爲例, x是所有的這四個輸入y是你嘗試預測的價格,把這些單個的神經元疊加在一起,我們就有了一個稍微大一點的神經網絡。這顯示了神經網絡的神奇之處,雖然我已經描述了一個神經網絡,它可以需要你得到房屋面積、步行化程度和學校的質量,或者其它影響價格的因素。

 你要做的只是輸入x,就能得到輸出y。因爲它可以自己計算你訓練集中樣本的數目以及所有的中間過程。所以,你實際上要做的就是:這裏有四個輸入的神經網絡,這輸入的特徵可能是房屋的大小、臥室的數量、郵政編碼和區域的富裕程度。給出這些輸入的特徵之後,神經網絡的工作就是預測對應的價格。同時也注意到這些被叫做隱藏單元圓圈,在一個神經網絡中,它們每個都從輸入的四個特徵獲得自身輸入,比如說,第一個結點代表家庭人口,而家庭人口僅僅取決於x1x2特徵,換句話說,在神經網絡中,你決定在這個結點中想要得到什麼,然後用所有的四個輸入來計算想要得到的。因此,我們說輸入層和中間層被緊密的連接起來了。【每一個結點的四個輸入佔的比例應該不一樣

值得注意的是神經網絡給予了足夠多的關於x和y的數據,給予了足夠的訓練樣本有關x和y。神經網絡非常擅長計算從x到y的精準映射函數。這就是一個基礎的神經網絡。你可能發現你自己的神經網絡在監督學習的環境下是如此的有效和強大,也就是說你只要嘗試輸入一個x,即可把它映射成y,就好像我們在剛纔房價預測的例子中看到的效果。

 

 1.2 神經網絡的監督學習(Supervised Learning with Neural Networks)

關於神經網絡也有很多的種類,考慮到它們的使用效果,有些使用起來恰到好處,但事實表明,到目前幾乎所有由神經網絡創造的經濟價值,本質上都離不開一種叫做監督學習的機器學習類別,讓我們舉例看看。

在監督學習中你有一些輸入x,你想學習到一個函數來映射到一些輸出y,比如我們之前提到的房價預測的例子,你只要輸入有關房屋的一些特徵,試着去輸出或者估計價格。我們舉一些其它的例子,來說明神經網絡已經被高效應用到其它地方。

如今應用深度學習獲利最多的一個領域,就是在線廣告。這也許不是最鼓舞人心的,但真的很賺錢。具體就是通過在網站上輸入一個廣告的相關信息,因爲也輸入了用戶的信息,於是網站就會考慮是否向你展示廣告。神經網絡已經非常擅長預測你是否會點開這個廣告,通過向用戶展示最有可能點開的廣告,這就是神經網絡在很多家公司難以置信地提高獲利的一種應用。因爲有了這種向你展示你最有可能點擊的廣告的能力,而這一點擊的行爲的改變會直接影響到一些大型的在線廣告公司的收入。【感覺像微信或者淘寶上推送的一些連接,總感覺是你喜歡的樣子】

計算機視覺在過去的幾年裏也取得了長足的進步,這也多虧了深度學習。你可以輸入一個圖像,然後想輸出一個索引,範圍從1到1000來試着告訴你這張照片,它可能是,比方說,1000個不同的圖像中的任何一個,所以你可能會選擇用它來給照片打標籤。深度學習最近在語音識別方面的進步也是非常令人興奮的,你現在可以將音頻片段輸入神經網絡,然後讓它輸出文本記錄。得益於深度學習,機器翻譯也有很大的發展。你可以利用神經網絡輸入英語句子,接着輸出一箇中文句子;在自動駕駛技術中,你可以輸入一幅圖像,就好像一個信息雷達展示汽車前方有什麼,據此,你可以訓練一個神經網絡,來告訴汽車在馬路上面具體的位置,這就是神經網絡在自動駕駛系統中的一個關鍵成分。

那麼深度學習系統已經可以創造如此多的價值,通過智能的選擇,哪些作爲x哪些作爲y,來針對於你當前的問題,然後擬合監督學習部分,往往是一個更大的系統,比如自動駕駛。這表明神經網絡類型的輕微不同,也可以產生不同的應用,比如說,應用到我們在上一個視頻提到的房地產領域,我們不就使用了一個普遍標準神經網絡架構嗎?

對於圖像應用,我們經常在神經網絡上使用卷積(Convolutional Neural Network),通常縮寫爲CNN。對於序列數據,例如音頻,有一個時間組件,隨着時間的推移,音頻被播放出來,所以音頻是最自然的表現。作爲一維時間序列(兩種英文說法one-dimensional time series / temporal sequence).對於序列數據,經常使用RNN,一種遞歸神經網絡(Recurrent Neural Network),語言,英語和漢語字母表或單詞都是逐個出現的,所以語言也是最自然的序列數據,因此更復雜的RNNs版本經常用於這些應用。

對於更復雜的應用比如自動駕駛,你有一張圖片,可能會顯示更多的CNN卷積神經網絡結構,其中的雷達信息是完全不同的,你可能會有一個更定製的,或者一些更復雜的混合的神經網絡結構。所以爲了更具體地說明什麼是標準的CNNRNN結構,在文獻中你可能見過這樣的圖片,這是一個標準的神經網絡。

你也可能見過這樣的圖片,這是一個卷積神經網絡的例子

我們會在後面的課程瞭解這幅圖的原理和實現,卷積網絡(CNN)通常用於圖像數據。

你可能也會看到這樣的圖片,而且你將在以後的課程中學習如何實現它。

遞歸神經網絡(RNN)非常適合這種一維序列,數據可能是一個時間組成部分。

你可能也聽說過機器學習對於結構化數據和非結構化數據的應用,結構化數據意味着數據的基本數據庫。例如在房價預測中,你可能有一個數據庫,有專門的幾列數據告訴你臥室的大小和數量,這就是結構化數據。或預測用戶是否會點擊廣告,你可能會得到關於用戶的信息,比如年齡以及關於廣告的一些信息,然後對你的預測分類標註,這就是結構化數據,意思是每個特徵,比如說房屋大小臥室數量,或者是一個用戶的年齡,都有一個很好的定義。

相反非結構化數據是指比如音頻,原始音頻或者你想要識別的圖像或文本中的內容。這裏的特徵可能是圖像中的像素值或文本中的單個單詞。

從歷史經驗上看,處理非結構化數據是很難的,與結構化數據比較,讓計算機理解非結構化數據很難,而人類進化得非常善於理解音頻信號和圖像,文本是一個更近代的發明,但是人們真的很擅長解讀非結構化數據; 但結果也表明,神經網絡在許多短期經濟價值的創造,也是基於結構化數據的。比如更好的廣告系統、更好的利潤建議,還有更好的處理大數據的能力。許多公司不得不根據神經網絡做出準確的預測。

因此在這門課中,我們將要討論的許多技術都將適用,不論是對結構化數據還是非結構化數據。爲了解釋算法,我們將在使用非結構化數據的示例中多畫一點圖片,但正如你所想的,你自己團隊裏通過運用神經網絡,我希望你能發現,神經網絡算法對於結構化和非結構化數據都有用處。

 

 1.3 爲什麼深度學習會興起?(Why is Deep Learning taking off?)

本節視頻主要講了推動深度學習變得如此熱門的主要因素。包括數據規模、計算量及算法的創新。深度學習和神經網絡之前的基礎技術理念已經存在大概幾十年了,爲什麼它們現在才突然流行起來呢? 

在過去的幾年裏,很多人都問我爲什麼深度學習能夠如此有效。當我回答這個問題時,我通常給他們畫個圖,在水平軸上畫一個形狀,在此繪製出所有任務的數據量,而在垂直軸上,畫出機器學習算法的性能。比如說準確率體現在垃圾郵件過濾或者廣告點擊預測,或者是神經網絡在自動駕駛汽車時判斷位置的準確性,根據圖像可以發現,如果你把一個傳統機器學習算法的性能畫出來,作爲數據量的一個函數,你可能得到一個彎曲的線,就像圖中這樣,它的性能一開始在增加更多數據時會上升,但是一段變化後它的性能就會像一個高原一樣。假設你的水平軸拉的很長很長,它們不知道如何處理規模巨大的數據,而過去十年的社會里,我們遇到的很多問題只有相對較少的數據量。

神經網絡展現出的是,如果你訓練一個小型的神經網絡,那麼這個性能可能會像下圖黃色曲線表示那樣;如果你訓練一個稍微大一點的神經網絡,比如說一箇中等規模的神經網絡(下圖藍色曲線),它在某些數據上面的性能也會更好一些;如果你訓練一個非常大的神經網絡,它就會變成下圖綠色曲線那樣,並且保持變得越來越好。因此可以注意到兩點:如果你想要獲得較高的性能體現,那麼你有兩個條件要完成,第一個是你需要訓練一個規模足夠大的神經網絡,以發揮數據規模量巨大的優點,另外你需要能畫到x軸的這個位置,所以你需要很多的數據。因此我們經常說規模一直在推動深度學習的進步,這裏的規模指的也同時是神經網絡的規模,我們需要一個帶有許多隱藏單元的神經網絡,也有許多的參數及關聯性,就如同需要大規模的數據一樣。事實上如今最可靠的方法來在神經網絡上獲得更好的性能,往往就是要麼訓練一個更大的神經網絡,要麼投入更多的數據,這隻能在一定程度上起作用,因爲最終你耗盡了數據,或者最終你的網絡是如此大規模導致將要用太久的時間去訓練,但是僅僅提升規模的的確確地讓我們在深度學習的世界中摸索了很多時間。爲了使這個圖更加從技術上講更精確一點,我在x軸下面已經寫明的數據量,這兒加上一個標籤(label)量,通過添加這個標籤量,也就是指在訓練樣本時,我們同時輸入x和標籤y,接下來引入一點符號,使用小寫的m字母表示訓練集的規模,或者說訓練樣本的數量,這個小寫字母m就橫軸結合其他一些細節到這個圖像中。

在這個小的訓練集中,各種算法的優先級事實上定義的也不是很明確,所以如果你沒有大量的訓練集,那效果會取決於你的特徵工程能力,那將決定最終的性能。假設有些人訓練出了一個SVM(支持向量機)表現的更接近正確特徵,然而有些人訓練的規模大一些,可能在這個小的訓練集中SVM算法可以做的更好。因此你知道在這個圖形區域的左邊,各種算法之間的優先級並不是定義的很明確,最終的性能更多的是取決於你在用工程選擇特徵方面的能力以及算法處理方面的一些細節,只是在某些大數據規模非常龐大的訓練集,也就是在右邊這個會非常的大時,我們能更加持續地看到更大的由神經網絡控制的其它方法,因此如果你的任何某個朋友問你爲什麼神經網絡這麼流行,我會鼓勵你也替他們畫這樣一個圖形。

所以可以這麼說,在深度學習萌芽的初期,數據的規模以及計算量,侷限在我們對於訓練一個特別大的神經網絡的能力,無論是在CPU還是GPU上面,那都使得我們取得了巨大的進步。但是漸漸地,尤其是在最近這幾年,我們也見證了算法方面的極大創新。許多算法方面的創新,一直是在嘗試着使得神經網絡運行的更快。

作爲一個具體的例子,神經網絡方面的一個巨大突破是從sigmoid函數轉換到一個ReLU函數,這個函數我們在之前的課程裏提到過。

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

好消息是這些力量目前也正常不斷的奏效,使得深度學習越來越好。研究表明我們的社會仍然正在拋出越來越多的數字化數據,或者用一些特殊的硬件來進行計算,比如說GPU,以及更快的網絡連接各種硬件。 

 

1.4 課程資源(Course Resources)

博客學習

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章