Replicated

합성곱 신경망 (CNN, Convolutional Neural Network) 본문

학부/빅데이터마이닝

합성곱 신경망 (CNN, Convolutional Neural Network)

라구넹 2025. 6. 8. 14:04

합성곱 신경망의 전체 구조

Fully-connected Layer

- 앞에서 배운 Affine 계층과 같음

- 입력 뉴런과 출력 뉴런이 모두 연결된 층

- 간단한 2~3개층 짜리 모듈이나 최종 출력 직전 레이어에 주로 사용

- MLP (Multi Layer Perceptron) : Fully-connected Layer 여러 개로 구성된 네트워크

ex. Affine - ReLU -> Affine - ReLU ->  Affine - ReLU ->  Affine - ReLU ->  Affine - Softmax =>

 

CNN으로 이뤄진 신경망의 예

- 합성곱 계층(Conv)과 풀링(Pooling) 계층이 새롭게 추가됨

- 풀링은 안 쓰는 경우도 있음

- Conv - ReLU - Pooling -> Conv - ReLU - Pooling -> Conv - ReLU -> Affine - ReLU -> Affine - Softmax =>

 

Fully-connected Layer의 문제점

- 데이터의 형상이 무시됨

- 입력 데이터가 이미지.. 세로, 가로, 채널(색상)의 3차원 데이터

- 완전 연결 계층은 형상을 무시하고 모든 입력 데이터를 펴서(flatten) 다루기에 형상에 담긴 정보를 살릴 수 없음

 

3차원 공간 정보는 의미를 담고 있음

- 공간적으로 거리가 가까운 픽셀들 사이에 값이 유사하거나 객체의 일부 구조를 나타냄

- RGB 채널 사이의 연관성

-> CNN은 공간 정보 유지 가능

 

특징 맵 (feature map)

- CNN 합성곱 계층의 입출력 데이터

- feature: 데이터의 특징. 머신러닝의 피쳐와 유사. 하지만 딥러닝에서는 중간 계층의 입출력도 feature라 부르고, 개발자가 직접 찾는 것이 아니라 학습에 의해 구해짐

- map: 보통 2차원 이상의 구조 정보를 가지는 것


합성곱 연산

Convolution

- 필터의 윈도우를 일정 간격으로 이동해가며 입력 데이터에 적용

- 입력과 필터에 대응하는 원소끼리 곱한 후 총합을 구함

- 기본적으론 입력값에 비해 출력 양이 줄어들게 됨

 

CNN에서는 필터의 매개변수가 그동안의 가중치에 해당

CNN에서의 편향

- 필터를 적용한 원소에 고정값(편향)을 더함

 

패딩(padding)

- 입력 데이터 주변을 특정값(ex. 0)으로 채우기도 함

- 합성곱 연산을 거칠 때마다 크기가 작아지기 때문에 출력 크기를 조정할 목적으로 사용

 

스트라이드(stride)

- 필터를 적용하는 위치의 간격

- ex. 스트라이드 2 -> 필터를 적용하는 윈도우가 2칸씩 이동

입력크기 (H, W)

필터크기 (FH, FW)

출력크기 (OH, OW)

패딩 P

스트라이드 S

 

           
  1 2 3 0  
  0 1 2 3  
  3 0 1 2  
  2 3 0 1  
           

입력 데이터, 패딩 1 스트라이드 1

 

2 0 1
0 1 2
1 0 2

 

OH = (4 + 2 - 3) / 1 + 1 = 4

OW = (4 + 2 - 3) / 1 + 1 = 4

 

7 12 10 2
4 15 16 10
10 6 15 6
8 10 4 3

출력 데이터

 

 

1 2 3 0 1 2 3
0 1 2 3 0 1 2
3 0 1 2 3 0 1
2 3 0 1 2 3 0
1 2 3 0 1 2 3
0 1 2 3 0 1 2
3 0 1 2 3 0 1

입력 데이터, 패딩 0 스트라이드 2

 

2 0 1
0 1 2
1 0 2

필터

 

OH = ( 7 + 2*0 - 3 ) / 2 + 1 = 3

OW = ( 7 + 2*0 - 3 ) / 2 + 1 = 3

 

 

3차원 데이터의 합성곱 연산

- 가로 x 세로 x 채널(R, G, B)

- 3차원 합성곱 연산에서 주의할 점은 입력 데이터의 채널 수와 필터의 채널 수가 같아야 한다는 것

- 입력 데이터와 필터의 합성곱 연산을 채널마다 수행하고, 그 결과를 더해 하나의 출력을 얻음

 

블록으로 생각하기

- 3차원 데이터와 필터를 직육면체 블록이라 생각

- (채널, 높이, 너비) 순서로 쓰면

- 입력(C, H, W), 필터(C, FH, FW), 출력(1, OH, OW)

- 출력의 채널은 1. 다수의 채널로 내보내려면 => 필터를 여러 개 사용

 

필터를 여러 개 사용하는 경우

- 입력(C, H, W), 필터(FN, C, FH, FW), 출력(FN, OH, OW)

- 편향(FN, 1, 1)

 

배치 처리

- 학습 시 입력 데이터를 묶어 한 번에 처리. 합성곱 연산도 마찬가지로 배치 처리

- 입력(N, C, H, W), 필터(FN, C, FH, FW), 출력(N, FN, OH, OW)

- 편향(FN, 1, 1)

- 필터, 편향은 모든 데이터의 그대로 적용되니까 그대로임

 

 

풀링 계층

풀링은 가로, 세로 방향의 공간을 줄이는 연산

- feature map을 축소하면서 중요한 정보만 남기는 연산

 

Max pooling: 윈도우 내 최대값을 구하는 연산

Average pooling: 윈도우 영역의 평균을 계산

 

풀링의 특징

- 학습해야 할 매개변수가 없음

- 채널 수가 변하지 않음 (채널마다 독립적 계산하기 때문)

- 입력의 변화에 영향을 적게 받는다 (강건하다)

 


CNN 시각화

학습 전 필터는 무작위로 초기화

학습 후 필터는 규칙성이 있는 이미지

 

MNIST를 학습한 합성곱 계층의 가중치

- 규칙성 있는 필터의 이미지는 어떤 것을 보는 것?

- 엣지 (색상이 바뀌는 경계선), 블롭 (국소적으로 덩어리진 영역) 등의 원시적인 정보 추출 가능

 

소벨 필터

-1 0 +1
-2 0 +2
-1 0 +1

Gx

+1 +2 +1
0 0 0
-1 -2 -1

Gy

이미지 경계 감지

 


대표적인 CNN

LeNet(1998)

- CNN의 원조. Yann Lecun 연구팀 개발

- 손글씨 숫자를 인식하는 신경망 제안

- 합성곱 계층과 풀링 계층을 반복, 마지막으로 fully-connected layer 계층을 거치며 결과 출력

- 최근 CNN과 다른 점: sigmoid 함수 사용. 현재는 주로 ReLU 사용

 

AlexNet(2012)

- Geoffery Hinton

- 당시 딥러닝 침체기, 이미지 인식 대회에서 딥러닝으로 10% 이상의 차이를 벌리며 압도적 우승을 하고 딥러닝 열풍

- 구성은 LeNet과 비슷

    - 활성화 함수로 ReLU 사용

    - 국소적 정규화 계층 사용 (현재는 배치 정규화가 더 좋음)

    - 드롭 아웃 사용

- GPU를 사용해 병렬 학습 수행