卷積神經網絡中一維卷積的計算過程


卷積神經網絡(CNN)是深度學習中常用的網絡架構,在智能語音中也不例外,比如語音識別。語音中是按幀來處理的,每一幀處理完就得到了相對應的特征向量,常用的特征向量有MFCC等,通常處理完一幀得到的是一個39維的MFCC特征向量。假設一段語音有N幀,處理完這段語音后得到的是一個39行N列(行表示特征維度,列表示幀數)的矩陣,這個矩陣是一個平面,是CNN的輸入。應用在圖像問題上的CNN通常是二維卷積(因為圖像有RGB三個通道),而語音問題上的CNN輸入是一個矩陣平面,可以用一維卷積。本文就講講一維卷積是怎么處理的。

 

所謂一維卷積是指卷積核只在一個方向上移動。具體到語音上,假設一段語音提取特征后是一個M行N列(M表示特征維度,N表示幀數)的矩陣平面,卷積核要在幀的方向上從小到大移動,下圖給出了示意。

 

卷積核也是一個矩陣(J行K列)。由於卷積核只在一個方向上移動,要把所有的特征值都覆蓋到,必須卷積核的行數要等於特征值矩陣的行數,即J = M,所以描述卷積核時只需要知道kernel size(即多少列)和 kernel count(即多少個kernel)。

 

知道kernel size和kernel count后,再來看一維卷積的計算過程,看一個輸入矩陣經過一維卷積后得到的是什么。設定padding模式為same(卷積處理后的輸出矩陣與輸入矩陣有相同的列數),stride為1(kernel一次只移動一格)。假定輸入矩陣為3x5的矩陣,kernel個數為2,kernel size為3,所以kernel是一個3x3的矩陣。輸入矩陣和兩個kernel矩陣的具體值如下圖,兩個kernel的bias分別是2和3。

 

先看第一個卷積核與輸入矩陣的計算。由於padding模式是same,輸入矩陣左右都要pad。Kernel size是3,所以輸入矩陣左右都要補充1列(用0填充),補充后輸入矩陣變成了下圖。

做卷積時先從左邊的padding處開始,具體如下圖,相對應的位置相乘再相加后,再加上bias就可以了,計算出值為10(0 x 1 + 1 x 0 + 4 x 0 + 0 x 0 + 2 x 1 + 5 x 0 + 0 x 0 + 3 x 0 + 6 x 1 + 2 = 10)。

把卷積核向幀增大方向(即向右)移動一格,如下圖:

同樣方法計算出值為17(1 x 1 + 4 x 0 + 7 x 0 + 2 x 0 + 5 x 1 + 8 x 0 + 3 x 0 + 6 x 0 + 9 x 1 + 2 = 17)。

經過4次移動后就到了右邊的padding處,同樣方法計算。最終得到的是一個1行5列的矩陣,如下圖:

第二個kernel的卷積計算與第一個kernel計算一樣,得到的也是一個1行5列的矩陣。如下圖:

最終一個3x5的輸入矩陣與kernel count為2、kernel size為3的卷積后得到的是一個2行5列的矩陣,如下圖。

可以看出卷積后輸入矩陣的列數不變,行數變為了kernel的個數(這是在padding模式為same、stride為1的case下,其他case行數依舊是kernel的個數,列數會變化,比如stride > 1 或者用上maxpooling后列數會減少,但卷積計算過程是一樣的)。

 

以上就是一維卷積的處理過程,很簡單的吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM