CNN - BD-SEARCH/MLtutorial GitHub Wiki
CNN(Convolution Neural Network)๋ ์ฃผ๋ณ์ ๋ฐ์ดํฐ๋ฅผ ํจ๊ป ๋ณด์ ๋ฐ์ดํฐ์ ํน์ง์ ๋ฝ์ ๋ด๋ Layer์ด๋ค. CNN์ ์์น์ ์๋ฏธ๊ฐ ์๋ ๋ฐ์ดํฐ์ ๋ง์ด ์ฌ์ฉํ๋ค. ์ด๋ฏธ์ง ๋ถ์์ ์ฌ์ฉํ๋ VGG๋ ํ ์คํธ ๋ถ์์ ๋ง์ด ์ฌ์ฉํ๋ TextCNN ๋ฑ์ ๋ง์ด ์ฌ์ฉ๋๋ค.
1. ํฉ์ฑ๊ณฑ ๊ณ์ธต
- ๋ฐ์ดํฐ์ ํ์์ ์ ์งํ์ฌ ๊ณ์ธต์ ํน์ง์ ์ ์งํ ์ ์๋ค.
- ์ด๋ฏธ์ง์ ๊ฒฝ์ฐ 3์ฐจ์(width, height, color) ํ์์ผ๋ก ๋์ด ์์ผ๋ฏ๋ก, 3์ฐจ์์ ์ ๋ ฅ๋ฐ์ 3์ฐจ์์ ์ถ๋ ฅํ๋ค.
- ํฉ์ฑ๊ณฑ ๊ณ์ธต์ ์
์ถ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ํน์ง ๋งต(feature map)์ด๋ผ๊ณ ํ๋ค.
- ์ ๋ ฅ ๋ฐ์ดํฐ๋ ์ ๋ ฅ ํน์ง ๋งต(input feature map), ์ถ๋ ฅ ๋ฐ์ดํฐ๋ ์ถ๋ ฅ ํน์ง ๋งต(output feature map)
(1) Convolution(ํฉ์ฑ๊ณฑ)
ํฉ์ฑ๊ณฑ ์ฐ์ฐ์ ๊ณผ์
- ํํฐ์ ์๋์ฐ(window)๋ฅผ ์ผ์ ๊ฐ๊ฒฉ์ผ๋ก ์ด๋ํด ๊ฐ๋ฉด์ ์ ๋ ฅ ๋ฐ์ดํฐ์ ์ ์ฉํ๋ค. ์๋์ฐ๋ ์ ๊ทธ๋ฆผ์์ ๋นจ๊ฐ ์ ๋ค๋ชจ ์นธ์ ์๋ฏธํ๋ค.
- ๋จ์ผ ๊ณฑ์ -๋์ฐ(fused multiply-add, FMA): ์ ๋ ฅ(input)๊ณผ ํํฐ์ ๋์ํ๋ ์์๋ผ๋ฆฌ ๊ณฑํ ๊ตฌ ์ดํฉ์ ๊ตฌํ๋ค.
- ์ ๊ณผ์ ์ ๋ชจ๋ ์ฅ์์์ ์ํํ๋ค.
- ํํฐ๋ฅผ ์ ์ฉํ ์์์ ๊ณ ์ ๊ฐ(ํธํฅ)์ ๋ํ๋ค.
- ์ ๋ ฅ ํจ์์ ๊ฐ์ด ํน์ง ํจ์์ ๊ฐ๊ณผ ์ผ๋ง๋ ์ผ์นํ๋์ง ์์๋ด๋ ํจ์์ด๋ค.
- ์ด๋ฏธ์ง/์์ฑ์์ ํน์ ํจํด์ ์ถ์ถํ ๋ ๋ง์ด ์ฌ์ฉํ๋ค.
- ๊ณ์ธต์ด ์์ผ๋ฉด ํฉ์ฑ๊ณฑ ๊ณ์ธต์ ๋ฅ๊ทผ ๋ชจ์, ๋ ์นด๋ก์ด ๋ชจ์ ๋ฑ ์ ์์ค์ ์ ๋ณด๊ฐ, ๊ณ์ธต์ด ๊น์ผ๋ฉด ์ถ์์ ์ธ ์ ๋ณด๊ฐ ์ถ์ถ๋๋ค.
- ํํฐ(filter): ์
๋ ฅ ๋ฐ์ดํฐ์ ๋์ผํ ์ฐจ์์ ๊ฐ์ง ํน์ง์ ๊ฐ์ง ๊ฐ. ์ปค๋(kernel)์ด๋ผ๊ณ ํ๊ธฐ๋ ํ๋ค.
- ํํฐ์ ๊ฐ์์ ํฌ๊ธฐ๋ฅผ ์ ํด ์ฃผ๋ฉด ๋ชจ๋ธ์ด filter๋ฅผ ์๋์ผ๋ก ํ์ตํ๋ค.
- ์ด๋ฏธ์ง๋ก ์๋ฅผ ๋ค๋ฉด ์ด๋ฏธ์ง์ ์๋ ํน์ง(๋พฐ์กฑํจ, ๋ถ๋๋ฌ์ ๋ฑ)์ ํํฐ๋ฅผ ์ด์ฉํด ์ถ์ถํ๋ค๊ณ ๋ณผ ์ ์๋ค.
- ํํฐ์ ๊ฐ์๋ฅผ ์ฌ๋ฌ ๊ฐ๋ก ์ง์ ํ๋ฉด ์ฌ๋ฌ ํน์ง์ ํ ๋ฒ์ ์ถ์ถํ ์ ์๋ค. ์ฆ, feature map์ ์ฌ๋ฌ ๊ฐ ๋ง๋ค ์ ์๋ค.
- Deconvolution(์ญํฉ์ฑ๊ณฑ)
- convolution์ ์ญ์ผ๋ก ์ํํ๋ ๊ณผ์ ์ผ๋ก feature map์ ํฌ๊ธฐ๋ฅผ ๋๋ฆฌ๋ ๊ณผ์ ์ด๋ค.
- CNN์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ง๊ณ ์๋ ์ด๋ฏธ์ง๋ฅผ ๋ค์ ๋ง๋ค๊ณ ์ถ์ ๋ ์ฌ์ฉํ ์ ์๋ค.
(2) Padding
- ์ ๋ ฅ ๋ฐ์ดํฐ ์ฃผ์์ 0์ ์ฑ์ฐ๋ ๊ฒ
- padding์ ์ฃผ๋ก ์ถ๋ ฅ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
- 3x3 ํํฐ๋ฅผ ์ ์ฉํ๋ ์ ๊ทธ๋ฆผ์ ๊ฒฝ์ฐ padding์ ์ ์ฉํ์ง ์์ผ๋ฉด ๊ฐ๋ก ํฌ๊ธฐ, ์ธ๋ก ํฌ๊ธฐ ๋ชจ๋ 2์ฉ ๊ฐ์ํ๊ฒ ๋๋ค.
- ๋ฐ๋ผ์ ํญ์ด 1์ธ padding์ ์ ์ฉํ์ฌ, Convolution์ ์ํํด๋ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๊ฐ ๋์ผํ๋๋ก ํ์๋ค.
(3) Stride
- ํํฐ๋ฅผ ์ ์ฉํ๋ ์์น์ ๊ฐ๊ฒฉ
- ์์ ์์ ๋ ํํฐ๋ฅผ ์ค๋ฅธ์ชฝ/์๋๋ก ํ ์นธ์ฉ ์์ง์ด๋ฉด์ ์ ์ฉํ์ผ๋ฏ๋ก stride๋ ๋ชจ๋ 1์ด๋ค.
- ํํฐ๋ฅผ ๋ ์นธ ๊ฑด๋๋ฐ์ด ์ ์ฉํ๋ฉด stride๋ 2๊ฐ ๋๋ค.
padding, stride์ ๋ฐ๋ฅธ ์ถ๋ ฅ ํฌ๊ธฐ๋ ์๋์ ๊ฐ๋ค.
- ์ ๋ ฅ ํฌ๊ธฐ: (H, W)
- ํํฐ ํฌ๊ธฐ: (FH, FW)
- ์ถ๋ ฅ ํฌ๊ธฐ: (OH, OW)
- padding: P
- stride: S
(4) 3์ฐจ์ ๋ฐ์ดํฐ
- ๋ฐ์ดํฐ๋ฅผ (height, width, channel)์ผ๋ก ๋๋ ์ ์๊ฐํ ์ ์๋ค.
- (height, width)์ ๋ํด ํฉ์ฑ๊ณฑ ์ฐ์ฐ์ ์ํํ๋ ๊ฒ์ channel ๋ฒ ๋ฐ๋ณตํ๋ค. ๊ฐ channel๋ณ๋ก ๋ค๋ฅธ ํํฐ๋ฅผ ์ฌ์ฉํ๋ค.
- ์ ๋ ฅ ๋ฐ์ดํฐ์ ์ฑ๋์์ ํํฐ์ ์ฑ๋ ์๋ ๋์ผํด์ผ ํ๋ค. ๋ํ, ๊ฐ ์ฑ๋๋ณ ํํฐ์ ํฌ๊ธฐ๋ ๋์ผํด์ผ ํ๋ค.
- http://cs231n.github.io/convolutional-networks/ ์ ์ค๊ฐ์ฏค์ ์๋ ๊ทธ๋ฆผ์ ์ฐธ๊ณ ํ ์ ์๋ค.
(5) Pooling
- ๊ฐ๋ก/์ธ๋ก ๋ฐฉํฅ์ ๊ณต๊ฐ์ ์ค์ด๋ ์ฐ์ฐ
- Max Pooling(์ต๋ ํ๋ง): ์์ญ ๋ด ์ต๋๊ฐ์ ์ทจํด Poolingํ๋ ๋ฐฉ๋ฒ
- ์ ๊ทธ๋ฆผ์ 2X2 Max Pooling์ ์ํํ๋ ๊ฒ์ ๋ํ๋ธ๋ค.
- ์ฆ, 2X2 ์์ญ ์ค์์ ๊ฐ์ฅ ํฐ ์์ ๊ฐ์ ๊ฐ์ง๋ค.
- ์๋์ฐ ํฌ๊ธฐ๊ฐ 2X2์ด๋ฏ๋ก stride๋ 2์ด๋ค. Pooling์ window size์ stride๋ ๊ฐ์ ๊ฐ์ผ๋ก ํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค.
- Average Pooling(ํ๊ท ํ๋ง): ์์ญ ๋ด ๊ฐ์ ํ๊ท ์ ๋ด์ด Poolingํ๋ ๋ฐฉ๋ฒ.
- Global Average Pooling(GAP)
- ๊ธฐ์กด์ max pooling์ 22 max pooling์ ํจ์ผ๋ก์จ HWC ์ฐจ์์ H(2xW)*(2xC), 1/4๋ก ๋ง๋ฆ
- global pooling์ H*W pooling์ด๋ผ๋ ๋ป
- ํ๋์ feature map (HWC)๋ฅผ ์ ๋ถ poolingํ์ฌ ํ๋์ ๋ด๋ฐ(11C)์ผ๋ก mappingํ๋ ๊ฒ
- Pooling์ ํน์ง
- ํ์ตํด์ผ ํ ๋งค๊ฐ๋ณ์๊ฐ ์๋ค
- ์ฑ๋ ์๊ฐ ๋ณํ์ง ์๋๋ค
- ๊ฐ ์ฑ๋๋ณ๋ก ๋ ์ง์ ์ผ๋ก ๊ณ์ฐํ๊ธฐ ๋๋ฌธ์ด๋ค.
- ์
๋ ฅ์ ๋ณํ์ ์ํฅ์ ์ ๊ฒ ๋ฐ๋๋ค. (์ตํ์ฑ ํ๋ณด)
- ์ ๋ ฅ ๋ฐ์ดํฐ๊ฐ ์กฐ๊ธ ์์ง์ฌ๋ Pooling์ ์ํํ๋ฉด ์ต๋๊ฐ ํ๋๋ง ๋จ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ์ ์ด๋์ Pooling์ด ํก์ํ ์ ์๋ค.
- ์ ๋ช ํ ์ ๋ณด๋ง ๋จ๊ฒจ์ ํ๋จ๊ณผ ํ์ต์ด ์ฌ์์ง๋ค. ๋ ธ์ด์ฆ๊ฐ ์ค์ด๋ค์ด์ ๋ ธ์ด์ฆ๋ก ์ธํ ์๋ชป๋ ํ๋จ์ ์ค์ธ๋ค.
Convolution (ํจํด์ ์์๊ฐ๋ฉฐ ์ ์ฐจ ๋ณต์กํ ํจํด์ ์ธ์) + MaxPooling (์ฌ์ด์ฆ๋ฅผ ์ค์ฌ๊ฐ๋ฉฐ ๋์ฑ ์ถ์ํํ๋ค)
2. CNN layer์ ์์ฉ
(1) FC : Fully Connected
- Convolution๊ณผ MaxPooling(์๋ต ๊ฐ๋ฅ)์ ๋ฐ๋ณตํ๋ฉด ๋ฐ๋ณตํ ์๋ก ์ถ์์ ์ธ ํน์ง์ด ๋จ๋๋ค.
- ์ ์ผ ๋ง์ง๋ง์ ์ถ์ํ๊ฐ ๋๋ ๋ฐ์ดํฐ๋ฅผ Fully Connected Layer์ ๋ฃ์ด ํ๋จํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
(2) One-by-One(1X1) Convolution
- Channel ์๋ฅผ ์กฐ์ ํ๊ธฐ ์ํ Convolution
- ๋์ ์ฐจ์์ ๋ฎ์ ์ฐจ์์ผ๋ก ์ถ์ํ๋ Dimension Reduction์ ์ฌ์ฉ ๊ฐ๋ฅ
- ์ฐจ์ ์๊ฐ ์ค์ด๋ค๋ฉด ๋ถํ์ํ feature๊ฐ ์ฌ๋ผ์๋ ํจ๊ณผ๋ฅผ ๊ฐ์ง๋ค.
- ํ๋ผ๋ฏธํฐ ์๋ฅผ ์ค์ฌ ์ฐ์๋์ ๊ฐ์์ํฌ ์ ์๋ค.
- ๋น์ ํ์ฑ์ ์ฆ๊ฐ์ํฌ ์ ์๋ค.
- ๋ง์ featute ์ค์์ ๊ผญ ํ์ํ feature๋ฅผ ๋จ๊ธฐ๊ธฐ ์ํด ์ฌ์ฉํ๋ค๊ณ ๋ณผ ์ ์์
- ๊ทผ์ฒ์ ๋ฐ์ดํฐ๋ ๋ณด์ง ์๊ณ ์๊ธฐ ์์ ์ ๋ฐ์ดํฐ๋ง ๋ณด๊ธฐ ๋๋ฌธ์ ํจํด ์ธ์์ ์ฌ์ฉํ์ง๋ ์์
3. ๊ตฌํ์ ์ ์์
- ์ฝ๋ ๋ณด๋ฌ๊ฐ๊ธฐ: CNN ๊ตฌํ
- ์ฝ๋ ๋ณด๋ฌ๋ผ๊ธฐ: MNIST ๋ฐ์ดํฐ์ ์ผ๋ก ํ์ต ๊ตฌํ
im2col
(image to column): height, width, stride, pad๋ฅผ ๊ณ ๋ คํ์ฌ, ๋ฐ์ดํฐ๋ฅผ 1์ฐจ์์ผ๋ก ์ ๊ฐํ๋ ํจ์. ์ฌ๋ฌ ๋ฐ์ดํฐ๊ฐ ์ ๋ ฅ์ผ๋ก ๋ค์ด์ค๋ฉด 2์ฐจ์์ผ๋ก ์ ๊ฐํ๋ค.- ์ฝ๋ ๋ณด๋ฌ๊ฐ๊ธฐ: im2col ๊ตฌํ
- stride๋ pad ๊ฐ์ ๋ฐ๋ผ ๊ฐ์ด ์ค๋ณต๋์ด ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๊ฐ ๋ฐ์ํ ์ ์๋ค. ๊ทธ๋ฌ๋ ํ๋ ฌ ๊ณ์ฐ์ ์ต์ ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ฏ๋ก ์ฐ์ฐ ์๋๊ฐ ๋นจ๋ผ์ง๋ค.
- Convolution: ํํฐ๋ฅผ 1์ฐจ์์ผ๋ก ์ ๊ฐํด์ ๊ณ์ ๊ณฑํด๋๊ฐ๋ฉด Convolution์ด ์ํ๋๋ค. Convolution์ ํ๋ ฌ์ ๊ณฑ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ค.
- Pooling: pooling์ ์ ์ฉ ์์ญ ๊ฐ์๋ง๋ค ํ๋์ฉ ์ต๋๊ฐ์ ์ถ์ถํ๋ฉด Max Pooling์ด ์ํ๋๋ค.
CNN Model
4.CNN ๋ง๋ค๊ธฐ
5.6. ์ฐธ๊ณ ์๋ฃ
- ์ปจ๋ณผ๋ฃจ์ ๋ ๋คํธ์ํฌ๋ฅผ ์ด์ฉํ ์ด๋ฏธ์ง ์ธ์์ ๊ฐ๋
- ์ปจ๋ณผ๋ฃจ์ (Convolution) ์ดํดํ๊ธฐ
- Deconvolution ๊ฐ๋
- ๋ฅ๋ฌ๋ (CNN) ์ง๊ด์ ์ดํด - (1), (2)
- ๋ฅ๋ฌ๋์์ ์ฌ์ฉ๋๋ ์ฌ๋ฌ ์ ํ์ Convolution ์๊ฐ
- ๋์ผ๋ก ๋ณด๋ CNN
7. Reference
- ๋ฐ๋ฐ๋ฅ๋ถํฐ ์์ํ๋ ๋ฅ๋ฌ๋, 7์ฅ
- Weakly supervised Learning์ผ๋ก Object localizationํ๊ธฐ