- CNN : Convolutional Neural Network
- Typical CNN architectures
- Key Operations in CNN
- Fully connected layer
- input image (32, 32, 3) --> (3072, 1) // stretch, 32*32*3 = 3072
- weight (10, 3072)
- activation (1, 10)
- Fully connected layer는 서로 다른 weight으로 전체 레이어에 대해 계산하지만, Convolutional layer는 localized area만 보고, weight가 공유된다.
- Convolutional layer
- input image (32, 32, 3)
- filter (5, 5, 3) // filters always extend the full depth of the input volume --> input이 3channel이면, filter도 3channel로 확장.
- stride 1 // filter가 얼만큼 움직이는지?
- activation (1, 28, 28)
- 여기서 filter는 weight set이라고 봐도 된다. (한 filter는 weight set을 공유하기 때문!)
- 또한 한 filter는 하나의 associated bias를 가진다.
- Convolution 후 feature map의 size를 계산하고 싶다면?
1. Original Input (6, 6, 1)
2. Filter (3, 3, 1)
3. stride = 1
---
- original에서 filter 크기를 먼저 빼면, 3칸이 남는다, 그리고 stride로 나누면 3번의 컨볼루션이 더 수행된다는 뜻인데,
여기서 처음 filter가 놓인 공간까지 계산해서 1을 더해준다.
- 즉, 1 + (originalsize-filtersize)/stride 로 계산이 가능하다.
1. Original Input (32, 32, 1)
2. Filter (3, 3, 1)
3. stride 2
- 위 조건의 경우, (32-3)/2 +1을 하게 되면 14.5+1 = 15.5가 되는데, 이 때는 소수점 이하를 drop한다. (15)
- 또한 dimension을 같도록 유지하기 위해 padding(테두리, 주로 zero-pad border) 개념이 도입된다.
(32, 32, 1) input에서
padding 1이 적용되면
(33, 33, 1) input이 된다.
- 여기서 주의할 점은, padding은 양옆, 위아래로 적용되기 때문에, 사실 가로 세로로 2 point씩 커진 거라고 생각하면 된다.
- 즉, 위의 공식에서 originalsize에 2*padding을 더해주어야 한다는 소리!
1. Original Input (32, 32, 1)
2. Filter (5, 5, 1)
3. stride 1
4. padding 2
- 위 조건의 경우, (32+(2*2) - 5)/1 + 1을 하게 되니까, Feature map size는 그대로 (32, 32, 1)이 된다.
- 또한, filter의 개수에 따라 Output volume의 Depth가 정해진다.