๐ง CNN (Convolution Neural Network)
๐คซ CNN, ํฉ์ฑ๊ณฑ ์ ๊ฒฝ๋ง์ด๋?
์ฌ๋ฌ ๋ถ์ผ, ํนํ๋ image classification์์ ์ข์ ์ฑ๋ฅ์ ๋ณด์ฌ์ฃผ๋ ๋ฐฉ๋ฒ์ด๋ค.
์ด๋ฐ ํฉ์ฑ๊ณฑ ์ ๊ฒฝ๋ง์์ ํฉ์ฑ๊ณฑ์ ์ฐ์ฐ์ ์ ์ ์์ฒด์ ๊ฐ์ค์น๋ฅผ flipํ๋ ์ฐ์ฐ์ด๊ธฐ์ ์๋์ ๊ฐ์ ์์์ผ๋ก ํํํ๋ค.
i์ j์์ ์์ input x์ kernel(= weight)์ ํฉ์ฑ๊ณฑ์ ํธํฅ(bias)๋ฅผ ๊ฐ pixel์ ๋ํด output y๋ฅผ ๋์ถํ๋ค.
์ด๋, ์๋์ ๊ฐ์ ์ฐ์ฐ์์ Cross-Correlation์ด๋ผ ๋ถ๋ฅธ๋ค.
๐คซ CNN์ด ๋ฑ์ฅํ๊ฒ ๋ ์ด์ ๋ ๋ฌด์์ผ๊น? MLP vs CNN
โถ image classification์์ MLP๋ณด๋ค CNN์ด ๋ ์ ํธ๋๋ค.
1. MLP๋ ๊ฐ input(ํ image์ pixel)์ ๋ํด ํ๋์ ํผ์ ํธ๋ก ๋ง ์ฌ์ฉํ๊ณ largeํ image์ ๋ํด weight๊ฐ ๊ธ๊ฒฉํ๊ฒ unmanageableํด์ง๋ค. ์ด๋ ๋๋ฌด ๋ง์ parameter๋ค์ด fully-connected ๋์ด ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ ์ผ๋ฐํ๋ฅผ ์ํ ๋ฅ๋ ฅ์ ์๋, ๊ณผ์ ํฉ(overfitting)์ด ๋ฐ์ํ ์ ์๋ค.
2. MLP๋ input image์ shift๋ image๊ฐ ๋ค๋ฅด๊ฒ ๋ฐ์ํ๋ค๋ ์ ์ด๋ค. (translation invariant(๋ถ๋ณ)๊ฐ ์๋๊ธฐ ๋๋ฌธ)
์๋ฅผ ๋ค์ด ๊ณ ์์ด ์ฌ์ง์ด ํ ์ฌ์ง์ ์ด๋ฏธ์ง ์ผ์ชฝ ์๋จ์ ๋ํ๋๊ณ ๋ค๋ฅธ ์ฌ์ง์ ์ค๋ฅธ์ชฝ ํ๋จ์ ๋ํ๋๋ฉด MLP๋ ์์ฒด ์์ ์ ์๋ํ๊ณ ๊ณ ์์ด๊ฐ ์ด๋ฏธ์ง์ ์ด ์น์ ์ ํญ์ ๋ํ๋ ๊ฒ์ด๋ค.
์ฆ, MLP๋ ์ด๋ฏธ์ง ์ฒ๋ฆฌ์ ์ฌ์ฉํ๊ธฐ์ ๊ฐ์ฅ ์ข์ ์์ด๋์ด๊ฐ ์๋๋ค.
์ฃผ์ ๋ฌธ์ ์ค ํ๋๋ ์ด๋ฏธ์ง๊ฐ MLP๋ก flatten(matrix -> vector)๋ ๋ ๊ณต๊ฐ ์ ๋ณด๊ฐ ์์ค๋๋ค.∴ ๊ณ ์์ด๊ฐ ์ด๋์ ๋ํ๋๋ ์ฌ์ง์์ ๊ณ ์์ด๋ฅผ ๋ณผ ์ ์๋๋ก
image features(pixel)์ ๊ณต๊ฐ์ ์๊ด ๊ด๊ณ(spatial correlation)๋ฅผ ํ์ฉํ ๋ฐฉ๋ฒ์ด ํ์.
∴ ์ด๋ฅผ ์ํ ํด๊ฒฐ์ฑ ์ผ๋ก ๋ฑ์ฅํ ๊ฒ์ด ๋ฐ๋ก CNN ์ด๋ค!
์ข ๋ ์ผ๋ฐ์ ์ผ๋ก, CNN์ ๊ณต๊ฐ์ ์๊ด๊ด๊ณ๊ฐ ์๋ data์ ์ ๋ฐ์ํ ์ ์๋ค.
๋ฐ๋ผ์ CNN์ input์ผ๋ก image data๋ฅผ ํฌํจํ๋ ๋ฌธ์ ์ ๋ํ prediction์ ํ ๋ฐฉ๋ฒ์ด๋ค.
์ด๋ฐ CNN์ ์ฌ์ฉ์ 2์ฐจ์ ์ด์์ image์ ๋ด๋ถ์ ํํ์ ๋ํ ์ข์ ์ด์ ์ ๊ฐ๋๋ค.
์ฆ, image์์ ์, ๊ฐ๋ณ์ ์ธ ๊ตฌ์กฐ์ data์์์์ position๊ณผ scale์ model์ด ๋ฐฐ์ฐ๊ธฐ ์ฝ๊ฒ ํด์ค๋ค.
๐ง Padding, Stride, Pooling
๐คซ Padding
์๋ฅผ๋ค์ด 4x4์ฐจ์์ด input์ 2x2์ kernel๋ก ํฉ์ฑ๊ณฑ์ ํ๊ฒ๋๋ฉด output ์ฐจ์์ 3x3์ผ๋ก ์ฐจ์์ด ์ค์ด๋ ๋ค.
์ด๋ ๊ฒ ์ฐจ์์ด ์ค์ด๋๋ ํ์์ ๋ฐฉ์งํ๊ธฐ ์ํด์ padding์ด๋ผ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค.์ ์ฌ์ง์ฒ๋ผ ์ ๋ ฅ ๋ฐ์ดํฐ๋ 3x3์ด์ง๋ง zero-padding์ ํตํด ์ฐจ์์ ์ถ์๊ฐ ์ผ์ด๋์ง ์๊ฒ ํ ์ ์๋ค. ๐คซ Stride
ํ ๋ฒ์ ํฉ์ฑ๊ณฑ์ฐ์ฐ ์ดํ ๋ค์ ๊ณ์ฐ์์ญ์ผ๋ก ์ด๋์ ํด์ผํ๋๋ฐ, ์ด๋ ์ผ๋ง๋ ์ด๋ํ ๊ฒ์ธ์ง ๊ฐ๊ฒฉ์ ์ ํ๋ ๊ฐ์ด๋ฉฐ ์ด๋ output ๋ฐ์ดํฐ ํ๋ ฌ์ ์ฐจ์์ด ๋ ์์์ง๋ ๊ฒ์ ์ ์ ์๋ค.
๊ทธ๋ ๋ค๋ฉด, padding๊ณผ stride๋ฅผ ํด๋ output data์ ํฌ๊ธฐ๋ฅผ ๋ฏธ๋ฆฌ ๊ณ์ฐํ ์๋ ์์๊น? ๐คซ Pooling
CNN์์ feature์ resolution์ ์ค์ผ ๋, ์ฌ์ฉํ๋ ๋ฐฉ์์ผ๋ก ์๋์ ๊ฐ์ด ์๋ํ๋ค.
๊ทธ๋ ๋ค๋ฉด, ์ด์ฏค์์ ๋๋ ์๊ฐ์ด ์์ ๊ฒ์ด๋ค.
Question?
์ ๊ตณ์ด? pooling์ ์ฌ์ฉํ๋๊ฑฐ์ง?
๊ทธ๋ฅ convolution layer๋ฅผ stride = 2๋ก ์ค์ฌ์ ์๋ํ๋ฉด ๊ฐ์์์ ์ด์ง ์๋?
Answer!
- convolution layer๋ฅผ ์ด์ฉํ์ฌ stride = 2๋ก ์ค์ด๋ฉด ํ์ต ๊ฐ๋ฅํ ํ๋ผ๋ฏธํฐ๊ฐ ์ถ๊ฐ๋๋ฏ๋ก ํ์ต ๊ฐ๋ฅํ ๋ฐฉ์์ผ๋ก resolution์ ์ค์ด๊ฒ ๋๋ ๊ทธ๋งํผ ํ๋ผ๋ฏธํฐ์ ์ฆ๊ฐ ๋ฐ ์ฐ์ฐ๋์ด ์ฆ๊ฐํ๊ฒ ๋ฉ๋๋ค.
- ๋ฐ๋ฉด pooling์ ์ด์ฉํ์ฌ resolution์ ์ค์ด๊ฒ ๋๋ฉด ํ์ต๊ณผ ๋ฌด๊ดํด์ง๋ฉฐ ํ์ตํ ํ๋ผ๋ฏธํฐ ์์ด ์ ํด์ง ๋ฐฉ์ (max, average)์ผ๋ก resolution์ ์ค์ด๊ฒ ๋์ด ์ฐ์ฐ ๋ฐ ํ์ต๋์ ์ค์ด๋ ๋ค.
๋ค๋ง convolution with stride ๋ฐฉ์๋ณด๋ค ์ฑ๋ฅ์ด ์ข์ง ๋ชปํ๋ค๊ณ ์๋ ค์ ธ ์์ต๋๋ค.
๋ฐ๋ผ์, layer๋ฅผ ์ค์ฌ์ gradient ์ ํ์ ์ด์ ์ ๋๋ ค๊ณ ํ ๋ pooling์ ์ฌ์ฉํ๋๊ฒ ๋์์ด
๐ง ๊ณ ์ฐจ์ ๋ฐ์ดํฐ์ CNN
๐คซ width, height, channel
์ฌ์ค ํ๋์ ํฝ์ ์ 2์ฐจ์์ด ์๋, 3์ฐจ์์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. (์ฐธ๊ณ : https://chan4im.tistory.com/74 )
์ ๋ ฅ ๋ฐ์ดํฐ๊ฐ ๊ณ ์ฐจ์์ด ๋จ์ ๋ฐ๋ผ kernel๋ ์ฑ๋ ์๋งํผ ํ์ํ๊ฒ ๋๋ ๊ฒ์ด๋ค.
๊ณ ์ฐจ์ ๋ฐ์ดํฐ์ ํฉ์ฑ๊ณฑ ์ฐ์ฐ์ ๋์ผํ channel์ ์ ๋ ฅ๋ฐ์ดํฐ์ kernel์ ํฉ์ฑ๊ณฑ์ฐ์ฐ ํ ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ ํ๋ ฌ์ ๋ชจ๋ ๋ํ ๊ฐ์ ์๋ฏธํ๋ค.
์ด๋, kernel์ ์ฌ๋ฌ๊ฐ ์ธ์๋ก output์ ์ฑ๋ ์๊ฐ kernel ์๋งํผ ๋ง์์ง๋ ๊ฒ์ ์ ์ ์๋ค.
๋ํ ์ฐจ์์ด ์ปค์ง์๋ก for๋ฌธ์ ๊ณผ๋ค์ฌ์ฉ์ผ๋ก ์ธํ ๊ณผ๋ถํ์ ์ฐ๋ ค๋ก ์ธํด ๋ค์๊ณผ ๊ฐ์ด ๊ณ ์ฐจ์์ 2์ฐจ์ ํ๋ฉด์ผ๋ก ๋ณํํด ํํํ๋ค.