[Standalone DLç] #13 Lecture - 08 Overfitting, Regularization

Prob 1: Overfitting

Model Capacity

  • 높아질수록 더 많은 현상을 설명할 수 있게 된다
  • ex. 2차보다 4차함수가 model capacity가 더 높을 수 있음

Overfitting

  • 학습하고 있는 데이터셋에 대해 과하게 학습해서, 좀 특이한 케이스 까지도 완전하게 학습해버린 상태.
  • training 세트에만 완벽하게 적응한 상태
  • 그렇지만 실제로 사용하는 것은 test set일 것 (혹은 테스트셋에 없는 데이터들) - 이렇게 general한 경우에는 적용이 잘 되지 않을 것

Risk

True Risk

  • 전체 모든 데이터에 대한 risk
  • 실제로 계산할 수 없음

Empirical Risk

  • 아주 작은 subset으로 계산한 risk
  • true risk를 줄이기 위해 이것을 줄여나감 !

training set을 외워버린 것은 아닌지 확인하는 과정이 꼭 필요함 ( = validation set을 통해서 !)

Ans : Regularization

패널티를 준다 / 일반화를 한다

A1. L2 Regularization

\[Loss = MSE + R(/lambda) R(/lambda) = /lambda ||w|| ^2\]
  • 각 파라미터들이 너무 발산하지 않도록 제한하는 것
  • loss가 줄어드는 방향으로 가야 하기 때문 - 만약 w가 너무 커진다면 loss 값 자체도 커질 것이기 때문에 이를 제한할 수 있게 됨 (그 방향으로 가지 않도록!)

왜 오버피팅을 줄여주는가?

Image

  • 학습 과정 = global minimum을 찾아가는 과정. BUT 데이터셋을 바꾸면 global minimum이 다른 곳에 있을 것이기 때문에 제대로 예측이 되지 않을 수 있음
  • 이때 Regularization 항을 추가해줄 경우 - global minimum에 빠지지 않고 다른 어느 적절한 곳에 도착하도록 하기 위함임 → 다른 데이터에서도 잘 적응력을 가지기 위해
  • 수학적 증명 가능 !


A2. Dropout

Image

p의 확률로 각각의 노드를 꺼버리는 것

  • 너무 복잡하게 예측하지 말고 최대한 간단하게 예측할 수 있도록 학습해라
  • 노드가 많으면 학습이 잘 안될 수 있음 (나뉘는 것이니까) - 몇 개는 꺼버리면 효율적으로 학습이 잘 될 수 있음
  • 노드가 꺼지고 켜질 때마다 또 새로운 하나의 모델이 되는 것.
  • 즉, 복잡한 하나의 모델로 예측하는 것이 아니라, 간단한 여러 종류의 모델로 예측해서 총합하여 사용하는 것 ( ~ 앙상블 기법)



Prob 2: Gradient Vanishing

Image

  • x, y 가 합쳐지는 노드 g = xy 가 있다고 해보자. backpropagation을 통해 파라미터를 학습해나가게 될 것
  • 파라미터 x를 업데이트하기 위해서는 걔의 gradient를 알아야 그만큼 스텝을 더 밟아나갈 수 있음 - 마지막 항은 값 자체가 y가 됨
  • y는 어떠한 activation function을 거쳐서 나오게 된 것임 - sigmoid 라고 했을 때, 만약 아주 작은 값이 들어갔다면 y = 0.0000001이 등장하게 됨
  • 한 번 이렇게 되어버리면, 그 전과 그 전, 계속 전쪽으로 추정해 나갈때 다 0에 가까운 값들로 나오게 될 것
  • 즉, 앞쪽 (최종 쪽에 가까운 쪽) 은 어느 정도 학습이 된 상태이지만, 그 전으로 가게 되면 0에 가까운 값들만 들어오게 되므로 스텝을 밟아나갈 수가 없음 = gradient vanishing

Image

  • 레이어를 쌓을수록 시그모이드가 곱해지고 곱해지는 효과가 남
  • 시그모이드를 곱하면 곱할수록 거의 직선에 가까운 형태가 됨 - 어느 값이 들어가도 0에 가까워짐 - 학습하기가 어려운 상태가 됨
  • 모델이 deep해질수록 학습이 되지 않는다는 문제


Ans : ReLU Activation

Image

  • ReLU 등 아주 다양한 activation function이 나오게 됨
  • sigmoid와 다른 함수들의 성능 차이가 엄청나게 남 - 딥하게 쌓을수록 더 잘됨 !



Others

Xavier Initialization

Image

  • sigmoid를 사용할 때 가중치를 초기화하는 방법
  • standard Gaussian Dist에서 랜덤하게 뽑아서 initialization을 했다고 생각하자
    • 작은 상수를 곱해서 initialization 값을 준 경우 : training을 하면 할수록 더 작은 값으로 가게 될 것이고, 점점 0에 가까운 상태가 될 것임
    • 큰 상수를 곱해서 Initialization 값을 준 경우 : training을 하면 할수록 절댓값이 더 큰 값으로 가게 될 것이고, 점점 -1 혹은 1에 가까운 상태가 될 것임
  • 어떠한 수학적 방법을 사용하면, 이것들이 아무리 많은 activation을 거치더라도 Gaussian 모양을 잘 유지하면서 전달된다

Batch Normalization

Image


[Standalone DL] #14 Lecture - Hyperparameter Tuning

Option for Tuning

Number of hidden layer

  • flexible : 1~10 layer for MLP. 10개 넘어가면 의미가 없는 듯함.
  • Recent CNN의 경우 더 많은 레이어를 가짐
    • ResNet의 경우 레이어가 152개임.
    • 그렇다면 Vanishing Gradient가 발생하지는 않나?

    → 그 모델의 또 해결 방안이 있음 !

Number of hidden unit

  • 10개 ~ 2048개 정도 시도해볼 수 있음

Activation Function

  • Sigmoid, tanh, ReLU, …

(현재 MLP 구조를 보고 있기 때문에 몇 없지만, CNN으로만 가도 더 많은 요소들이 추가가 될 것임)


Type of Optimizer

  • GD : 데이터셋 전체를 학습시키는 방식
  • SGD : 데이터셋을 chunking하여 학습시키는 방식
  • RMSProp
  • ADAM : 가장 많이 사용하는 방식
  • AdaDelta
  • 최신에 나온 것이라고 무조건 잘 하는 것은 아님. 간단한 태스크에 대해서는 SGD가 가장 잘 함

learning rate

  • 1e-5 ~ 1e-1 범위 내에서 진행

L2 Coef

  • 1e-5 ~ 1e5 범위 내에서 진행

Dropout

  • 0.1 ~ 0.5 범위 내에서 진행
  • 모델이 너무 복잡한데 데이터가 부족하다면 0.7정도 까지 쓰는 듯함

Batch Size

  • 128, 256, 512 정도의 값을 사용
  • 우선 batch size를 최대한 키움 ( = GPU에 올리는 데이터가 많아진다는 것) → out of memory error가 뜰 때가 있음
  • 그것이 발생하는 언저리까지 올리기 (그래야 빨리 끝나기 때문)
  • overfitting이 되었다면 batch size를 줄여본다 (이것이 왜 overfitting의 문제를 해결해주는가? 에 대한 의문이 생길 수 있는데, 이는 다음에 ..)

Epoch

  • overfitting을 확인해야 함
  • val_loss를 train_loss와 함께 트래킹해야함. n_epoch에서 val_loss가 줄어들지 않는다면, 2-3번의 epoch 이후 멈춰주는 것이 좋음


4 Ways to Tune Exp

Method

  • 그리드 서치를 해서, hyperparameter 변화에 대한 전반적인 경향성 확인하기
  • 랜덤 서치하며 좋은 조합 선택
  • 지속적으로 하이퍼 파라미터 튜닝
  • 파악이 되면 Bayesian optimization - 범위를 정하고 프로그램을 돌려서 진행 !

Caution

  • test accuracy 보다, val accuracy 를 확인하면서 학습을 진행해야 함 !