深度學習學習心得
第五篇
===


---
## CNN
1. 我們希望每個NUERAL都可以成為最小單位的分類器
2. 使用DNN的時候,通常會需要太多的參數
3. 所以使用CNN來減少參數
:::info
DNN:假設一張100x100的彩色照片 = 30000維
若每層nueral 有1000個,那參數就是30000x1000個
:::
----
基本想法
---
1. 一張圖不是全部的地方都有特徵
2. 將一些不太重要的權重去掉來減少參數
3. 減少參數:用一些我們已經知道的規則
4. CNN模型結構比DNN結構還要簡單
---
重點1.Nueral
---
1. 要找到輸入影像中的某些規則
往往不需要看整張影像
就可以找到規則(pattern)
2. Ex. Find 鳥嘴不需要看整張圖
3. 故得知每個nueral只要連接到部分網路
而非全部都要連接

----
重點2.減少分類器
--
1. 某些pattern在不同訓練資料中
處在不同位置,不需要訓練2個
重複性的detector
2. 一樣是舉鳥嘴的例子

----
重點3.Subsampling
---
1. 子採樣可以有效降低參數數量
2. 子採樣的方式通常採用maxpooling
3. 當然不只maxpooling,還有其他的pooling
----
CNN進行流程與重點的關係
---
:::info
CNN流程:
input -> convolution -> maxpooling
->convolution -> maxpooling.....
->flatten-> fully-connected ->output
:::
1. convolution -> maxpooling流程可以循環多次
2. 重點1 & 重點2: convolution
3. 重點3: maxpooling
---
Convolution(捲積)
---
1. 現在輸入影像6x6,捲基層有多組filter
2. 先將filter(大小3x3)放到左上角進行內積(值= 3)

3. 接著根據stride決定往右挪動距離,再往下內積
----
捲積意義1
---

1. 內積結果將原本6x6 -> 4x4 的矩陣
2. Filter 1偵測到左上角與左下角的值最大
->有filter1想找的pattern
3. 重點2:不同位置pattern可用同一filter找到
----
捲積意義2
---

1. 接著換filter2去跑,跑出來一樣也是4x4矩陣
2. 所有filter都跑完之後就得到 feature map
3. 固定filter大小的做法有一些隱憂:
鳥嘴大小差太多可能就沒辦法用同個filter找到
----
捲積意義3
---
1. 彩色image=input,filter會變成立體的nxnx3
同一個filter會同時考慮3個不同顏色channel
2. Convolution可以視為DNN中的部分輸出值
3. 不是所有nueral都連接到3 =>減少參數

----
捲積意義4
---

1. 不同的nueral ouput間會共用同一個weight
2. 每個input給不同output 的weight都是一樣的
3. 編號2給輸出3與輸出-1的weight都是一樣的
-> 減少更多參數
---
Maxpooling(最大池化)
---

1. 根據filter算出的feature map
我們可以再將它縮小成n個一組
2. 這邊舉例用4個一組,然後4個裡面
選擇最大值代表(見下頁)
----
**最大值代表**

----
輸入大小變化
---

1. input:6x6
2. conv -> maxpooling
3. output:2x2
4. 參數真的有變少 :+1:
----
Flatten
---
1. feature map拉直 = DNN的input

:::warning
做CNN時要注意input不再是一般向量
而是高維的向量
:::
---
## Next Lesson ...
1. CNN code review
###### tags: `Deep learning` `beginner` `python` `keras` `tutorial`
{"metaMigratedAt":"2023-06-15T05:46:28.127Z","metaMigratedFrom":"YAML","title":"深度學習學習心得-5","breaks":true,"disqus":"hackmd","contributors":"[{\"id\":\"6bb13895-9bc1-441a-8b8f-cc9578e3b5bc\",\"add\":5518,\"del\":3083}]"}