# lecture5_note ###### tags: `Lecture5` 介紹一下什麼是CNN  CNN就是輸入是image的神經網路 當input固定是影像的時候 就會有特有的性質出現 所以對於CNN來講 他的輸入就會是3維度的矩陣 而非像是其他的神經網路輸入是一個又臭又長的向量 這件事情可以使CNN得到更高效的演算效率 以下的右圖是CNN的想法 左圖是一般的神經網路  在神經網路中,有三個主要的東西來建構CNN ## Convolutional Layer 這一層有幾個作用 第一件事情是 比如說當我們要分辨一張圖片裡面有沒有鳥的時候,我們可能會去找說是否在這張圖中有鳥嘴(舉例),而且對於一般的情況來講,你要找的pattern的大小通常都比整張圖片小,所以對於只是在整張圖片裡面找一小部分的pattern來說,他其實就不需要去看整張圖片,他其實只要去看image的一個小部分就可以決定這件事情了  第二件事情是,同樣的pattern可能會出現在image的不同的地方,比如說 | 鳥嘴在中間 | 鳥嘴在左上 | | -------- | -------- | |  |  | 我們只需要一個 node 去偵測他就好了 ,這樣的話可以節省非常多的 node(或是 weight),這稱為 **shared weight**。 等等例子做介紹 此時,就需要convolution的介入,我們舉一個例子: 有兩個fillter可以用 接下來我們設定stride為1(可以自己假設) stride其實就是filter移動的距離 對於第一個filter來說(先算他) 你把它擺到左上角(第一個正方形紅框框)  針對他跟它蓋住的矩陣做elementwise的乘積然後加起來 (就是做標準內積啦),出來是3 然後再來,你將filter往右邊移動stride=1單位 變這樣  然後一樣內積,再加起來,得到-1 依此類推,你應該就可以得到一個矩陣  請注意藍色部分 首先我們知道filter的權重部分以對角線為最高 也就是說,對於這個filter來說,他最注意就是對角線有沒有出現111ㄌ 從左上到右下的這種形狀是這個filter最重要的事情 他就是在找這個pattern 所以你就可以知道 因為再出來的矩陣中,以左上跟左下為最大 意思就是說這個pattern會出現在左上跟左下的矩陣之中 再對照左邊的圖,確實如此。 因此我們可以知道convolution可以解決剛剛討論的第二個問題 就是你這個pattern如果出現在不同的地方怎麼辦了  這邊告訴我們說,對於這種高維度的輸入(圖片)來說 不太會用full-connected network去接 相反來說,我們會讓neruon只跟局部的數據做連接 這就是local connectivity ===================================== 另外,還記得剛剛還有一個filter嗎? 這個filter2也可以用一樣的卷積做法去找出對應的一組矩陣 如果今天還有很多filter 每一個不同的filter都有不同的結果 這些不同的結果統稱叫做feature map ===================================== receptive field則是在指filter的大小 這邊要特別注意的是,深度一定會跟輸入的東西一樣 給個例子  ===================================== 接下來是zero-padding 上定義 簡單來說,就是在你的輸入的矩陣之外再多加0 目的通常是為了讓輸入跟convolution layer的輸出的長寬高是一樣的 一樣舉個例子  像是左圖,他的輸入跟輸出的長寬高就都一樣 因為他加了zero padding 假定輸入數组的spatial arrangement是正方形,就是高寬相等,輸出數據的尺寸為 > ### ***(W-F +2P)/S+1*** > K是幾個filter的意思 比如輸入是7x7,filter是3x3,stride=1,zero-padding=0,就能得到一個5x5的輸出 ### summary 所以你可以知道convolution layer其實是在擷取local的資訊,而非global ## Pooling Layer > Its function(pooling layer) is to progressively reduce the spatial size of the representation to reduce the amount of parameters and computation in the network, and hence to also control overfitting. > 看起來其實就是針對input做subsampling,只是downsampling的方法不同罷了。 這邊可以看一個影片,簡單暴力又好懂。 {%youtube fApFKmXcp2Y %} 後面提到,pooling layer可以避免overfitting的原因猜測是因為當你把資料的特徵減少了,訓練出來的模型就能夠泛化,若資料feature多,訓練出來的模型會去努力擬合這些feature,使模型變複雜,泛化能力自然降低。 > It is worth noting that there are only two commonly seen variations of the max pooling layer found in practice: A pooling layer with F=3,S=2,(also called overlapping pooling), and more commonly F=2,S=2, Pooling sizes with larger receptive fields are too destructive. > 此段介紹的是:通常在pooling layer裡面,常用的stride跟receptive field Q:實際的操作為何? 舉個例子 還記得剛剛在算feature map的例子嗎(with F=2,S=2)?  最後是:  文中提及,現在很多在做影像辨識的人越來越不喜歡把pooling layer丟進去network裡面(eg:alphago,可能因為subsampling對於棋盤這件事情來說,少一行少一列都會差很多,所以在alphago中是沒有用到max pooling的),那麼要如何將資料降低維度呢? 他們利用在conv層中更大的stride來降低image的尺寸 ### reference: https://www.zhihu.com/question/36686900 ## Fully-Connected Layer(跟普通的nerual network一樣) 此處提及,對於一個full connected layer和convolution layer來說,他們其實可以互相轉換,但是普遍來說我們會選擇把full connected layer轉成convolution layer,這樣聽說效率比較高(? (這邊我真的看不太懂,求解釋) 至於如何轉換,我們先上一張圖  這張圖同一個顏色的部份表示的意義就是share weights 卷積層的概念剛剛也有提及,其實就是局部的運算而已,全連接則是全部直接硬算,因此,***卷積層如果畫成全連接層的表示方法,其實就是把某一些參數設成0而已***(此處同色線共享一個neroun) (這邊我真的看不太懂,求解釋) 回到史丹佛那邊,我們看一下比較普遍的例子 
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up