본문 바로가기

🤖AI/딥러닝

[딥러닝] CNN (Convolution Neural Network)

등장 배경

Fully-Connected Layer의 구조적 문제로 인한 문제 발생

  • 이미지는 (가로, 세로, 채널)의 형태를 가지는 3차원 배열
  • FC Layer의 입력은 항상 1차원 배열
  • FC Layer는 모든 값들이 완전 연결되어 있으므로 전체 픽셀의 모든 관계를 다 계산해야 한다.

따라서 이미지의 3차원 배열 형상을 무시하고 1차원 배열로 flatten 해서 학습한다.

 

이미지의 전체적인 관계를 고려하지 못해서 변형된 데이터에 매우 취약해지고(Topology)

이미지의 특정 픽셀은 주변 픽셀과 관련이 있다는 특성을 잃어버린다.(Locality)

따라서 이미지를 조금만 변형해도 완전히 다른 Obejct로 인식하게 된다.

모든 이미지마다 학습해야 하므로 Layer의 크기가 커지고, 변수의 개수도 많아지며 학습 시간이 증가하게 된다.

 

실제로 인간은 이미지를 어떻게 인식하는지 생각해 보게 되었고 CNN이 등장하게 되었다.

CNN(Convolution Neural Network)

Convolution

Convolution(합성곱)은 하나의 함수와 또 다른 함수를 반전 이동한 값을 곱 한 다음, 구간에 대해 적분하여 새로운 함수를 구하는 수학 연산자이다. Convolution연산에 대한 설명은 Convolution 연산 이해하기에 설명해놨다.

Filter

- 특성을 검출해 주는 함수, 학습해야 할 weight

- filter 크기는 홀수로 한다.

Channel

- 입력 데이터의 Channel 수와 필터의 Channel 수가 일치해야 함

- filter의 개수가 아웃 풋의 Channel을 결정

Feature Map

convolution해서 나온 output

즉, 추출된 특성

Stride

filter를 적용하는 위치의 간격

- stride칸씩 움직인다

- output size : (N-F)/stride +1

Padding

Convolution으로 인한 image 모서리 부분 정보 손실 방지를 위해 입력 데이터 주변을 특정값으로 채우는 것 (일반적으로 Zero Padding 사용)

Pooling

가로 세로 방향의 공간을 줄이는 연산

- 출력의 해상도를 낮춰 변형이나 이동에 대한 민감도를 감소

- 이미지의 크기를 줄이기 때문에 학습할 노드의 수가 줄어들어 학습 속도를 높이는 효과

- 하지만, 정보의 손실이 일어남

- CNN에서는 일반적으로 가장 큰 값을 고르는 Max Pooling 사용

Fully Connected Layer

이전 계층의 모든 뉴런과 결합된 형태의 레이어 (ex. MLP)