포스트

머신 러닝의 기본 요소

5.1 일반화: 머신 러닝의 목표

  • 최적화(optimization): 가능한 훈련 데이터에서 최고의 성능을 얻기 위해 모델을 조정하는 과정
  • 일반화(generalization): 훈련된 모델이 새로운 데이터에서 얼마나 잘 수행되는지 의미
  • 머신 러닝의 목표는 좋은 일반화 성능을 얻는 것

5.1.1 과소적합과 과대적합

  • 과소적합
    • 훈련 초기에 훈련 손실이 낮아질수록 검증 손실이 함께 낮아지는 구간
    • 모델 성능이 발전될 여지가 있음
    • 훈련 데이터에 있는 패턴을 모두 학습하지 못함
  • 과대적합
    • 훈련을 일정 이상 반복한 후 검증 세트의 성능이 멈추고 감소되기 시작하는 구간
    • 훈련 데이터에 특화된 패턴을 학습하기 시작함
    • 데이터에 잡음이 있거나, 불확실성이 존재하거나, 드문 특성이 포함되어 있을 때 발생하기 쉬움
      • 잡음 섞인 훈련 데이터: 잘못된 입력, 잘못된 레이블
      • 불확실한 특성: 범주에 객관적 경계가 없는 모호성, 같은 데이터에 다른 결과가 따를 수 있는 무작위성
      • 드문 특성과 가짜 상관관계: 특성이 드물면 모델이 특성을 잘못 판단할 수 있고, 잘못된 추측으로 인해 실제로는 관련이 없는 가짜 상관관계가 생길 수도 있다.
    • 잡음 제거를 위해 특성 선택(feature selection)을 진행할 수 있음

5.1.2 딥러닝에서 일반화의 본질

  • 매니폴드 가설
    • 매니폴드란 선형 공간과 비슷하게 보이는 부모 공간의 저차원 부분 공간이다.
    • 매니폴드 가설(manifold hypothesis)은 실제 세상의 모든 데이터가 고차원 공간 안에 있는 저차원 매니폴드에 놓여 있다고 가정한다
    • 매니폴드 가설은 다음을 의미한다
      • 머신 러닝 모델은 입력 공간 안에서 비교적 간단하고, 저차원이며, 매우 구조적인 부분 공간(잠재 매니폴드(latent manifold))만 학습하면 된다
      • 이런 매니폴드 중 하나 안에서 두 입력 사이를 보간(interpolation)하는 것이 항상 가능하다. 즉, 연속적인 경로를 따라 한 입력에서 다른 입력으로 변형할 때 모든 포인트가 매니폴드에 속한다.
  • 일반화의 원천인 보간
    • 다루는 데이터 포인트가 보간 가능하다면 새로운 포인트를 해당 매니폴드에서 가까이 놓인 다른 포인트와 연결하여 이해할 수 있다
    • 보간을 사용해 빈 곳을 채움으로써 공간 안의 샘플만으로 공간 전체를 이해할 수 있다
    • 지역 일반화(local generalizaion): 이전에 본 것과 매우 가까운 것을 이해하는 것
    • 궁극 일반화(extreme generalization): 사람이 일반화하는 방법으로, 보간 이외의 인지 매커니즘을 사용한다. 인지 매커니즘은 추상화, 세상에 대한 상징적 모델, 추론, 논리, 상식, 이성으로 불리는 세상에 대한 선천적 능력 등을 말한다.
  • 딥러닝이 작동하는 이유
    • 데이터를 구겨진 종이 공으로 비유하면, 펴진 종이는 2D 매니폴드를 나타내고 딥러닝은 구겨진 종이 공을 펼치는 도구이다
    • 딥러닝은 근본적으로 미분 가능한 곡선으로 경사 하강법을 통해 이 곡선을 데이터 포인트에 맞춘다
      • 크고 복잡한 곡선(매니폴드)을 선택하여 훈련 데이터 포인트에 맞을 때까지 파라미터를 점진적으로 조정한다
      • 데이터는 입력 공간 안에서 고도로 구조적인 저차원 매니폴드를 형성(매니폴드 가설)하고, 경사 하강법으로 모델 곡선을 이 데이터에 맞추면 모델이 데이터의 매니폴드를 대략적으로 근사하는 중간 지점을 찾을 수 있다.
    • 딥러닝 모델이 잠재 매니폴드를 학습하는 데 특히 잘 맞는 속성들이 있다
      • 모델의 매끄러움은(미분 가능성) 동일 속성을 가진 잠재 매니폴드를 근사하는 데에 도움이 된다
      • 딥려닝 모델은 훈련 데이터의 정보 형태를 반영하는 식으로 구조화되는데, 이는 자연적인 데이터가 구성되는 방식을 반영한 것이다
  • 가장 중요한 훈련 데이터
    • 일반화의 능력은 모델의 속성보다는 데이터의 구조에 의한 결과이다. 즉, 데이터가 보간할 수 있는 매니폴드를 형성할 수 있어야 한다
      • 특성이 유익하고 잡음이 적을수록 입력 공간이 간단하고 구조적이기 때문에 일반화 성능이 좋다
      • 따라서 데이터 큐레이션(data curation)과 특성 공학(feature engineering)이 필수적이다
    • 모델이 곡선을 맞추는 것을 잘 수행하기 위해, 특히 결정 경계 근처에서, 입력 데이터 매니폴드 전체를 조밀하게 커버해야 한다. 충분히 조밀하게 샘플링하면 외부 지식 없이도 훈련 입력 사이를 보간하여 새로운 입력을 이해할 수 있게 된다.(일반화)
    • 결과적으로 딥러닝 모델을 향상시키는 가장 좋은 방법은 더 좋고, 더 많은 데이터에서 훈련하는 것이다
      • 만약 데이터를 더 수집하는 것이 불가능하다면, 제약을 추가할 수 있고 이를 규제(regularizaion)라고 부른다.

5.2 머신 러닝 모델 평가

5.2.1 훈련, 검증, 테스트 세트

  • 훈련 세트에서 모델을 훈련하고 검증 세트에서 모델을 평가한다. 그리고 모델이 완성된 후 테스트 세트를 통해 모델을 테스트한다.
  • 검증 세트를 사용하는 이유
    • 검증 세트에서 평가하는 모델의 성능을 바탕으로 하이퍼 파라미터 튜닝을 수행한다
    • 그러나 튜닝도 학습의 일종으로 여러 번 반복할 경우 정보 누설(information leak, 검증 데이터의 정보가 누설되는 것)을 야기한다
  • 모델은 테스트 세트에 대한 어떤 정보도 얻어서는 안 된다. 이는 일반화 성능을 왜곡시킨다.
  • 단순 홀드아웃 검증(hold-out validation), K-겹 교차 검증(K-fold cross-validation), 셔플링(Shuffling)을 사용한 반복 K-겹 교차 검증(iterated K-fold cross-validation)과 같은 기법을 사용할 수 있다.

단순 홀드아웃 검증

  • 데이터의 일정량을 테스트 세트로 떼어 놓고, 검증 세트도 따로 떼어 놓는다
  • 주로 사이킷런의 train_test_split() 함수를 사용한다
  • 이 방법은 단순하지만 데이터가 적을 때 검증 세트의 샘플 크기가 너무 작아 주어진 전체 데이터를 통게적으로 대표하지 못할 수도 있다는 단점이 있다

holdout-validation

K-겹 교차 검증

  • 데이터를 동일한 크기를 가진 K개의 분할로 나누고, 각 분할에 대해 남은 분할로 모델을 훈련하고 해당 분할에서 모델을 평가한다. 최종 점수는 이렇게 얻은 K개의 점수의 평균이다.
  • 모델의 성능이 데이터 분할에 따라 편차가 클 때 도움이 된다

kfold-crossvalidation

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

  • 가용 데이터가 적고 정확하게 모델을 평가하고자 할 때 사용한다
  • K-겹 교차 검증을 여러 번 적용하되, K개의 분할로 나누기 전에 매번 데이터를 무작위로 섞는다. 최종 점수는 모든 교차 검증을 실행해서 얻은 점수의 평균이다.
  • $반복 횟수\times K$개의 모델을 훈련하고 평가하므로 비용이 매우 많이 든다

5.2.2 상식 수준의 기준점 넘기

  • 딥러닝 모델 훈련은 매니폴드 학습 과정을 관찰할 수 없기 때문에 작업을 시작하기 전 간단한 기준점을 정하는 것이 중요하다
  • 이 기준점은 랜덤한 분류기의 성능이거나 머신 러닝을 사용하지 않고 생각할 수 있는 가장 간단한 방법이 될 수 있다

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

  • 대표성 있는 데이터
    • 훈련 세트와 테스트 세트가 주어진 데이터에 대한 대표성이 있어야 한다
    • 이를 위해 훈련 세트와 테스트 세트로 나누기 전에 데이터를 무작위로 섞는 것이 일반적이다
  • 시간의 방향
    • 시계열 데이터의 경우에는 무작위로 섞어서는 안 된다
    • 테스트 세트의 데이터는 훈련 세트 데이터의 미래여야 한다
  • 데이터 중복
    • 한 데이터셋에 어떤 데이터 포인트가 두 번 등장하면 데이터 세트를 나눈 후에 중복될 수 있다
    • 훈련 세트와 검증 세트가 중복되지 않는지 확인한다

5.3 훈련 성능 향상하기

​ 최적적합 모델을 얻기 위해서는 과대적합으로 넘어가는 경계를 알아야 하므로, 초기 목표는 약간의 일반화 능력을 보이고 과대적합하는 모델을 얻는 것이다. 이후에 일반화 성능을 개선하는 데 초점을 맞춘다. 이 과정에서 발생할 수 있는 문제는 대표적으로 다음과 같다.

  • 훈련이 되지 않음: 시간이 지나도 훈련 손실이 줄어들지 않는다
  • 훈련은 잘 시작되었지만 모델이 의미 있는 일반화를 달성하지 못함: 상식 수준의 기준점을 넘어서지 못한다
  • 시간이 지남에 따라 손실이 줄어들고 기준점을 넘어서지만 과대적합되지 않는다(여전히 과소적합이다)

5.3.1 경사 하강법의 핵심 파라미터 튜닝하기

  • 훈련이 시작되지 않거나 너무 일찍 중단될 때 경사 하강법 과정을 점검한다
  • 옵티마이저 선택, 모델 가중치의 초깃값 분포, 학습률, 배치 크기가 있다. 일반적으로 학습률과 배치 크기를 튜닝한다.
  • 시도할 수 있는 방법은 다음과 같다
    • 학습률을 낮추거나 높인다. 너무 높은 학습률은 최적적합을 크게 뛰어넘는 업데이트가 일어날 수 있고, 너무 낮은 학습률은 훈련을 너무 느리게 만들 수 있다.
    • 배치 크기를 증가시킨다. 배치 샘플을 늘리면 유익하고 잡음이 적은(분산이 낮은) 그레이디언트가 만들어진다

5.3.2 구조에 대해 더 나은 가정하기

  • 모델이 훈련되지만 일반화되지 않을 때, 이런 문제가 있을 수 있다
    1. 입력 데이터에 타깃 예측을 위한 정보가 충분하지 않음
    2. 사용 모델의 종류가 문제에 적합하지 않음

5.3.3 모델 용량 늘리기

  • 모델이 과대적합할 수 없는 것처럼 보인다면 모델의 표현 능력(representational power)이 부족한 것으로. 용량이 더 큰 모델을 사용한다
    • 층을 추가한다
    • (더 많은 가중치를 가지도록)층 크기를 늘린다
    • 현재 문제에 더 적합한 종류의 층을 사용한다

5.4 일반화 성능 향상하기

5.4.1 데이터셋 큐레이션

  • 데이터가 충분한지 확인한다. 데이터가 많을수록 좋은 모델이 만들어진다.
  • 레이블 할당 에러를 최소화한다. 입력을 시각화하여 이상치를 확인하고 레이블을 교정한다.
  • 데이터를 정제하고 누락된 값을 처리한다
  • 특성 선택을 수행한다

5.4.2 특성 공학

  • 데이터와 머신 러닝 알고리즘에 관한 지식을 사용하는 단계
  • 모델에 데이터를 주입하기 전 하드코딩된 변환을 적용하여 알고리즘이 더 잘 수행되도록 함
  • 특성을 더 간단한 방식으로 표현하여 문제를 쉽게 만든다. 즉, 잠재 매니폴드를 더 매끄럽고, 간단하고, 구조적으로 만든다.
  • 딥러닝의 신경망은 자동으로 원본 데이터에서 유용한 특성을 추출할 수 있기 때문에 대부분 특성 공학이 필요하지 않지만, 다음과 같은 이유로 신경쓸 필요가 있다
    • 좋은 특성은 적은 자원을 사용한다
    • 좋은 특성은 더 적은 데이터로 문제를 풀 수 있다

5.4.3 조기 종료 사용하기

  • 딥러닝은 파라미터가 많은 모델을 사용하므로, 잠재 매니폴드를 학습하기 위해 필요한 최소치보다 훨씬 많은 자유도를 가진다
  • 모델을 끝까지 훈련하면 일반화가 되지 않으므로 항상 훈련 손실이 최솟값에 도달하기 전에 훈련을 중단한다
  • 직접 모델을 훈련하여 에포크 횟수를 찾으면 중복 작업이 되고 종종 많은 비용이 들게 된다. 따라서 케라스에서는 일반적으로 EarlyStopping callback을 사용한다. 검증 지표가 더이상 향상되지 않으면 훈련을 중지하고 최상의 검증 점수를 낸 모델을 남길 수 있다.

5.4.4 모델 규제하기

  • 규제(regularization)기법은 훈련 데이터에 완벽하게 맞추려는 모델의 능력을 방해하여 모델의 검증 점수를 향상시킨다
  • 모델이 훈련 세트에 덜 특화되고 데이터의 잠재 매니폴드를 조금 더 가깝게 근사함으로써 일반화 능력을 높일 수 있다
  • 모델 규제는 항상 정확한 평가 절차를 따라야 하며, 측정이 가능한 경우에만 일반화를 달성할 수 있다
  • 용량이 큰 모델일수록 더 빠르게 훈련 데이터를 모델링할 수 있지만 과대적합에 민감해진다
  • 가중치 규제 추가
    • 오캄의 면도날(Occam’s razor) 이론: 어떤 것에 대한 두 가지 설명이 있다면 더 적은 가정이 필요한 간단한 설명이 옳을 것이라는 이론
    • 간단한 모델이 복잡한 모델보다 과대적합될 가능성이 낮다
      • 여기서 간단한 모델은 파라미터 값 분포의 엔트로피가 작은 모델이다
    • 따라서 과대적합을 완화하기 위해 모델의 복잡도에 제한을 두어 가중치가 작은 값을 가지도록 강제해 가중치 값의 분포를 더 균일하게 만드는데, 이를 가중치 규제(weight regularization)라고 하며, 모델의 손실 함수에 큰 가중치에 연관된 비용을 추가한다.
      1. L1 규제: 가중치에 절댓값에 비례하는 비용이 추가된다(가중치의 L1 노름)
      2. L2 규제: 가중치의 제곱에 비레하는 비용이 추가된다(가중치의 L2 노름[1]). L2 규제는 가중치 감쇠라고도 부른다.
    • 케라스에서는 가중치 규제 객체를 층의 키워드 매개변수로 전달하여 가중치 규제를 추가할 수 있다
    • 모델이 동일한 파라미터 개수를 가지고 있어도 L2 규제를 사용한 모델이 기본 모델보다 과대적합에 더 잘 견딜 수 있다
    • 대규모 딥러닝 모델은 가중치 값을 제약하는 것이 큰 영향을 미치지 않기 때문에 가중치 규제는 일반적으로 작은 딥러닝 모델에서 사용한다
  • 드롭아웃 추가
    • 모델 층에 드롭아웃을 적용하면 훈련하는 동안 무작위로 층의 출력 특성을 일부 제외시킨다(0으로 만든다)
    • 드롭아웃 비율은 0이 될 특성의 비율로, 보통 0.2에서 0.5 사이로 지정된다
    • 테스트 단계에서는 드롭아웃을 적용하지 않으며, 대신 층의 출력 드롭아웃 비율에 비례하여 줄인다
    • 드롭아웃으로 뉴런의 ‘부정한 협업’을 방지해 과대적합을 감소시킨다 -> 우연한 패턴을 기억하지 않게 한다

[1]: L2 노름은 유클리드 노름이라고도 부른다. 가중치의 파라미터를 모두 제곱하여 더한 후 이 값의 제곱근을 구한다. L2 규제에서 추가되는 비용은 정확히는 L2 노름의 제곱이지만, 그냥 L2 노름이라고 얘기하는 경우가 많다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.