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(ํ•ฉ์„ฑ๊ณฑ)

image

ํ•ฉ์„ฑ๊ณฑ ์—ฐ์‚ฐ์˜ ๊ณผ์ •

  1. ํ•„ํ„ฐ์˜ ์œˆ๋„์šฐ(window)๋ฅผ ์ผ์ • ๊ฐ„๊ฒฉ์œผ๋กœ ์ด๋™ํ•ด ๊ฐ€๋ฉด์„œ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์— ์ ์šฉํ•œ๋‹ค. ์œˆ๋„์šฐ๋Š” ์œ„ ๊ทธ๋ฆผ์—์„œ ๋นจ๊ฐ„ ์ƒ‰ ๋„ค๋ชจ ์นธ์„ ์˜๋ฏธํ•œ๋‹ค.
  2. ๋‹จ์ผ ๊ณฑ์…ˆ-๋ˆ„์‚ฐ(fused multiply-add, FMA): ์ž…๋ ฅ(input)๊ณผ ํ•„ํ„ฐ์— ๋Œ€์‘ํ•˜๋Š” ์›์†Œ๋ผ๋ฆฌ ๊ณฑํ•œ ๊ตฌ ์ดํ•ฉ์„ ๊ตฌํ•œ๋‹ค.
  3. ์œ„ ๊ณผ์ •์„ ๋ชจ๋“  ์žฅ์†Œ์—์„œ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  4. ํ•„ํ„ฐ๋ฅผ ์ ์šฉํ•œ ์›์†Œ์— ๊ณ ์ •๊ฐ’(ํŽธํ–ฅ)์„ ๋”ํ•œ๋‹ค.
  • ์ž…๋ ฅ ํ•จ์ˆ˜์˜ ๊ฐ’์ด ํŠน์ง• ํ•จ์ˆ˜์˜ ๊ฐ’๊ณผ ์–ผ๋งˆ๋‚˜ ์ผ์น˜ํ•˜๋Š”์ง€ ์•Œ์•„๋‚ด๋Š” ํ•จ์ˆ˜์ด๋‹ค.
  • ์ด๋ฏธ์ง€/์Œ์„ฑ์—์„œ ํŠน์ • ํŒจํ„ด์„ ์ถ”์ถœํ•  ๋•Œ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.
  • ๊ณ„์ธต์ด ์–•์œผ๋ฉด ํ•ฉ์„ฑ๊ณฑ ๊ณ„์ธต์€ ๋‘ฅ๊ทผ ๋ชจ์–‘, ๋‚ ์นด๋กœ์šด ๋ชจ์–‘ ๋“ฑ ์ €์ˆ˜์ค€์˜ ์ •๋ณด๊ฐ€, ๊ณ„์ธต์ด ๊นŠ์œผ๋ฉด ์ถ”์ƒ์ ์ธ ์ •๋ณด๊ฐ€ ์ถ”์ถœ๋œ๋‹ค.
  • ํ•„ํ„ฐ(filter): ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์™€ ๋™์ผํ•œ ์ฐจ์›์„ ๊ฐ€์ง„ ํŠน์ง•์„ ๊ฐ€์ง„ ๊ฐ’. ์ปค๋„(kernel)์ด๋ผ๊ณ  ํ•˜๊ธฐ๋„ ํ•œ๋‹ค.
    • ํ•„ํ„ฐ์˜ ๊ฐœ์ˆ˜์™€ ํฌ๊ธฐ๋ฅผ ์ •ํ•ด ์ฃผ๋ฉด ๋ชจ๋ธ์ด filter๋ฅผ ์ž๋™์œผ๋กœ ํ•™์Šตํ•œ๋‹ค.
    • ์ด๋ฏธ์ง€๋กœ ์˜ˆ๋ฅผ ๋“ค๋ฉด ์ด๋ฏธ์ง€์— ์žˆ๋Š” ํŠน์ง•(๋พฐ์กฑํ•จ, ๋ถ€๋“œ๋Ÿฌ์›€ ๋“ฑ)์„ ํ•„ํ„ฐ๋ฅผ ์ด์šฉํ•ด ์ถ”์ถœํ•œ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
    • ํ•„ํ„ฐ์˜ ๊ฐœ์ˆ˜๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ๋กœ ์ง€์ •ํ•˜๋ฉด ์—ฌ๋Ÿฌ ํŠน์ง•์„ ํ•œ ๋ฒˆ์— ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, feature map์„ ์—ฌ๋Ÿฌ ๊ฐœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
  • Deconvolution(์—ญํ•ฉ์„ฑ๊ณฑ)
    • convolution์„ ์—ญ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ณผ์ •์œผ๋กœ feature map์˜ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ฆฌ๋Š” ๊ณผ์ •์ด๋‹ค.
    • CNN์˜ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ง€๊ณ  ์›๋ž˜ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์‹œ ๋งŒ๋“ค๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

(2) Padding

image

  • ์ž…๋ ฅ ๋ฐ์ดํ„ฐ ์ฃผ์œ„์— 0์„ ์ฑ„์šฐ๋Š” ๊ฒƒ
  • padding์€ ์ฃผ๋กœ ์ถœ๋ ฅ ํฌ๊ธฐ๋ฅผ ์กฐ์ ˆํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.
    • 3x3 ํ•„ํ„ฐ๋ฅผ ์ ์šฉํ•˜๋Š” ์œ„ ๊ทธ๋ฆผ์˜ ๊ฒฝ์šฐ padding์„ ์ ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ๊ฐ€๋กœ ํฌ๊ธฐ, ์„ธ๋กœ ํฌ๊ธฐ ๋ชจ๋‘ 2์”ฉ ๊ฐ์†Œํ•˜๊ฒŒ ๋œ๋‹ค.
    • ๋”ฐ๋ผ์„œ ํญ์ด 1์ธ padding์„ ์ ์šฉํ•˜์—ฌ, Convolution์„ ์ˆ˜ํ–‰ํ•ด๋„ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ๋™์ผํ•˜๋„๋ก ํ•˜์˜€๋‹ค.

(3) Stride

  • ํ•„ํ„ฐ๋ฅผ ์ ์šฉํ•˜๋Š” ์œ„์น˜์˜ ๊ฐ„๊ฒฉ
  • ์œ„์˜ ์˜ˆ์ œ๋Š” ํ•„ํ„ฐ๋ฅผ ์˜ค๋ฅธ์ชฝ/์•„๋ž˜๋กœ ํ•œ ์นธ์”ฉ ์›€์ง์ด๋ฉด์„œ ์ ์šฉํ–ˆ์œผ๋ฏ€๋กœ stride๋Š” ๋ชจ๋‘ 1์ด๋‹ค.
  • ํ•„ํ„ฐ๋ฅผ ๋‘ ์นธ ๊ฑด๋„ˆ๋›ฐ์–ด ์ ์šฉํ•˜๋ฉด stride๋Š” 2๊ฐ€ ๋œ๋‹ค.

padding, stride์— ๋”ฐ๋ฅธ ์ถœ๋ ฅ ํฌ๊ธฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

image

  • ์ž…๋ ฅ ํฌ๊ธฐ: (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

image

  • ๊ฐ€๋กœ/์„ธ๋กœ ๋ฐฉํ–ฅ์˜ ๊ณต๊ฐ„์„ ์ค„์ด๋Š” ์—ฐ์‚ฐ
  • 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. ๊ตฌํ˜„์ƒ ์œ ์˜์ 

image

  • ์ฝ”๋“œ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ: CNN ๊ตฌํ˜„
  • ์ฝ”๋“œ ๋ณด๋Ÿฌ๋ผ๊ธฐ: MNIST ๋ฐ์ดํ„ฐ์…‹์œผ๋กœ ํ•™์Šต ๊ตฌํ˜„
  • im2col(image to column): height, width, stride, pad๋ฅผ ๊ณ ๋ คํ•˜์—ฌ, ๋ฐ์ดํ„ฐ๋ฅผ 1์ฐจ์›์œผ๋กœ ์ „๊ฐœํ•˜๋Š” ํ•จ์ˆ˜. ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž…๋ ฅ์œผ๋กœ ๋“ค์–ด์˜ค๋ฉด 2์ฐจ์›์œผ๋กœ ์ „๊ฐœํ•œ๋‹ค.
    • ์ฝ”๋“œ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ: im2col ๊ตฌํ˜„
    • stride๋‚˜ pad ๊ฐ’์— ๋”ฐ๋ผ ๊ฐ’์ด ์ค‘๋ณต๋˜์–ด ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ–‰๋ ฌ ๊ณ„์‚ฐ์— ์ตœ์ ํ™”๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋ฏ€๋กœ ์—ฐ์‚ฐ ์†๋„๊ฐ€ ๋นจ๋ผ์ง„๋‹ค.
    • Convolution: ํ•„ํ„ฐ๋ฅผ 1์ฐจ์›์œผ๋กœ ์ „๊ฐœํ•ด์„œ ๊ณ„์† ๊ณฑํ•ด๋‚˜๊ฐ€๋ฉด Convolution์ด ์ˆ˜ํ–‰๋œ๋‹ค. Convolution์„ ํ–‰๋ ฌ์˜ ๊ณฑ์…ˆ์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.
    • Pooling: pooling์˜ ์ ์šฉ ์˜์—ญ ๊ฐœ์ˆ˜๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ์ตœ๋Œ“๊ฐ’์„ ์ถ”์ถœํ•˜๋ฉด Max Pooling์ด ์ˆ˜ํ–‰๋œ๋‹ค.

4. CNN Model

5. CNN ๋งŒ๋“ค๊ธฐ

6. ์ฐธ๊ณ  ์ž๋ฃŒ

7. Reference