[DL] CS231n Lecture 5 : Convolution Neural Networks
카테고리: DL
1. Convolution Neural Network
CNN은 보통 위와 같은 구조로 동작한다.
Conv와 RELU가 반복되고 중간에 Pooling이 있고 마지막에 FC를 통해 최종적인 Score를 계산한다.
이번 강의에서는 각 Layer에 대해서 알아본다.
2. Fully Connected Layer (FC)
Fully Connected Layer (FC)는 어떠한 벡터를 가지고 연산을 하는 것이다.
먼저 32X32X3 이미지를 하나의 3072 차원의 벡터로 만든다.
그리고 W와 내적연산을 통해 계산한다. 위의 경우에서는 10개의 값이 나오게된다.
3. Convolution Layer
Convolution Layer와 FC Layer의 주된 차이점은 이미지를 늘려 하나의 벡터로 만드는 것이 아니라 기존의 이미지 구조를 그대로 사용한다.
그리고 filter로 Weight의 역할을 수행한다. (filter는 전체 depth의 크기를 갖는다.)
1 number를 계산하기 위해서 image와 filter(W)의 내적연산을 진행한다. 그리고 한 filter를 전부 연산하면 activation map을 얻을 수 있다.
필터는 슬라이딩하면서 내적연산을 통해 activation map들을 만들어낸다. 위의 경우에서는 1씩 이동을 해서 28x28x1로 되었고, 슬라이딩 하는 방식을 선택하는 것에 따라 map의 크기는 달라질 수 있다.
같은 방식으로 여러개의 필터를 통해 계산한다. 필터마다 다른 feature를 추출하기 위해서 여러개의 필터를 사용한다.
정리를 해보면, 각 Layer는 여러개의 필터를 가지고 있고, 각 필터마다 각각의 출력 maps을 만든다. 그러므로 여러개의 Layer들을 쌓고보면 결국 필터들이 계층적으로 학습하는 것을 알 수 있다.
Layer의 계층에 따라 simple or complex한 feature들이 존재한다. Conv Layer를 계층적으로 쌓아서 단순한 feature들을 뽑고 이것을 조합해 더 복잡한 특징으로 활용했다.
위의 자동차 이미지의 예시를 보면, 5x5 필터가 32개가 있다. 그리고 그에 따른 연산 결과인 Activation map도 32개가 나온다. 첫번째 filter는 edge feature를 검출하기 위한 filter이다.
이 필터를 슬라이딩 시키면 필터와 비슷한 값들은 더 커지게 된다. 즉, 이미지 중 어느 부분에서 이 필터가 크게 반응하는지를 알 수 있다.
이것을 Convolution이라고 부르는 이유는 두 신호 사이를 convolution하는 것과 비슷하기 때문이다.
3.1 Spatial dimension
7x7에 3x3 필터를 적용하려면 위 이미지 처럼 슬라이딩 하면서 계산된다. 그러면 결과로 5x5 output을 얻게 된다. (Stride=1)
만약 Stride=2 로 슬라이딩을 한다면 위와 같이 이동하게 된다. 즉, 3x3 output을 얻게 된다.
그렇다면 Stride=3의 경우는 어떨까?
이 경우에는 필터가 이미지의 전체를 커버할 수 없기 때문에 7x7에 적용하기에 적합하지 않다. 이렇게 되면 제대로 동작하지 않는다.
적용가능한 Stride를 구할 수 있는 수식이 있다.
3.2 zero padding
Zero padding을 사용하면 output을 input size에 맞게 유지를 할 수있다. zero padding을 사용하지 않으면 여러 Layer를 거치면서 나온 activation map의 size가 점점 작아지게 될 것이다.
3x3 filter를 stride 1로 구하면 output은 5x5이다. 이렇게 되면 코너 부분이 제대로 커버가 안될수 있다. zero padding을 하고 앞서 살펴 본 공식으로 구해보면 (N-F)/stride + 1인데 이때의 N이 7에서 9로 되는 것이다. 그러므로 7x7 output을 얻을 수 있다.
3.3 Example
Input volume: 32x32x3, 10 5x5 filters with stride 1, pad 2 인 경우
- output volume size = (32+2*2-5)/1+1 = 32 이므로 32x32x10
- Number of parameters in this layer = each filter has 5x5x3 + 1 = 76 params
- bias가 있다는 것을 기억해야한다.
3.4 Summary
Conv Layer를 사용하기 위해선 위와 같이 값을 설정해야 하는 하이퍼파라미터가 있다.
보통 사용하는 조합은 위와 같다.
1x1 convolution은 5x5 처럼 spatial feature를 사용하지 않고 depth에 대한 내적을 연산하는 것이다.
4. Pooling Layer
Polling layer는 representation들을 더 작고 관리하기 쉽게 만들어 준다. 즉 downsampling을 하는 것인데, 중요한 점은 spatial하게 줄이는 것이고 depth는 변하지 않는다는 것이다.
conv layer의 stride와 하는 역할이 비슷하다.
일반적으로 pooling은 MAX pooling으로 진행한다.
마찬가지로 필터의 사이즈와 stride를 선택할 수 있다. 대신 차이점은 내적 연산을 진행하는 것이 아니라 filter 안의 값 중에 가장 큰 값을 선택한다.
pooling을 진행할 때는 downsampling을 하는 것이 목적이므로 필터가 겹치지 않게 한다.
Max pooling은 그 지역이 어디든, 어떤 신호에 따라 그 필터가 얼마나 활성화 되었는지를 알려준다. 그 값이 어디 있었는지가 중요한게 아니라 얼마나 큰지가 중요하다.
average pooling이 아닌 max pooling을 사용하는 이유는 위에 나타나있는 값들은 이 뉴런이 얼마나 활성화되었는지를 나타내는 값이다. 즉, 이 필터가 각 위치에서 얼마나 활성화 되었는가이다.
pooling의 경우 downsampling 하는 것이 목적이기 때문에 일반적으로 padding을 진행하지 않는다.
5. Fully connected Layer
마지막 Conv의 output은 3차원 volumn으로 나온다. 이것을 전부 펴서 1차원 벡터로 만들어 FC Layer의 input으로 넣는다. 그렇게 되면 Conv Net의 모든 출력을 서로 연결하게 된다.
마지막 layer에서는 spatial structure는 고려하지 않는다. 전부 다 하나로 통합시키고 최종적인 추론을 하게 된다. 그렇게 되면 최종적인 Score가 출력으로 나오게 된다.
댓글남기기