※ 본 내용은 stanford에서 제공하는 cs231n 강의, 강의자료를 바탕으로 작성하였습니다.
Lecture5에서는 Convolutional Neural Network이 무엇이고, 어떻게 동작하는지에 대해 설명하고 있다.
- History
먼저 CNN의 역사에 대해 설명하고 있다.
다양한 이미지를 보여주면서 고양이의 뇌파를 추적해본 유명한 실험이다.
각각의 모양, 특징마다 반응하는 영역이 달랐다.
이후 초기의 CNN구조에 대한 연구에서도 층을 hierical하게 쌓고, sandwich 구조를 통해
간단한 특징과 복잡한 특징에 대해 구분되어 반응할 수 있도록 설계하게 된다.
이어서 AlexNet과 같은 최근의 구조를 설명하고,
다양한 쓰임(classification, 동작 인식, segmentation 등)에 대해 간단하게 소개하고 있다.
- 구조
● Convolution Layer
먼저 기존의 Nueral Network에서 다뤘던 layer인 fully connect layer는 input을 하나의 vector로 전환하고, weight vector와 곱하여 output을 출력한다.
이와 다른 Convlution Layer의 가장 큰 특징은 input의 spatial structure를 유지한다는 것이다.
기본적으로 Filter가 input image의 각 영역을 slide하며 연산을 수행하게 된다.
위 이미지는 32x32x3 크기의 이미지의 하나의 영역과 5x5x3 filter의 연산을 나타내는 이미지로, 각 영역마다 하나의 값을 출력하게 된다.
연산 내용을 벡터로 나타내고 있는데, elementwise 곱의 sum과 동일하다.
(※ 사실 기존에 convolution 연산에서 필터와 각 영역의 elementwise곱을 하는 것이 어떤 의미인지 정확히 감이 안왔었는데, 내적으로 이해하면 filter가 특정 영역에 반응한다는 것이 어떤 의미인지 더 와닿았다.)
stirde = 1 이라고하면 출력은 28x28x1 이 될 것이고, 또 다른 필터를 적용하면 새로운 28x28x1 output이 출력될 것이다.
(stride : filter가 이동하는 보폭)
※ 수업 질문 :
Q) stride 설정 시 고려할 점은 무엇인지?
A)
downsampling : pooling과 같은 효과를 stride를 통해서도 얻을 수 있음.
# of parameters : 전체 모델의 parameters 수를 줄일 수 있음.
그러나 stride를 늘려 parameter를 줄이는 것은 information loss이므로, 성능에는 안 좋을 수 있음.
(모델 크기-복잡도 trade-off)
ConvNet은 기본적으로 위와 같은 구조를 갖게 된다.
앞서 간단한 특징부터 복잡한 특징까지 서로 다른 영역이 반응한다고 했는데, CNN 역시 그런 특징을 보인다.
VGG-16(CNN 모델)의 학습된 Weight를 시각화한 결과이다.
앞의 layer의 weight일수록 '선'과 같이 비교적 low-level feature를 보이고, 깊어질수록 high-level feature를 보인다.
Pooling에 대해서는 아직 다루지 않았지만, 결국 CNN의 원리를 다음과 같이 정리할 수 있다.
(1) 각 filter별로 학습된 weight는 feature에 대한 정보이다. 즉, 각 filter별로 어떠한 특징에 반응한다.
('Deep learning에서는 feature를 스스로 학습한다'는 의미가 더욱 와닿는다.)
Convolution 연산을 거치며 주어진 image에서 해당 feature 관련 정보를 추출한다.
(2) 깊은 layer의 filter일수록 복잡한 feature 정보를 추출한다.
(3) 마지막 layer에서 각 feature 정보를 종합한 새로운 feature(사람이 이해하기 어려운)가 출력될 것이고, 해당 feature를 통해 fully connect layer를 거쳐 classification을 진행한다.
● Padding
stride = 3, 7x7 크기의 이미지라면 3x3 크기의 필터를 적용할 수 없을 것이다.
따라서 상하좌우로 0을 채워 이미지 크기를 조정할 때, zero padding을 사용한다.
7x7 크기의 이미지에 pad = 1을 적용한 후, 3x3 filter를 거치면 output은 input의 shape와 동일한 7x7 이미지가 된다.
이처럼 output 크기를 조정하기 위해서도 padding은 사용된다.
Input의 크기, filter의 크기, padding 정보 그리고 stride 값이 주어질 때, output의 크기는 위와 같이 공식화 할 수 있다.
● Pooling layer
Pooling layer는 학습되는 layer는 아니다.
연산을 통해 image를 downsampling하는 등의 역할을 수행한다.
대표적으로 max poling 연산이 있다.
※ 수업 중 나온 질문 :
Q) Average pooling보다 max pooling이 선호되는 이유?
A) Average pooling도 사용할 수 있다. 다만 max pooling을 사용하면 어떤 특징에 response하는지 안하는지에 대해서 좀 더 집중할 수 있을 것이다.
● Fully Connected Layer
앞서 정리한 것처럼, convolution layers를 거치며 추출된 정보를 input하는 일반적인 nueral network처럼 동작한다.
※ 수업 질문 :
Q) 그럼 언제쯤(얼마나 많은 convolution layer를 지나고) fully connected layer를 삽입해야되는지?
A) 실험적으로 결정해야 된다.
각 layer의 의미를 고려하면서 여러 실험을 진행하면 좋다.
'Computer Vision > cs231n' 카테고리의 다른 글
[Lec 7] Training Neural Networks, Part2 (0) | 2022.01.15 |
---|---|
[Lec6] Training Neural Networks, Part 1 (0) | 2022.01.10 |
[cs231n] Assignment1-Q5 (0) | 2022.01.01 |
[Assignment1 - Q4] 2-layer NN (0) | 2022.01.01 |
[Lec 4] Backpropagation and Neural Network (0) | 2021.12.30 |