더보기
CS231n 강의 홈페이지: https://cs231n.stanford.edu/
CS231n Spring 2017 유튜브 강의 영상: https://www.youtube.com/watch?v=vT1JzLTH4G4&list=PLC1qU-LWwrF64f4QKQT-Vg5Wr4qEE1Zxk
강의 슬라이드 & 한글 자막: https://github.com/visionNoob/CS231N_17_KOR_SUB
Recap of LeNet
- 산업에 최초로 적용된 CNN
- stride가 1인 5x5 필터
- 몇 개의 Conv layer와 pooling layer를 거치고 끝단에는 FC layer
AlexNet
- Idea
- 총 5개의 Conv layer와 2개의 FC layer로 구성
- 특정 Conv layer 뒤에 max pooling layer와 normalization layer가 위치하며 마지막에는 소프트맥스가 적용된 FC layer가 존재
- 모델의 입력 크기는 227 x 227 x 3이며 첫 번째 레이어에서는 11 x 11 크기의 필터가 96개 존재
- 출력 크기와 파라미터 개수 계산 예시
- Conv1 layer
- 출력 크기: (227 - 11) / 4 + 1 = 55이고. 필터가 96개이므로 출력 크기는 55 x 55 x 96
- 파라미터 개수: (11 * 11 * 3) * 96 = 35K. 바이어스까지 포함하면 +96
- Max Pool1
- 출력 크기: (55 - 3) / 2 + 1 = 27이므로 출력 크기는 27 x 27 x 96
- 파라미터 개수: 풀링 레이어에는 학습할 파라미터가 없으므로 0
- Conv1 layer
- Details
- ReLU 활성화 함수
- 데이터 증강과 드롭아웃을 적극적으로 사용
- 학습 시 배치 크기는 128, 초기 학습률은 1e-2에서 시작해 필요에 따라 줄어듦
- 마지막에는 모델 앙상블을 통해 성능을 향상
- GPU 분산 처리
- AlexNet은 당시 사용된 GPU 메모리 한계로 인해 네트워크를 두 개의 GPU에 분산하여 학습시킴
- Conv 1,2,4,5 레이어는 이전 레이어의 특징 맵의 절반씩 분산, Conv 3과 FC 레이어는 전체 특징 맵을 참조
- 성과
- 2012 ILSVRC 우승한 최초의 CNN 기반 모델로, 이후 다양한 딥러닝 연구의 기초가 됨
ZFNet
- AlexNet과 기본적인 구조나 모델의 깊이는 동일
- stride 크기나 필터 수와 같은 하이퍼파라미터를 조절하여 성능 개선
VGGNet
- Idea
- 이전의 AlexNet보다 훨씬 더 깊은 16 or 19개의 레이어
- 픽셀을 포함할 수 있는 가장 작은 필터인 3x3 필터만을 사용
- 작은 필터를 사용하면 파라미터 수가 적어지며 더 많은 레이어를 쌓아 네트워크의 깊이를 증가시킬 수 있음
- 3x3 vs 7x7
- 3x3 필터를 세 번 사용하면 7x7 필터를 한 번 사용하는 것과 동일한 크기의 receptive field를 가짐
- 그러나 파라미터 개수는 3*(3*3*C*C) < 7*7*C*C로 더 적음
- 이로 인해 더 깊은 레이어와 더 많은 비선형성을 부여
- Details
- 전체 파라미터 개수는 138M (AleNet은 60M)
- 마지막 FC layer인 FC7은 4096 크기의 레이어로 우수한 feature representation을 가지고 있어 다른 데이터에서도 특징 추출이 잘되고 다양한 Task에서 일반화 능력이 뛰어나다고 알려져 있음
- VGG16과 VGG19는 유사하지만, VGG19가 조금 더 깊고, 성능이 약간 더 우수하며 메모리 사용량도 더 많음
- 앙상블 사용
- 2014 ILSVRC Classification task에서 2위, Localization Task에서 우승
- Localization은 단순히 이미지를 분류하는 것뿐만 아니라 이미지 내 객체의 위치를 정확히 네모 박스로 표시하는 작업 (Detection은 여러 객체가 있을 수 있음)
GoogLeNet
- Idea
- 22개의 레이어로 구성
- FC layer 제거
- 약 5M의 파라미터 (AlexNet은 60M)
- 다양한 필터(1x1, 3x3, 5x5 Conv, Pooling)가 병렬로 존재하는 Inception Module과 보조 분류기(Auxiliary Classifier)를 사용
- Naive Inception Module
- 그림과 같이 1x1 / 3x3 / 5x5 Conv / Pooling layer가 병렬로 존재
- 각 레이어는 padding이나 stride를 조절하여 출력 해상도를 모두 동일하게 맞추고(그림의 경우 28x28), 이들의 결과를 depth-wise로 concatenation
- 그 결과 28x28x672라는 출력 크기를 얻게 되는데, Conv Ops를 계산해보면 그림과 같이 854M로 매우 큰 연산량을 가짐
- 또한 pooling layer는 출력 깊이를 보존하기 때문에 모듈을 거치면서 전체 깊이는 더욱더 커지게 됨
- Inception Modele with dimension reduction
- Conv 연산 전, pooling 연산 후에 1x1 Conv로 구성된 bottleneck layer를 사용해 입력을 낮은 차원으로 줄임으로써 계산량을 줄임
- 그림과 같이 concat을 거친 깊이는 672에서 480으로 줄어들었으며 연산량 또한 854M에서 358M로 감소
- Auxiliary Classifier
- 네트워크가 깊기 때문에 그래디언트 소멸 방지를 위해 중간 레이어에 보조 분류기를 설치해 추가적인 그래디언트를 얻음
- backpropagation은 한 번만 이루어짐
- Details
- AlexNet보다 약 12배 더 적은 파라미터
- 2014 ILSVRC 우승 (6.7% top 5 error)
ResNet
Hypothesis
- 일반적인 CNN을 단순히 깊게 쌓으면 성능이 향상되지 않는 경우가 발생함. 예를 들어 20개의 레이어를 가진 네트워크와 56개의 레이어를 가진 네트워크를 비교하면, 더 깊은 네트워크(56 레이어)가 오히려 성능이 낮음
- 이는 오버피팅 문제가 아니며(training error도 더 안 좋게 나오기 때문), 더 깊은 모델을 학습할 때 발생하는 최적화 문제라고 추측함
- 저자들은 더 얕은 모델에다가 단순히 identity mapping 역할만을 하는 레이어를 추가하면 적어도 더 약은 모델의 성능만큼은 보장되지 않을까 하는 가정으로 모델을 설계함
Residual Connection
- 이들의 해결책은 단순한 direct mapping 레이어를 쌓는 것이 아니라, 그림과 같이 skip connection을 통해 residual mapping을 하도록 모델을 설계함
- 이에 따라 모델은 H(x)를 직접 학습하는 대신 잔차(F(x) = H(x) - x)를 학습함
- 실제 레이어는 변화량(residual)만 학습하게 되면서 레이어의 출력 = 입력 + 변화량(residual)이 됨
- 이를 통해 앞서 언급한 identity mapping 효과를 내려면 단순히 F(x) = 0이 되게, 즉 모든 가중치를 0으로 만들어주기만 하면 되므로 상대적으로 학습이 쉬워짐
- 결과적으로 네트워크는 깊어지더라도 학습 성능이 저하되지 않음
Structure
- Residual Block: 두 개의 3x3 Conv Layers로 구성된 Residual Block을 반복하여 네트워크를 구성
- Global Average Pooling (GAP): 네트워크의 끝에서 각 feature map의 평균값을 계산하는 Global Average Pooling 방식을 사용하여, 별도의 FC layer 없이 곧바로 FC1000으로 연결
- Bottleneck Layer: ResNet50 이상부터는 Bottleneck Layer를 도입하여 계산 효율성을 높임. GoogLeNet의 방법과 유사하게 1x1 Conv를 사용해 feature map의 depth를 줄이고, 그 이후에 다시 확장
Details
- 152 레이어까지 시도한 ImageNet과 1200 레이어까지 시도한 CIFAR-10에서 깊은 네트워크에서도 안정적인 성능을 보임
- 3.6%의 top-5 error로 엄청난 성능을 입증, 2015 ILSVRC 우승
- ImageNet뿐만 아니라 COCO 대회의 classification과 detection 부문에서도 월등한 성능
- 34, 50, 100, 그리고 152 레이어까지 다양한 깊이로 구성될 수 있고 특히 50 레이어 이상의 모델에서는 Bottleneck Layers를 도입하여 효율성을 높임
Comparison by Architectures
- Complexity
- Forward pass time and Time consumption
Network in Network (NiN)
- Idea
- '네트워크 안에 네트워크를 삽입한다'는 개념에 기반하여 MLP를 Conv 레이어에 통합
- Details
- MLPConv Layer: 각 Conv 레이어 뒤에 MLP를 추가하여, 기존의 Conv 레이어만 사용하는 것보다 더 복잡한 계층을 만들어냄으로써 더욱 추상화된 특징을 추출
- 2014년에 소개된 NIN은 이후에 등장한 GoogLeNet과 ResNet보다 먼저 Bottleneck 개념을 제시하여 깊이 있는 네트워크 구조를 설계하는 데 중요한 기여를 함
- GoogLeNet은 NIN과 구조적으로는 다르지만 NIN에서 제안된 철학적 아이디어에서 영감을 받아 설계됨(GoogLeNet의 인셉션 모듈은 NIN의 1x1 Conv Layer와 유사)
Improving ResNets
Wide Residual Network
- Idea
- Residual Connection이 있는 한 네트워크의 깊이를 무작정 늘릴 필요가 없다고 주장
- ResNet의 깊이를 늘리는 대신 네트워크의 너비를 확장하는 데 중점을 둠
- Detaiis
- 기존의 ResNet보다 더 많은 Conv Layer 필터를 사용하여 Residual Block을 더 넓게 만듦. 예를 들어, 기존 ResNet에서 F개의 필터를 사용했다면, Wide ResNet에서는 F * K개의 필터를 사용
- 필터 수를 늘림으로써, 50개의 레이어만으로도 기존의 152 레이어 ResNet보다 성능이 우수함을 입증
- 또한 Depth를 늘리는 대신 Width를 확장하면, 병렬화가 더 잘 이루어져 계산 효율이 증가
ResNeXt
- Idea
- ResNet의 구조를 바탕으로 Residual Block에 다중 병렬 경로를 추가하여 성능을 향상시킴
- Details
- 각 Residual Block 내에 여러 병렬 경로(pathway)를 추가하고, 이들의 총합을 cardinality라고 칭함
- 상대적으로 작은 크기의 Bottleneck Block을 여러 개의 병렬 경로로 묶어 구조화
- 병렬 경로를 사용한다는 점에서 Inception Module과 유사
Stochastic Depth
- Idea
- 깊은 네트워크 그래디언트 소멸 문제를 해결하기 위해, 학습 중에 네트워크의 일부 레이어를 건너뛰는 방법을 사용
- 실질적으로 더 짧은 네트워크가 만들어져 그래디언트가 더 잘 전달됨
- Details
- 일부 레이어를 identity connection으로 대체하여 건너뜀
- 드롭아웃과 유사한 방법
- 테스트 시에는 전체 네트워크를 사용
Beyond ResNets
DenseNet
- Idea
- 모든 레이어를 서로 연결하여, 그래디언트 소멸 문제를 완화하고 특징 정보를 효율적으로 전달
- Details
- Dense Block: 한 레이어의 출력이 그 하위의 모든 레이어와 연결되며, 이를 Dense Block이라 부름
- 특정 레이어의 출력이 Input을 포함한 이전 모든 레이어의 출력과 concat 되어 다음 레이어의 입력으로 들어감
- 이 과정에서 1x1 conv로 차원을 축소하는 과정도 포함
- 이를 통해 그래디언트 소멸 문제를 완화하고, 각 레이어의 출력을 여러 번 사용함으로써 특징의 활용도가 높아짐
FractalNet
- Idea
- Residual Connection 없이도 깊고 얕은 네트워크의 정보를 모두 전달하는 데 중점을 둠
- Details
- 그림과 같이 복잡한 fractal 구조를 통해 다양한 경로를 구성하며 이를 통해 정보를 전달
- 드롭아웃과 유사하게 학습 시에는 다양한 경로 중 일부 경로만을 사용하여 학습을 진행하고, 테스트 시에는 전체 네트워크를 사용하여 최종 성능을 확인
SqueezeNet
- Idea
- 효율성을 극대화한 네트워크로, 적은 파라미터로도 높은 성능을 발휘
- Details
- Fire Module: SqueezeNet의 핵심 구성 요소로, 1x1 필터로 구성된 Squeeze Layer와 1x1 및 3x3 필터로 구성된 Expand Layer로 구성됨
- Squeeze Layer의 출력이 Expand Layer의 입력으로 들어감
- AlexNet과 유사한 정확도를 보이면서도, 파라미터 수는 50배 더 적음. 추가적으로 모델을 압축하면 500배 더 작아질 수 있음
- 모델 크기는 0.5MB로 매우 작아 메모리 및 계산 자원 절약 가능
'CS231n' 카테고리의 다른 글
[CS231n] Lecture 10 | Recurrent Neural Networks (2) | 2024.09.05 |
---|---|
[CS231n] Lecture 8 | Deep Learning Software (0) | 2024.08.19 |
[CS231n] Lecture 7 | Training Neural Networks II (0) | 2024.08.13 |
[CS231n] Lecture 6 | Training Neural Networks I (0) | 2024.08.08 |
[CS231n] Lecture 5 | Convolutional Neural Networks (0) | 2024.07.30 |