본문 바로가기
AI/[DLBasic]모두의 딥러닝(딥러닝의 기본)

[DLBasic] 11 -1 . CNN introduction

by 쵸빙 2020. 1. 20.

     저번 시간에 잠깐 소개했었던 Split & Merge 방법을 사용한 Convolutional Neural Network 방법을 소개하겠다.

 

     Convolutional Neural Network의 기본 생각은 예전에도 잠깐 소개했던 고양이 실험에서 시작되었다. 입력을 나누어받는 고양이 뇌의 뉴런처럼 따로따로 처리하는 것이다. 하나의 이미지가 있으면 잘라서 각각의 입력으로 넘기고, 이 층을 Convolutional Network라고 한다. 중간에 ReLU 층을 넣고, pooling이나 convolutional layer도 여러 번 중간에 할 수 있다.

 

     처음에 이미지를 입력으로 받고, 위의 예에서는 32 x 32 크기의 RGB를 가지고 있는 그림이라고 하자.

처리하는 단위는 filter라고 하고, 한꺼번에 얼마만큼 보고싶은지를 나타내는 것이고, 이것은 사용자가 지정할 수 있다.

이 각 필터들은 한 개의 숫자의 결과를 내보낸다. 어떻게 5 x 5 x 3의 필터의 값을 한 개의 숫자로 나타낼 수 있는 것일까?

 

     Wx + b이나 ReLU(Wx + b)를 사용하면 된다. 이렇게 filter의 크기만큼 자르고 계속 이동하면서 전체의 값에 대해 결과를 얻는다. 

 

     한 칸씩 옆으로 이동해서 결과를 얻는다. 이 방법을 stride라고 한다. stride가 1이라면 5 x 5의 결과를 얻을 것이고,

두 칸씩 옆으로 이동해서 filter만큼 보는 stride 2일 때에는 3 x 3의 결과를 얻을 것이다.

 

     그 공식은 위와 같다.

 

     padding은 0이라는 입력이 가장자리에 있게 하는 것이다. 이렇게 하는 이유는 그림이 급격하게 줄어드는 것을 막을 수 있기도 하고, 모서리라는 것을 네트워크에 알려줄 수 있는 것이다. 

 

     padding을 해서 원래 입력의 이미지와 출력의 이미지 크기를 같아지게 하는 방법을 사용하고 있다.

 

     서로 다른 6개의 필터로 서로 다른 결과를 낼 수 있다. activation maps의 파라미터는 (28, 28, 6)이 될 것이다.

이렇게 만든 것이 하나의 convolutional layer이다.

 

     이렇게 얻은 convolutional layer에 또 적용하여 새로운 layer을 얻을 수도 있다.

그렇다면 weight에 사용되는 변수 개수가 얼마나 될까? weight은 처음에는 5 x 5 x 3을 6개 쓰고, 두 번째에서는 5 x 5 x 6을 10개 썼다. 이런 식으로 사용되는 weight을 설정하는 방법은 initialization을 랜덤하게 한 다음에 우리가 가진 데이터로 학습을 한다.

 

다음 시간에는 Max Pooling 등의 개념을 알아보겠다.