當前位置:首頁 » 手機軟體 » 卷積神經網路的參數共享理解
擴展閱讀
路由器換地方會有網路嗎 2025-01-19 17:00:23
電腦網路連接變紅色 2025-01-19 16:59:38

卷積神經網路的參數共享理解

發布時間: 2023-02-13 07:47:46

❶ 卷積神經網路通俗理解

卷積神經網路是一類包含卷積計算且具有深度結構的前饋神經網路,是深度學習的代表演算法之一 。卷積神經網路具有表徵學習能力,能夠按其階層結構對輸入信息進行平移不變分類,因此也被稱為「平移不變人工神經網路。

❷ 人工智慧CNN卷積神經網路如何共享權值

首先權值共享就是濾波器共享,濾波器的參數是固定的,即是用相同的濾波器去掃一遍圖像,提取一次特徵特徵,得到feature map。在卷積網路中,學好了一個濾波器,就相當於掌握了一種特徵,這個濾波器在圖像中滑動,進行特徵提取,然後所有進行這樣操作的區域都會被採集到這種特徵,就好比上面的水平線。

❸ 卷積神經網路中的參數量和計算量

    在設計卷積神經網路的時候,需要考慮網路的大小,即參數量和計算量,參數量指的是卷積核中的參數的數量,計算量指的是卷積神經網路執行數值運算的次數。由於參數共享,參數量只與feature map的數量有關,而與feature map的大小無關,計算量與二者都有關。

    常用的卷積操作的參數量為:

類似地,計算量為

    深度可分離卷積主要是一對一的卷積,因而計算量為

之後再通過 卷積進行特徵融合

❹ 卷積神經網路演算法是什麼

一維構築、二維構築、全卷積構築。

卷積神經網路(Convolutional Neural Networks, CNN)是一類包含卷積計算且具有深度結構的前饋神經網路(Feedforward Neural Networks),是深度學習(deep learning)的代表演算法之一。

卷積神經網路具有表徵學習(representation learning)能力,能夠按其階層結構對輸入信息進行平移不變分類(shift-invariant classification),因此也被稱為「平移不變人工神經網路(Shift-Invariant Artificial Neural Networks, SIANN)」。

卷積神經網路的連接性:

卷積神經網路中卷積層間的連接被稱為稀疏連接(sparse connection),即相比於前饋神經網路中的全連接,卷積層中的神經元僅與其相鄰層的部分,而非全部神經元相連。具體地,卷積神經網路第l層特徵圖中的任意一個像素(神經元)都僅是l-1層中卷積核所定義的感受野內的像素的線性組合。

卷積神經網路的稀疏連接具有正則化的效果,提高了網路結構的穩定性和泛化能力,避免過度擬合,同時,稀疏連接減少了權重參數的總量,有利於神經網路的快速學習,和在計算時減少內存開銷。

卷積神經網路中特徵圖同一通道內的所有像素共享一組卷積核權重系數,該性質被稱為權重共享(weight sharing)。權重共享將卷積神經網路和其它包含局部連接結構的神經網路相區分,後者雖然使用了稀疏連接,但不同連接的權重是不同的。權重共享和稀疏連接一樣,減少了卷積神經網路的參數總量,並具有正則化的效果。

在全連接網路視角下,卷積神經網路的稀疏連接和權重共享可以被視為兩個無限強的先驗(pirior),即一個隱含層神經元在其感受野之外的所有權重系數恆為0(但感受野可以在空間移動);且在一個通道內,所有神經元的權重系數相同。

❺ 卷積神經網路

卷積神經網路 (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 補齊,使得輸出的矩陣大小和輸入一致。

❻ 如何理解卷積神經網路中的權值共享

權值共享的通俗理解就是整張圖片或者整組feature map共用一個卷積核,卷積核在圖片上慢慢滑動,所以圖片上每個區域都是利用了卷積核內的參數,這就是權值共享。

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

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

❽ 卷積神經網路

一般由卷積層,匯聚層,和全連接層交叉堆疊而成,使用反向傳播演算法進行訓練(反向傳播,再重新看一下)
卷積神經網路有三個結構上的特性:局部連接,權重共享以及子采樣

濾波器filter 卷積核convolution kernel
局部連接,其實就是根據時間,權重遞減 最後為0 參數就傳播不到遠處了

局部連接 乘以 濾波器 得特徵映射

互相關,是一個衡量兩個序列相關性的函數,
互相關和卷積的區別在於 卷積核僅僅是否進行翻轉,因此互相關也可以稱為 不翻轉卷積
使用卷積 是為了進行特徵抽取,卷積核 是否進行翻轉和其特徵抽取的能力無關。
當卷積核是可以學習的參數,卷積和互相關是等價的,因此,其實兩者差不多。

Tips:P是代表特徵映射

❾ 卷積神經網路通俗理解

卷積神經網路通俗理解如下:

卷積神經網路(CNN)-結構

① CNN結構一般包含這幾個層:

  • 輸入層:用於數據的輸入

  • 卷積層:使用卷積核進行特徵提取和特徵映射

  • 激勵層:由於卷積也是一種線性運算,因此需要增加非線性映射

  • 池化層:進行下采樣,對特徵圖稀疏處理,減少數據運算量。

  • 全連接層:通常在CNN的尾部進行重新擬合,減少特徵信息的損失

  • 輸出層:用於輸出結果

  • ② 中間還可以使用一些其他的功能層:

  • 歸一化層(Batch Normalization):在CNN中對特徵的歸一化

  • 切分層:對某些(圖片)數據的進行分區域的單獨學習

  • 融合層:對獨立進行特徵學習的分支進行融合

  • 卷積神經網路(CNN)-輸入層

    ① CNN的輸入層的輸入格式保留了圖片本身的結構。

    ② 對於黑白的 28×28的圖片,CNN 的輸入是一個 28×28 的二維神經元。

    ③ 對於 RGB 格式的 28×28 圖片,CNN 的輸入則是一個3×28×28 的三維神經元(RGB中的每一個顏色通道都有一個 28×28 的矩陣)

    2)卷積神經網路(CNN)-卷積層

    1. 感受視野

    ① 在卷積層中有幾個重要的概念:

    • local receptive fields(感受視野)

    • shared weights(共享權值)

    • ② 假設輸入的是一個 28×28 的的二維神經元,我們定義 5×5 的 一個 local receptive fields(感受視野),即 隱藏層的神經元與輸入層的 5×5 個神經元相連,這個 5*5 的區域就稱之為 Local Receptive Fields,



❿ 初識卷積神經網路

按照上文中介紹的神經網路,如果處理一張圖片的話,參數有多大呢?假設圖像的大小為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。那麼對於輸入多通道時,卷積核也需要增加相應的通道數目,此時應該在剛才的計算量上乘以通道的數目,得出輸入多通道的一個卷積核的計算量。這樣,對於輸出多通道,總的計算量則是乘以多個卷積核即可。