1. 程式人生 > >深度學習之CNN結構解析

深度學習之CNN結構解析

LENET5

 在1994年,第一個推進深度學習發展的卷積神經網路被提出,即在1988年以來有許多成功的想法被提出以後,由Yann LeCun提出命名的LeNet5

這裡寫圖片描述

 LeNet5的網路結構是非常基礎的,由於影象特徵是分佈在整個影象上,因此利用卷積以及少量引數來提取不同位置上的相同特徵。由於當時沒有GPU來幫助訓練,甚至當時的CPU也是非常慢的,因此儲存引數所需的記憶體和計算速度是一個關鍵需要突破的點,因此不同於以每個畫素作為大型多層的神經網路輸入,LeNet5認為這些不應該在第一層中使用,因為影象中畫素間是高度相關的,而單獨使用影象中的每個畫素不會利用到這些相關性。

 LeNet5的特點總結如下:

  • 卷積神經網路中卷積層包括三個部分:卷積,池化,非線性啟用函式層(tanh或者sigmoid)。
  • 使用卷積操作來提取空間特徵。
  • 使用平均池化來進行下采樣。
  • 多層神經網路(MLP)來作為最後的分類器。
  • 層之間利用稀疏連線矩陣來避免巨大的計算損失。
     這是最近提出的卷積神經網路結構的鼻祖,也鼓舞了許多人向這個領域發展。
     在1998年到2010年之間,神經網路有一段低谷期,大多數人進展緩慢,而且沒有注意到他們自己對於神經網路發展的貢獻。由於手機相機等電子裝置的發展,有了越來越多可利用的資料,並且計算能力也在逐步提升,CPU變得越來越快,GPU也成為一種通用的計算工具。上述這些促使神經網路結構的進步,儘管很慢,但是大資料和計算能力使得神經網路這個領域變的更加有趣。

DAN CIRESAN NET

 在2010年,Dan Claudiu Ciresan和Jurgen Schmidhuber 提出了第一個由GPU實現的神經網路,這個達到9層的神經網路在NVIDIA GTX 280圖形處理器上實現了前向後向傳播演算法。

ALEXNET

 在2012年,Alex Krizhevsky 提出了AlexNet,這是一個更深更寬的LeNet版本,並且贏得了當年的ImageNet競賽第一名。

這裡寫圖片描述

AlexNet是在LeNet基礎上提出的更大的神經網路,其可以被用來學習更加複雜的目標和目標的層次結構。其特點為:
* 使用了修改線性單元ReLU來作為非線性啟用函式。
* 使用了dropout理論來在訓練階段有選擇性的忽視神經元從而避免模型過擬合。
* 使用重疊的最大池化操作來避免平均池化造成的平均效果。
* 使用GPU NVIDIA GTX 580圖形處理器來減少訓練時間。
 GPU提供了相比於CPU更多的核,在訓練時間上快了將近10倍,因此可以使用更大的訓練集合更大尺寸的影象。
 AlexNet的成功開啟了一段小的改革,使得卷積神經網路加速了深度學習的發展,使其變成了更大的神經網路可以用來解決更加有用的任務。

OVERFEAT

 在2013年的12月,來自Yann LeCun的紐約大學實驗室提出了OVERFEAT,這是AlexNet的衍生版本,這篇論文提出了學習邊框的概念,但是相對於學習邊框,可能做影象分割效果更好。

VGGNET

 來自牛津大學的VGG 是第一個在每個卷積層使用大量小型3x3濾波器並結合的卷積神經網路。
 這似乎是和LeNet中使用尺寸大的卷積層來提取影象中的相同特徵的原則相違背,不同於AlexNet中使用9x9,11x11的濾波器,開始(至少第一層)濾波器的尺寸就很小,太接近LeNet中想要避免使用的1x1卷積操作。但是VGGNet的好處在於多種3x3的卷積串聯可以模仿一個有大的感受野的卷積核,比如5x5和7x7。這些想法在最近的inception和ResNet中都被使用。
這裡寫圖片描述

 VGGNet使用3x3卷積層來表達複雜特徵,注意到VGG-E中的第3,4,5塊中:256x256和512x512濾波器都被使用多次來提取更多複雜的特徵並將這些特徵進行結合,這個和有3個卷積層的512x512大型分類器有相同的效果。顯而易見VGGNet有大量的引數和學習能力,但是訓練這些網路是非常困難的,必須分成小的網路然後一個加上一個這種形式。所有的這些都因為缺乏好的正則化模型的方法,或者說由於大量的引數有點限制了提升大規模的搜尋空間。
 VGGNet在大多數層中使用大型特徵尺寸,因此可以推斷耗費了大量的執行時間,像inception bottleneck(加1x1卷積)一樣減少這些特徵的數量,將保留一些計算資源。

NETWORK-IN-NETWORK

Network-in-network中大量使用簡單的1x1卷積來保證更多卷積層的特徵結合能力。
 NIN結構在每個卷積層後使用空間多層神經網路MLP層來在另一層之前更好的結合特徵,並且再次認定1x1卷積違背了之前LeNet的原則,但是其確實以一種更好的方式(通過簡單地堆疊更多的卷積層是不可能的)結合了卷積層中的特徵,這不同於使用行畫素作為下一層的輸入,這裡1x1卷積層被用來在卷積之後在特徵圖間空間上的結合特徵,所以他們可以有效的只使用少量引數來共享這些特徵的所有畫素。
這裡寫圖片描述

 MLP層可以通過結合單個卷積特徵為一個更加複雜的group來增加這些特徵的有效性,這個想法在之後的ResNet和inception還有他們的衍生網路中都被使用。
 NIN也使用平均池化來作為最後分類器的一部分,這樣做是為了在分類之前將網路中多個輸入影象產生的響應做平均。

GOOGLENET

 來自谷歌的Christian Szegedy旨於減少深度神經網路中的計算負擔,因此提出了GoogLeNet the first inception結構。
 從2014年秋天直到現在,深度學習模型在分類影象和視訊幀內容上變得有用,鑑於這些技術理論的有用性,像Google這樣的網際網路巨頭們對其能在伺服器架構上高效部署非常感興趣。
 Christian想了很多減少深度神經網路計算負擔的方法,他和他的團隊想出了inception結構:
這裡寫圖片描述

 乍一看就是1x1,3x3,5x5卷積濾波器的並行結合,但是這個inception結構在上述昂貴的並行塊之前使用了1x1卷積塊(NIN)來減少特徵的數量,這通常被叫做”bottleneck”。
 GoogLeNet在初始層中沒有使用inception結構,並且與NIN相同使用平均池化加上softmax來作為最後的分類器,這個分類器相對於AlexNet和VGGNet的操作次數很少,這得益於一個非常有效的網路設計

BOTTLENECK LAYER

 受到NIN的啟發,inception的bottleneck層減少了每層的特徵的數量和運算元,因此時間損耗不多。在將資料傳送到昂貴的卷積操作之前,特徵的數量就減少了4倍,這使得節省了大量的計算損耗,這就是這個結構的成功之處。
 假設有256個特徵輸入,如果只執行3x3卷積,那麼產生256x256x3x3(589000)次乘加操作,可能超過了我們本身擁有的計算負擔,在Google伺服器上執行此層需要0.5毫秒。與此相反,我們想要減少特徵的數量的話,可以只卷積64(256/4)大小的尺寸,即在所有inception分支上都使用64大小卷積,那麼就要利用到1x1卷積濾波器來再次使64變成256大小,現在運算元變成:
* 256x64x1x1=16000s
* 64x64x3x3=36000s
* 64x256x1x1=16000s
 上述總共70000相對於最開始的600000的運算元,少了將近10倍。
 儘管我們減少了運算元,我們也沒有丟失這層的泛化能力。事實上,bottleneck層已經在ImageNet資料集上證明有最好的效果。比如,在後來的ResNet結構中也用到了。
 成功的原因是因為輸入特徵間的相關性,因此這些冗餘通過結合合適的1x1卷積濾波器來消除。然後,在卷積小數量的特徵之後,他們可以再一次在下一層中擴充套件為有意義的組合。

INCEPTION V3(AND V2)

 Christian和他的團隊在2015年2月提出了Batch-normalized inception,被稱為inception V2。Batch-normalization計算一層的輸出的所有特徵圖的均值和標準差,然後用這些值來歸一化他們的響應,使得所有神經元圖都在相同的範圍內響應,以及零均值,這樣在下一層訓練不必學習輸入資料的偏移,可以只專注於怎麼最好的結合特徵。
 在2015年12月,他們提出了一個新的inception模型及其網路結構的版本,這篇文章更好的解釋了原始GoogLeNet結構,並且在設計選擇上給出了更多的細節:
* 最大化進入網路的資訊流,謹慎地構建網路來平衡其寬度和深度,在每次池化之前,增加特徵圖的數量。
* 當深度增加時,特徵的數量或者層的寬度也同時增加。
* 在每層增加寬度來在下一層之前增加特徵的結合。
* 只使用3x3卷積。5x5,7x7都可以如下圖一樣分解成3x3的串聯。

  • 新的inception結構因此變成:

    這裡寫圖片描述
  • inception結構也可以通過在執行inception計算時提供池化操作來減少資料的尺寸,這與的執行卷積操作並行執行一個簡單的池化層是基本相同的。

    這裡寫圖片描述

 inception仍然使用池化操作加上softmax來作為最後的分類器。

RESNET

 在2015年12月,與inception V3同一時間,ResNet被提出,其有一個簡單的想法:在兩個卷積層的輸出之後加上一個來自輸入的旁路。

這裡寫圖片描述

 這個結構相似於一個老想法,但是這裡的旁路通過了兩個卷積層並且運用到了一個更大的規模的神經網路上。用到兩層卷積層是關鍵性直覺,因為旁路只通過一個卷積層並沒有帶來多大效能上的提升。兩層可以被看作一個小型的分類器,或者Network-in-Network。這也是第一次層數大於100層甚至1000層。ResNet有非常大數量的層數,因此也利用了相似於inception結構中的bottleneck層。

這裡寫圖片描述

 這層減少了每層的特徵數量通過首先使用1x1卷積得到小的輸出(通常是輸入的1/4),然後使用3x3卷積,然後再次使用1x1卷積來得到一個大數量的特徵,就像inception結構中一樣。這使得計算量低的同時提供豐富的特徵組合。
 ResNet在輸入時使用相對簡單的初始層:一個帶池化層的7x7卷積層,這與inception V3 V4相反,更加複雜且不夠直觀。
 ResNet也使用了池化層架上softmax來作為最後的分類器。
* ResNet可以被看作並行又串聯的模組,通過將輸入看作同時進入多個模組,而每個模組的輸出串聯連線。
* ResNet也可以被看作並行或者序列模組的多種組合
* ResNet通常在相對小的深度(20~30層)的塊中進行操作,表現為並行而不是整個網路長度的串聯。
* ResNet,當輸出傳到輸入時,就像RNN一樣了,網路可以看作一個更好的生物似真的腦皮層模型

INCEPTION V4

 Christian和團隊再一次提出了一個inception的新版本。這個inception結構相似於inception V3。

這裡寫圖片描述

 他們結合了inception結構和ResNet模組。

這裡寫圖片描述

 在我看來,這一次的解決方案不太優雅並且更復雜,但也是透明的啟發式。很難理解為什麼這麼選擇,作者也很難理解這些選擇。

SQUEEZENET

SqueezeNet是最近被提出的,他是一個借鑑ResNet和inception中許多概念的re-hash。一個好的結構的設計在不需要複雜的壓縮演算法的情況下可以提供小的網路尺寸和引數。

ENET

 結合最近的網路結構的所有特徵到一個更加有效輕量的網路,並且使用更少的引數和計算來實現最好的結果,這就是ENet
 ENet是一個編碼器加上解碼器的網路,編碼器就是常規的CNN設計用來分類,同時解碼器是一個上取樣網路,設計用來傳播分類結果返回到原始影象大小來進行分割。
 ENet在一開始就旨在使用盡可能少的資源,因此他實現了這樣一個佔記憶體小,編碼器和解碼器一起只佔用了具有fp16精度的0.7MB的網路,即使只用到了這麼小的記憶體,但是ENet與其他上述純神經網路解決分割問題的精度相同。

AN ANALYSIS OF MODULES

 一個CNN模組的系統評估
* 使用ELU非線性啟用函式而不是用batchnorm或ReLU。
* 應用一個學習到的RGB的顏色轉換空間。
* 使用線性學習率衰減策略。
* 使用池化操作和最大池化。
* 使用mini-batch尺寸為128或者256,如果對於你的GPU還大的話,適當減少對應與batch尺寸的學習率。
* 使用全連線層並且平均來作為作為最後的決策結果。
* 當增大訓練集尺寸的時候,檢查是否能達到plateau,資料的乾淨度比其尺寸更加重要。
* 如果不能增加輸入影象的尺寸,減少卷積層的移動步長能大約達到相同的效果。
* 如果你的網路結構和像GoogLeNet一樣複雜且高度優化,那麼請謹慎修改。

XCEPTION

Xception在inception結構上做了優化,並且有一個更加簡單優雅的網路結構:

這裡寫圖片描述
這裡寫圖片描述

 這個網路結構有36個卷積階段,使得其相似於ResNet-34,但是模型和編碼比ResNet簡單並且相比於inception V4更好理解。

FRACTALNET

FractalNet使用一個遞迴結構,是一個更通用的ResNet的衍生版本。

相關推薦

深度學習CNN結構解析

LENET5  在1994年,第一個推進深度學習發展的卷積神經網路被提出,即在1988年以來有許多成功的想法被提出以後,由Yann LeCun提出命名的LeNet5。  LeNet5的網路結構是非常基礎的,由於影象特徵是分佈在整個影象上,因此利用卷

深度學習cnn中第一層卷積層特徵的顯示

一、前言 本篇文章主要介紹了CNN網路中卷積層的計算過程,欲詳細瞭解CNN的其它資訊可以參考:技術向:一文讀懂卷積神經網路。 卷積神經網路(CNN)是區域性連線網路。相對於全連線網路其最大的特點就是:區域性連線性和權值共享性。因為對一副影象中的某個畫素p來說,一般離畫

Deep Learning學習 CNN程式碼解析(MATLAB)

MATLAB實現CNN一般會用到deepLearnToolbox-master。但是根據Git上面的說明,現在已經停止更新了,而且有很多功能也不太能夠支援,具體的請大家自習看一看Git中的README。 deepLearnToolbox-master是一個深度

深度學習CNN實現

CNN 實現 CNN相比與傳統神經網路,主要區別是引入了卷積層和池化層 卷積是使用tf.nn.conv2d, 池化使用tf.nn.max_pool CNN之keras實現 import numpy as np np.random.seed(201

乾貨 | 深度學習CNN反向傳播演算法詳解

微信公眾號 關鍵字全網搜尋最新排名 【機器學習演算法】:排名第一 【機器學習】:排名第一 【Python】:排名第三 【演算法】:排名第四 前言 在卷積神經網路(CNN)前向傳播演算法(乾貨 | 深度學習之卷積神經網路(CNN)的前向傳播演算法詳解)中對CNN的前向傳播演算法做了總結,基於CNN前向傳播演

[深度學習CNN] CNN的發展史 LeNet、AlexNet、GoogLeNet、VGG、ResNet

CNN的發展史        上一篇回顧講的是2006年Hinton他們的Science Paper,當時提到,2006年雖然Deep Learning的概念被提出來了,但是學術界的大家還是表示不服。當時有流傳的段子是Hinton的學生在臺上講paper時,臺下的機器學習大牛們不屑一顧,質問你們的東西有理

乾貨 | 深度學習卷積神經網路(CNN)的模型結構

微信公眾號 關鍵字全網搜尋最新排名 【機器學習演算法】:排名第一 【機器學習】:排名第一 【Python】:排名第三 【演算法】:排名第四 前言 在前面我們講述了DNN的模型與前向反向傳播演算法。而在DNN大類中,卷積神經網路(Convolutional Neural Networks,以下簡稱CNN)是最

深度學習神經網絡(CNN/RNN/GAN) 算法原理+實戰

依次 正向 重要 深入 tun 機器學習算法 及其 卷積 -m 第1章 課程介紹 深度學習的導學課程,主要介紹了深度學習的應用範疇、人才需求情況和主要算法。對課程章節、課程安排、適用人群、前提條件以及學習完成後達到的程度進行了介紹,讓同學們對本課程有基本的認識。 第2章

深度學習神經網路(CNN/RNN/GAN)演算法原理+實戰目前最新

第1章 課程介紹 深度學習的導學課程,主要介紹了深度學習的應用範疇、人才需求情況和主要演算法。對課程章節、課程安排、適用人群、前提條件以及學習完成後達到的程度進行了介紹,讓同學們對本課程有基本的認識。 1-1 課程導學 第2章 神經網路入門 本次實戰課程的入門課程。對機器學習和深度學習做了引入

深度學習TensorFlow使用CNN測試Cifar-10資料集(Python實現)

題目描述: 1. 對Cifar-10影象資料集,用卷積神經網路進行分類,統計正確率。 2.選用Caffe, Tensorflow, Pytorch等開 源深度學習框架之一,學會安裝這些框架並呼叫它們的介面。 3.直接採用這些深度學習框架針對Cifar-10資料集已訓練好的網路模型,只

深度學習物體檢測(一)R-CNN

作者Rgb 在這之前大部分物體檢測演算法都是基於傳統的影象處理方法,這是第一篇將深度學習用到物體檢測上的文章,直接影響是2012年ALEXNET在比賽中的重大成功。 簡單來說,RCNN使用以下四步實現目標檢測: a. 在影象中用slective search 方法 確定

深度學習PyTorch —— CNN實現MNIST手寫數字分類

​# 運用CNN分析MNIST手寫數字分類 import torch import numpy as np from torch.utils.data import DataLoader from torchvision.datasets import mnist fro

深度學習在iOS上執行CNN

1 引言 作為曾經的iOS開發者,在研究深度學習的時候,總有一個想法就是在iPhone上執行深度學習,不管是在手機上訓練還是利用訓練好的資料進行測試。 因為iOS的開發環境支援C++,因此,只要你的程式碼是C/C++,本質上就可以在iOS上執行。 怎麼才能

深度學習神經網路(CNN/RNN/GAN) (演算法原理+實戰) 完整版下載

第1章 課程介紹 深度學習的導學課程,主要介紹了深度學習的應用範疇、人才需求情況和主要演算法。對課程章節、課程安排、適用人群、前提條件以及學習完成後達到的程度進行了介紹,讓同學們對本課程有基本的認識。 第2章 神經網路入門 本次實戰課程的入門課程。對機器學習和深

深度學習 七 【卷積神經網路 CNN

1.CNN的應用 如果你能訓練人工智慧機器人唱歌,幹嘛還訓練它聊天?在 2017 年 4 月,研究人員使用 WaveNet 模型的變體生成了歌曲。原始論文和演示可以在 此處 找到。 瞭解 Facebook 的 創新 CNN 方法(Facebook) ,

深度學習卷積神經網路CNN及tensorflow程式碼實現示例詳細介紹

一、CNN的引入 在人工的全連線神經網路中,每相鄰兩層之間的每個神經元之間都是有邊相連的。當輸入層的特徵維度變得很高時,這時全連線網路需要訓練的引數就會增大很多,計算速度就會變得很慢,例如一張黑白的 28×28 的手寫數字圖片,輸入層的神經元就有784個,如下圖所示:

乾貨 | 深度學習卷積神經網路(CNN)的前向傳播演算法詳解

微信公眾號 關鍵字全網搜尋最新排名 【機器學習演算法】:排名第一 【機器學習】:排名第一 【Python】:排名第三 【演算法】:排名第四 前言 在(乾貨 | 深度學習之卷積神經網路(CNN)的模型結構)中,我們對CNN的模型結構做了總結,這裡我們就在CNN的模型基礎上,看看CNN的前向傳播演算法是什麼樣

深度學習神經網路(CNN/RNN/GAN) (演算法原理+實戰)完整版

第1章 課程介紹 深度學習的導學課程,主要介紹了深度學習的應用範疇、人才需求情況和主要演算法。對課程章節、課程安排、適用人群、前提條件以及學習完成後達到的程度進行了介紹,讓同學們對本課程有基本的認識。 1-1 課程導學 第2章 神經網路入門 本次實戰課程的入門課程。對機器學

深度學習卷積神經網路CNN及tensorflow程式碼實現示例

一、CNN的引入 在人工的全連線神經網路中,每相鄰兩層之間的每個神經元之間都是有邊相連的。當輸入層的特徵維度變得很高時,這時全連線網路需要訓練的引數就會增大很多,計算速度就會變得很慢,例如一張黑白的 28×28 的手寫數字圖片,輸入層的神經元就有784個,如下圖

深度學習影象分類模型AlexNet結構分析和tensorflow實現

在ImageNet上的影象分類challenge上,Hinton和他的學生Alex Krizhevsky提出的AlexNet網路結構模型贏得了2012屆的冠軍,重新整理了Image Classification的機率。因此,要研究CNN型別深度學習模型在影象分