[Machine Learning] CS231N #5 Convolutional Neural Networks

2023. 10. 16. 01:26Run/Machine Learning

 

Stanford University CS231n, Spring 2017

CS231n: Convolutional Neural Networks for Visual Recognition Spring 2017 http://cs231n.stanford.edu/

www.youtube.com

 

 

Mark I Perceptron
(1957, Frank Rosenblatt)
- Perceptron 알고리즘을 구현한 최초의 기계
- Wx + b 와 유사한 함수 사용
- 가중치 W update하는 back propagation과 유사한 update rule 사용
Adaline/Madaline
(1960, Widrow and Hoff)
- 최초의 multilayer perceptron network
- Neural network layer와 비슷한 모양이나 back prop 같은 학습 알고리즘 없었음
First back-propagation
(1986, Rumelhart)
- 최초로 network 학습시키는 것에 관한 개념 정립 시작
DNN
(2006, Hinton and Salakhutdinov)
- DNN이 효과적임을 보였으나 현재와 다름
Neural Network
(2012, Geoff Hintin Lab)
- Acoustic modeling과 speech recognition에서 nn이 매우 좋은 성능 보임
- Neural Network 열풍
...

 

Convolutional Neural Networks

CNN은 classification, retrieval(ex. 이미지 검색), detection, segmentation, image captioning 등에 사용됨

GPU를 사용한 병렬 처리를 통해 CNN을 효과적으로 학습시킬 수 있음

 

 

Fully Connected Layer

 

 

벡터를 가지고 연산함 (32x32x3 input image → 1x3072 vector)

가중치 W(3072x10) 와 벡터를 곱하고 output으로 activation(1x10. 10개의 뉴런)을 얻음

 

 

Convolution Layer

 

 

Fully connected layer과 달리 기존의 구조를 유지함 (32x32x3)

작은 filter(5x5x3)가 이미지 내에서 sliding 하며 dot product를 수행함 ($W^{T}x + b$)

(코드로 작성할 때는 벡터 형태로 쭉 stretch 한 다음 계산해서 dot product 값을 얻는 듯)

 

 

6개의 filter

 

보통 여러 개의 filter를 사용하여 각 filter마다 다른 특징을 추출함

Filter 수만큼의 activation map을 얻게 됨

 

 

 

CNN은 convolution layer의 연속된 형태임

중간중간 ReLU와 같은 activation function을 넣고, pooling layer도 넣고, 마지막에 FC layer을 넣어 score을 계산함

마지막 Conv layer의 출력(3차원)은 1차원 벡터로 stretch 되어 FC layer의 input으로 들어감

각 layer들이 계층적으로 학습함. 즉, 뒤로 갈수록 high-level feature을 학습함

 

 

 

Filter는 이미지 내에서 왼쪽 상단부터 stride만큼 이동함

보통 크기는 3x3, 5x5, 7x7이며, 이때 stride 크기는 각각 1, 2, 3임

Output 크기: (N - F) / stride + 1

 

 

 

Filter의 중앙이 닿지 않는 모서리 부분에 대해서도 값을 추출하기 위해 zero-padding을 함

 

 

Pooling Layer

 

 

Representation을 줄이고자 사용 (파라미터 수 줄이고자 사용)

Down sampling (ex. 224x224x64 → 112x112x64. Depth 변화 X)

보통 max pooling을 사용하는데, '얼마나' 필터가 활성화 되었는지 알려주므로 average pooling보다 좋음