InformationSecurity-Study

[모두의 딥러닝] Convolutional Neural Networks 본문

인공지능

[모두의 딥러닝] Convolutional Neural Networks

-Shinwoo- 2019. 5. 4. 13:49

1단계: ConvNet의 Conv 레이어 만들기

고양이에게 어떠한 형태의 그림을 보여주었을 때, 그림을 읽어들이는 뉴런이 모두 동작하는 게 아니라 그림의 형태에 따라서 일부분 일부분만 사용하는 것을 알 수 있다. 

이 발견에서 착안한 것이 Convolutional Neural Networks라고 한다.

 

 

Softmax Classification

(CONV - RELU - POOL)의 과정을 여러 번 반복해서 레이블링하는 Softmax Classification을 통해 분류한다. 

 

 

 

Get one number using the filter

처음의 Input 32x32x3 Image --> 5x5x3 filter (한꺼번에 얼마만큼 보고 싶은지 정한다. )

filter는 궁극적으로 한 값(one number)을 만들어낸다. one number에 대한 공식이 아래와 같다.

one number = Wx + b =  RELU(Wx+b)

 

 

 

 

Let's look at other areas with the same filter (W)

똑같은 필터로 이미지의 다른 부분도 봐야하기 때문에 옆으로 넘기면서 각각의 값(one number)들을 가져온다.

같은 weight을 가지고 전체를 훑은 다음에 각각의 number들을 가져온다.

몇개의 점을 가져올 수 있을까? 이 값들을 알아야 weight을 정할 수 있기 때문이다.

 

ex) 7x7 input (spatially) assume 3x3 filter

==> 5x5 output (stride:1 한 칸씩 옆으로 움직일 경우)

==> 3x3 output (Stride:2 두 칸씩 옆으로 움직일 경우)

==> NxN input --> Output size: (N-F)/Stride+1

 

 

 

 

In practice: Common to zero pad the border

그림이 급격하게 작아지는 것을 방지하고 모서리임을 네트워크에 알려주기 위함이다.

원래 Input 7x7 Image --> 3x3 filter, applied with stride 1 (3x3 filter 크기의, 1칸씩 옮겨가면서 본다)

pad with 1 pixel border = > 9x9 input 으로 늘어난다. 

그 다음 똑같은 공식을 이용해서 적용하면 된다. (9-3) / 1 + 1 = 7

즉, Convolutional layer을 해도 input과 output의 사이즈가 같다. ==> 특 장점!

 

Convolution layers

다른 set에 weight이 있으니 filter1에서 온 이미지에 filter2를 만드는 방법이 있을수도 있.

filter는 각각 weight이 다르기 때문에 여러 개의 filter을 적용하면 acitvation maps(이미지 사이즈,이미지 사이즈,filter의 개수

 

Convolution layer

32x32x3 image -> 5x5x3 filter -> 26x26x3 image -> 5x5x6 filter -> 21x21x3 image -> ...

 

짚고 넘어가야할 것은 weight에 사용되는 variable의 개수는 어떻게 될까?

여기서 weight의 개수는 첫 filter에 6개를, 두번째 filter에 10개를 쓰는 것을 볼 수 있다.

처음에는 random하게 initialize하지만 가지고 있는 데이터로 학습을 하게 되는 것이다.

 

 

2단계: Max pooling and others

MAX POOLING

CONV - RELU - POOL의 반복을 통해서 Softmax Classification 하는 것을 위에서 확인하였다.

이때 Pooling layer란 간단하게 sampling이라고 생각하면 된다.

한 layer에서 이미지를 가지고 resize하면 사이즈가 작아지는데, 이 사이즈를 작게 만드는 것을 말한다.

 

 

2x2 size의 filter, stride 2 --> 2x2 output (= (N-F)/stride + 1 )

4개의 박스가 나오는데, 여기서 MAX POOLING은 각각의 박스에서 가장 큰 값을 뽑아내는 것이다.

그래서 2x2 output에는 {6, 8, 3, 4}의 값을 갖는다. 

 

Fully Connected Layer (FC layer)

POOLING 샘플링의 횟수는 원하는 대로. 보통 마지막에 한 번 더 풀링한 다음에 Softmax Classification을 거친다.

이 부분은 앞에서 충분히 이야기를 많이 하였기에 쉽게 이해할 수 있으리라 믿는다.

 

거의 끝이 보이는 것 같다. 조금만 더 힘을 내자.