Fully Connected Layer1 만으로 구성된 인공 신경망의 입력 데이터는 1차원(배열) 형태로 한정된다. 한 장의 컬러 사진은 3차원 데이터이, 배치 모드에 사용되는 여러장의 사진은 4차원 데이터이다. 사진 데이터로 전연결(FC, Fully Connected) 신경망을 학습시켜야 할 경우에, 3차원 사진 데이터를 1차원으로 평면화시켜야하기 때문에 사진 데이터를 평면화 시키는 과정에서 공간 정보가 손실일어날 수 밖에 없다. 결과적으로 이미지 공간 정보 유실로 인한 정보 부족으로 인공 신경망이 특징을 추출 및 학습이 비효율적이고 정확도를 높이는데 한계가 있기 때문에, '이미지의 공간 정보를 유지한 상태로 학습이 가능한 모델'이 바로 CNN(Convolutional Neural Network)이다
합성곱 연산은 두 함수 f, g 가운데 하나의 함수를 반전(reverse), 전이(shift)시킨 다음, 다른 하나의 함수와 곱한 결과를 적분하는 것을 의미한다.
(출처: https://ko.wikipedia.org/wiki/%ED%95%A9%EC%84%B1%EA%B3%B1)
위의 그림은 3x3짜리 필터로 5x5의 이미지데이터에 Convolution을 하는 과정이다. 이 Convolution을 통해서 우리는 Feature Map을 얻을 수 있다.
Convolution Layer에 유입되는 입력 데이터에는 한 개 이상의 필터가 적용된다. 1개 필터는 Feature Map의 채널이 된다. Convolution Layer에 n개의 필터가 적용된다면 출력 데이터는 n개의 채널을 갖게 된다.
RGB를 예를 들면 각각의 색에 대해서 3개의 필터가 필요하므로 3개의 채널을 갖는다고 말할 수 있다.
필터는 이미지의 특징을 찾아내기 위한 공용 파라미터이며 CNN에서 Filter = Kernel이다.
지정된 간격으로 필터를 순회하는 간격을 Stride라고 한다. 위의 예시는 stride가 1로 순회를 하는 그림이고 stride를 2로 설정되면 필터는 2칸씩 이동하면서 convolution을 진행한다.
Convolution 레이어에서 Filter와 Stride에 작용으로 Feature Map 크기는 입력데이터 보다 작다. Convolution 레이어의 출력 데이터가 줄어드는 것을 방지하는 방법이 패딩이며, 입력 데이터의 외각에 지정된 픽셀만큼 특정 값으로 채워 넣는 것을 의미한다. 보통 패딩 값으로 0으로 채워 넣는다.
Pooling 레이어는 컨볼류션 레이어의 출력 데이터를 입력으로 받아서 출력 데이터(Activation Map)의 크기를 줄이거나 특정 데이터를 강조하는 용도로 사용된다. 플링 레이어를 처리하는 방법으로는 Max Pooling과 Average Pooning, Min Pooling이 있으며, 정사각 행렬의 특정 영역 안에 값의 최댓값을 모으거나 특정 영역의 평균을 구하는 방식으로 동작한다.
다음그림은 Max pooling과 Average Pooling의 동작 방식을 설명한다.
일반적으로 Pooing 크기와 Stride를 같은 크기로 설정하여 모든 원소가 한 번씩 처리 되도록 설정한다.
Pooling 레이어는 Convolution 레이어와 비교하여 다음과 같은 특징이 있다.
- 학습대상 파라미터가 없음
- Pooling 레이어를 통과하면 행렬의 크기 감소
- Pooling 레이어를 통해서 채널 수 변경 없음
- CNN에서는 주로 Max Pooling을 사용한다.