[CS231n] Lecture 9 | CNN Architectures

2024. 8. 26. 21:40·CS231n
더보기

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
  • 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
'CS231n' 카테고리의 다른 글
  • [CS231n] Lecture 10 | Recurrent Neural Networks
  • [CS231n] Lecture 8 | Deep Learning Software
  • [CS231n] Lecture 7 | Training Neural Networks II
  • [CS231n] Lecture 6 | Training Neural Networks I
ymkwon
ymkwon
공부 기록, 논문 리뷰 등에 대한 정리
  • ymkwon
    ymkwon
    ymkwon
  • 전체
    오늘
    어제
    • 분류 전체보기 (21)
      • CS231n (9)
      • 기계학습 (2)
      • 딥러닝 (0)
      • Paper Review (4)
      • Computer Vision (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    딥러닝
    cs231
    기계학습
    멀티모달
    cs231n
    컴퓨터비전
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
ymkwon
[CS231n] Lecture 9 | CNN Architectures
상단으로

티스토리툴바