이 그림의 Object가 새라는 것을 판별하는 분류기를 구하려면? (CNN Motivation)
이미지에서 Object Detection을 위한 Artificial Neural Networks 구조는 다음과 같다.
이미지는 matrix므로 flattening을 해서 ANN구조로 만들고 bird로 분류하면...?
MNIST dataset같은 경우는 잘 동작할지는 모르겠으나...
이는 BEST가 아니다.
왜?
우리가 다루고 있는 것은 이미지이다.
flattening이라고 하면 오른쪽 빨간점과
왼쪽의 빨간점이 계속 쭉 이어지는 구조이다.
첫번째 빨간줄의 날개 부분과
두번째 빨간줄의 날개 부분이
flattening을 하면 데이터가 떨어져 있다.
이미지 상으로는 이미지에서는 거의 관련이 없다고 볼 수 있다.
한참 떨어져 있는 데이터가 같은 데이터라고 학습이 될 수 있겠으나 매우 이상적인 경우이다.
우리는 박스형태로 이미지를 본다.
Fully Connected Neural Network(ANN)은 공간적인 정보를 활용하지 않는다.
flattening을 함으로써, 공간적인 정보가 파괴가 된다.
어떻게 하면 공간적인 구조를 네트워크에 알려 줄 수 있을까?
Convolution Mask(Kernal) + Neural Network를 사용하자.
대부분의 이미지 상의 Object는 전체에 있지 않고 일부에 위치한다. locality가 있다.
모든 픽셀을 다 보는 것보다 지역적인 면을 봐야 한다.
마스크를 크게 씌우는 것보다 작게 씌워서 전체를 훑으면 된다.
이러한 마스크 사이즈를 receptive field라고 한다.
(receptive field : 필터가 한번 보는 영역으로 사진의 feature를 추출하기 위해선 receptive field가 높을수록 좋다)
새를 잡아내는 커널을 찾았다고 하자.
새를 잡아내는 커널은 같은 커널을 쓰면 된다.
커널이 달라야할 이유가 없다.
그래서...같은 커널을 쓰면 된다. 이것이 weight sharing이다.
커널의 weight값들이 있을 것
새라는 Object를 찾기 위해선 $ \omega $가 같아야한다.
다른 걸 쓰면 18개 weight를 사용해야하는데
같은 걸 쓰면 9개 weight를 사용하게 된다.
파라미터의 개수가 적어지니 학습할 때 모델이 간단해진다.
새가 어디에도 있을 수 있다. 커널로 element-wise하게 훑으면 된다.
커널을 디자인하는 것이 아니라, 데이터에서 커널을 찾게 되는 것이다.
데이터로부터 피쳐추출하는 것을 학습하는 것이다.
간단한 비교
Deep Artificial Neural Networks
Universal function approximator 또는 classifier이다.
간단한 비선형 뉴런으로 이루어져있고
Linear connected networks이다.
Hidden layers에서 학습이 일어나서 autonomous하게 feature가 학습된다.
Convolution Neural Networks
구조에 Weight sharing이 있다. 같은 Object를 발견할 때 같은 Filter(mask)를 쓴다.
공간상으로 Local connectivity가 있다. 그래서 sparse하다.
전부 연결되어있을 때보다 훨씬 더 sparse하다.
CNN이 ANN보다 structure보다 가볍다.
그 말은 즉, 찾아야하는 $ \omega $가 적다.
$ \omega $는 kernel의 element라 생각하면 된다.
제일 끝단에서는 fully connected를 해서 classify하면 된다.
https://zzsza.github.io/data/2018/02/23/introduction-convolution/
'머신러닝과 딥러닝' 카테고리의 다른 글
패딩(Padding)과 스트라이드(Strides)와 풀링(Pooling) (0) | 2020.01.07 |
---|---|
콘볼루션에서의 커널 (0) | 2020.01.07 |
이미지에서의 콘볼루션 (0) | 2020.01.06 |
콘볼루션의 정의와 예시 (0) | 2020.01.06 |
퍼셉트론(Perceptron)은 왜 동작을 하는가? (0) | 2020.01.06 |