본문 바로가기

AIFFLE/STUDY

[DL] 일반화 성능 향상시키기

728x90
학습 내용
  • 일반화 성능을 향상 시키기 위한 여러가지 방법에 대해 알아보자
  • 과대적합 방지기법들에 대해 알아보자

 

 

일반화 성능 극대화 + 과대적합 방지하기 위한 방법 요약

  • 훈련 데이터를 더 모음. 더 나은 데이터를 모음
  • 더 나은 특성을 개발
  • 네트워크 용량 감소
  • (작은 모델을 만들기 위해) 가중치 규제를 추가
  • 드롭아웃 추가
  • 배치 정규화

 

 

데이터셋 큐레이션

  • 적절한 데이터셋으로 작업하고 있는지 확인하는 것이 중요
    • 데이터가 충분한지 확인
      • 입력에서 출력을 매핑하는 공간을 조밀하게 샘플링
      • 데이터가 많을 수록 좋은 모델
    • 레이블 할당 에러 최소화
      • 입력 시각화하여 이상치 확인, 레이블 교정
    • 데이터 정제, 누락된 값 처리
    • 많은 특성 중에서 어떤 것이 유용한지 확실하지 않다면 특성 선택을 수행

 

특성 공학

  • 데이터와 머신 러닝 알고리즘(신경망)에 관한 지식을 사용하는 단계
  • 모델에 데이터를 주입하기 전에 (학습이 아닌) 하드코딩된 변환을 적용하여 알고리즘이 더 잘 수행되도록 만들어줌
  • 모델이 수월하게 작업할 수 있는 어떤 방식으로 데이터가 표현될 필요가 있음
  • 특성을 더 간단한 방식으로 표현하여 문제를 쉽게 만듦
    • 잠재 매니폴드를 더 매끄럽고, 간단하고, 구조적으로 만듦
    • 해당 문제에 대한 이해도가 높아야 함
  • 최신 딥러닝 : 특성 공학 필요하지 않음
    • 신경망이 자동으로 원본 데이터에서 유용한 특성을 추출할 수 있기 때문
    • 좋은 특성은 적은 자원을 사용해서 문제를 더 멋지게 풀어낼 수 있음
    • 좋은 특성은 더 적은 데이터로 문제를 풀 수 있게함
      • 샘플 개수가 적다면 특성에 있는 정보가 유용해짐

 

조기 종료 사용하기 (Early Stopping)

  • 딥러닝에서는 항상 지나치게 파라미터가 많은 모델을 사용함
  • 잠재 매니폴드를 학습하기 위해 필요한 최소한 것보다 훨씬 많은 자유도를 가짐
  • 훈련 중 일반화 성능이 가장 높은 정확한 최적적합의 지점(과소적합과 과대적합 사이의 정확한 경계)을 찾는 것은 일반화 성능을 향상시킬 수 있는 가장 효과적인 방법 중 하나임
  • epoch가 끝날 때마다 모델을 저장하고 최상의 epoch를 찾은 후 저장된 모델 재사용
    • EarlyStopping callback

 

모델 규제하기 (Regularization)

가중치 규제 추가

  • 오캄의 면도날 이론 : 어떤 것에 대한 두 가지 설명이 있다면 더 적은 가정이 필요한 간단한 설명이 옳을 것
  • 간단한 모델이 복잡한 모델보다 덜 과대적합될 가능성이 높음
    • 간단한 모델 : 파라미터 값 분포의 엔트로피가 작은 모델
  • 과대적합 완화하기 위한 방법 : 모델의 복잡도에 제한을 두어 가중치가 작은 값을 가지도록 강제
    • L1 규제 : 가중치의 절댓값에 비례하는 비용 추가(가중치의 L1 norm)
    • L2 규제(가중치 감쇠) : 가중치의 제곱에 비례하는 비용이 추가(가중치의 L2 norm)

→ 가중치값의 분포가 더 균일하게 됨 : 가중치 규제

  • 규제
    • 훈련 데이터에 완벽하게 맞추려는 모델의 능력을 적극적으로 방해하는 일련의 모범 사례
    • 모델의 검증 점수 향상이 목적
  • L1 Regularization

 

$$Cost = \sum_{i=0}^N(y_i - \sum_{j=0}^M x_{ij}W_j)^2 + \lambda \sum_{j=0}^M \left| W_j \right|$$

 

  • L2 Regularization

 

$$Cost = \sum_{i=0}^N(y_i - \sum_{j=0}^M x_{ij}W_j)^2 + \lambda \sum_{j=0}^M W_j^2 $$

 

적절한 모델 크기를 찾는 일반적인 작업 흐름

  • 비교적 적은 수의 층과 파라미터로 시작
  • 검증 손실이 감소되기 시작할 때까지 층이나 유닛 개수를 늘림
  • 작은 모델이 기본 모델보다 더 나중에 과대적합되기 시작
  • 용량이 큰 모델은 첫 번째 epoch이후 거의 바로 과대적합이 시작되어 갈수록 더 심해짐
    • 용량이 클수록 더 빠르게 훈련 데이터를 모델링
    • 과대적합에 민감해짐

 

드롭아웃 추가

  • 훈련하는 동안 무작위로 층의 출력 특성을 일부 제외시킴(0으로 만듦)
  • 테스트 단계에서는 어떤 유닛도 드롭아웃되지 않고 대신에 층의 출력을 드롭아웃 비율에 비례하여 줄여줌
  • 훈련할 때보다 더 많은 유닛이 활성화되기 때문
  • 각 샘플에 대해 뉴런의 일부를 무작위하게 제거하면 뉴런의 부정한 협업을 방지하고 과대적합을 감소시킴

 

생각 정리

  • regularizer와 dropout등 개념들에 대한 수식적인 이해가 좀 더 필요할 것 같다
  • 시간을 가지고 꼼꼼하게 정리하는 시간을 가지자

 

 

참고자료

케라스 창시자에게 배우는 딥러닝

728x90