호로록 빨리 지식을 머리에 마구마구 집어 넣어보쟈

딥러닝을 포함한 머신러닝 분야에서 중요한 과적합에 대해서 알아보쟈

과적합이란?

  • 맨 왼쪽 그래프에서는 우리가 알고자 하는 값을 전혀 예측하지 못함 - 과소적합
  • 가운데 그래프는 학습 데이터로 학습 후 예측 값이 잘 되고 있음 - 적정, 좋은 모델
  • 학습 데이터로 학습을 했는데, 학습을 너무 잘해서 학습 데이터에 너무 잘 맞춰진 예측식을 만들다 보니까 학습 데이터가 보지 못한 시험 데이터에 대해서는 제대로 예측하지 못하는 경우가 있음 - 과적합

 

과적합 해결

  • 학습 데이터를 많이 확보
    • 학습 데이터 생성에는 돈과 시간이 많이 들어가기 때문에 학습 데이터를 많이 만드는데 어려움이 있을 수 있음
    • 그래서 학습 데이터를 확보하기 위해 아래와 같은 방법을 사용함
      1. 데이터 증식(Data Augmentation)
        • 기존 데이터 10개를 가지고 평행이동이나 대칭 이동을 해서 새로운 데이터 10개를 생성함
        • 그래서 훈련 시 기존 데이터 10개와 새로 생성한 데이터 10개를 합친 20개를 사용함
      2. 조기 종료(Early Stopping)
        • 학습을 하면 입력 값을 모델에 넣고 출력 값을 뽑아내고, 뽑아낸 예측 값을 실제 값과 비교를 해서 Loss를 계산해서 최적화를 진행함
        • 학습 반복 횟수가 늘어날수록 기존에 있던 학습 데이터를 맞출 확률이 높아짐
        • 기존에 있던 학습 데이터는 잘 배워지기 때문에 Loss가 작아짐
        • 시험 데이터는 학습에는 관여하지 않고 평가하는데 쓰이기 때문에 잘 맞추다가 과적합이 있다면 학습 반복 횟수가 늘어날 수록 Loss가 높아짐
        • 조기 종료 시점을 확인하여 과적합을 방지함
        • 굴곡이 2개가 생길 수도 있기 때문에 학습 반복 횟수인 epoch를 크게 해서 어떻게 그래프가 나오는지 확인해야 함
      3. L1, L2 정규화(L1, L2 Regularization)
        • Loss function에서 가장 아랫부분인 w*까지 간다면 train data에 최적화가 되었다는 것을 알 수 있음
        • 최소점까지 가지 못하게 방해물을 줌
        • 바운더리 경계를 만들어서 그 안에서만 처리하도록 함
        • Loss function 뒤에 정규화 텀(바운더리)을 붙여줌
        • L1 : 절댓값 미분이기 때문에 V 형태의 그래프, 0 기준 왼쪽은 -1, 0기준 오른쪽은 1 , 0 기준에서는 subgradient를 이용하면 됨
        • L2 : weight decay라고도 함
      4. 드롭아웃(Dropout)
        • 계산할 때 랜덤으로 노드를 제거하여 계산을 하지 못하도록 하는 방법
        • 들어오는 값에 0을 곱해서 노드를 없애는 것처럼 함
      5. 드롭커넥트(DropConnect)
        • 드롭아웃은 노드를 없애는 반면, 드롭커넥트는 일부 가중치를 0으로 만드는 것
      6. 교란라벨(DisturbLabel)
        • 과적합을 방지하기 위해 일부 실제 값을 틀린 라벨로 바꿔치기하는 것
      7. 배치 정규화(Batch Normalization)
        • 층과 층 사이에 배치 정규화를 넣어줌으로써 과적합을 해결함
        • 데이터에 대해서 항상 같은 분포에서 계산이 되도록 해줌
        • 각 배치마다 정규화된 정도가 다를 수 있어서, 감마와 베타를 곱하고 더해서 shift를 해줌
      8. 라벨 스무딩(Label Smoothing)
        • Loss를 계산할 때 어떤 특정 비율로 실제 값을 조정해주는 것
      9. 노이즈 주입(Noise Injection)
        • 입력값 자체나 레이어 중간의 임의의 노이즈를 주입
        • train data 자체에 노이즈를 추가함
        • 계산 과정에 노이즈를 추가함
      10. 교차 검증(Cross Validation)
        • 과적합을 직접적으로 해결하는 방법은 아님
        • 과적합이 됐는지 안됐는지 판단하는 척도
        • Train data, Validataion data, Test data로 나눔
        • Test data는 오로지 검증할 때만 사용함
        • 교차 검증은 Train data를 kfold 한 후 순차적으로 Validation data를 두는 것
        • 위 이미지는 3fold 예시
        • 예를 들어, 5fold일 경우 TTTTV, TTTVT, TTVTT, TVTTT, VTTTT 이런 식으로 할 수 있음
        • 단점 : 평균 loss 또는 평균 accuracy로 모델을 판단하기 때문에, k가 3일 경우 3번을 학습시켜야 하기 때문에 시간이 오래 걸린다는 단점이 있음

 

 

 

내용에 문제가 있으면 댓글로 알려주세요!

 

출처 : 인프런 - 실전 인공지능으로 이어지는 딥러닝 개념 잡기(딥러닝 호형)

+ Recent posts