Ⅰ 人工智慧CNN卷積神經網路如何共享權值
首先權值共享就是濾波器共享,濾波器的參數是固定的,即是用相同的濾波器去掃一遍圖像,提取一次特徵特徵,得到feature map。在卷積網路中,學好了一個濾波器,就相當於掌握了一種特徵,這個濾波器在圖像中滑動,進行特徵提取,然後所有進行這樣操作的區域都會被採集到這種特徵,就好比上面的水平線。
Ⅱ 初識卷積神經網路
按照上文中介紹的神經網路,如果處理一張圖片的話,參數有多大呢?假設圖像的大小為1200 * 1200,下一層的神經元個數為10^5,不難得出參數量為 1200 * 1200 * 10^5 = 1.44 * 10^12。可以看出一層的參數量就是很大了,如果再多加幾層,那參數量大的應該是超出了內存的承受范圍,這從研究和工程的角度都是不允許的。而且參數太多,很容易造成過擬合。
怎麼解決這個問題呢?經過研究,從稀疏連接、參數共享和平移不變性三個方面來進行改進。
可能有些人不懂這種稀疏連接是怎麼實現的?先來說說卷積操作,以一個二維矩陣為輸入(可以看作是一個單通道圖片的像素值),卷積產生的稀疏連接根本原因就是這塊的核函數,一般的核函數的大小遠小於輸入的大小。
以下圖例:卷積操作可以看做是一種滑窗法,首先,輸入維度是4×4,輸入中紅色部分,先和核函數中的元素對應相乘,就是輸出中左上角的元素值s1,即 s1 = a×k1+b×k2+e×k3+f×k4。
參數共享是指在一個模型的多個函數中使用相同的參數,它是卷積運算帶來的固有屬性。
在全連接中,計算每層的輸出時,權重矩陣中的元素只作用於某一個輸入元素一次;
而在卷積神經網路中,卷積核中的每一個元素將作用於每一個局部輸入的特定位置上。根據參數共享的思想,我們只需要學習一組參數集合,而不需要針對每一個位置的每一個參數來進行優化學習,從而大大降低了模型的存儲需求。
如果一個函數的輸入做了一些改變,那麼輸出也跟著做出同樣的改變,這就時平移不變性。
平移不變性是由參數共享的物理意義所得。在計算機視覺中,假如要識別一個圖片中是否有一隻貓,那麼無論這只貓在圖片的什麼位置,我們都應該識別出來,即就是神經網路的輸出對於平移不變性來說是等變的。
根據稀疏連接、參數共享和平移不變性三個思想,卷積核就應運而生了。看下圖,有個直觀的感受。
上圖就是在一個通道上做的卷積,但現實中,圖片一般是由3個通道構成(R\G\B),卷積核也由二維的平面生成了三維立體。具體的樣子如下圖:
如上圖所示,Filter W0 即為卷積核,其大小為(3 * 3 * 3),每個3*3的二維平面會和圖片的相應的通道進行卷積,3個通道的結果相加後加上統一的偏置b0,結果即為Output Volume 第一個通道的第一個位置的數。
從上圖還可以看出 Input Volume 四周加了0,這個0叫做padding,一般是為了卷積劃動的過程中包含原有的所有數;而多通道卷積核計算過程和卷積核計算過程,不太一樣的是多通道卷積核計算過程每次滑2下,這個滑動的距離叫做步長-stride。
所以通過輸入大小和卷積核大小,我們可以推斷出最終的結果的大小。比如上圖卷積核計算過程,輸入大小為5 * 5,卷積核為3 * 3,那麼卷積核在原圖上每次滑動一格,橫向滑3次,縱向也是3次,最終結果為 3 * 3。在多通道卷積核計算過程中,每次滑動為2格,橫向滑3次,縱向也是3次,最終結果也為 3*3。可以推斷出,最終大小的公式為:(輸入大小 - 卷積核大小)/ 滑動步長。
在卷積核計算過程,可以看出經過卷積後的大小變小了,那能不能經過卷積計算且大小不變呢?這里,引出了 padding 的另一個作用,保證輸入和輸出的大小一致。比方輸出的 5*5 加 padding,那麼四周就被0圍繞了,這時的輸入大小就變為7 * 7, 再經過 3 * 3的卷積後,按照上邊推斷出的公式,可以得出 最終的大小為 5 * 5,這時與輸入大小保持了一致。
池化層夾在連續的卷積層中間, 用於壓縮數據和參數的量,減小過擬合。
簡而言之,如果輸入是圖像的話,那麼池化層的最主要作用就是壓縮圖像。
池化層用的方法有Max pooling 和 average pooling,而實際用的較多的是Max pooling。下圖演示一下Max pooling。
對於每個2 * 2的窗口選出最大的數作為輸出矩陣的相應元素的值,比如輸入矩陣第一個2 * 2窗口中最大的數是1,那麼輸出矩陣的第一個元素就是1,如此類推。
全連接層的部分就是將之前的結果展平之後接到最基本的神經網路了。
根據上邊的介紹,可以得出,卷積核的通道數目和輸入的圖像的通道數目是保持一致的,而輸出的通道數目是和卷積核數目是一致的。這樣參數量可以得出,假設輸入的通道為5,卷積核大小為 3 * 3 ,輸出的通道數目為10,那麼參數量為:3 * 3 * 5 * 10,其中3 * 3 * 5是1個卷積核的參數個數,3 * 3 * 5 * 10 是 10個卷積核的參數個數,也就總共的參數個數。
在卷積中,滑動一次會經過多次的點乘,只經過一次的加法,所以加法的計算量可以忽略不計。其中,滑動一次會的點乘次數和卷積核的大小有關系,比方 3 * 3的卷積,則是經過了 3 * 3 = 9次點積。一共滑動多少次和輸出大小有關系,比方 輸出的結果也為 3 * 3,那麼就是滑動了9次。這樣就可以得出輸入和輸出單通道時計算量 3 * 3 * 3 * 3 = 81。那麼對於輸入多通道時,卷積核也需要增加相應的通道數目,此時應該在剛才的計算量上乘以通道的數目,得出輸入多通道的一個卷積核的計算量。這樣,對於輸出多通道,總的計算量則是乘以多個卷積核即可。
Ⅲ 如何理解卷積神經網路中的權值共享
權值共享的通俗理解就是整張圖片或者整組feature map共用一個卷積核,卷積核在圖片上慢慢滑動,所以圖片上每個區域都是利用了卷積核內的參數,這就是權值共享。
Ⅳ 如何理解人工智慧神經網路中的權值共享問題
權值(權重)共享這個詞是由LeNet5模型提出來的。以CNN為例,在對一張圖偏進行卷積的過程中,使用的是同一個卷積核的參數。比如一個3×3×1的卷積核,這個卷積核內9個的參數被整張圖共享,而不會因為圖像內位置的不同而改變卷積核內的權系數。說的再直白一些,就是用一個卷積核不改變其內權系數的情況下卷積處理整張圖片(當然CNN中每一層不會只有一個卷積核的,這樣說只是為了方便解釋而已)。
Ⅳ 卷積神經網路權值共享怎麼體現的
- 用局部連接而不是全連接,同時權值共享。
局部連接的概念參考局部感受域,即某個視神經元僅考慮某一個小區域的視覺輸入,因此相比普通神經網路的全連接層(下一層的某一個神經元需要與前一層的所有節點連接),卷積網路的某一個卷積層的所有節點只負責前層輸入的某一個區域(比如某個3*3的方塊)。這樣一來需要訓練的權值數相比全連接而言會大大減少,進而減小對樣本空間大小的需求。
權值共享的概念就是,某一隱藏層的所有神經元共用一組權值。
這兩個概念對應卷積層的話,恰好就是某個固定的卷積核。卷積核在圖像上滑動時每處在一個位置分別對應一個「局部連接」的神經元,同時因為「權值共享」的緣故,這些神經元的參數一致,正好對應同一個卷積核。
順便補充下,不同卷積核對應不同的特徵,比如不同方向的邊(edge)就會分別對應不同的卷積核。
- 激活函數f(x)用ReLU的話避免了x過大梯度趨於0(比如用sigmoid)而影響訓練的權值的情況(即GradientVanishing)。同時結果會更稀疏一些。
- 池化之後(例如保留鄰域內最大或~~平均以舍棄一些信息)一定程度也壓制了過擬合的情況。
綜述
總體來說就是重復卷積-relu來提取特徵,進行池化之後再作更深層的特徵提取,實質上深層卷積網路的主要作用在於特徵提取。最後一層直接用softmax來分類(獲得一個介於0~1的值表達輸入屬於這一類別的概率)。
Ⅵ 如何理解卷積神經網路中的權值共享
簡單談談自己的理解吧。池化:把很多數據用最大值或者平均值代替。目的是降低數據量。卷積:把數據通過一個卷積核變化成特徵,便於後面的分離。計算方式與信號系統中的相同。