A. CNN卷積神經網路 DeepLearnToolbox問題
我沒用過CNN,我只能就matlab神經網路普遍存在的問題回答你,
1,同樣的輸入訓練樣本和測試樣本得到不一樣的結果,可能是因為權值初始化是隨機的,每個隨機的初始值在訓練的時候,誤差只能收斂到那片區域的局部最小值,而不能保證全局最小值。就像你被隨機傳送到一片起伏不定的山區,你沿著下山路徑走到地勢最低的點,但不能保證那個是整片山區地勢最低的點。這是神經網路中很常見的局部最小值問題。你可以通過設置學習演算法來改善。
2,神經網路會默認將樣例按一定比例劃分為訓練數據和測試數據,好像是這三個屬性
net.divideParam.trainRatio ;
net.divideParam.valRatio;
net.divideParam.testRatio;
如果你的測試樣例不多的話,那麼再劃分之後的訓練數據就更少了,所以有些數據可能根本猜歲沒訓練慧兆芹過。解決方法前畢就是把訓練比例設置為1。
這是我在學習過程中遇到的實際問題以及解決方法,希望對你有幫助
B. 卷積神經網路卷積層算完數據超閾怎麼辦
、計算方法不同1、前饋神經網路:一種最簡單的神經網路,各神經元分層排列AI愛發貓 www.aifamao.com。每個神經元只與前一層的神經元相連。接收前一層的輸出,並輸出給下一層塵中.各層間沒有反饋。
2、BP神經網路:是一種按照誤差逆向傳播演算法訓練的多層前饋神經網路。3、卷積神經網路:包含卷積計算且具有深度結構的前饋神經網路。
二、用途不同1、前饋神經網路:主要應用包括感知器網路、BP網路和RBF網路。
2、BP神經網路:(1)函數逼近:用輸入向量和相應的輸出向量訓練一個網路逼近一個函數;(2)模式識別:用一個待定的輸出向量將它與輸入向量聯系起來;(3)分類:把輸入向量所定義的合適方式進行分類;(4)數據壓縮:減少輸出向量維數以便於傳輸或存儲。
3、卷積神經網路:可應用於圖像識別、物體識別等計算機視覺、自然語言處理、物理學和遙感科學等領域。聯系:BP神經網路和卷積神經網路都屬於前饋神經網路,三者都屬於人工神經網路。因此,三者原理和結構相同。
三、作用不同1、前饋神經網路:結構簡單,應用廣泛,能夠以任意精度逼近任意連續函數及平方可積函數.而且可以精確實現任意有限訓練樣本集。2、BP神經網路:具有很強的非線性映射能力和柔性的網路結構。
網路的中間層數、各層的神經元個數可根據具體情況任意設定,並且隨著結構的差異其性能也有所不同。3、卷積神經網路頌兄拆:具有表徵學習能力,能夠按其階層結構對輸入信息進行平移不變分類。
(2)卷積神經網路電腦崩潰擴展閱讀:1、BP神經網路優劣勢BP神經網路無論在網路理論還是在性能方面已比較成熟。其突出優點就是具有很強的非線性映射能力和柔性的網路結構。
網路的中間層數、各層的神經元個數可根據具體情況任意設定,並且隨著結構的差異其性能也有所不同。但是BP神經網路也存在以下的一些主要缺陷。
①學習速度慢,即使是一個簡單的問題,一般也需要幾百次甚至上千次的學習才能收斂。②容易陷入局部極小值。③網路層數、神經元個數的選擇沒有相應的理論指導。④網路推廣能力有限。
2、人工神經網路的特點和優越性,主要表現在以下三個方面①具有自學習功能。
例如實現圖像識別時,只在先把許多不同的圖像樣板和對應的應識別的結果輸入人工神經網路,網路就會通過自學習功能,慢慢學會識別類似的圖像。自學習功能對於預測有特別重要的意義。
預期未來的人工神經網路計算機將野棗為人類提供經濟預測、效益預測,其應用前途是很遠大的。②具有聯想存儲功能。用人工神經網路的反饋網路就可以實現這種聯想。③具有高速尋找優化解的能力。
尋找一個復雜問題的優化解,往往需要很大的計算量,利用一個針對某問題而設計的反饋型人工神經網路,發揮計算機的高速運算能力,可能很快找到優化解。
參考資料:網路—前饋神經網路網路—BP神經網路網路—卷積神經網路網路—人工神經網路。
卷積神經網路處理規格不同的圖片
用卷積神經網路處理 「圖」 結構數據應該怎麼辦
。
卷積神經網路有以下幾種應用可供研究:1、基於卷積網路的形狀識別物體的形狀是人的視覺系統分析和識別物體的基礎,幾何形狀是物體的本質特徵的表現,並具有平移、縮放和旋轉不變等特點,所以在模式識別領域,對於形狀的分析和識別具有十分重要的意義,而二維圖像作為三維圖像的特例以及組成部分,因此二維圖像的識別是三維圖像識別的基礎。
2、基於卷積網路的人臉檢測卷積神經網路與傳統的人臉檢測方法不同,它是通過直接作用於輸入樣本,用樣本來訓練網路並最終實現檢測任務的。
它是非參數型的人臉檢測方法,可以省去傳統方法中建模、參數估計以及參數檢驗、重建模型等的一系列復雜過程。本文針對圖像中任意大小、位置、姿勢、方向、膚色、面部表情和光照條件的人臉。
3、文字識別系統在經典的模式識別中,一般是事先提取特徵。提取諸多特徵後,要對這些特徵進行相關性分析,找到最能代表字元的特徵,去掉對分類無關和自相關的特徵。
然而,這些特徵的提取太過依賴人的經驗和主觀意識,提取到的特徵的不同對分類性能影響很大,甚至提取的特徵的順序也會影響最後的分類性能。同時,圖像預處理的好壞也會影響到提取的特徵。
卷積神經網路為什麼最後接一個全連接層
在常見的卷積神經網路的最後往往會出現一兩層全連接層,全連接一般會把卷積輸出的二維特徵圖(featuremap)轉化成(N*1)一維的一個向量全連接的目的是什麼呢?
因為傳統的端到到的卷積神經網路的輸出都是分類(一般都是一個概率值),也就是幾個類別的概率甚至就是一個數--類別號,那麼全連接層就是高度提純的特徵了,方便交給最後的分類器或者回歸。
但是全連接的參數實在是太多了,你想這張圖里就有20*12*12*100個參數,前面隨便一層卷積,假設卷積核是7*7的,厚度是64,那也才7*7*64,所以現在的趨勢是盡量避免全連接,目前主流的一個方法是全局平均值。
也就是最後那一層的featuremap(最後一層卷積的輸出結果),直接求平均值。有多少種分類就訓練多少層,這十個數字就是對應的概率或者叫置信度。
卷積神經網路是如何反向調整參數的?
卷積神經網路的模型問題? 50
。
怎麼又是你.....網路自然是搭建起來的啊,比如CNN,一層一層地建,如果你是用別人已經建好的網路,比如最簡單的LeNet-5,那麼Tensorflow中會直接提供你一個Net;但是如果你是自定義網路類型,那麼需要繼承nn.Noles,然後重新定義網路結構,封裝成一個Net,總結起來,模型是很多數學公式搭在一起,然鵝,數學公式是封裝好的,可以相互交流哈。
打開CSDN,閱讀體驗更佳
卷積神經網路的缺點是什麼?_土豆西瓜大芝麻的博客_卷積神經...
平移不變性 當我們說平移不變性時,我們意思是,稍微改變同一物體的朝向或位置,可能並不會激活那些識別該物體的神經元。 正如上圖所示,假如一個神經元是用來識別一隻貓的,其參數會隨著貓的位置和轉動的變化而變化。雖然數據擴增(data aug...
卷積神經網路存在的問題,卷積神經網路的卷積層_普通網友的博客-CSDN博 ...
對於無法完美解決的梯度消失問題,一個可能部分解決梯度消失問題的辦法是使用ReLU(RectifiedLinearUnit)激活函數,ReLU在卷積神經網路CNN中得到了廣泛的應用,在CNN中梯度消失似乎不再是問題。 那麼它是什麼樣子呢?其實很簡單,比我們前面提到的...
最新發布 影響深度卷積神經網路演算法的關鍵參數是網路結構
局部連接的概念參考局部感受域,即某個視神經元僅考慮某一個小區域的視覺輸入,因此相比普通神經網路的全連接層(下一層的某一個神經元需要與前一層的所有節點連接),卷積網路的某一個卷積層的所有節點只負責前層輸入的某一個區域(比如某個3*3的方塊)。卷積神經網路的連接性:卷積神經網路中卷積層間的連接被稱為稀疏連接(sparse connection),即相比於前饋神經網路中的全連接,卷積層中的神經元僅與其相鄰層的部分,而非全部神經元相連。權重共享和稀疏連接一樣,減少了卷積神經網路的參數總量,並具有正則化的效果。
繼續訪問
卷積神經網路難點梳理
目錄1 基本概念及原理1.1 基本概念1.2 基本原理2 卷積是怎麼「卷」的2.1 數學中的卷積2.2 CNN中的卷積3 損失函數是怎樣當好指揮官的4 梯度下降、反向傳播和顯卡參考內容 1 基本概念及原理 1.1 基本概念 概念名稱 目的 操作 示意圖 卷積(Convolution) 提取特徵 將圖像矩陣遍歷乘以卷積核矩陣並輸出 池化(Pooling) 降低數據量 對小塊矩陣中的所有數取平均(平均池化)或者取最大(最大池化)並只輸出一個值,再遍歷 激活(Activation) 對
繼續訪問
卷積神經網路的缺點_遼寧大學的博客_卷積神經網路的優缺點
1.做卷積神經網路需要將數據集歸一化。不同的尺寸混合在一起難以訓練。2.卷積神經網路沒有記憶功能。3.對圖像處理很友善,對視頻語音自然語言處理能力差...
關於CNN卷積神經網路的問題_麥格芬230的博客
將卷積神經網路CNN應用到文本分類任務,利用多個不同大小的卷積核來提取句子中的關鍵信息(類似於多窗口大小的N-gram),從而能夠更好地捕捉局部相關性。 4.在情感分析任務中,TextCNN的卷積核,卷積的是哪些向量呢?卷積卷的是這些向量的什麼...
深入淺出——搞懂卷積神經網路的過擬合、梯度彌散、batchsize的影響的問題(二)
過擬合 梯度彌散 batchsize 不平衡數據集
繼續訪問
cnn卷積神經網路反向傳播,卷積神經網路維度變化
深度學習框架,尤其是基於人工神經網路的框架可以追溯到1980年福島邦彥提出的新認知機[2],而人工神經網路的歷史更為久遠。1989年,燕樂存(YannLeCun)等人開始將1974年提出的標准反向傳播演算法[3]應用於深度神經網路,這一網路被用於手寫郵政編碼識別。盡管演算法可以成功執行,但計算代價非常巨大,神經網路的訓練時間達到了3天,因而無法投入實際使用[4]。...
繼續訪問
卷積神經網路CNN特點功能及其缺陷_一隻不出息的程序員的博客...
卷積:簡單地說,圖像經過平移,相應的特徵圖上的表達也是平移的。 下圖只是一個為了說明這個問題的例子。輸入圖像的左下角有一個人臉,經過卷積,人臉的特徵(眼睛,鼻子)也位於特徵圖的左下角。 在神經網路中,卷積被定義為不同位置的特徵...
記錄 訓練卷積神經網路時遇到的問題_後知後覺w的博客
記錄 訓練卷積神經網路時遇到的問題 問題1、softmax分類的loss最後會停在0.6931這個值 原因分析:在分類層使用了keras.layers.Lambda,導致分類器沒有可訓練的參數,因此沒有分類能力,即,無論是否為object,softmax的輸出都是0.5,根據loss...
都說卷積神經網路是個好東西,但它有什麼弊端呢?
圖片來源:Mathworks翻譯 | 王赫編輯 | Donna2012年,三位深度學習的「巨人」Alex Krizhevsky, Ilya Sutskever 和 Geoffrey Hinton,聯合發表了題為 「ImageNet Classification with Deep Convolutional Networks」 的論文。自此,卷積神經網路( CNNs )就成了一個萬人追捧的工具,並
繼續訪問
卷積神經網路—全連接層
卷積神經網路—全連接層 全連接層 全連接層與卷積層 全連接層與GAP(全局平均池化層) [1] https://blog.csdn.net/Touch_Dream/article/details/79775786 [2] https://www.cnblogs.com/zongfa/p/9048680.html [3] https://www.hu.com/question/410379...
繼續訪問
五、卷積神經網路CNN5(卷積相關問題2)_滿滿myno的博客
輸出深度(通道)與卷積核(過濾器)的個數相等。 激活函數通常放在卷積神經網路的那個操作之後 通常放在卷積層之後。 如何理解最大池化層有幾分縮小 池化層:對輸入的特徵圖進行壓縮,一方面使特徵圖變小,簡化網路計算復雜度;一方面 ...
卷積神經網路的缺點
(1)效果好是因為仿生學,缺點是無法擴展到平面視覺以外的地方吧。 (2)缺點一:實現比較復雜。缺點二:訓練所需時間比較久。 (3)不是單一演算法,不同的任務需要單獨訓練 (4)世界(物理空間、解空間等)是連續且局部平坦的+規律/特徵具有時空局部平移不變性,即世界存在局部平移不變的統計規律 舉個例子:在地球表面某局部畫三角形,發現內角和總是等於180,並且隨便跑到地球的哪裡都是如此,但是如果你
繼續訪問
神經網路 卷積神經網路,卷積神經網路常見問題
卷積神經網路(ConvolutionalNeuralNetwork,CNN)是一種前饋神經網路,它的人工神經元可以響應一部分覆蓋范圍內的周圍單元,對於大型圖像處理有出色表現。[1] 它包括卷積層(alternatingconvolutionallayer)和池層(poolinglayer)。卷積神經網路是近年發展起來,並引起廣泛重視的一種高效識別方法。...
繼續訪問
卷積神經網路(CNN)入門常見問題解答
目錄 什麼是神經元? 激活函數的作用? 什麼是神經網路? CNN怎麼進行識別? 計算機如何識別圖像? CNN如何更准確人性化的對比圖像? 什麼是卷積操作? 感謝作者: CNN筆記:通俗理解卷積神經網路_v_JULY_v的博客-CSDN博客_卷積神經網路通俗理解 什麼是神經元? 神經網路由大量的神經元相互連接而成。每個神經元接受線性組合的輸入後,最開始只是簡單的線性加權,後來給每個神經元加上了非線性的激活函數,從而進行非線性變換後輸出。每兩個神經元之間的連接代表加權值,稱...
繼續訪問
卷積神經網路——解決參數太多問題
一、全連接網路的局限性 圖像變大導致色彩書變多,不好解決 不便處理高維數據 對於比較復雜的高維數據,如果按照全連接的方法,則只能通過增加節點、增加層數的方式來解決。增加節點會引起參數過多的問題。由於隱藏層神經網路使用的是sigmod或tanh激活函數,其反向傳播的有效成層數只能在4~6層左右。 二、理解卷積神經網路 三、網路結構 卷積神經網路的結構與全連接網路相比復雜很多。它的網路結構主要包括卷積層、池化層。細節又可以分為濾波器、步長、卷積操作、池化操作。 1.網路結構描述 對於一般的圖片會使用多個卷積
繼續訪問
人工智慧深度學習卷積神經網路入門
<span style="font-size:16px;">"java大數據人工智慧培訓學校全套教材"系列課程由1000集視頻構成,基本就 是1)時下流行的java培訓學校主流內部教材,2)和市面上培訓學校的通 行的課程體系幾乎一樣。所以這套課程都能自己學下來,等於上了培訓學校一次,完全可以找個java工程師的工作了。</span><br /> <br /> <span style="font-size:14px;"><span style="font-size:16px;"> 通過學習卷積神經網路概述,為什麼引入神經網路來做識別,判斷,預測,</span><strong><span style="font-size:16px;">訓練模型</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">激活函數</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">sigmoid激活函數</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">導數和切線</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">sigmoid激活函數如何求導</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">鏈式法則</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">梯度</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">梯度下降法與delta法則</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">BP(back propagation)誤差逆傳播神經網路</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">卷積到底有什麼作用?如何做到特徵提取</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">池化的名字由來</span></strong><span style="font-size:16px;">,</span><strong><strong><span style="font-size:16px;">dropout</span></strong></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">Anaconda Prompt的用法</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">Jupyter notebook的用法</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">Spyder的用法</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">建立安裝Tensorflow所需的Anaconda虛擬環境</span></strong><span style="font-size:16px;">,</span><strong><span style="font-size:16px;">如何在Anaconda虛擬環境安裝Tensorflow與Keras</span></strong><span style="font-size:16px;">概念等讓大家對人工智慧,卷積神經網路快速入門。</span></span><br /> <br /> <span style="font-size:16px;">課程特色:專業細致,偏案例,理論強。</span><br /> <br /> <span style="font-size:14px;"><span style="font-size:16px;">課程軟體使用:</span><span style="font-size:14px;"><strong><span style="font-size:16px;">Anaconda,</span><span style="font-size:14px;"><strong><span><span style="font-size:16px;">Spyder,</span><span style="font-size:16px;"><strong><span style="font-size:16px;">Jupyter notebook</span></strong></span></span></strong></span></strong></span></span><br /> <br /> <span style="font-size:16px;">重要聲明:</span><br /> <br /> <span style="font-size:16px;">1) 如果感覺噪音大,可以選擇不用耳機,加音箱或用電腦原聲 </span><br /> <br /> <span style="font-size:14px;"><span style="font-size:16px;">2) 既然我們的名字叫</span><span style="font-size:16px;">人工智慧深度學習卷積神經網路入門</span><span style="font-size:16px;">,這個課程的特點就在於成本最低的, 讓你最快速的,最容易的入門。</span><span style="font-size:16px;">人工智慧深度學習卷積神經網路入門</span><span style="font-size:16px;">的最大的難點在於入門入不了,從而最終放棄。俗話說師傅領進門,修行在個人。只要入了門了,後面的事都好辦。選課前,務必注意本章的學習目標和內容。想學更多,注意後邊的課程。</span></span>
繼續訪問
python卷積神經網路回歸預測_回歸[keras]的一維卷積神經網路,做
在上一篇博客里我介紹了如何利用keras對一個給定的數據集來完成多分類任務。100%的分類准確度驗證了分類模型的可行性和數據集的准確度。在這篇博客當中我將利用一個稍加修改的數據集來完成線性回歸任務。相比較以往的線性回歸處理方式,我認為使用神經網路實現線性回歸要簡單和准確得多。數據集大小仍然是247*900,不同的是數據集的第247位變成了濕度特徵的真實濕度值。不同於分類演算法得到的決策面,回歸演算法得...
繼續訪問
卷積神經網路之全連接層
大多數內容來源於 :卷積神經網路中的全連接層 全連接層的作用是: 連接所有的特徵,將輸出值送給分類器 (如softmax分類器),其將卷積輸出的二維特徵圖轉化成 (N * 1)一維的一個向量。 最後的兩列小圓球就是兩個全連接層,在最後一層卷積結束後,又進行了一次池化操作,輸出了20個 12*12 的圖像(20指最後一層的厚度),然後通過了一個全連接層變成了 1*100 的向量(第一個全連接層神...
繼續訪問
人工神經網路的功能特點,神經網路的優缺點
此時,網路學習了過多的樣本細節,而不能反映樣本內含的規律由於BP演算法本質上為梯度下降法,而它所要優化的目標函數又非常復雜,因此,必然會出現「鋸齒形現象」,這使得BP演算法低效;多層前向BP網路的問題:從數學角度看,BP演算法為一種局部搜索的優化方法,但它要解決的問題為求解復雜非線性函數的全局極值,因此,演算法很有可能陷入局部極值,使訓練失敗;例如實現圖像識別時,只在先把許多不同的圖像樣板和對應的應識別的結果輸入人工神經網路,網路就會通過自學習功能,慢慢學會識別類似的圖像。第三,具有高速尋找優化解的能力。...
繼續訪問
【Keras】卷積神經網路數據回歸預測實戰
基於卷積神經網路的數據回歸預測
繼續訪問
熱門推薦 反向傳播演算法(過程及公式推導)
反向傳播演算法(Backpropagation)是目前用來訓練人工神經網路(Artificial Neural Network,ANN)的最常用且最有效的演算法。
繼續訪問
深度學習---卷積神經網路解決分類與回歸問題
一、CNN神經網路的發展史: Lenet,1986年 Alexnet,2012年 2012年,Imagenet比賽冠軍的model——Alexnet [2](以第一作者alex命名),AlexNet 是一種典型的 convolutional neural network,它由5層 convolutional layer,2層 fully connected layer,和最後一層 label layer (1000個node, 每個node代表ImageNet中的一個類別) 組成 GoogleNet
繼續訪問
深度學習之卷積神經網路CNN詳細
計算機視覺、自然語言處理等領域(圖像分類、圖像分割、圖像檢測、文本
繼續訪問
一文讓你徹底了解卷積神經網路
目錄 卷積層 直觀理解卷積 卷積計算流程 計算過程: 思考: 池化層(PoolingLayer) 卷積神經網路的組成 前向傳播與反向傳播 卷積神經網路(Convolutional Neural Network,CNN)是一種前饋神經網路,它的人工神經元可以響應一部分覆蓋范圍內的周圍單元,對於大型圖像處理有出
C. matlab卷積神經網路運行有錯誤
錯誤原因是cnnsetup函數找不到。
1. 請將程序文件夾至於不含空格和中文的路徑下,路徑越簡單越好,比如D:works這種
2. 請在出錯語句前加入一行:
whichcnnsetup;ls;
然後貼出執行結果,以便診斷出錯原因。
D. 用於量子計算機的深度卷積神經網路
量子計算機將用於什麼用途?量子計算機有望在許多領域幫助解決難題,包括機器學習。
本文詳細講述 量子計算機 上 卷積神經網路 (CNN)的理論實現。我們將此演算法稱為 QCNN ,我們證明了它可以比CNN 更快 地運行,並且精度 很高 。
為此,我們必須提出 卷積積 的 量子形式 ,找到實現非線性和池化的方法,以及對 表示圖像 的 量子態 進行層析成像的新方法,以 保留有意義的信息 。
簡而言之,我們可以說 量子物理系統可以描述為 維度為2^n的某些希爾伯特空間中的 向量 ,其中n是粒子數。實際上,這些向量表示許多可能的觀察結果的疊加。
另一方面,機器學習,尤其是神經網路,正在粗略地使用向量和矩陣來理解或處理數據。 量子機器學習(QML)旨在使用量子系統對向量進行編碼,並使用新的量子演算法對其進行學習 。一個關鍵的概念是在許多矢量上使用量子疊加,我們可以同時處理它們。
我不會更深入地介紹量子計算或QML。有關更多詳細信息,可以參考NeurIPS 2019中有關 Quantum k-means的 一篇文章 :
卷積神經網路(CNN)是一種流行且高效的神經網路,用於圖像分類,信號處理等。在大多數層中,將 卷積積 應用於圖像或張量的輸入上。通常後面是 非線性層和池化層 。
3D張量輸入X ^ 1(RGB圖像)和4D張量內核K ^ 1之間的卷積。
在本章中,我將重點介紹一層,解釋什麼是量子CNN。
這里的核心思想是我們可以根據矩陣乘法來重新構造卷積積。
該演算法首先以量子疊加方式載入矩陣的 所有行和列 。然後,我們使用先前開發的 Quantum Inner Proct Estimation估算 輸出的每個像素。在實踐中,這就像只計算一個輸出像素(圖中的紅點),但是以 量子疊加的方式進行計算可以使罩山吵它們同時全部都具有 !然後,我們可以同時對它們中的每一個應用非線性。
不幸的是,我們所擁有的只是一個量子狀態,其中所有像素並行存在,並不意味著我們可以訪問所有像素。如果我們打開"量子盒"並查看結果(一個度量),我們 每次都會隨機地只看到一個輸出像素 。在打開盒子之前,這里都有"四處漂浮"的東西,就像著名的薛定諤的死活貓。
為了解決這個問題,我們引入了唯鉛一種 只檢索最有意義的像素的方法 。實際上,量子疊加中的每個輸出像素都有一個幅度,與我們測量系統時 被看到 的幅度有關。在我們的演算法中,我們強制此幅度等於像素值。 因此,具有高值的輸出像素更有可能被看到。
在CNN中,輸出中的高值像素非常重要。它們代表輸入中存在特定模式的區域。通過了解不同模式出現的位置,神經網路可以理解圖像。因此,這些 高價值像素承載著有意義的信息 ,我們可以舍棄其他希望CNN適應的 像素 。
圖像上量子效應(雜訊,隨機性,采樣)的小示例。憑直覺,我們僅對高值像素采樣後仍可以"理解"圖像。
請注意,在對這些輸出像素進行采樣時,我們可以在存儲它們時應用任何類型的 合並 (有關技術細節,請參見論文)。我們將這些像素存儲在經典內存中,以便可以將它們重新載入為 下一層的 輸入。
傳統上,CNN層需要時間 Õ( 輸出大小 x 內核大小 ) 。這就是為什麼例如使用許多大內核來訓練這些網路變得昂貴的原因。我們的 量子CNN 需要時間 為O( ( σ X 輸出大小) X Q) ,其中 σ 是我們從輸出(<1)繪制樣品的比率,和 Q 表示量子精度參數和數據相關的參數一束。有 沒有在內核大小更依賴 (數量和尺寸),這可能允許進行更深入物侍的CNN。
通過量子CNN的這種設計,我們現在也想用量子演算法對其進行訓練。訓練包括遵循梯度下降規則更新內核參數。在這里也可以找到一種更快的量子演算法,它幾乎等同於具有某些額外誤差的通常的梯度下降。
QCNN和量子反向傳播看起來不錯,但暗示了很多近似,雜訊和隨機性。盡管有這些偽像,CNN仍然可以學習嗎?我們比較了小型經典CNN的訓練和QCNN在學習對手寫數字進行分類(MNIST數據集)的任務上的模擬。這表明 QCNN可以以相似的精度學習 。
量子和經典CNN訓練曲線之間的比較。 σ 是從每一層後的輸出提取的高值像素的比率。期望 σ 太小,QCNN可以很好地學習。請注意,此數值模擬很小,只能給出直覺,不是證明。
在這項工作中,我們設計了第一個量子演算法,通過引入量子卷積乘積和檢索有意義的信息的新方法,幾乎可以重現任何經典的CNN體系結構。它可以允許使用更深,更大的輸入或內核來大大加快CNN的速度。我們還開發了量子反向傳播演算法,並模擬了整個訓練過程。
請讀者思考的問題:我們可以在其他數據集使用大型架構上訓練QCNN嗎?
E. 深度卷積網路
LeNet網路的結構如下圖所示,可以看出,LeNet網路並沒有使用padding,每進行一次卷積,圖像的高度和寬度都會縮小,而通道數會一直增加。在全連接層中有400個節點,每個極點都有120個神經元,有時還會從這400個節點抽取一部分節點構建一個全連接層,即有兩個全連接層。在該網路中,最後一步就是利用84個特徵得到最後的輸出,該網路剛開始使用的是 sigmoid 函數 tanh 函數,而現在常常傾向於使用 softmax 函數。需要注意的是,LeNet-5網路進行圖像分類時,輸入的圖像是單通道的灰度圖像。
AlexNet是以論文第一作者的名字命名的,該網路的結構,如下圖所示,該網路的輸出層使用了 softmax 函數。AlexNet網路比LeNet網路規模更大,大約有6000萬個參數,用於訓練圖像和數據集時,能夠處理非常相似的基本構造模塊,這些模塊中包含著大量的隱藏單元,並且與LeNet網路不同的是,該網路使用了ReLu的激活函數。
VGG-16網路沒有太多的超參數,這是一種專注於構建卷積層的簡單網路。如下圖所示,該網路首先利用64個過濾器進行了兩次卷積,接著在池化層將輸入圖像壓縮,接著又是128個過濾器進行兩次卷積,接著載池化。繼續用256個過濾器進行3次卷積,再池化,接著再利用512個過濾器卷積3次,再池化,將稍後得到的特徵圖進行全連接操作,再進 softmax 激活。
由於存在梯度消失和梯度爆炸的原因,深層次的神經網路是很難訓練的,如果採用一種跳躍連接的方式,即從某一層網路層獲取激活,然後迅速反饋給另外一層,甚至是神經網路的更深層。這種利用跳躍連接構建的深度神經網路ResNets,深度能夠超過100層
一個簡單的兩層神經網路示例,如下圖所示:
常規的輸出和輸出之間的關系可以用如下的公式表示:
如上公式所述,這是一條神經網路的主路徑。如果將 的輸入直接到深層的激活函數之前,此時,神經網路有了一條副路徑,其對應輸出將有公式(5)變成如下所示的公式(6)
此時的輸入除了原先的輸入 外,多了一個 項,即由於 產生了一個殘差塊。
構建一個ResNet網路就是將很多這樣的殘差塊堆積在一起,形成一個深度神經網路,如下所示:
使用傳統的標准優化演算法訓練一個網路,隨著網路深度的增加,訓練誤差會先減小再增加,隨著網路層數的增加,優化演算法會越難以訓練,訓練誤差也會越來越多。但是,使用ResNet網路,能夠有效地避免這種情況。
如上所述,加入殘差網路之後,其輸出計算公式如公式(6)所示,展開這個公式,則有:
如果使用L2正則化或者權重衰減,則會壓縮權重參數 的值,如果參數 和參數 等於0,其輸出將由公式(7)變成 ,假定使用ReLU激活函數,則有:
由於殘差網路存在的這種跳躍連接,很容易得出以上等式,這意味著,即使給神經網路增加兩層,但是其效率並不遜色與更簡單的神經網路。並且由於存在以上恆等式,使得網路學習隱藏層的單元的信息更加容易。而普通網路,隨著網路層數的增加,學習參數會變得很困難。
此外,關於殘差網路,如公式(6)所示,假設 與 具有相同的維度,由於ResNets使用了許多same卷積, 的維度等於輸出層的維度。如果輸入和輸出具有不同的維度,可以再增加一個矩陣 ,使得 和 具有相同的維度。而 的維度可以通過0值填充調節。
在卷積網路的架構設計中,一種有趣的想法是會使用到1×1的過濾矩陣,實際上,對於單通道的圖像而言,1×1的過濾矩陣,意義不大,但是,對於多通道的圖像而言,1×1的過濾矩陣能夠有效減少圖像卷積之後的通道數量。
根據卷積和池化的基本知識,隨著神經網路層數的增加,圖像的通道數量會逐漸增加,採用1×1的過濾矩陣卷積之後,可以有效減少圖像的通道數量,一個簡單的示例,如下所示:
假設有一個6×6×32的圖片,使用1×1×32的過濾矩陣進行卷積運算,整個運算過程將會遍歷36個單元格,並計算過濾矩陣所覆蓋區域的元素積之和,將其應用到ReLu非線性函數,會得到一個輸出值。此計算過程中,可能會用到多個1×1×32的過濾器,那麼,通過以上計算會得到一個 6×6×過濾器數量 的矩陣。
構建卷積神經網路時,有時會很難決定過濾器的大小,而Inception網路的引入,卻能很好的解決這個問題。
Inception網路的作用就是代替人工確定選擇卷積層的過濾器類型。如下圖所示,對於一個多通道圖像,可以使用不同的過濾矩陣或者池化層,得到不同的輸出,將這些輸出堆積起來。
有了如上圖所示的Inception塊,最終輸出為32+32+64+128=256,而Inception模塊的輸入為28×28×192,其整個計算成本,以5×5的過濾矩陣為例,其乘法的計算次數為:28×28×32×5×5×192,整個計算次數超過了1.2億次。而如果使用如下所示的優化計算方法,則可以有效減少計算量。
如果利用1×1的過濾器,將輸入矩陣的通道減少至16,則可以有效減少計算量,如下所示:
如上圖所示的價格中,整個網路的運算次數為:28×28×192×16+28×28×32×5×5×16=1240萬,整個計算成本降低至原來的十分之一。而,通過1×1×192過濾器卷積得到的這個網路層被稱之為瓶頸層。
如上,所示,可以給每一個非1×1的卷積層之前,加入一個1×1的瓶頸層,就可以構建一個基本的inception模塊了,如下圖所示:
而一個inception網路就是多個Inception模塊連接起來,如下圖所示:
事實上,以上網路中,還存在一些分支,如編號1所示,這些分支就是全連接層,而全連接層之後就是一個softmax層用於預測。又如分支2所示,包含一些隱藏層(編號3),通過全連接層和softmax進行預測。這些分支結構能夠確保,即使是隱藏層和中間層也參與了特徵計算,並且也能夠預測圖片的分類。這種做法能夠有效避免網路過擬合。
對於計算機視覺領域而言,神經網路的訓練可能需要大量的數據,但是當數據量有限時,可以通過數據增強來實現數據量的擴充,以提高系統的魯棒性,具體的數據增強方法如下所示:
除了以上三種數據增強的方法外,更多的數據增強方法和實現可以參考 圖像數據增強
數據增強可以利用計算機多線程實現,一個線程用來實現載入數據,實現數據增強,其他線程可以訓練這些數據以加快整體的運算速度。
F. 卷積神經網路
一般由卷積層,匯聚層,和全連接層交叉堆疊而成,使用反向傳播演算法進行訓練(反向傳播,再重新看一下)
卷積神經網路有三個結構上的特性:局部連接,權重共享以及子采樣
濾波器filter 卷積核convolution kernel
局部連接,其實就是根據時間,權重遞減 最後為0 參數就傳播不到遠處了
局部連接 乘以 濾波器 得特徵映射
互相關,是一個衡量兩個序列相關性的函數,
互相關和卷積的區別在於 卷積核僅僅是否進行翻轉,因此互相關也可以稱為 不翻轉卷積
使用卷積 是為了進行特徵抽取,卷積核 是否進行翻轉和其特徵抽取的能力無關。
當卷積核是可以學習的參數,卷積和互相關是等價的,因此,其實兩者差不多。
Tips:P是代表特徵映射
G. 卷積神經網路與聚類網路區別
卷積神經網路和聚類網路是兩種不同類型的神經網路。
卷積神經網路(Convolutional Neural Network,CNN)主要用於圖像、音頻等二維或三維數據的處理和識別。棚世它採用卷積層、池化層、全連接層等結構,能夠提取出圖像中的特徵並進穗沖行分類。卷積神經網路的特點是權重共享和局部連接,使得模型參數少,訓練速度快,並且具有較強的魯棒性和泛化能力。
聚類網路(Self-Organizing Map,SOM)則是一種用於無監督學習的神經網路,可以將輸入數據集映射到高維的網格結構中,並且相似的輸入數猜和殲據會被映射到相鄰的網格單元中。聚類網路的特點是學習速度快、適用於大規模數據集,可以有效地發現數據集中的內在結構和特徵。
因此,卷積神經網路和聚類網路在應用場景和功能上有所區別。卷積神經網路主要用於圖像、音頻等數據的識別和分類,而聚類網路主要用於無監督的數據分析和特徵提取。
H. 卷積神經網路CNN(Convolutional Neural Network)
上圖計算過程為,首先我們可以將右邊進行卷積的可以稱為過濾器也可以叫做核,覆蓋到左邊第一個區域,然後分別按照對應位置相乘再相加,3*1+1*1+2*1+0*0+0*0+0*0+1*(-1)+8*(-1)+2*(-1)=-5;
按照上述的計算方法逐步按右移一個步長(步長可以設定為1,2,...等),然後按往下移,逐漸計算相應的值,得出最終的值。
如上圖顯示,對於第一個圖像矩陣對應的圖,一邊是白色,一邊是黑色,那麼中間就會存在一個垂直的邊緣,我們可以選擇一個垂直邊緣檢測過濾器,如乘法右邊的矩陣,那麼兩者做卷積後得出的圖會顯示如等號右邊的結果矩陣對應的灰度圖中間會有一個白色的中間帶,也就是檢測出來的邊緣,那為什麼感覺中間邊緣帶會比較寬呢?而不是很細的一個局域呢?原因是我們輸入的圖像只有6*6,過於小了,如果我們選擇輸出更大的尺寸的圖,那麼結果來說就是相對的一個細的邊緣檢測帶,也就將我們的垂直邊緣特徵提取出來了。
上述都是人工選擇過濾器的參數,隨著神經網路的發展我們可以利用反向傳播演算法來學習過濾器的參數
我們可以將卷積的顧慮器的數值變成一個參數,通過反向傳播演算法去學習,這樣學到的過濾器或者說卷積核就能夠識別到很多的特徵,而不是依靠手工選擇過濾器。
- padding 操作,卷積經常會出現兩個問題:
1.每經過一次卷積圖像都會縮小,如果卷積層很多的話,後面的圖像就縮的很小了;
2.邊緣像素利用次數只有一次,很明顯少於位於中間的像素,因此會損失邊緣圖像信息。
為了解決上述的問題,我們可以在圖像邊緣填充像素,也就是 padding 操作了。
如果我們設置在圖像邊緣填充的像素數為p,那麼經過卷積後的圖像是:(n+2p-f+1)x(n+2p-f+1).
如何去選擇p呢
通常有兩種選擇:
-Valid:也就是說不填充操作(no padding),因此如果我們有nxn的圖像,fxf的過濾器,那麼我們進行卷積nxn fxf=(n-f+1)x(n-f+1)的輸出圖像;
-Same:也就是填充後是輸出圖像的大小的與輸入相同,同樣就有(n+2p)x(n+2p) fxf=nxn,那麼可以算,n+2p-f+1=n,得到p=(f-1)/2。
通常對於過濾器的選擇有一個默認的准則就是選擇過濾器的尺寸是奇數的過濾器。
- 卷積步長設置(Strided COnvolution)
卷積步長也就是我們進行卷積操作時,過濾器每次移動的步長,上面我們介紹的卷積操作步長默認都是1,也就是說每次移動過濾器時我們是向右移動一格,或者向下移動一格。
但是我們可以對卷積進行步長的設置,也就是我們能夠對卷積移動的格數進行設置。同樣假如我們的圖像是nxn,過濾器是fxf,padding設置是p,步長strided設置為s,那麼我們進行卷積操作後輸出的圖像為((n+2p-f)/s+1)x((n+2p-f)/s+1),那麼這樣就會出現一個問題,如果計算結果不是整數怎麼辦?
一般是選擇向下取整,也就是說明,只有當我們的過濾器完全在圖像上能夠覆蓋時才對它進行計算,這是一個慣例。
實際上上述所述的操作在嚴格數學角度來說不是卷積的定義,卷積的定義上我們計算的時候在移動步長之前也就是對應元素相乘之前是需要對卷積核或者說我們的過濾器進行鏡像操作的,經過鏡像操作後再把對應元素進行相乘這才是嚴格意義上的卷積操作,在數學角度上來說這個操作不算嚴格的卷積操作應該是屬於互相關操作,但是在深度學習領域中,大家按照慣例都省略了反轉操作,也把這個操作叫做卷積操作
我們知道彩色圖像有RGB三個通道,因此對於輸入來說是一個三維的輸入,那麼對三維輸入的圖像如何進行卷積操作呢?
例子,如上圖我們輸入圖像假設為6×6×3,3代表有RGB三個通道channel,或者可以叫depth深度,過濾器的選擇為3×3×3,其中需要規定的是,顧慮器的channel必須與輸入圖像的channel相同,長寬沒有限制,那麼計算過程是,我們將過濾器的立體覆蓋在輸入,這樣對應的27個數對應相乘後相加得到一個數,對應到我們的輸出,因此這樣的方式進行卷積後我們得出的輸出層為4×4×1。如果我們有多個過濾器,比如我們分別用兩個過濾器一個提取垂直特徵,一個提取水平特徵,那麼輸出圖4×4×2 。也就是代表我們輸出的深度或者說通道與過濾器的個數是相等的。
第l層的卷積標記如下:
加入我們的過濾器是3×3×3規格的,如果我們設定10個過濾器,那麼需要學習的參數總數為每個過濾器為27個參數然後加上一個偏差bias那麼每個過濾器的參數為28個,所以十個過濾器的參數為280個。從這里也就可以看出,不管我們輸入的圖片大小是多大,我們都只需要計算這些參數,因此參數共享也就很容易理解了。
為了縮減模型的大小,提高計算速度,同時提高所提取特徵的魯棒性,我們經常會使用池化層。池化層的計算方式與卷積類似,只是我們需要對每一個通道都進行池化操作。
池化的方式一般有兩種:Max Pooling和Average Pooling。
上面為Max Pooling,那麼計算方法與卷積類似,首先設定超參數比如過濾器的大小與步長,然後覆蓋到對應格子上面,用最大值取代其值作為輸出的結果,例如上圖為過濾器選擇2×2,步長選擇為2,因此輸出就是2×2的維度,每個輸出格子都是過濾器對應維度上輸入的最大值。如果為平均池化,那麼就是選擇其間的平均值作為輸出的值。
因此從上面的過程我們看到,通過池化操作能夠縮小模型,同時能讓特徵值更加明顯,也就提高了提取特徵的魯棒性。
I. 理解神經網路卷積層、全連接層
https://zhuanlan.hu.com/p/32472241
卷積神經網路,這玩意兒乍一聽像是生物和數學再帶點計算機技術混合起來的奇怪東西。奇怪歸奇怪,不得不說,卷積神經網路是計算機視覺領域最有影響力的創造之一。
2012年是卷積神經網路崛起之年。這一年,Alex Krizhevsky帶著卷積神經網路參加了ImageNet競賽(其重要程度相當於奧運會)並一鳴驚人,將識別錯誤率從26%降到了15%,。從那開始,很多公司開始使用深度學習作為他們服務的核心。比如,Facebook在他們的自動標記演算法中使用了它,Google在照片搜索中使用了,Amazon在商品推薦中使用,Printerst應用於為他們的家庭飼養服務提供個性化定製,而Instagram應用於他們的搜索引擎。
然而,神經網路最開始也是最多的應用領域是圖像處理。那我們就挑這塊來聊聊,怎樣使用卷積神經網路(下面簡稱CNN)來進行圖像分類。
圖像分類是指,向機器輸入一張圖片,然後機器告訴我們這張圖片的類別(一隻貓,一條狗等等),或者如果它不確定的話,它會告訴我們屬於某個類別的可能性(很可能是條狗但是我不太確定)。對我們人類來說,這件事情簡單的不能再簡單了,從出生起,我們就可以很快地識別周圍的物體是什麼。當我們看到一個場景,我們總能快速地識別出所有物體,甚至是下意識的,沒有經過有意的思考。但這種能力,機器並不具有。所以我們更加要好好珍惜自己的大腦呀! (:зゝ∠)
電腦和人看到的圖片並不相同。當我們輸入一張圖片時,電腦得到的只是一個數組,記錄著像素的信息。數組的大小由圖像的清晰度和大小決定。假設我們有一張jpg格式的480 480大小的圖片,那麼表示它的數組便是480 480*3大小的。數組中所有數字都描述了在那個位置處的像素信息,大小在[0,255]之間。
這些數字對我們來說毫無意義,但這是電腦們可以得到的唯一的信息(也足夠了)。抽象而簡單的說,我們需要一個接受數組為輸入,輸出一個數組表示屬於各個類別概率的模型。
既然問題我們已經搞明白了,現在我們得想想辦法解決它。我們想讓電腦做的事情是找出不同圖片之間的差別,並可以識別狗狗(舉個例子)的特徵。
我們人類可以通過一些與眾不同的特徵來識別圖片,比如狗狗的爪子和狗有四條腿。同樣地,電腦也可以通過識別更低層次的特徵(曲線,直線)來進行圖像識別。電腦用卷積層識別這些特徵,並通過更多層卷積層結合在一起,就可以像人類一樣識別出爪子和腿之類的高層次特徵,從而完成任務。這正是CNN所做的事情的大概脈絡。下面,我們進行更具體的討論。
在正式開始之前,我們先來聊聊CNN的背景故事。當你第一次聽說卷積神經網路的時候,你可能就會聯想到一些與神經學或者生物學有關的東西,不得不說,卷積神經網路還真的與他們有某種關系。
CNN的靈感的確來自大腦中的視覺皮層。視覺皮層某些區域中的神經元只對特定視野區域敏感。1962年,在一個Hubel與Wiesel進行的試驗( 視頻 )中,這一想法被證實並且拓展了。他們發現,一些獨立的神經元只有在特定方向的邊界在視野中出現時才會興奮。比如,一些神經元在水平邊出現時興奮,而另一些只有垂直邊出現時才會。並且所有這種類型的神經元都在一個柱狀組織中,並且被認為有能力產生視覺。
在一個系統中,一些特定的組件發揮特定的作用(視覺皮層中的神經元尋找各自特定的特徵)。這一想法應用於很多機器中,並且也是CNN背後的基本原理。 (譯者註:作者沒有說清楚。類比到CNN中,應是不同的卷積核尋找圖像中不同的特徵)
回到主題。
更詳細的說,CNN的工作流程是這樣的:你把一張圖片傳遞給模型,經過一些卷積層,非線性化(激活函數),池化,以及全連層,最後得到結果。就像我們之前所說的那樣,輸出可以是單獨的一個類型,也可以是一組屬於不同類型的概率。現在,最不容易的部分來了:理解各個層的作用。
首先,你要搞清楚的是,什麼樣的數據輸入了卷積層。就像我們之前提到的那樣,輸入是一個32 × 32 × 3(打個比方)的記錄像素值的數組。現在,讓我來解釋卷積層是什麼。解釋卷積層最好的方法,是想像一個手電筒照在圖片的左上角。讓我們假設手電筒的光可以招到一個5 × 5的區域。現在,讓我們想像這個手電筒照過了圖片的所有區域。在機器學習術語中,這樣一個手電筒被稱為卷積核(或者說過濾器,神經元) (kernel, filter, neuron) 。而它照到的區域被稱為感知域 (receptive field) 。卷積核同樣也是一個數組(其中的數被稱為權重或者參數)。很重要的一點就是卷積核的深度和輸入圖像的深度是一樣的(這保證可它能正常工作),所以這里卷積核的大小是5 × 5 × 3。
現在,讓我們拿卷積核的初始位置作為例子,它應該在圖像的左上角。當卷積核掃描它的感知域(也就是這張圖左上角5 × 5 × 3的區域)的時候,它會將自己保存的權重與圖像中的像素值相乘(或者說,矩陣元素各自相乘,注意與矩陣乘法區分),所得的積會相加在一起(在這個位置,卷積核會得到5 × 5 × 3 = 75個積)。現在你得到了一個數字。然而,這個數字只表示了卷積核在圖像左上角的情況。現在,我們重復這一過程,讓卷積核掃描完整張圖片,(下一步應該往右移動一格,再下一步就再往右一格,以此類推),每一個不同的位置都產生了一個數字。當掃描完整張圖片以後,你會得到一組新的28 × 28 × 1的數。 (譯者註:(32 - 5 + 1) × (32 - 5 + 1) × 1) 。這組數,我們稱為激活圖或者特徵圖 (activation map or feature map) 。
如果增加卷積核的數目,比如,我們現在有兩個卷積核,那麼我們就會得到一個28 × 28 × 2的數組。通過使用更多的卷積核,我們可以更好的保留數據的空間尺寸。
在數學層面上說,這就是卷積層所做的事情。
讓我們來談談,從更高角度來說,卷積在做什麼。每一個卷積核都可以被看做特徵識別器。我所說的特徵,是指直線、簡單的顏色、曲線之類的東西。這些都是所有圖片共有的特點。拿一個7 × 7 × 3的卷積核作為例子,它的作用是識別一種曲線。(在這一章節,簡單起見,我們忽略卷積核的深度,只考慮第一層的情況)。作為一個曲線識別器,這個卷積核的結構中,曲線區域內的數字更大。(記住,卷積核是一個數組)
現在我們來直觀的看看這個。舉個例子,假設我們要把這張圖片分類。讓我們把我們手頭的這個卷積核放在圖片的左上角。
記住,我們要做的事情是把卷積核中的權重和輸入圖片中的像素值相乘。
(譯者註:圖中最下方應是由於很多都是0所以把0略過不寫了。)
基本上,如果輸入圖像中有與卷積核代表的形狀很相似的圖形,那麼所有乘積的和會很大。現在我們來看看,如果我們移動了卷積核呢?
可以看到,得到的值小多了!這是因為感知域中沒有與卷積核表示的相一致的形狀。還記得嗎,卷積層的輸出是一張激活圖。所以,在單卷積核卷積的簡單情況下,假設卷積核是一個曲線識別器,那麼所得的激活圖會顯示出哪些地方最有可能有曲線。在這個例子中,我們所得激活圖的左上角的值為6600。這樣大的數字表明很有可能這片區域中有一些曲線,從而導致了卷積核的激活 (譯者註:也就是產生了很大的數值。) 而激活圖中右上角的數值是0,因為那裡沒有曲線來讓卷積核激活(簡單來說就是輸入圖像的那片區域沒有曲線)。
但請記住,這只是一個卷積核的情況,只有一個找出向右彎曲的曲線的卷積核。我們可以添加其他卷積核,比如識別向左彎曲的曲線的。卷積核越多,激活圖的深度就越深,我們得到的關於輸入圖像的信息就越多。
在傳統的CNN結構中,還會有其他層穿插在卷積層之間。我強烈建議有興趣的人去閱覽並理解他們。但總的來說,他們提供了非線性化,保留了數據的維度,有助於提升網路的穩定度並且抑制過擬合。一個經典的CNN結構是這樣的:
網路的最後一層很重要,我們稍後會講到它。
現在,然我們回頭看看我們已經學到了什麼。
我們講到了第一層卷積層的卷積核的目的是識別特徵,他們識別像曲線和邊這樣的低層次特徵。但可以想像,如果想預測一個圖片的類別,必須讓網路有能力識別高層次的特徵,例如手、爪子或者耳朵。讓我們想想網路第一層的輸出是什麼。假設我們有5個5 × 5 × 3的卷積核,輸入圖像是32 × 32 × 3的,那麼我們會得到一個28 × 28 × 5的數組。來到第二層卷積層,第一層的輸出便成了第二層的輸入。這有些難以可視化。第一層的輸入是原始圖片,可第二層的輸入只是第一層產生的激活圖,激活圖的每一層都表示了低層次特徵的出現位置。如果用一些卷積核處理它,得到的會是表示高層次特徵出現的激活圖。這些特徵的類型可能是半圓(曲線和邊的組合)或者矩形(四條邊的組合)。隨著卷積層的增多,到最後,你可能會得到可以識別手寫字跡、粉色物體等等的卷積核。
如果,你想知道更多關於可視化卷積核的信息,可以看這篇 研究報告 ,以及這個 視頻 。
還有一件事情很有趣,當網路越來越深,卷積核會有越來越大的相對於輸入圖像的感知域。這意味著他們有能力考慮來自輸入圖像的更大范圍的信息(或者說,他們對一片更大的像素區域負責)。
到目前為止,我們已經識別出了那些高層次的特徵吧。網路最後的畫龍點睛之筆是全連層。
簡單地說,這一層接受輸入(來自卷積層,池化層或者激活函數都可以),並輸出一個N維向量,其中,N是所有有可能的類別的總數。例如,如果你想寫一個識別數字的程序,那麼N就是10,因為總共有10個數字。N維向量中的每一個數字都代表了屬於某個類別的概率。打個比方,如果你得到了[0 0.1 0.1 0.75 0 0 0 0 0 0.05],這代表著這張圖片是1的概率是10%,是2的概率是10%,是3的概率是75%,是9的概率5%(小貼士:你還有其他表示輸出的方法,但現在我只拿softmax (譯者註:一種常用於分類問題的激活函數) 來展示)。全連層的工作方式是根據上一層的輸出(也就是之前提到的可以用來表示特徵的激活圖)來決定這張圖片有可能屬於哪個類別。例如,如果程序需要預測哪些圖片是狗,那麼全連層在接收到一個包含類似於一個爪子和四條腿的激活圖時輸出一個很大的值。同樣的,如果要預測鳥,那麼全連層會對含有翅膀和喙的激活圖更感興趣。
基本上,全連層尋找那些最符合特定類別的特徵,並且具有相應的權重,來使你可以得到正確的概率。
現在讓我們來說說我之前有意沒有提到的神經網路的可能是最重要的一個方面。剛剛在你閱讀的時候,可能會有一大堆問題想問。第一層卷積層的卷積核們是怎麼知道自己該識別邊還是曲線的?全連層怎麼知道該找哪一種激活圖?每一層中的參數是怎麼確定的?機器確定參數(或者說權重)的方法叫做反向傳播演算法。
在講反向傳播之前,我們得回頭看看一個神經網路需要什麼才能工作。我們出生的時候並不知道一條狗或者一隻鳥長什麼樣。同樣的,在CNN開始之前,權重都是隨機生成的。卷積核並不知道要找邊還是曲線。更深的卷積層也不知道要找爪子還是喙。
等我們慢慢長大了,我們的老師和父母給我們看不同的圖片,並且告訴我們那是什麼(或者說,他們的類別)。這種輸入一幅圖像以及這幅圖像所屬的類別的想法,是CNN訓練的基本思路。在細細講反向傳播之前,我們先假設我們有一個包含上千張不同種類的動物以及他們所屬類別的訓練集。
反向傳播可以被分成四個不同的部分。前向傳播、損失函數、反向傳播和權重更新。
在前向傳播的階段,我們輸入一張訓練圖片,並讓它通過整個神經網路。對於第一個輸入圖像,由於所有權重都是隨機生成的,網路的輸出很有可能是類似於[.1 .1 .1 .1 .1 .1 .1 .1 .1 .1]的東西,一般來說並不對任一類別有偏好。具有當前權重的網路並沒有能力找出低層次的特徵並且總結出可能的類別。
下一步,是損失函數部分。注意,我們現在使用的是訓練數據。這些數據又有圖片又有類別。打個比方,第一張輸入的圖片是數字「3」。那麼它的標簽應該是[0 0 0 1 0 0 0 0 0 0]。一個損失函數可以有很多定義的方法,但比較常見的是MSE(均方誤差)。被定義為(實際−預測)22(實際−預測)22。
記變數L為損失函數的值。正如你想像的那樣,在第一組訓練圖片輸入的時候,損失函數的值可能非常非常高。來直觀地看看這個問題。我們想到達CNN的預測與數據標簽完全一樣的點(這意味著我們的網路預測的很對)。為了到達那裡,我們想要最小化誤差。如果把這個看成一個微積分問題,那我們只要找到哪些權重與網路的誤差關系最大。
這就相當於數學中的δLδWδLδW (譯者註:對L關於W求導) ,其中,W是某個層的權重。現在,我們要對網路進行 反向傳播 。這決定了哪些權重與誤差的關系最大,並且決定了怎樣調整他們來讓誤差減小。計算完這些導數以後,我們就來到了最後一步: 更新權重 。在這里,我們以與梯度相反的方向調整層中的權重。
學習率是一個有程序員決定的參數。一個很高的學習率意味著權重調整的幅度會很大,這可能會讓模型更快的擁有一組優秀的權重。然而,一個太高的學習率可能會讓調整的步伐過大,而不能精確地到達最佳點。
前向傳播、損失函數、反向傳播和更新權重,這四個過程是一次迭代。程序會對每一組訓練圖片重復這一過程(一組圖片通常稱為一個batch)。當對每一張圖片都訓練完之後,很有可能你的網路就已經訓練好了,權重已經被調整的很好。
最後,為了驗證CNN是否工作的很好,我們還有另一組特殊的數據。我們把這組數據中的圖片輸入到網路中,得到輸出並和標簽比較,這樣就能看出網路的表現如何了。