當前位置:首頁 » 手機軟體 » 全連接神經網路會發生權重共享嗎
擴展閱讀
電腦密碼簡單的弊端 2025-07-27 03:58:03

全連接神經網路會發生權重共享嗎

發布時間: 2023-05-25 08:55:55

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

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

❷ 什麼是全連接神經網路怎麼理解「全連接」

1、全連接神經網路解析:對n-1層和n層而言,n-1層的任意一個節點,都和第n層所有節點有連接。即第n層的每個節點在進行計算的時候,激活函數的輸入是n-1層所有節點的加權。

2、全連接的神經網路示意圖:


3、「全連接」是一種不錯的模式,但是網路很大的時候,訓練速度回很慢。部分連接就是認為的切斷某兩個節點直接的連接,這樣訓練時計算量大大減小。

❸ 如何理解人工智慧神經網路中的權值共享問題

權值(權重)共享這個詞是由LeNet5模型提出來的。以CNN為例,在對一張圖偏進行卷積的過程中,使用的是同一個卷積核的參數。比如一個3×3×1的卷積核,這個卷積核內9個的參數被整張圖共享,而不會因為圖像內位置的不同而改變卷積核內的權系數。說的再直白一些,就是用一個卷積核不改變其內權系數的情況下卷積處理整張圖片(當然CNN中每一層不會只有一個卷積核的,這樣說只是為了方便解釋而已)。

❹ 卷積神經網路的 卷積層、激活層、池化層、全連接層

數據輸入的是一張圖片(輸入層),CONV表示卷積層,RELU表示激勵層,POOL表示池化層,Fc表示全連接層

全連接神經網路需要非常多的計算資源才能支撐它來做反向傳播和前向傳播,所以說全連接神經網路可以存儲非常多的參數,如果你給它的樣本如果沒有達到它的量級的時候,它可以輕輕鬆鬆把你給他的樣本全部都記下來,這會出現過擬合的情況。

所以我們應該把神經元和神經元之間的連接的權重個數降下來,但是降下來我們又不能保證它有較強的學習能力,所以這是一個糾結的地方,所以有一個方法就是 局部連接+權值共享 ,局部連接+權值共享不僅權重參數降下來了,而且學習能力並沒有實質的降低,除此之外還有其它的好處,下來看一下,下面的這幾張圖片:

一個圖像的不同表示方式

這幾張圖片描述的都是一個東西,但是有的大有的小,有的靠左邊,有的靠右邊,有的位置不同,但是我們構建的網路識別這些東西的時候應該是同一結果。為了能夠達到這個目的,我們可以讓圖片的不同位置具有相同的權重(權值共享),也就是上面所有的圖片,我們只需要在訓練集中放一張,我們的神經網路就可以識別出上面所有的,這也是 權值共享 的好處。

而卷積神經網路就是局部連接+權值共享的神經網路。

現在我們對卷積神經網路有一個初步認識了,下面具體來講解一下卷積神經網路,卷積神經網路依舊是層級結構,但層的功能和形式做了改變,卷積神經網路常用來處理圖片數據,比如識別一輛汽車:

在圖片輸出到神經網路之前,常常先進行圖像處理,有 三種 常見的圖像的處理方式:

均值化和歸一化

去相關和白化

圖片有一個性質叫做局部關聯性質,一個圖片的像素點影響最大的是它周邊的像素點,而距離這個像素點比較遠的像素點二者之間關系不大。這個性質意味著每一個神經元我們不用處理全局的圖片了(和上一層全連接),我們的每一個神經元只需要和上一層局部連接,相當於每一個神經元掃描一小區域,然後許多神經元(這些神經元權值共享)合起來就相當於掃描了全局,這樣就構成一個特徵圖,n個特徵圖就提取了這個圖片的n維特徵,每個特徵圖是由很多神經元來完成的。

在卷積神經網路中,我們先選擇一個局部區域(filter),用這個局部區域(filter)去掃描整張圖片。 局部區域所圈起來的所有節點會被連接到下一層的 一個節點上 。我們拿灰度圖(只有一維)來舉例:

局部區域

圖片是矩陣式的,將這些以矩陣排列的節點展成了向量。就能更好的看出來卷積層和輸入層之間的連接,並不是全連接的,我們將上圖中的紅色方框稱為filter,它是2*2的,這是它的尺寸,這不是固定的,我們可以指定它的尺寸。

我們可以看出來當前filter是2*2的小窗口,這個小窗口會將圖片矩陣從左上角滑到右下角,每滑一次就會一下子圈起來四個,連接到下一層的一個神經元,然後產生四個權重,這四個權重(w1、w2、w3、w4)構成的矩陣就叫做卷積核。

卷積核是演算法自己學習得到的,它會和上一層計算,比如,第二層的0節點的數值就是局部區域的線性組合(w1 0+w2 1+w3 4+w4 5),即被圈中節點的數值乘以對應的權重後相加。

卷積核計算

卷積操作

我們前面說過圖片不用向量表示是為了保留圖片平面結構的信息。 同樣的,卷積後的輸出若用上圖的向量排列方式則丟失了平面結構信息。 所以我們依然用矩陣的方式排列它們,就得到了下圖所展示的連接,每一個藍色結點連接四個黃色的結點。

卷積層的連接方式

圖片是一個矩陣然後卷積神經網路的下一層也是一個矩陣,我們用一個卷積核從圖片矩陣左上角到右下角滑動,每滑動一次,當然被圈起來的神經元們就會連接下一層的一個神經元,形成參數矩陣這個就是卷積核,每次滑動雖然圈起來的神經元不同,連接下一層的神經元也不同,但是產生的參數矩陣確是一樣的,這就是 權值共享

卷積核會和掃描的圖片的那個局部矩陣作用產生一個值,比如第一次的時候,(w1 0+w2 1+w3 4+w4 5),所以,filter從左上到右下的這個過程中會得到一個矩陣(這就是下一層也是一個矩陣的原因),具體過程如下所示:

卷積計算過程

上圖中左邊是圖矩陣,我們使用的filter的大小是3 3的,第一次滑動的時候,卷積核和圖片矩陣作用(1 1+1 0+1 1+0 0+1 1+1 0+0 1+0 0+1 1)=4,會產生一個值,這個值就是右邊矩陣的第一個值,filter滑動9次之後,會產生9個值,也就是說下一層有9個神經元,這9個神經元產生的值就構成了一個矩陣,這矩陣叫做特徵圖,表示image的某一維度的特徵,當然具體哪一維度可能並不知道,可能是這個圖像的顏色,也有可能是這個圖像的輪廓等等。

單通道圖片總結 :以上就是單通道的圖片的卷積處理,圖片是一個矩陣,我們用指定大小的卷積核從左上角到右下角來滑動,每次滑動所圈起來的結點會和下一層的一個結點相連,連接之後就會形成局部連接,每一條連接都會產生權重,這些權重就是卷積核,所以每次滑動都會產生一個卷積核,因為權值共享,所以這些卷積核都是一樣的。卷積核會不斷和當時卷積核所圈起來的局部矩陣作用,每次產生的值就是下一層結點的值了,這樣多次產生的值組合起來就是一個特徵圖,表示某一維度的特徵。也就是從左上滑動到右下這一過程中會形成一個特徵圖矩陣(共享一個卷積核),再從左上滑動到右下又會形成另一個特徵圖矩陣(共享另一個卷積核),這些特徵圖都是表示特徵的某一維度。

三個通道的圖片如何進行卷積操作?

至此我們應該已經知道了單通道的灰度圖是如何處理的,實際上我們的圖片都是RGB的圖像,有三個通道,那麼此時圖像是如何卷積的呢?

彩色圖像

filter窗口滑的時候,我們只是從width和height的角度來滑動的,並沒有考慮depth,所以每滑動一次實際上是產生一個卷積核,共享這一個卷積核,而現在depth=3了,所以每滑動一次實際上產生了具有三個通道的卷積核(它們分別作用於輸入圖片的藍色、綠色、紅色通道),卷積核的一個通道核藍色的矩陣作用產生一個值,另一個和綠色的矩陣作用產生一個值,最後一個和紅色的矩陣作用產生一個值,然後這些值加起來就是下一層結點的值,結果也是一個矩陣,也就是一張特徵圖。

三通道的計算過程

要想有多張特徵圖的話,我們可以再用新的卷積核來進行左上到右下的滑動,這樣就會形成 新的特徵圖

三通道圖片的卷積過程

也就是說增加一個卷積核,就會產生一個特徵圖,總的來說就是輸入圖片有多少通道,我們的卷積核就需要對應多少通道,而本層中卷積核有多少個,就會產生多少個特徵圖。這樣卷積後輸出可以作為新的輸入送入另一個卷積層中處理,有幾個特徵圖那麼depth就是幾,那麼下一層的每一個特徵圖就得用相應的通道的卷積核來對應處理,這個邏輯要清楚,我們需要先了解一下 基本的概念:

卷積計算的公式

4x4的圖片在邊緣Zero padding一圈後,再用3x3的filter卷積後,得到的Feature Map尺寸依然是4x4不變。

填充

當然也可以使用5x5的filte和2的zero padding可以保持圖片的原始尺寸,3x3的filter考慮到了像素與其距離為1以內的所有其他像素的關系,而5x5則是考慮像素與其距離為2以內的所有其他像素的關系。

規律: Feature Map的尺寸等於

(input_size + 2 * padding_size − filter_size)/stride+1

我們可以把卷積層的作用 總結一點: 卷積層其實就是在提取特徵,卷積層中最重要的是卷積核(訓練出來的),不同的卷積核可以探測特定的形狀、顏色、對比度等,然後特徵圖保持了抓取後的空間結構,所以不同卷積核對應的特徵圖表示某一維度的特徵,具體什麼特徵可能我們並不知道。特徵圖作為輸入再被卷積的話,可以則可以由此探測到"更大"的形狀概念,也就是說隨著卷積神經網路層數的增加,特徵提取的越來越具體化。

激勵層的作用可以理解為把卷積層的結果做 非線性映射

激勵層

上圖中的f表示激勵函數,常用的激勵函數幾下幾種:

常用的激勵函數

我們先來看一下激勵函數Sigmoid導數最小為0,最大為1/4,

激勵函數Sigmoid

Tanh激活函數:和sigmoid相似,它會關於x軸上下對應,不至於朝某一方面偏向

Tanh激活函數

ReLU激活函數(修正線性單元):收斂快,求梯度快,但較脆弱,左邊的梯度為0

ReLU激活函數

Leaky ReLU激活函數:不會飽和或者掛掉,計算也很快,但是計算量比較大

Leaky ReLU激活函數

一些激勵函數的使用技巧 :一般不要用sigmoid,首先試RELU,因為快,但要小心點,如果RELU失效,請用Leaky ReLU,某些情況下tanh倒是有不錯的結果。

這就是卷積神經網路的激勵層,它就是將卷積層的線性計算的結果進行了非線性映射。可以從下面的圖中理解。它展示的是將非線性操作應用到一個特徵圖中。這里的輸出特徵圖也可以看作是"修正"過的特徵圖。如下所示:

非線性操作

池化層:降低了各個特徵圖的維度,但可以保持大分重要的信息。池化層夾在連續的卷積層中間,壓縮數據和參數的量,減小過擬合,池化層並沒有參數,它只不過是把上層給它的結果做了一個下采樣(數據壓縮)。下采樣有 兩種 常用的方式:

Max pooling :選取最大的,我們定義一個空間鄰域(比如,2x2 的窗口),並從窗口內的修正特徵圖中取出最大的元素,最大池化被證明效果更好一些。

Average pooling :平均的,我們定義一個空間鄰域(比如,2x2 的窗口),並從窗口內的修正特徵圖算出平均值

Max pooling

我們要注意一點的是:pooling在不同的depth上是分開執行的,也就是depth=5的話,pooling進行5次,產生5個池化後的矩陣,池化不需要參數控制。池化操作是分開應用到各個特徵圖的,我們可以從五個輸入圖中得到五個輸出圖。

池化操作

無論是max pool還是average pool都有分信息被舍棄,那麼部分信息被舍棄後會損壞識別結果嗎?

因為卷積後的Feature Map中有對於識別物體不必要的冗餘信息,我們下采樣就是為了去掉這些冗餘信息,所以並不會損壞識別結果。

我們來看一下卷積之後的冗餘信息是怎麼產生的?

我們知道卷積核就是為了找到特定維度的信息,比如說某個形狀,但是圖像中並不會任何地方都出現這個形狀,但卷積核在卷積過程中沒有出現特定形狀的圖片位置卷積也會產生一個值,但是這個值的意義就不是很大了,所以我們使用池化層的作用,將這個值去掉的話,自然也不會損害識別結果了。

比如下圖中,假如卷積核探測"橫折"這個形狀。 卷積後得到3x3的Feature Map中,真正有用的就是數字為3的那個節點,其餘數值對於這個任務而言都是無關的。 所以用3x3的Max pooling後,並沒有對"橫折"的探測產生影響。 試想在這里例子中如果不使用Max pooling,而讓網路自己去學習。 網路也會去學習與Max pooling近似效果的權重。因為是近似效果,增加了更多的參數的代價,卻還不如直接進行最大池化處理。

最大池化處理

在全連接層中所有神經元都有權重連接,通常全連接層在卷積神經網路尾部。當前面卷積層抓取到足以用來識別圖片的特徵後,接下來的就是如何進行分類。 通常卷積網路的最後會將末端得到的長方體平攤成一個長長的向量,並送入全連接層配合輸出層進行分類。比如,在下面圖中我們進行的圖像分類為四分類問題,所以卷積神經網路的輸出層就會有四個神經元。

四分類問題

我們從卷積神經網路的輸入層、卷積層、激活層、池化層以及全連接層來講解卷積神經網路,我們可以認為全連接層之間的在做特徵提取,而全連接層在做分類,這就是卷積神經網路的核心。

❺ 哪些神經網路結構會發生權重共享

說的確定應該就是訓練方法吧,神經網路的權值不是人工給定的。而是用訓練集(包括輸入和輸出)訓練,用訓練集訓練一遍稱為一個epoch,一般要許多epoch才行,目的是使得目標與訓練結果的誤差(一般採用均方誤差)小到一個給定的閾值。以上所說是有監督的學習方法,還有無監督的學習方法。

❻ 卷積神經網路

關於花書中卷積網路的筆記記錄於 https://www.jianshu.com/p/5a3c90ea0807 。

卷積神經網路(Convolutional Neural Network,CNN或ConvNet)是一種具有 局部連接、權重共享 等特性的深層前饋神經網路。卷積神經網路是受生物學上感受野的機制而提出。 感受野(Receptive Field) 主要是指聽覺、視覺等神經系統中一些神經元的特性,即 神經元只接受其所支配的刺激區域內的信號

卷積神經網路最早是主要用來處理圖像信息。如果用全連接前饋網路來處理圖像時,會存在以下兩個問題:

目前的卷積神經網路一般是由卷積層、匯聚層和全連接層交叉堆疊而成的前饋神經網路,使用反向傳播演算法進行訓練。 卷積神經網路有三個結構上的特性:局部連接,權重共享以及匯聚 。這些特性使卷積神經網路具有一定程度上的平移、縮放和旋轉不變性。

卷積(Convolution)是分析數學中一種重要的運算。在信號處理或圖像處理中,經常使用一維或二維卷積。

一維卷積經常用在信號處理中,用於計算信號的延遲累積。假設一個信號發生器每個時刻t 產生一個信號 ,其信息的衰減率為 ,即在 個時間步長後,信息為原來的 倍。假設 ,那麼在時刻t收到的信號 為當前時刻產生的信息和以前時刻延遲信息的疊加:

我們把 稱為 濾波器(Filter)或卷積核(Convolution Kernel) 。假設濾波器長度為 ,它和一個信號序列 的卷積為:

信號序列 和濾波器 的卷積定義為:

一般情況下濾波器的長度 遠小於信號序列長度 ,下圖給出一個一維卷積示例,濾波器為 :

二維卷積經常用在圖像處理中。因為圖像為一個兩維結構,所以需要將一維卷積進行擴展。給定一個圖像 和濾波器 ,其卷積為:

下圖給出一個二維卷積示例:

注意這里的卷積運算並不是在圖像中框定卷積核大小的方框並將各像素值與卷積核各個元素相乘並加和,而是先把卷積核旋轉180度,再做上述運算。

在圖像處理中,卷積經常作為特徵提取的有效方法。一幅圖像在經過卷積操作後得到結果稱為 特徵映射(Feature Map)

最上面的濾波器是常用的高斯濾波器,可以用來對圖像進行 平滑去噪 ;中間和最下面的過濾器可以用來 提取邊緣特徵

在機器學習和圖像處理領域,卷積的主要功能是在一個圖像(或某種特徵)上滑動一個卷積核(即濾波器),通過卷積操作得到一組新的特徵。在計算卷積的過程中,需要進行卷積核翻轉(即上文提到的旋轉180度)。 在具體實現上,一般會以互相關操作來代替卷積,從而會減少一些不必要的操作或開銷。

互相關(Cross-Correlation)是一個衡量兩個序列相關性的函數,通常是用滑動窗口的點積計算來實現 。給定一個圖像 和卷積核 ,它們的互相關為:

互相關和卷積的區別僅在於卷積核是否進行翻轉。因此互相關也可以稱為不翻轉卷積 。當卷積核是可學習的參數時,卷積和互相關是等價的。因此,為了實現上(或描述上)的方便起見,我們用互相關來代替卷積。事實上,很多深度學習工具中卷積操作其實都是互相關操作。

在卷積的標準定義基礎上,還可以引入濾波器的 滑動步長 零填充 來增加卷積多樣性,更靈活地進行特徵抽取。

濾波器的步長(Stride)是指濾波器在滑動時的時間間隔。

零填充(Zero Padding)是在輸入向量兩端進行補零。

假設卷積層的輸入神經元個數為 ,卷積大小為 ,步長為 ,神經元兩端各填補 個零,那麼該卷積層的神經元數量為 。

一般常用的卷積有以下三類:

因為卷積網路的訓練也是基於反向傳播演算法,因此我們重點關注卷積的導數性質:

假設 。

, , 。函數 為一個標量函數。

則由 有:

可以看出, 關於 的偏導數為 和 的卷積

同理得到:

當 或 時, ,即相當於對 進行 的零填充。從而 關於 的偏導數為 和 的寬卷積

用互相關的「卷積」表示,即為(注意 寬卷積運算具有交換性性質 ):

在全連接前饋神經網路中,如果第 層有 個神經元,第 層有 個神經元,連接邊有 個,也就是權重矩陣有 個參數。當 和 都很大時,權重矩陣的參數非常多,訓練的效率會非常低。

如果採用卷積來代替全連接,第 層的凈輸入 為第 層活性值 和濾波器 的卷積,即:

根據卷積的定義,卷積層有兩個很重要的性質:

由於局部連接和權重共享,卷積層的參數只有一個m維的權重 和1維的偏置 ,共 個參數。參數個數和神經元的數量無關。此外,第 層的神經元個數不是任意選擇的,而是滿足 。

卷積層的作用是提取一個局部區域的特徵,不同的卷積核相當於不同的特徵提取器。

特徵映射(Feature Map)為一幅圖像(或其它特徵映射)在經過卷積提取到的特徵,每個特徵映射可以作為一類抽取的圖像特徵。 為了提高卷積網路的表示能力,可以在每一層使用多個不同的特徵映射,以更好地表示圖像的特徵。

在輸入層,特徵映射就是圖像本身。如果是灰度圖像,就是有一個特徵映射,深度 ;如果是彩色圖像,分別有RGB三個顏色通道的特徵映射,深度 。

不失一般性,假設一個卷積層的結構如下:

為了計算輸出特徵映射 ,用卷積核 分別對輸入特徵映射 進行卷積,然後將卷積結果相加,並加上一個標量偏置 得到卷積層的凈輸入 再經過非線性激活函數後得到輸出特徵映射 。

在輸入為 ,輸出為 的卷積層中,每個輸出特徵映射都需要 個濾波器以及一個偏置。假設每個濾波器的大小為 ,那麼共需要 個參數。

匯聚層(Pooling Layer)也叫子采樣層(Subsampling Layer),其作用是進行特徵選擇,降低特徵數量,並從而減少參數數量。

常用的匯聚函數有兩種:

其中 為區域 內每個神經元的激活值。

可以看出,匯聚層不但可以有效地減少神經元的數量,還可以使得網路對一些小的局部形態改變保持不變性,並擁有更大的感受野。

典型的匯聚層是將每個特徵映射劃分為 大小的不重疊區域,然後使用最大匯聚的方式進行下采樣。匯聚層也可以看做是一個特殊的卷積層,卷積核大小為 ,步長為 ,卷積核為 函數或 函數。過大的采樣區域會急劇減少神經元的數量,會造成過多的信息損失。

一個典型的卷積網路是由卷積層、匯聚層、全連接層交叉堆疊而成。

目前常用卷積網路結構如圖所示,一個卷積塊為連續 個卷積層和 個匯聚層( 通常設置為 , 為 或 )。一個卷積網路中可以堆疊 個連續的卷積塊,然後在後面接著 個全連接層( 的取值區間比較大,比如 或者更大; 一般為 )。

目前,整個網路結構 趨向於使用更小的卷積核(比如 和 )以及更深的結構(比如層數大於50) 。此外,由於卷積的操作性越來越靈活(比如不同的步長),匯聚層的作用變得也越來越小,因此目前比較流行的卷積網路中, 匯聚層的比例也逐漸降低,趨向於全卷積網路

在全連接前饋神經網路中,梯度主要通過每一層的誤差項 進行反向傳播,並進一步計算每層參數的梯度。在卷積神經網路中,主要有兩種不同功能的神經層:卷積層和匯聚層。而參數為卷積核以及偏置,因此 只需要計算卷積層中參數的梯度。

不失一般性,第 層為卷積層,第 層的輸入特徵映射為 ,通過卷積計算得到第 層的特徵映射凈輸入 ,第 層的第 個特徵映射凈輸入

由 得:

同理可得,損失函數關於第 層的第 個偏置 的偏導數為:

在卷積網路中,每層參數的梯度依賴其所在層的誤差項 。

卷積層和匯聚層中,誤差項的計算有所不同,因此我們分別計算其誤差項。

第 層的第 個特徵映射的誤差項 的具體推導過程如下:

其中 為第 層使用的激活函數導數, 為上采樣函數(upsampling),與匯聚層中使用的下采樣操作剛好相反。如果下采樣是最大匯聚(max pooling),誤差項 中每個值會直接傳遞到上一層對應區域中的最大值所對應的神經元,該區域中其它神經元的誤差項的都設為0。如果下采樣是平均匯聚(meanpooling),誤差項 中每個值會被平均分配到上一層對應區域中的所有神經元上。

第 層的第 個特徵映射的誤差項 的具體推導過程如下:

其中 為寬卷積。

LeNet-5雖然提出的時間比較早,但是是一個非常成功的神經網路模型。基於LeNet-5 的手寫數字識別系統在90年代被美國很多銀行使用,用來識別支票上面的手寫數字。LeNet-5 的網路結構如圖:

不計輸入層,LeNet-5共有7層,每一層的結構為:

AlexNet是第一個現代深度卷積網路模型,其首次使用了很多現代深度卷積網路的一些技術方法,比如採用了ReLU作為非線性激活函數,使用Dropout防止過擬合,使用數據增強來提高模型准確率等。AlexNet 贏得了2012 年ImageNet 圖像分類競賽的冠軍。

AlexNet的結構如圖,包括5個卷積層、3個全連接層和1個softmax層。因為網路規模超出了當時的單個GPU的內存限制,AlexNet 將網路拆為兩半,分別放在兩個GPU上,GPU間只在某些層(比如第3層)進行通訊。

AlexNet的具體結構如下:

在卷積網路中,如何設置卷積層的卷積核大小是一個十分關鍵的問題。 在Inception網路中,一個卷積層包含多個不同大小的卷積操作,稱為Inception模塊。Inception網路是由有多個inception模塊和少量的匯聚層堆疊而成

v1版本的Inception模塊,採用了4組平行的特徵抽取方式,分別為1×1、3× 3、5×5的卷積和3×3的最大匯聚。同時,為了提高計算效率,減少參數數量,Inception模塊在進行3×3、5×5的卷積之前、3×3的最大匯聚之後,進行一次1×1的卷積來減少特徵映射的深度。如果輸入特徵映射之間存在冗餘信息, 1×1的卷積相當於先進行一次特徵抽取

❼ 神經網路(Neural Network)

(1)結構:許多樹突(dendrite)用於輸入,一個軸突 (axon)用於輸出。

(2)特性:興奮性和傳導性。興奮性是指當信號量超過某個閾值時,細胞體就會被激活,產生電脈沖。傳導性是指電脈沖沿著軸突並通過突觸傳遞到其它神經元。

(3)有兩種狀態的機器:激活時為「是」,不激活時為「否」。神經細胞的狀態取決於從其他神經細胞接收到的信號量,以及突觸的性質(抑制或加強)。

(1)神經元——不重要

① 神經元是包含權重和偏置項的 函數 :接收數據後,執行一些計算,然後使用激活函數將數據限制在一個范圍內(多數情況下)。

② 單個神經元:線性可分的情況下,本質是一條直線, ,這條直線將數據劃分為兩類。而線性分類器本身就是一個單層神經網路。

③ 神經網路:非線性可分的情況下,神經網路通過多個隱層的方法來實現非線性的函數。

(2)權重/參數/連接(Weight)——最重要

每一個連接上都有一個權重。一個神經網路的訓練演算法就是讓權重的值調整到最佳,以使得整個網路的預測效果最好。

(3)偏置項(Bias Units)——必須

① 如果沒有偏置項,所有的函數都會經過原點。

② 正則化偏置會導致欠擬合:若對偏置正則化,會導致激活變得更加簡單,偏差就會上升,學習的能力就會下降。

③ 偏置的大小度量了神經元產生激勵(激活)的難易程度。

(1)定義:也稱為轉換函數,是一種將輸入 (input) 轉成輸出 (output) 的函數。

(2)作用:一般直線擬合的精確度要比曲線差很多,引入激活函數能給神經網路 增加一些非線性 的特性。

(3)性質:

① 非線性:導數不是常數,否則就退化成直線。對於一些畫一條直線仍然無法分開的問題,非線性可以把直線變彎,就能包羅萬象;

② 可微性:當優化方法是基於梯度的時候,處處可導為後向傳播演算法提供了核心條件;

③ 輸出范圍:一般限定在[0,1],使得神經元對一些比較大的輸入會比較穩定;

④ 非飽和性:飽和就是指,當輸入比較大的時候輸出幾乎沒變化,會導致梯度消失;

⑤ 單調性:導數符號不變,輸出不會上躥下跳,讓神經網路訓練容易收斂。

(1)線性函數 (linear function)—— purelin()

(2)符號函數 (sign function)—— hardlim() 

① 如果z值高於閾值,則激活設置為1或yes,神經元將被激活。

② 如果z值低於閾值,則激活設置為0或no,神經元不會被激活。

(3)對率函數 (sigmoid function)—— logsig()

① 優點:光滑S型曲線連續可導,函數閾值有上限。

② 缺點:❶ 函數飽和使梯度消失,兩端梯度幾乎為0,更新困難,做不深;

                ❷ 輸出不是0中心,將影響梯度下降的運作,收斂異常慢;

                ❸ 冪運算相對來講比較耗時

(4)雙曲正切函數(hyperbolic tangent function)—— tansig()

① 優點:取值范圍0中心化,防止了梯度偏差

② 缺點:梯度消失現象依然存在,但相對於sigmoid函數問題較輕

(5)整流線性單元 ReLU 函數(rectified linear unit)

① 優點:❶ 分段線性函數,它的非線性性很弱,因此網路做得很深;

                ❷ 由於它的線性、非飽和性, 對於隨機梯度下降的收斂有巨大的加速作用;

② 缺點:❶ 當x<0,梯度都變成0,參數無法更新,也導致了數據多樣化的丟失;

                ❷ 輸出不是0中心

(6)滲漏型整流線性單元激活函數 Leaky ReLU 函數

① 優點:❶ 是為解決「ReLU死亡」問題的嘗試,在計算導數時允許較小的梯度;

                ❷ 非飽和的公式,不包含指數運算,計算速度快。

② 缺點:❶ 無法避免梯度爆炸問題; (沒有體現優於ReLU)

                ❷ 神經網路不學習 α 值。

(7)指數線性單元 ELU (Exponential Linear Units)

① 優點:❶ 能避免「死亡 ReLU」 問題;

                ❷ 能得到負值輸出,這能幫助網路向正確的方向推動權重和偏置變化;

                ❸ 在計算梯度時能得到激活,而不是讓它們等於 0。

② 缺點:❶ 由於包含指數運算,所以計算時間更長;

                ❷ 無法避免梯度爆炸問題; (沒有體現優於ReLU)

                ❸ 神經網路不學習 α 值。

(8)Maxout(對 ReLU 和 Leaky ReLU的一般化歸納)

① 優點:❶ 擁有ReLU的所有優點(線性和不飽和)

                ❷ 沒有ReLU的缺點(死亡的ReLU單元)

                ❸ 可以擬合任意凸函數

② 缺點 :參數數量增加了一倍。難訓練,容易過擬合

(9)Swish

① 優點:❶ 在負半軸也有一定的不飽和區,參數的利用率更大

                ❷ 無上界有下界、平滑、非單調

                ❸ 在深層模型上的效果優於 ReLU

每個層都包含一定數量的單元(units)。增加層可增加神經網路輸出的非線性。

(1)輸入層:就是接收原始數據,然後往隱層送

(2)輸出層:神經網路的決策輸出

(3)隱藏層:神經網路的關鍵。把前一層的向量變成新的向量,讓數據變得線性可分。

(1)結構:僅包含輸入層和輸出層,直接相連。

(2)作用:僅能表示 線性可分 函數或決策,且一定可以在有限的迭代次數中收斂。

(3)局限:可以建立與門、或門、非門等,但無法建立更為復雜的異或門(XOR),即兩個輸入相同時輸出1,否則輸出0。 (「AI winter」)

(1)目的:擬合某個函數      (兩層神經網路可以逼近任意連續函數)

(2)結構:包含輸入層、隱藏層和輸出層 ,由於從輸入到輸出的過程中不存在與模型自身的反饋連接,因此被稱為「前饋」。    (層與層之間全連接)

(3)作用: 非線性 分類、聚類、預測等,通過訓練,可以學習到數據中隱含的知識。

(4)局限:計算復雜、計算速度慢、容易陷入局部最優解,通常要將它們與其他網路結合形成新的網路。

(5)前向傳播演算法(Forward Propagation)

① 方法:從左至右逐級依賴的演算法模型,即網路如何根據輸入X得到輸出Y,最終的輸出值和樣本值作比較, 計算出誤差 。

② 目的:完成了一次正反向傳播,就完成了一次神經網路的訓練迭代。通過輸出層的誤差,快速求解對每個ω、b的偏導,利用梯度下降法,使Loss越來越小。

② 局限:為使最終的誤差達到最小,要不斷修改參數值,但神經網路的每條連接線上都有不同權重參數,修改這些參數變得棘手。

(6)誤差反向傳播(Back Propagation)

① 原理:梯度下降法求局部極值

② 方法:從後往前,從輸出層開始計算 L 對當前層的微分,獲得各層的誤差信號,此誤差信號即作為修正單元權值的依據。計算結束以後,所要的兩個參數矩陣的 梯度 就都有了。

③ 局限:如果激活函數是飽和的,帶來的缺陷就是系統迭代更新變慢,系統收斂就慢,當然這是可以有辦法彌補的,一種方法是使用 交叉熵函數 作為損失函數。

(1)原理:隨著網路的層數增加,每一層對於前一層次的抽象表示更深入。在神經網路中,每一層神經元學習到的是前一層神經元值的更抽象的表示。通過抽取更抽象的特徵來對事物進行區分,從而獲得更好的區分與分類能力。

(2)方法:ReLU函數在訓練多層神經網路時,更容易收斂,並且預測性能更好。

(3)優點:① 易於構建,表達能力強,基本單元便可擴展為復雜的非線性函數

                      ② 並行性號,有利於在分布是系統上應用

(4)局限:① 優化演算法只能獲得局部極值,性能與初始值相關

                      ② 調參理論性缺乏

                      ③ 不可解釋,與實際任務關聯性模糊

(1)原理:由手工設計卷積核變成自動學習卷積核

(2)卷積(Convolutional layer): 輸入與卷積核相乘再累加 (內積、加權疊加)

① 公式:

② 目的:提取輸入的不同特徵,得到維度很大的 特徵圖(feature map)

③ 卷積核:需要訓練的參數。一般為奇數維,有中心像素點,便於定位卷積核

④ 特點:局部感知、參數變少、權重共享、分層提取

(3)池化(Pooling Layer):用更高層的抽象表達來表示主要特徵,又稱「降采樣」

① 分類: 最大 (出現與否)、平均(保留整體)、隨機(避免過擬合)

② 目的:降維,不需要訓練參數,得到新的、維度較小的特徵

(4)步長(stride):若假設輸入大小是n∗n,卷積核的大小是f∗f,步長是s,則最後的feature map的大小為o∗o,其中

(5)填充(zero-padding)

① Full模式:即從卷積核(fileter)和輸入剛相交開始做卷積,沒有元素的部分做補0操作。

② Valid模式:卷積核和輸入完全相交開始做卷積,這種模式不需要補0。

③ Same模式:當卷積核的中心C和輸入開始相交時做卷積。沒有元素的部分做補0操作。

(7)激活函數:加入非線性特徵

(8)全連接層(Fully-connected layer)

如果說卷積層、池化層和激活函數層等是將原始數據映射到隱層特徵空間(決定計算速度),全連接層則起到將學到的「分布式特徵表示」映射到樣本標記空間的作用(決定參數個數)。

參考:

[1]  神經網路(入門最詳細)_ruthy的博客-CSDN博客_神經網路演算法入門

[2]  神經網路(容易被忽視的基礎知識) - Evan的文章 - 知乎

[3]  人工神經網路——王的機器

[4]  如何簡單形象又有趣地講解神經網路是什麼? - 舒小曼的回答 - 知乎

[5]  神經網路15分鍾入門!足夠通俗易懂了吧 - Mr.括弧的文章 - 知乎

[6]  神經網路——最易懂最清晰的一篇文章_illikang的博客-CSDN博客_神經網路

[7]  直覺化深度學習教程——什麼是前向傳播——CSDN

[8]  「反向傳播演算法」過程及公式推導(超直觀好懂的Backpropagation)_aift的專欄-CSDN

[9]  卷積、反卷積、池化、反池化——CSDN

[10]  浙大機器學習課程- bilibili.com