NOTE_
합성곱은 공학과 물리학에서 널리 쓰이는 수학적 개념으로, 간단히 정의해보면 다음과 같다.
“ 두 함수 중 하나를 반전(reverse), 이동(shift)시키며 나머지 함수와의 곱을 연이어 적분한다. “
합성곱 신경망을 영어 발음 그대로 “ 컨볼루션 신경망 “ 으로도 많이 쓰기도 한다.
CNN은 이미지 인식과 음성인식 등 다양한 곳에서 사용되는데, 특히 이미지 인식 분야에서 딥러닝을 활용한 기법은 거의 다 CNN을 기초로 한다.
CNN의 메커니즘과 이를 파이썬으로 구현해보는 것을 목표로 해보자.
우선 CNN의 네트워크 구조를 살펴보며 전체 틀을 이해해보자. CNN도 지금까지 본 신경망과 같이 레고 블록처럼 계층을 조합하여 생성할 수 있다.
다만, 합성곱 계층 ( convolutional layer ) 과, 풀링 계층 ( pooling layer ) 가 새롭게 등장한다.
이 내용은 제쳐두고, 이 계층들을 어떻게 조합하여 CNN을 생성하는지 부터 먼저 알아보자.
지금까지 해온 신경망은 인접하는 계층의 모든 뉴런과 연결되어 있었다. 이를 완전연결 ( fully - connected, 전결합 ) 이라고 하며, 완전히 연결된 계층을 Affine 계층 이라는 이름으로 구현 했다.
Affine계층을 사용하면, 가령 층이 5개인 신경망은 위의 그림과 같이 구현할 수 있다.
완전연결 계층
위의 그림과 같이 완전연결 신경망은 Affine 계층 뒤에 활성화 함수를 갖는 ReLU계층 ( 혹은 Sigmoid 계층 )이 이어진다. 이 그림에서는 ReLU 조합이 4개가 쌓였고, 마지막 5번째 층은 Affine계층에 이어 소프트맥스 계층에서 최종 결과 ( 확률 ) 를 출력한다.
CNN으로 이루어진 네트워크, 합성곱 계층과 풀링 계층이 회색
위의 그림가 같이 CNN에서는 새로운 “ 합성곱 계층 , Conv “ 과, “ 풀링 계층, Pooling “ 이 추가된다.
CNN의 계층은 ‘ Conv - ReLU - Pooling ‘ 흐름으로 연결된다. ( 풀링 계층은 생략되기도 한다. )
지금까지의 “ Affine-ReLU “ 연결이, “Conv-ReLU-(Pooling) “ 으로 바뀌었다고 생각할 수 도 있다.
CNN에서 주목할 또 다른 점은 출력에 가까운 층에서는 지금까지의 “ Affine - ReLU “ 구성을 사용할 수 있다는 것이다.
또, 마지막 출력 계층에서는 “ Affine - Softmax “ 조합을 그대로 사용한다.
이상은 일반적인 CNN에서 흔히 볼 수 있는 구성이다.
CNN에서는 “ 패딩, Padding “. “스트라이드, Stride “ 등 CNN 고유의 용어가 등장한다. 또, 각 계층 사이에는 3차원 데이터같이 입체적인 데이터가 흐른다는 점에서 완전연결 신경망과 다르다.
합성곱 계층의 구조를 차분히 한번 살펴보자.
17.1 완전연결 계층의 문제점
먼저 지금까지 본 완전연결 신경망에서는 완전연결 계층을 사용했다. 완전연결 계층에서는 인접하는 계층의 뉴런이 모두 연결되고 출력의 수는 임의로 정할 수 있다.
완전연결 계층의 문제점은 무엇일까?
바로, “ 데이터의 형상이 무시 “ 된다는 사실이다. 입력 데이터가 이미지인 경우를 예로 들면, 이미지는 통상 “ 세로 * 가로 * 채널 ( 색상 ) “ 으로 구성된 3차원 데이터이다. 그러나 완전연결 계층에 입력할 때는, 3차원데이터를 평평한 1차원 데이터로 평탄화 해줘야 한다. 이전에 예로 사용해온 MNIST 데이터 셋은 형상이 (1, 28, 28)인 이미지를 1줄로 세운 784개의 데이터를첫 Affine계층에 입력했다.
이미지는 3차원 형상이며, 이 형상에는 소중한 공간적 정보가 담겨져 있다. 예를 들어 공간적으로 가까운 픽셀은 값이 비슷하거나, RGB의 각 채널은 서로 밀접하게 관련되어 있거나, 거리가 먼 픽셀끼리는 별 연관이 없는 등, 3차원 속에서 의미를 갖는 본질적인 패턴이 숨어 있을 것이다. 그러나 완전연결 계층은 형상을 무시하고 모든 입력 데이터를 동등한 뉴런 ( 같은 차원의 뉴런 ) 으로 취급하여 형상에 담긴 정보를 살릴 수 없다.
한편, 합성곱 계층은 형상을 유지한다. 이미지도 3차원 데이터로 입력 받으며, 마찬가지로 다음 계층에도 3차원 데이터로 전달한다. 그래서 CNN에서는 이미지처럼 형상을 가진 데이터를 제대로 이해할 것이다.
CNN에서는 합성곱 계층의 입출력 데이터를 “ 특징 맵 , feature map “ 이라고도 한다. 합성곱 계층의 입력 데이터를 “ 입력 특징 맵 , input feature map “, 출력 데이터를 “ 출력 특징 맵, output feature map “ 이라고 한다.
우리는 입출력 데이터와 특징 맵을 같은 의미로 사용하자.