Post
Ch5 Convolutional Neural Network(CNN) 1 | Gihun Son

Ch5 Convolutional Neural Network(CNN) 1

5.1 Convolutional Neural Network

Ch4에서 배운 deep learning의 back propagation을 생각해보자면, forward propagation과정에 따라 계산된 오차 정보가 Neural Network의 모든 node(output layer->hidden layer->input layer)로 전송된다. 이러한 계산 과정은 복잡하고 많은 Computing 자원과 시간을 요구한다. 이러한 문제를 해결하고자 하는 것이 CNN이고, 이미지 전체를 한번에 해결하는 것이 아니라 이미지를 부분적으로 계산하여 시간과 자원을 절약하고, 이미지의 세부적인 정보 또한 분석할 수 있다.

5.1.1 Convolutional layer의 필요성

Convolutional layer는 이미지나 영상을 처리하는 것에 유용하다. 예시로, 3x3 grayscale의 이미지가 있다고 가정해보자.

image.png

이미지 분석을 왼쪽 그림과 같은 3x3배열을 오른쪽 그림과 같이 flattening하여 각 pixel에 가중치를 곱하고 hidden layer로 전달한다. 하지만 그림처럼 이미지를 flattening하여 분석하면 Spatial 정보가 손실되고, 이를 방지하기 위해 Convolutional layer가 도입되었다.

5.1.2 Convolutional Neural Network Architecture

CNN은 음성 인식이나 이미지/영상 인식에서 주로 사용된다. 다차원 배열 data를 처리하도록 구성되어있어 RGB와 같은 다차원 배열 처리에 유용하다.

layer는 다음과 같이 총 5개로 구성된다.

  1. input layer
  2. convolutional layer
  3. pooling layer
  4. fully connected layer
  5. output layer

image.png

CNN은 Convolutional layer와 Pooling layer를 거치면서 input image의 주요 Feature vectore(특성 벡터)를 추출한다. 그 후 추출된 feature vector들은 Fully connected layer를 거치면서 1차원 벡터로 변환되어 마지막의 output layer에서 Activate function인 Softmax를 거치면서 최종 결과가 출력된다.

[Input layer]

input layer는 input data가 최초로 거치게 되는 layer이다. 이미지는 1차원 데이터가 아닌 height, width, channel의 값을 갖는 3차원 데이터이다(grayscale이면 C=1, RGB이면 C=3). 다음 예시 사진의 데이터는 4x4x3의 데이터라고 볼 수 있다.

image.png

[Convolutional layer]

Convolutional layer는 입력 데이터에서 Feature를 추출하는 역할을 한다. Feature Extraction은 이미지에 대한 Feature를 찾기 위해 Kernel 또는 Filter를 이용한다. Kernel/Filter는 이미지의 모든 영역을 훑으며 Feature를 추출하는데, 이것의 결과물이 바로 Feature Map이다.

일반적으로 Kernel size는 3x3, 5x5로 적용하고, stride는 지정된 간격에 따라 순차적으로 이동한다. 다음 예시는 stride=1일 때의 과정이다.

  1. Input image에 3x3 filter적용

입력 이미지와 filter를 포개어 놓고 대응되는 숫자끼리 곱한 후 모두 더한다.

image.png

(1×1) + (0×0) + (0×1) + (0×0) + (1×1) + (0×0) + (0×1) + (0×0) + (1×1) = 3

  1. filter가 1(stride)만큼 이동

image.png

(0×1) + (0×0) + (0×1) + (1×0) + (0×1) + (0×0) + (0×1) + (1×0) + (1×1) = 1

  1. filter가 1만큼 두번째 이동

image.png

(0×1) + (0×0) + (0×1) + (0×0) + (0×1) + (1×0) + (1×1) + (1×0) + (0×1) = 1

계속 이동하여 끝까지 이동한다.

image.png

위 예시에서 이미지의 크기가 (6,6,1)이며, 3x3 크기의 kernel/filter가 stride 1간격으로 이동하면서 convolution 연산을 수행한다. 그 결과 이미지가 (4,4,1)의 Feature Map이 되었음을 알 수 있다. 만약 이미지가 GrayScale이 아닌 RGB라면 filter의 크기는 (2x2x3)이고 아래 그림과 같이 계산된다.

image.png

만약 filter가 2개 이상이라면? 아래 그림과 같이 Feature Map의 Channel이 늘어난다.

image.png

Convolutional layer를 요약하자면 아래와 같다.

  • Input data: W1 x H1 x C1
  • Hyperparameter: filter의 개수(K), filter의 크기(F), stride(S), Padding(P)
  • Output data: W2=(W1-F+2P)/S + 1, H2=(H1-F+2P)/S + 1, C2=K

[Pooling layer]

pooling layer는 convolutional layer과 유사하게 feature map의 차원을 down sampling하여 연산량을 감소시키고, 주요한 feature vector를 추출하여 학습을 효과적으로 할 수 있다.

pooling의 종류는 다음과 같다.

  • Max pooling: 영역에서 최대값을 추출
  • average pooling: 영역에서 평균을 반환

대부분은 CNN에서는 Max pooling을 사용하는데, Average pooling은 각 kernel의 값을 평균화하여 중요한 가중치를 갖는 값의 feature를 희석시킬 수 있기 때문이다. Max pooling의 과정은 아래와 같다.

  1. image.png

  2. image.png

3.->4. image.png

Pooling layer을 요약하면 아래와 같다.

  • Input data: W1 x H1 x C1
  • Hyperparameter: filter의 크기(F), stride(S)
  • Output data: W2=(W1-F)/S + 1, H2=(H1-F)/S + 1, C2=C1

[Fully connected layer]

Convolutional layer와 Pooling layer를 거치면서 Demension이 축소된 Feature map은 마지막으로 fully connected layer로 전달된다. 이 과정에서 이미지는 3차원 벡터에서 1차원 벡터로 flattening된다.

image.png

[Output layer]

Output layer에서는 softmax function이 사용되는데, 입력 받은 값을 0~1 사이의 값으로 출력한다. 따라서 마지막 output layer의 softmax함수를 사용하여 이미지가 각 label에 속할 확률값이 출력되고, 높은 확률을 갖는 label이 최종 값으로 선정된다.

5.1.3 1D, 2D, 3D Convolution

Convolution은 이동하는 방향의 수와 출력 형태에 따라 1D, 2D, 3D로 분류할 수 있다.

[1D Convolution]

1D Convolution은 filter가 시간을 축으로 좌우로만 이동할 수 있는 Convolution이다. 따라서 입력(W)과 filter(K)에 대한 출력은 W가 된다.

예를 들어 입력이 [1,1,1,1,1]이고 filter가 [0.25,0.5,0.25]라면, 출력은 [1,1,1]이 된다.

다음 그림과 같이 출력형태는 1D 배열이 되고, 그래프 곡선을 완화할 때 많이 사용된다.

image.png

[2D Convolution]

2D Convolution은 filter가 2개의 방향으로 움직이는 형태이다. 즉, 입력(W,H)과 filter(k,k)에 대한 출력은 (W,H)가 되며, 출력의 형태는 2D matrix이다.

image.png

[3D Convolution]

3D convolution은 filter가 움직이는 방향이 3개 있다. 입력(W, H, L)에 대해 filter(k, k, d)를 적용하면 출력으로 (W, H, L)을 갖는 형태이다. 출력은 3D matrix이며, d < L이어야 한다.

image.png

3D convolution에서 출력의 형태가 (W, H, L)이 아닌 (W, H)인 경우가 있는데, 이는 filter가 (k, k, L)의 형태를 갖을 때 해당한다. 예시는 아래와 같다.

image.png

[1x1 Convolution]

1x1 convolution은 3D convolution형태로 진행된다. 입력(W, H, L)에 filter(1, 1, L)를 적용하면 출력은 (W, H)가 된다. 이를 통해 Channel수를 조정하여 연산량 감소에 도움이 되고, 대표적으로 GoogLeNet에서 사용된다.

image.png

This post is licensed under CC BY 4.0 by the author.