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

王下邀月熊發表於2017-08-13

神經網路、有監督學習與深度學習從屬於筆者的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 即能夠為模型訓練帶來極大的效率提升,這也方便了我們構建出更復雜的神經網路。

相關文章