데이터 스터디/DL

CNN - convolution 연산 이해하기

케이와이엠 2023. 11. 10. 17:50

CNN은 이미지에  '커널 (Kernel)'이라는 필터를 이용하여 컨볼루션(convolution)을 취하는 방식으로, 필터를 이동시키면서 필터의 특성에 맞게 강조된 output(feature)를 뽑아낸다.  

 

 

 

CNN은 Neural Net과 유사하지만 이미지 데이터의 특성을 인코딩할 수 있다는 특징이 있다. 기존 DNN(Fully Connected Layer만으로 구성된 인공신경망)에서 입력 데이터는 1차원 배열 형태로 한정되기 때문에 이미지를 입력 데이터로 사용했을 때(2차원 -> 1차원 형태로 flatten 시키는 과정에서) 위치 정보가 손실된다. 

 

반면 CNN에서는 Convolution layer를 사용하여 이미지 데이터의 형상을 유지하여 위치 정보의 손실을 줄일 수 있게 된다.

또한 Fully Connected Layer와는 달리, 이미지를 인코딩하는 과정에서 필터와 겹쳐지는 부분에 대해서만 연산하고 특징을 뽑아낸다. 다시 말해, 네트워크를 학습시키는데 필요한 가중치, 즉 parameter의 수를 크게 줄일 수 있기 때문에 학습 연산량이 확연히 줄어든다.

convolution 식은 아래와 같다. 우리가 사용할 2D image convolution 에서 i는 전체 이미지 공간이 되고, k라는 것은 적용할 convolution 필터가 된다.

구조

구조 : CONV => Pool => Conv => Pool > FC

CNN 기본적인 구조는 Input Image가 Convolition Layer를 거치고 Pooling Layer 등을 거쳐 Feature Extraction(=특징을 뽑아내)을 거치고, 마지막에 FC를 연결하여 Output으로 softmax로 분류된 image를 도출해낼 수있다. 다시 말해, convolution layer와 pooling layer가 해주는 것은 feature extraction(특징 추출)이고, fully connected layer는 decision making( ex. classification) 을 해준다. 

 

합성곱을 이해하기 위해 커널의 개수, stride, padding의 개념이 필요하다. 

Stride

stride는 conv filter가 픽셀이 얼만큼의 거리로 움직일 것인지를 결정한다. 만약, stride = 2라면, 두 픽셀씩 옆으로 움직인다.

Padding

padding은 stride를 할 때, image 주변에 공간을 늘려주는 역할을 한다. zero padding은 옆에 추가하는 공간을 0으로 잡아주는 것이다.

Pooling

Pooling Layer는 Convolution Layer의 출력 데이터를 받아서 차원을 축소하는 역할을 한다. 

주로 max-pooling, mean-pooling 등이 존재한다. 이를 통해  data는 size는 작아지지만, 특징은 유지되면서 학습 시 파라미터를 줄이게 되는 효과가 있다.

 추출된 특징맵은 2차원이지만 이를 FC에 전달하기 위해선 1차원 자료 형태로 바꿔주어야 한다.

 마지막으로 Flatten 이후엔, Softmax, Sigmoid 와 같은 Activation function을 지나 Classification을 진행하게 된다.