Study/머신러닝

머신러닝 BASIC _ 모델 평가와 개선

김 도경 2024. 11. 4. 15:24

[2024.11.04] 필수 온라인 강의 Part15 Machine Learning Basic CH07 모델 평가와 개선

모델 평가와 기초

 

  • 강화학습(Reinforcement Learning)
    - 학습하는 ML의 한 분야
    - 모델이 게임과 같은 환경에서 상호작용하도록 설정해두고 특정 행동을 했을 때 리워드를 부여해 목표를 달성하도록 유도

  • 모델 평가가 놓치는 부분
    - 데이터셋은 사람의 판단을 모아놓은 것
    - 구성 과정에서 의도하지 않았더라도 사람이 가진 편견이나 선입견 등이 반영

  • 모델 평가의 구성 요소
    - 정성평가(Qualitative Evaluation)
       - 모델에 들어가는 입력값과 그에 따른 모델의 출력값을 사람이 직접 확인해보면서, 모델의 성능이 어떤지 판단하는 것

    - 정량평가(Quantitative Evaluation)
       - 모델의 성능이 얼마나 좋은지 수치로 나타내는 평가 지표(Evaluation Metric) 함수를 설정
       - 이 지표를 활용해 모델 성능의 좋고 나쁨을 판단하는 것.
       - 정량평가 지표(Evaluation Metric) : 모델이 정답을 얼마나 맞혔는지를 수치로 나타내는 지표.
           - 손실함수 역시 목표값과 현재 값의 차이로 계산되므로 성능 지표

  • 손실함수와 정량평가 지표
     - 모델의 학습과정에 직접 기여하는가에서 차이가 있음

    -> 연구를 진행한다면 비교를 위해 완전히 동일한 평가지표를 사용
    ->  서비스를 만든다면 서비스 자체의 목표와 부합하는 평가지표를 선정

  • 정량평가 지표
    - MAE (Mean Absolute Error)
    - MSE (Mean Squared Error)
    - RMSE (Root Mean Squared Error)
    - 교차 엔트로피 (Cross Entropy)

  • Train-Test 데이터셋 분할
    - 일반적으로 데이터셋 전체를 학습에 전부 사용하지는 않음
    - 일정 비율을 랜덤 샘플링해서 성능 평가용 데이터셋을 분리해두고 나머지만을 사용

    - 검증용 데이터셋(Validation Dataset)
        - 학습 데이터셋에서의 손실함수값은 거의 0에 가까운 값까지 떨어뜨릴 수 있지만, 그것만으로 처음 보는 데이터가 들어왔을 때 얼마나 정확한 결과를 내는지는 알 수 없음
        - 모델의 일반화 성능을 측정
        -  실제로는 8:1:1정도로 분할해 학습용 / 검증용 / 평가용 세개로 사용

  • 모델의 복잡도(Complexity, Capacity)
    - 모델이 더 복잡하고 어려운 데이터까지 학습할 수 있는 용량. 일반적으로 파라미터의 수가 많을수록 (딥러닝의 경우 레이어 및 뉴런 수가 많을수록), 복잡도가 커짐
    -> 복잡도가 클수록 무조건 좋지 않음

    - 과적합(Overfitting)
          - 모델이 학습데이터의 패턴에만 과하게 학습
          - 학습 데이터에서의 손실함수 값은 0에 수렴하지만 평가 데이터셋 등 새로운 데이터에 대해서는 전혀 성능을 내지 못하는 상황

          - Regularization : 과적합 문제의 방지를 위해, 모델의 복잡도가 필요 이상으로 커지지 않도록 제한을 두는 방법론

모델의 일반화 성능과 데이터셋의 분할

 

  • 모델의 일반화 성능 (Generalization Ability)
    - 모델이 접한적 없는(Unseen) 별도의 평가용 데이터를 구성해 모델의 일반화 성능을 측정

  • 데이터 누출(Data Leakage) 문제
    - 학습 데이터셋 일부가 평가용 데이터셋에 포함되어, 모델 성능이 비정상적으로 높게 측정되는 문제
    - 원본 데이터셋이 중복 샘플이나 매우 유사한 샘플들을 많이 포함하는 경우

  • 평가용 데이터셋의 대표성 부족
    - 평가 결과의 신뢰도가 부족한 경우
    - 너무 작은 테스트셋
    - 불균형한 테스트셋

  • 평가용과 검증용 데이터셋의 역할
    - 2분할 방법 : 2개로 분할해 학습용(train)과 검증용(validation)으로 사용
       - 는 평가와 검증을 엄밀히 구분해 사용
    - 3분할 방법 : 전체 데이터셋을 3개로 분할해 평가용 데이터셋을 추가로 활용

    - 하이퍼 파라미터의 최적화와 학습 완료된 모델의 선별에 사용
    - 모델 구조 자체가 검증용 데이터에 과적합될 수 있어, 평가용 데이터셋과는 구분해 사용하는게 일반적.

  • k-fold 교차검증(Cross Validation)
    - 데이터셋을 k(보통 3~10)개의 같은 크기의 부분집합(fold)으로 나눔
    - 각 fold를 번갈아가며 검증용 데이터로 사용해 모델을 학습/검증하는 과정을 반복
    - 총 k번의 학습과 검증을 진행한 뒤 각각의 결과를 평균내어 모델의 최종 성능을 추정하는 방식

    - 모든 데이터를 학습 및 검증에 사용하므로 효율적으로 학습 데이터를 활용할 수 있고, 다양한 데이터를 검증에 활용해 편향을 줄일 수 있음
    - 데이터나 모델이 큰 경우 모델 학습/검증을 k번 반복하게 되므로 많은 리소스가 필요함

  • 내삽(Interpolation)
    - 학습 데이터셋의 범위 내에서 새로운 데이터를 예측하거나 분류하는 것.
  • 외삽(Extrapolation)
    - 학습 데이터셋의 범위를 넘어서는 새로운 데이터를 예측하거나 분류하는 것.
    - 학습 데이터에 없는 영역에서의 패턴을 추정해야 하기 때문에, 성능이 낮아지기 쉬움
  • 일반화 성능(Generalization Ability)
    - 외삽 성능, 내삽 성능을 포함해, 모델이 처음 접하는(Unseen) 데이터에서 얼마나 좋은 성능을 내는지 나타내는 개념

  • 검증용 데이터셋
    - 내삽성능의 측정을 위해 학습용 데이터셋과 같은 분포를 유지
    - 학습 데이터셋과 분리해 저장하지 않고, 매번 일정량을 랜덤으로 분할해서 쓰기도 함
  • 평가용 데이터셋
    - 외삽 성능까지 측정할 수 있도록, 최대한 다양한 샘플들을 포함해서 구성

  • 데이터셋의 규모에 따른 분할방법
    - 적당하다면 (1000~10000개 정도) : 7:1:2로 3분할해 사용
    - 너무 작다면 (100개 정도) : 2분할해서 50:50으로 사용 or 5-fold 교차검증 사용
    - 너무 크다면 (1,000,000 장 이상) : 3분할, 970,000 : 10,000 : 20,000
            - 평가, 검증용 데이터셋은 어느정도 샘플 수가 확보된 이후로는 기계적으로 양을 늘리기보다는 품질을 관리하는것이 훨씬 중요

    - 데이터셋이 어느정도 커야 적당한지는 문제, 모델의 복잡도에 따라 상대적으로 판단해야하며, 여기에 적어둔 샘플 수는 참고용으로만 사용

  • 시계열 데이터의 검증
    - 주식 가격이나 날씨 등, 실시간으로 유입되는 시계열 데이터를 예측하는 문제, 현재 시점을 기준으로 함
    - 가장 최근의 데이터를 검증용
    - 그보다 이전의 데이터를 학습용
    - 현 시점 이후 미래의 데이터를 평가용

  • 데이터셋의 계층적 분할
    - 데이터셋 내에 특정 클래스에 해당하는 샘플이 매우 적을 경우 단순 랜덤으로 분할했을 때 희귀한 클래스가 평가용 데이터에서 누락되어, 평가용 데이터셋의 대표성이 떨어질 가능성이 커짐
    - 데이터셋을 클래스별로 나누어 각각을 랜덤분할 후 다시 합치는, 계층적 분할(Stratified Splitting)방법을 사용
기초 정량평가 방법론
  • 다양한 평가지표가 필요한 이유
    - 정확도의 한계와 Medical Test Paradox
  • 최소화 지표와 최대화 지표
    - 작을수록 좋은 지표는 최소화를 해야하므로 Minimizing Metric
    - 클수록 좋은 지표는 최대화를 해야하므로 Maximizing Metric

    -> 평가지표 값의 범위 확인 : 평가지표가 가질 수 있는 값의 범위, 최소값이나 최대값이 정해져 있는지 확인해야함

  • 혼동 행렬 (Confusion Matrix) : 이진 분류 문제에서 모델의 예측치와 실제값에 따른 샘플의 수를 표 형태로 나타낸 것
      - 각 항목의 값은, 예측이 맞았는지 틀렸는지를 나타내는 (True|False)와 결과가 양성인지 음성인지를 나타내는 (Positive|Negative)를 붙여 표시
       - False Negative: 결과가 음성(Negative)으로 나왔지만 틀렸고(False),
       - FP(False Positive), TN(True Negative)등으로 줄여쓰는 경우도 흔함

    정밀도(Precision)
    - 모델이 양성으로 예측한 샘플중 정답(실제로 양성)의 비율. TP / (TP + FP)

    재현율
    - 실제로 양성인 샘플 중 모델이 (양성으로)정확하게 분류한 샘플의 비율. TP / (TP + FN)

    F1 score
    - Recall과 Precision을 동시에 비교하기 위해 조화평균(Harmonic Mean)을 취한 것
    - H-mean이라고 부르는 경우도 있음

    ROC(Receiver Operating Characteristic) Curve
    - 음성 / 양성을 판단하는 기준값(Threshold)의 변화에 따라, 전체에서 TP, FP의 비율이 변화하는 추세를 나타낸 곡선.

    AUC (Area Under the ROC Curve)
    - ROC Curve의 아래쪽 영역의 넓이로 측정되며, 정밀도와 재현율을 모두 중요하게 고려하는 정량평가 지표

    - MAE (Mean Absolute Error) : 오차에 절대값을 취한 것의 평균
    - MSE (Mean Squared Error):  오차를 제곱한 것의 평균
    - RMSE (Root Mean Squared Error) : MSE의 제곱근
             - MSE를 사용하면 오차가 원래의 수치와 다른 단위로 표시된다는 점을 보완

  • 편집거리(Edit Distance)
    - 시계열 모델에서 주로 사용
    - 몇번의 삭제/추가(edit)를 거쳐야 출력값을 목표값으로 만들 수 있는가를 판단
       - 목표값: Chrome 출력값: home 인 경우, Edit distance는 2 (C추가, r추가)

  • 생성모델에서 사용하는 정량평가 지표들
     - MOS (Mean Opinion Score)
     - 모델 기반의 정량평가 (FiD, Inception Score 등)
    - 인퍼런스 시간(Latency) : 모델이 샘플 한개, 또는 여러개를 한번에 처리하는데에 걸리는 시간
    - 처리율(Throughput) : 모델이 단위시간당 처리할 수 있는 샘플의 수
    - 메모리 사용량(Memory Usage) : (특히 GPU에서) 모델을 인퍼런스할 때 점유하는 메모리(VRAM)의 크기.
  • 적절한 정량평가 지표가 무엇일지 : 문제마다, 상황마다 다름
    - 연구를 하고있다면? 기존 연구들의 측정방식을 참고
    - 서비스를 만든다면? 서비스의 목표에 가장 직접적으로 연결된 평가지표를 선택

    - 각 평가지표의 특성을 이해하는 것도 중요
       - 일반적으로는 정확도를 사용해도 문제가 없지음
       - 두 클래스중 한쪽에 해당하는 샘플이 다른쪽보다 너무나 많은, 데이터 불균형(Imbalanced) 문제가 있는 경우,
              -> 정밀도, 재현율이나 F1스코어 등을 추가로 사용하는 것이 좋음

  • 평가지표별 특성의 이해
    - MAE(Mean Absolute Error)지표 : 오차가 0인지 아닌지
    - MSE(Mean Squared Error)지표 : 이상치(Outlier)의 존재여부

    -> 필요하다면 여러 정량평가 지표를 함께 활용
       - 한가지 지표를 여러 평가 데이터셋에서 계산
       - 여러 지표를 가중평균하여 최종적인 모델의 선택에 사용

      - 정량평가 지표가 서로 충돌하는 상황이라면 어떻게 우선순위를 설정해야함
       - 최적화 지표 (Optimizing Metric) : 모델의 최종적인 성능에 연관되어, 모델의 선택에 가장 중요한 영향을 미치는 평가지표
       - 충족 지표 (Satisficing Metric) : 정해둔 한계값만 충족시킨다면, 그 이후로는 최종 결정에 영향을 주지 않는 지표

휴먼 베이스라인과 목표 성능지표의 설정

 

  • 베이스라인 모델(Random/Dumb Baseline score)
    = 베이스라인(Baseline) 스코어
    - 높은 성능을 내기위한 목적이 아니라 실험과정에서 비교용으로 사용하는 모델의 점수.
    - 입력값을 무시하고 k개의 클래스중 아무거나 고르는, 랜덤 베이스라인 모델의 정확도는 1/k *100%이 되어야 함

    - 베이스라인 성능의 활용
         - 평가지표 측정이 제대로 되고있는지 검증
         - 학습 과정상 에러가 있는지 확인

    - 다른 방식의 베이스라인
         - 랜덤으로 찍는 것 보다는 살짝 나은 모델들의 베이스라인 스코어
         - 쉽게 구현하거나 불러와 사용할 수 있고, 사용 조건이 까다롭지 않은 간단한 모델  
              - 나이브 베이즈 분류기 (naive bayes classifier)
              - k-최근접이웃 분류 (k-Nearest Neighbor)
              - 다중 로지스틱 회귀 (Multiclass Logistic Regression)

    - 리더보드(Leaderboard)
           - 공개 데이터셋의 경우, 연구자들이 각자 학습한 모델의 성능을 공유하고 비교해보기 위한 순위표
    - SOTA(State Of The Art)
        - 최첨단이라는 뜻으로 쓰이며, 리더보드에서는 1위를 달성한, 세계 최고 성능의 모델을 뜻하는 의미

  • 베이즈 최적에러(Bayes Optimal Error)
      - 현재의 정량평가 방식에서 이론상 도달할 수 있는 이상적인 분류 체계의 성능
      - 대부분의 상황에 정확한 값을 알아낼 방법은 없지만, 여러 방법을 사용해 대략적인 값을 추정
      - 충분히 큰 규모의 평가용 데이터셋에서는 보통, 이론상 최고값 (Perfect Score)보다 살짝 낮음
      - 문제 자체의 난이도뿐 아니라 라벨 노이즈에 의해서도 결정
      - 평가 방식이 바뀌면, 베이즈 최적에러도 바뀜
         즉, 테스트셋에 샘플을 추가/삭제했거나 라벨 노이즈를 제거했다면 다시 추정
    예시 ) 새의 사진을 보고 종을 분류하는 문제

  • 휴먼 퍼포먼스(Human Performance)
       - 사람이 얼마나 잘하는지를 측정해, 베이즈 최적 에러가 어느정도 수준인지 추정하는데 사용
       - 이론상 가능한 최고성능에 대한 추정치이므로 가능한 최선의 결과를 사용

체계적인 정성평가 방법론

 

  • 정성평가와 정량평가의 상호보완성
    - 정량평가는 모델의 학습 및 선택을 효율적으로 진행
    - 정량평가만으로 모델을 평가하는 경우에는, 모델이 가진 여러 심각한 문제가 드러나지 않은 채 방치
       -> 정성평가로 보완하고 개선해야함

    - 정량평가로는 드러나지 않는 것들
       - 평가용 데이터셋의 대표성
          - 데이터셋 자체에 없거나 매우 희귀한 데이터에서 모델의 결과는 정량평가를 통해 드러나기 어려움
          - 데이터셋 자체에 노이즈가 포함된 경우에도 정량평가만으로는 확인하기 힘듬
      - 모델의 이해할 수 없는 오답패턴
          - 모델이 학습 과정에서 어떤 과정으로 정답을 도출하는지는 사람이 투명하게 알 수 없는 경우가 대부분
          - 실제로 어려운 난이도의 샘플을 틀리는 경우
          - 알 수 없는 이유로 쉬운 난이도의 샘플을 틀리는 경우 : 모델의 결과를 신뢰하기 어렵게 만들지만, 의외로 데이터 노이즈의 제거나 모델 구조 개선 등으로 쉽게 개선할 수 있는 경우가 많음
     - 평가지표 자체의 빈틈
          - 데이터의 모호성 등의 이유로, 평가지표 자체에서 특정 케이스에 대해 모델 출력값의 품질을 제대로 평가하기 어려운 경우 
          - 비지도학습 모델의 경우, 비교를 위한 레이블이 없어 정량적 평가가 어려운 경우가 많음
          - OCR(광학문자인식, Optical Character Recognition) 문제의 띄어쓰기 이슈 (Granularity)

  • 모델 성능의 정성평가
    - 평가(또는 검증)용 데이터셋의 입력, 목표값과 해당 인풋에 대한 모델의 출력값을 함께 관찰하는, 데이터셋의 정성평가와 매우 유사한 방식으로 진행

    - 정성평가가 어려운 이유
    - 사람이 직접 진행해야하는 과정
          : 매우 지루하고 비슷한 일이 반복되는 작업인 경우가 많아 데이터셋의 양이 많아질수록 시간 소모와 평가자의 피로도가 매우 커짐
    - 주관성을 배제하기 힘든 정성평가 
         : 완전히 객관적으로 진행하기가 쉽지 않음

    지속가능한 정성평가를 위한 팁
    - 정성평가 과정에 대한 대략적인 분석
       - 10분마다 몇 개의 샘플을 확인했는지, 또는 샘플 20장을 확인하는데 얼마나 오래 걸렸는지 체크해보는 등 정성평가의 속도를 대략적으로 확인
        - 평가 과정에서 비효율적인 부분이 있는지, 이를 간단히 개선해볼 방법이 있는지 찾아봄

    - 샘플 관찰 계획 세우기 
      : 몇 명이 참여해 몇 시간동안 몇 개의 샘플을 확인할 것인지, 무리하지 않는 범위에서 계획

    - 점진적인 정성평가 프로세스
      : 소규모 분석이 좀더 효율적 : 전체 틀린 케이스 중 상당수가 한 가지 문제로 인해 발생하는 경우가 많음

    - 발견된 이슈의 기록 및 분류
       : 정성평가를 진행하며 발견된 문제를 최대한 구체적, 객관적으로 기록

    - 발견된 이슈의 기록 및 분류
       : 문제를 일으키는 인풋 데이터의 패턴을 트리거(trigger)를 모아서 별도의 데이터셋을 구성하기
       -> 해당 이슈의 추적이 가능

모델 에러의 분석

 

  • 적합도 균형의 조절
    - 모델의 복잡도와 학습 데이터의 품질 및 다양성(이하 데이터의 복잡성) 사이의 불균형에 의해 발생
    - 모델 적합도의 균형을 맞춰주는 방식으로 해결

 

  • 과적합(Overfitting) : 학습데이터의 패턴에만 과하게 학습, 새로운 데이터에 대해서는 전혀 성능을 내지 못함
        - 모델의 복잡도 > 학습 데이터의 복잡성
        - 모델 복잡도를 줄이거나 학습 데이터를 늘린다
        - 큰 분산(Variance) 때문에 발생 데이터에 대한 너무 복잡한 (약한) 가정을 사용한 모델
  • 과소 적합(Underfitting) : 최적화가 충분히 진행되지 못한 상태를 과소적합
        - 모델의 복잡도 < 학습 데이터의 복잡성
        - 모델 복잡도를 늘리거나 학습 데이터를 줄인다
        - 큰 편향(Bias) 때문에 발생 데이터에 대한 너무 단순한

  • 일반화 성능(Generalization Ability)
     - 외삽 성능, 내삽 성능을 포함해, 모델이 처음 접하는(Unseen) 데이터에서 얼마나 좋은 성능을 내는지 나타내는 개념
    - 내삽(Interpolation) : 학습 데이터셋의 범위 내에서 새로운 데이터를 예측하거나 분류하는 것.
    - 외삽(Extrapolation) :학습 데이터셋의 범위를 넘어서는 새로운 데이터를 예측하거나 분류하는 것.

    편향(Bias)
        - 예측값과 목표값 사이 발생하는 에러의 평균적인 크기
    분산(Variance)
        - 모델의 예측값이 서로 퍼져있는 정도

    에러 분석(Error Analysis)
     - 다양한 원인으로 발생하는 모델의 전체 에러 중에서 학습 과정의 적합도 조절을 통해 개선이 가능한,
       모델의 큰 편향이나 큰 분산 때문에 발생하는 에러가 어느정도인지를
      학습, 검증 데이터셋에서 모델 성능을 비교해 알아내는 방법

과적합의 해결 방법

  • L1, L2 Regularization
    - 과적합 문제의 해결방법으로, 모델 파라미터의 L1 또는 L2 norm을 손실함수 값를 더함
    - 학습 과정에서 자연스럽게 파라미터 자체의 크기가 줄어들고, 그에 따라 모델의 복잡도가 떨어지도록 유도하는 방식
  • 학습 데이터의 증강(Augmentation)
    - 정답 라벨이 바뀌지 않는 한도 내에서 인풋 데이터를 여러 방법으로 변형시켜 새로운 데이터로 활용하는 방식.
    - 데이터의 복잡성을 늘려 과적합 문제를 해결
    - 어느정도의 변형까지 적용해도 괜찮을지는 해당 문제에 대한 도메인 지식(domain knowledge)을 활용해 직접 설정
  • 학습곡선(Learning Curve)
    - 학습용 데이터셋과 검증용 데이터셋에서 측정되는 손실함수의 값의 변화를 그래프로 나타낸 것
  • Early Stopping
    - 학습, 검증용 데이터셋의 손실함수 값 차이가 커지기 시작하는 시점에, 학습을 일찍 종료하여, 과적합 문제가 생기지 않도록 하는 방법

  • 편향과 분산의 Trade-off 관계
    - 모델의 편향과 분산 사이에는 한쪽이 낮아질 때 다른쪽이 높아지는 Trade-off 관계가 있어, 둘 사이의 적절한 균형점을 찾아야 한다는 
    - 머신러닝 모델의 Double Descent 학습곡선 : 

    -> 풀고있는 문제가 충분히 복잡하고 어렵다면, 분산과 편향은 trade-off 관계를 생각하기보다, 과적합을 무시하고 모델과 데이터의 복잡도를 계속해서 높이는 것이 더 나은 선택