본문 바로가기
딥러닝

[딥러닝] CNN (Convolutional Neural Network) 이해

by eyoo 2022. 6. 14.

CNN은 ANN과 다르게 사용할 데이터에 열과 행 외에도 색(color)이라는 하나의 차원이 더 있기에 여러 다른 레이어들을 사용하여 데이터를 학습하기 쉬운 형태로 변환시켜야 한다.

 

CNN의 레이어:

 

  1. Input Layer
  2. Convolution Layer
  3. ReLU Layer
  4. Pooling Layer
  5. Fully Connected Layer

 

Convolution은 Filter, Kernel 혹은 Feature detector 라고 불린다.

 

 

 

input image matrix와 convolution에서 같은 위치에 있는 값을 곱한다.

 

1x0 + 0x1 + 1x0    +

1x1 + 0x0 + 0x(-1) +

0x0 + 1x1 + 1x0    = 1 + 1 = 2

 

 

 

계산을 마치면 feature map에 결과를 저장하고 한칸 옮겨서 같은 작업을 반복한다.

 

 

# 이 작업을 convolution 이라고 한다.

# Kernel은 랜덤으로 세팅되고 weight처럼 커널을 바꾸며 학습한다.

# 컨볼루션 할때 다음 위치로 이동 하는것을 stride라고 한다. (예시에서는 stride를 1로 설정하여 1칸씩 이동했다.)

 

 

feature map에 사이즈 조정을 위해 데이터로 둘러 싸는것을 padding 이라고 한다.

 

# 0으로 싸면 Zero-padding이라고 한다.

 

 

컨볼루션 결과로 나오는 행렬사이즈 계산하는방법:

 

( I - K + 2P ) / S + 1

(이미지 - 커널 + 2*패딩 ) / 스트라이드 + 1

 

 

30x30 이미지를 5x5커널로 컨볼루션할때 피처맵의 크기는?

 

(30-5+2*0)/1+1 = 26

 

26x26이 된다.

 

 

이제 엑티베이션 레이어에서 feature map 데이터에 엑티베이션 함수인 Relu를 적용한다.

 

# Relu는 0보다 작은값 (마이너스 값)을 0으로 만들어준다.

 

 

Pooling(Downsampling) 하여 데이터를 축소시킨다.

 

풀링은 여러 방법이 있는데

대표적으로 최대값을 남기고 줄이는 Max pooling

최소값을 남기고 줄이는 Min pooling

평균값을 남기고 줄이는 Average pooling이 있다.

 

 

그 후 Flattening 과정을 통해 데이터를 1열로 만들어 학습할수 있도록 한다.

 

 

전체적인 과정:

 

 

 

 

 

 

댓글