Fully Connected Layer만으로 구성된 신경망은 1차원의 형태로만 구성 될 수 있습니다. 그러나 컬러 이미지 데이터는 [ 가로, 세로, 채널 ] 이렇게 총 3개의 축을 갖는 3차원 데이터입니다. 이 데이터를 1차원의 형태로 평면화 시킨다면 공간 간의 관계에서 발생하는 정보가 손실 될 수 밖에 없습니다. 간단히 예를 들자면 아래와 같습니다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/1d97d866-0921-4373-b8d4-4db18f914eaf/Untitled.png

2개의 이미지 데이터가 있다고 가정 했을 때, 단순히 가로축의 합의 집합으로 1차원으로 축소하는 함수가 있다고 가정하겠습니다.

좌측 두 장의 2차원 데이터는 1번 줄의 값이 각각 [1, 2, 3, 4, 5, 6]과 [3, 2, 4, 6, 5, 1]로 다른 값을 갖습니다. 그러나 1차원으로 축소되면서 같은 값을 갖게 되었습니다.

이는 차원을 축소하는 과정에서 정보의 손실이 발생하는 작은 예시이지만 실제 Layer가 이보다 복잡하더라도 충분히 이런 일이 일어날 수 있다는 것을 얘기합니다.

머신 러닝에서 Layer를 거쳐가면서 정보의 손실이 어쩔 수 없이 발생 할 수는 있는데, 이 손실을 최소화하기 위해서 CNN(Convolutional Neural Network)에서는 아래의 구조를 제안합니다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/dd0210ad-bbda-47c1-814e-9a7ccceb4100/Untitled.png

Convolutional Layer

Convolutional Layer는 아래의 순서로 출력을 계산합니다.

  1. Input Layer의 모든 채널을 임의의 Kernel로 순회하며 각 채널의 filter를 생성합니다. → input Channel 개수 만큼의 filter 생성
  2. 생성된 filter들을 종합적으로 출력을 생성합니다. → output Channel 개수만큼의 filter 생성

그림으로 표현하면 아래와 같습니다. Input Channel을 3, Output Channel을 5라 가정하고 설명합니다.

  1. 각각의 채널 별로 연산합니다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/e21769ff-2fda-4db4-995a-f9eced2a5a57/Untitled.png

  1. 임의의 Kernel로 한 개 채널의 좌측 상단부터 우측 하단까지 순회하며 연산합니다. output Channel의 개수만큼 반복합니다. 이 때 생성되는 Filter의 크기는 input 이미지의 가로, 세로 길이와 Kernel size, stride, padding에 따라 결정됩니다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4f2ff9ec-53dc-461a-a878-d129d21d41aa/Untitled.png

  1. Output Channel의 크기만큼 모든 Input Channel의 Filter가 생성되고, 같은 회차에 생성한 Filter 끼리 연산하여 하나의 Output Filter를 생성합니다. 결과적으로 총 5개의 Output Filter가 생성됩니다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/12918f4a-0988-4a26-93ec-39ce8241db26/Untitled.png

kernel_size

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/93dfc522-4dd7-49c7-a0da-d99761c44437/Untitled.png

stride

kernel이 1 step에 몇 칸을 움직일지를 지정합니다. 위 그림을 예시로,