재형이의 성장통 일지
  • VGGNet, GoogLeNet(Inception), ResNet, Transfer Learning
    2024년 03월 06일 06시 22분 06초에 업로드 된 글입니다.
    작성자: 재형이
    반응형
     

     

    • 이번 강의를 통해서는 다양한 모델들을 간단하게 리뷰해보면서 개발자가 어떤 생각을 가지고 디자인을 했을까?라고 생각할 수 있는 계기가 되었습니다
    • 생각하면서 느꼈던 것은 꼭 수식적인 증명(물론 논문을 발표할 때는 필요하겠지만)뿐만 아니라 상상하는 대로 모델을 바꿀 수 있고 실제로 성능도 더 좋아질 수도 있다는 걸 느꼈습니다
    • 그래서 딥러닝 연구 분야는 창의력, 사고력이 굉장히 중요한 분야이구나라는 생각을 했습니다
    • 감사합니다

     

     

     

     

     

     

     


     

     

     

     

     

     

    1. VGGNet

    • VGGNet은 ILSVRC (Large Scale Visual Recognition Challenge)라는 이미지 넷(Image Net)의 사물 인식 대회에서 2014년에 2등을 했었던 모델이다
    • 근데 왜 1등도 아니고 2등을...?
    • 왜냐하면 단순한 구조로 좋은 성능을 보여주었기 때문이다!! (간단한게 최고, 복잡한거 싫어 ㅜㅜ)

    ILSVRC 대회 역대 우승 알고리즘

    • VGGNet-16은 13개의 conv layer와 3개의 FC로 이루어져 있다 (변형된 모델로 VGGNet- 19도 있다)
    • 138,000,000(약 1억 4천)개의 W 갯수와 500MB의 저장 공간을 필요로하는 모델이다}

    Dense가 FC

    • VGGNet의 가장 큰 특징은 작은 크기의 필터를 사용해도 layer의 깊이가 깊어지면 입력값의 넓은 부분을 참고하는 기능을 수행할 수 있다는 것이다 → 넓은 영역을 참고하기 위해 큰 필터를 사용할 필요 없이 3X3 필터만 사용해도 충분!

    • Receptive Field(RF)는 얼만큼의 영역을 수용하고 있는가를 나타내는 지표이다. 값이 클수록 많은 영역을 참고하고 있다는 의미이다

    RF 구하는 공식

    • 예시1) 7X7 필터 한번과 3X3 필터 세 번의 RF 비교

    • 그리고 이렇게 작은 크기의 필터를 여러번 사용함으로써 얻을 수 있는 이점
      1. RF를 늘리는 효과
      2. 구해야할 W가 적어짐 (메모리 사용량 감소)
      3. 더 많은 비선형 Activation을 통과함으로써 비선형성이 증가하여 더 복잡한 그래프를 표현할 수 있게 됨

    2. GoogLeNet (Inception)

    ILSVRC 대회 역대 우승 알고리즘

    • 이제는 사람의 능력을 뛰어넘었다;;
    • 구글에서 개발하였으며 22층짜리 신경망을 사용하였고 인셉션 모듈이라는 것을 사용했다

    • 개별적인 Layer는 100개 이상이지만 Inception 모듈이 9개 존재해서 이걸 포함해서 22개의 층이라는 것

    • 5,000,000(5천만)개의 W 갯수를 가진다

    2-1. 인셉션 모듈

    • Inception module
      • split-transform-merge strategy
        • 다양한 크기의 필터를 사용해서 다양한 특징을 추출
        • 1×1, 3×3, 5×5 kernels
    • Bottleneck structure
      • 1x1 Conv: 필터의 크기가 1
      • Dimensionality Reduction 효과
        • 입력의 필터 크기 보다 Conv의 필터 수가 작을 때
        • 연산량을 줄이고, 신경망을 더욱 깊게 쌓을 수 있음
      • 비선형성(nonlinearity) 증가
    • 인셉션 모듈에서 1X1 Conv 필터를 사용함으로써 얻을 수 있는 이점
      1. 연산량을 줄이기 때문에 필요 메모리 수가 줄어듬
      2. Conv Ops가 줄어듬

    2-2. 학습 보조기 (Auxiliary Classifiers)

    • Vanishing Gradient 문제를 해결하기 위한 도구
    • 학습할 때만 사용하고 추론 단계에서는 사용하지 않는다

    2-3. GoogLeNet (Inception V1)의 특징

    1. Inception 모듈 사용
      • Parallel filters concatenation
      • Bottleneck architecture 
    2. 가중치의 수를 줄임
    3. 비선형성을 증가시킴
    4. 모델 구성의 새로운 패러다임
      • 단순히 layer를 쌓아 올리는 구조가 아닌, 모듈/블록 구조를 사용

    3. ResNet

    ILSVRC 대회 역대 우승 알고리즘

    • 처음으로 사람의 능력을 뛰어넘은 모델이다
    • 깊은 신경망(152 layers… ) 학습이 가능하게 하는 skip connections 구조
    • Batch Normalization을 적용
    • 분류기 학습을 위한 FC를 구현하지 않고, GAP(Global Average Pooling)을 수행

    3-1. Skip Connection

    • layer의 입력을 layer의 출력에 바로 연결
    • H(x) = F(x) + x

    • Residual 구조
      • 일반적인 신경망: H(x)를 얻기 위해 학습을 수행
      • ResNet:
        • 𝐻(𝑥) = 𝐹(𝑥) + 𝑥 에서 𝐹(𝑥) = 𝐻(𝑥) − 𝑥 와 같다
        • 잔차(𝐹(𝑥) = 𝐻(𝑥) − 𝑥)를 최소화하는 방향으로 수행
        • 즉, 출력값과 입력값의 차이를 최소화하려는 방향으로 학습을 진행한다
        • 인공신경망이 깊어질수록 본래의 자아를 잃어가는 것이 아닐까...? 본래의 모습을 잃지 않도록 x를 더해주는 것...?
    • Residual 구조의 효과
      • 깊은 층을 가지고 있지만 Gradient vanishing이 발생하지 않고 학습이 잘 됨

    4. EfficientNet

    • depth, width, resolution을 동시에 고려한 compound scaling을 통해 ConvNet기반 이미지 분류 성능을
      개선한 모델
    • 개선방향 : depth, width, resolution 동시에 키워서 성능 개선
      • width(필터의 개수 늘림)
      • depth(레이어 수 늘림)
      • resolution(이미지 해상도 키움)
    • 연산은 줄이고, 정확도는 높임

    5. Transfer Learning cf) Fine Tuning

    • 기존의 만들어진 모델을 사용하여 새로운 모델을 만드는 방법
    • 학습을 빠르게 하며 예측 성능을 더 높임
    • 이미 잘 훈련된 모델이 있고, 특히 해당 모델과 유사한 문제를 해결 시 효과적
    model_conv = torchvision.models.resnet18(pretrained=True)
    for param in model_conv.parameters():
        param.requires_grad = False
    
    # Parameters of newly constructed modules have requires_grad=True by default
    num_ftrs = model_conv.fc.in_features
    model_conv.fc = nn.Linear(num_ftrs, 2)
    
    model_conv = model_conv.to(device)
    
    criterion = nn.CrossEntropyLoss()
    
    # Observe that only parameters of final layer are being optimized as
    # opposed to before.
    optimizer_conv = optim.SGD(model_conv.fc.parameters(), lr=0.001, momentum=0.9)
    
    # Decay LR by a factor of 0.1 every 7 epochs
    exp_lr_scheduler = lr_scheduler.StepLR(optimizer_conv, step_size=7, gamma=0.1)
    
    # 출처: https://pytorch.org/tutorials/beginner/transfer_learning_tutorial.html
    • 이미 학습된 resnet-18 모델이 프레임워크로 제공되기 때문에 사용할 수 있다
    • pretrained=True → 이미 학습된 모델 사용
    • param.requires_grad=False → 가중치 업데이트 False
    • model_conv.fc=nn.Linear(num_ftrs,2)는 FC로 2개를 출력하고 있다 → 카테고리 두개로 분류를 하고 싶다

    cf) Fine Tuning

    • 사전 학습된 모델을 새로운 문제에 적용하기 위해 일부 가중치를 조절하는 학습 과정
    • 미세조정(Fine tuning)은 사전학습(pre-training) 모델을 사용하여 새로운 문제에 적용할 수 있도록 조정하는 과정이다

     

     

     

     

     

     

     


     

     

     

     

     

     

     

     

    반응형
    댓글