ConvNet의 Conv 레이어 만들기

해당 게시물은 Edwith에서 제공하는
머신러닝과 딥러닝 BASIC을 듣고 요약 정리한 글입니다.

Convolutional Neural Network

고양이가 어떠한 사물을 볼때 뇌 전체가 아닌
일부활성화 된다는 사실을 발견함에서 시작

기본적인 CNN의 구성으로 CONVRELU가 한 쌍으로 구성되고
중간중간 POOL이 구성되어 있으며 마지막에는 FC로 구성되어 있다.

Image Input

아직 안만듬
위 그림의 크기가 32×3232 \times 32이고 색상을 갖고 있기 때문에
3(Red, Green, Blue)을 곱해 32×32×332 \times 32 \times 3크기다.
픽셀 1개는 흑백의 경우 1Byte를 사용하기 때문에
256단계의 Grey Scale을 표현할 수 있고
컬러의 경우 RGB에 1Byte씩 할당하기 때문에
256×256×256256 \times 256 \times 256만큼의 색상을 표현할 수 있다.

아직 안만듬
위의 이미지 처럼 전체의 이미지를 한번에 처리하지않고
일부분만 처리(Filter)하며 필터의 Size는
임의로 정의할 수 있으나 색상은 항상 같은 값이다.

아직 안만듬
하나의 필터가 하는 일은 궁극적으로 하나의 값을 생성한다.

아직 안만듬
지금까지 많이 사용한 Wx+bWx + b의 식을 사용해 하나의 값을 생성한다.
5×5×35 \times 5 \times 3의 필터에서는 아래와 같은 식으로 값이 생성된다.
W1x1+W2x2+W3x3+W4x4+W5x5+bW_{1}x_{1} + W_{2}x_{2} + W_{3}x_{3} + W_{4}x_{4} + W_{5}x_{5} + b
이 식에서 변하지 않는 Weight이 어떤 값을 만들지 결정한다.
ReLU라는 함수를 붙이기만 하면 ReLU Layer가 생성이 된다.

하나의 filter로 값을 생성할 때 옆으로 움직이는 칸의 단위를 Stride라고 한다.
출력값의 크기는 (NF)/Stride+1(N - F) / Stride + 1의 크기를 갖는다.

Stride가 클수록 출력값의 크기가 작아져 정보를 잃어버리게 되어
CNN을 구성할 때 Pad라는 개념을 사용한다.

Pad를 사용하는 이유

  1. 그림이 작아지는 것을 방지
  2. 그림의 모서리임을 알려주기 위해서

Pad 사용 예시

아직 안만듬
원본 이미지의 크기가 7×77 \times 7의 크기고 1 Stride
3×33 \times 3크기의 필터를 사용한다고 가정했을때
5×55 \times 5의 출력값을 얻을 수 있었지만
1개의 Pad를 추가한 결과 7×77 \times 7의 출력값을 얻을 수 있다.

보통 Pad를 추가하였을때 입력값의 크기와 출력값의 크기가 같도록 설정한다.

Convolution Layer

아직 안만듬
filter를 적용해 만들어진 출력 결과를 Activation Map이라고 한다.
여러개의 Convolution Layer를 겹쳐 사용할 수 있다.

filter의 깊이는 이미지의 깊이와 동일해야 한다.

Layer를 구성할 때 많은 Weight값이 존재하는 데 이 값들은
Neural Network과 동일하게 초기화 후 학습을 진행한다.


Written by@Minsu Kim
Software Engineer at KakaoPay Corp.