在學習深度學習之時候會遇到許多名詞,
所以我想在實際介紹幾個常見的模型之前,
先概略的介紹一下深度學習常聽或看到的名詞,
在學習深度學習的過程中,常常會聽到純量向量以及維度,
純量就是一個數字頂多就是比大小,
向量則是比純量多了方向性,所以向量同時有大小也有方向的概念,
比向量更高階的就叫張量,張量就包含上述所有特性,
但在不同維度、不同階的情況下張量會有不同狀況,
張量 ( Tensor ) 比向量多出的特性就是可以表示向量、純量、和張量之間的線性關係包含內積、外積、線性映射等等。
示意表格
純量 | 向量 | 矩陣 | 3階張量 | n階張量 |
---|---|---|---|---|
只有大小 | 有大小和方向 | 行列兩個向量 | 行列高三個向量 | 由N個互相垂直的向量組成 |
一維空間 | 二維空間 | 三維空間 | N維空間 |
Tensor 實際上就是一個多維數組( multidimensional array ),目的是能夠創造更高維度的矩陣、向量。
Tensor 示意圖
圖片引用至知乎
在用TensorFlow處理更高維數據結構的時候,最好可以能夠在腦海中浮現出數據的形狀。
彩色圖像文件(RGB)一般都會處理成3-d tensor,每個2d array中的element表示一個像素,R代表Red,G代表Green,B代表Blue:
圖片同樣引用至知乎
而用Python舉例子的話,來看看下面這個表格:
圖片同樣引用至知乎
卷積運算就是將原始圖片的與特定的特徵檢測 Feature Detector ( filter ) 做卷積運算 ( 符號 ⊗ ) ,卷積運算就是將下圖兩個3x3的矩陣作相乘後再相加,直到依序做完整張圖。
卷積層 示意圖
中間的特徵檢測會隨機產生好幾種( ex : 16種 ),
特徵檢測的目的就是幫助我們萃取出圖片當中的一些特徵 ( ex : 形狀 ) ,
就像人的大腦在判斷這個圖片是什麼東西也是根據形狀來推測
特徵檢測 示意圖
首先要先介紹一下CNN的模型架構,
可以將這個CNN模型分為幾個部分,分別是:
而其中卷積層以及池化層是負責做圖片的特徵擷取的部分,而最後的全連接層則是負責分類。
由於卷積層是拿來做特徵擷取,所以他會將一張大的圖片,藉由一個小的卷積核來對圖片的每個部份做比對,來找出圖片符合特徵的地方,這樣講可能很難懂,先附上一張圖片。
卷積層比對 示意圖
下面那張9x9的圖片是我們想要辨識的叉叉,而上面三個3x3就是我們的卷積核,
而裡面的數字可以讓我們用來做卷積的計算,從而得出我們現在所比對的這個區域是不是符合我們的卷積核。
如圖下所示:
我們左上的卷積核對應到下面的綠色框框的區域,都是3x3每一格互相對應並且格子的數字相乘,最後可以得出右上,代表這個區域是符合我們的卷積核的,透過這樣的方式,從左上到右下,將整張圖片都比對一遍。
卷積層比對 示意圖
在這邊可能會感覺有些奇怪,怎麼會有小數?且還會發現,怎麼從原本 9x9 變成 7x7 了?
那是因為卷積層的步驟還沒講完,先來看下一個步驟的動圖:
現在有一張 5x5 的 image ,我們用一個 3x3 的卷積核開始去做卷積,
並且我們可以由圖中知道卷積的運作方式,卷積核會從圖片的左上角開始,每次向右一格,
直到圖片邊界,之後再往下一格,一樣會從左邊開始,直到圖片邊界,之後再繼續往下,
並且每次經過計算後,他會將9格的計算結果透過取平均或者加總等方式濃縮成一格,所以當 3x3 的卷積核在掃描 5x5 的圖片時,左到右3次,上到下也3次,最後會輸出一個 3x3的 結果。
每次移動幾格這個稱為 stride (步長),當 stride=2 時,卷積核每次變移動兩格,所產生出來的結果大小也就會就不同。
所以說一個 9x9 的圖片,經過一個 3x3 的卷積核,左到右 7 次,上到下 7 次,輸出 7x7 的結果,並且它是以取平均的方式來進行計算。
而灰階影像和 RGB 影像差別在於輸入通道數的不同。
換句話說,若輸入影像有 N 的通道,卷積核就要有 N 個通道才能進行卷積。
卷積核的結構可以是二維也可以是三維,依輸入圖像的通道數來決定。
CNN RGB灰階 示意圖
池化層在壓縮圖片大小的同時保留重要的特徵,
池化 示意圖
池化層和卷積層相似的部分是可以自由選擇池化的大小,大小通常為 2x2 或者是 3x3,
例如圖中的就是一個 2x2 ,步長為 2 的池化層,選擇了 Max Pooling 的方式。
這邊就要介紹一下兩種常見的Pooling:
以圖來解釋,就是在框框中的四格中取最大值
這名字應該一看就能理解,就是在框框中的4個取平均值
示意圖
再來介紹除了壓縮圖片大小(降維)和保留特徵之外 Pooling 還具有 Invariance (不變性) , 不變性又分為三種。
可以看到,圖中都有一個數字1,圖片大小為16x16,不同的地方在於上圖的 1偏左,下圖的1偏右,但在經過池化後,1的位置卻是一樣的,成為了一個 相同的矩陣,也就是平移不變。
由下圖也可以看到,一張斜線和一張水平線的圖片,在經過Pooling後也成
為了相同的矩陣,也就是旋轉不變。
以下兩張圖片也很相似,不同的地方在於大小,上圖較大,下圖較小,儘管如
在經過多次Pooling之後,又成為了相同的矩陣,也就是尺度不變。
好,今天的介紹就到此結束,內容有許多是當初在學習的過程中,閱讀其他先進的筆記,統整出來的概念,
內容以及圖片多有引用,目的是希望能夠在敘述之餘提供讀者具象的概念,有誤的部分再煩請各位先進提出指教,
明天想要介紹一下 CNN 的部分 ( 不是電視台 ),掰拉。
今天不分享歌曲,偷偷跟各位分享一下很好看ㄉ霹靂布袋戲 霹靂英雄戰紀之蝶龍之亂 八口山之戰部分 >////<
https://www.youtube.com/watch?v=tB06sV6l0jk&t=262s&ab_channel=PILI%E9%9C%B9%E9%9D%82%E5%B8%83%E8%A2%8B%E6%88%B2