티스토리 뷰

ML

ML 이론 강의 필기 - 5

khe0616 2018. 11. 16. 22:18

Lec 11-1. CNN introduction


다음과 같은 NetWork를 Forward Net(Fully Connected Network)라고 한다.








위와 같이 merge하는 모델은 Convolutional Neural Network(CNN)의 기본적인 아이디어가 되었다.










다음과 같이 입력을 나누어 받는 것이 CNN의 기본적인 아이디어 이다.











1. 왼쪽에 있는 자동차 사진을 쪼개서 각각의 입력으로 넘긴다.

2. 그 후, CONV, RELU, POOLING을 반복한다. 이들 순서는 본인이 원하는 대로 쌓아주면 된다.

3. 마지막으로, Fully Connected Neural Network로 최종적인 레이블링을 한다.(car, truck, .. ) -> n개의 Softmax classify ( n개의 종류중 하나의 종류로 식별)


참고로 CONV 부분은 Convolutional Layer라고 한다.






이제, 한 Layer로 부터 CNN이 진행되는 과정을 설명하려 한다.






width -> 32

height -> 32

depth(color) -> 3

인 형태의 이미지가 있다고 가정하자









전체 이미지를 하나의 입력으로 받지 않고, 이미지의 일부분만 처리한다.(작은 이미지로 쪼개서 각각의 입력으로 넘길 것이다.)


이미지를 일부분을 처리하는 것을(이미지를 작은 이미지로 쪼개는 것을) filter라는 개념으로 설명한다.

filter의 형태는

width -> 5

height -> 5

depth(color) -> 3

인데, width와 height는 내가 원하는 값으로 지정 해주면 되고, depth는 전체 이미지의 depth와 항상 동일하다. 








위에서 정의한 filter는 빨간색 부분에 해당되는 값만 읽어들이게 된다.

filter가 궁극적으로 하는 일은 어떠한 한 값을 만들어내는 것이다.








5x5x3개의 숫자를 하나의 값으로 만들어 내기 위해,

Wx+b 나 ReLU(Wx+b) 식을 이용한다.









same filter이면 w값이 동일하다.

같은 filter를 가지고 전체 이미지의 다른 부분(area)도 읽어들일 수 있다.

-> 같은 weight(w)를 가진 filter로 전체 이미지를 다 훑은 뒤, 거기서 얻은 각각의 값(점)들을 가져오게 된다.

    -> 이러한 과정을 통해 몇개의 점(값)들을 얻을 수 있을까? 가 중요함.

    -> 이 값들을 알아야 weight의 개수를 정하고, 그 다음으로 어떻게 넘길까 를 설계할 수 있게됨








Input Image Size -> 7 x 7

Filter Size -> 3 x 3

일 경우


한 칸씩 움직일때(stride : 1)

Output size -> 5 x 5 이다.




Input Image Size -> 7 x 7

Filter Size -> 3 x 3

일 경우


두 칸씩 움직일때(stride : 2)

Output size -> 3 x 3 이다.










Input Size가 N x N 이고,

Filter Size가 F x F 일때,


Output size -> (N-F)/stride + 1

이다.








그런데, stride가 커지면서 이미지의 size가 자꾸 작아진다는 문제점이 있다.

이미지의 size가 작아지면 정보를 잃는다는 문제점이 있다.

따라서, 이를 해결하기 위해 CNN사용시 Padding이라는 개념을 사용한다.










다음과 같이 테두리를 0으로 1 pixel Padding 하면,

Input size가 7 x 7에서 9 x 9 가 된다.


그 후, 위에서 Output size를 구하기 위해 사용했던 공식인 (N-F)/stride + 1 을 이용하면 Output size는 7 x 7 이 된다.

결과적으로 7 x 7 Input, 7 x 7 Output 인 셈이다.










Padding 해서, 입력 이미지(예 : 7 x 7 Input)와 출력 이미지(예 : 7 x 7 Output) 사이즈가 같아지게 하는 것을 굉장히 일반적으로 사용하고 있다.



빨간표시 한 부분은 Input size도 7 x 7, Output size도 7 x 7 이 되도록 하기 위해서는

Filter size 3 x 3 일때 -> 1 pixel padding

Filter size 5 x 5 일때 -> 2 pixel padding

Filter size 7 x 7 일때 -> 3 pixel padding

이어야 함을 의미한다.








Padding을 하는 이유

1. 그림이 급격히 작아지는 것을 방지

2. "모서리"에 대한 정보를 Network에 알려줄 수 있음








이제부터 하나의 Convolution Layer를 만드는 방법을 소개하려고 한다.





Filter 1에 대한 output 이다.









노란색은 Filter 1에 대한 output, 녹색은 Filter 2에 대한 output이다.











결과적으로 총 6개의 filter를 동시에 Convolutional Layer에 적용시켰다.

각각의 filter는 w(weight)이 다르기 때문에, Output 값이 조금씩 다를 것이다.




결과적으로 나오는 activation maps의 size는 (28, 28, 6)이다.

빨간 밑줄친 부분의 값은 전체 이미지와 filter의 size에 의해 결정되고, 현재 예시에서 Padding 안한다고 가정했을때 28이다.

파란 밑줄친 부분의 값은 filter의 개수와 같다. 현재 예시에서 6이다.








  


다음과 같이 Convolutional Layer를 여러 단계 적용시킨다.

Convolutional Layer를 적용해서 나온 output(Activation map)에 또, Convolutional Layer를 적용한다.



weight에 사용되는 variable의 개수는? -> 6개의 5 x 5 x 3 filter 에서의 weight 개수는 -> 5 x 5 x 3 x 6이다.

그렇다면,  이 값들은 어떻게 정해 지는가? -> 다른 NN과 마찬가지로 처음에는 Random하게 초기화 -> 학습









Lec 11-2. CNN introduction : Max pooling



아까 위에서 보였던 그림이다.

CONV와 RELU를 적용하면서 중간에 한번씩 POOL을 해주는데, 이 Pooling Layer에 대해서 설명해보려 한다.









다음과 같이 파란색 원본 이미지가 있고, 이로부터 만들어진 Convolutional Layer가 있다.

이 Conv Layer에서 1개의 Layer씩 뽑아내서, resize(sampling)시킨다.








그 다음, resize(sampling)시킨 것들을 쌓아서(모아서) 다음 단계로 넘겨준다.

이러한 작업을 Pooling(Sampling)이라고 한다.









Max Pooling의 예시이다.

Output으로 나오는 Data의 size는 filter와 stride 개수에 따라서 정해진다.





 




CNN을 적용하면 보통 이러한 형태이다.

위에서 설명한 자동차 사진에서와 같이 CONV, RELU, POOL을 반복적으로 적용한 뒤,

마무리 단계에서 FC Network에 통과시켜 Softmax classify를 하고 Label을 선택하게 된다.







Lec 11- CNN case Study 

CNN이 어떻게 응용되었는지 살펴볼 것이다.







CNN이 처음 적용된 예이다.


1. Input은 32 x 32 x 1 이고, 여기에 5 x 5 x 1인 filter를 stride 1로 적용한다.

2. 1번을 수행하면 28 x 28 x 6 의 Activation map이 나온다.

3. 2 x 2 filter와 Stride 2로 Pooling(Subsampling)을 한다. -> Output은 14 x 14 x 6 이다.









그 다음은 Alex Net이다.

1. 입력은 227 x 227 x 3 이다.

2. First Layer(CONV1)에서 96개의 11 x 11 x 3 filter를 stride 4로 적용한다.   ->(11*11*3*96 = 35K)개의 파라미터(weight variable)이 필요 함

3. 2번에 대한 Output size는 55 * 55 * 96이다.







4. Second Layer(POOL1)에서 3x3 filter를 stride 2로 적용한다.

5. 4에 대한 Output은 27 x 27 x 96이다.

6. Pooling(Subsampling)이기 때문에 파라미터 개수는 0이다.







CONV1과 POOL1 이후에도 계속해서 이어진다.








Alex Net의 전체적인 Layer이다.

중간 중간 NORM(Normalization Layer)가 있는데, 최근에는 Normalize를 굳이 안하는 추세라고 한다.


CONV, POOL을 반복하다가

MAX POOL3를 통과시켜 나온 6 x 6 x 256이라는 값을 FC6에 통과시킨다. -> 4096개의 출력을 만들어냄.

마지막으로 FC8에 통과시키면 1000개의 값이 나오고 classify를 수행하게 된다. (1000개의 Label 중 하나 맞히는 것임) 









AlexNet을 정리해보면 다음과 같다.

1. AlexNet에서 처음으로 ReLU를 개발해서 사용했다.   -> 잘 동작하였음

2. Drop out을 사용하였다. (0.5)

3. 7개의 CNN Ensemble을 이용하여서 오류를 18.2% 에서 15.4%로 3%정도 줄였다.









다음은 GoogLeNet이다. 오류를 6.7% 까지 줄였다.

병렬적으로, CONV나 POOL을 하는 재미있는 구조이다.

빨간색 부분과 같은 단위를 Inception module이라고 한다.












마지막으로 ResNet이다. 오류를 3.6%까지 줄였다. (사람의 에러는 5% 정도라고 한다.)

ResNet은 Layer가 굉장히 많다는 특징이 있다. -> 152Layer


Layer가 매우 깊어서, 학습하기 어려울 것(ReLU를 사용하고 초기 값을 잘 준다고 하더라도)이라는 생각을 할 수 있지만

예전에 설명했던 FastForward를 이용하기 때문에 19Layer를 갖고 있는 VGG보다 더 빠르다고 한다.









FastForward가 왜 학습이 잘 되는지는 정확히 밝혀진 바가 없다고 한다.










FastForward 구조이기 때문에 Layer가 매우 깊지만 실제 학습할때는 Layer가 그렇게 깊지 않은 느낌으로 학습할 수 있다.









ResNet에서 FastForward하는 것이 GoogLeNet과 좀 유사해 보인다.












CNN으로 image 뿐만 아니라 text에 대한 classify도 할 수 있다고 한다.













알파고도 CNN을 이용하였다.







알파고에 대한 논문이다. 읽어보면 어떤 형태로 Network이 구성되었는지 알 수 있을 것이다.

Input에서 19 x 19 -> 바둑판 크기임


'ML' 카테고리의 다른 글

ML 이론 강의 필기 - 4  (0) 2018.11.12
ML 이론 강의 필기 - 3  (0) 2018.10.27
ML 이론 강의 필기 - 2  (0) 2018.10.17
ML 이론 강의 필기 - 1  (0) 2018.10.17
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함