深度置信網路(Deep Belief Network)
DBNs是一個概率生成模型,與傳統的判別模型的神經網路相對,生成模型是建立一個觀察數據和標簽之間的聯合分布,對P(Observation|Label)和 P(Label|Observation)都做了評估,而判別模型僅僅而已評估了後者,也就是P(Label|Observation)。
DBNs由多個限制玻爾茲曼機(Restricted Boltzmann Machines)層組成,一個典型的神經網路類型如圖所示。這些網路被「限制」為一個可視層和一個隱層,層間存在連接,但層內的單元間不存在連接。隱層單元被訓練去捕捉在可視層表現出來的高階數據的相關性。
DBNs的靈活性使得它的拓展比較容易。一個拓展就是卷積DBNs(Convolutional Deep Belief Networks(CDBNs))。DBNs並沒有考慮到圖像的2維結構信息,因為輸入是簡單的從一個圖像矩陣一維向量化的。而CDBNs就是考慮到了這個問題,它利用鄰域像素的空域關系,通過一個稱為卷積RBMs的模型區達到生成模型的變換不變性,而且可以容易得變換到高維圖像。DBNs並沒有明確地處理對觀察變數的時間聯系的學習上,雖然目前已經有這方面的研究,例如堆疊時間RBMs,以此為推廣,有序列學習的bbed temporalconvolutionmachines,這種序列學習的應用,給語音信號處理問題帶來了一個讓人激動的未來研究方向。
目前,和DBNs有關的研究包括堆疊自動編碼器,它是通過用堆疊自動編碼器來替換傳統DBNs裡面的RBMs。這就使得可以通過同樣的規則來訓練產生深度多層神經網路架構,但它缺少層的參數化的嚴格要求。與DBNs不同,自動編碼器使用判別模型,這樣這個結構就很難采樣輸入采樣空間,這就使得網路更難捕捉它的內部表達。但是,降噪自動編碼器卻能很好的避免這個問題,並且比傳統的DBNs更優。它通過在訓練過程添加隨機的污染並堆疊產生場泛化性能。訓練單一的降噪自動編碼器的過程和RBMs訓練生成模型的過程一樣。
㈡ 深度卷積神經網路各種改進結構塊匯總
這個網路主要源自於Resnet網路,其作用是:
將靠前若干層的某一層數據輸出直接跳過多層引入到後面數據層的輸入部分。
意味著後面的特徵層的內容會有一部分由其前面的某一層線性貢獻。
實驗表明,殘差網路更容易優化,並且能夠通過增加相當的深度來提高准確率。
最終可以使得網路越來越深,Resnet152就是一個很深很深的網路。
殘差網路的典型結構如下:
這個結構主要是在Inception網路結構中出現。
Inception網路採用不同大小的卷積核,使得存在不同大小的感受野,最後實現拼接達到不同尺度特徵的融合。
不同大小卷積核並行卷積的典型結構如下:
這種結構主要利用在InceptionV3中。
利用1x7的卷積和7x1的卷積代替7x7的卷積,這樣可以只使用約(1x7 + 7x1) / (7x7) = 28.6%的計算開銷;利用1x3的卷積和3x1的卷積代替3x3的卷積,這樣可以只使用約(1x3 + 3x1) / (3x3) = 67%的計算開銷。
下圖利用1x7的卷積和7x1的卷積代替7x7的卷積。
下圖利用1x3的卷積和3x1的卷積代替3x3的卷積。
這個結構在Resnet里非常常見,其它網路也有用到。
所謂Bottleneck結構就是首先利用1x1卷積層進行特徵壓縮,再利用3x3卷積網路進行特徵提取,再利用1x1卷積層進行特徵擴張。
該結構相比於直接對輸入進行3x3卷積減少了許多參數量。
當輸入為26,26,512時,直接使用3x3、filter為512的卷積網路的參數量為512x3x3x512=2,359,296。
採用Bottleneck結構的話,假設其首先利用1x1、filter為128卷積層進行特徵壓縮,再利用3x3、filter為128的卷積網路進行特徵提取,再利用1x1、filter為512的卷積層進行特徵擴張,則參數量為 512×1×1×128 + 128×3×3×128 + 128×1×1×512 = 278,528。
深度可分離卷積主要在MobileNet模型上應用。
其特點是3x3的卷積核厚度只有一層,然後在輸入張量上一層一層地滑動,每一次卷積完生成一個輸出通道,當卷積完成後,在利用1x1的卷積調整厚度。
假設有一個3×3大小的卷積層,其輸入通道為16、輸出通道為32。具體為,32個3×3大小的卷積核會遍歷16個通道中的每個數據,最後可得到所需的32個輸出通道,所需參數為16×32×3×3=4608個。
應用深度可分離卷積,用16個3×3大小的卷積核分別遍歷16通道的數據,得到了16個特徵圖譜。在融合操作之前,接著用32個1×1大小的卷積核遍歷這16個特徵圖譜,所需參數為16×3×3+16×32×1×1=656個。
這種結構主要存在在Xception網路中。
改進版深度可分離卷積就是調換了一下深度可分離的順序,先進行1x1卷積調整通道,再利用3x3卷積提取特徵。
和普通的深度可分離卷積相比,參數量也會有一定的變化。
改進版深度可分離卷積加上殘差網路的結構其實和它的名字是一樣的,很好理解。
如下圖所示:
在ResNet50里我們認識到一個結構,bottleneck design結構,在3x3網路結構前利用1x1卷積降維,在3x3網路結構後,利用1x1卷積升維,相比直接使用3x3網路卷積效果更好,參數更少,先進行壓縮,再進行擴張。
而Inverted resials結構,在3x3網路結構前利用1x1卷積升維,在3x3網路結構後,利用1x1卷積降維,先進行擴張,再進行壓縮。
這種結構主要用在MobilenetV2中。
其主要結構如下:
這個結構出現在Deeplabv3語義分割中。
其經過並行的空洞卷積,分別用不同rate的空洞卷積進行特徵提取,再進行合並,再進行1x1卷積壓縮特徵。
空洞卷積可以在不損失信息的情況下,加大了感受野,讓每個卷積輸出都包含較大范圍的信息。如下就是空洞卷積的一個示意圖,所謂空洞就是特徵點提取的時候會跨像素。
原文鏈接: https://blog.csdn.net/weixin_44791964/article/details/103042733
㈢ 基於深度學習的圖異常檢測如何改進
您好,基於深度學習的圖異常檢測是一種有效的方法,但是仍然存在一些問題需要改進。以下是幾種可能的改進方法:
1. 數據增強:在訓練模型之前,可以使用數據增強技術來擴充訓練數據集。這可以幫助模型更好地學習數據的特徵,並提高模型的准確性。
2. 增加正常數據:在訓練模型時,可以增加正常數據的數量,這可以幫助模型更好地學習正常數據的特徵,並減少培畝誤報率。
3. 引入新的特徵:除了使用傳統的圖像特徵,還可以考慮引入新的特徵,例如圖像的上下文信息、顏色信息等等,以提高模型的准確性。
4. 使用集成學習:集成學習可以將多個模型組合在一起,以提高整體的准確性和穩定性。可以使用不同的深度學習演算法或不同的參數來訓練多個模型,然後將它們組合在一起,以獲得更好的結果。
5. 對抗訓練:對抗訓練是一種訓練模型的方法,其中模型核孫被訓練來對抗一些特定的攻擊。這可以幫助模型更好地識別異常數據,並提高模型的魯棒性。
綜上所述,基於深度學習的圖異常檢測可以通過數據增強、增加正常數據、引入新的特徵、使用集成學習和對抗訓練等方法來改進。這改中鏈些方法可以幫助模型更好地識別異常數據,並提高模型的准確性和魯棒性。
㈣ Nature 論文:探索深度神經網路之間的個體差異
深度神經網路(DNNs)是 AI 領域的重要成果,但它的 「存在感」 已經不僅僅限於該領域。
一些前沿生物醫學研究,也正被這一特別的概念所吸引。特別是計算神經科學家。
在以前所未有的任務性能徹底改變計算機視覺之後,相應的 DNNs 網路很快就被用以試著解釋大腦信息處理的能力,並日益被用作靈長類動爛祥物大腦神經計算的建模框架。經過任務優化的深度神經網路,已經成為預測靈長類動物視覺皮層多個區域活動的最佳模型類型之一。
用神經網路模擬大腦或者試圖讓神經網路更像大腦正成為主流方向的當下,有研究小組卻選擇用神經生物學的方法重新審視計算機學界發明的DNNs。
而他們發現,諸如改變初始權重等情況就能改變網路的最終訓練結果。這對使用單個網路來窺得生物神經信息處理機制的普遍做法提出了新的要求:如果沒有將具有相同功能的深度神經網路具有的差異性納入考慮的話,藉助這類網路進行生物大腦運行機制建模將有可能出現一些隨機的影響。要想盡量避免這種現象,從事 DNNs 研究的計算神經科學家,可能需要將他們的推論建立在多個網路實例組的基礎上,即嘗試去研究多個相同功能的神經網路的質心,以此克服隨機影響。
而對於 AI 領域的研究者,團隊也希望這種表徵一致性的概念能幫助機器學習研究人員了解在不同任務性能水平下運行的深度神經賣大網路之間的差異。
人工神經網路由被稱為 「感知器」、相互連接的單元所建立,感知器則是生物神經元的簡化數字模型。人工神經網路至少有兩層感知器,一層用於輸入層,另一層用於輸出層。在輸入和輸出之間夾上一個或多個 「隱藏」 層,就得到了一個 「深層」 神經網路,這些層越多,網路越深。
深度神經網路可以通過訓練來識別數據中的特徵,就比如代表貓或狗圖像的特徵。訓練包括使用一種演算法來迭代地調整感知器之間的連接強度(權重系數),以便網路學會將給定的輸入(圖像的像素)與正確的標簽(貓或狗)相關聯。理想狀況是,一旦經過訓練,深度神經網路應該能夠對它以前沒有見過的同類型輸入進行分類。
但在總體結構和功能上,深度神經網路還不能說是嚴格地模仿人類大腦,其中對神經元之間連接強度的調整反映了學習過程中的關聯。
一些神經科學家常常指出深度神經網路與人腦相比存在的局限性:單個神經元處理信息的范圍可能比 「失效」 的感知器更廣,例如,深度神經網路經常依賴感知器之間被稱為反向傳播的通信方式,而這種通信方式似乎並不存在於人腦神經系統。
然而,計算神經科學家會持不同想法。有的時候,深度神經網路似乎是建模大腦的最佳選擇。
例如,現有的計算機視覺系統已經受到我們所知的靈長類視覺系統的影響,尤其是在負責識別人、位置和事物的路徑上,借鑒了一種被稱為腹側視覺流的機制。
對人類來說,腹側神經通路從眼睛開始,然後進入丘腦的外側膝狀體,這是一種感覺信息的中繼站。外側膝狀體連接到初級視覺皮層中稱為 V1 的區域,在 V1 和 V4 的下游是區域 V2 和 V4,它們最終通向下顳葉皮層。非人類靈長類動物的大腦也有類似的結構(與之相應的背部視覺流是一條很大程度上獨立的通道,用於處理看到運動和物體位置的信息)。
這里所體現的神經科學見解是,視覺信息處理的分層、分階段推進的:早期階段先處理視野中的低級特徵(如邊緣、輪廓、顏飢配搏色和形狀),而復雜的表徵,如整個對象和面孔,將在之後由顳葉皮層接管。
如同人的大腦,每個 DNN 都有獨特的連通性和表徵特徵,既然人的大腦會因為內部構造上的差異而導致有的人可能記憶力或者數學能力更強,那訓練前初始設定不同的神經網路是否也會在訓練過程中展現出性能上的不同呢?
換句話說,功能相同,但起始條件不同的神經網路間究竟有沒有差異呢?
這個問題之所以關鍵,是因為它決定著科學家們應該在研究中怎樣使用深度神經網路。
在之前 Nature 通訊發布的一篇論文中,由英國劍橋大學 MRC 認知及腦科學研究組、美國哥倫比亞大學 Zuckerman Institute 和荷蘭拉德堡大學的 Donders 腦科學及認知與行為學研究中心的科學家組成的一支科研團隊,正試圖回答這個問題。論文題目為《Indivial differences among deep neural network models》。
根據這篇論文,初始條件不同的深度神經網路,確實會隨著訓練進行而在表徵上表現出越來越大的個體差異。
此前的研究主要是採用線性典範相關性分析(CCA,linear canonical correlation analysis)和 centered-kernel alignment(CKA)來比較神經網路間的內部網路表徵差異。
這一次,該團隊的研究採用的也是領域內常見的分析手法 —— 表徵相似性分析(RSA,representational similarity analysis)。
該分析法源於神經科學的多變數分析方法,常被用於將計算模型生產的數據與真實的大腦數據進行比較,在原理上基於通過用 「雙(或『對』)」 反饋差異表示系統的內部刺激表徵(Inner stimulus representation)的表徵差異矩陣(RDMs,representational dissimilarity matrices),而所有雙反饋組所組成的幾何則能被用於表示高維刺激空間的幾何排布。
兩個系統如果在刺激表徵上的特點相同(即表徵差異矩陣的相似度高達一定數值),就被認為是擁有相似的系統表徵。
表徵差異矩陣的相似度計算在有不同維度和來源的源空間(source spaces)中進行,以避開定義 「系統間的映射網路」。本研究的在這方面上的一個特色就是,使用神經科學研究中常用的網路實例比較分析方法對網路間的表徵相似度進行比較,這使得研究結果可被直接用於神經科學研究常用的模型。
最終,對比的結果顯示,僅在起始隨機種子上存在不同的神經網路間存在明顯個體差異。
該結果在採用不同網路架構,不同訓練集和距離測量的情況下都成立。團隊分析認為,這種差異的程度與 「用不同輸入訓練神經網路」 所產生的差異相當。
如上圖所示,研究團隊通過計算對應 RDM 之間的所有成對距離,比較 all-CNN-C 在所有網路實例和層、上的表示幾何。
再通過 MDS 將 a 中的數據點(每個點對應一個層和實例)投影到二維。各個網路實例的層通過灰色線連接。雖然早期的代表性幾何圖形高度相似,但隨著網路深度的增加,個體差異逐漸顯現。
在證明了深度神經網路存在的顯著個體差異之後,團隊繼續探索了這些差異存在的解釋。
隨後,研究者再通過在訓練和測試階段使用 Bernoulli dropout 方法調查了網路正則化(network regularization)對結果能造成的影響,但發現正則化雖然能在一定程度上提升 「採用不同起始隨機種子的網路之表徵」 的一致性,但並不能修正這些網路間的個體差異。
最後,通過分析網路的訓練軌跡與個體差異出現的過程並將這一過程可視化,團隊在論文中表示,神經網路的性能與表徵一致性間存在強負相關性,即網路間的個體差異會在訓練過程中被加劇。
總而言之,這項研究主要調查了多個神經網路在最少的實驗干預條件下是否存在個體差異,即在訓練開始前為網路設置不同權重的隨機種子,但保持其他條件一致,並以此拓展了此前與 「神經網路間相關性」 有關的研究。
除了這篇 這篇 研究以外,「深度學習三巨頭」 之一、著名 AI 學者 Hinton 也有過與之相關的研究,論文名為《Similarity of Neural Network Representations Revisited》,文章探討了測量深度神經網路表示相似性的問題,感興趣的讀者可以一並進行閱讀。
Refrence:
[1]https://www.nature.com/articles/s41467-020-19632-w#citeas
[2]https://www.quantamagazine.org/deep-neural-networks-help-to-explain-living-brains-20201028/
㈤ 深層神經網路
如上圖所示,邏輯回歸是一個淺層模型,可以理解為是單層神經網路。深層或淺層是一個程度的問題。如果將邏輯回歸模型加入一個隱藏層就變了一個雙層神經網路,但還是比較淺的。如果加入 5 個隱藏層,則可以說是一個深層模型。通常可以把隱藏層數當作超參數,然後在交叉驗證數據集上進行評估,從而選擇合適的深度。
上圖是一個 4 層的神經網路,包括三個隱藏層和一個輸出層,隱藏層的單元數分別是 5 5 3,輸出層只有一個單元。通常用 L 表示神經網路的層數,用 表示第 層的單元數,可以把輸入層當作第 0 層孫雹。那麼圖中 L = 4, , , , , 。可以用 表示第 層的激活值,即 ,用 和 表示在 公式中計算 值的權重,即 。輸入用 X 表示,X 也是第 0 層,所以 ,最後一層 ,也就是說 即為神經網路的預測值(輸出值)。
假設有一個樣本 x,那麼:
第一層計算: ,其中 x 也可以表示為 , w 和 b 是會影響第 1 層的激活單元的參數,接下來計算: ,後面幾層的計算也是如此。
第二層計算: ,
第三層計算: ,
第四層計算: ,
可以總結出,計算規律為:
前向傳播的向量化計算:
輸入 X 即 ,是將 m 個樣本橫向堆疊構成的矩陣,前向傳播需要一層一層來迭代計算,所以需要用 for 循環從第 1 層迭代計算到第 L 層,深層神經網路只是比淺層神經網路有更多層的迭代計算。
在上圖的神經網路中,除去輸入層一共有 5 層,其中 4 個隱藏層,一個輸出層。第 1 個隱藏層有 3 個隱藏單元,可以表示為 , 是第 1 個隱藏層的激活函數向量,是一個 3 x 1 的列向量,x 有兩個輸入特徵,所以 x 是 2 x 1 的列向量。在第一層的計算中: ,如果忽略偏置項 , 。 乘以一個 2 x 1 的列向量 x,需要等於一個 3 x 1 的列向量,那麼 必須是一個 3 x 2 的矩陣,即 的矩陣。 的結果是一個 3 x 1 的向量, 也搜殲是一個 3 x1 的向量,所以結果 也是一個 3 x 1 的向量。可以發現, 必須是 維的矩陣, 必須是 維的列向量,所以 的維數是 5 x 3,即 , 的維數是 5 x 1,即 x 1,所以在第二層的計算中: ,5 x 3 的矩陣 乘以 3 x 1 的列向量 等於一個 5 x 1 的列向量,再加上一個 5 x 1 的偏置項 ,結果 是一個 5 x 1 的列向量。以此類推, 的維數是 4 x 5, 的維數是 2 x 4, 的維數是 1 x 2。
前面證實了, 必須是 維的矩陣, 必須是 維的列向量。而且,在反向傳播中, 和 的維度相同, 和 的維度相同。又因為 ,所以 和 的維度也相同,都是 。
以上是神經網路中單個樣本的計算,其中 x 表示單個樣本,通常為了加速運算,需要將 m 個樣本進行向量化計算,可以用 X 表示 m 個樣本,第一個隱藏層的向量化計算公式即為: ,其中 還是 維, X 變為 維, 的結果是 的矩陣, 的維度還是 ,但當一個 的矩陣和 相加時,Python會通過廣播將 復製成為 的矩陣,然後兩個矩陣逐個元素相加。所以 的維度變為 ,即 3 x m。 表示每一個單獨的 橫向疊加構成的行向量,即 。
單個樣本時, 和 的維世凱沖度相同,都是 ,m 個樣本時, 和 的維度相同,都是 ,當 等於 0 時, 等於 ,其中 是 x 的輸入特徵數。反向傳播時,dZ、dA 和 Z、A 的維度相同。
從直覺上可以把深度神經網路的前幾層當做探測簡單的函數,也就是學習一些低層次的簡單特徵,之後把它們和後幾層結合在一起,也就是把簡單的特徵結合起來,那麼總體上就能學習更多復雜的函數,也就是去探測更復雜的東西。可以把深度學習神經網路和人類大腦做類比,人的大腦也是先探測簡單的東西,然後組合起來才能探測復雜的物體。
神經網路為何有效的理論來源於電路理論,它和能夠用電路元件計算哪些函數有著分不開的聯系,根據不同的基本邏輯門(與,或,非),在非正式情況下,這些函數都可以用相對較小(指隱藏單元數量)但很深的神經網路來計算 ,如果用淺層神經網路則需要指數增長的隱藏單元數量才能達到同樣的效果。
上圖是一個 4 層的神經網路,梯度下降的一個迭代過程即為前向傳播和反向傳播的計算過程,如下圖所示:
在前向傳播計算中,從第 1 層開始,第 層的輸入為上一層(第 層)的激活函數計算結果 和當前層的參數 ,輸出為當前層激活函數計算結果 ,還要緩存 和 以供反向傳播使用, 則輸入到下一層(第 層),計算過程如下:
向量化計算為:
當計算完所有層的前向傳播後,第 L 層的激活函數計算結果 即當前樣本的預測值。接下來將進行反向傳播計算,從第 L 層開始,第 層的輸入為當前層激活函數計算結果的導數值 和當前層的參數 ,輸出為上一層(第 層)激活函數計算結果的導數值 ,以及當前層參數的導數值 ,計算過程如下:
首先
由 可知 ,將 da 帶入可求得:
向量化計算為:
首先
在每一層中根據梯度下降公式,更新參數:
這就是神經網路中梯度下降一個迭代的計算過程。
神經網路中的參數包括: W 和 b。超參數包括:學習率 ,梯度下降迭代次數(iterations),隱層數(L),隱藏單元數(units),激活函數(activefunction),因為這些參數是在某種程度上決定了參數 W 和 b 的參數,所以叫做超參數。其他超參數包括:momentum,batch size,正則化參數等
可以通過嘗試不同的超參數,觀察代價函數曲線變化,從而選擇表現最好的超參數。
沒有。
https://mooc.study.163.com/smartSpec/detail/1001319001.htm
㈥ 深度神經網路是如何訓練的
Coursera的Ng機器學習,UFLDL都看過。沒記錯的話Ng的機器學習里是直接給出公式了,雖然你可能知道如何求解,但是即使不知道完成作業也不是問題,只要照著公式寫就行。反正我當時看的時候心裡並沒能比較清楚的明白。我覺得想了解深度學習UFLDL教程 - Ufldl是不錯的。有習題,做完的話確實會對深度學習有更加深刻的理解,但是總還不是很清晰。後來看了Li FeiFei的Stanford University CS231n: Convolutional Neural Networks for Visual Recognition,我的感覺是對CNN的理解有了很大的提升。沉下心來推推公式,多思考,明白了反向傳播本質上是鏈式法則(雖然之前也知道,但是當時還是理解的迷迷糊糊的)。所有的梯度其實都是對最終的loss進行求導得到的,也就是標量對矩陣or向量的求導。當然同時也學到了許多其他的關於cnn的。並且建議你不僅要完成練習,最好能自己也寫一個cnn,這個過程可能會讓你學習到許多更加細節和可能忽略的東西。這樣的網路可以使用中間層構建出多層的抽象,正如我們在布爾線路中做的那樣。例如,如果我們在進行視覺模式識別,那麼在第一層的神經元可能學會識別邊,在第二層的神經元可以在邊的基礎上學會識別出更加復雜的形狀,例如三角形或者矩形。第三層將能夠識別更加復雜的形狀。依此類推。這些多層的抽象看起來能夠賦予深度網路一種學習解決復雜模式識別問題的能力。然後,正如線路的示例中看到的那樣,存在著理論上的研究結果告訴我們深度網路在本質上比淺層網路更加強大。
㈦ AI數學基礎13——深層和淺層神經網路
來源於Andrew Ng, 《Why deep representations?》
淺層(shallow)神經網路,顧名思義就是層數很少的神經網路,比如隱藏層的層數為1,如下所示:
深層(Deep)神經網路,顧名思義就是層數很多的神經網運者絡,如下所示:
使用深層(Deep)神經網路的機器學習,就是深度學習,按照Andrew Ng的意思,Deep Learning 是一個帶有更多市場宣傳意味的詞,在工程實踐中,還是要從層數比較少的神經網路開始,慢慢的加判悄攔深,直到有掘胡效的解決問題。
深層神經網路相對於淺層神經網路的優勢有:
1, 提取更加復雜的特徵。
在一個神經網路中,位於較淺位置的神經元從輸入中提取的是較為簡單的一些特徵信息,而隨著層次的加深,神經元將提取愈加復雜的特徵信息,從而使得神經網路能夠做出更准確的判斷。
2, 避免神經元數量指數增加
㈧ 【閱讀筆記】改進卷積神經網路的14個小技巧
原文: https://mp.weixin.qq.com/s/Lh_lJNvV9BGhc6no2ln-_g
原題目誤導性太大
1)架構要遵循應用
你也許會被 Google Brain 或者 DeepMind 這些奇特的實驗室所發明的那些耀眼的新模型所吸引,但是其中許多在你的用例或者業務環境中要麼是不可能實現,要麼是實現起來非常不現實。你應該使用對你的特定應用最有意義的模型,這種模型或許比較簡單,但是仍然很強大,例如 VGG。
2)網路路徑的激增
每年的 ImageNet Challenge 的冠軍都會使用比上一屆冠軍更加深層的網路。從 AlexNet 到 Inception,再到 ResNet,Smith 注意到了「網路中路徑數量倍增」的趨勢,並且「ResNet 可以是不同長度的網路的指數集合」。
3)爭取簡單
然而,更大的並不一定是更好的。在名為「Bigger is not necessarily better」的論文中,Springenberg 等人演示了如何用更少的單元實現最先進的結果。參考:https://arxiv.org/pdf/1412.6806.pdf
4)增加對稱性
無論是在建築上,還是在生物上,對稱性被認為是質量和工藝的標志。Smith 將 FractalNet 的優雅歸功於網路的對稱性。
5)金字塔式的形狀
你也許經常在表徵能力和減少冗餘或者無用信息之間權衡。卷積神經網路通常會降低激活函數的采樣,並會增加從輸入層到最終層之間的連接通道。
6)過度訓練
另一個權衡是訓練准確度和泛化能力。用類似 drop-out 或者 drop-path 的方法進行正則化可以提高泛化能力,這是神經網路的重要優勢。請在比你的實際用例更加苛刻的問題下訓練你的網路,以提高泛化性能。
7)全面覆蓋問題空間
為了擴展你的訓練數據和提升泛化能力,請使用雜訊和數據增強,例如隨機旋轉、裁剪和一些圖像操作。
8)遞增的特徵構造
隨著網路結構越來越成功,它們進一部簡化了每一層的「工作」。在非常深層的神經網路中,每一層僅僅會遞增的修改輸入。在 ResNets 中,每一層的輸出和它的輸入時很相似的,這意味著將兩層加起來就是遞增。實踐中,請在 ResNet 中使用較短的跳變長度。
9)標准化層的輸入
標准化是另一個可以使計算層的工作變得更加容易的方法,在實踐中被證明可以提升訓練和准確率。批量標准化(batch normalization)的發明者認為原因在於處理內部的協變數,但是 Smith 認為,「標准化把所有層的輸入樣本放在了一個平等的基礎上(類似於一種單位轉換),這允許反向傳播可以更有效地訓練」。
10)輸入變換
研究表明,在 Wide ResNets 中,性能會隨著連接通道的增加而增強,但是你需要權衡訓練代價與准確度。AlexNet、VGG、Inception 和 ResNets 都在第一層使用了輸入變換以讓輸入數據能夠以多種方式被檢查。
11)可用的資源決指引著層的寬度
然而,可供選擇的輸出數量並不是顯而易見的,這依賴於你的硬體能力以及期望的准確度。
12)Summation Joining
Summation 是一種常用的合並分支的方式。在 ResNets 中,使用總和作為連接的機制可以讓每一個分支都能計算殘差和整體近似。如果輸入跳躍連接一直存在,那麼 summation 會讓每一層學到正確地東西(例如與輸入的差別)。在任何分支都可以被丟棄的網路(例如 FractalNet)中,你應該使用這種方式類保持輸出的平滑。
13)下采樣變換
在池化的時候,利用級聯連接(concatenation joining)來增加輸出的數量。當使用大於 1 的步長時,這會同時處理連接並增加連接通道的數量。
14)用於競爭的 Maxout
Maxout 被用在你只需要選擇一個激活函數的局部競爭網路中。使用求和以及平均值會包含所有的激活函數,所以不同之處在於 maxout 只選擇一個「勝出者」。Maxout 的一個明顯的用例是每個分支具有不同大小的內核,而 Maxout 可以包含尺度不變性。
1)使用調優過的預訓練網路
「如果你的視覺數據和 ImageNet 相似,那麼使用預訓練網路會幫助你學習得更快」,機器學習公司 Diffbot 的 CEO Mike Tung 解釋說。低水平的卷積神經網路通常可以被重復使用,因為它們大多能夠檢測到像線條以及邊緣這些模式。將分類層用你自己的層替換,並且用你特定的數據去訓練最後的幾個層。
2)使用 freeze-drop-path
Drop-path 會在訓練的迭代過程中隨機地刪除一些分支。Smith 測試了一種相反的方法,它被稱為 freeze-path,就是一些路徑的權重是固定的、不可訓練的,而不是整體刪除。因為下一個分支比以前的分支包含更多的層,並且正確的內容更加容易近似得到,所以網路應該會得到更好的准確度。
3)使用循環的學習率
關於學習率的實驗會消耗大量的時間,並且會讓你遇到錯誤。自適應學習率在計算上可能是非常昂貴的,但是循環學習率不會這樣。使用循環學習率(CLR)時,你可以設置一組最大最小邊界,在邊界范圍內改變學習率。Smith 甚至還在論文《Cyclical Learning Rates for Training Neural Networks》中提供了計算學習率的最大值和最小值的方法。參考:https://arxiv.org/pdf/1506.01186.pdf
4)在有雜訊的標簽中使用 bootstrapping
在現實中,很多數據都是混亂的,標簽都是主觀性的或者是缺失的,而且預測的對象可能是訓練的時候未曾遇到過的。Reed 等人在文章《TRAINING DEEP NEURAL NETWORKS ON NOISY LABELS WITH BOOTSTRAPPING》中描述了一種給網路預測目標注入一致性的方法。直觀地講,這可以奏效,通過使網路利用對環境的已知表示(隱含在參數中)來過濾可能具有不一致的訓練標簽的輸入數據,並在訓練時清理該數據。參考:https://arxiv.org/pdf/1412.6596
5)採用有 Maxout 的 ELU,而不是 ReLU
ELU 是 ReLU 的一個相對平滑的版本,它能加速收斂並提高准確度。與 ReLU 不同,ELU 擁有負值,允許它們以更低的計算復雜度將平均單位激活推向更加接近 0 的值,就像批量標准化一樣參考論文《FAST AND ACCURATE DEEP NETWORK LEARNING BY EXPONENTIAL LINEAR UNITS (ELUS)》,https://arxiv.org/pdf/1511.07289.pdf。如果您使用具有全連接層的 Maxout,它們是特別有效的。
㈨ 經典深度神經網路架構解析 - VGG,ResNet,Inception
深度神經網路對於問題的抽象建立在我們可以通過合適的神經網路架構構造一個通用的函數逼近,使得我們可以從輸入樣本空間映射到目標樣本空間。這一聽起來簡單的任務在實際構建過程中需要耗費大量的計算和時間以完成模型試驗和迭代。而由於遷移學習的可行性,使得我們可以藉助已有的在特定分類任務中表現出色的架構來完成類似甚至看起來完全不相關的任務。在學習的過程中,閱讀了一些這些經皮飢典的網路架構的相關論文,在此做一個記錄。
VGG Net 與之前的經典網路結構相比最突出的特徵是大量的使用 3x3 (部分架構中還採用了 1x1 )的小卷積核,並且採用 same padding 來維持卷積前後的 w 和 h,Feature map 的縮放完全交給 2x2 的 max pooling 層來完成,此後基本上所有的卷積神經網路的卷積核都採用 3x3 的尺寸。也正因為採用這個簡單的、小的卷積核結構,才使得 VGG 成為同時代網路中最經典的深度神經網路。
在深度神經網路中採用小卷積核的原因:小卷積核通過多層疊加後可以在輸入層取得與大卷積核同等規模的感受野,且由於網路層次的增加會同步增加網路的容量 model capacity 和復雜度 model complexity,進一步地,通過疊加多個層次的卷積核還可以減少模型的參數:例如對於通道數為 C 的輸入和輸出來說,採用 7x7 的卷積核需要的參數是 7x7xCxC = 49C 2 個,而通過疊加 3 層 3x3 的卷積核所需要的參數數量為 3 x [3x3xCxC] = 27C 2 個。
在 VGG 的架構中,作者採用 1x1 卷積的主要目的在於增加網路中的非線性,採用與原有輸入特徵相同通道數量的 1x1 的卷積結構,執行卷積前後不改變特徵的表達的數量,但根據作者的經驗在同等架構下帶有 1x1 結構的網路表現不如 3x3 的網路,因此在後續廣為沿用的 VGG 架構都是單純的 3x3 網路。
一個值得注意的細節是,為了使得網路具有縮放不變性,作者在訓練時先將全部圖片縮放至 384x384 的尺寸,在此基礎上隨機裁剪 224x224 的圖片區域作為網路的輸入,最後再用經過在指定范圍內進行尺寸縮放的圖片進行微調。
另一個細節是作者在測試時採用了很多比較高明的技巧如 Ensemble 和 multi-crop 等方法使得測試的結果得到了一定的提升,不過這些提升一般只在競賽中有意義,在真實的生產環境中應用很少。
ResNet 的提出是基於這樣一個發現:直覺上深度神經網路應該的性能應該優於架構類似但相對層數更少的網路,但在實際情況中,隨著網路層次的加深,梯度消失 Vanishing gradient 的影響愈加明顯,網路的訓練變得異常困難。這個現象在作者看來反應出了通過非線性激活的神經網路來構建近似恆等映射是困難的,那麼我們可以反其道而行之,我們希望神經網路學習這個特定映射和恆等映射之間的差值,此時,由於給定了一個參考基準,使得整個學習的過程更加的容易,這兆擾個想法實在是精妙!
在此基礎上 ResNet 網路的構建都是基於上圖中基本單元構成的。
Inception 這個系列目前共有燃猜返 5 篇文章,包括:
其中第一篇是對 Inception 架構的一個簡單介紹,第二篇則是在改進 Inception 網路的過程中發現了 Batch Normalization 這一被後續廣泛使用的提高網路穩健性的方法,第三篇 Rethinking the Inception Architecture for Computer Vision 這一篇相比前兩篇論文信息量更大,作者給了很多構建深度卷積神經網路的建議,並且在這一篇中進一步改進了下圖中第一版的 Inception Mole,將 5x5 的卷積核改為兩個 3x3 卷積層的疊加,這是一篇十分誠意的論文,值得反復閱讀。
相比於 VGG Net,Inception 網路不再是基本的卷積神經網路的堆疊,取而代之的是對不同變體的 Inception Mole 進行疊加。盡管從結構上 Inception 網路更加復雜,但由於大量的使用了 1x1 的卷積核,使得參數量居然比 VGG 還要小。
在此我們除了盲目復雜化網路以外,一個不可避免的問題是:為什麼 Inception 網路會有更有的表現?
一種說法是我們在構建網路的過程中很難知道如何選擇合適的卷積核,而 Inception Mole 使得我們可以嘗試多個不同的選擇,讓網路自己確定哪個方式更加合適。
另一種說法來自本系列的第 5 篇文章,keras 的作者 Francois Chollet 給出的解釋是,在傳統的卷積神經網路中,卷積核不僅需要在寬度和高度方向上建立特徵識別能力,還要在深度(通道)方向上也構建這一能力。再一次地, 知識的表示形式決定了學習的難易程度 ,我們是否可以將這兩個方向的特徵識別分離開來,而簡化這一任務?這就是 Inception 網路及後續在此基礎上衍生出的 Xception 網路的核心思想。
㈩ 深層神經網路的超參數調試、正則化及優化
訓練集 ( Training set )
作用是用來擬合模型,通過設置分類器的參數,訓練分類模型。後續結合驗證集作用時,會選出同一參數的不同取值,擬合出多個分類器。
驗證集 ( Dev set )
作用是當通過訓練集訓練出多個模型後,為了能找出效果最佳的模型,使用各個模型對驗證集數據進行預測,並記錄模型准確率。選出效果最佳的模型所對應的參數,即用來調整模型參數。如svm中的參數c和核函數等。
測試集 ( Test set )
通過訓練集和驗證集得出最優模型後,使用測試集進行模型預測。用來衡量該最優模型的性能和分類能力。即可以把測試集當做從來不存在的數據集,當已經確定模型參數後,使用測試集進行模型性能評價。
一個有助於理解的形象比喻:
訓練集 —— 課本,學生根據課本里的內容來掌握知識。
驗證集 —— 作業,通過作業可以知道 不同學生學習情況、進步的速度快慢。
測試集 —— 考試,考的題是平常都沒有見過,考察學生舉一反三的能力。
訓練集 直接參與了模型調參的過程,顯然不能用來反映模型真實的能力(防止課本死記硬背的學生擁有最好的成績,即防止 過擬合 ) 。
驗證集 參與了人工調參(超參數)的過程,也不能用來最終評判一個模型(刷題庫的學生不代表其學習能力強)。
所以要通過最終的考試 (測試集) 來考察一個學生(模型)真正的能力。
如何將只有一個包含m個樣例的數據集D,產生出訓練集S和測試集T(驗證集可以省略)?主要有以下三種方法:
自助法 ( bootstrapping )
給定m個樣本的數據集D,我們對它進行采樣產生數據集D',每次隨機從D中挑選一個樣本,將其拷貝入D',然後再將樣本放回原始數據集D。顯然,該樣本在下次采樣時任然有可能被採到。這個過程重復m次後,我們就得到了含有m個樣本的數據集D',這就是自助采樣的結果。 樣本有重復采樣,也有一次也沒有被採到的。從未採到的結果是 ,取極限得到
因此,使用自助法約有1/3的數據集沒有被選中過,它們用於測試,這種方式叫「外包估計」。
自助法在數據集小,難以劃分訓練集、測試集的時候有很大的效果,如果數據集足夠大的時候,留出法和交叉驗證是更好的選擇。
留出法 ( hold-out )
將整個數據集D劃分為兩個互斥的集合,其中一個作為訓練集S,另一個作為測試集T。即,D=S∪T,S∩T=∅。在S上訓練出模型,T作為測試集,來評估模型效果。
當樣本數據量較小(10000條左右及以下)時,通常取其中70%作為訓練集,30%作為測試集;或60%作為訓練集,驗證集和測試集各20%。
交叉驗證法 ( cross validation )
如圖所示,交叉驗證法的實現流程大致如下:
(1) 將整個數據集分成k個大小相似的子集,即D=D1∪D2∪...∪Dk,Di∩Dj=∅(故又稱k折交叉驗證法,通常取k=10 )。
(2) 對於每一個模型Mi,演算法執行k次,每次選擇一個Sj(1≤j≤k)作為測試集,其它作為訓練集來訓練模型Mi,把訓練得到的模型在Sj上進行測試,這樣一來,每次都會得到一個誤差E,最後對k次得到的誤差求平均,就可以得到模型Mi的泛化誤差。
(3) 演算法選擇具有最小泛化誤差的模型作為最終模型,並且在整個訓練集上再次訓練該模型,從而得到最終的模型。
交叉驗證的主要的目的是 為了選擇不同的模型類型(比如一次線性模型、非線性模型) ,而 不是為了選擇具體模型的具體參數 。比如在BP神經網路中,其目的主要為了選擇模型的層數、神經元的激活函數、每層模型的神經元個數(即所謂的超參數),每一層網路神經元連接的最終權重是在模型選擇(即K折交叉驗證)之後,由全部的訓練數據重新訓練。
假設這就是數據集,顯然用簡單分類器(如邏輯回歸)並不能很好地擬合上述數據。這種情況稱為 欠擬合 。
相反地,如果採用一個非常復雜的分類器(如深度神經網路或含有隱藏單元的神經網路),擬合效果會非常好。但與此同時,模型的復雜度也會過高,這種稱為 過擬合 。
在兩者之間,可能會存在一些復雜程度適中、數據擬合適度的分類器,擬合結果較為合理,稱為 適度擬合 。
如上圖所示,訓練集誤差和驗證集誤差均較高時為 高偏差(欠擬合) 情況;訓練集誤差較高,驗證集誤差較高低時為 高方差(過擬合) 情況。
(1) 如何減小偏差(防止欠擬合)
① 增大神經網路規模。
(2) 如何減小方差(防止過擬合)
① 增加數據集樣本數量;
② 正則化。
參數 是指神經網路中由數據驅動並進行調整的變數,如𝑊和𝑏。
超參數 是指無需數據驅動,而是在訓練前或者訓練中人為進行調整的變數。例如演算法中的learning rate 𝑎(學習率)、iterations(梯度下降法循環的數量)、𝐿(隱藏層數目)、𝑛[𝑙](隱藏層單元數目)、choice of activation function(激活函數的選擇)等都需要人為設置,這些數字實際上控制了最後的參數𝑊和𝑏的值,所以它們被稱作超參數。
神經網路中的超參數主要分為三類:網路參數、優化參數、正則化參數。
網路參數
可指網路層與層之間的交互方式(相加、相乘或者串接等)、卷積核數量和卷積核尺寸、網路層數(也稱深度)和激活函數等。
優化參數
一般指學習率(learning rate)、批樣本數量(batch size)、不同優化器的參數以及部分損失函數的可調參數等。
正則化參數
權重衰減系數,隨機失活比率(dropout)等。
正則化有利於減小訓練集和驗證集准確率的方差,防止過擬合。在無法增加樣本數量或增加樣本數量的成本過高時,正則化是一種行之有效的方法。
一般將任意 維向量 的 - 范數定義為
根據定義:
當 時, 的 范數為 ,表示向量 中非0元素的個數。
當 時, 的 范數為 ,等於向量 中所有元素的絕對值之和。
當 時, 的 范數為 ,等於向量 中所有元素的平方和開根號。
正則化(Regularization) 的主要目的是控制模型復雜度,減小過擬合。最基本的正則化方法是在原目標(代價)函數 中添加懲罰項,對復雜度高的模型進行「懲罰」。
對於神經網路模型, 正則化即在其代價函數中添加 正則項:
其中, 。之後再求解優化問題 即可。
假設某三層神經網路存在過擬合問題,採用dropout正則化會遍歷網路的每一層,並設置消除該層中每一個節點的概率(比如0.5),最後得到一個節點更少、規模更小的網路,然後再用反向傳播方法進行訓練,就能有效防止過擬合。
最常用的方法是 inverted dropout(反向隨機失活) 。對於一個三層神經網路( ),以第三層為例,實施dropout的步驟如下:
① 定義一個三層dropout矩陣d3:
d3=numpy.random.rand(a3.shape[0],a3.shape[1])
其中,a3表示神經網路第三層的激活函數矩陣。
② 設置 ( )的大小。 表示保留某個隱藏單元的概率。將第①步產生的隨機矩陣d3的每個元素與 進行比較,小於置1,大於置0,得到新的d3矩陣(1表示保留該節點,0表示刪除該節點)。
③ 將a3與新的d3矩陣相乘(矩陣對應元素相乘),得到新的激活函數矩陣:
a3 =np.multiply(a3,d3)
④ 將新的a3矩陣除以keep-prob:
a3 /= keep_prob
目的是保證a3的期望值(均值)不變,從而保證第三層的輸出不變。
① 使用dropout可以使得部分節點失活,可以起到簡化神經網路結構的作用,從而起到正則化的作用。
② 因為dropout是使得神經網路的節點隨機失活,這樣會讓神經網路在訓練的時候不會使得某一個節點權重過大。因為該節點輸入的特徵可能會被清除,所以神經網路的節點不能依賴任何輸入的特徵。dropout最終會產生收縮權重的平方范數的效果,來壓縮權重,達到類似於 正則化的效果。
① dropout在測試階段不需要使用,因為如果在測試階段使用dropout可能會導致預測值產生隨機變化(因為dropout使節點隨機失活)。而且,在訓練階段已經將權重參數除以keep-prob來保證輸出的期望值不變,所以在測試階段沒必要再使用dropout。
② 神經網路的不同層在使用dropout的時候,keep-prob可以不同。因為可能有的層參數比較多,比較復雜,keep-prob可以小一些,而對於結構比較簡單的層,keep-prob的值可以大一些甚至為1,keep-prob等於1表示不使用dropout,即該層的所有節點都保留。
加快訓練速度。
對於一個神經網路模型,考慮其代價函數:
如果未歸一化輸入,其代價函數的形狀會較為細長狹窄。在這樣的代價函數的限制下,為避免陷入局部最優解,梯度下降法的學習率必須設置得非常小。
如果歸一化輸入,代價函數便呈現球形輪廓。這種情況下,不論從哪個位置開始梯度下降法,都能使用較大的學習率,從而更快速、直接地找到全局最優解。
對於包含n個特徵的m個樣本的數據集,其輸入歸一化的過程主要分為兩步:
① 零均值化
② 歸一化方差
其中, 代表第 個樣本的特徵矩陣。
訓練集、驗證集、測試集特徵矩陣的平均值 和標准差 要保持一致,確保它們歸一化後符合同一分布。