CNN의 역사
1957 : Mark 1 Perceptron
1960 : Adaline/Madaline – 최소의 multilayer perceptron network
1986 : Rumelhart가 최소의 Backpropagation을 제안
2006 : 다시 Deep Learning이 활기를 갖기 시작하였다. 하지만 아직까지도 modern한 Neural network가 아니여서 backprop을 하기 위해선 세심하게 조정 해야 됬다.
2012 : ImageNet classification에서 최초로 NN을 사용
Hubel Wiesel – 고양이 뇌에 전기 자극을 주어서 뉴런이 어떻게 반응하는지 확인하였다.
Neocognitron – simple/complex cells의 아이디어를 사용한 최초의 NN이다.
그 외 여러 가지 역사들이 있다.
> LeNet은 최초로 NN을 학습시키기 위해서 Backprop과 gradient-based learning을 적용하였으며 문서인식에 활용되었다.
> AlexNet이 뛰어난 성능으로 CNN의 현대화 바람을 일으켰다.
> input image(32* 32* 3)를 stretch out을 한 뒤 weight를 곱하여 activation을 만들어준다.
> input image를 stretch out을 하기 때문에 공간정보가 많이 손실된다.
> Convolution Layer는 Fully Connected Layer와 달리 기존의 이미지의 공간 구조를 보전할 수 있다는 점이 큰 장점이다.
> Filter를 이용하여서 input image의 특징을 추출하자.
> image위에 filter올린 뒤 해당하는 필터 값을 내적하여 특징을 추출한다. 실제로 sliding을 할때 실제로는 flatten한 다음에 dot-product를 한다
> 여러 가지 필터를 사용하여 이미지의 다양한 특징들을 추출한다. 필터의 개수에 따라서 activation maps의 depth을 조정 할 수 있다. (위 예시는 6개의 필터를 사용하여 activation map의 depth는 6이다.)
> CONV의 출력은 또 다른 CONV의 입력이 될 수 있으며 이 과정을 반복하면 필터들이 이미지를 계층적으로 학습할 수 있다.
> layer가 깊어질수록 학습이 많이 진행되어 구체적인 특징들을 추출할 수 있다.
> stride가 1일 때 3x3 필터가 좌우로 5번, 상하로 5번 움직이게 되고 이에 따라 아웃풋은 5x5가 된다.
> stride가 2이면 3x3 output을 가지게 된다.
> stride가 3이면 2.333 x 2.333 output을 가지게 되고 모든 이미지를 커버하지 못하는 모습을 보인다.
> stride 크기를 조절한다면 downsample을 효과를 얻을 수 있다.
Zero pad
> 의도적으로 zero padding을 추가하여 output 크기를 조절한다. 또한 zero padding을 사용 하면 레이어를 거치면서도 입력의 사이즈를 유지할 수 있다.
> Zero padding을 추가해 이미지의 가장자리가 필터가 덜 계산되는 것을 방지하는 역할을 한다. (앞서 7x7 input, 3x3 Filter, stride 3 일때, 모든 이미지를 커버하지 못할때 사용!)
> Zero Padding을 사용하지 않을 경우 layer를 통과 할수록 Activation map은 점점 줄어들어 엄청 작아질 것이다. (정보 손실의 위험성을 가진다. 작아지면서 중요한 공간 정보들이 사라짐)
> 파라미터의 수는 필터크기와 depth에 비례하며 bias term을 더해주어야한다.
> 5 * 5 * 3 + 1(bias) = 76 * 10(필터의 수)
> filter의 개수에 따라서 output의 dimension이 달라진다.
> 1*1 Conv filter의 개수를 input의 원래 dimension보다 작게 하면 dimension reduction효과를 가진다.
> 같은 지점을 보더라도 filter에 따라서 서로 다른 특징을 뽑아 낼 수 있다.
> Pooling layer는 down sampling의 역할을 한다. Depth에는 영향을 주지 않는다.
> 기존의 layer를 resizing한다는 것은 파라미터를 줄이고 연산하고 다루기 쉽게 만들기 위함이다.
> pooling layer는 downsample에 목적이 있기 때문에 stride를 겹치지 않도록 만들어준다.
> Max pooling은 더 강한 특징을 남기는 방식, 어떤 신호에 대해서 그 필터가 얼마나 활성화 되었는지 알 수 있다.