본문 바로가기

AI & Big Data/AI

[딥러닝] 합성곱 신경망, CNN(Convolutional Neural Network) - 이론편

반응형

배  경

우리는 AI 시대에 살고 있다.

거의 모든 제품에는 어떤 인공지능이 들어가 있고 어떤 기능을 해서 어떻게 삶을 윤택하게 하는지에 대해 논하고 있다.

그 중 가장 대표적인 인공지능 알고리즘이라고 한다면 CNN과 RNN, DNN을 꼽기도 한다.

 

그 중에서도 딥러닝의 선구자라고 할 수 있는 CNN은 어디서 나왔고 어디에 활용될 수 있을까?

 

우선 CNN을 비롯한 딥러닝 알고리즘들이 크게 주목을 받기 시작하게 된 계기는 컴퓨터 비전 분야의 올림픽이라 할 수 있는 2012년 ILSVRC(ImageNet Large-Scale Visual Recognition Challenge)에서 제프리 힌튼 교수팀의 AlexNet이 Top 5 Test Error 기준 15.4%를 기록하여 2위(26.4%)를 큰 폭으로 따돌리고 1위를 차지한 것이었다.

이때까지만 해도 SVM(Support Vector Machine)과 같은 머신러닝 기법들이 대세를 이루고 있었는데, 이 대회를 기점으로 CNN을 비롯한 딥러닝 기법들이 득세를 하게 되었다.

 

그리고 위 배경을 보면 알 수 있듯, CNN은 컴퓨터 비전, 즉 이미지 인식이나 화상 인식 등을 위해 사용되는 딥러닝 기법이다.

 

그렇다면 CNN의 원리는 어떻게 되고 어떻게 사용해야할까?


CNN의 구조

CNN의 구조 도식

CNN은 Convolutional Neural Network의 약자로 합성곱 신경망을 뜻한다.

이름에서도 직관적으로 보이듯, CNN의 첫 번째 기법은 인풋 값의 합성곱이다.

 

공대생이라면 공업수학(공학수학)을 배우며 당연히 들어봤을 합성곱(컨벌루션), 기억을 상기시키기 위해 수식 예제를 보여주자면 다음과 같다.

합성곱은 언제 봐도 끔찍하다

중학교 때까지만 해도 [·], [×], [*] 가 모두 같은 "곱하기"라고 배우지만, 고등학교만 가도 [·], [×] 가 스칼라곱, 벡터곱이라는 의미가 부여된다.

그 이후 대학교 1~2학년이 되면 다시 한 번 [*]가 사실은 컨벌루션곱이라는 것을 배우게 되는데...

그렇다면 이미지와 컨벌루션곱의 상관관계는 무엇이 있을까?

 

완전연결 계층의 문제점

완전연결 계층을 이용하여 이미지를 분류하면, 3차원(가로, 세로, 채널)인 이미지 데이터(30, 30, 1 [px])를 입력층(Input Layer)에 넣어주기 위해 3차원 → 1차원으로의 데이터 변환을 해야 했다.

이러한 완전연결 계층의 문제점은 데이터의 형상이 무시된다는 것인데, 특히, 공간적 구조, 예를 들어 공간적으로 가까운 픽셀은 값이 비슷하거나 RGB의 각 채널은 서로 밀접하게 관련이 되어 있다거나, 거리가 먼 픽셀끼리는 관련이 없는 등, 이러한 정보들이 3차원에서 1차원 데이터로 Shift 되는 순간 사라지는 문제가 있다.

 

해결책

논리적으로 당연한 수순이지만, 해당 문제점의 해결책은 컨벌루션곱에 있었다.

3차원의 이미지 그대로 입력층에 받고, 출력 또한 3차원 데이터로 출력하여 다음 Layer로 전달하기 때문에 CNN에서는 이미지 데이터처럼 형상을 가지는 데이터를 제대로 학습할 수 있게 된다.

위 그림과 같이, 컨벌루션곱 레이어는 입력 이미지의 모든 픽셀에 연결되는 것이 아니라 컨벌루션곱 레이어 뉴런의 수용영역 안에 있는 픽셀에만 연결이 되기 때문에, 저수준 특성 → 고수준 특성으로 조합해 나가며 원본 Input의 특성을 저장하게 된다.

 

커널(필터) & 패딩

수용영역을 컨벌루션 레이어에서 커널(필터)이라고 부른다. 이는 컨벌루션 레이어에서 가중치 파라미터이며, 학습단계에서 커널이 적용되었을 때 유사한 이미지의 영역을 강조하는 특성맵(Feature Map)을 출력하여 다음 레이어로 전달된다.

 

패딩은 컨벌루션곱 연산을 수행하기 전, 인풋 데이터 주변을 특정값으로 채워 늘리는 것을 말한다. 주로 실무에서는 0으로 채워 늘리는데, 이것을 제로 패딩(Zero-padding)이라 부른다.

굳이 패딩을 하는 이유는, 패딩을 하지 않을 경우 데이터의 공간적 크기가 컨벌루션 레이어를 거칠 때마다 작아지게 되므로, 가장자리의 정보들이 사라지는 문제를 보완하기 위해서이다.

 

스트라이드

스트라이드는 인풋 데이터에 커널(필터)을 적용할 때 이동할 간격을 조절하는 것이다.

스트라이드 또한 출력 데이터의 크기를 조절하기 위해 사용된다. 스트라이드는 보통 1과 같이 작은 값이 더 잘 작동하며, 스트라이드가 1일 경우 인풋 데이터의 공간적 크기는 Pooling Layer에서만 조절할 수 있다.

풀링층 (Pooling Layer), Max-Pool

풀링은 차례로 처리되는 데이터의 크기를 줄인다. 이 과정으로 모델의 전체 매개별수의 수를 크게 줄일 수 있다.

풀링에는 Max-Pooling과 Average-Pooling이 존재하는데, Max-Pooling은 해당 영역에서 최댓값을 찾는 방법이고, Average-Pooling은 해당 영역의 평균값을 계산하는 방법이다.

컴퓨터 비전, 이미지 인식 분야에서는 주로 Max-Pooling을 사용한다.


결  론

지금까지 배운 이론들을 토대로 아래 그림을 보면 CNN이 어떻게 진행되는지 한 눈에 보일 것이다.

위 도식에서는 CNN의 기본 이론인 컨벌루션곱, 커널(필터), 스트라이드, Max-Pooling이 모두 나온다.

 

그렇다.

이게 CNN의 기본 이론인 것이다.

 

그렇다면 이 기본 이론을 가지고 어떻게 CNN을 구현할 것인지, 그리고 실무에서 어떻게 활용될 것인지에 대해 알아봐야한다.

 

CNN을 더 깊게 이해할 수 있도록 C언어 소스 코드로 line-by-line으로 이해하는 과정을 갖고, Google의 Tensorflow로 CNN을 활용하는 법에 대해 다음 포스팅에서 다뤄보도록 하자.

반응형