💻 본업(컴공생) 이야기/머신러닝 - 딥러닝 이야기

[CNN 공부하기] AlexNet, VGGNet, ResNet 은 뭘까?

st오리🐥 2025. 2. 11. 16:54
728x90
반응형
SMALL

 

 

아래 자료를 공부하며 정리한 내용입니다 ~!

 

 

 

 

https://theaisummer.com/cnn-architectures/

 

Best deep CNN architectures and their principles: from AlexNet to EfficientNet | AI Summer

How convolutional neural networks work? What are the principles behind designing one CNN architecture? How did we go from AlexNet to EfficientNet?

theaisummer.com

https://medium.com/towards-data-science/the-w3h-of-alexnet-vggnet-resnet-and-inception-7baaaecccc96

 

Difference between AlexNet, VGGNet, ResNet and Inception

AlexNet, VGGNet, ResNet and Inception explained

medium.com

 

 

오늘은,,~!

 

위 AI SUMMER 사이트에서 CNN을 공부를 시작해보려고 합니다.

 

저도 처음하는 공부이기에 차근차근 꼼꼼히 해보려고 해요!!

저도 공부하면서 함께 기록하는 것이라... 정말 저와 함께 공부를 해주셔야 합니다,,

 

그럼 시작해볼까요??!

 

 

 

 

 

 

 

어떻게 AI는 고양이와 개를 구별할 수 있을까요?

스마트폰이 우리의 얼굴을 인식하는 원리는 무엇일까요?

 


위와 같은 기술의 중심에는 CNN(Convolutional Neural Network)이라는 딥러닝 기술이 자리 잡고 있는데요!
CNN은 이미지를 이해하고 분석하는 데 있어 혁명적인 변화를 가져왔습니다~!

 

그렇다면 CNN은 무엇일까요? 

간단히 말하자면, 

 

CNN(Convolutional Neural Network)은 딥러닝 알고리즘 중 하나로, 

주로 이미지 데이터를 처리하고 분석하는 데 사용되고 있습니다. 

 

이미지 데이터를 처리하고 분석한다는 것은, 바로바로 맨 위에서 던졌던 질문 2가지 !

 

이미지를 보고 개와 고양이를 구분하고, 우리의 얼굴을 인식하는 것 등 말이죠.

기계와 기술이 이미지를 가지고 하는 대부분의 활동이라고 생각할 수 있을 것 같아요.

 

이렇게 CNN은 사람의 시각 시스템을 모방하여 이미지를 이해하고 특징을 학습하는 데 탁월한 성능을 보이고 있는데요!

 

 

CNN이 생소하다면, 아래 포스팅을 먼저 보고오는 것을 추천드리며

https://real-st-ory.tistory.com/31

 

 

 

 

오늘의 주제를 시작해보도록 하겠습니다 ~~!

 


 

 

 

오늘은 AlexNet부터 EfficientNet까지, CNN 아키텍처의 발전 과정을 쉽고 흥미롭게 같이 공부해보려고 합니다.

 

 

 

ImageNet은 대규모 이미지 데이터셋으로 딥러닝 모델을 테스트하는 표준 기준입니다.

 

AlexNet은 2012년에 등장한 딥러닝 모델로,

딥러닝과 CNN(합성곱 신경망)의 가능성을 전 세계에 알린 모델인데요!

 

 

이렇게 등장한  AlexNet이 ImageNet에서 63.3 %의 탑1 정확도의 놀라운 성과를 기록하며

딥러닝의 시대를 열었다고 합니다 !!

 

https://paperswithcode.com/sota/image-classification-on-imagenet

 

시간이 흐름에 따라 ImageNet이 어떤 정확도를 보여줬는지를 볼 수 있는 그래프입니다~!

 

 

 

또 2018 년까지의 CNN 성능을 단일이미지로 캡쳐된 자료인데요.

 

 

x축은 모델의 복잡성을,

y축은 ImageNet의 정확도를,

원의 반지름은 매개변수의 수를

 

나타내고 있습니다.

 

1990년대 LeNet-5 으로 시작하여,

2012 AlexNet을 기점으로 급격하게 발전하였습니다.

 

이후, VGG, ResNet 등 더 깊고 효율적인 구조들이 등장하였으며,

최근, 자동화된 아키텍처 탐색 모델인 NAsNet, EfficientNet 등의 모델이 등장하고 있습니다.

 


그러나 !!

단순히 매개변수가 많다고 해서 항상 더 높은 정확도를 보장하는 것은 아니라는 것 또한

위 자료를 통해 확인 할 수 있습니다 ~!

 

-

 

용어 정리를 해보겠습니다 -!

 

앞으로 다음과 같은 용어를 계속 사용할 것이기 때문에 꼭 이해하고 넘어가야 합니다.

 

 

 

 

 Wider Network  = 더 많은 필터

합성곱 층(Convolutional Layer)에서 더 많은 특징 맵(Feature Maps, 필터)을 사용하여 데이터를 처리하는 네트워크를 의미함.

더 많은 필터를 사용하면 다양한 패턴을 감지하고 학습할 수 있음.

 

 Deeper Network  = 합성곱의 층의 수↑

합성곱 층의 개수가 많아지는 것을 의미함.

층이 많아질수록 데이터의 더 복잡한 특징을 학습할 수 있음.

 

 Higher Resolution Network  = 더 큰 크기의 입력 이미지(너비와 높이, 즉 공간 해상도)

더 큰 크기의 입력 이미지(너비와 높이, 즉 공간 해상도)를 처리하는 네트워크를 의미함.

입력 해상도가 높아지면 네트워크가 더 정밀한 공간적 정보를 학습할 수 있으며,

결과적으로 생성되는 특징 맵(feature maps)도 더 높은 공간 차원(Spatial Dimensions)을 가지게 됨.



 

 

-

 

 


CNN 모델의 역사

 


 

2012년 

 

1. AlexNet 

: 딥 컨볼루션 신경망을 사용한 ImageNet 분류

 

AlexNet은 ImageNet 챌린지의 성능을 향상시키기 위한 필요에서 탄생했습니다.

 

 

º 네트워크 구조

 

AlexNet은 5개의 합성곱 층(Convolutional Layer, Conv Layer),

3개의 FC(Fully Connected Layer)을 포함한 CNN 모델입니다.

 

활성화 함수는  ReLU 이며,

총 6,200만 개의 학습 가능한 변수가 있습니다.

 

 

 

 

이 표는 AlexNet의 주요 구조를 나타냅니다. 입력 이미지는 227x227 크기에서 시작하며, 각 레이어를 거치면서 공간 크기는 줄어들고, feature 채널 수는 증가합니다. 최종적으로 1000개의 클래스에 대한 확률 분포를 출력합니다.

 

 

 

 

입력과 출력

AlexNet의 입력은 227x227 크기의 RGB 이미지이고, 최종적으로는 1000개의 클래스에 대한 확률 벡터를 출력합니다.

이 과정에서 Conv 레이어와 Pooling 레이어를 통해 이미지의 공간적 특징을 추출하고,

Fully Connected 레이어를 통해 분류 작업을 수행합니다.

 

 

과적학 방지

과적합을 방지하기 위해 두 가지 주요 기법이 사용됩니다.


첫째, 데이터 증강입니다. 이는 학습 데이터 세트를 다양화하기 위해 이미지를 미러링하거나

자르는 방식으로 새로운 데이터를 생성하는 기법입니다.


둘째, 드롭아웃입니다. 드롭아웃은 학습 중 무작위로 네트워크의 연결을 끊어

특정 노드에 과도하게 의존하는 문제를 방지합니다.

이 방법은 과적합을 줄이는 동시에 나쁜 로컬 미니마를 벗어나는 데 도움을 줍니다.

 

 

활성화 함수와 최적화

AlexNet은 학습 속도와 안정성을 높이기 위해 Sigmoid와 Tanh 대신 ReLU 활성화 함수를 도입했습니다.
ReLU는 사라지는 기울기 문제를 해결하며, 논문에 따르면 같은 조건에서

Tanh를 사용했을 때보다 학습 속도가 6배 빨랐습니다.
또한 Local Response Normalization(LRN)을 통해 뉴런 주변을 정규화하여,

흥분된 뉴런은 증폭하고 주변 뉴런은 감쇠시켜 안정적인 학습을 가능하게 했습니다.

 

 

Local Response Normalization (LRN)


* ReLU는 기울기 소실 문제를 해결하지만, 출력이 무한대로 커짐
* Conv나 Pooling시 매우 높은 하나의 픽셀값이 주변의 픽셀에 영향을 미치게 됨
➡ 특정 픽셀의 활성도를 기준으로 주변 픽셀을 정규화한다.

 

 

ReLU는 양수의 방향으로는 입력의값을 그대로 사용합니다.

그렇게되면 CONV나 POOLING시 매우 높은 하나의 픽셀값이 주변의 픽셀에 영향을 미치게되겠죠?

이런 부분을 방지하기 위해 다른 ActivationMap의 같은 위치에있는 픽셀끼리 정규화를해줍니다.

이것을 바로 AlexNet에서사용되는 LRN라고 합니다.

 

 

 

 

// 코드 //

class AlexNet(nn.Module):
    def __init__(self, num_classes: int = 1000) -> None:
        super(AlexNet, self).__init__()
        self.features = nn.Sequential(
            nn.Conv2d(3, 64, kernel_size=11, stride=4, padding=2),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=3, stride=2),
            nn.Conv2d(64, 192, kernel_size=5, padding=2),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=3, stride=2),
            nn.Conv2d(192, 384, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(384, 256, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.Conv2d(256, 256, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=3, stride=2),
        )

        self.avgpool = nn.AdaptiveAvgPool2d((6, 6))
        self.classifier = nn.Sequential(
            nn.Dropout(),
            nn.Linear(256 * 6 * 6, 4096),
            nn.ReLU(inplace=True),
            nn.Dropout(),
            nn.Linear(4096, 4096),
            nn.ReLU(inplace=True),
            nn.Linear(4096, num_classes),
        )

    def forward(self, x: torch.Tensor) -> torch.Tensor:
        x = self.features(x)
        x = self.avgpool(x)
        x = torch.flatten(x, 1)
        x = self.classifier(x)
        return x

 

 

 

 

  • 합성곱 층(Convolutional Layers)
    • 총 5개 존재하며, 각 층에서 이미지의 특징을 점점 더 추상적으로 학습함.
    • 첫 번째 층에서는 11×11 크기의 필터를 사용하여 입력 이미지에서 특징을 추출.
  • 최대 풀링 층(Max Pooling Layer)
    • 특징 맵(feature map)의 크기를 줄이면서 중요한 정보만 남기는 층.
    • 연산량을 줄이고, 모델이 더 효율적으로 학습하도록 돕는 역할.
  • ReLU 활성화 함수(Rectified Linear Unit, ReLU)
    • 비선형성을 추가하여 CNN이 복잡한 패턴을 학습할 수 있도록 함.
    • 기존의 시그모이드(Sigmoid)나 하이퍼볼릭 탄젠트(Tanh) 함수보다 빠르고 효과적.
  • 완전 연결층(Fully Connected Layers, 선형 레이어)
    • 마지막에는 3개의 완전 연결층(FC, Fully Connected Layers)이 존재.
    • 신경망의 출력 부분으로, 최종적으로 1000개의 클래스 중 하나를 예측.
  • 드롭아웃(Dropout) 적용
    • 과적합(overfitting)을 방지하기 위해 드롭아웃을 사용.
    • 드롭아웃은 학습 중 일부 뉴런을 랜덤하게 제거하여 일반화 성능을 향상.
  •  

 

2014년 

 

2. VGGNet 

:  기존의 CNN 구조를 축소하여 더 높이 추가하도록

더 깊은 신경망이 성능 장식에 도움을 줄 수 있는 입증된 모델입니다.

 

 

 

 

 

 

고정 크기 커널(3x3) 사용:

 

✅ 5x5, 7x7 필터를 여러 개의 3x3 필터로 대체

✅ 학습 파라미터 개수를 줄이고, 학습 속도 개선

7×7 합성곱 필터 1개 → 3×3 필터 3개

: 학습해야 하는 변수 개수 44.9% 감소

 

 

VGGNet의 한계점

 

* 파라미터와 연산량이 증가

→ 학습이 어렵고, 메모리 사용량과 비용이 높아지는 문제 발생

 

*Gradient Vanishing

→ 일정 깊이 이상에서는 성능이 개선되지 않음

 

 

ResNet의 필요성

 

* Gradient Vanishing 문제 해결

 

* Residual Connection 사용: 입력 데이터를 바로 다음 층으로 전달

→ 네트워크가 깊어져도 정보가 유지됨

 

 

 

 


 

2015년 

 

3. ResNet 

: 잔차 연결(Residual Connection)을 활용해

깊은 신경망을 효과적으로 학습할 수 있도록 설계된 모델

 

 

 

딥러닝 모델은 네트워크가 깊어질수록 성능이 향상되는 경향이 있지만,

너무 깊어지면 기울기 소실(vanishing gradient)과

기울기 폭발(exploding gradient) 문제가 발생하여 학습이 어려워집니다.


또한, 네트워크가 깊어질수록 성능이 오히려 저하(degradation problem)되는 현상도 발생합니다.

ResNet은 이러한 문제를 해결하기 위해 잔차 연결(Residual Connection)을 도입했습니다.

 

 

 

 

ResNet의 설계 

 

ResNet의 핵심: Residual 블록

 

* F(x) 대신 F(x) + x 학습

* 항등 연결과 투영 연결로 차원 불일치 해결

 

 

 

 

 

 

 

이 포스팅에서는 여기까지 정리해보고 

다음 포스팅에서 인셉션넷, 덴스넷, 이퓌션넷을 정리하겠습니다 ~~!

 

728x90
반응형
LIST