Lecture 5 | Convolutional Neural Networks
Lecture 5 | Convolutional Neural Networks
Convolutional Neural Networks
AI history
- Frank Rosenblatt (~1957): Perceptron을 처음 만듬
- Widrow and Hoff (~1960): Multilayer Perceptron Network
- Rumelhart (1986): First time back-propagation became popular (처음으로 학습을 시킨다는 개념을 도입)
- Abdel-rahman Mohamed, George Dahl, Geoffrey Hinton (2010): Acoustic Modeling using Deep Belief Networks (음향 모델링)
- George Dahl, Dong Yu, Li Deng, Alex Acero (2012): Context-Dependent Pre-trained Deep Neural Networks for Large Vocabulary Speech Recognition (음성인식 DNN)
- Alex Krizhevsky, Ilya Sutskever, Geoffrey E Hinton (2012): Imagenet classification with deep convolutional neural networks
→ 이미지넷 분류에서 최초로 NN을 사용했고 성능이 우수했다.
CNN history
- Hubel & Wiesel (1959 ~ 1968): 일차시각피질의 뉴런에 관한연구
→ 뉴런이 oriented edges와 shapes같은 것에 반응한다는 것을 알아냈다.
→ 피질 내부에 topographical mapping(지역적인 매핑)이 있다는 결론을 보여주었다.
→ 시각 피질이 hierarchical organization을 갖는다는 것을 알아냈다.

또한 Retinal ganglion cell → simple cells → Complex cells → Hypercomplex cells로 전달됨에 따라 더욱 복잡한 것들에 반응 한다는 것을 알아 냈고 이런 결과로 corner나 blob에 대한 아이디어를 얻기 시작했다.
- Fukushima (1980): neocognitron은 hubel과 wiesel이 발견한 simple/complex cells의 아이디어를 사용한 최초의 NN이다.
- LeCun, Bottou, Bengio, Haffner (1998): Gradient-based learning applied to document recognition (LeNet)
→ 실제 우편 서비스에서 우편번호 인식에 널리 사용되었다.
- Krizhevsky, Sutskever, Hinton (2012): ImageNet Classification with Deep
Convolutional Neural Networks (AlexNet)

이 후 오늘날 CovNet는 많은 곳에서 사용하고 있다.
ex. Classification, Retrieval, Detection, Segmentation, Image Captioning...등등
Convolution Layer
지금까지 우리가 배운 Fully Connected Layer는 다음과 같다.

- 32x32x3의 이미지가 있을 때 이 이미지를 넓게 펴준후 가중치를 곱해 계산한다.
- 모든 input에 대하여 각 element의 대응하는 W값을 곱하여 연산한다.
그러면 이제 Convolution Layer는 어떻게 다른지 살펴보자.

FC layer와 Conv layer의 가장 큰 차이점은 Conv layer는 preserve spatial structure된다는 것이다.
→ 이것은 Conv layer가 FC layer와는 다르게 strech를 하지않고 그대로 input으로 사용한다는 것을 의미한다.
또한 Conv layer는 이미지를 슬라이드해 나가면서 내적연산을 하는 filter를 사용한다.

이 filter는 FC layer에서 W(가중치)역할을 하고 depth는 항상 input과 동일한 depth를 사용한다.
이렇게 연산한 Conv layer의 결과는 activation map이라는 것을 만든다.

- activation maps은 filter를 어떻게 slide하는지에 따라 크기가 결정된다.
- 또한 activation maps의 개수는 filter의 개수에 따라 결정된다.
다음과 같은 Conv layer의 예시를 살펴보자.

- input: 32x32x3의 image
- filter: 5x5x3 6개
- activation maps: 28x28x6
32x32x3의 image에 5x5x3의 filter를 6개사용해서 28x28x6의 activation map(new image)이 만들어 진것을 볼 수 있다.
Convolution Network

Convolution Network는 이러한 Conv layer들을 연속적으로 쌓아서 만든 것이다.
- Conv layer와 filter를 연산해 나온 값을 활성화 함수 ReLU에 넣고 그 값을 다음 layer의 전달한다.
Filter

- 각각의 layer에서 연산된 filter들은 각기 다른 feature들을 가지고 있고 층이 깊어 질 수록 high-level의 feature들을 볼 수 있다.
→ 이것은 Hubel & Wiesel의 연구 결과와 일치한다.
- 또한 여기서 이미지가 filter와 비슷하게 생겼으면 출력 값을 크게 갖는다.
→ filter의 모양(숫자)과 이미지의 filter만큼의 크기의 모양(숫자)이 비슷하면 출력 값이 크다. (?)
Activation map

- 하나의 필터당 하나의 activation map을 만든다.
- activation map은 이미지 중 어느 위치에서 이 필터가 크게 반응하는지를 보여준다.
→ activation map을 보면 각 filter가 찾고자하는 feature가 어느 부분에서 크게 나타나는 지를 알수있다.
정리
- filter의 시각화: 어떤 특징을 찾고자 하는지 알 수 있음
- activation의 시각화: filter가 찾고자 하는 특징이 이미지에서 어디서 크게 나타나는지 알 수 있음
Example

- 각각의 layer를 지나 최종적으로 이미지 분류를 한다.
Stride
위에서도 설명했듯이 Conv layer는 filter가 어떻게 slide하느냐에 따라 activation map의 dimension이 결정된다.
Stride란?
filter를 적용한느 위치의 간격이다.
다음과 같은 예시를 살펴보자.

- input: 7x7
- filter: 3x3
- srtide: 2
이러한 조건이 있을 때 아래와 같은 연산을 수행할 것이다.

위와 같은 연산은 3x3의 output을 만든다.
그럼 아래와 같은 예시에서는 어떻게 될까 살펴보자.

- input: 7x7
- filter: 3x3
- stride: 3
→ 결론적으로는 수행이 불가능 하다.
따라서 input의 size, filter의 size, stride에 대한 output의 size는 다음과 같은 공식을 같는다.

- 공식을 통해 나온 output의 값이 정수형태여야만 연산 수행이 가능하다.
stride를 크게 하는 것은 이미지를 다운샘플링 하는것과 같고 이것은 Pooling을 수행하는 것과 비슷하다. 하지만 이 두개는 확실히 다르고 pooling보다 더 좋은 성능을 보이기도 한다.
또한 activation map의 사이즈를 줄이는 것은 모델의 전체 파라미터의 갯수에도 영향을 준다.
Padding
stride와 마찬가지로 padding 역시 output의 size에 영향을 준다.
Padding이란?
Conv 연산을 수행하기 전에 입력데이터 주변을 특정 값(보통 0)으로 채우는 방식이다.
다음과 같은 예시를 살펴보자.

- input: 7x7
- filter: 3x3
- stride: 1
- padding: 1
위와 같은 조건에 대한 연산 결과는 7x7의 output을 만들어 낸다.
일반적인 패딩 사이즈 결정방법
- filter: 3x3 → padding: 1
- filter: 5x5 → padding: 2
- filter: 7x7 → padding: 3
이렇게 padding을 사용하는 것은 Conv layer의 연산이 수행될때마다 전달되는 값의 크기가 수축되는 것을 막아 모델이 잘 동작하도록한다.
Example



Neuron view

Neuron은 각각의 neuron들이 local connectivity을 띄지만 Conv layer에서는 같은 filter들이 slide하면서 내적연산을 수행한다.

또한 위와 같이 Conv 연산을 통해 28x28x5의 activation이 나왔다고 할 때 각각의 5개의 필터는 이미지에서 같은 지역을 돌더라도 서로다른 특징들을 추출한다.
Receptive fild란?
한 뉴런(필터)이 한 번에 수용할 수 있는 영역
Pooling layer
Pooling layer는 이미지의 크기를 조절해 다루기 쉽게 만든다.

- Pooling layer를 거치면 크기는 변하지만 depth는 변하지 않는다.
Max Pooing
Max pooling은 Pooling방법중 하나이며 이 외에도 average pooling, min pooling등이 존재한다.

과정
- max pool의 filter만큼의 공간에서 가장 큰값을 고른다.
- 이 때 filter의 stride는 filter의 크기만큼 수행한다.
다른 pooling보다 max pooling을 사용하는 이유
- 우리가 다루는 값은 얼마나 이 뉴런이 활성화 되어 있는지다. 즉, Max Pooling은 그 지역이 어디든 어떤 신호에 대해 얼마나 그 뉴런이 활성화 되어있는지를 알려준다.
- stride vs pooling
- 요즘에는 stride를 선호하고 더 좋은 성능을 보인다고 한다.
Fully Connected Layer
Convolution Network에 마지막은 FC layer로 이루어져있다.
Syllabus
Youtube
'Deep Learning > cs231n' 카테고리의 다른 글
| Lecture 7 | Training Neural Networks II (0) | 2022.02.13 |
|---|---|
| Lecture 6 | Training Neural Networks I (0) | 2022.02.05 |
| Lecture 4 | Introduction to Neural Networks (0) | 2022.01.21 |
| Lecture 3 | Loss Functions and Optimization (0) | 2022.01.15 |
| Lecture 2 | Image Classification (0) | 2022.01.14 |



