[DL 11강] Training Neural Network II

근태·2025년 2월 7일

DL

목록 보기
8/10

SPS LAB 2025.02.13 신입생 세미나 4주차

  • 본 내용은 Michigan University의 Deep Learning for Computer Vision 11강 Training Neural Networks II 강의를 듣고 정리한 내용입니다.
  • 강의의 원본은 해당 링크에서 확인하실 수 있습니다.

1. Training dynamics

1. Learning rate schedules

  • 비교
    • very high: 손실이 폭발, 매우 빠르게 잘못될 수 있음
    • high: 빨리 수렴하지만 최적값에 수렴하지 않을 수 있음
    • low: 폭발하지 않지만 매우 느리게 수렴하여 학습 시간이 오래 걸릴 수 있음
    • good: 이상적인 좋은 학습률로, 빠르게 수렴하면서 폭발하지 않음
  • 아이디어
    • 모든 것을 선택하는 것이 어차피 일반적이고, 비교적 높은 학습률로 시작하여 최적의 학습률을 찾는 것
  • 방법론
    • Step Schedules
      • 개념
        • 높은 학습률로 학습을 진행하다가 특정 선택된 지점에서 학습률을 낮추는 방법
        • ex) ResNets: 30, 60, 90 epoch마다 learning rate에 0.1을 곱함
      • 문제점
        • 많은 새로운 하이퍼파라미터를 도입해야 함
          • 초기 학습률
          • 어느 반복에서 학습률을 감소시킬 것인가
          • 감소시킬 반복에서 선택할 새로운 학습률
        • 시행 착오가 많이 필요함
    • Cosine Schedules
      • 개념
        • cosine 함수를 통해 모든 epoch마다 학습률을 설정하는 방법
        • 학습률이 초기 높은 값에서 시작하고, epoch이 커질수록 학습률이 감소
        • 주로 Computer Vision 프로젝트에서 사용 (확실 x)
      • 장점
        • Step Schedules보다 하이퍼파라미터(초기 학습률 = α0\alpha_0, epoch 수 = tt)가 훨씬 적음
        • 더 오래 학습할수록 더 잘 작동하는 경향이 있음
    • Linear Schedules
      • 개념
        • 학습 속도를 선형적으로 감소시키는 방법
        • 주로 deep Neural Network를 사용하여 훈련된 대규모 NLP에서 사용 (확실 x)
    • Inverse Sqrt Schedules
      • 개념
        • 역제곱근 활용하여 학습률을 감소시키는 방법
        • Cosine, Linear보다 선호되지 않음
      • 단점
        • 모델이 초기 높은 학습률에 매우 적은 시간을 보냄
    • Constant Schedules
      • 개념
        • 초기 학습 속도를 설정한 다음 이를 유지해주는 방법
        • 실제로 많은 문제에 대해 잘 작동
  • 관련 팁
    • Momentum + SGD -> Learning Rate Schedule 선택이 중요
    • RMSProp, Adam와 같은 복잡합 최적화 도구 -> Constanct 사용해도 좋음
  • Eary Stopping
    • 얼마나 오랫동안 훈련해야 하는지 선택하는 역할
    • 특정 epoch마다 validation set의 정확도를 확인하고 가장 좋은 성능을 보인 해당 지점의 모델의 매개변수를 저장

2. Choosing Hyperparameters (With GPU)

  • Grid Search
    • 튜닝하려는 하이퍼 파라미터 집합에 몇 개의 후보 값을 정하고, 가능한 모든 조합을 평가하여 최적의 조합을 찾는 방법
    • 일반적으로 로그 스케일(log-linearly spaced)로 선택하는 경우가 많음
    • 조정하려는 하이퍼 파라미터 수에 따라 지수적으로 증가하는 GPU가 필요
  • Random Search
    • Grid Search처럼 모든 조합을 탐색하는 것이 아니라, 무작위(random)로 샘플링하여 실험
    • 연산량 감소
  • Grid Search vs. Random Search
    • Grid Search
      • 고정된 간격(grid)으로 정해진 위치에만 샘플링 (빨간 점이 선택된 하이퍼파라미터 조합).
      • 중요한 하이퍼파라미터(Important Parameter)에 대한 최적의 값을 찾기 어려울 수 있음.
      • 만약 중요하지 않은 파라미터(Unimportant Parameter)에 많은 계산을 할당하면 비효율적인 탐색이 발생할 수 있음.
    • Random Search
      • 무작위로 하이퍼파라미터 값을 선택 (빨간 점이 불규칙하게 분포).
      • Grid Search와 달리 중요한 파라미터 공간을 더 넓게 탐색할 가능성이 높음.
      • 비효율적인 공간에 대한 연산 낭비를 줄이고, 최적의 값을 더 빠르게 찾을 가능성이 높음.

3. Choosing Hyperparameters (Without GPU)

  • Step 1. 초기 loss를 check하기
    • weight decay 없이 초기 loss 확인
  • Step 2. small sample에 overfit하게 만들기
    • 훈련 데이터의 작은 샘플(5~10 minibatches)에서 100% 정확도가 나오게 훈련을 진행
      • regularization 없이 architecture, learning rate, weight initialization을 통해 진행
    • 그래도 loss가 안 떨어지면 Learning rate를 낮추거나, 올바른 initialiation 방법을 선택해야 함
  • Step 3. Loss가 감소하는 Learning rate 찾기
    • 2단계에서 결정된 아키텍처를 사용하고 모든 학습 데이터를 사용
    • weight decay를 켜고 손실을 유발하는 learning rate 찾음
    • 100회 반복 이내에 손실 크게 감소
  • Step 4. 하이퍼파라미터 grid를 1~5 epoch으로 훈련
    • learning rate와 weight decay의 몇 가지 값을 선택하고, 몇 가지 모델을 훈련
  • Step 5. Refine grid, train longer
    • Step 4에서 가장 좋은 성능의 모델을 선택하고, learning rate decay 없이 10~20 epoch으로 더 오래 훈련을 진행
  • Step 6. Learning Curves 확인
    • Learning Curve를 보고 적절한 방안들을 적용해줘야 함
      • train loss가 초기에 평평하다가 감소하는 경우
        • 초기 가중치가 잘못된 것으로, 적절한 가중치 초기화 방법 적용 필요
      • train loss가 감소하지만 최적값에 도달하지 못한 경우
        • Learning rate가 너무 높아 최적값에 도달하지 못함
      • loss가 초반에 더 떨어질 수 있는 경우
        • Learning rate를 너무 빨리 낮추어 loss가 더 떨어지지 않음
      • train과 val의 정확도가 같이 올라가는 경우
        • 훈련을 더 진행해야 함
      • train과 val의 정확도 차이가 많이 나는 경우
        • overfitting이 된 케이스로, 적절한 regularization을 적용하거나 데이터를 추가로 사용해야 함
      • train과 val의 정확도 차이가 거의 없는 경우
        • underfitting이 된 케이스로, 훈련을 더 하거나 더 큰 모델을 사용해야 함
  • Step 7. Step 5로 다시 돌아가기
    • 계속 조정하며 best model을 찾는 단계
    • network architecture, learning rate, decay schedule, update type, regularization 등을 수정

2. After training

1. Model Ensembles

  • 개념
    • 다양한 independent model을 훈련
    • test 시 모든 모델을 사용하여 각 모델의 예측을 평균화
    • 앙상블 시, 1~2% 더 나은 결과를 얻을 수 있음
  • Tips and Tricks
    • Learning rate 활용
      • 여러 개의 독립적인 모델을 학습하는 대신, 단일 모델의 multiple snapshots을 사용
      • 특정 시점마다 Learing rate를 높게 설정하여 구간별로 모델의 snapshot을 저장
      • 이러한 검사점의 결과를 평균화하여 더 향상된 성능을 얻는 아이디어
    • Polyak averaging
      • 훈련 이후 가중치를 사용하는 것이 아닌, 훈련 중에 보는 모델 가중치의 실행 평균을 유지하는 것
      • Polyak Averaging 을 사용하면, 이전 가중치들의 지수 이동 평균(Exponential Moving Average, EMA)을 유지하면서 테스트 시 이 평균을 사용

2. Transfer Learning

  • 아이디어
    • CNN을 훈련하거나 사용할 때 많은 데이터가 필요하다는 문제를 해결하기 위해
  • 정의
    • 이미 학습된 모델을 새로운 작업(task)에 맞게 재사용하는 기법
    • Computer Vision 분야에서 널리 사용되는 아이디어
  • Transfer Learning with CNNs
    • Step 1. Imagenet과 같은 대규모 데이터로 CNN을 사전 학습
      • 이 모델들은 이미 많은 이미지에서 유용한 특징(Edges, Shapes, Patterns 등)을 학습
    • Step 2. 학습한 CNN 모델을 feature extarctor로 사용하기
      • 마지막 FC layer 삭제하여 클래스 분류기 제거
      • Conv layer는 freeze하여 학습되지 않도록 설정
    • Step 3. 기존 모델의 출력층(Fully Connected Layer)을 새로운 태스크에 맞게 교체
    • Step 4. Fine-tuning 진행
      • 학습률(Learning Rate) 조절
        • 원래 학습했던 모델보다 학습률(LR)을 1/10 수준으로 낮춤
        • 너무 빠른 학습률을 사용하면 기존 가중치가 크게 변해 기존에 학습된 정보를 잃을 위험
      • 낮은 레이어는 Freeze 가능
        • 일반적으로 CNN의 하위 레이어(초기 Conv 레이어)는 기본적인 특징(Edge, Texture)을 학습
        • 따라서 연산량을 줄이기 위해 낮은 레이어를 고정(Freeze) 하는 경우도 있음
  • Architecture의 중요성
    • CNN 구조가 개선될수록 ImageNet 분류 성능이 향상
    • 더 깊은 네트워크(더 많은 레이어)를 사용할수록 오류율(Error Rate)이 감소
    • 이러한 성능 향상은 전이 학습을 통해 다양한 다운스트림(task)에서도 긍정적인 영향을 미침
  • Guide
    • 적은 데이터, 비슷한 데이터: 가장 윗 layer에 linear classifier 적용
    • 적은 데이터, 다른 데이터: 가장 trouble... 여러 단계에 linaer classifer 적용
    • 많은 데이터, 비슷한 데이터: 소수의 layer를 미세조정
    • 많은 데이터, 다른 데이터: 많은 layer를 미세조정
  • 사용 분야
    • Object Detection
    • Image Captioning

3. Distributed Training

  • idea 1
    • 레이어 일부를 각각 다른 GPU에 배치하는 방법
    • GPU가 레이어 일부만 실행되는 것을 기다리는 데 많은 시간이 소요되어 좋은 아이디어 아님
  • idea 2
    • 모델을 여러 병렬 분기로 분할한 다음 각각 다른 GPU에서 실행하는 방법
    • GPU 간에 동기화(Synchronizing)이 필요하고 GPU 간의 activation과 grad activation의 통신이 가능해야 하는데, 이는 너무 비쌈
  • idea 3. Data Parallelism
    • n개의 이미지 배치를 가져온 다음 두 GPU 장치 각각에서 모델을 복제하고 실행하는 방법
    • GPU가 대부분의 처리를 독립적으로 수행할 수 있으며 GPU 간에 통신할 필요성이 줄어듦

4. Large-Batch Training

  • 아이디어
    • 하나의 GPU에서 매우 오랜 시간 학습하는 대신에 많은 GPU 세트에서 짧은 시간동안 학습하고자 함
  • 방법
    • 대표적으로 학습률 조정 방식을 활용
      • 장치 수 K일 때 Batch Size가 K배 증가 (데이터 병렬 처리가 진행됨로)
      • Batch Size를 K배 증가시키면 Learning Rate도 K배 증가
  • Learning rate Warmup
    • learning rate를 0에서 시작한 다음 1~5000 반복동안 학습 속도를 점진적으로 증가시켜 loss가 폭발하는 것을 방지

0개의 댓글