CS231n 5강. Convolutional Neural Networks
Stanfoard CS231n 2017를 요약한 포스팅입니다. 정보 전달보다 자신을 위한 정리 목적이 강한 글입니다! :)
Convolutional Neural Networks
History
- 1957, Perceptron
- 1960, Adaline, Madaline
- 1986, First time back-propgation became popular
- 2006, Reinvigorated(활력을 되찾은) research in Deep Learning
- 2012, Imagenet clssification with deep convolutional neural networks
- Hubel & Wiesel의 실험
- Visual Cortex가 어떻게 동작하는지 밝혀내려고 했습니다
- 고양이 머리에 전극을 부착하소 서로 다른 시각적 자극을 주었을 때 어떻게 반응하는지 관찰합니다
- 찾아낸 결론
- 하나의 영상(시야)엔 Visual Cortext 내의 여러 세포들이 각자 부분을 담당해 인지합니다
- 중요한 Region은 붉은 색 세포에, 덜 중요하고 주변적인 Region은 파란색 세포에 매핑
- 인지 과정이 계층적으로 일어납니다(Hierarchical organization)
- Neurocognition
- Hubel & Wiesel의 실험에 영감을 받아 Simple cell과 Complex cell의 구조를 본떠서 만들었습니다
- 하지만 Backpropagation 방법론 등장 전..!
- 최초로 CNN 구조를 Backpropgation을 사용해 학습!
- zip code
- 그러나 데이터가 단순하고 스케일이 작음
- AlexNet
- 1000개의 클래스를 분류하는 ImageNet 대회에서 CNN 모델로는 최초로 1등!!
- LeNet에 비해 Larger & Deeper
- 데이터의 양에 비례해 Scalable하며 GPU를 이용한 병렬 연산
Convolutional Neural Networks
- 제가 작성했던 Introduction Convolution도 꽤 도움이 됩니다!
Fully Connected Layer
- Fully Connected Layer는 이전 Layer의 모든 노드와 연결되어 있습니다. 따라서 Spatial Structure(공간적 구조)를 보존하기에 좋은 구조는 아닙니다
Convolution Layer
- Spatial Structure(공간적 구조)를 보존해줍니다
- 작은 필터로 이미지를 슬라이드하며 dot product를 실행합니다
- Filter가 슬라이딩한 것의 결과 : Acitvation Map
- Convolution Network는 a sequence of Convolutional Layers, interspersed with activation functions
- 각 레이어의 Activation map들을 시각화해보니 Heirarchical하게 Feature를 추출하고 있습니다
A Closer look at spatial dimensions
- Q) Stride를 3을 주면 output의 size는 얼마나 될까?
- A) Doesn’t fit! : cannot apply 3x3 filter on 7x7 input with stride 3
- Output size : (N-F) / stride + 1
Zero Padding
- output의 size는 7x7!
- zero padding을 1 추가하면 3x3 filter 사용 가능!
- zero padding = (F-1)/2
- F = 3 => zero pad with 1
- F = 5 => zero pad with 2
- F = 7 => zero pad with 3
- 사용하는 이유
- 1) 원본 이미지 사이즈를 유지하기 위해
- 2) 가장자리 데이터를 사용하기 위해
Examples
Convolution Layer Summary
1x1 Convolution
- Filter의 갯수에 따라 output의 dimension(depth)은 달라지지만, 기존 이미지 가로 세로의 사이즈는 그대로 유지됩니다
- Filter의 갯수를 input의 dimension보다 작게하면, dimension reduction의 효과가 납니다
- Image에서 Convolution layer는 Spatial Relation을 고려했다면, 1x1 Convolution layer는 한 픽셀만 고려하기 때문에 dimension reduction(차원 축소) 역할을 위해 사용합니다
The brain/neuron view of CONV layer
- 차이점 : local connectivity
- entire input 대신 local region만 봄(모든 뉴런들을 연결하는 것이 비실용적이기 때문)
- Spatial structure를 보존
- Activtion map is 28x28 sheet of neuron outputs
- Each is connected to a small region in the input
- All of them share parameters
- “5x5 filter” => “5x5 receptive field for each neuron”
Pooling layer
- Activation map마다 독립적으로 크기를 downsampling
- 특정 부분의 주변값을 대표하는 하나의 값을 뽑습니다
- Output dimension이 작아지며 Parameter수를 줄입니다
- 그 결과 더 작고 다루기 쉽게 만들 수 있습니다
MAX Pooling
- (2x2 filter를 사용하는 경우) 전체 데이터의 75%를 버리고 25%만 선택
- Computational Complexity 감소
- Filter 내에서 가장 큰 값을 선택
- Average Pooling은 평균값을 선택. Spatial Structure를 보존하되 이미지가 smooth해짐. Max Pooling은 더 강한 특징만 남기는 방식
Depth를 줄이지 않고 Spatially하게만 줄임(Height & Width)
- Q) stride와 pooling 모두 downsampling인데 어떤 것을 사용해야 하나요?
A) 최근 CNN 아키텍쳐는 stride를 사용하는 편이 많습니다. stride 추천합니다
- 힌튼 교수님이 추후에 캡슐넷에서 맥스 풀링의 단점을 이야기했었음! check
Fully Connected Layer (FC layer)
- Contains neurons that connect to the entire input volume, as in ordinary Neural Networks
Summary
- ConvNets stack CONV, POOL, FC layers
- Trend towards smaller filters and deeper architectures
- Trend towards getting rid of POOL/FC layers (just CONV)
- Typical architectures look lik [(CONV-RELU)*N-POOL?]*M-(FC-RELU)*K,SOFTMAX
- WHERE N is usually up to ~5, M is large, 0<=k<=2
- but recent advanced such as ResNet/GoogLeNet challenge this paradigm
Reference
카일스쿨 유튜브 채널을 만들었습니다. 데이터 사이언스, 성장, 리더십, BigQuery 등을 이야기할 예정이니, 관심 있으시면 구독 부탁드립니다 :)
PM을 위한 데이터 리터러시 강의를 만들었습니다. 문제 정의, 지표, 실험 설계, 문화 만들기, 로그 설계, 회고 등을 담은 강의입니다
이 글이 도움이 되셨거나 다양한 의견이 있다면 댓글 부탁드립니다 :)