220907

AIVILLAIN·2022년 9월 7일
0

오공완

목록 보기
3/25

머신 러닝 모델 평가

머신 러닝의 목표는 처음 본 데이터(학습되지 않은 데이터)에서 잘 작동하는 일반화된 모델을 얻는 것
과대적합은 관측 가능한(학습한) 것들에 대한 맞춤이기 때문에 모델의 일반화 성능에 대한 측정 방법은 중요

훈련, 검증, 테스트 세트
훈련 세트에서 모델 훈련, 검증 세트에서 모델 평가, 최종적으로 테스트 세트에서 테스트

훈련, 검증만 사용하지 않는 이유

모델 개발 시에는 항상 모델의 설정을 튜닝
층의 수나 층 별 유닛의 수 선택 등 (하이퍼파라미터)
검증 세트에서는 모델의 성능을 평가하여 튜닝을 수행
어떤 파리미터 공간에서 좋은 설정을 찾는 학습
검증 세트의 성능을 기반으로 모델의 설정을 튜닝 시 검증 세트에 과대적합 될 수 있음
(검증 세트의 모델 성능에 기반하여 모델의 하이퍼파라미터를 조정할 때 마다 검증 데이터에 관한 정보가 모델로 새는 것)

데이터가 적을 때는 단순 홀드아웃 검증, K겹 교차 검증, 셔플링을 사용한 반복 K겹 교차검증 등의 방법이 있음

  1. 단순 홀드아웃 검증
    데이터의 일정량을 테스트 세트로 떼어 놓음
    남은 데이터에서 훈련하고 테스트 세트로 평가
    데이터가 적을 때 검증 세트, 테스트 세트 샘플이 너무 적어 주어진 전체 데이터를 통계적으로 대표하지 못할 수 있음
    다른 난수 초기값으로 데이터를 셔플링한 뒤 해당 방법을 적용했을 때 모델의 성능이 매우 달라지면 해당 문제임을 의심할 수 있음
  2. K겹 교차 검증
    데이터를 동일한 크기를 갖는 K개 분할로 나눔
    각 분할 i에 대해 남은 K - 1개의 분할로 모델을 훈련, 분할 i에서 모델을 평가
    최종 점수는 K개의 점수를 평균화
    모델의 성능이 데이터 분할에 따라 편차가 클 경우 도움이 됨
  3. 셔플링을 사용한 반복 K겹 교차 검증
    가용 데이터가 적고 가능한 정확하게 모델을 평가하고자 할 때 사용
    K겹 교차 검증을 여러번 적용하되 K개의 분할로 나누기 전 매번 데이터를 무작위로 섞음
    최종 점수는 모든 K겹 교차 검증을 실행해서 얻은 점수의 평균
    실행 비용이 많이 듬

평가 방식 선택 시 염두할 사항

  1. 대표성 있는 데이터
    훈련 세트, 테스트 세트가 주어진 데이터에 대한 대표성이 있어야 함
    ex) 숫자 이미지 분류 문제에서 샘플 배열이 클래스 순서대로 나열되어 있다고 가정
    처음 80%를 훈련 세트, 나머지 20%를 테스트 세트로 만들 경우 훈련 세트에는 0~7까지의 숫자만 담겨 있고 테스트 세트는 8~9 숫자만 남게 됨
    이런 이유로 훈련 세트, 테스트 세트를 나누기 전 데이터를 무작위로 섞는 것이 일반적
    (특정 클래스의 비율이 현저히 작을 경우 무작위로 섞기 보다는 클래스 비율이 훈련 세트, 테스트 세트에 고르게 나눠지도록 고려해야 함)
    (train_test_split의 stratify 매개변수)
  2. 시간의 방향
    과거로부터 미래를 예측하려고 한다면 데이터를 분할하기 전 무작위로 섞으면 안됨
    훈련 세트에 있는 데이터보다 테스트 세트에 있는 모든 데이터가 미래의 것이어야 함
  3. 데이터 중복
    한 데이터셋에 어떤 데이터 포인트가 두번 등장하면 데이터를 섞고 훈련 세트와 검증 세트로 나누었을 대 훈련 세트와 검증 세트에 데이터 포인트가 중복될 수 있음
    훈련 데이터의 일부로 테스트 하는 최악의 경우가 됨
    훈련 세트와 검증 세트가 중복되지 않는 지 확인할 필요가 있음
    (GroupKFold)

데이터 전처리, 특성 공학, 특성 학습

많은 데이터 전처리와 특성 공학 기법은 특정 도메인에 종속적 (텍스트 데이터, 이미지 데이터 각각에 특화된 방법들)

데이터 전처리 목적은 주어진 원본 데이터를 신경망에 적용하기 쉽도록 만드는 것

벡터화

신경망에서 모든 입력, 타깃은 부동 소수 데이터로 이루어진 텐서여야 함 (특정 경우에는 정수 텐서)
사운드, 이미지, 텍스트 등 처리해야 할 것이 무엇이든 먼저 텐서로 변환할 필요가 있음

값 정규화

비교적 큰 값이나 균일하지 않은 데이터를 신경망에 주입하는 것은 위험
(업데이트할 그래디언트가 커져 네트워크가 수렴하는 것을 방해)
작은 값을 취하고, 모든 특성이 대체로 비슷한 범위를 갖도록 해주는 것이 좋음

누락된 값 다루기

일반적으로 신경망에서 0이 사전에 정의된 의미 있는 값이 아니라면 누락된 값을 0으로 입력해도 괜찮음
네트워크가 0이 누락된 데이터를 의미한다는 것을 학습하면 이 값을 무시하기 시작
테스트 데이터에 누락된 값이 포함될 가능성이 있다고 가정
누락된 값이 없는 훈련 데이터를 사용했다면 누락된 값을 무시하는 방법을 모름
누락된 값이 있는 훈련 샘플의 고의적으로 만들어야 함

특성 공학

모델에 데이터를 주입하기 전 하드코딩된 변환을 적용하여 알고리즘이 더 잘 수행되도록 만들어 줌
모델이 임의의 데이터로부터 완벽한 학습을 한다고 기대하기 어려움
시계 이미지로 하루의 시간을 출력하는 모델 개발한다고 가정
이미지의 원본 픽셀을 입력으로 한다면 어려운 머신 러닝 문제가 될 것
이것 보다는 시계 바늘의 검은색 픽셀을 따라 각 바늘 끝의 x, y 좌표를 출력하는 파이썬 스크립트 제작
머신 러닝 알고리즘이 이 좌표와 적절한 시각을 연결하도록 쉽게 학습 가능
좌표를 바꾸어 (x, y) 포인트를 이미지 중심에 대한 극좌표료 나타낼 수도 있음 (시계 바늘의 각도)
좋은 특성은 적은 자원, 더 적은 데이터로 문제를 풀 수 있음

과대적합과 과소적합

머신 러닝의 근본적인 이슈는 최적화와 일반화
최적화 : 훈련 데이터에서 최고의 성능을 얻기 위해 모델을 조정하는 과정
일반화 : 본 적 없는 새로운 데이터에서 얼마나 잘 수행되는지
모델의 목적은 좋은 일반화 성능을 얻는 것
하지만 이 일반화를 위해 훈련 데이터를 기반으로 모델을 조정해야 함
훈련 데이터 손실이 낮아질수록 테스트 데이터 손실도 낮아짐
모델의 성능이 계속 발전될 여지가 있을 경우 과소적합 (훈련 데이터에 있는 특성을 제대로 학습하지 못한 상황)
여러번 반복 학습하고 나면 어느 시점부터 일반화 성능이 높아지지 않음 (과대적합)
이를 막기 위한 가장 좋은 방법은 더 많은 훈련 데이터를 모으는 것
혹은 모델이 수용할 수 있는 정보의 양을 조정하거나 저장할 수 있는 정보에 제약을 가하는 것
과대적합을 피하는 처리 과정을 규제(regularzation)라고 함

  1. 네트워크 크기 축소
    모델의 학습 파라미터 수를 줄이는 것
    파라미터 수는 층의 수와 각 층의 유닛의 수에 의해 결정
    딥러닝 모델은 훈련 데이터에 잘 맞추려는 경향이 있음
    과소적합되지 않도록 충분한 파라미터를 가진 모델을 사용해야 함
  2. 가중치 규제 추가
    오캄의 면도날 이론
    어떤 것에 대한 두 가지의 설명이 있다면 더 적은 가정이 필요한 간단한 설명이 옳을 것
    신경망으로 학습되는 모델에도 적용
    어떤 훈련 데이터와 네트워크 구조가 주어졌을 때 데이터를 설명할 수 있는 가중치 값의 집합은 여러 개(여러 모델)
    간단한 모델이 복잡한 모델보다 덜 과대적합될 가능성이 있음
    간단한 모델은 파라미터 값 분포의 엔트로피가 작은 모델
    네트워크 복잡도에 제한을 두어 가중치가 작은 값을 가지도록 강제하는 것
    가중치 값의 분포를 균일하게 만들기
    L1 규제 : 가중치의 절댓값에 비례하는 비용이 추가됨
    L2 규제 : 가중치의 제곱에 비례하는 비용이 추가됨 (가중치 감쇠)
  3. 드롭아웃
    훈련하는 동안 무작위로 층의 일부 출력 특성을 제외시킴(0으로)
    층의 출력 값에 노이즈를 추가하여 중요하지 않은 우연한 패턴을 깨뜨리려는 시도

보편적인 머신 러닝 작업의 흐름

  1. 문제 정의와 데이터셋 수집
    입, 출력이 무엇이고 어떤 데이터를 사용할 것이며, 어떤 종류의 문제인지
    주어진 입력으로 출력을 예측할 수 있고, 가용 데이터에 입력과 출력 사이 관계를 학습하는 데 충분한 정보가 있다는 가설이 필요
    머신 러닝은 훈련 데이터에 있는 패턴을 기억하기 위해 사용됨
  2. 성공 지표 선택
    성공이 무엇인지 정의
    모델이 최적화할 손실 함수를 선택하는 기준이 됨
    분류에서 클래스 분포가 균일할 경우 정확도, ROC, AUC가 일반적인 지표
    균일하지 않은 경우 정밀도, 재현율 사용할 수 있음
    랭킹, 다중 레이블 문제는 평균 정밀도를 사용할 수 있음
  3. 평가 방법 선택
    홀드아웃, K겹 교차 검증, 반복 K겹 교차 검증 등
  4. 데이터 준비
    모델에 주입할 데이터 구성
    데이터 스케일 조정, 데이터 정규화, 특성 공학 등
  5. 기본보다 나은 모델 훈련
    통계적 검정력을 달성하는 것
    단순한 모델보다 나은 수준의 작은 모델을 개발
    MNIST 숫자 이미지 분류의 경우 0.1보다 높은 모델, 이진 분류 문제에서는 0.5보다 높은 정확도의 모델
    무작위로 예측하는 모델보다 낫지 않다면 입력 데이터에 존재하지 않는 것을 얻으려고 한다는 신호
    (1단계에서 가설이 잘못된 것일 수 있음)
  6. 몸집 키우기(과대적합 모델 구축)
    통계적 검정력을 가진 모델을 얻었다면 모델이 충분한 성능을 내는지 확인
    과소적합과 과대적합 사이 적절한 모델이 이상적
    층을 추가, 층의 크기를 키움, 더 많은 에포크 동안 훈련
    검증 데이터에서 모델 성능이 감소하기 시작하는 부분 확인
  7. 모델 규제와 하이퍼파라미터 튜닝
    드롭아웃 추가
    층 추가 혹은 제거하여 다른 구조 시도
    L1, L2 규제
    하이퍼파라미터 바꾸어 시도
    선택적인 특성 공학 시도
    검증 과정에서 얻은 피드백을 사용하여 모델 튜닝 시 마다 검증 과정에 대한 정보를 모델에 누설하고 있음
profile
소신있는 오픈마인드

0개의 댓글