7 분 소요

모델 일반화 능력, 최적화, 과대적합 방지

과대적합의 원인


![[Pasted image 20240928143811.png]]

  • 과소적합(underfitting): 훈련 데이터의 손실이 낮아질수록 테스트 데이터의 손실도 낮아짐
  • 과대적합(overfitting): 훈련 데이터에서 훈련을 특정 횟수만큼 반복하고 난 후 일반화 성능이 더 높아지지 않으며 검증 세트의 성능이 멈추고 감소(새로운 데이터와 관련성이 적고 잘못된 판단)

매니폴드 가설


실제 세상의 모든 데이터가 고차원 공간 안에 있는 저차원 매니폴드에 놓여있다.

  • 머신러닝 모델은 가능한 입력 공간 안에서 비교적 간단하고, 저차원이며, 매우 구조적인 부분 공간(잠재 매니폴드)만 학습
  • 매니폴드 중 하나 안에서 두 입력 사이를 보간(interpolation)하는 것이 항상 가능. 연속적인 경로를 따라 한 입력에서 다른 입력으로 변형할 때 모든 포인트가 이 매니폴드에 속함

지역 일반화 궁극 일반화


지역 일반화(local generalization): Interpolation(내삽)의 개념 데이터들을 활용해 manifold 사이의 값들을 예측한다!

궁극 일반화(extreme generalization): Extrapolation(외삽)의 개념 데이터들이 가지는 추세를 이용해서 manifold 밖의 값들을 예측한다! 인간의 상상력의 발현과 같은 개념

![[Pasted image 20240928143854.png]]

Universal Function Approximation Theorem


  • 하나의 hidden layer 만으로도 어떠한 function도 근사할 수 있다는 정리이다!!
  • 우리가 데이터들을 이용하여 좋은 function을 만드는 과정을 training이라 한다.
  • 인공 신경망은 모든 함수를 근사할 수 있기 때문에 어떠한 Input Ouput Data에 대하여도 그 관계를 근사하는 함수를 찾을 수 있다.
  • 즉, 인공 신경망은 함수이며 이 함수는 데이터들이 위치한 공간인 manifold를 잘 설명하는 함수이다!!
  • 단일 층을 사용하지 않고 심층 신경망을 사용하는 단일 층보다 심층 신경망이 표현력이 더 좋기 때문이다.

![[Pasted image 20240928144132.png]]

훈련, 검증, 테스트 세트


  • 하이퍼 파라미터: 모델을 잘 학습 시키기 위해서 학습을 시키는 사람이 직접 지정해 주어야 되는 파라미터들이다.
  • 훈련 데이터 세트: 인공 신경망의 파라미터들을 학습을 시키는데 사용되는 데이터 세트이다.
  • 검증 데이터 세트: 학습 과정이 잘 되고 있는지를 체크하기 위하여 사용되며 검증 과정을 통하여 하이퍼 파리미터들을 적절하게 조정하게 된다.
  • 테스트 세트: 학습 과정이 모두 끝난 후에 최종적으로 성능을 체크하기 위하여 사용이 되는 데이터 세트이다.

정보 누설(Information Leak)


문제점: 훈련 과정에서 우리는 계속 검증 데이터 셋에 대한 내용을 보게 된다. 이러한 과정을 정보 누설이라 한다. 그런데 우리가 원하는 것은 특정 데이터 셋에 대하여만 잘 맞는 모델이 아니라 새로운 데이터 셋에 대하여도 잘 맞는 모델을 학습을 시키기를 원한다. 그러나 검증 데이터 셋의 내용을 계속 보게 되면서 우리의 일반화 성능이 떨어지게 된다.

단순 홀드 아웃 검증


  • 훈련 세트, 홀드 아웃 검증 세트, 테스트 세트 3개로 데이터 세트가 구성된다.
  • 위 3개의 데이터 세트는 고정(Hold Out) 되어 있으며, 테스트 세트는 학습 과정에 절대 참여하지 않도록 한다.
  • 검증 세트와 테스트 세트의 데이터 양이 작은 경우 전체 데이터를 통계적으로 대표하지 못할 수도 있다.

![[Pasted image 20240928144824.png]]

K 겹 교차 검증


  • 총 데이터의 갯수가 적은 데이터 셋에 대하여 정확도를 향상시키기 위하여 사용한다.
  • 과정
  1. Training Set과 Test set으로 나눈 후에 Training Set을 K개의 fold로 나눈다.
  2. 한 개의 Fold에 있는 데이터를 다시 K개로 쪼갠다음, K-1개는 Training Data로 마지막 한개는 Validation Data set으로 지정한다.
  3. 모델을 생성하고 예측을 진행하고 이에 대한 에러값을 추출한다.
  4. 다음 Fold에서 Validation 셋을 바꿔 지정하고, 이전 Fold에서 Validation 역할을 했던 Set은 다시 Training set으로 활용한다.
  5. 이를 K번 반복한다.

![[Pasted image 20240928145036.png]]

셔플링을 사용한 반복 K-겹 교차 검증


  • 비교적 가용 데이터가 적고 가능한 정확하게 모델을 평가하고자 할 때 사용한다.
  • K 겹 교차 검증에서 K개의 분할로 나누기 전에 매번 데이터를 무작위로 섞는다. 최종 점수는 모든 K겹 교차 검증을 실행해서 얻은 점수의 평균이 된다.

모델 평가에 대해 유념해야할 점


  • 1) 대표성 있는 데이터

    훈련 세트와 테스트 세트가 주어진 데이터에 대한 대표성 필요.

    훈련(80%) / 테스트(20%) 세트로 만들면 훈련 세트는(0~7) 테스트 세트는(8~9)로 담긴다.

    그렇기에 데이터를 무작위로 섞는 것이 일반적

  • 2) 시간의 방향

    과거로부터 미래를 예측 하려고 하면 데이터 분할하기 전 무작위 방식은 X

    → 미래의 정보가 누설되기 때문

    훈련 세트 데이터보다 테스트 세트에 있는 모든 데이터가 미래의 것이어야 함

  • 3) 데이터 중복

    한 데이터셋에 어떤 데이터 포인트가 두 번 등장하면 데이터 나누는 과정에서 데이터 포인트가 중복될 수 있음. 훈련 데이터의 일부로 테스트하는 경우가 생김!

훈련 성능 향상하기


  1. 훈련이 시작되지 않거나 너무 일찍 중단 되는 경우: 경사 하강법 과정에 대한 설정에 문제가 있는 경우
    • 학습률을 낮추거나 높인다.
    • 배치 크기를 증가시킨다.
  2. 모델이 훈련이 되지만 어떤 이유에서인지 검증 지표가 전혀 나아지지 않는 경우: 모델이 훈련되지만 일반화가 되지 않는 경우
    • 입력 데이터에 타깃 예측을 위한 정보가 충분하지 않을 수 있다. 이런 경우 데이터셋 자체의 문제기 때문에 데이터셋 변경이 필요하다.
    • 현재 사용하는 모델의 종류가 문제에 적합하지 않을 수 있다. ex) 시계열 데이터의 경우 순환 신경망 계열의 모델이 적합하다.
  3. 모델이 훈련이 되고 검증 지표가 향상되면 먼저 과대적합을 시켜야 된다.
    • 이때 과대적합을 시키지 못한 경우 모델의 표현 능력이 부족한 경우로서 표현력을 더 키우기 위해서 더 큰 모델이 필요하다.

Feature Engineering


  • 심층 신경망 이전의 머신러닝 방법론에서는 알고리즘의 특성상 좋은 Feature들을 미리 Extraction 하는 방법이 중요

  • 좋은 Feature를 Extraction 할 수 있다면 적은 데이터를 가지고도 좋은 성능의 모델을 만드는 것이 가능

  • 심층 신경망은 이런 Feature Extraction 과정을 신경망이 대체를 하면서 더 이상 사전에 데이터에서 좋은 Feature를 Extraction 하는 과정이 필요 없어짐

  • 다만, 심층 신경망을 학습 시키기 위해서는 큰 데이터셋이 필요하기 때문에 작은 데이터셋에서는 아직도 Feature Engineering이 중요

일반화 성능 향상하기


모델이 어느 정도 일반화 성능을 갖고 과대적합이 가능하다면 이제 일반화 성능을 극대화 시키는게 중요. 일반화 성능을 향상시킨다는 것은 Overfitting을 막는다는 것과 같은 의미

  1. 조기 종료하기
    • 훈련 중 일반화 성능이 가장 높은 정확한 최적적합 지점을 찾고 학습을을 중단한다.
    • Trainging Loss와 Validation Loss Graph를 통하여 조기 종료 지점을 지정하고 해당 지점의 모델의 파라미터를 가져와서 사용한다.
  2. 가중치 규제
    • 오캄의 면도날 이론: 간단한 모델이 복잡한 모델보다 더 넓은 범위를 설명한다. 즉, 가중치 값의 분포가 넓은 것이 좋다.
    • L1 규제 또는 L2 규제를 통하여 특정 파라미터가 과도하게 커지는 것을 방지한다.
  3. 모델 사이즈 조절하기
    • 모델이 과도하게 큰 경우 복잡도가 증가하여 과적합이 발생한다.
    • 적절한 모델 크기를 찾는 일반적인 작업 흐름: 비교적 적은 수의 층과 파라미터로 시작→검증 손실이 감소되기 시작할 때까지 층이나 유닛 개수를 늘린다.
  4. 드랍아웃 추가하기
    • 은행에서 부정 행위가 발생하려면 은행원들 사이의 유대 관계(상호 작용)가 있어야 된다. 이러한 유대 관계가 적다면 부정 행위 발생은 적어진다. 이렇듯 신경망에서도 뉴런 사이의 상호 작용을 줄이기 위해서 확률적으로 신경망의 가중치를 죽여서 학습을 시키는 방법이 드랍아웃이다.
    • 과정: 학습 과정에서 확률적으로 신경망의 가중치를 0으로 만든다.(확률 0.2로 지정하면 10개중 2개가 랜덤하게 0으로 되고 학습이 수행된다.) → 테스트 과정에서는 모든 신경망의 가중치를 살리며 층의 출력을 드룹아웃 비율에 비례하여 줄여준다.

일반화 성능을 극대화하고 과대적합을 방지하기 위한 방법


  • 훈련 데이터를 더 모은다. 더 나은 데이터를 모은다.
  • 더 나은 특성을 개발한다.
  • 네트워크의 용량을 감소한다.
  • 가중치 규제를 추가한다.
  • 드롭아웃을 추가한다.

데이터셋 큐레이션: 데이터를 곡선에 맞추는 작업

  • 충분한 데이터
  • 레이블 할당 에러 최소화
    • 입력 시각화를 통한 이상치 확인, 레이블 교정
  • 데이터를 정제하고 누락된 값을 처리
  • 많은 특성 중에서 어떤 것이 유용한지 확실치 않다면 특성을 선택해서 진행

특성공학

  • 데이터 및 머신러닝 알고리즘을 학습 전에 적용하는 것
  • 좋은 특성(컴퓨터가 이해할 수 있는 차원의 특성)은 더 적은 데이터로 문제를 풀 수 있음

조기 종료 사용

  • 일반적으로 딥러닝 모델은 잠재 매니폴드 학습을 위해 필요 이상의 자유도를 가지기 때문에 학습손실이 최소화되기 전에 중단하는 것이 일반화 성능 향상에 좋음
  • 일반화 성능이 가장 높은 정확한 최적적합 지점을 찾는 것 (과대적합과 과소적합 사이 정확한 경계)
  • EarlyStopping 콜백: 에포크가 끝날 때마다 모델을 저장하고 최상의 에포크를 찾은 후 저장된 모델을 재사용하는 방법
    • 검증 지표가 더 이상 향상되지 않으면 바로 훈련을 중지하고 그전까지 최상 검증 점수를 낸 모델을 남김

모델 규제(Regularization)

  • 오버 피팅을 방해하는 방법으로 검증 점수 향상을 목표로 함
  • 항상 정확한 평가 절차를 따라야만 일반화 달성이 가능함
  • 데이터에 알맞은 모델 크기를 찾기 위해서는 검증 세트에 평가해 봐야 함
    • 모델 크기가 너무 작으면 과대적합이 늦어지고 너무 크면 빨라짐
    • 특히 모델 크기가 클 경우 검증 손실이 매우 불안정함

가중치 규제(Weight regularization)

  • 데이터와 네트워크 구조가 주어졌을 때 이를 설명할 수 있는 가중치 집합은 여러 개일 수 있는데 가장 간단한 모델일수록 과대적합 확률이 낮음(오컴의 면도날: 더 적은 가정이 필요한 설명이 옳을 확률이 높다)
    • 간단한 모델? 파라미터 값 분포의 엔트로피가 작은 모델 또는 적은 수의 파라미터
  • 모델의 복잡도에 제한을 둬서 가중치가 작은 값을 가지도록 강제하는 것으로 손실 함수에 가중치와 연관된 비용을 추가함
    • L1 규제: 가중치 절대값에 비례하는 비용 추가 (L1 norm)
    • L2 규제: 가중치 제곱에 비례하는 비용 추가 (가중치 감쇠, weight decay)
  • 일반적으로 작은 모델에서 사용하며 큰 모델에서는 드롭아웃이라는 규제 방법을 사용함

드롭아웃

  • 큰 모델은 파라미터가 많아서 가중치 규제가 모델 용량 및 일반화에 영향을 적게 미치기 때문에 규제할 수 있는 방법이 필요함
  • 모델 층에 해당 기법을 적용하면 훈련하는 동안 무작위로 층의 출력 특성을 일부 제외함(0으로 만듦)

🤔드롭아웃이 왜 앙상블로 생각할 수 있는가

  • Dropout을 한 것 자체가 하나의 모델이고 다음 Dropout을 하면 새로운 모델2로 학습을 수행한 것이고 최종적으로 테스트 과정에서 지금까지 학습한 모든 파라미터들을 죽이지 않고 사용하고 출력을 Dropout 비율만큼 줄이기 때문에 기존의 모델 결과들을 합치는(앙상블) 결과를 주어서 테스트를 수행한다.

| pruning(가지치기) vs. dropout 차이

  • dropout의 경우 epoch마다 다른 모델을 통해 가중치를 업데이트 시켜나가므로 앙상블의 효과를 낼 수 있다.
  • pruning의 경우 한번 잘라낸 뉴런은 보관하지 않고 dropout의 경우 학습 시에 뉴런들을 랜덤으로 껐다가 (보관해두고) 다시 켜는 과정을 반복

| 정보 누설 - 검증 테스트와 테스트 세트를 나누는 이유 검증 세트의 성능을 기반으로 모델의 설정을 튜닝하면 검증 세트로 모델을 직접 훈련하지 않더라도 빠르게 검증 세트에 과대적합이 될 수 있는데, 이 현상의 핵심은 정보 누설(information leak) 개념에 있습니다. 검증 세트의 모델 성능에 기반하여 모델의 하이퍼파라미터를 조정할 때마다 검증 데이터에 관한 정보가 모델로 새는 것입니다. 모델은 간접적으로라도 테스트 세트에 대한 어떤 정보도 얻어서는 안 됩니다. 테스트 세트 성능에 기초하여 튜닝한 모델의 모든 설정은 일반화 성능을 왜곡시킬 것입니다.

| 드롭아웃을 앙상블로 생각

  • 앙상블을 테스트하는 과정, 합쳐지는 과정
  • Dropout을 한 것 자체가 하나의 모델이고 다음 Dropout을 하면 새로운 모델2로 학습을 수행한 것이고 최종적으로 테스트 과정에서 지금까지 학습한 모든 파라미터들을 죽이지 않고 사용하고 출력을 Dropout 비율만큼 줄이기 때문에 기존의 모델 결과들을 합치는(앙상블) 결과를 주어서 테스트를 수행한다.

댓글남기기