<aside> 💡 CNN : Convolutional Neural Networks 딥러닝에서 이미지나 영상, 음성 등 다양한 분야에서 데이터를 처리할 때 쓰이며 Convolution을 이용한 Neural Network 모델이다.

</aside>


1. 기존 DNN의 문제점과 CNN의 등장

일반적인 Deep Neural Network(DNN)는 입력할 때 3차원 데이터를 flatten 시켜서 1차원 데이터로 만들어야 하는데 이 과정에서 공간적, 지역적 정보가 손실된다. 예를 들면 가까운 픽셀은 값이 비슷하거나, RGB의 각 채널은 서로 밀접하게 관련되어 있거나, 거리가 먼 픽셀끼리는 별 연관이 없는 등 데이터의 3차원 속에서 의미를 갖는 본질적인 패턴을 고려하지 않게 되는 것이다. 또한 추상화과정 없이 바로 연산과정으로 넘어가 버리기 때문에 학습 시간과 능률의 효율성이 저하된다.

CNN은 이미지를 flatten시키지 않고 형상을 유지하고 입력받기 때문에 공간적/지역적 정보를 유지한 채 학습 feature map을 만든다. 이미지의 한 픽셀과 그 주변 픽셀들의 연관성이 남아있게 된다.

2. CNN의 주요 컨셉

쉽게 표현하면 하나의 필터를 이미지 입력값에 전체적으로 훑어주는 것이다. 즉 우리의 입력값 이미지의 모든 영역에 같은 필터를 반복 적용해 패턴을 찾아 처리하는 것이 목적이다. input 이미지의 matrix와 Filter(Kernel) matrix의 내적(Inner Product)의 연산으로 나타낸다.

주의! 특별한 언급이 없더라도 filter의 depth는 언제나 input의 depth와 같아야 한다.

6 (5*5) filters를
통과했을 때

6 (5*5) filters를 통과했을 때

one filter ⇒ one activation map

통과하는 필터의 개수에 따라 activation map의 depth가 결정된다.

또한 각각의 필터마다 다른 세부 특징을 추출하는데 필터를 점점 통과함에 따라 low-level의 특징부터 더 높은 level의 특징이 검출된다.


왼쪽의 이미지가 새의 이미지인지 결정하는 것은 부리부분이 중요한 포인트가 될 것이다. convolution 연산은 이미지 전체가 아닌 부분 부분으로 잘라서 보기 때문에 부리가 다른 곳에 있더라도 그 특징을 잘 캐치할 수 있다.

필터를 얼마만큼 움직여 주는가. stride-1이 기본값. 이미지를 건너 뛰는 칸, 즉 stride가 커질 수록 결과 이미지의 크기는 작아진다.

출력 크기를 조정할 목적으로 이미지의 가장자리에 0으로 테두리를 만들어 감싸주는것.

입력데이터와 커널의 사이즈에 따라 필터를 적용하면 출력의 데이터가 줄어들기도 한다. 이렇게 convolution연산을 거칠 때마다 크기가 작아지면 더이상연산이 불가능해 진다. 이를 막기 위해 패딩을 사용하여 입력 데이터의 공간적 크기를 고정한 채 다음 계층으로 전달 할 수 있도록 한다.