導航:首頁 > 編程大全 > 神經網路圖片

神經網路圖片

發布時間:2024-09-11 06:23:31

Ⅰ 手機上運行的深度神經網路模型-MobileNet

文章引用自《 從MobileNet看輕量級神經網路的發展 》,詳情請點擊原文觀看

前  言 

隨著深度學習的火熱,計算機視覺領域內的卷積神經網路模型也層出不窮。從1998年的LeNet,到2012年引爆深度學習熱潮的AlexNet,再到後來2014年的VGG,2015年的ResNet,深度學習網路模型在圖像處理中應用的效果越來越好。神經網路體積越來越大,結構越來越復雜,預測和訓練需要的硬體資源也逐步增多,往往只能在高算力的伺服器中運行深度學習神經網路模型。移動設備因硬體資源和算力的限制,很難運行復雜的深度學習網路模型。

深度學習領域內也在努力促使神經網路向小型化發展。在保證模型准確率的同時體積更小,速度更快。到了2016年直至現在,業內提出了SqueezeNet、ShuffleNet、NasNet、MnasNet以及MobileNet等輕量級網路模型。這些模型使移動終端、嵌入式設備運行神經網路模型成為可能。而MobileNet在輕量級神經網路中較具代表性。

谷歌在2019年5月份推出了最新的MobileNetV3。新版MobileNet使用了更多新特性,使得MobileNet非常具有研究和分析意義,本文將對MobileNet進行詳細解析。

MobileNet的優勢

MobileNet網路擁有更小的體積,更少的計算量,更高的精度。在輕量級神經網路中擁有極大的優勢。

1

更小的體積

MobileNet相比經典的大型網路,參數量明顯更少,參數量越少模型體積越小。

2

更少的計算量

MobileNet優化網路結構使模型計算量成倍下降。

3

更高的准確率

MobileNet憑借網路結構優化,在更少的參數及更少的計算量情況下,網路精度反而超過了部分大型神經網路。在最新的MobileNetV3-Large中,實現ImageNet數據集Top1准確率達到75.2%。

4

更快的速度

使用Google Pixel-1手機測試,MobileNet各版本都能保持運行時間在120ms以下,最新版MobileNetV3-Large運行時間達到66ms,參數量和計算量更低的MobileNetV3-Small更是能達到22ms;GoogleNet運行速度約為250ms,而VGG-16由於一次性需要載入至內存的空間已超過500MB,手機系統會報內存溢出錯誤導致無法運行。

5

多種應用場景

MobileNet可以在移動終端實現眾多的應用,包括目標檢測,目標分類,人臉屬性識別和人臉識別等。

MobileNet各版本介紹

1

MobileNetV1網路結構

整個網路不算平均池化層與softmax層,共28層;

在整個網路結構中步長為2的卷積較有特點,卷積的同時充當下采樣的功能;

第一層之後的26層都為深度可分離卷積的重復卷積操作;

每一個卷積層(含常規卷積、深度卷積、逐點卷積)之後都緊跟著批規范化和ReLU激活函數;

最後一層全連接層不使用激活函數。

2

MobileNetV2網路結構

MobileNetV2中主要引入線性瓶頸結構和反向殘差結構。

MobileNetV2網路模型中有共有17個Bottleneck層(每個Bottleneck包含兩個逐點卷積層和一個深度卷積層),一個標准卷積層(conv),兩個逐點卷積層(pw conv),共計有54層可訓練參數層。MobileNetV2中使用線性瓶頸(Linear Bottleneck)和反向殘差(Inverted Resials)結構優化了網路,使得網路層次更深了,但是模型體積更小,速度更快了。

3

MobileNetV3網路結構

MobileNetV3分為Large和Small兩個版本,Large版本適用於計算和存儲性能較高的平台,Small版本適用於硬體性能較低的平台。

Large版本共有15個bottleneck層,一個標准卷積層,三個逐點卷積層。

Small版本共有12個bottleneck層,一個標准卷積層,兩個逐點卷積層。

MobileNetV3中引入了5×5大小的深度卷積代替部分3×3的深度卷積。引入Squeeze-and-excitation(SE)模塊和h-swish(HS)激活函數以提高模型精度。結尾兩層逐點卷積不使用批規范化(Batch Norm),MobileNetV3結構圖中使用NBN標識。

(圖片來源https://arxiv.org/pdf/1905.02244.pdf)

網路結構上相對於MobileNetV2的結尾部分做了優化,去除三個高階層,如上圖所示。去除後減少了計算量和參數量,但是模型的精度並沒有損失。

值得一提的是,不論是Large還是Small版本,都是使用神經架構搜索(NAS)技術生成的網路結構。

4

MobileNet各版本特性

MobileNet實現計算量減小、參數量減少的同時保證了較高的准確率,這和其擁有的特性息息相關:

MobileNetV1提出的特性

MobileNetV2提出的特性

MobileNetV3提出的特性

MobileNet各個版本擁有的特性匯總

下文將對上表中的各個特性詳細闡述。

MobileNet的特性詳解

1

深度可分離卷積

從MobileNetV1開始,到V2、V3的線性瓶頸結構都大量使用了深度可分離卷積。

深度可分離卷積(Depthwise Separable Convolution)是一種卷積結構。它是由一層深度卷積(Depthwise convolution)與一層逐點卷積(Pointwise Convolution)組合而成的,每一層卷積之後都緊跟著批規范化和ReLU激活函數。跟標准卷積的區別就是精度基本不變的情況下,參數與計算量都明顯減少。

深度卷積

深度卷積(Depthwise convolution, DW)不同於常規卷積操作,深度卷積中一個卷積核只有一維,負責一個通道,一個通道只被一個卷積核卷積;常規卷積每個卷積核的維度與輸入維度相同,每個通道單獨做卷積運算後相加。

以一張5x5x3(長和寬為5,RGB3通道)的彩色圖片舉例。每層深度卷積卷積核的數量與上一層的通道數相同(通道和卷積核一一對應)。設padding=1,stride=1,一個三通道的圖像經過運算後生成了3個特徵圖,如下圖所示:

深度卷積完成後的輸出特徵圖通道數與輸入層的通道數相同,無法擴展通道數。而且這種運算對輸入層的每個通道獨立進行卷積運算,沒有有效的利用不同通道在相同空間位置上的特徵信息。因此需要逐點卷積來將生成的特徵圖進行組合生成新的特徵圖。

逐點卷積

逐點卷積(Pointwise Convolution, PW)的運算與標准卷積運算非常相似。

逐點卷積卷積核大小為1×1xM(M為輸入數據的維度),每次卷積一個像素的區域。逐點卷積運算會將上一層的特徵圖在深度方向上進行加權組合,生成新的特徵圖,新的特徵圖的大小與輸入數據大小一致;然後組合各通道的特徵圖,以較少的計算量進行降維或升維操作(改變輸出數據的維度)。

以一張5x5x3(長和寬為5,RGB3通道)的彩色圖片舉例,使用4個1x1x3的逐點卷積核進行卷積,逐點卷積運算後生成了4個特徵圖。這個例子是使用逐點卷積進行升維的操作,特徵圖從5x5x3 升維到5x5x4。如下圖所示:

深度可分離卷積結構解析

將深度卷積和逐點卷積組成深度可分離卷積後的示意圖,如下圖所示:

首先進行深度卷積操作,得出的特徵圖各通道之間是不關聯的。接著進行逐點卷積把深度卷積輸出的特徵圖各通道關聯起來。

深度可分離卷積使用了更小的空間代價(參數減少)和更少的時間代價(計算量更少)實現了標准卷積層一樣的效果(提取特徵)。

一般的設Df為輸入特徵圖邊長,Dk為卷積核邊長,特徵圖和卷積核均為長寬一致,輸入通道數為M,輸出通道數為N,則:

標准卷積計算量為:Df×Df×Dk×Dk×M×N

深度卷積的計算量為:Df×Df×Dk×Dk×M

逐點卷積的計算量為:Df×Df×M×N

上圖所示實現輸入特徵圖大小為5×5×3,輸出特成圖大小為5×5×4,設padding=1,stride=1,深度卷積卷積核大小為3×3,標准卷積也使用3×3尺寸卷積核。實現相同的卷積效果,參數量(不包含偏置)與計算量對比如下表所示:

深度可分離卷積的演變

事實上深度可分離卷積不是在MobileNetV1中第一次提出的,而是在2016年由谷歌的Xception網路結構中提出的。MobileNetV1在Xception的基礎上,對深度可分離卷積進行了改進,做到了計算量與參數量的下降:

假定M為輸入層的通道數,N為輸出層的通道數。

Xcenption的深度可分離卷積是由輸入參數開始,使用1x1xMxN卷積將輸入層的通道數轉換為目標通道數,再通過3x3x1卷積核對每個通道進行卷積,每次卷積過後使用ReLU進行激活。

MobileNetV1的深度可分離卷積則是先使用3x3x1xM對輸入層的每個通道分別卷積,之後通過1x1xMxN將輸入層通道數轉換為輸出層通道數,每次卷積過後做一次批規范化操作,再使用ReLU進行激活。

這里我們使用MobileNetV1網路結構的第一個深度可分離卷積層來舉例,輸入層維度為112x112x32,輸出層維度為112x112x64,Xception與MobileNet的深度可分離卷積的計算量與參數個數對比如下表:

由此可知將PW卷積與DW卷積的順序調整後,優化了網路的空間復雜度和時間復雜度。

2

寬度因子

MobileNet本身的網路結構已經比較小並且執行延遲較低,但為了適配更定製化的場景,MobileNet提供了稱為寬度因子(Width Multiplier)的超參數給我們調整。寬度因子在MobileNetV1、V2、V3都可以運用。

通過寬度因子,可以調整神經網路中間產生的特徵的大小,調整的是特徵數據通道數大小,從而調整了運算量的大小。

寬度因子簡單來說就是新網路中每一個模塊要使用的卷積核數量相較於標準的MobileNet比例。對於深度卷積結合1x1方式的卷積核,計算量為:

算式中α即為寬度因子,α常用的配置為1,0.75,0.5,0.25;當α等於1時就是標準的MobileNet。通過參數α可以非常有效的將計算量和參數數量約減到α的平方倍。

下圖為MobileNetV1使用不同α系數進行網路參數的調整時,在ImageNet上的准確率、計算量、參數數量之間的關系(每一個項中最前面的數字表示α的取值)。

(數據來源https://arxiv.org/pdf/1704.04861.pdf)

可以看到當輸入解析度固定為224x224時,隨著寬度因子的減少,模型的計算量和參數越來越小。從上表可以看到, 0.25 MobileNet的正確率比標准版1.0MobileNet低20%,但計算量和參數量幾乎只有標准版1.0MobileNet計算量、參數量的10%!對於計算資源和存儲資源都十分緊張的移動端平台,可以通過α寬度因子調節網路的餐數量是非常實用的,在真正使用時我們可以按需調整α寬度因子達到准確率與性能的平衡。

3

解析度因子

MobileNet還提供了另一個超參數解析度因子(Resolution Multiplier)供我們自定義網路結構,解析度因子同樣在MobileNetV1、V2、V3都可以運用。

解析度因子一般用β來指代,β的取值范圍在(0,1]之間,是作用於每一個模塊輸入尺寸的約減因子,簡單來說就是將輸入數據以及由此在每一個模塊產生的特徵圖都變小了,結合寬度因子α,深度卷積結合1x1方式的卷積核計算量為:

下圖為MobileNetV1使用不同的β系數作用於標准MobileNet時,在ImageNet上對精度和計算量的影響(α固定1.0)

(數據來源https://arxiv.org/pdf/1704.04861.pdf)

上圖中的 224、192、160、128 對應的解析度因子分別為 1、 6/7、5/7、4/7。

β=1時,輸入圖片的解析度為224x224,卷積後的圖像大小變化為: 224x224 、112x112、56x56、28x28、14x14、7x7。

β= 6/7時,輸入圖片的解析度為192x192,卷積後各層特徵圖像大小變化為:192x192、96x96、48x48、24x24、12x12、6x6。

卷積特徵圖像的大小變化不會引起參數量的變化,只改變模型M-Adds計算量。上圖中 224解析度模型測試ImageNet數據集准確率為70.6%,192解析度的模型准確率為69.1%,但是M-Adds計算量減少了151M,對移動平台計算資源緊張的情況下,同樣可以通過β解析度因子調節網路輸入特徵圖的解析度,做模型精度與計算量的取捨。

4

規范化

深度學習中的規范化操作(Normalization),有助於加快基於梯度下降法或隨機梯度下降法模型的收斂速度,提升模型的精度,規范化的參數能夠提升模型泛化能力,提高模型的可壓縮性。

按照規范化操作涉及對象的不同可以分為兩大類,一類是對輸入值進行規范化操作,比如批規范化(Batch Normalization)、層規范化(Layer Normalization)、實例規范化(Instance Normalization)、組規范化(Group Normalization)方法都屬於這一類。另外一類是對神經網路中參數進行規范化操作,比如使用L0,L1范數。

批規范化

批規范化(Batch Normalization)幾乎存在於MobileNetV1、V2、V3的每個卷積層的後面,目的是加快訓練收斂速度,提升准確率。

批規范化是一種對數值的特殊函數變換方法,也就是說假設原始的某個數值是 x,套上一個起到規范化作用的函數,對規范化之前的數值 x 進行轉換,形成一個規范化後的數值,即:

所謂規范化,是希望轉換後的數值滿足一定的特性,至於對數值具體如何變換,跟規范化目標有關,不同的規范化目標導致具體方法中函數所採用的形式不同。通過自適應的重新參數化的方法,克服神經網路層數加深導致模型難以訓練的問題。

參數規范化

參數規范化(Weight Normalization, WN)是規范化的一種, 通過人為的設定稀疏演算法,去除模型中多餘的參數(置為0)使得模型參數稀疏化,可以通過L1範式實現。

參數規范化是防止模型過分擬合訓練數據。當訓練一批樣本的時候,隨著訓練的推移模型會越來越趨向於擬合樣本數據。因為參數太多,會導致模型復雜度上升,容易過擬合。

需要保證模型"簡單"的基礎上最小化訓練誤差,這樣得到的參數才具有好的泛化性能(也就是測試誤差也小),而模型"簡單"就是通過規則函數來實現的。

如上圖所示,左側分類明顯的是欠擬合,模型並沒有能夠擬合數據。中間圖示為合適的擬合,右邊圖示是過擬合,模型在訓練樣本中擬合度是很好的,但是卻違背了特徵分類規律,在新的測試樣本中表現糟糕,影響模型的泛化能力。顯然右側模型在訓練是受到額外參數干擾。參數規則化能夠使參數稀疏,減少額外參數的干擾,提高泛化能力。

模型擁有稀疏的參數(模型中有大量參數為0),也有利於通過壓縮演算法壓縮模型的大小。

5

線性瓶頸

線性瓶頸英文為Linear Bottleneck,是從Bottleneck結構演變而來的,被用於MobileNetV2與V3。

Bottleneck結構首次被提出是在ResNet網路中。該結構第一層使用逐點卷積,第二層使用3×3大小卷積核進行深度卷積,第三層再使用逐點卷積。MobileNet中的瓶頸結構最後一層逐點卷積使用的激活函數是Linear,所以稱其為線性瓶頸結構(Linear Bottleneck)。線性瓶頸結構有兩種,第一種是步長為1時使用殘差結構,第二種是步長為2時不使用殘差結構。

其中輸入通道數為M,擴大倍數系數為T。T的值為大於0 的正數,當 0<T<1時,第一層逐點卷積起到的作用是降維。當 1<T時,第一層逐點卷積起到的作用是升維。

第二層為深度卷積,輸入通道數 = 輸出通道數 = M×T。

第三層為逐點卷積,作用是關聯深度卷積後的特徵圖並輸出指定通道數N。

線性瓶頸結構相對標准卷積能夠減少參數數量,減少卷積計算量。從空間和時間上優化了網路。

6

反向殘差

MobileNetV2中以ResNet的殘差(Resials)結構為基礎進行優化,提出了反向殘差(Inverted Resials)的概念,之後也同樣運用與MobileNetV3中。

ResNet中提出的殘差結構解決訓練中隨著網路深度增加而出現的梯度消失問題,使反向傳播過程中深度網路的淺層網路也能得到梯度,使淺層網路的參數也可訓練,從而增加特徵表達能力。

ResNet的殘差結構實際是在線性瓶頸結構的基礎上增加殘差傳播。如下圖所示:

ResNet中的殘差結構使用第一層逐點卷積降維,後使用深度卷積,再使用逐點卷積升維。

MobileNetV2版本中的殘差結構使用第一層逐點卷積升維並使用Relu6激活函數代替Relu,之後使用深度卷積,同樣使用Relu6激活函數,再使用逐點卷積降維,降維後使用Linear激活函數。這樣的卷積操作方式更有利於移動端使用(有利於減少參數與M-Adds計算量),因維度升降方式與ResNet中的殘差結構剛好相反,MobileNetV2將其稱之為反向殘差(Inverted Resials)。

7

5x5 的深度卷積

MobileNetV3中,深度卷積大量使用5x5大小的卷積核。這是因為使用神經結構搜索(NAS)技術計算出的MobileNetV3網路結構的過程中,發現了在深度卷積中使用5x5大小的卷積核比使用3x3大小的卷積核效果更好,准確率更高。關於NAS技術將會在下文的單獨章節中做介紹。

8

Squeeze-and-excitation 模塊

Squeeze-and-Excitation模塊(簡稱SE模塊)的首次提出是在2017年的Squeeze-and-Excitation Networks(SENet)網路結構中,在MNasNet中進行了改進,之後在MobileNetV3中大量使用。研究人員期望通過精確的建模卷積特徵各個通道之間的作用關系來改善網路模型的表達能力。為了達到這個期望,提出了一種能夠讓網路模型對特徵進行校準的機制,使得有效的權重大,無效或效果小的權重小的效果,這就是SE模塊。

(圖片來源https://arxiv.org/pdf/1905.02244.pdf)

如上圖,MobileNetV3的SE模塊被運用在線性瓶頸結構最後一層上,代替V2中最後的逐點卷積,改為先進行SE操作再逐點卷積。這樣保持了網路結構每層的輸入和輸出,僅在中間做處理,類似於軟體開發中的鉤子。

SE模塊結構詳解

下圖表示一個SE 模塊。主要包含Squeeze和Excitation兩部分。W,H表示特徵圖寬,高。C表示通道數,輸入特徵圖大小為W×H×C。

壓縮(Squeeze)

第一步是壓縮(Squeeze)操作,如下圖所示

這個操作就是一個全局平均池化(global average pooling)。經過壓縮操作後特徵圖被壓縮為1×1×C向量。

激勵(Excitation)

接下來就是激勵(Excitation)操作,如下圖所示

由兩個全連接層組成,其中SERatio是一個縮放參數,這個參數的目的是為了減少通道個數從而降低計算量。

第一個全連接層有C*SERatio個神經元,輸入為1×1×C,輸出1×1×C×SERadio。

第二個全連接層有C個神經元,輸入為1×1×C×SERadio,輸出為1×1×C。

scale操作

最後是scale操作,在得到1×1×C向量之後,就可以對原來的特徵圖進行scale操作了。很簡單,就是通道權重相乘,原有特徵向量為W×H×C,將SE模塊計算出來的各通道權重值分別和原特徵圖對應通道的二維矩陣相乘,得出的結果輸出。

這里我們可以得出SE模塊的屬性:

參數量 = 2×C×C×SERatio

計算量 = 2×C×C×SERatio

總體來講SE模塊會增加網路的總參數量,總計算量,因為使用的是全連接層計算量相比卷積層並不大,但是參數量會有明顯上升,所以MobileNetV3-Large中的總參數量比MobileNetV2多了2M。

MobileNetV3中的SE模塊

SE模塊的使用是很靈活的,可以在已有網路上添加而不打亂網路原有的主體結構。

ResNet中添加SE模塊形成SE-ResNet網路,SE模塊是在bottleneck結構之後加入的,如下圖左邊所示。

MobileNetV3版本中SE模塊加在了bottleneck結構的內部,在深度卷積後增加SE塊,scale操作後再做逐點卷積,如上圖右邊所示。MobileNetV3版本的SERadio系數為0.25。使用SE模塊後的MobileNetV3的參數量相比MobileNetV2多了約2M,達到5.4M,但是MobileNetV3的精度得到了很大的提升,在圖像分類和目標檢測中准確率都有明顯提升。

9

h-swish激活函數

MobileNetV3中發現swish激活函數能夠有效提高網路的精度,但是swish的計算量太大了,並不適合輕量級神經網路。MobileNetV3找到了類似swish激活函數但是計算量卻少很多的替代激活函數h-swish(hard version of swish)如下所示:

sigmoid、h-sigmoid、swish、h-swish激活函數的比較:

(圖片來源https://arxiv.org/pdf/1905.02244.pdf)

這種非線性在保持精度的情況下帶來了很多優勢,首先ReLU6在眾多軟硬體框架中都可以實現,其次量化時避免了數值精度的損失,運行快。這一非線性改變將模型的延時增加了15%。但它帶來的網路效應對於精度和延時具有正向促進,剩下的開銷可以通過融合非線性與先前層來消除。

Ⅱ 一文看懂四種基本的神經網路架構

原文鏈接:
http://blackblog.tech/2018/02/23/Eight-Neural-Network/

更多干貨就在我的個人博客 http://blackblog.tech 歡迎關注

剛剛入門神經網路,往往會對眾多的神經網路架構感到困惑,神經網路看起來復雜多樣,但是這么多架構無非也就是三類,前饋神經網路,循環網路,對稱連接網路,本文將介紹四種常見的神經網路,分別是CNN,RNN,DBN,GAN。通過這四種基本的神經網路架構,我們來對神經網路進行一定的了解。

神經網路是機器學習中的一種模型,是一種模仿動物神經網路行為特徵,進行分布式並行信息處理的演算法數學模型。這種網路依靠系統的復雜程度,通過調整內部大量節點之間相互連接的關系,從而達到處理信息的目的。
一般來說,神經網路的架構可以分為三類:

前饋神經網路:
這是實際應用中最常見的神經網路類型。第一層是輸入,最後一層是輸出。如果有多個隱藏層,我們稱之為「深度」神經網路。他們計算出一系列改變樣本相似性的變換。各層神經元的活動是前一層活動的非線性函數。

循環網路:
循環網路在他們的連接圖中定向了循環,這意味著你可以按照箭頭回到你開始的地方。他們可以有復雜的動態,使其很難訓練。他們更具有生物真實性。
循環網路的目的使用來處理序列數據。在傳統的神經網路模型中,是從輸入層到隱含層再到輸出層,層與層之間是全連接的,每層之間的節點是無連接的。但是這種普通的神經網路對於很多問題卻無能無力。例如,你要預測句子的下一個單詞是什麼,一般需要用到前面的單詞,因為一個句子中前後單詞並不是獨立的。
循環神經網路,即一個序列當前的輸出與前面的輸出也有關。具體的表現形式為網路會對前面的信息進行記憶並應用於當前輸出的計算中,即隱藏層之間的節點不再無連接而是有連接的,並且隱藏層的輸入不僅包括輸入層的輸出還包括上一時刻隱藏層的輸出。

對稱連接網路:
對稱連接網路有點像循環網路,但是單元之間的連接是對稱的(它們在兩個方向上權重相同)。比起循環網路,對稱連接網路更容易分析。這個網路中有更多的限制,因為它們遵守能量函數定律。沒有隱藏單元的對稱連接網路被稱為「Hopfield 網路」。有隱藏單元的對稱連接的網路被稱為玻爾茲曼機。

其實之前的帖子講過一些關於感知機的內容,這里再復述一下。
首先還是這張圖
這是一個M-P神經元

一個神經元有n個輸入,每一個輸入對應一個權值w,神經元內會對輸入與權重做乘法後求和,求和的結果與偏置做差,最終將結果放入激活函數中,由激活函數給出最後的輸出,輸出往往是二進制的,0 狀態代表抑制,1 狀態代表激活。

可以把感知機看作是 n 維實例空間中的超平面決策面,對於超平面一側的樣本,感知器輸出 1,對於另一側的實例輸出 0,這個決策超平面方程是 w⋅x=0。 那些可以被某一個超平面分割的正反樣例集合稱為線性可分(linearly separable)樣例集合,它們就可以使用圖中的感知機表示。
與、或、非問題都是線性可分的問題,使用一個有兩輸入的感知機能容易地表示,而異或並不是一個線性可分的問題,所以使用單層感知機是不行的,這時候就要使用多層感知機來解決疑惑問題了。

如果我們要訓練一個感知機,應該怎麼辦呢?
我們會從隨機的權值開始,反復地應用這個感知機到每個訓練樣例,只要它誤分類樣例就修改感知機的權值。重復這個過程,直到感知機正確分類所有的樣例。每一步根據感知機訓練法則來修改權值,也就是修改與輸入 xi 對應的權 wi,法則如下:

這里 t 是當前訓練樣例的目標輸出,o 是感知機的輸出,η 是一個正的常數稱為學習速率。學習速率的作用是緩和每一步調整權的程度,它通常被設為一個小的數值(例如 0.1),而且有時會使其隨著權調整次數的增加而衰減。

多層感知機,或者說是多層神經網路無非就是在輸入層與輸出層之間加了多個隱藏層而已,後續的CNN,DBN等神經網路只不過是將重新設計了每一層的類型。感知機可以說是神經網路的基礎,後續更為復雜的神經網路都離不開最簡單的感知機的模型,

談到機器學習,我們往往還會跟上一個詞語,叫做模式識別,但是真實環境中的模式識別往往會出現各種問題。比如:
圖像分割:真實場景中總是摻雜著其它物體。很難判斷哪些部分屬於同一個對象。對象的某些部分可以隱藏在其他對象的後面。
物體光照:像素的強度被光照強烈影響。
圖像變形:物體可以以各種非仿射方式變形。例如,手寫也可以有一個大的圓圈或只是一個尖頭。
情景支持:物體所屬類別通常由它們的使用方式來定義。例如,椅子是為了讓人們坐在上面而設計的,因此它們具有各種各樣的物理形狀。
卷積神經網路與普通神經網路的區別在於,卷積神經網路包含了一個由卷積層和子采樣層構成的特徵抽取器。在卷積神經網路的卷積層中,一個神經元只與部分鄰層神經元連接。在CNN的一個卷積層中,通常包含若干個特徵平面(featureMap),每個特徵平面由一些矩形排列的的神經元組成,同一特徵平面的神經元共享權值,這里共享的權值就是卷積核。卷積核一般以隨機小數矩陣的形式初始化,在網路的訓練過程中卷積核將學習得到合理的權值。共享權值(卷積核)帶來的直接好處是減少網路各層之間的連接,同時又降低了過擬合的風險。子采樣也叫做池化(pooling),通常有均值子采樣(mean pooling)和最大值子采樣(max pooling)兩種形式。子采樣可以看作一種特殊的卷積過程。卷積和子采樣大大簡化了模型復雜度,減少了模型的參數。
卷積神經網路由三部分構成。第一部分是輸入層。第二部分由n個卷積層和池化層的組合組成。第三部分由一個全連結的多層感知機分類器構成。
這里舉AlexNet為例:

·輸入:224×224大小的圖片,3通道
·第一層卷積:11×11大小的卷積核96個,每個GPU上48個。
·第一層max-pooling:2×2的核。
·第二層卷積:5×5卷積核256個,每個GPU上128個。
·第二層max-pooling:2×2的核。
·第三層卷積:與上一層是全連接,3*3的卷積核384個。分到兩個GPU上個192個。
·第四層卷積:3×3的卷積核384個,兩個GPU各192個。該層與上一層連接沒有經過pooling層。
·第五層卷積:3×3的卷積核256個,兩個GPU上個128個。
·第五層max-pooling:2×2的核。
·第一層全連接:4096維,將第五層max-pooling的輸出連接成為一個一維向量,作為該層的輸入。
·第二層全連接:4096維
·Softmax層:輸出為1000,輸出的每一維都是圖片屬於該類別的概率。

卷積神經網路在模式識別領域有著重要應用,當然這里只是對卷積神經網路做了最簡單的講解,卷積神經網路中仍然有很多知識,比如局部感受野,權值共享,多卷積核等內容,後續有機會再進行講解。

傳統的神經網路對於很多問題難以處理,比如你要預測句子的下一個單詞是什麼,一般需要用到前面的單詞,因為一個句子中前後單詞並不是獨立的。RNN之所以稱為循環神經網路,即一個序列當前的輸出與前面的輸出也有關。具體的表現形式為網路會對前面的信息進行記憶並應用於當前輸出的計算中,即隱藏層之間的節點不再無連接而是有連接的,並且隱藏層的輸入不僅包括輸入層的輸出還包括上一時刻隱藏層的輸出。理論上,RNN能夠對任何長度的序列數據進行處理。
這是一個簡單的RNN的結構,可以看到隱藏層自己是可以跟自己進行連接的。

那麼RNN為什麼隱藏層能夠看到上一刻的隱藏層的輸出呢,其實我們把這個網路展開來開就很清晰了。

從上面的公式我們可以看出,循環層和全連接層的區別就是循環層多了一個權重矩陣 W。
如果反復把式2帶入到式1,我們將得到:

在講DBN之前,我們需要對DBN的基本組成單位有一定的了解,那就是RBM,受限玻爾茲曼機。
首先什麼是玻爾茲曼機?
[圖片上傳失敗...(image-d36b31-1519636788074)]
如圖所示為一個玻爾茲曼機,其藍色節點為隱層,白色節點為輸入層。
玻爾茲曼機和遞歸神經網路相比,區別體現在以下幾點:
1、遞歸神經網路本質是學習一個函數,因此有輸入和輸出層的概念,而玻爾茲曼機的用處在於學習一組數據的「內在表示」,因此其沒有輸出層的概念。
2、遞歸神經網路各節點鏈接為有向環,而玻爾茲曼機各節點連接成無向完全圖。

而受限玻爾茲曼機是什麼呢?
最簡單的來說就是加入了限制,這個限制就是將完全圖變成了二分圖。即由一個顯層和一個隱層構成,顯層與隱層的神經元之間為雙向全連接。

h表示隱藏層,v表示顯層
在RBM中,任意兩個相連的神經元之間有一個權值w表示其連接強度,每個神經元自身有一個偏置系數b(對顯層神經元)和c(對隱層神經元)來表示其自身權重。
具體的公式推導在這里就不展示了

DBN是一個概率生成模型,與傳統的判別模型的神經網路相對,生成模型是建立一個觀察數據和標簽之間的聯合分布,對P(Observation|Label)和 P(Label|Observation)都做了評估,而判別模型僅僅而已評估了後者,也就是P(Label|Observation)。
DBN由多個限制玻爾茲曼機(Restricted Boltzmann Machines)層組成,一個典型的神經網路類型如圖所示。這些網路被「限制」為一個可視層和一個隱層,層間存在連接,但層內的單元間不存在連接。隱層單元被訓練去捕捉在可視層表現出來的高階數據的相關性。

生成對抗網路其實在之前的帖子中做過講解,這里在說明一下。
生成對抗網路的目標在於生成,我們傳統的網路結構往往都是判別模型,即判斷一個樣本的真實性。而生成模型能夠根據所提供的樣本生成類似的新樣本,注意這些樣本是由計算機學習而來的。
GAN一般由兩個網路組成,生成模型網路,判別模型網路。
生成模型 G 捕捉樣本數據的分布,用服從某一分布(均勻分布,高斯分布等)的雜訊 z 生成一個類似真實訓練數據的樣本,追求效果是越像真實樣本越好;判別模型 D 是一個二分類器,估計一個樣本來自於訓練數據(而非生成數據)的概率,如果樣本來自於真實的訓練數據,D 輸出大概率,否則,D 輸出小概率。
舉個例子:生成網路 G 好比假幣製造團伙,專門製造假幣,判別網路 D 好比警察,專門檢測使用的貨幣是真幣還是假幣,G 的目標是想方設法生成和真幣一樣的貨幣,使得 D 判別不出來,D 的目標是想方設法檢測出來 G 生成的假幣。
傳統的判別網路:

生成對抗網路:

下面展示一個cDCGAN的例子(前面帖子中寫過的)
生成網路

判別網路

最終結果,使用MNIST作為初始樣本,通過學習後生成的數字,可以看到學習的效果還是不錯的。

本文非常簡單的介紹了四種神經網路的架構,CNN,RNN,DBN,GAN。當然也僅僅是簡單的介紹,並沒有深層次講解其內涵。這四種神經網路的架構十分常見,應用也十分廣泛。當然關於神經網路的知識,不可能幾篇帖子就講解完,這里知識講解一些基礎知識,幫助大家快速入(zhuang)門(bi)。後面的帖子將對深度自動編碼器,Hopfield 網路長短期記憶網路(LSTM)進行講解。

Ⅲ 直觀理解LSTM(長短時記憶網路)

長短時神經網路是一種特殊的遞歸神經網路,所謂遞歸神經網路就是網路能夠解決時間序列問題的預測。所謂遞歸神經網路就是網路中具有循環結構。遞歸神經網路從某種程度來說和傳統的神經網路並非完全不同。可以將遞歸神經網路想像成有多層相同網路結構的神經網路,每一層將信息傳遞給下一層(以下借鑒一些十分易懂的圖片):

上述是為了便於理解網路送展示的示意圖,實際上網路結構只是上圖左邊的一小塊。

普通的RNN沒有辦法解決需要長時記憶的功能。比如試圖預測「I grew up in France… I speak fluent French.」中最後一個詞。最近信息顯示下一個詞可能是一門語言的名字,但是如果我們想要縮小選擇范圍,我們需要包含「法國」的那段上下文,從前面的信息推斷後面的單詞。相關信息與預測位置的間隔很大是完全有可能的。然而RNNs並沒有辦法解決這種問題。

LSTM作為效果比較好的遞歸神經網路,擁有者對長時時間序列問題很好的解決能力。

LSTM也有這樣的鏈式結構,但其重復模塊內部的機構不同。具體如下:

之下說明一下內部四個網路的具體意義。
主要分為: 單元狀態 + 門限。
單元狀態:讓信息以不變的方式向下流動,相當於一個傳送帶,但傳送帶上的東西會隨著他通過每一個重復模塊基於當時的輸入有所增減。

門限:有能力向單元狀態增加或者剔除信息的管理機構,相當於傳送帶上放東西或者拿走東西的那個人。在LSTM中由sigmoid函數和乘法加法來控制這個過程。

上圖通過當前時間的輸入和前一個時間的輸出來通過sigmoid函數來使得單元狀態乘以這個sigmoid函數的輸出。若sigmoid函數輸出0則該部分信息需要被遺忘,反之該部分信息繼續在單元狀態中繼續傳下去。

該門限功能是更新舊的單元狀態。之前的遺忘門限層決定了遺忘或者添加哪些信息,由該門限層來執行實現。

最後,我們需要決定需要輸出什麼。這個輸出將會建立在單元狀態的基礎上,但是個過濾版本。首先,我們運行一個sigmoid層來決定單元狀態中哪些部分需要輸出。然後我們將單元狀態輸入到tanh函數(將值轉換成-1到1之間)中,然後乘以輸出的sigmoid門限值,所以我們只輸出了我們想要輸出的那部分。

上面提到的是非常常規的LSTM網路,LSTM有許多不同的變種,下面來介紹幾種。

就是使用耦合遺忘和輸入門限。我們不單獨決定遺忘哪些、添加哪些新信息,而是一起做出決定。在輸入的時候才進行遺忘。在遺忘某些舊信息時才將新值添加到狀態中。

它將遺忘和輸入門限結合輸入到單個「更新門限」中。同樣還將單元狀態和隱藏狀態合並,並做出一些其他變化。所得模型比標准LSTM模型要簡單,這種做法越來越流行。

Ⅳ 一文看懂卷積神經網路-CNN(基本原理+獨特價值+實際應用)

在 CNN 出現之前,圖像對於人工智慧來說是一個難題,有2個原因:

圖像需要處理的數據量太大,導致成本很高,效率很低

圖像在數字化的過程中很難保留原有的特徵,導致圖像處理的准確率不高

下面就詳細說明一下這2個問題:

圖像是由像素構成的,每個像素又是由顏色構成的。

現在隨隨便便一張圖片都是 1000×1000 像素以上的, 每個像素都有RGB 3個參數來表示顏色信息。

假如我們處理一張 1000×1000 像素的圖片,我們就需要處理3百萬個參數!

1000×1000×3=3,000,000

這么大量的數據處理起來是非常消耗資源的,而且這只是一張不算太大的圖片!

卷積神經網路 – CNN 解決的第一個問題就是「將復雜問題簡化」,把大量參數降維成少量參數,再做處理。

更重要的是:我們在大部分場景下,降維並不會影響結果。比如1000像素的圖片縮小成200像素,並不影響肉眼認出來圖片中是一隻貓還是一隻狗,機器也是如此。

圖片數字化的傳統方式我們簡化一下,就類似下圖的過程:

假如有圓形是1,沒有圓形是0,那麼圓形的位置不同就會產生完全不同的數據表達。但是從視覺的角度來看, 圖像的內容(本質)並沒有發生變化,只是位置發生了變化 。

所以當我們移動圖像中的物體,用傳統的方式的得出來的參數會差異很大!這是不符合圖像處理的要求的。

而 CNN 解決了這個問題,他用類似視覺的方式保留了圖像的特徵,當圖像做翻轉,旋轉或者變換位置時,它也能有效的識別出來是類似的圖像。

那麼卷積神經網路是如何實現的呢?在我們了解 CNN 原理之前,先來看看人類的視覺原理是什麼?

深度學習的許多研究成果,離不開對大腦認知原理的研究,尤其是視覺原理的研究。

1981 年的諾貝爾醫學獎,頒發給了 David Hubel(出生於加拿大的美國神經生物學家) 和TorstenWiesel,以及 Roger Sperry。前兩位的主要貢獻,是「 發現了視覺系統的信息處理 」,可視皮層是分級的。

人類的視覺原理如下:從原始信號攝入開始(瞳孔攝入像素 Pixels),接著做初步處理(大腦皮層某些細胞發現邊緣和方向),然後抽象(大腦判定,眼前的物體的形狀,是圓形的),然後進一步抽象(大腦進一步判定該物體是只氣球)。下面是人腦進行人臉識別的一個示例:

對於不同的物體,人類視覺也是通過這樣逐層分級,來進行認知的:

我們可以看到,在最底層特徵基本上是類似的,就是各種邊緣,越往上,越能提取出此類物體的一些特徵(輪子、眼睛、軀乾等),到最上層,不同的高級特徵最終組合成相應的圖像,從而能夠讓人類准確的區分不同的物體。

那麼我們可以很自然的想到:可以不可以模仿人類大腦的這個特點,構造多層的神經網路,較低層的識別初級的圖像特徵,若干底層特徵組成更上一層特徵,最終通過多個層級的組合,最終在頂層做出分類呢?

答案是肯定的,這也是許多深度學習演算法(包括CNN)的靈感來源。

典型的 CNN 由3個部分構成:

卷積層

池化層

全連接層

如果簡單來描述的話:

卷積層負責提取圖像中的局部特徵;池化層用來大幅降低參數量級(降維);全連接層類似傳統神經網路的部分,用來輸出想要的結果。

下面的原理解釋為了通俗易懂,忽略了很多技術細節,如果大家對詳細的原理感興趣,可以看這個視頻《 卷積神經網路基礎 》。

卷積層的運算過程如下圖,用一個卷積核掃完整張圖片:

這個過程我們可以理解為我們使用一個過濾器(卷積核)來過濾圖像的各個小區域,從而得到這些小區域的特徵值。

在具體應用中,往往有多個卷積核,可以認為,每個卷積核代表了一種圖像模式,如果某個圖像塊與此卷積核卷積出的值大,則認為此圖像塊十分接近於此卷積核。如果我們設計了6個卷積核,可以理解:我們認為這個圖像上有6種底層紋理模式,也就是我們用6中基礎模式就能描繪出一副圖像。以下就是25種不同的卷積核的示例:

總結:卷積層的通過卷積核的過濾提取出圖片中局部的特徵,跟上面提到的人類視覺的特徵提取類似。

池化層簡單說就是下采樣,他可以大大降低數據的維度。其過程如下:

上圖中,我們可以看到,原始圖片是20×20的,我們對其進行下采樣,采樣窗口為10×10,最終將其下采樣成為一個2×2大小的特徵圖。

之所以這么做的原因,是因為即使做完了卷積,圖像仍然很大(因為卷積核比較小),所以為了降低數據維度,就進行下采樣。

總結:池化層相比卷積層可以更有效的降低數據維度,這么做不但可以大大減少運算量,還可以有效的避免過擬合。

這個部分就是最後一步了,經過卷積層和池化層處理過的數據輸入到全連接層,得到最終想要的結果。

經過卷積層和池化層降維過的數據,全連接層才能」跑得動」,不然數據量太大,計算成本高,效率低下。

典型的 CNN 並非只是上面提到的3層結構,而是多層結構,例如 LeNet-5 的結構就如下圖所示:

卷積層 – 池化層- 卷積層 – 池化層 – 卷積層 – 全連接層

在了解了 CNN 的基本原理後,我們重點說一下 CNN 的實際應用有哪些。

卷積神經網路 – CNN 很擅長處理圖像。而視頻是圖像的疊加,所以同樣擅長處理視頻內容。下面給大家列一些比較成熟的應用�:

圖像分類、檢索

圖像分類是比較基礎的應用,他可以節省大量的人工成本,將圖像進行有效的分類。對於一些特定領域的圖片,分類的准確率可以達到 95%+,已經算是一個可用性很高的應用了。

典型場景:圖像搜索…

目標定位檢測

可以在圖像中定位目標,並確定目標的位置及大小。

典型場景:自動駕駛、安防、醫療…

目標分割

簡單理解就是一個像素級的分類。

他可以對前景和背景進行像素級的區分、再高級一點還可以識別出目標並且對目標進行分類。

典型場景:美圖秀秀、視頻後期加工、圖像生成…

人臉識別

人臉識別已經是一個非常普及的應用了,在很多領域都有廣泛的應用。

典型場景:安防、金融、生活…

骨骼識別

骨骼識別是可以識別身體的關鍵骨骼,以及追蹤骨骼的動作。

典型場景:安防、電影、圖像視頻生成、游戲…

今天我們介紹了 CNN 的價值、基本原理和應用場景,簡單總結如下:

CNN 的價值:

能夠將大數據量的圖片有效的降維成小數據量(並不影響結果)

能夠保留圖片的特徵,類似人類的視覺原理

CNN 的基本原理:

卷積層 – 主要作用是保留圖片的特徵

池化層 – 主要作用是把數據降維,可以有效的避免過擬合

全連接層 – 根據不同任務輸出我們想要的結果

CNN 的實際應用:

圖片分類、檢索

目標定位檢測

目標分割

人臉識別

骨骼識別

本文首發在 easyAI - 人工智慧知識庫

《 一文看懂卷積神經網路-CNN(基本原理+獨特價值+實際應用) 》

Ⅳ 循環神經網路(RNN)簡介

循環神經網路英文名稱為 ( Recurrent Neural Network, RNN ),其通過使用帶自反饋的神經元,能夠處理任意長度的 時序 數據。

給定輸入時序序列

式中, 表示一段時序數據, 為時間長度

以一段英文段落為例,其時序數據可以表示為:

若是一段視頻,將其每一幀通過CNN網路處理得到相應的編碼向量

循環神經網路通過以下公式更新隱藏層的活性值

循環神經網路圖示

RNN的基本模型如下圖所示,為便於理解,圖中將RNN的模型展開,按照時序方向對其前向傳播流程進行介紹

RNN的基本模型

利用數學表達式整個過程可以變得更加清晰,RNN的前向傳播公式如下:

將上述過程整合到一個RNN cell中,可以表示為如下圖所示的過程:

RNN的前向傳播示意圖

缺陷:

沒有利用到模型後續的信息,可以通過雙向RNN網路進行優化

RNN主要有兩種計算梯度的方式:隨時間反向傳播(BPTT)和實時循環學習法(RTRL)演算法

本文中主要介紹隨時間反向傳播的方法 ( BackPropagation Through Time

RNN的損失函數與任務有關,對於同步的序列對序列任務,其loss可以用交叉熵公式表示

然後通過BPTT演算法便可以進行梯度的反向傳播計算

梯度爆炸的解決方法:梯度修剪

梯度消失的解決方法:增加長程依賴 LSTM,GRU

GRU的基本思路:增加相關門(Relate Gate)和更新門(Update Gate),進而使得RNN單元具有記憶能力

首先從數學角度對GRU的前向傳播過程進行介紹,具體公式如下:

公式中各變數的含義:

將上述數學公式轉化為圖像,可得

GRU Cell的前向傳播流程

LSTM意為長短時記憶網路 (Long Short-Term Memory Network,LSTM) ,可以有效地解決簡單神經網路的梯度消失和爆炸問題

在LSTM中,與GRU主要有兩點不同

同樣,先從數學公式入手,對LSTM的前向傳播過程進行了解

基於數學公式的過程,可將LSTM CELL的前向傳播過程總結為(圖片借用於nndl):

LSTM Cell的前向傳播示意圖

從上圖中可以看出,LSTM在前向傳播的過程中傳輸了兩個狀態:內部狀態 以及外部狀態 ,在整個傳播過程中 外部狀態(隱狀態) 每個時刻都會被重寫,因此可以看作一種 短時記憶 ,而 內部狀態 可以在某個時刻捕捉一些關鍵信息,並將此信息保存一段時間間隔,可以看作一種 長時記憶 (長的短時記憶)

此外,在LSTM網路初始化訓練的時候,需要手動將遺忘門的數值設置的大一些,否則在參數初始化的時候,遺忘門的數據會被初始化為一個很小的值,前一時刻的內部狀態 大部分都會丟失,這樣網路很難獲取到長距離的依賴信息,並且相鄰時間間隔的梯度會非常小,導致 梯度彌散 問題,因此遺忘門的 偏置變數 的初始值 一般很大,取 1或2

將 設置為1即可,但是長度非常的大的時候會造成記憶單元的飽和,降低性能

三個門不僅依賴於 和 ,也依賴於

將兩者合並為一個門,即:

首先,我們要理解什麼是深層的RNN,對於單個的RNN cell,若將其在時間維度上展開,其深度與時間維度的長度成正比,但若將一個RNN cell看作為單個從 的映射函數,則單個cell實際上是很淺顯的一層,因此深層循環神經網路要做的就是把多個RNN cell組合起來,換句話說,就是增加從輸入 到輸出 的路徑,使得網路的深度更深。

如何增加從輸入 到輸出 的路徑呢?兩種途徑:

堆疊循環神經網路示意圖

將網路帶入到實際應用場景中:假如我們要翻譯一段句子

在這里,is和are實際上是由後面的Lucy和they所決定的,而這種單向的按照時序進行傳播的方式沒有利用到後面的信息。因此誕生了雙向循環網路

雙向循環神經網路示意圖

雙向循環神經網路實際上就是簡單的雙層循環神經網路,只不過第二層網路的傳播方式為按時序的逆向傳播,其傳播公式為:

閱讀全文

與神經網路圖片相關的資料

熱點內容
ps入門必備文件 瀏覽:348
以前的相親網站怎麼沒有了 瀏覽:15
蘋果6耳機聽歌有滋滋聲 瀏覽:768
怎麼徹底刪除linux文件 瀏覽:379
編程中字體的顏色是什麼意思 瀏覽:534
網站關鍵詞多少個字元 瀏覽:917
匯川am系列用什麼編程 瀏覽:41
筆記本win10我的電腦在哪裡打開攝像頭 瀏覽:827
醫院單位基本工資去哪個app查詢 瀏覽:18
css源碼應該用什麼文件 瀏覽:915
編程ts是什麼意思呢 瀏覽:509
c盤cad佔用空間的文件 瀏覽:89
不銹鋼大小頭模具如何編程 瀏覽:972
什麼格式的配置文件比較主流 瀏覽:984
增加目錄word 瀏覽:5
提取不相鄰兩列數據如何做圖表 瀏覽:45
r9s支持的網路制式 瀏覽:633
什麼是提交事務的編程 瀏覽:237
win10打字卡住 瀏覽:774
linux普通用戶關機 瀏覽:114

友情鏈接