天天看點

帶你讀《基于浏覽器的深度學習 》之二:神經網絡架構第2章

點選檢視第一章 點選檢視第三章

第2章

神經網絡架構

本章我們将介紹在深度學習應用中常用的深度學習架構。深度學習旨在解決真實世界的各種任務。每種類型的應用經常需要在特定場景下選擇合适的模型結構。

卷積神經網絡(CNN)架構擅長解決圖像識别問題。因為卷積和池化操作的行為有點像圖像過濾器應用于輸入圖檔的不同尺度。而由于循環 cell(recurrent cell)的遞歸行為循環神經網絡(RNN)架構常用來解決自然語言處理問題,比如,語音{文字的轉化、語義模型等。

隻有掌握深度學習模型和它們應用的領域,才能建立高效的深度學習應用。本章介紹的深度學習模型有 CNN、RNN 和增強學習的深度神經網絡。

2.1 卷積神經網絡

解決圖像識别的深度神經網絡是卷積神經網絡(CNN)。CNN的主要架構是一個卷積層,卷積層可以抽取圖檔的進階特征(抽象特征),訓練過程學習到圖檔的邊、曲線、塊和對比度。通過圖像的原始特征,多個卷積層堆疊形成一個進階特征的探測器,比如激活紋理、表面或者動物的過濾器。值得注意的是,這些進階特征對于移位操作的影響是健壯的,這意味着,即使圖檔上的一個對象移動到其他位置,CNN 仍然能識别出該特征。

該特性稱之為平移不變性或者空間不變性。由于CNN 的健壯性,CNN能在圖像識别領域有着傑出的精确度。是以CNN是現代圖像識别應用事實上的标準。

分析多個現代深度學習架構,你會發現網絡的大體結構有許多相似之處。接下來你将看到的大部分網絡,都跟20世紀80年代Yann LeCun開發的模型的抽象結構類似。該網絡模型包含一個輸入層,一個前端(輸入降維和特征抽取)和後端(分類器或者回歸)。前端的輸出是一個特征圖,或者用特征空間表示的輸入圖像。依據應用或者任務的不同,模型網絡可能有多個後端或者單個網絡用來進行年齡和性别分類。

深度學習架構的相似性是模型網絡高水準元件的設計選擇。我們經常會發現引入用參數的元件相比于特征表示的要高效,比如GoogLeNet的Inception子產品和SqueezeNet的Fire子產品用卷積層代替全連接配接層,或者用AveragePool後端替代softmax分類器。模型設計的第二個動機是梯度在模型之間的傳遞。我們将在 ResNet 模型的殘差塊(residual block)進行更細緻的講解。

許多高水準的深度學習模型都是由傑出的、擁有大量資金和資源的組織或者公司開發的。是以,非常強烈地推薦你使用成熟的模型,而不是去創造你自己的 CNN 模型(除非你是一個深度學習研究者)。在應用中使用成熟的模型會減少開發的時間并使預測的準确性可以接受。

2.1.1 AlexNet

AlexNet是在2012年的ImageNet大規模視覺識别挑戰賽(ImageNet Large Scale Visual Recognition Competition,ILSVRC)上提出來的,top-5(前5位)預測的錯誤率為15.3%,遠超其他選手。AlexNet 采用8層的神經網絡,其中大部分是卷積層。圖2-1顯示了AlexNet架構概覽。

正如你所見,該網絡模型由卷積層、池化層和全連接配接層交叉出現組成,包含6000 萬個可訓練的參數。它也使用了一個softmax分類器作為後端,包含兩個全連接配接層和一個softmax激活函數。其響應了模型參數中的 96%。最後的全連接配接層效率不高,卻要求大量的參數。

這個模型是由 SuperVision 組設計的,該組包括 Alex Krizhevsky、Geofirey Hinton和Ilya Sutskever。AlexNet 模型将參數化拟合放入兩個并行的GPU記憶體中,這在當時是非常牛的設計。在并行GPU上訓練模型花費了兩周時間。由于AlexNet 模型在圖檔分類挑戰賽上的突出表現,我們可以說 AlexNet模型是深度學習技術突破性發展的起點。

帶你讀《基于浏覽器的深度學習 》之二:神經網絡架構第2章

2.1.2 GoogLeNet

GoogLeNet是2014 年ILSVRC的冠軍,top-5 預測的錯誤率達到6.7%,卻隻用了不到 AlexNet模型參數的十分之一。其模型性能非常接近人類識别的水準。

GoogLeNet是一個具有22層的卷積神經網絡,但是它引入了寬度子產品,其比純卷積層效率要高。GoogLeNet 的進階結構在圖 2-2 中展示。

帶你讀《基于浏覽器的深度學習 》之二:神經網絡架構第2章

GoogLeNet的開創性觀點是提出Inception子產品,它包含并行的1×1、3×3和5×5的卷積過濾器,并同時增加一個池化過濾器。接着緊跟一個深度連接配接層。

Inception 子產品比單個卷積層效率高,因為它可以捕捉不同尺度的特征。Inception子產品重度使用 1×1的卷積核,即所謂的bottleneck convolution。該操作沿着深度(depth)次元将輸入資料的權重求和,當進行卷積連接配接時,這種特性很巧妙地減少了深度次元的數目,并且減少了各激活之間的相關性。如圖2-3所示。

帶你讀《基于浏覽器的深度學習 》之二:神經網絡架構第2章

另一個急劇減小模型參數的技術是使用平均池化操作代替耗時的含有全連接配接層的softmax分類器。是以,GoogLeNet模型的可訓練參數的數量不到700萬。

GoogLeNet模型最大的創新點是提出Inception 子產品和bottleneck convolution的使用。Google最近開發的模型,比如,Chollet開發的 Xception模型或者AutoML,發現更多複雜的類 Inception的寬模型以提升性能。從寬度模型得到的主要一點是,不需要順序堆疊卷積層也能提升網絡模型性能和準确度。

2.1.3 ResNet

ResNet,也叫作殘差神經網絡,是由微軟的 Kaiming He提出的。在ILSVRC 2015比賽中該模型達到令人難以置信的3.6%的誤差率,比人類的圖像分類準确度要高。需要注意的是,ResNet模型共有152層,是本節介紹的層最多的神經網絡。ResNet 神經網絡的skip connection結構也是創新點,它建立新的連接配接,忽略一些層。這個skip block也稱為殘差塊。如圖2-4所示。

帶你讀《基于浏覽器的深度學習 》之二:神經網絡架構第2章

衆所周知,簡單地增加層深度會造成梯度消失的問題。雖然使用更多的層數會提高準确度,但是太多的層數會讓模型變差。當堆疊太多的卷積層時,梯度将會随着反向傳播而消失,是以訓練模型變得困難。神經網絡的層數要進行平衡選擇。

ResNet 的核心概念,或者說殘差子產品,是用來解決上述問題的。從上圖可以看出,identity connection會忽略一些卷積層。在這個子產品中,訓練的神經網絡的參數預測輸入值到目标值的殘差。ResNet試圖學習殘差本身,而不是學習目标輸出。殘差對輸入的微小變化都較為敏感。相同的想法應用于梯度。殘差連接配接的良好特性是,梯度傳入殘差子產品,直接作為殘差子產品的輸入。

這就是為什麼ResNet可以以較少的網絡參數獲得最好的深度層的性能。因為有許多 ResNet的優化版本,它可能是最有前途的神經網絡架構。

2.1.4 SqueezeNet

SqueezeNet 模型是一個小型的深度學習模型,是專為移動端、嵌入式或者物聯網裝置設計的。其原始的論文标題是《AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size》。

SqueezeNet模型的設計目标是在不損失準确度的情形下使用更少的模型參數。表2-1顯示了 SqueezeNet模型能夠節省的記憶體空間。與壓縮的 AlexNet模型相比,SqueezeNet模型比AlexNet 模型小得多,但是沒有損失準确度。

帶你讀《基于浏覽器的深度學習 》之二:神經網絡架構第2章

SqueezeNet模型引入三種不錯的政策:

1.使用1×1 bottleneck convolution替代 3×3過濾器,因為前者隻用了九分之一的參數。

2.使用1×1 bottleneck convolution來減少輸入通道的數量,是以會減少後續的計算量。

3.采用下采樣保留大的特征圖,提高神經網絡模型的性能。

政策1和政策2可以減小模型的大小,政策3用來保證準确度。SqueezeNet神經網絡模型的建構基礎是 flre子產品,它是由squeeze層和expand層組成,如圖2-5所示。

Squeeze層減少到下一個expand層的輸入通道的數量,對應于政策2。expand層用1×1層和3×3層過濾輸入。1×1過濾器用來較少層的參數數量,對應于政策1。使用flre 塊減小了SqueezeNet模型的大小。SqueezeNet模型有池化層,可以進行下采樣,見政策3。這些池化層放在卷積層之後。圖2-6展示了 SqueezeNet模型的整個架構。

你可以看到在層之間使用一系列的flre子產品。SqueezeNet模型能在減小模型大小的同時保證達到 AlexNet模型同樣的效果。它常用在像移動端或者物聯網裝置一樣的用戶端。

帶你讀《基于浏覽器的深度學習 》之二:神經網絡架構第2章
帶你讀《基于浏覽器的深度學習 》之二:神經網絡架構第2章

2.2 循環神經網絡

因為CNN擅長抽取圖像的特征,是以主要用在圖像識别領域。但是你不能用CNN處理像時序資料或者自然語言的序列資料,因為這樣效率不高。而循環神經網絡(RNN)是用來解決該類問題的模型。它基于曆史資料來保留前面的狀态以預測接下來的輸出。假如我們來預測一句話的下一個單詞。比如,我們說,“I am learning deep learning.”很自然會認為最後一個單詞“learning”是依賴前面的詞語“I am learning deep”。簡而言之,它需要記住前面的一些詞語來讓深度學習網絡輸出合适的單詞。U、W和V 是權重矩陣。x是輸入向量,h是隐藏層。隐藏層是 RNN的中間狀态。圖2-7顯示RNN的樣子。

RNN的隐藏層的輸出是下一時刻的輸入。在上面的圖中,t-1時刻的隐藏狀态 h(t-1) 将是t時刻的 h(t)的輸入。RNN從序列資料接收一個輸入,然後預測輸出結果。隐藏層的輸出是作為中間狀态。它将作為下一時刻隐藏層的輸入。中間狀态是由所有先前的狀态計算獲得的。是以RNN能用來解決資料的序列問題。

帶你讀《基于浏覽器的深度學習 》之二:神經網絡架構第2章

雖然RNN在20世紀80年代就開發出來了,但是當時的神經網絡的準确度不夠。RNN 模型的訓練都是由随時間的反向傳播算法(BackPropagation Through Time,BPTT)計算的,該算法是與正常的前饋神經網絡模型的反向傳播算法相似。RNN 的循環可以看作是一個神經網絡的可變長度的鍊。你可以打開循環看到一個常見的神經網絡。

使用前面的方式,梯度會随着網絡的加深而消失,這意味着層的權重不能繼續更新。訓練一個深度的 RNN 到合适的準确度是相當困難的,因為不常考慮太遠的輸入之間的依賴。

為了解決RNN的梯度消失問題,提出了LSTM和GRU模型。

2.2.1 LSTM

長短記憶記憶體模型(Long-Short Term Memory,LSTM)是在1997年由Hochreiter和Schmidhuber提出的,大約在2007年應用于深度 RNN架構,在語音識别問題上取得了很明顯的效果。LSTM為RNN添加一個新的單元來學習長距離依賴。該單元用來學習一個序列什麼時候保留内部狀态、什麼時候丢棄内部狀态。LSTM是由四個單元組成:CEC、輸入門(input gate)、輸出門(output gate)和遺忘門(forget gate),而RNN隻有單個神經網絡層。

  • CEC:它是常數誤差傳送帶(Constant Error Carousel,CEC)的首字母縮寫。該單元保留上一個狀态。LSTM子產品的CEC僅僅對輸入乘以1并在下一時刻傳回該值。這是LSTM的核心元件。得益于 CEC,層的梯度不再随着神經網絡的深度而消失。
  • 輸入門和輸出門:這些單元控制開放CEC單元的時機。如果這些時間之間沒有依賴,則CEC會讓所有前面的值通過到下一狀态。這就是為什麼這種門是必要的。輸入門和輸出門隻有當需要時才打開。在其他情況下,這些門會關閉。輸入門和輸出門與其他層一樣是可訓練的,在合适的時間關閉或者打開。
  • 遺忘門:通過引入CEC和輸入/輸出門,這時就可以考慮長期依賴的問題。另一方面,有一種情況是你不需要過去存儲的記憶,因為資料模式已經改變了。在這種情況下,LSTM應該高效地清除存儲的值。遺忘門負責管理CEC中值的重置時機。遺忘門基于輸入值和過去的狀态決定清除值的時機。

圖2-8顯示LSTM的各子產品。上部的圈依次代表輸入門、遺忘門和輸出門。它們對給定輸入值進行神經元激活。點線輸入表示從過去傳入的值,其存儲曆史狀态。

帶你讀《基于浏覽器的深度學習 》之二:神經網絡架構第2章

圖2-8的四個單元構成了一個LSTM子產品,管理過去曆史的狀态。請記住,LSTM也是一個可訓練的子產品,是以我們不必考慮存儲多長的過去曆史狀态或者什麼時間清除它。這些都是通過優化過程學習到的。

2.2.2 GRU

LSTM是一個學習長依賴項的好方法。但是它的模型參數太多,計算過程很耗時。如果你可以用一個單元能以更少的計算成本獲得相同水準的性能,那一定更好。在2014年由Kyunghyun Cho等提出了 GRU(Gated Recurrent Unit),它是一個能替代LSTM的單元。GRU隻有兩個門組成:重置門和更新門。

圖2-9所示,GRU比LSTM更簡單。

帶你讀《基于浏覽器的深度學習 》之二:神經網絡架構第2章

重置門和更新門都是從輸入值和過去的狀态計算自己的輸出。重置門的輸出用來決定是否使用之前的狀态。更新門的輸出作為一個權重決定過去的狀态和目前狀态的比例。GRU訓練的參數比LSTM少很多。你能看到GRU在訓練狀态和推斷狀态時速度更快。

2.3 深度強化學習

CNN和RNN經常用在監督學習中,這意味着需要給定一些目标值和相應的輸入。強化學習是另外一個領域的機器學習。它需要給出一個模型激勵和狀态。是以強化學習模型(智能體)強調如何基于環境而執行動作,以取得最大化的預期利益,見圖2-10。

帶你讀《基于浏覽器的深度學習 》之二:神經網絡架構第2章

所有的智能體都知道給每個智能體動作的激勵和周圍的環境。例如,在迷宮中有一個智能體。智能體不知道如何到達迷宮的目的地。每走一步給一個激勵。在智能體到達目的地的過程中激勵的百分比越來越高。對于智能體來說,通過最大化總的激勵進而搜尋到正确到達目的地的路線。其中的挑戰是,智能體不知道它在将來獲得的激勵,因為這依賴智能體的動作。理論上講,這種問題可以描述成一個馬爾科夫決策過程(Markov Decision Process ,MDP)。

  • 有限的狀态集合:在迷宮中,智能體可能的位置。
  • 每步驟可能的動作集合:如果沒有牆存在,智能體可以向上/向下/向左/向右移動。
  • 根據智能體的動作進行狀态的轉移:如果智能體向上移動,智能體周圍的牆以及到目的地的距離相應地變化。
  • 激勵的折扣因子為 0»1 之間的值:它會控制時序中激勵的重要性。在将來獲得的激勵往往不如目前獲得激勵的重要。

是以智能體的目标可以表述為:

帶你讀《基于浏覽器的深度學習 》之二:神經網絡架構第2章

激勵R依賴于智能體的動作和t時刻的狀态。激勵的折扣因子為

帶你讀《基于浏覽器的深度學習 》之二:神經網絡架構第2章

。是以智能體學習需要最大化其總激勵G。它被稱為折扣總激勵。最大化總激勵的最出名的算法是Q-learning。 Q-learning算法基于映射函數(動作{激勵值函數)學習選擇哪個動作。動作激勵值函數在給定狀态和動作時,會傳回期望的總激勵。智能體應該選擇一個動作函數傳回最大化估計的總激勵。

帶你讀《基于浏覽器的深度學習 》之二:神經網絡架構第2章

公式2表示在給定狀态和動作時,會傳回期望的總激勵。S是狀态,A是t時刻的動作。這種總激勵經常用大寫的Q表示,是以也稱為 Q-learning算法。看起來相當簡單,但是我們如何得到這種魔法函數呢?

這種函數最初不能正常工作。它總是傳回相同的值或者一個随機值。該函數必須根據下面的公式基于智能體,通過探索得到的實際激勵進行更新。

帶你讀《基于浏覽器的深度學習 》之二:神經網絡架構第2章

在每一步中,函數基于上面的公式進行更新。α 是學習率,γ是乘以激勵的折扣因子。這裡我們不去深挖細節,但是衆所周知,Q-learning算法最終能夠在任意有限的MDP找到優化的方案。使用優化函數,智能體為每個可能的狀态找到最優化的動作。智能體不必每次都選擇最優的動作。随機選擇次最優的動作能夠讓搜尋空間更寬,是以智能體有更多的時間探索。

有另外一種方法實作 Q-learning 算法,代替動作{激勵值函數。你可能注意到,我們有一個函數可以直接從目前的狀态預測下一個動作,這種方法稱為政策學習。這是一種更直白的方式來推斷下一個動作,而不是僅僅計算期望的總激勵。

但是如果輸入狀态太複雜不能高效地推斷下一個動作,怎麼辦?這時可以使用深度神經網絡進行強化學習。

DQN 算法

深度Q網絡(Deep Q Network,DQN)是深度神經網絡在 Q-learning算法上的應用。它在2015年由 DeepMind提出,并在許多雅達利遊戲(Atari game)上打敗人類,比如街機Pong。DQN 接收輸入圖檔(比如,遊戲的一幀)的像素,為每個動作傳回一個估計的激勵。因為一個深度神經網絡擅長識别圖檔的字元,DQN 能找到必要的資訊來提供更好的總激勵的估計。但是 DQN 的貢獻不限于使用深度神經網絡進行強化學習。在強化學習中深度神經網絡的學習并不穩定。有兩種方法來解決 DQN 中的這種問題。

  • 經驗回放(experience replay):為了避免過拟合到特定的狀态轉移,智能體所有的狀态轉移經驗被存儲。它被用來在後續 mini-batch 方法中訓練 DQN。它不僅能提高準确度,也可以通過 mini-batch 算法加速學習。
  • 忽略幀(skipping frame):雅達利遊戲環境每秒鐘有 60 幀圖檔,但是人類在一秒鐘并不能輸入許多動作。是以這種方法會在每小時的幀上計算 DQN 的估計。它能在不降低準确度的情況下顯著地減少計算成本。

表2-2 顯示了各種學習算法玩雅達利遊戲的平均總激勵。從上表可以看出DQN明顯在一些遊戲上超越人類。基本上,DQN獲得了人類控制雅達利遊戲的水準。最著名的深度強化學習的應用是AlphaGo。AlphaGo打敗世界上不少棋手,它讓機器像人類一樣思考複雜概念,這是一個重大裡程碑。

帶你讀《基于浏覽器的深度學習 》之二:神經網絡架構第2章

2.4 本章小結

在本章中,我們介紹深度學習模型的幾種情況。每種模型都是為了解決特定領域的問題而設計的。CNN 用來解決圖像識别,比如物體探測。這種模型擅長從原始的圖檔資料集抽取有用的特征。你可以使用 RNN 處理時序資料,包括自然語言處理。這種模型已經用在許多著名的機器翻譯系統上,比如 Google 翻譯。最後但同樣重要的是,深度強化學習模型顯示了裡程碑式的結果,特别是在遊戲領域,打敗了人類。深度強化學習提醒我們人工智能的到來。一定要多留意新深度學習架構。

繼續閱讀