딥러닝모델_성능개선

maro·2024년 5월 21일

딥러닝 모델 성능 개선 기법들

최적화

  • train data에서 최고의 성능을 얻으려고 모델 파라미터들을 조정하는 과정을 최적화라고 한다.
  • 모델을 학습하는 과정 하는 과정이 최적화 과정이다.

모델의 성능 - 일반화, 과대적합, 과소적합

  • 일반화(Generalization)
    • 훈련된 모델이 처음 보는 데이터에서 대해 잘 추론할 수 있는 상태.
    • 학습을 통해 일반화된 특징들을 잘 찾은 상태.
  • 과대적합(Overfitting)
    • 검증 결과 Train set에 대한 성능은 좋은데 Validation set에 대한 성능은 안좋은 상태로 모델이 학습을 과하게(overfitting)한 상태를 말한다.
    • 학습이 과하게 되어 쓸데 없는 패턴을 모두 외워버려 오히려 처음본 데이터에 대한 예측 성능이 떨어진다.
    • 보통 Train dataset의 크기에 비해 모델이 너무 복잡한 경우 발생한다.
    • 보통 과적합이라고 하면 Overfitting을 말한다.
  • 과소적합(Underfitting)
    • 검증 결과 Train set과 Validation set 모두 성능이 안좋은 상태로 모델의 학습이 덜(underfitting)된 상태를 말한다.
    • Train dataset의 크기에 비해 모델이 너무 단순해서 데이터에 대한 특징들을 다 찾지 못한 상태이다.

모델 복잡도에 따른 train/test set에 대한 성능 변화

과소적합(Underfitting) 개선

  • 모델의 복잡도를 높인다.
    • 모델 네트워크의 크기를 키운다.
      • Layer나 Unit 개수를 늘린다.
  • 데이터셋 종류에 맞는 Feature 추출 Layer를 hidden layer에 사용한다. (Convolution layer, Recurrent layer 등)
  • Epoch (또는 Step) 수를 늘려 더 학습시킨다.
    • Train/Validation의 성능이 계속 좋아지는 상태에서 끝난 경우 더 학습을 시킨다.

과대적합(Overfitting) 개선

  • 더 많은 data를 수집

    • 데이터 추가 수집
      • 일반적으로 데이터를 추가 수집하여 늘리는데는 시간과 돈이 많이 들기 때문에 힘들다.
    • 다양한 Upsampling 기법을 이용해 데이터를 증식시킨다.
  • 모델의 복잡도를 낮춰 단순한 모델을 만든다.

    • 네트워크 모델의 크기를 작게 만든다.
    • 모델의 학습을 규제하는 기법을 적용한다.
  • Epoch(또는 step) 수를 줄인다.

    • Validation의 성능 지표가 가장 좋았던 Epoch 까지만 학습시킨다.
  • 과대적합을 방지하기 위한 규제 방식은 모두 모델을 간단하게 만드는 방법들이다.

Epoch과 과적합

  • 데이터셋을 여러번 반복 학습을 하게 되면 초반에는 train, validation 성능이 모두 개선된다. 그러나 학습이 계속 반복되면 train 의 성능은 계속 좋아지지만 어느시점 부터는 Overfitting이 발생하여 validation 의 성능은 나빠진다.
  • Epoch을 반복하는 것은 같은 데이터셋을 반복적으로 학습하는 것이기 때문에 적절한 Epoch수를 넘어가면 Overfitting이 발생한다.
  • Validation set의 성능이 나빠지기 전의 반복횟수를 모델의 최적의 Epoch으로 선택한다.

DNN 모델 크기 변경

  • 모델의 layer나 unit 수가 많을 수록 복잡한 모델이 된다.

  • Overfitting일 경우 모델을 간단하게 만들고 Underfitting일 경우 모델을 크게 만든다.

    • Layer의 수, 각 layer의 unit 수를 조정
  • 큰 모델에서 시작하여 layer나 unit수를 줄여가며 validation loss의 감소 추세를 관찰한다. (또는 반대로)

  • 데이터에 비해 작은 모델의 특징

    • Train/Validation 성능 개선의 속도가 느리다.
      • 반복횟수가 충분하지 않으면 학습이 덜된 상태에서 중단될 수 있다.
    • Underfitting이 발생할 가능성이 크다.
  • 데이터에 비해 큰 모델의 특징

    • Validation 이 성능이 학습 초반부터 나빠진다.
    • Train에 대한 성능은 빠르게 개선된다.
    • Overfitting 발생할 가능성이 크다.

Dropout Layer 추가를 통한 Overfitting 규제

  • Neural network의 Overfitting을 방지하기 위한 기법

    • Overfitting의 이유는 모델이 너무 복잡하기 때문이다.
      • 너무 복잡한 모델은 학습시 Train dataset으로 부터 너무 많은 특성을 찾기 때문에 데이터에 대한 일반성이 떨어지게 된다. 그래서 표현력이 좋은(파라미터가 많은) 복잡한 모델인 딥러닝 모델은 Overfitting 에 취약하다.
    • Dropout Layer는 과적합을 방지하기 위한 기법으로 많이 사용된다.
      • Dropout layer를 사용하면 학습시 레이어를 구성하는 노드(유닛)을 일정 비율씩 비활성화(학습이 안되도록) 한다.
    • 효과
      • 학습시 신경망 연결을 끊어 특정 노드의 출력결과가 연결된 이후 노드에 많은 영향을 주어 문제가 될 수 있는 것을 방지한다.
      • 특정노드의 실수(오차를 내는데 영향을 주는 결과)가 전체 네트워크모델의 예측결과까지 이어지지 않도록 한다.
      • 결과를 출력하는데 특정 노드의 영향력이 지나치게 강하거나 약해지지 않게 한다.
  • Dropout Node

    • 학습시 일부 Unit(노드)들을 Random하게 빼고 학습한다. 이때 학습대상에서 빠지는 노드들을 Dropout Node라고 한다.
      • Dropout Note들 weight들을 모두 0으로 하고 모델을 학습시킨다. 그래서 update시 dropout node들은 최적화 대상에서 빠진다.
      • 매 Step 마다 Dropout Node들은 random하게 바뀐다.
  • Dropout rate

    • Dropout이 적용되는 Layer에서 전체 node 대비 dropout node의 비율로 보통 0.2~0.5 를 지정한다.
    • 너무 크게 지정하면 underfitting이 발생한다.
  • Dropout을 적용하면 각 노드들은 학습이 적게 되기 때문에 dropout을 적용하지 않았을때 보다 학습하는데 더 많은 Epoch이 필요하다.

  • 적용

    - Dropout은 **학습시에만 적용**하고 **검증, 테스트, 새로운 데이터 추론시에는 적용되지 않는다.**
    - pytoch는 `model.train()` 호출시 dropout layer가 적용된다. `model.eval()` 호출시 dropout layer가 작동하지 않는다.


    출처: https://wandb.ai/authors/ayusht/reports/Implementing-Dropout-in-PyTorch-With-Example--VmlldzoxNTgwOTE

Batch Normalization (배치정규화)

  • 각 Layer 에서 출력된 값을 평균=0, 표준편차=1로 정규화 하여 각 Layer의 입력분포를 균일하게 만들어 준다.

Internal Covariate Shift(내부 공변량 변화) 문제

  • 내부 공변량 변화란 학습 과정에서 각 층을 통과할 때 마다 입력 데이터 분포가 달라지는 현상이다.

  • 입력 데이터의 분포가 정규분포를 따르더라도 레이어를 통과하면서 그 분포가 바뀌어 성능이 떨어지는 문제가 발생한다.

  • 각 레이어를 통과할때 마다 분포를 정규분포로 정규화하여 성능을 올린다.

  • γ\gamma: scaling 파라미터, β\beta: shift 파라미터

    • 항상 일정한 분포로 나오는 것을 방지하기 위해 γ\gammaβ\beta를 이용해 분포에 약간의 변화를 준다.
    • γ\gammaβ\beta는 학습 과정에서 최적화 되는 값이다.
  • Batch Normalization은 입력데이터와 파라미터의 가중합을 구한 결과에 적용한 뒤 그 결과를 Activation 함수에 전달한다.

효과

  • 랜덤하게 생성되는 초기 가중치에 대한 영향력을 줄일 수있다.
  • 학습하는 동안 과대적합에 대한 규제의 효과를 준다.
  • Gradient Vanishing, Gradient exploding을 막아준다.

Optimizer의 Learning rate(학습율) 조정을 통한 성능향상

  • Optimizer의 Learning rate이 너무 크거나 너무 작으면 최적의 파라미터를 찾지 못할 수 있다. 그래서 Learning rate는 모델 성능과 밀접한 관계가 있는 아주 중요한 Hyper Parameter이다.
  • 학습 하는 동안 고정된 하나의 Learning rate를 사용할 수도 있으나 학습이 반복되는 동안 학습률을 변경하여 성능을 향상시킬 수 있다.
    • 학습 도중 학습률을 어떻게 조정할 지 다양한 알고리즘들이 있다.

Hyper parameter tuning

  • Parameters
    • 모델이 학습하여 데이터에 가장 적합한 값을 찾아내는 파라미터
      • Weights
      • Bias
  • Hyper parameters
    • 모형의 구조를 결정하거나 optimization 방법을 결정하는 변수들로 개발자가 직접 설정하는 파라미터
    • Optimizer의 종류
    • learning rate(α\alpha)
    • Hidden layer의 수
    • Layer들의 unit(node)의 수
    • Activation function의 종류
    • Epoch 수
    • Mini batch size
    • Regularization
    • dropout rate
  • 다양한 조합의 hyper parameter를 시도해서 loss 함수가 빠르게 감소하는 hyper parameter를 찾아내는 시도가 필요
profile
공부 & 프로젝트 & 개발 블로그

0개의 댓글