Link

합성곱 신경망 설계 예제

앞서 우리는 합성곱 계층convolutional layer에 대해 설명할 때, 입출력 행렬 크기의 계산이 까다롭다고 이야기하였습니다. 따라서 이번에는 합성곱 계층을 활용하여 심층신경망을 구성할 때, 쉽게 구성하는 요령에 대해 예제를 통해 살펴보고자 합니다.

예를 들어 다음과 같은 심층신경망의 서브 모듈sub-module을 생각해볼 수 있습니다.

순서 구성
1 $3\times3$ Conv Layer
2 ReLU
3 Batch Normalization
4 $3\times3$ Conv Layer (+ with $2\times2$ Stride)
5 ReLU
6 Batch Normalization
7 (+ Maxpooling Layer if no Stride)

이 서브 모듈은 두 개의 합성곱 계층, 비선형 활성 함수, 배치정규화 계층을 가지고 있습니다. 주목할 점은 마지막 합성곱 계층에서 스트라이드를 제공하거나 맥스풀링 계층을 추가하여 출력의 크기를 반으로 줄이는 형태를 취합니다. 앞으로 우리는 이러한 서브 모듈을 다음 그림과 같이 CNN 블록으로 표현하기로 합니다.

그럼 우리는 이러한 CNN 블록을 재활용하여 전체 심층신경망을 구성할 수 있습니다. 다음의 그림은 CNN 블록을 세 번 반복 활용하여 이미지를 $|\mathcal{C}|$ 개의 클래스 중 하나로 분류하는 문제를 풀기 위한 구조를 설계한 모습입니다.

이 신경망은 $(N,C,H,W)$ 크기의 이미지 미니배치mini-batch를 입력으로 받아, $(N,|\mathcal{C}|)$ 크기의 결과 행렬을 출력하도록 설계되어 있습니다. 그림에서는 쉽게 그리기 위해 $N=1$ 인 것으로 표현하였습니다. 만약 컬러 이미지를 다루고 있다면 $C=3$ 일 것이고, 흑백 이미지를 다루고 있다면 $C=1$ 일 것입니다. 가장 중요한 점은 CNN 블록을 지날 때마다 텐서의 크기 $H,W$ 는 반으로 줄어들고 있고, 최종적으로 $H=1,W=1$ 이 될 때, CNN 블록의 활용이 종료되고 선형 계층이 활용되는 것을 볼 수 있습니다. 그리고 각 CNN 블록을 지날때마다 채널의 갯수는 증가하고 있음을 볼 수 있습니다. 참고로 각 CNN 블록의 커널 크기와 패딩 크기는 크기가 유지되도록 연동 될 것이고, 커널 갯수는 하이퍼 파라미터hyper-parameter가 될 것입니다.

예를 들어 $H=8,W=8$ 인 이미지가 있다고 가정해볼까요? 그럼 이 신경망은 $(N,1,8,8)$ 을 입력으로 받게 될 것입니다. 그리고 첫 번째 CNN 블록을 통과하면 우리는 $(N,64,\frac{H}{2}=4,\frac{W}{2}=4)$ 크기의 텐서를 얻을 수 있을 것입니다. 여기서 우리는 첫 번째 CNN 블록은 64개의 커널을 갖고 있으니, 64 크기의 출력 채널을 갖는 것을 볼 수 있습니다. 즉, 첫 번째 CNN 블록은 64개의 패턴에 대한 결과물을 출력한다고 볼 수 있습니다. 그럼 두 번째 CNN 블록은 128개의 커널을 갖고 있어서, $(N,128,\frac{H}{4}=2,\frac{W}{4}=2)$ 크기의 출력 텐서를 반환하는 것을 볼 수 있습니다. 마지막으로 CNN 블록을 통과하면 $H=1,W=1$ 이 되는 것을 확인할 수 있습니다. 대신에 채널의 갯수가 256개가 된 것을 볼 수 있는데요. 즉, 256개 커널 패턴에 대한 점수라고 볼 수 있습니다. 그럼 우리는 여기에 선형 계층(+비선형 활성 함수)을 사용하고, 마지막엔 소프트맥스soft-max 함수까지 사용하여 각 샘플에 대해 클래스별 확률 값을 예측할 수 있을 것입니다.

만약 $H=28,W=28$ 인 MNIST의 경우에는 $H,W$ 가 어떻게 줄어들까요? 맥스풀링 대신 스트라이드가 2인 경우로 가정하겠습니다. 그럼 네 개의 CNN 블록을 통과하면 $H=1,W=1$ 가 됨을 알 수 있습니다.

\[\begin{gathered} 28\underset{\text{Block}}{\Rightarrow} 14\underset{\text{Block}}{\Rightarrow} 7\underset{\text{Block}}{\Rightarrow} \\ \Big\lfloor{\frac{7+2\times{1}-(3-1)-1}{2}+1}\Big\rfloor=3\underset{\text{Block}}{\Rightarrow} \\ \Big\lfloor{\frac{3+2\times{1}-(3-1)-1}{2}+1}\Big\rfloor=1 \end{gathered}\]

실제 적용 사례는 추후 실습 코드를 통해 확인하도록 하겠습니다.