2. Artificial Intelligence/Stanford Univ. CS231n

[Stanford Univ: CS231n] Lecture 9. CNN Architectures

뉴하늘 2025. 5. 1. 18:33
728x90

본 포스팅은 Stanford University  School of Engineering의 CS231n: Convolutional Neural Networks for Visual Recognition을 수강하고 공부한 내용을 정리하기 위한 포스팅입니다.

https://youtu.be/DAOcjicFr1Y?si=6rkH5dDGJMHtyCML


https://github.com/cs231n/cs231n.github.io

 

GitHub - cs231n/cs231n.github.io: Public facing notes page

Public facing notes page. Contribute to cs231n/cs231n.github.io development by creating an account on GitHub.

github.com

1. AlexNet(2012)

 AlexNet은 2012년 ImageNet Large Scale Visual Recognition Challenge (ILSVRC)에서 우승한 모델로, 딥러닝이 이미지 인식에서 압도적인 성능을 낼 수 있음을 처음 입증한 모델이다.

 

이전 모델들은 2~3개의 conv layer만 사용했지만, AlexNet은 8개의 학습 가능한 레이어(5 Conv + 3 FC)를 사용했다. Activation Function으로는 ReLU를 사용하였고, ReLU 활성값의 범위를 안정시키기 위해 Local Response Normalization(LRN)을 사용하였다.(현재는 거의 사용되지 않지만, 당시에는 regularization 역할을 함)

 학습 데이터 부족을 보완하기 위해 Data Augmentation도 사용하였으며, Fully-connected layer에서 Dropout을 적용하여 overfitting을 방지했다.

 

 AlexNet을 학습할 당시에 GTX850으로 학습시켰다. 이 GPU는 메모리가 3GB이기 때문에 전체 layer를 하나의 GPU에 다 넣을 수 없었기에 네트워크를 GPU에 분산시켜서 넣었다. 따라서 각 GPU가 모델의 뉴런과 Feature Map을 반반씩 나눠가졌다.

 

 CONV1, CONV2, CONV4, CONV 5는 동일한 GPU 내에 있는 Feature Map만 사용한다. 즉, CONV 1,2,4,5는 전체 96 feature map을 볼 수 없다. 

 

 CONV3와 FC 6, 7, 8 를 한번 살펴보면 이 레이어들은 이전 계층의 전체 Feature map과 연결되어 있다. 이 layer들에서는 GPU간의 통신을 하기 때문에 이전 Input layer의 전체 Depth를 전부 가져올 수 있다.

2. ZFNet(2013)

 ZFNet은 2013년 ILSVRC 대회에서 준우승한 모델로, AlexNet의 구조를 개선한 CNN 모델이다.

 

AlexNet의 첫 conv layer는 11×11 필터에 stride 4였는데, 이러면 입력 이미지를 너무 빠르게 축소시켜 정보 손실이 발생했다. ZFNet은 이를 7×7 필터, stride 2로 바꾸어 더 정밀한 특징 추출을 가능하게 했다. 그리고 hyperparameter(filter size, stride 등)를 적절하게 수정하여 성능 향상을 보여주었다.

3. VGGNet(2014)

 VGGNet은 2014년 ILSVRC 대회에서 준우승한 모델로, 옥스퍼드 대학의 Visual Geometry Group에서 발표하여 VGG라는 이름을 가지게 되었다. 이 모델은 단순하지만 깊은 구조로 구성되어 있으며, 이후 다양한 CNN 아키텍처들의 설계 철학에 큰 영향을 미쳤다.

 

 VGGNet은 큰 filter(예: 7×7, 5×5)를 쓰지 않고 3×3 필터를 여러 번 쌓아서 동일한 receptive field를 만든다. 이 방식은 파라미터 수를 줄이면서 비선형성(ReLU)을 더 많이 포함시켜 성능을 높인다.

예: 3×3 conv × 3층 → 7×7과 같은 receptive field

 

 Receptive field란 출력의 한 뉴런이 입력의 어느 영역에 영향을 받는가를 나타내는 개념이다. 즉, conv layer를 여러 층 쌓으면, 출력값 하나가 이전 층의 더 넓은 입력 영역을 바라보게 된다. 기본 가정으로는 filter size: 3 x 3, stride = 1, padding = 1을 한다.

 

 첫 번째 3 x 3 conv

-> 출력의 한 픽셀은 입력의 3×3 영역을 본다. 따라서 receptive field = 3

 

 두 번째 3 x 3 conv

-> 두 번째 conv layer의 출력값 하나는 첫 번째 conv의 출력 3개에 의존한다. 그런데, 첫 번째 conv의 출력 각각은 다시 입력의 3개 픽셀에 의존하므로 총 receptive field는 3 + (3 - 1) = 5 (여기서 -1은 중복되는 중심 픽셀 때문)

 

 세 번째 3 x 3 conv

-> 마찬가지로 두 번째 conv의 출력 3개에 의존하고, 각각은 첫 번째 conv의 출력 3개, 다시 입력의 3개에 의존하므로 receptive field = 5 + (3 - 1) = 7

 

일반화하면 아래와 같다.

  • filter size: f
  • stride: s
  • receptive field: R
  • 여러 층 쌓을 때, stride가 1이라면 다음 공식 사용: 

 

따라서 3×3 conv layer × 3층7×7 conv layer 하나와 같은 receptive field를 갖는다. → 더 적은 파라미터로 동일한 효과를 얻을 수 있고 ReLU가 중간마다 들어가므로 더 복잡한 표현이 가능해진다.

 

당시 기준으로 VGG는 매우 깊은 구조였고, depth가 성능 향상에 중요함을 처음 보여준 모델이다. 네트워크 구조를 전부 3×3 conv + max pooling으로 구성하여 구조를 매우 단순하게 유지하면서도 성능을 극대화했다.

 VGG는 parameter 수가 많아서 메모리 소모가 크고, 연산량이 많다는 단점이 있다. 이후의 모델들은 효율성을 고려하여 개발된다.

 

AlexNet에서 사용되던 Local Response Normalization(LRN)은 제거하였다. → 성능에 큰 영향을 미치지 않는다고 판단

4. GoogLeNet(2014)

GoogLeNet은 2014년 ILSVRC 대회에서 우승한 모델로, Google의 연구팀이 개발한 모델이다. GoogLeNet은 기존 CNN 구조의 한계를 뛰어넘기 위해 연산 효율성과 깊이의 균형을 맞추는 새로운 아이디어들을 도입하였다.

 

전체 22개의 학습 가능한 layer conv과 Inception Module로 구성되어 있다. FC layer는 마지막에 1000-class softmax에서만 사용한다.  

 Inception module은 Network within a Network(NiN)에서 처음 디자인된 module이다. 한 layer에서 다양한 filter size (1x1, 3x3, 5x5)로 특징을 동시에 추출하고, 그 결과들을 depth 방향으로 concatenate하는 구조다. 이로써 다양한 receptive field에서 정보를 동시에 추출할 수 있다.

 그러나 Inception Module을 사용하면 depth가 계속해서 커져서 계산이 복잡해지는 문제가 있다. 이를 해결하기 위해 Bottleneck layer라고 불리는 1 x 1 convolution을 사용해 dimension을 축소한다.

1 x 1 convolution은 input dimension의 size는 유지한체 depth만 조절할 수 있는 성질을 갖고 있다. 이는 계산량을 줄이면서도 깊고 넓은 구조를 유지할 수 있는 해결책이다.

bottleneck layer를 사용함으로서 Inception Module Output의 depth를 조절할 수 있게 되었고 계산량이 크게 줄어들었다. 

 또한 GoogLeNet은 Auxiliary Classifiers(보조 분류기)를 사용한다. 네트워크가 깊어질수록 Gradient Vanishing Problem이 발생하기 쉬운데, 이를 방지하기 위해 중간에 두 개의 Auxiliary Classifier를 넣어 backpropagation을 보조한다. 이들은 학습 중에만 사용하고, 추론 시에는 제거된다.

5. ResNet(2015)

ResNet (Residual Network)은 2015년 Microsoft Research에서 발표되어, ILSVRC 2015 이미지 분류 대회에서 1위를 차지한 모델이다. ResNet은 이전까지의 딥러닝 구조가 깊어질수록 학습이 어려워지는 문제를 극적으로 해결하고, 최초로 100층 이상 네트워크의 학습을 성공시킨 모델이다.

 일반적인 CNN에서는 네트워크가 깊어질수록 gradient vanishing/exploding problem이 발생하는 문제가 있었다. 아래 결과를 보면 Overfitting이 문제는 아닌 것을 알 수 있다. 만약 overfit이 발생한다면 test error는 높더라도 training error는 아주 낮아야 정상일 것이다. 

 ResNet 저자들이 내린 가설은 더 깊은 모델 학습 시 optimization에 문제가 생긴다는 것이다. 그들은 "모델이 더 깊다면 적어도 더 얕은 모델만큼은 성능이 나와야 하지 않은지"라고 추론했다. 

 

 가령 이런 해결책을 생각해 볼 수 있다. 우선 더 얕은 모델의 가중치를 깊은 모델의 일부 레이어에 복사한다. 그리고 나머지 레이어는 identity mapping을 하는 것이다.(input을 output으로 그냥 내보냄) 이렇게 구성하면 shallower layer 만큼의 성능을 나와야한다고 생각해볼 수 있다.

 그래서 그들은 신경망이 굳이 새로운 함수를 학습할 필요 없이, 입력과의 잔차(residual)만 학습하도록 한다. 아래의 그림을 보면 Direct mapping 대신에 Residual mapping을 하도록 설계했다. 그리고 layer가 직접 "H(x)"를 학습하기보다  "H(x) - x" 를 학습할 수 있도록 만들어준다. 

즉, 학습은 만 하고, 최종 출력에 입력 를 더하는 방식을 사용한다.

 

 이를 위해서 Skip Connection을 도입한다. Skip Connection은 가중치가 없으며 입력을 Identity mapping으로 그대로 출력단으로 내보냅니다. 그러면 실제 layer는 변화량(delta)만 학습하면 되고 이는 입력 X에 대한 잔차(residual)이다. 최종 출력 값은 "input X + 변화량(Residual)"이다.

 

 만약 F(X)와 x의 dimension이 다르면 1 x 1 convolution을 넣어 dimension을 맞춘다.

 

 ResNet은 매우 깊은 네트워크를 학습 가능하도록 하고 Gradient flow가 원활해 학습이 빠르고 안정적이다. Skip Connection은 ResNet은 이후 모든 딥러닝 모델의 기본 단위 블록처럼 활용되었다.

 

6. Network in Network(2014)

 NiN (Network in Network)은 2013년에 발표된 CNN 아키텍처로, 기존의 convolution layer를 더 발전시킨 모델이다.

 

 NiN은 conv layer 자체에 작은 multilayer perceptron (MLP)을 삽입함으로써 더 복잡한 비선형 표현을 가능하게 하자는 아이디어다. 즉, MLP conv는 conv 뒤에 여러 층의 1×1 conv (즉, FC-like 연산)을 쌓는 구조이다.

 

 NiN은 이후 모델들에 1×1 conv를 적극적으로 사용하도록 유도하였다는데에 의의가 있다.(GoogLeNet, ResNet bottleneck 등)

7. Identity Mappings in Deep Residual Networks(2016)

 2016년에 발표된 논문 "Identity Mappings in Deep Residual Networks"는 ResNet의 성능을 더 향상시키기 위해 residual block 구조를 더 단순하고 효과적으로 개선한 연구이다.

 

 이전 ResNet의 구조는 conv -> BN ->ReLU 형식이였기에 shortcut과 main path를 더한 후 ReLU를 적용하였다. 

 

 이 방식은 Identity mapping을 완전히 보장하지 않기에 이 논문에서 개선된 구조를 선보였다.

즉, activation(ReLU)과 normalization(BN)을 convolution 전에 적용한다. 더한 후 아무 비선형성도 통하지 않게 되므로 더 순수한 identity shortcut이고, gradient flow가 훨씬 원활해진다. 또한 모든 layer 앞에 BN이 있어 학습 안정성이 향상된다.

8. Wide Residual Networks(2016)

 이 논문은 ResNet의 깊이를 늘리는 것보다 너비를 늘리는 것이 더 효율적일 수 있다는 점을 보여준다. 즉, 더 깊은 ResNet → 더 좋은 성능이라는 고정 관념을 뒤집는 모델이다. 

 

 WideResNet은 Residual block의 depth를 줄이고, width를 늘리는 방식으로 동일한 구조를 유지하면서도 각 conv layer의 feature map 수를 k배 늘린다.

9. Aggregated Residual Transformations for Deep Neural Networks (ResNeXt, 2016)

 "Aggregated Residual Transformations for Deep Neural Networks"는 ResNet의 단순하고 모듈화된 구조는 유지하면서,
Inception처럼 여러 경로(path)를 병렬로 두는 아이디어를 접목한 모델이다. 

 

이때 Inception은 각 경로마다 다른 구조를 쓰지만, ResNeXt는 모든 경로가 동일한 구조를 공유한다. 이 병렬 경로의 수를 cardinality라고 한다.

10. Deep Networks with Stochastic Depth(2016)

 "Deep Networks with Stochastic Depth"는 ResNet의 training을 더 빠르고 일반화 성능을 더 높이기 위해 residual block을 학습 중에 확률적으로 생략(drop)하는 기법을 제안한다. 즉, 일종의 ResNet 전용 dropout 기법이라 볼 수 있다.

 초깃값은 깊은 layer일수록 생존 확률이 낮아지도록 설정한다. 테스트 시에는 모든 layer를 사용하되, 출력에 p_l을 곱해 평균 보정한다.

 

11. FractalNet: Ultra-Deep Neural Networks without Residuals(2017)

 FractalNet은 Residual connection 없이도 매우 깊은 신경망을 효과적으로 학습할 수 있는 방법을 제안한 모델이다.

 

 단일 경로로만 쌓는 것이 아니라, 작은 블록을 재귀적으로 중첩시켜 깊이와 경로 다양성을 동시에 확보한 구조를 만든다. 한 블록 내부에 다양한 depth를 가진 여러 path가 존재하고 있다. 예를 들어, 어떤 출력은 3층 path를, 어떤 것은 5층, 7층 path를 거친다. 이로 인해 다양한 깊이의 representation이 ensemble되며 학습된다. 

 

 또한 학습 시 path 중 일부를 확률적으로 drop하여 regularization을 진행한다. 테스트 시에는 모든 path를 평균내어 사용한다. 

12. Densely Connected Convolutional Networks(2017)

DenseNet은 각 layer가 이전 모든 layer의 출력을 input으로 사용한다. feature reuse를 통해 모델이 더욱 효율적으로 학습하는 신경망이다.  

 

728x90