## 第2章多層網絡
本章簡要概述了計算機視覺中應用最突出的多層結構。值得注意的是,雖然本章涵蓋了文獻中最重要的貢獻,但它不會對這些結構進行全面的介紹,因為這樣的介紹可以在別處獲得(例如參考文獻[17,56,90])。相反,本章的目的是為文檔的其余部分奠定基礎,并詳細介紹和討論目前對應用于視覺信息處理的卷積網絡的理解。
### 2.1多層架構
在最近成功開發基于深度學習的網絡之前,用于識別的最先進的計算機視覺系統依賴于兩個獨立但互補的步驟。首先,通過一組手工設計的操作(例如。具有基組,局部或全局編碼方法的卷積)將輸入數據轉換成合適的形式。輸入引起的變換通常需要找到輸入數據的緊湊和/或抽象表示,同時根據手頭的任務注入若干不變性。這種轉換的目標是以一種更容易被分類器分開的方式改變數據。其次,變換后的數據用于訓練某種分類器(例如支持向量機)來識別輸入信號的內容。使用的任何分類器的性能通常都會受到使用的轉換的嚴重影響。
具有學習的多層體系結構通過提出不僅僅使用分類器來學習,而且還直接從數據中學習所需的轉換操作,從而對問題產生了不同的展望。這種學習形式通常被稱為表示學習[7,90],當在深層多層體系結構的前后層結構中使用時,稱為深度學習。
多層體系結構可以定義為允許從輸入數據中提取多個抽象級別有用信息的計算模型。通常,多層架構被設計為放大較高層輸入的重要成分,同時對較不顯著的變化變得越來越穩健。大多數多層架構交替使用線性和非線性函數堆疊簡單構建模塊。多年來,學者們提出了多種多樣的多層架構,本節將介紹計算機視覺應用中最突出的這種架構。特別是由于顯著性,人工神經網絡架構將成為焦點。為了簡潔起見,下面將更簡單地將這種網絡稱為神經網絡。
#### 2.1.1神經網絡
典型的神經網絡架構由輸入層,輸出層,和多個隱藏層組成的堆棧組成,其中每層由多個單元或單元組成,如圖2.1所示。通常,每個隱藏單元接收來自前一層所有單元的輸入,其輸出由輸入的加權組合與非線性計算得到,計算公式見(2.1)
(2.1)
其中,是控制輸入單元和隱藏單元之間連接強度的權重系數,是隱藏單元的微小偏移量,是飽和非線性函數,如Sigmoid函數。

圖2.1:典型神經網絡架構的圖示。復制自文獻[17]。
深度神經網絡可以看作是Rosenblatt所提出的感知器[122]和多層感知器[123]的現代版實例。雖然,神經網絡模型已存在多年(神經網絡由1960年代首次提出),它們直到最近才被大量使用。神經網絡的沉寂多年原因復雜。最初,實驗的負面結果表明感知器無法對XOR這樣的簡單操作進行建模,這一失敗在一定時間內阻礙了對感知器的進一步研究,直到感知器由單層推廣到多層[106]。此外,缺乏適當的訓練算法亦使得研究進展緩慢,直到反向傳播算法的普及[125]。然而,阻礙多層神經網絡發展的更大障礙是它們依賴于非常大量的參數,這反過來意味著多層神經網絡需要大量的訓練數據和計算資源來支持參數的學習。
通過使用受限玻爾茲曼機(RBM)[68],深度神經網絡領域在分層無監督預訓練方面取得重大進展。受限玻爾茲曼機可以看作受限只允許前饋連接的兩層神經網絡。當應用于圖像識別時,用于訓練RBM的無監督學習方法可以歸納為三個步驟。首先,每個像素作為輸入,隨機權重設為,偏差為,每個單位的隱藏狀態值為的概率設為。概率由式(2.2定義)
(2.2)
其中。其次,一旦基于等式2.2隨機地設置了所有隱藏狀態,通過以概率將每個像素設置為以嘗試重建圖像。第三,通過基于由式(2.3)給出的重建誤差更新權重和偏差來校正隱藏單元
(2.3)
其中是學習率,是像素和隱藏單元在一起的次數。整個迭代過程最大重復為次,或當直到誤差下降到預設閾值時迭代結束。當完成一層的訓練后,該層的輸出將作為層次結構中下一層的輸入。下一層亦將循環該過程。通常,在完成所有網絡層的預訓練之后,使用梯度下降,通過誤差反向傳播進一步對標記數據進行微調[68]。通過使用該分層無監督預訓練方法,深度神經網絡不需要大量標記數據亦可進行訓練,因為無監督RBM預訓練提供了用于經驗上有用的初始化各種網絡參數的方式。
依賴于堆疊RBM的神經網絡首先成功地在人臉識別應用中作為一種降維方法進行部署[69],其中它們被用作一種自動編碼器。簡而言之,自動編碼器可以定義為由兩個主要部分組成的多層神經網絡:首先,其中編碼器將輸入數據轉換為特征向量;第二,解碼器將生成的特征向量映射回輸入空間;見圖2.2。通過最小化輸入與其重建版本之間的、誤差來學習自動編碼器的參數。

圖2.2:典型自編碼器網絡的結構。復制自文獻[17]。
除了基于RBM的自動編碼器之外,后來學者們又提出了幾種類型的自動編碼器。每個自動編碼器都引入了一種不同的正則化方法,即使在執行不同的不變性時,也能阻止網絡學習不重要的解決方案。主要范例包括稀疏自動編碼器(SAE)[8],去噪自動編碼器(DAE)[141,142]和壓縮自動編碼器(CAE)[118]。稀疏自動編碼器[8]允許中間表示的大小(即由編碼器部分生成的)大于輸入的大小,同時通過懲罰負輸出來強制實現稀疏。相比之下,去噪自動編碼器[141,142]通過嘗試從人為損壞的版本重建干凈的輸入來改變重建本身的目標,其目的是學習穩健的表示能力。類似地,壓縮自動編碼器[118]通過進一步懲罰對注入噪聲最敏感的單元來構建去噪自動編碼器。各種類型自動編碼器的更詳細介紹可以在其他地方找到,如參考文獻[7]。
#### 2.1.2循環神經網絡
在解決依賴于順序輸入的任務時,其中一種最成功的多層架構是循環神經網絡(RNN)[9]。如圖2.3所示,RNN可以看作是一種特殊的神經網絡,其中每個隱藏單元從當前時間步驟觀察到的數據以及前一時間點的狀態中獲取輸入。 RNN的輸出定義為
(2.4)
其中是非線性擠壓函數,和是控制當前和過去信息相對重要性的網絡參數。

圖2.3:標準回歸神經網絡的工作流程說明。每個RNN單元在當前時間幀處獲取新輸入,并且從之前的時間步長和當前單元的新輸出可根據式(2.4)計算,并可被輸入至多層RNN的另一層處理中。
雖然RNN看似是強大的架構,但它們的主要問題之一是它們對長期依賴性建模的能力有限。這種限制歸咎于由于在通過多個時間步驟傳播誤差時可能發生的梯度爆炸或者消失導致的訓練困難[9]。特別是,在訓練期間,反向傳播的梯度將與從當前時間步長一直倒退到初始時間步長的網絡權重相乘。因此,由于這種乘法累加,權重可以對傳播的梯度具有重要的影響。如果權重很小,則梯度消失,而較大的權重導致梯度爆炸。為了解決這個難題,學者們提出了長期短期記憶(LSTM)[70]。
LSTM是配備了存儲或者記憶器件的循環網絡,如圖2.4所示,它可以隨時間累積信息。 LSTM的存儲器單元可被門控,以便允許從中讀寫信息。值得注意的是,LSTM還包含一個遺忘門,允許網絡在不再需要時擦寫信息。 LSTM由三個不同的門(輸入門,遺忘門和輸出門)以及存儲器單元狀態控制。輸入門由當前輸入和先前狀態控制,計算公式定義為
(2.5)
其中,,,分別表示控制與輸入門的連接的權重和偏移量,通常是S形函數。遺忘門同樣被定義為
(2.6)
它由相應的權重和偏差,,控制。可以說,LSTM最重要的方面是它可以應對梯度消失和爆炸漸變的挑戰。在確定存儲器單元的狀態時,通過遺忘門和輸入門狀態的相加組合來實現該能力,該狀態又控制信息是否經由輸出門傳遞到另一個單元。具體地,以兩個步驟計算單元狀態。首先,根據估計候選結構狀態
(2.7)
其中通常是雙曲正切函數。其次,最終的單元狀態最終由當前估計的單元狀態和先前的單元狀態控制,由輸入和遺忘門調制根據式(2.8)計算得到
(2.8)
最后,使用單元的狀態以及當前和先前的輸入,輸出門的值和LSTM單元的輸出根據
(2.9)
其中
(2.10)

圖2.4:典型LSTM單元的圖示。該單元在當前時間輸入,從之前的時間獲取輸入,并返回下一次輸入的輸出。 LSTM單元的最終輸出由輸入門,遺忘門和輸出門以及存儲單元狀態控制,它們由分別式(2.5),(2.6),(2.9)和(2.8)定義。本圖復制自文獻[33]。
#### 2.1.3卷積網絡
卷積網絡(ConvNets)是一種特別適用于計算機視覺應用的特殊類型神經網絡,因為它們能夠通過本地操作進行分層抽象表示。兩個關鍵的設計理念推動計算機視覺中卷積體系結構的成功。首先,卷積網絡利用圖像的2D結構以及鄰域內的像素通常高度相關的事實。因此,卷積網絡避免在所有像素單元之間使用一對一連接(即大多數神經網絡的情況一樣),這有利于使用分組本地連接。此外,卷積網絡架構依賴于特征共享,因此每個通道(或輸出特征圖)由在所有位置使用相同濾波器的卷積生成,結構如圖2.5所述。卷積網絡的這一重要特性,使得其與標準神經網絡相比依賴于更少參數的架構。其次,卷積網絡還引入了一個池化步驟,該步驟提供了一定程度的平移不變性,使得架構受到位置的微小變化的影響較小。值得注意的是,由于網絡感知字段的大小增加,池化還允許網絡逐漸看到輸入的較大部分。接收場大小的增加(加上輸入分辨率的降低)允許網絡在網絡深度增加時表達輸入的更抽象的特征。例如,對于對象識別的任務,卷積網絡層首先將邊緣聚焦到對象部分以最終覆蓋層次結構中較高層的整個對象。

圖2.5:標準卷積網絡結構的圖示。本圖復制自文獻[93]
卷積網絡的體系結構很大程度上受到了視覺皮層中處理過程的啟發,如Hubel和Wiese在文獻l [74]的開創性工作所述(這將在第3章中進一步討論)。事實上,最早的卷積網絡實例似乎是Fukushima在文獻[49]中提出的神經認知機(Neocognitron),它也依賴于本地連接,其中每個特征圖最大限度地響應特定特征類型。 神經認知機由一系列層組成,其中每層交替出現S細胞單元和復雜細胞單位,它們松散地模仿生物簡單和復雜細胞中發生的過程,分別如圖2.6所示。簡單細胞單元執行類似于局部卷積的操作,然后執行線性整流單元(ReLU)非線性函數,而復雜單元執行類似于平均合并的操作。該模型還包括一個分裂的非線性過程,以實現類似于當代卷積網絡中規范化的過程。

圖2.6:神經認知機結構圖。本圖復制自文獻[49]
與大多數標準卷積網絡架構(例如[91,88])相反,神經認知機不需要標記數據進行學習,因為它是基于自組織映射設計的,通過重復學習連續層之間的局部連接一組激勵圖像的演示。具體地,訓練神經認知機以學習輸入特征圖和簡單細胞層之間的連接(簡單細胞層和復雜細胞層之間的連接是預先固定的),并且學習過程可以在兩個步驟中概括地概括。首先,每次在輸入處呈現新的激勵時,選擇最大響應它的簡單細胞作為該激勵類型的代表性細胞。其次,每次響應相同的輸入類型時,輸入和那些代表性單元之間的連接就會得到加強。值得注意的是,簡單的單元層被組織在不同的組或平面中,使得每個平面僅響應一種刺激類型(即類似于現代卷積網絡架構中的特征映射)。對神經認知機的后續擴展包括監督學習的允許[51]以及自上而下的注意力機制[50]。
在最近計算機視覺應用中部署的大多數卷積網絡架構都受到LeCun在1998年所提出的成功架構的啟發,現在稱為LeNet,用于手寫識別[91]。如關鍵文獻[77,93]所述,經典卷積網絡由四個基本處理層組成:(i)卷積層,(ii)非線性或整流層,(iii)歸一化層和(iv)池化層。如上所述,這些成分主要存在于神經認知機中。 LeNet的一個關鍵附加功能是結合反向傳播,以便相對有效地學習卷積參數。
雖然允許優化架構的卷積網絡,與完全連接的神經網絡相比,所需要的參數要少得多,但它們的主要缺點仍然在于它們嚴重依賴學習和標記數據。這種數據依賴性可能是直到2012年卷積網絡未被廣泛使用的主要原因之一,因為大型ImageNet數據集的可用性[126]和相應的計算資源使得學者恢復對卷積網絡的興趣成為可能[88]。 卷積網絡在ImageNet上的成功引發了各種卷積網絡架構研究的突飛猛進,并且該領域的大多數貢獻僅僅基于卷積網絡的基本構建塊的不同變化,稍后將在2.2節中討論。
- TensorFlow 1.x 深度學習秘籍
- 零、前言
- 一、TensorFlow 簡介
- 二、回歸
- 三、神經網絡:感知器
- 四、卷積神經網絡
- 五、高級卷積神經網絡
- 六、循環神經網絡
- 七、無監督學習
- 八、自編碼器
- 九、強化學習
- 十、移動計算
- 十一、生成模型和 CapsNet
- 十二、分布式 TensorFlow 和云深度學習
- 十三、AutoML 和學習如何學習(元學習)
- 十四、TensorFlow 處理單元
- 使用 TensorFlow 構建機器學習項目中文版
- 一、探索和轉換數據
- 二、聚類
- 三、線性回歸
- 四、邏輯回歸
- 五、簡單的前饋神經網絡
- 六、卷積神經網絡
- 七、循環神經網絡和 LSTM
- 八、深度神經網絡
- 九、大規模運行模型 -- GPU 和服務
- 十、庫安裝和其他提示
- TensorFlow 深度學習中文第二版
- 一、人工神經網絡
- 二、TensorFlow v1.6 的新功能是什么?
- 三、實現前饋神經網絡
- 四、CNN 實戰
- 五、使用 TensorFlow 實現自編碼器
- 六、RNN 和梯度消失或爆炸問題
- 七、TensorFlow GPU 配置
- 八、TFLearn
- 九、使用協同過濾的電影推薦
- 十、OpenAI Gym
- TensorFlow 深度學習實戰指南中文版
- 一、入門
- 二、深度神經網絡
- 三、卷積神經網絡
- 四、循環神經網絡介紹
- 五、總結
- 精通 TensorFlow 1.x
- 一、TensorFlow 101
- 二、TensorFlow 的高級庫
- 三、Keras 101
- 四、TensorFlow 中的經典機器學習
- 五、TensorFlow 和 Keras 中的神經網絡和 MLP
- 六、TensorFlow 和 Keras 中的 RNN
- 七、TensorFlow 和 Keras 中的用于時間序列數據的 RNN
- 八、TensorFlow 和 Keras 中的用于文本數據的 RNN
- 九、TensorFlow 和 Keras 中的 CNN
- 十、TensorFlow 和 Keras 中的自編碼器
- 十一、TF 服務:生產中的 TensorFlow 模型
- 十二、遷移學習和預訓練模型
- 十三、深度強化學習
- 十四、生成對抗網絡
- 十五、TensorFlow 集群的分布式模型
- 十六、移動和嵌入式平臺上的 TensorFlow 模型
- 十七、R 中的 TensorFlow 和 Keras
- 十八、調試 TensorFlow 模型
- 十九、張量處理單元
- TensorFlow 機器學習秘籍中文第二版
- 一、TensorFlow 入門
- 二、TensorFlow 的方式
- 三、線性回歸
- 四、支持向量機
- 五、最近鄰方法
- 六、神經網絡
- 七、自然語言處理
- 八、卷積神經網絡
- 九、循環神經網絡
- 十、將 TensorFlow 投入生產
- 十一、更多 TensorFlow
- 與 TensorFlow 的初次接觸
- 前言
- 1.?TensorFlow 基礎知識
- 2. TensorFlow 中的線性回歸
- 3. TensorFlow 中的聚類
- 4. TensorFlow 中的單層神經網絡
- 5. TensorFlow 中的多層神經網絡
- 6. 并行
- 后記
- TensorFlow 學習指南
- 一、基礎
- 二、線性模型
- 三、學習
- 四、分布式
- TensorFlow Rager 教程
- 一、如何使用 TensorFlow Eager 構建簡單的神經網絡
- 二、在 Eager 模式中使用指標
- 三、如何保存和恢復訓練模型
- 四、文本序列到 TFRecords
- 五、如何將原始圖片數據轉換為 TFRecords
- 六、如何使用 TensorFlow Eager 從 TFRecords 批量讀取數據
- 七、使用 TensorFlow Eager 構建用于情感識別的卷積神經網絡(CNN)
- 八、用于 TensorFlow Eager 序列分類的動態循壞神經網絡
- 九、用于 TensorFlow Eager 時間序列回歸的遞歸神經網絡
- TensorFlow 高效編程
- 圖嵌入綜述:問題,技術與應用
- 一、引言
- 三、圖嵌入的問題設定
- 四、圖嵌入技術
- 基于邊重構的優化問題
- 應用
- 基于深度學習的推薦系統:綜述和新視角
- 引言
- 基于深度學習的推薦:最先進的技術
- 基于卷積神經網絡的推薦
- 關于卷積神經網絡我們理解了什么
- 第1章概論
- 第2章多層網絡
- 2.1.4生成對抗網絡
- 2.2.1最近ConvNets演變中的關鍵架構
- 2.2.2走向ConvNet不變性
- 2.3時空卷積網絡
- 第3章了解ConvNets構建塊
- 3.2整改
- 3.3規范化
- 3.4匯集
- 第四章現狀
- 4.2打開問題
- 參考
- 機器學習超級復習筆記
- Python 遷移學習實用指南
- 零、前言
- 一、機器學習基礎
- 二、深度學習基礎
- 三、了解深度學習架構
- 四、遷移學習基礎
- 五、釋放遷移學習的力量
- 六、圖像識別與分類
- 七、文本文件分類
- 八、音頻事件識別與分類
- 九、DeepDream
- 十、自動圖像字幕生成器
- 十一、圖像著色
- 面向計算機視覺的深度學習
- 零、前言
- 一、入門
- 二、圖像分類
- 三、圖像檢索
- 四、對象檢測
- 五、語義分割
- 六、相似性學習
- 七、圖像字幕
- 八、生成模型
- 九、視頻分類
- 十、部署
- 深度學習快速參考
- 零、前言
- 一、深度學習的基礎
- 二、使用深度學習解決回歸問題
- 三、使用 TensorBoard 監控網絡訓練
- 四、使用深度學習解決二分類問題
- 五、使用 Keras 解決多分類問題
- 六、超參數優化
- 七、從頭開始訓練 CNN
- 八、將預訓練的 CNN 用于遷移學習
- 九、從頭開始訓練 RNN
- 十、使用詞嵌入從頭開始訓練 LSTM
- 十一、訓練 Seq2Seq 模型
- 十二、深度強化學習
- 十三、生成對抗網絡
- TensorFlow 2.0 快速入門指南
- 零、前言
- 第 1 部分:TensorFlow 2.00 Alpha 簡介
- 一、TensorFlow 2 簡介
- 二、Keras:TensorFlow 2 的高級 API
- 三、TensorFlow 2 和 ANN 技術
- 第 2 部分:TensorFlow 2.00 Alpha 中的監督和無監督學習
- 四、TensorFlow 2 和監督機器學習
- 五、TensorFlow 2 和無監督學習
- 第 3 部分:TensorFlow 2.00 Alpha 的神經網絡應用
- 六、使用 TensorFlow 2 識別圖像
- 七、TensorFlow 2 和神經風格遷移
- 八、TensorFlow 2 和循環神經網絡
- 九、TensorFlow 估計器和 TensorFlow HUB
- 十、從 tf1.12 轉換為 tf2
- TensorFlow 入門
- 零、前言
- 一、TensorFlow 基本概念
- 二、TensorFlow 數學運算
- 三、機器學習入門
- 四、神經網絡簡介
- 五、深度學習
- 六、TensorFlow GPU 編程和服務
- TensorFlow 卷積神經網絡實用指南
- 零、前言
- 一、TensorFlow 的設置和介紹
- 二、深度學習和卷積神經網絡
- 三、TensorFlow 中的圖像分類
- 四、目標檢測與分割
- 五、VGG,Inception,ResNet 和 MobileNets
- 六、自編碼器,變分自編碼器和生成對抗網絡
- 七、遷移學習
- 八、機器學習最佳實踐和故障排除
- 九、大規模訓練
- 十、參考文獻