Andrew NG 深度學習課程筆記:神經網路、有監督學習與深度學習

神經網路、有監督學習與深度學習從屬於筆者的Deep Learning Specialization 課程筆記系列文章,本文主要記述了筆者學習 Andrew NG Deep Learning Specialization 系列課程的筆記與代碼實現。

神經網路、有監督學習與深度學習

深度學習正在逐步地改變世界,從網路搜索、廣告推薦這樣傳統的互聯網業務到健康醫療、自動駕駛等不同的行業領域。百年前的電氣革命為社會帶來了新的支柱產業,而如今 AI 正是新時代的電力基礎,驅動社會技術的快速發展。本課程的第一部分,關注於如何構建包括深度神經網路在內的神經網路以及如何利用數據訓練該網路,課程的最後將會構建出可識別動物的深度神經網路。本課程的第二部分將會講解更多有關於深度學習實踐的相關資料,包括超參數調優、正則化、如何從 Momentum Armrest Prop 以及 AD Authorization 等演算法中選擇合適的優化演算法。第三部分將會學習如何自定義機器學習項目,如何進行數據預處理、將數據應用到模型訓練、提取交叉校驗的訓練集與驗證集等內容。第四部分將會著眼於卷積神經網路 CNN,如何構建經典的 CNN 模型。在最後的第五部分,將會學習構建序列模型(Seq2Seq 等)以解決自然語言處理相關的任務;典型的序列模型包括了 RNNs、LSTM 等。

神經網路

深度學習往往關聯於大規模神經網路的訓練,本章我們即來了解下何謂神經網路。以經典的房屋價格預測為例,假設我們擁有六組房屋數據,每組包含了房屋的面積以及價格;我們希望尋找合適的函數來根據房屋的尺寸預測房屋價格。如果我們採用線性回歸來解決這個問題,我們會畫出一條 y = kx + b 這樣的函數線,其形式如下黑色線所示:

我們知道房屋的價格不可能為負數,因此我們可以將使用 ReLU(Rectified Linear Unit)函數來描述尺寸與價格之間的關係,如上圖藍色線型所示。我們可以將該問題抽象為輸入為房間的尺寸 x,輸出為房間的價格 y,而某個神經元即為接受輸入並且進行合適的運算之後輸出目標值的函數:

如上圖所示即是最簡單的單元神經網路,而複雜的神經網路即是由無數的神經元分層連接堆疊而成。譬如實際的房屋價格會由尺寸、卧室數目、所屬區域(Zip Code)以及社區的富裕程度影響。我們理想的神經網路即是能夠自動幫我們構建隱層(Hidden Units),即輸入單元之間的關係以進行最好地預測:

給定輸入之後,神經網路的任務之一即是為我們自動構建隱層;每個隱層單元都會輸入輸入層的全部特徵作為輸入值。

有監督學習

神經網路的分類很多,不過截止到目前大多數的有價值的神經網路都還是基於機器學習中所謂的有監督學習(Supervised Learning)。在有監督學習中,我們的訓練數據集中已知了特徵與結果輸出之間的對應關係,而目標就是尋找正確的輸入與輸出之間的關係表示。譬如目前最賺錢的深度學習應用之一,在線廣告中就是輸入有關於網站展示的信息以及部分用戶的信息,神經網路會預測用戶是否會點擊該廣告;通過為不同的用戶展示他們最感興趣的廣告,來增加用戶的實際點擊率。下表即列舉了幾種常見的領域應用與它們的輸入輸出:

計算機視覺近年來也發展迅速,典型的應用之一即是圖片標註;我們可能隨機輸入一張圖片來尋找與它最相近的圖片。語音識別則是能夠將用戶輸入的語音數據轉化為文字表述;機器翻譯則是能將不同語言間的語句進行自由轉化,譬如將某個英文段落轉化為對應的中文表述。而在自動駕駛中,我們可能會輸入某張從雷達中獲取的車前圖片,來判斷路上其他車的相對位置。而對於這些不同的行業領域我們也需要應用不同類型的神經網路,譬如對上文提及的房價預測,我們就可以使用標準的神經網路;而對於圖片應用則會優先考慮使用卷積神經網路(CNN)。

而對於序列數據,譬如隨時間播放的音頻流,其可以表示為一維的時間序列,我們通常會使用 RNN 來處理這個類型的數據。而在文本處理中,我們也常常將文本表示為字元序列,因此也往往會使用 RNN 來處理這個類型的數據。對於自動駕駛這樣更為複雜的應用,我們可能會需要同時處理圖片、文本等多種類別的數據,因此會使用混合網路架構。

模型訓練中我們常見的另一組概念就是結構化數據與非結構化數據,結構化數據有點類似於關係型資料庫中存放的數據;譬如上面介紹的房屋價格預測中,我們會擁有包含了尺寸、卧室數等列的數據表,這種形式的就是所謂結構化數據。結構化數據中每個特徵,譬如房間尺寸、卧室數目、用戶年齡等都有可解釋的意義;而非結構化數據的典型代表,語音、文本或者圖片,往往會使用像素值或者單個詞作為特徵向量的組成,這些特徵值往往很難有實際意義的解釋。人類經過長時間的進化之後能夠較好地辨析非結構化數據,而利用深度學習技術,現在機器也在不斷提升自身對於非結構化數據的辨析能力。

深度學習

深度學習背後的理論基礎與技術概念已經出現了有數十年,本部分我們即來討論為何直到近些年深度學習才得到了爆炸性的發展。我們可以用下圖來描述數據集的大小與演算法性能(準確率、推准率等)之間的關係:

對於支持向量機、Logistics 回歸這樣經典的機器學習演算法而言,在數據量從零遞增的初始階段,其性能會不斷提升;不過很快就會觸碰到天花板,此時性能很難再隨著數據集的增長而提升。而伴隨著移動互聯網時代的到來,我們能夠從網站、移動應用或者其他安裝在電子終端設備上的感測器中獲取到海量的數據;這些數據在開啟大數據時代的同時也為深度學習的發展提供了堅實的基礎。我們在上圖中也可以看出,越是大型的神經網路隨著數據量的增加,其性能提升的越快,並且其性能天花板也是越高。

深度學習崛起的另一個重要基石就是計算能力的提升,這裡不僅指新一代 CPU 或者 GPU 設備,還有是在許多基礎優化演算法上的革新,都使得我們能夠更快地訓練出神經網路。譬如早期我們會使用 Sigmod 函數作為神經網路的激活函數,隨著 x 的增大其梯度會逐漸趨近於零,這就導致了模型收斂變得相對緩慢;而 ReLU 則能較好地避免這個問題,其在正無窮大時梯度值依然保持恆定。簡單地從 Sigmod 函數遷移到 ReLU 即能夠為模型訓練帶來極大的效率提升,這也方便了我們構建出更複雜的神經網路。

延伸閱讀

  • 面向程序猿的數據科學與機器學習知識體系及資料合集
  • 機器學習、深度學習與自然語言處理領域推薦的書籍列表
  • 數據科學與機器學習概述

推薦閱讀:

淺談神經網路中的梯度爆炸問題
基於Tensorflow的神經網路解決用戶流失概率問題
求推薦人工智慧特別是神經網路方面的書?
人工智慧聊天機器人,微軟小冰就夠了
強化學習經典入門書的讀書筆記系列--第三篇(上)

TAG:深度学习DeepLearning | 机器学习 | 神经网络 |