본문 바로가기

Data Science/Machine Learning

[핸즈온 머신러닝 2/E] 4장. 모델 훈련

이번 포스팅에서는 다양한 회귀 모델들에 대해 설명하고자 한다.

 

자, 그럼 시작해보겠다.

 

▶ 선형 회귀

◆ 선형 회귀 모델의 예측

  • 선형 회귀 모델의 예측값 y_hat은 다음과 같이 나타낼 수 있다.
    • 통계학에서는 단순 선형 회귀와 다중 선형 회귀를 구분해서 배웠는데, 머신러닝에서는 어차피 단순 선형 회귀를 쓸 일은 거의 없으니 다중 선형 회귀로 통합시켜서 설명을 해놓은 듯 싶다.

  • 위 식을 아래와 같이 벡터 형태로 쓸 수도 있다.

※ 위의 벡터 형태의 식이 어떻게 나왔는지에 대한 설명을 위해, 아래 이미지 2개를 첨부하였다.

(첨부된 이미지를 보면, 해당 식이 어떻게 나왔는지 이해할 수 있을 것이다)

  • 우리의 목표는 회귀 모델의 성능 측정 지표로 많이 사용되는 RMSE(평균 제곱근 오차)를 최소화하는 theta 값을 찾는 것이다.
    • RMSE는 MSE의 제곱근과 동일하므로, MSE를 최소화하는 theta 값을 찾는 것과 동일하다.

◆ 정규방정식

  • 비용 함수(여기서는 MSE)를 최소화하는 theta 값을 찾아주는 방법정규방정식이라고 한다.

※ 정규방정식에 대한 증명은 최소제곱법(LSE)을 통해 할 수 있다.

다중 회귀 모형의 행렬 표현
최소제곱법을 통한 증명

  • m < n이거나 어떤 특성이 중복되어 행렬 X_transpose * X 의 역행렬이 없다면(즉, 특이 행렬이라면) 정규방정식이 작동하지 않는다. 이러한 경우 유사역행렬을 사용할 수 있다.
    • 정규방정식과 다르게 유사역행렬은 항상 구할 수 있다.
    • 유사역행렬특잇값 분해(SVD)라는 표준 행렬 분해 기법을 사용해서 계산된다.
    • SVD는 훈련 세트 행렬 X를 3개의 행렬 곱셈 U * Sigma * V^T 로 분해한다.
    • 따라서 유사역행렬X+ = V * Sigma+ * U^T 로 계산된다.

※ 유사역행렬과 SVD에 대한 이해를 하려면, 선형대수 지식이 필요하다.

해당 내용에 대해 자세히 알고 싶다면, 아래의 링크를 참고해서 공부하도록 하자!! ^^

https://darkpgmr.tistory.com/106

 

[선형대수학 #4] 특이값 분해(Singular Value Decomposition, SVD)의 활용

활용도 측면에서 선형대수학의 꽃이라 할 수 있는 특이값 분해(Singular Value Decomposition, SVD)에 대한 내용입니다. 보통은 복소수 공간을 포함하여 정의하는 것이 일반적이지만 이 글에서는 실수(real

darkpgmr.tistory.com

◆ 계산 복잡도

  • 정규방정식은 계산 복잡도가 일반적으로 O(n^2.4)에서 O(n^3) 사이이다.
  • 사이킷런의 LinearRegression 클래스가 사용하는 SVD 방법은 약 O(n^2)이다.
  • 두 방법 모두 특성 수가 많아지면 매우 느려진다. 이러한 경우 사용하는 방법이 바로 경사 하강법이다.

 

 

▶ 경사 하강법 → 굉장히 중요한 개념이므로 정확하게 이해하고 넘어가자!!

  • 비용 함수를 최소화하기 위해 반복해서 파라미터를 조정해가는 방법이다.

  • 위 그림을 보면 알 수 있듯이, theta를 임의의 값으로 시작해서(무작위 초기화) 한 번에 조금씩 비용 함수가 감소되는 방향으로 진행하여 알고리즘이 최솟값에 수렴할 때까지 점진적으로 향상시킨다.
  • 경사 하강법에서 중요한 파라미터는 스텝의 크기, 즉 학습률(learning rate)이다.
  • 학습률(학습 스텝 크기)는 비용 함수의 기울기에 비례하며, 파라미터가 최솟값에 가까워질수록 점차 줄어든다.
    • 학습률이 너무 작으면, 알고리즘이 수렴하기 위해 반복을 많이 진행해야 하므로 시간이 오래 걸린다.
    • 학습률이 너무 크면, 알고리즘을 더 큰 값으로 발산하게 만들어 적절한 해법을 찾지 못할 수 있다.

학습률이 너무 작을 때(왼쪽)와 학습률이 너무 클 때(오른쪽)

  • 그러나 경사 하강법은 theta를 임의의 값으로 시작(무작위 초기화)하기 때문에 다음과 같은 문제점들이 발생한다.
    • 알고리즘이 왼쪽에서 시작하면, 전역 최솟값(global minimum)보다 덜 좋은 지역 최솟값(local minimum)에 수렴한다.
    • 반대로 알고리즘이 오른쪽에서 시작하면, 평탄한 지역을 지나기 위해 오랜 시간이 걸리고 일찍 멈추게 되어 전역 최솟값에 도달하지 못한다.

경사 하강법의 문제점

  • 경사 하강법을 사용할 때반드시 모든 특성이 같은 스케일을 갖도록 만들어야 한다.
    • 사이킷런의 StandardScaler, MinMaxScaler, RobustScaler 등을 사용할 수 있다.
    • 그렇지 않으면 최솟값으로 수렴하는 데 훨씬 오래 걸린다.

특성 스케일을 적용한 경사 하강법(왼쪽)과 적용하지 않은 경사 하강법(오른쪽)

◆ 배치 경사 하강법

  • 전체 데이터 셋에 대한 에러를 구한 뒤, 기울기를 한 번만 계산하여 모델의 파라미터를 업데이트하는 방법이다.
  • <장점>
    • 전체 학습 데이터 셋에 대해 한 번의 업데이트가 이루어지기 때문에, 전체적인 연산 횟수가 적다.
    • 전체 데이터 셋에 대해 Gradient를 계산하여 진행하기 때문에, 최솟값으로의 수렴이 안정적으로 진행된다.
  • <단점>
    • 한 스텝에 모든 학습 데이터를 사용하기 때문에 시간이 오래 걸린다.
    • 지역 최적화(local optimal) 상태가 되면 빠져나오기 힘들다.
    • 모델 파라미터의 업데이트가 이루어지기 전까지 모든 학습 데이터 셋에 대해 저장해야 하기 때문에, 많은 메모리가 필요하다.
  • <경사 하강법의 스탭>

비용 함수의 편도함수
비용 함수의 gradient 벡터
내려가는 스텝의 크기를 결정하기 위해 gradient 벡터에 eta를 곱한다.

※ 적절한 학습률(learning rate)을 찾으려면 어떻게 해야 할까?

  • 그리드 탐색을 사용하면 된다.
    • 한 가지 신경써야 할 부분은 그리드 탐색에서 수렴하는 데 너무 오래 걸리는 모델을 막기 위해 반복 횟수를 제한해야 한다는 것이다.
  • 그렇다면 반복 횟수는 어떻게 지정할까?
    • 반복 횟수를 아주 크게 지정하고 gradient 벡터가 아주 작아지면, 즉 벡터의 길이가 허용 오차보다 작아지면 경사 하강법이 최솟값에 도달한 것이므로 알고리즘을 중지하게끔 하면 된다.

◆ 확률적 경사 하강법 → ex) 사이킷런의 SGDClassifier 와 SGDRegressor

  • 매 스텝에서 한 개의 샘플을 무작위로 선택하고, 그 하나의 샘플에 대한 gradient를 계산하는 방법이다.
  • <장점>
    • 배치 경사 하강법보다 알고리즘이 훨씬 빠르다.
    • 메모리 차지 비중이 적다.
  • <단점>
    • 비용 함수가 최솟값에 도달할 때까지 위아래로 요동치면서 평균적으로 감소하기 때문에, 배치 경사 하강법보다 훨씬 불안정하다.
    • 따라서 알고리즘이 멈출 때, 좋은 파라미터가 구해지겠지만 최적치는 아니다.
  • 정리하면 확률적 경사 하강법의 무작위성은 지역 최솟값(local minimum)에서 탈출시켜줘서 좋지만, 알고리즘을 전역 최솟값(global minimum)에 다다르지 못하게 한다는 점에서는 좋지 않다.
  • 이러한 문제점을 해결하기 위한 한 가지 방법은 학습률을 점진적으로 감소시키는 것이다.
    • 시작할 때는 학습률을 크게 하고(수렴을 빠르게 하고 지역 최솟값에 빠지지 않게 한다), 점차 작게 줄여서 알고리즘이 전역 최솟값에 도달하게 하는 것이다.

<참고>

  • 학습률(learning rate)이 너무 빨리 줄어들면, 지역 최솟값(local minimum)에 갇히거나 최솟값까지 가는 중간에 멈춰버릴 수 있다.
  • 학습률(learning rate)이 너무 천천히 줄어들면, 오랫동안 최솟값 주변을 맴돌거나 훈련을 너무 일찍 중지해서 지역 최솟값(local minimum)에 머무를 수 있다.

◆ 미니배치 경사 하강법

  • 미니배치라 부르는 임의의 작은 샘플 세트에 대해 gradient를 계산하는 방법이다.
  • <장점>
    • 행렬 연산에 최적화된 하드웨어, 특히 GPU를 사용해서 향상된 성능을 보인다.
    • 미니배치를 어느 정도 크게 하면, 알고리즘은 파라미터 공간에서 SGD보다 덜 불규칙하게 움직인다.
    • 즉, 미치배치 경사 하강법이 SGD보다 최솟값에 더 가까이 도달하게 될 것이다.
  • <단점>
    • SGD보다 지역 최솟값(local minimum)에서 빠져나오기는 더 힘들 것이다.

 

지금까지 정리한 내용들을 요약하면 다음과 같다.

 

알고리즘 m(샘플 수)이 클 때 외부 메모리 학습 지원 n(특성 수)이 클 때 하이퍼 파라미터 수 스케일 조정 필요 여부 사이킷런
정규방정식 빠름 x 느림 0 x N/A
SVD(특이값 분해) 빠름 x 느림 0 x LinearRegression
배치 경사 하강법 느림 x 빠름 2 o SGDRegressor
확률적 경사 하강법 빠름 o 빠름 >= 2 o SGDRegressor
미니배치 경사 하강법 빠름 o 빠름 >= 2 o SGDRegressor

 

 

▶ 다항 회귀 → 통계학에서는 비선형 모델로 구분되는데, 머신러닝에서는 선형 모델로 분류가 되어있네...?

  • 비선형 데이터를 학습하는 데 선형 모델을 사용할 수 있다.
  • 각 특성의 거듭제곱을 새로운 특성으로 추가하고, 추가된 특성을 포함한 데이터 셋에 선형 모델을 훈련시키는 것이다.
  • 이런 기법을 다항 회귀라고 한다.
  • 사이킷런의 PolynomialFeatures를 사용하면 된다.

오차항이 포함된 비선형 데이터 셋에 다항 회귀 모델을 적용한 예측 결과

  • 특성이 여러 개일 때 다항 회귀 모델을 사용하면, 특성 사이의 관계를 찾을 수 있다.
    • PolynomialFeatures가 degree 옵션을 사용하여, 주어진 차수까지 특성 간의 모든 교차항을 추가하기 때문이다.
    • 단, 특성 수가 교차항을 포함해 엄청나게 늘어날 수 있으니 주의해야 한다!!

 

 

▶ 학습 곡선

  • 학습 곡선은 모델의 일반화 성능을 추정하기 위한 방법 중 하나이다.
  • 이 그래프는 훈련 세트와 검증 세트의 모델 성능을 훈련 세트 크기의 함수로 나타낸다.

1. 단순 선형 회귀 모델(직선)의 학습 곡선

 

단순 선형 회귀 모델의 학습 곡선

  • 두 곡선이 수평한 구간을 만들고 꽤 높은 오차에서 매우 가까이 근접해있다.
  • 이는 과소적합 모델의 전형적인 학습 곡선 모습이다.

2. 다항 회귀 모델의 학습 곡선

 

10차 다항 회귀 모델의 학습 곡선

  • 훈련 데이터의 오차가 앞서 확인한 단순 선형 회귀 모델보다 훨씬 낮다.
  • 또한 두 곡선 사이에 공간이 존재하는데, 훈련 데이터에서의 모델 성능이 검증 데이터에서보다 훨씬 낫다는 것을 의미한다. 즉, 과대적합되었다는 말이다.
  • 하지만 더 큰 훈련 세트를 사용하면, 두 곡선 사이의 공간이 점점 가까워질 것이다.
    • 이처럼 과대적합 모델을 개선하는 한 가지 방법은, 검증 오차가 훈련 오차에 근접할 때까지 더 많은 훈련 데이터를 추가하는 것이다.

※ 편향/분산 트레이드 오프

  • 모델의 일반화 오차세 가지 다른 종류의 오차의 합으로 표현할 수 있다.

1. 편향

  • 일반화 오차 중에서 잘못된 가정으로 인해 발생
    • ex) 데이터가 실제로는 2차인데, 선형으로 가정하는 경우 → 과소적합

2. 분산

  • 훈련 데이터에 있는 작은 변동에 모델이 과도하게 민감하기 때문에 발생
    • ex) 자유도가 높은 모델(고차 다항 회귀 모델...)이 높은 분산을 가지기 쉬우므로, 훈련 데이터에 과대적합되는 경향이 있다.

3. 줄일 수 없는 오차

  • 데이터 자체에 있는 잡음 때문에 발생
  • 이 오차를 줄일 수 있는 유일한 방법은 데이터에서 잡음을 제거하는 것
    • ex) 고장 난 센서 같은 데이터 소스를 고치거나 이상치를 감지해서 제거

 

 

▶ 규제가 있는 선형 모델

  • 과대적합을 감소시키는 좋은 방법은 모델을 규제하는 것이다.
    • ex) 다항 회귀 모델을 규제하는 간단한 방법은 다항식의 차수를 감소시키는 것이다.
  • 선형 회귀 모델에서는 보통 모델의 가중치를 제한함으로써 규제를 가한다.

1. Ridge 회귀

  • 선형 회귀 모델에 L2 규제가 추가된 모델이다.

Ridge 회귀의 비용 함수

  • 하이퍼 파라미터 alpha를 통해 모델을 얼마나 많이 규제할지 조절한다.
    • alpha = 0 이면, Ridge 회귀는 선형 회귀와 동일해진다.
    • alpha가 매우 크면, 모든 가중치가 거의 0에 가까워지고 결국 데이터의 평균을 지나는 수평선이 된다.
      • alpha가 무한대라면 비용 함수식은 너무 커지게 되므로, 회귀 계수 theta 값을 0으로 만들어야 Cost가 최소화되는 비용 함수 목표를 달성할 수 있기 때문이다.
    • 아래의 그림을 보면, alpha를 증가시킬수록 직선에 가까워지는 것을 볼 수 있다. (즉, 모델의 분산은 줄지만 편향은 커진다)

Ridge 규제를 사용한 선형 회귀(왼쪽)와 다항 회귀(오른쪽)

alpha 감소 ←  . . .  alpha 증가
RSS(theta) 최소화 ←  . . .   회귀 계수 theta 감소
  • Ridge 회귀는 입력 특성의 스케일에 민감하므로, 수행하기 전에 데이터의 스케일을 맞춰주는 작업이 중요하다.
    • 이는 규제가 있는 모델들에 대해서 일반적으로 진행해주는 작업이다.
  • Ridge 회귀를 계산하기 위해 정규방정식 또는 경사 하강법을 사용할 수도 있다.

Ridge 회귀의 정규방정식

※ 교재에서 사이킷런에서 정규방정식을 사용한 Ridge 회귀를 적용할 때, Cholesky Decomposition에 대한 개념이 나온다. 하지만 Cholesky Decomposition와 관련된 내용은 어렵기 때문에, 일단은 이런게 있구나 정도만 하고 넘어가자!!

(대학원에서 전공으로 배우는 걸 교재에는 아무렇지도 않게 써놨네...)

 

2. Lasso 회귀

  • 선형 회귀 모델에 L1 규제가 추가된 모델이다.

Lasso 회귀의 비용 함수

  • Lasso 회귀의 중요한 특징은 덜 중요한 특성(feature)의 가중치를 제거하려고 한다는 점이다.
  • 다시 말해, Lasso 회귀는 자동으로 특성을 선택하고 희소 모델(sparse model)을 만들어준다.
    • 따라서 feature selection 부분에서 많이 활용된다.

Lasso 규제를 사용한 선형 회귀(왼쪽)와 다항 회귀(오른쪽)

<참고 정도만...>

- 경사 하강법을 Lasso 비용 함수에 사용하기 위해 서브그레디언트 벡터 g를 사용한다.

 

3. 엘라스틱넷 회귀

  • Ridge 회귀와 Lasso 회귀를 절충한 모델이다.
    • 즉, L2 규제L1 규제결합한 회귀 모델이다.
    • Lasso 회귀의 단점을 보완하기 위해, L2 규제를 추가해 준 것이다.

엘라스틱넷 회귀의 비용 함수

  • 위 비용 함수 식에서 r = 0 이면 엘라스틱넷 회귀는 Ridge 회귀와 동일하고, r = 1 이면 Lasso 회귀와 동일하다.
  • 규제항Ridge 회귀와 Lasso 회귀의 규제항을 단순히 더해서 사용하며, 혼합 정도혼합 비율 r을 사용해서 조절한다.

<참고>

  • 규제가 없는 보통의 선형 회귀, Ridge, Lasso, 엘라스틱넷을 언제 사용해야 할까?
    • Ridge가 기본적으로 많이 사용되지만, 특성이 몇 개뿐이라고 의심되면 Lasso나 엘라스틱넷을 사용한다.
    • 위 규제 모델들은 불필요한 특성의 가중치를 0으로 만들어준다.
      • 따라서 특성 수가 훈련 샘플 수보다 많거나 특성 몇 개가 강하게 연관되어 있을 때(다중 공선성이 존재할 때)는 보통 Lasso가 문제를 일으키므로 Lasso보다는 엘라스틱넷을 선호한다.

 

 

▶ 조기 종료(Early Stopping)

  • 경사 하강법과 같은 반복적인 학습 알고리즘을 규제하는 방식검증 에러가 최솟값에 도달하면 바로 훈련을 중지시키는 것인데, 이를 조기 종료(early stopping)라고 한다.
  • 이 규제 방식은 매우 효과적이고 간단하다.

조기 종료 규제

  • 확률적 경사 하강법이나 미니배치 경사 하강법에서는 곡선이 위와 같이 매끄럽지 않아서, 최솟값에 도달했는지 확인하기가 어렵다.
    • 이에 대한 해결책 검증 에러가 일정 시간 동안 최솟값보다 클 때(모델이 더 나아지지 않는다고 확신이 들 때) 학습을 멈추고, 검증 에러가 최소였을 떄의 모델 파라미터로 되돌리는 것이 있겠다.

 

 

▶ 로지스틱 회귀

  • Target 변수범주형인 경우 사용하는 모델이다.
  • 샘플이 특정 클래스에 속할 확률을 추정하는데 널리 사용된다.
    • 각 클래스에 속할 확률을 비교해서, 확률 값이 큰 쪽으로 분류한다.
    • 일반적으로 분류 기준 확률 값으로 0.5를 사용한다.
    • 이를 이진 분류기라고 한다.

◆ 확률 추정

  • 로지스틱 회귀는 로지스틱 함수(시그모이드 함수)를 사용하여 확률 값을 추정하며, 출력 결과 값은 0과 1사이의 값을 갖는다.

로지스틱 회귀 모델의 확률 추정(벡터 표현식)
로지스틱 함수(시그모이드 함수)
로지스틱 회귀 모델 예측

◆ 훈련과 비용 함수

  • 로지스틱 회귀 모델의 훈련 목적y = 1에 대해서는 높은 확률을 추정하고, y = 0에 대해서는 낮은 확률을 추정하는 모델의 파라미터 벡터 theta를 찾는 것이다.
  • 따라서 하나의 훈련 샘플에 대한 비용 함수는 다음과 같다.

  • 전체 훈련 세트에 대한 비용 함수모든 훈련 샘플의 비용을 평균한 것이다. 이를 로그 손실이라고 부른다.

로지스틱 회귀의 비용 함수(로그 손실)

  • 위 비용 함수는 볼록 함수이므로, 경사 하강법과 같은 알고리즘을 통해 전역 최솟값(global minimum)을 찾을 수 있다.

◆ 결정 경계(Decision Boundary)

 

추정 확률과 결정 경계

  • 예시로 사용한 위 그래프를 보면, 양쪽 클래스의 확률이 똑같이 50%가 되는 1.6cm 근방에서 결정 경계(Decision Boundary)가 생성되는 것을 확인할 수 있다.

<참고>

  • 로지스틱 회귀 모델도 L1, L2 규제를 적용시킬 수 있다.
  • 사이킷런의 LogisticRegression 모델의 규제 강도를 조절하는 하이퍼 파라미터alpha가 아니고, 그 역수에 해당하는 C이다.
    • C가 높을수록 모델의 규제가 줄어든다.

◆ 다항 로지스틱 회귀(소프트맥스 회귀)

  • (범주가 2개로 이루어진) Target 변수2개 이상인 경우 사용하는 모델이다.
  • 샘플 x가 주어지면 다항 로지스틱 회귀 모델(소프트맥스 회귀 모델)이 각 클래스 k에 대한 점수를 계산하고, 그 점수에 정규화된 지수 함수(소프트맥스 함수)를 적용하여 각 클래스의 확률을 추정하는 방식이다.

클래스 k에 대한 소프트맥스 점수
소프트맥스 함수

  • 로지스틱 회귀 분류기와 마찬가지로 소프트맥스 회귀 분류기는 추정 확률이 가장 높은 클래스를 선택한다.
    • 즉, 가장 높은 점수를 가진 클래스를 선택한다.
  • 모델이 타겟 클래스에 대해서는 높은 확률을 추정하도록 만드는 것이 우리의 목적이다.
    • 따라서 크로스 엔트로피 비용 함수최소화해서, 타겟 클래스에 대해 낮은 확률을 예측하는 모델을 억제시켜줘야 한다.
    • 크로스 엔트로피추정된 클래스의 확률이 타겟 클래스에 얼마나 잘 맞는지를 측정하는 용도로 사용된다.

크로스 엔트로피 비용 함수

 

 

여기까지 해서 4장 "모델 훈련"에 대한 정리를 마치도록 하겠다.

 

★ 참고 자료

- 핸즈온 머신러닝 2/E 교재

- 파이썬 머신러닝 완벽 가이드 교재