衆所周知,深度學習正逐漸得到愈來愈多的關注,而且毫無疑問成爲機器學習領域最熱門的話題。
深度學習能夠被看做是一組算法的集合,這些算法可以高效地進行多層人工神經網絡訓練。
在本章,讀者將學習人工神經網絡的基本概念,而且接觸到新近基於Python開發的深度學習庫,從而更進一步去探索機器學習研究領域中這一最爲有趣的內容。 算法
使用人工神經網絡對複雜函數建模:
咱們在第2章中從人工神經元入手,開始了機器學習算法的探索。對於本章中將要討論的多層人工神經網絡來講,人工神經元是其構建的基石。
人工神經網絡的基本概念是創建在對人腦如何應對複雜問題的假想和模型構建上的。網絡
在過去的十年中,神經網絡研究領域的許多重大突破成就了當前的深度學習算法,此算法能夠經過無類標數據訓練的深度神經網絡(多層神經網絡)進行特徵檢測。
神經網絡不只僅是學術領域的一個熱門話題,連Facebook、微軟及谷歌等大型科技公司都在人工神經網絡和深度學習研究領域進行了大量的投入。
時至今日,因爲可以解決圖像和語音識別等複雜問題,由深度學習算法所驅動的複雜神經網絡被認爲是最前沿的研究成果。
咱們平常生活中深度學習的常見例子有谷歌圖片搜索和谷歌翻譯,谷歌翻譯做爲一款智能手機應用,可以自動識別圖片中的文字,並將其實時翻譯爲20多種語言。架構
當前一些主要的科技公司正在積極開發更多有趣的深度神經網絡應用,如Facebook公司開發的給圖片打標籤的DeepFace,百度公司的DeepSpeech,
它能夠處理普通話語音查詢。此外,製藥行業近期也開始將深度學習技術用於新葯研發和毒性預測,研究代表,這些新技術的性能遠超過傳統的虛擬篩選方法。機器學習
單層神經網絡回顧:
本章涉及的內容主要是多層神經網絡,包括其工做原理,以及如何對其進行訓練以解決複雜問題等。
不過在深刻討論多層神經網絡結構以前,咱們先簡要回顧下第2章中介紹的單層神經網絡的相關概念,即以下圖所示的自適應線性神經元(Adaline)算法:函數
在第2章中,咱們實現了用於二類別分類的Adaline算法,並經過梯度降低優化算法來學習模型的權重係數。
訓練集上的每一次迭代,咱們使用以下更新規則來更新權重向量w: 性能
換句話說,咱們基於整個訓練數據集來計算梯度,並沿着與梯度▽J(w)相反的方向前進以更新模型的權重。
爲了找到模型的最優權重,咱們將待優化的目標函數定義爲偏差平方和(SSE)代價函數J(w)。
此外,咱們還爲梯度增長了一個通過精心挑選的因子:學習速率η,在學習過程當中用於權衡學習速度和代價函數全局最優勢之間的關係。
在梯度降低優化過程當中,咱們在每次迭代後同時更新全部權重,並將權重向量w中各權值wj的偏導定義爲:
它是Adaline在特定情形下的線性函數。此外,咱們將激勵函數φ(·)定義爲:
其中,淨輸入z是輸入與權重的線性組合,用於鏈接輸入和輸出層:
使用激勵φ(z)來計算梯度更新時,咱們定義了一個閾值函數(單位階躍函數)將連續的輸出值轉換爲二類別分類的預測類標:
請注意:儘管Adaline包含一個輸入層和一個輸出層,但因爲兩層之間只有單一的網絡鏈接,所以仍舊稱爲單層神經網絡。
多層神經網絡架構簡介:
在本節,咱們將看到如何將多個單獨的神經元鏈接爲一個多層前饋神經網絡(multi-layer feedforward neural network)。
這種特殊類型的網絡也稱做多層感知器(multi-layer perceptron,MLP)。
下圖解釋了三層MLP的概念:一個輸入層、一個隱層,以及一個輸出層。隱層的全部單元徹底鏈接到輸入層上,同時輸出層的單元也徹底鏈接到了隱層中。
若是網絡中包含不止一個隱層,咱們則稱其爲深度人工神經網絡。學習
咱們能夠向MLP中加入任意數量的隱層來建立更深層的網絡架構。
實際上,能夠將神經網絡中的隱層數量及各單元看做是額外的超參,可使用第6章中介紹過的交叉驗證針對特定問題對它們進行優化。
不過,隨着增長到網絡中的隱層愈來愈多,經過反向傳播算法計算獲得的梯度偏差也將變得愈來愈小。
這個接近於不存在的梯度問題使得模型的學習很是具備挑戰性。所以,特別發展出了針對此類深層神經網絡架構的預處理算法,亦即所謂的深度學習。
雖然對於二類別分類來講,輸出層包含一個激勵單元就已足夠,但在前面的圖中咱們能夠發現一個更加通用的神經網絡形式,
經過一對多技術(One-vs-ALL,OvA),能夠將它推廣到多類別分類上。
爲了更好理解它是如何工做的,請回憶一下咱們在第4章中介紹的使用獨熱(one-hot)法來表示分類變量。
經過獨熱向量表示方法,咱們能夠處理數據集中包含任意多個類別的分類任務。
經過正向傳播構造神經網絡
本節中,咱們將使用正向傳播(forward propagation)來計算多層感知器(MLP)模型的輸出。
爲理解正向傳播是如何經過學習來擬合多層感知器模型,咱們將多層感知器的學習過程總結爲三個簡單步驟:
1)從輸入層開始,經過網絡向前傳播(也就是正向傳播)訓練數據中的模式,以生成輸出。
2)基於網絡的輸出,經過一個代價函數(稍後將有介紹)計算所需最小化的偏差。
3)反向傳播偏差,計算其對於網絡中每一個權重的導數,並更新模型。
最終,經過對多層感知器模型權重的屢次迭代和學習,咱們使用正向傳播來計算網絡的輸出,並使用閾值函數得到獨熱法所表示的預測類標。
如今,讓咱們根據正向傳播算法逐步從訓練數據的模式中生成一個輸出。因爲隱層每一個節點均徹底鏈接到全部輸入層節點,首先經過如下公式計算的激勵
此函數必須是可微的,以方便根據梯度方法學習獲得鏈接神經元的權重。
爲了解決圖像分類等複雜問題,咱們須要在多層感知器模型中使用非線性激勵函數,例如,在第3章的邏輯斯諦迴歸中所使用的sigmoid激勵函數。
多層感知器是一個典型的前饋人工神經網絡。與本章後續要討論的遞歸神經網絡不一樣,此處的前饋是指每一層的輸出都直接做爲下一層的輸入。
因爲此網絡架構中,人工神經元是典型的sigmoid單元,而不是感知器,所以多層感知器這個詞聽起來有些不夠貼切。
直觀上說,咱們能夠將多層感知器中的神經元看做是返回值位於[0,1]連續區間上的邏輯斯諦迴歸單元。優化