ConvNet의 Conv 레이어 만들기

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


Convolutional Neural Network

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

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


Image Input

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

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

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

아직 안만듬
지금까지 많이 사용한 의 식을 사용해 하나의 값을 생성한다.
의 필터에서는 아래와 같은 식으로 값이 생성된다.

이 식에서 변하지 않는 Weight이 어떤 값을 만들지 결정한다.
ReLU라는 함수를 붙이기만 하면 ReLU Layer가 생성이 된다.

하나의 filter로 값을 생성할 때 옆으로 움직이는 칸의 단위를 Stride라고 한다.
출력값의 크기는 의 크기를 갖는다.

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

Pad를 사용하는 이유

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


Pad 사용 예시

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

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


Convolution Layer

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

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

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