導航:首頁 > 異常信息 > 深度學習全連接神經網路向前傳播

深度學習全連接神經網路向前傳播

發布時間:2023-06-04 04:46:42

Ⅰ 神經網路:卷積神經網路(CNN)

神經網路 最早是由心理學家和神經學家提出的,旨在尋求開發和測試神經的計算模擬。

粗略地說, 神經網路 是一組連接的 輸入/輸出單元 ,其中每個連接都與一個 權 相關聯。在學習階段,通過調整權值,使得神經網路的預測准確性逐步提高。由於單元之間的連接,神經網路學習又稱 連接者學習。

神經網路是以模擬人腦神經元的數學模型為基礎而建立的,它由一系列神經元組成,單元之間彼此連接。從信息處理角度看,神經元可以看作是一個多輸入單輸出的信息處理單元,根據神經元的特性和功能,可以把神經元抽象成一個簡單的數學模型。

神經網路有三個要素: 拓撲結構、連接方式、學習規則

神經網路的拓撲結構 :神經網路的單元通常按照層次排列,根據網路的層次數,可以將神經網路分為單層神經網路、兩層神經網路、三層神經網路等。結構簡單的神經網路,在學習時收斂的速度快,但准確度低。

神經網路的層數和每層的單元數由問題的復雜程度而定。問題越復雜,神經網路的層數就越多。例如,兩層神經網路常用來解決線性問題,而多層網路就可以解決多元非線性問題

神經網路的連接 :包括層次之間的連接和每一層內部的連接,連接的強度用權來表示。

根據層次之間的連接方式,分為:

1)前饋式網路:連接是單向的,上層單元的輸出是下層單元的輸入,如反向傳播網路,Kohonen網路

2)反饋式網路:除了單項的連接外,還把最後一層單元的輸出作為第一層單元的輸入,如Hopfield網路

根據連接的范圍,分為:

1)全連接神經網路:每個單元和相鄰層上的所有單元相連

2)局部連接網路:每個單元只和相鄰層上的部分單元相連

神經網路的學習

根據學習方法分:

感知器:有監督的學習方法,訓練樣本的類別是已知的,並在學習的過程中指導模型的訓練

認知器:無監督的學習方法,訓練樣本類別未知,各單元通過競爭學習。

根據學習時間分:

離線網路:學習過程和使用過程是獨立的

在線網路:學習過程和使用過程是同時進行的

根據學習規則分:

相關學習網路:根據連接間的激活水平改變權系數

糾錯學習網路:根據輸出單元的外部反饋改變權系數

自組織學習網路:對輸入進行自適應地學習

摘自《數學之美》對人工神經網路的通俗理解:

神經網路種類很多,常用的有如下四種:

1)Hopfield網路,典型的反饋網路,結構單層,有相同的單元組成

2)反向傳播網路,前饋網路,結構多層,採用最小均方差的糾錯學習規則,常用於語言識別和分類等問題

3)Kohonen網路:典型的自組織網路,由輸入層和輸出層構成,全連接

4)ART網路:自組織網路

深度神經網路:

Convolutional Neural Networks(CNN)卷積神經網路

Recurrent neural Network(RNN)循環神經網路

Deep Belief Networks(DBN)深度信念網路

深度學習是指多層神經網路上運用各種機器學習演算法解決圖像,文本等各種問題的演算法集合。深度學習從大類上可以歸入神經網路,不過在具體實現上有許多變化。

深度學習的核心是特徵學習,旨在通過分層網路獲取分層次的特徵信息,從而解決以往需要人工設計特徵的重要難題。

Machine Learning vs. Deep Learning 

神經網路(主要是感知器)經常用於 分類

神經網路的分類知識體現在網路連接上,被隱式地存儲在連接的權值中。

神經網路的學習就是通過迭代演算法,對權值逐步修改的優化過程,學習的目標就是通過改變權值使訓練集的樣本都能被正確分類。

神經網路特別適用於下列情況的分類問題:

1) 數據量比較小,缺少足夠的樣本建立模型

2) 數據的結構難以用傳統的統計方法來描述

3) 分類模型難以表示為傳統的統計模型

缺點:

1) 需要很長的訓練時間,因而對於有足夠長訓練時間的應用更合適。

2) 需要大量的參數,這些通常主要靠經驗確定,如網路拓撲或「結構」。

3)  可解釋性差 。該特點使得神經網路在數據挖掘的初期並不看好。

優點:

1) 分類的准確度高

2)並行分布處理能力強

3)分布存儲及學習能力高

4)對噪音數據有很強的魯棒性和容錯能力

最流行的基於神經網路的分類演算法是80年代提出的 後向傳播演算法 。後向傳播演算法在多路前饋神經網路上學習。 

定義網路拓撲

在開始訓練之前,用戶必須說明輸入層的單元數、隱藏層數(如果多於一層)、每一隱藏層的單元數和輸出層的單元數,以確定網路拓撲。

對訓練樣本中每個屬性的值進行規格化將有助於加快學習過程。通常,對輸入值規格化,使得它們落入0.0和1.0之間。

離散值屬性可以重新編碼,使得每個域值一個輸入單元。例如,如果屬性A的定義域為(a0,a1,a2),則可以分配三個輸入單元表示A。即,我們可以用I0 ,I1 ,I2作為輸入單元。每個單元初始化為0。如果A = a0,則I0置為1;如果A = a1,I1置1;如此下去。

一個輸出單元可以用來表示兩個類(值1代表一個類,而值0代表另一個)。如果多於兩個類,則每個類使用一個輸出單元。

隱藏層單元數設多少個「最好」 ,沒有明確的規則。

網路設計是一個實驗過程,並可能影響准確性。權的初值也可能影響准確性。如果某個經過訓練的網路的准確率太低,則通常需要採用不同的網路拓撲或使用不同的初始權值,重復進行訓練。

後向傳播演算法學習過程:

迭代地處理一組訓練樣本,將每個樣本的網路預測與實際的類標號比較。

每次迭代後,修改權值,使得網路預測和實際類之間的均方差最小。

這種修改「後向」進行。即,由輸出層,經由每個隱藏層,到第一個隱藏層(因此稱作後向傳播)。盡管不能保證,一般地,權將最終收斂,學習過程停止。

演算法終止條件:訓練集中被正確分類的樣本達到一定的比例,或者權系數趨近穩定。

後向傳播演算法分為如下幾步:

1) 初始化權

網路的權通常被初始化為很小的隨機數(例如,范圍從-1.0到1.0,或從-0.5到0.5)。

每個單元都設有一個偏置(bias),偏置也被初始化為小隨機數。

2) 向前傳播輸入

對於每一個樣本X,重復下面兩步:

向前傳播輸入,向後傳播誤差

計算各層每個單元的輸入和輸出。輸入層:輸出=輸入=樣本X的屬性;即,對於單元j,Oj = Ij = Xj。隱藏層和輸出層:輸入=前一層的輸出的線性組合,即,對於單元j, Ij =wij Oi + θj,輸出=

3) 向後傳播誤差

計算各層每個單元的誤差。

輸出層單元j,誤差:

Oj是單元j的實際輸出,而Tj是j的真正輸出。

隱藏層單元j,誤差:

wjk是由j到下一層中單元k的連接的權,Errk是單元k的誤差

更新 權 和 偏差 ,以反映傳播的誤差。

權由下式更新:

 其中,△wij是權wij的改變。l是學習率,通常取0和1之間的值。

 偏置由下式更新:

  其中,△θj是偏置θj的改變。

Example

人類視覺原理:

深度學習的許多研究成果,離不開對大腦認知原理的研究,尤其是視覺原理的研究。1981 年的諾貝爾醫學獎,頒發給了 David Hubel(出生於加拿大的美國神經生物學家) 和Torsten Wiesel,以及Roger Sperry。前兩位的主要貢獻,是「發現了視覺系統的信息處理」, 可視皮層是分級的 。

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

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

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

可以很自然的想到:可以不可以模仿人類大腦的這個特點,構造多層的神經網路,較低層的識別初級的圖像特徵,若干底層特徵組成更上一層特徵,最終通過多個層級的組合,最終在頂層做出分類呢?答案是肯定的,這也是許多深度學習演算法(包括CNN)的靈感來源。

卷積神經網路是一種多層神經網路,擅長處理圖像特別是大圖像的相關機器學習問題。卷積網路通過一系列方法,成功將數據量龐大的圖像識別問題不斷降維,最終使其能夠被訓練。

CNN最早由Yann LeCun提出並應用在手寫字體識別上。LeCun提出的網路稱為LeNet,其網路結構如下:

這是一個最典型的卷積網路,由 卷積層、池化層、全連接層 組成。其中卷積層與池化層配合,組成多個卷積組,逐層提取特徵,最終通過若干個全連接層完成分類。

CNN通過卷積來模擬特徵區分,並且通過卷積的權值共享及池化,來降低網路參數的數量級,最後通過傳統神經網路完成分類等任務。

降低參數量級:如果使用傳統神經網路方式,對一張圖片進行分類,那麼,把圖片的每個像素都連接到隱藏層節點上,對於一張1000x1000像素的圖片,如果有1M隱藏層單元,一共有10^12個參數,這顯然是不能接受的。

但是在CNN里,可以大大減少參數個數,基於以下兩個假設:

1)最底層特徵都是局部性的,也就是說,用10x10這樣大小的過濾器就能表示邊緣等底層特徵

2)圖像上不同小片段,以及不同圖像上的小片段的特徵是類似的,也就是說,能用同樣的一組分類器來描述各種各樣不同的圖像

基於以上兩個假設,就能把第一層網路結構簡化

用100個10x10的小過濾器,就能夠描述整幅圖片上的底層特徵。

卷積運算的定義如下圖所示:

如上圖所示,一個5x5的圖像,用一個3x3的 卷積核 :

   101

   010

   101

來對圖像進行卷積操作(可以理解為有一個滑動窗口,把卷積核與對應的圖像像素做乘積然後求和),得到了3x3的卷積結果。

這個過程可以理解為使用一個過濾器(卷積核)來過濾圖像的各個小區域,從而得到這些小區域的特徵值。在實際訓練過程中, 卷積核的值是在學習過程中學到的。

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

池化 的過程如下圖所示:

可以看到,原始圖片是20x20的,對其進行采樣,采樣窗口為10x10,最終將其采樣成為一個2x2大小的特徵圖。

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

即使減少了許多數據,特徵的統計屬性仍能夠描述圖像,而且由於降低了數據維度,有效地避免了過擬合。

在實際應用中,分為最大值采樣(Max-Pooling)與平均值采樣(Mean-Pooling)。

LeNet網路結構:

注意,上圖中S2與C3的連接方式並不是全連接,而是部分連接。最後,通過全連接層C5、F6得到10個輸出,對應10個數字的概率。

卷積神經網路的訓練過程與傳統神經網路類似,也是參照了反向傳播演算法

第一階段,向前傳播階段:

a)從樣本集中取一個樣本(X,Yp),將X輸入網路;

b)計算相應的實際輸出Op

第二階段,向後傳播階段

a)計算實際輸出Op與相應的理想輸出Yp的差;

b)按極小化誤差的方法反向傳播調整權矩陣。

Ⅱ 深度學習為神經網路的發展帶來了哪些變化

深度學習是一種基於神經網路的機器學習方法,它為神經網路的發展帶來了許多變化。

總之,深度學習為神經網路的發展帶來了革命性變化,並且在人工智慧領頌哪扒域發揮著越來越重要的作用。

Ⅲ 理解神經網路卷積層、全連接層

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是否工作的很好,我們還有另一組特殊的數據。我們把這組數據中的圖片輸入到網路中,得到輸出並和標簽比較,這樣就能看出網路的表現如何了。

Ⅳ 誰能科普一下「深度學習」網路和以前那種「多層神經網路」的區別

多層神經網路又叫全連接神經網路。當輸入圖像為1000*1000的解析度時,神經網路一層的系數就達到10^12。系數過多引起收斂問題導致訓練無法達到最優,並且容易過擬合。讓它不具有實現意義。深度學習採用權值共享和局部連接等技術,大大降低了系數的個數和各種避免過擬合的方法,使得網路層數可以達到數百,使得深層網路成為可能。感興趣可以搜搜我的課程,用Python做深度學習1——數學基礎

Ⅳ 卷積神經網路

卷積神經網路 (Convolutional Neural Networks,CNN)是一種前饋神經網路。卷積神經網路是受生物學上感受野(Receptive Field)的機制而提出的。感受野主要是指聽覺系統、本體感覺系統和視覺系統中神經元的一些性質。比如在視覺神經系統中,一個神經元的感受野是指視網膜上的特定區域,只有這個區域內的刺激才能夠激活該神經元。

卷積神經網路又是怎樣解決這個問題的呢?主要有三個思路:

在使用CNN提取特徵時,到底使用哪一層的輸出作為最後的特徵呢?

答:倒數第二個全連接層的輸出才是最後我們要提取的特徵,也就是最後一個全連接層的輸入才是我們需要的特徵。

全連接層會忽視形狀。卷積層可以保持形狀不變。當輸入數據是圖像時,卷積層會以3維數據的形式接收輸入數據,並同樣以3維數據的形式輸出至下一層。因此,在CNN中,可以(有可能)正確理解圖像等具有形狀的數據。

CNN中,有時將 卷積層的輸入輸出數據稱為特徵圖(feature map) 。其中, 卷積層的輸入數據稱為輸入特徵圖(input feature map) 輸出數據稱為輸出特徵圖(output feature map)。

卷積層進行的處理就是 卷積運算 。卷積運算相當於圖像處理中的「濾波器運算」。

濾波器相當於權重或者參數,濾波器數值都是學習出來的。 卷積層實現的是垂直邊緣檢測

邊緣檢測實際就是將圖像由亮到暗進行區分,即邊緣的過渡(edge transitions)。

卷積層對應到全連接層,左上角經過濾波器,得到的3,相當於一個神經元輸出為3.然後相當於,我們把輸入矩陣拉直為36個數據,但是我們只對其中的9個數據賦予了權重。

步幅為1 ,移動一個,得到一個1,相當於另一個神經單元的輸出是1.

並且使用的是同一個濾波器,對應到全連接層,就是權值共享。

在這個例子中,輸入數據是有高長方向的形狀的數據,濾波器也一樣,有高長方向上的維度。假設用(height, width)表示數據和濾波器的形狀,則在本例中,輸入大小是(4, 4),濾波器大小是(3, 3),輸出大小是(2, 2)。另外,有的文獻中也會用「核」這個詞來表示這里所說的「濾波器」。

對於輸入數據,卷積運算以一定間隔滑動濾波器的窗口並應用。這里所說的窗口是指圖7-4中灰色的3 × 3的部分。如圖7-4所示,將各個位置上濾
波器的元素和輸入的對應元素相乘,然後再求和(有時將這個計算稱為乘積累加運算)。然後,將這個結果保存到輸出的對應位置。將這個過程在所有位置都進行一遍,就可以得到卷積運算的輸出。

CNN中,濾波器的參數就對應之前的權重。並且,CNN中也存在偏置。

在進行卷積層的處理之前,有時要向輸入數據的周圍填入固定的數據(比如0等),這稱為填充(padding),是卷積運算中經常會用到的處理。比如,在圖7-6的例子中,對大小為(4, 4)的輸入數據應用了幅度為1的填充。「幅度為1的填充」是指用幅度為1像素的0填充周圍。

應用濾波器的位置間隔稱為 步幅(stride)

假設輸入大小為(H, W),濾波器大小為(FH, FW),輸出大小為(OH, OW),填充為P,步幅為S。

但是所設定的值必須使式(7.1)中的 和 分別可以除盡。當輸出大小無法除盡時(結果是小數時),需要採取報錯等對策。順便說一下,根據深度學習的框架的不同,當值無法除盡時,有時會向最接近的整數四捨五入,不進行報錯而繼續運行。

之前的卷積運算的例子都是以有高、長方向的2維形狀為對象的。但是,圖像是3維數據,除了高、長方向之外,還需要處理通道方向。

在3維數據的卷積運算中,輸入數據和濾波器的通道數要設為相同的值。

因此,作為4維數據,濾波器的權重數據要按(output_channel, input_channel, height, width)的順序書寫。比如,通道數為3、大小為5 × 5的濾
波器有20個時,可以寫成(20, 3, 5, 5)。

對於每個通道,均使用自己的權值矩陣進行處理,輸出時將多個通道所輸出的值進行加和即可。

卷積運算的批處理,需要將在各層間傳遞的數據保存為4維數據。具體地講,就是按(batch_num, channel, height, width)的順序保存數據。

這里需要注意的是,網路間傳遞的是4維數據,對這N個數據進行了卷積運算。也就是說,批處理將N次的處理匯總成了1次進行。

池化是縮小高、長方向上的空間的運算。比如,如圖7-14所示,進行將2 × 2的區域集約成1個元素的處理,縮小空間大小。

圖7-14的例子是按步幅2進行2 × 2的Max池化時的處理順序。「Max池化」是獲取最大值的運算,「2 × 2」表示目標區域的大小。如圖所示,從
2 × 2的區域中取出最大的元素。此外,這個例子中將步幅設為了2,所以2 × 2的窗口的移動間隔為2個元素。另外,一般來說,池化的窗口大小會和步幅設定成相同的值。比如,3 × 3的窗口的步幅會設為3,4 × 4的窗口的步幅會設為4等。

除了Max池化之外,還有Average池化等。相對於Max池化是從目標區域中取出最大值,Average池化則是計算目標區域的平均值。 在圖像識別領域,主要使用Max池化。 因此,本書中說到「池化層」時,指的是Max池化。

池化層的特徵
池化層有以下特徵。
沒有要學習的參數
池化層和卷積層不同,沒有要學習的參數。池化只是從目標區域中取最大值(或者平均值),所以不存在要學習的參數。
通道數不發生變化
經過池化運算,輸入數據和輸出數據的通道數不會發生變化。如圖7-15所示,計算是按通道獨立進行的。

對微小的位置變化具有魯棒性(健壯)
​ 輸入數據發生微小偏差時,池化仍會返回相同的結果。因此,池化對輸入數據的微小偏差具有魯棒性。比如,3 × 3的池化的情況下,如圖
​ 7-16所示,池化會吸收輸入數據的偏差(根據數據的不同,結果有可能不一致)。

經過卷積層和池化層之後,進行Flatten,然後丟到全連接前向傳播神經網路。

(找到一張圖片使得某個filter響應最大。相當於filter固定,未知的是輸入的圖片。)未知的是輸入的圖片???

k是第k個filter,x是我們要找的參數。?這里我不是很明白。我得理解應該是去尋找最具有代表性的特徵。

使用im2col來實現卷積層

卷積層的參數是需要學習的,但是池化層沒有參數需要學習。全連接層的參數需要訓練得到。

池化層不需要訓練參數。全連接層的參數最多。卷積核的個數逐漸增多。激活層的size,逐漸減少。

最大池化只是計算神經網路某一層的靜態屬性,沒有什麼需要學習的,它只是一個靜態屬性

像這樣展開之後,只需對展開的矩陣求各行的最大值,並轉換為合適的形狀即可(圖7-22)。

參數
• input_dim ― 輸入數據的維度:( 通道,高,長 )
• conv_param ― 卷積層的超參數(字典)。字典的關鍵字如下:
filter_num ― 濾波器的數量
filter_size ― 濾波器的大小
stride ― 步幅
pad ― 填充
• hidden_size ― 隱藏層(全連接)的神經元數量
• output_size ― 輸出層(全連接)的神經元數量
• weitght_int_std ― 初始化時權重的標准差

LeNet

LeNet在1998年被提出,是進行手寫數字識別的網路。如圖7-27所示,它有連續的卷積層和池化層(正確地講,是只「抽選元素」的子采樣層),最後經全連接層輸出結果。

和「現在的CNN」相比,LeNet有幾個不同點。第一個不同點在於激活函數。LeNet中使用sigmoid函數,而現在的CNN中主要使用ReLU函數。
此外,原始的LeNet中使用子采樣(subsampling)縮小中間數據的大小,而現在的CNN中Max池化是主流。

AlexNet

在LeNet問世20多年後,AlexNet被發布出來。AlexNet是引發深度學習熱潮的導火線,不過它的網路結構和LeNet基本上沒有什麼不同,如圖7-28所示。

AlexNet疊有多個卷積層和池化層,最後經由全連接層輸出結果。雖然結構上AlexNet和LeNet沒有大的不同,但有以下幾點差異。
• 激活函數使用ReLU。
• 使用進行局部正規化的LRN(Local Response Normalization)層。
• 使用Dropout

TF2.0實現卷積神經網路

valid意味著不填充,same是填充
or the SAME padding, the output height and width are computed as:

out_height = ceil(float(in_height) / float(strides[1]))

out_width = ceil(float(in_width) / float(strides[2]))

And

For the VALID padding, the output height and width are computed as:

out_height = ceil(float(in_height - filter_height + 1) / float(strides[1]))

out_width = ceil(float(in_width - filter_width + 1) / float(strides[2]))
因此,我們可以設定 padding 策略。在 tf.keras.layers.Conv2D 中,當我們將 padding 參數設為 same 時,會將周圍缺少的部分使用 0 補齊,使得輸出的矩陣大小和輸入一致。

Ⅵ 深度學習中經常提到的神經網路是什麼

介紹深度學習就必須要介紹神經網路,因為深度學習是基於神經網路演算法的,其實最開始只有神經網路演算法,上文也提到2006年Geoffrey Hinton老爺子提出了Deep Learning,核心還是人工神經網路演算法,換了一個新的叫法,最基本的演算法沒有變。
通過神經元接收外界信號,達到一定閾值,觸發動作電位,通過突觸釋放神經遞質,可以是興奮或抑制,影響突觸後神經元。通過此實現大腦的計算、記憶、邏輯處理等,進行做出一系列行為等。同時不斷地在不同神經元之間構建新的突觸連接和對現有突觸進行改造,來進行調整。有時候不得不感嘆大自然的鬼斧神工,900億神經元組成的神經網路可以讓大腦實現如此復雜的計算和邏輯處理。

閱讀全文

與深度學習全連接神經網路向前傳播相關的資料

熱點內容
網路共享中心沒有網卡 瀏覽:491
電腦無法檢測到網路代理 瀏覽:1348
筆記本電腦一天會用多少流量 瀏覽:473
蘋果電腦整機轉移新機 瀏覽:1347
突然無法連接工作網路 瀏覽:959
聯通網路怎麼設置才好 瀏覽:1189
小區網路電腦怎麼連接路由器 瀏覽:931
p1108列印機網路共享 瀏覽:1185
怎麼調節台式電腦護眼 瀏覽:601
深圳天虹蘋果電腦 瀏覽:839
網路總是異常斷開 瀏覽:582
中級配置台式電腦 瀏覽:893
中國網路安全的戰士 瀏覽:602
同志網站在哪裡 瀏覽:1378
版觀看完整完結免費手機在線 瀏覽:1430
怎樣切換默認數據網路設置 瀏覽:1078
肯德基無線網無法訪問網路 瀏覽:1252
光纖貓怎麼連接不上網路 瀏覽:1375
神武3手游網路連接 瀏覽:936
局網列印機網路共享 瀏覽:973