[핸즈온머신러닝] 4장 모델 훈련

미남잉·2022년 4월 21일
1

목차

  1. Linear Regression
    정규 방정식과 계산 복잡도
  2. Gradient Descent
    2-1. Batch gradient descent
    2-2. Stochastic gradient descent
    2-3. Mini-batch gradient descent
  3. Polynomial Regression
  4. Learning curve
    4-1. underfitting
    4-2. overfitting
    4-3. Bias–variance tradeoff
  5. Regularized Linear Models
    5-1. Ridge Regression
    5-2. Lasso Regression
    5-3. Elasticnet
    5-4. Earlystopping
  6. Logistic Regression
    6-1. logistic
    6-2. cost function
    6-3. Sotfmax Regression

1장부터 3장까지는 머신러닝 모델과 훈련 알고리즘을 살펴보았습니다. 챕터 4는 모델이 어떻게 구현되고 작동되는지를 살펴보는 단원입니다.

  • 모델이 어떻게 작동하는지를 알면
    • 적절한 모델 선택
    • 올바른 훈련 알고리즘
    • 작업에 맞는 좋은 하이퍼 파라미터

를 빠르게 찾을 수 있습니다. 작동 원리를 알면 디버깅이나 에러를 효율적으로 분석할 수 있습니다.

4장의 흐름은

  1. 선형회귀
  2. 다항회귀
  3. 로지스틱 회귀
  4. 소프트맥스 회귀

를 살펴봅니다.

또한, 이를 공부하며 나오는 개념으로

  • 경사하강법, 배치 경사 하강법, 미니배치 경사 하강법, 확률적 경사 하강법(SGD)
  • learning curve, overfitting, underfitting
  • 규제 - Ridge, Lasso

등을 배우게 될 예정입니다.

이 책은 진짜 볼 때마다 3회독 이상을 하는데, 그렇게 해도 벅차네요. 그럼 4회독 겸 정리 시작해보겠습니다.

그리고 책의 내용을 바탕으로 큰 흐름을 잡는 것이 목표이기 때문에 책에서 한 목차가 다를 수 있음을 알려드립니다.


1. Linear Regression

선형 모델은 입력 특성의 가중치 합과 편향(bias^{bias} 또는 절편intercept^{intercept})이라는 상수를 더해 예측을 만듦니다.


<식 4-1 선형 회귀 모델의 예측>

y^=θ0+θ1x1+θ2x2++θnxn\hat y = \theta_0 + \theta_1 x_1 + \theta_2 x_2 + \dots + \theta_n x_n

  • y^\hat y: 예측값
  • nn: 특성수
  • xix_i: i번째 특성값
  • θj\theta_j: jj번째 모델 파라미터(편향 θ0\theta_0와 가중치 θ1,θ2,θ3,,θn\theta_1, \theta_2, \theta_3, \dots, \theta_n을 포함)

위의 식을 벡터 형태로 더 간단히 쓰면

<식 4-2 선형 회귀 모델의 예측(벡터 형태)>

y^=hθ(x)=θx\hat y = h_\theta(x) = \boldsymbol\theta \boldsymbol x

  • θ\boldsymbol\theta: 편향 θ0\theta_0와 가중치 θ1,θ2,θ3,,θn\theta_1, \theta_2, \theta_3, \dots, \theta_n까지의 특성 가중치를 담은 모델의 파라미터 벡터
  • x\boldsymbol x: x0x_0에서 xnx_n까지 담은 샘플의 특징 벡터, x0x_0은 항상 1이다.
  • θx\boldsymbol\theta \boldsymbol x: 벡터 θ\thetaxx의 점곱(dot product), 이는 θ0x0+θ1x1+θ2x2++θnxn\theta_0 x_0+ \theta_1 x_1 + \theta_2 x_2 + \dots + \theta_n x_n과 같다.
  • hθh_\theta: 모델 파라미터 θ\theta를 사용한 가설 함수이다.

y^=hθ(x)=θx\hat y = h_\theta(x) = \boldsymbol\theta \boldsymbol x

위 식이 선형회귀 모델입니다. 이제 모델을 훈련 시켜야 하는데, 모델을 훈련 시킨다는 것은 모델이 훈련 세트에 가장 잘 맞도록 모델 파라미터를 설정하는 것을 의미합니다.

이를 위해 모델이 훈련 데이터에 얼마나 잘 들어맞는지 측정이 필요하고, 머신러닝 목적에 따라 측정 지표는 달라집니다.

현재는 회귀이기 때문에 가장 널리 사용되는 측정 지표 평균 제곱근 오차 RMSE를 사용합니다.

그러므로 선형 회귀 모델을 훈련시키려면 RMSE를 최소화하는 θ\boldsymbol\theta를 찾아야 합니다.

이것은 평균 제곱 오차 MSE를 최소화하는 것이 같은 결과를 내면서 같은 문제입니다.

설명을 조금 더 덧붙여보자면 MSE는 예측값과 정답의 차이를 제곱하기 때문에, 이상치에 대해 민감합니다.

즉, 정답에 대해 예측값이 매우 다른 경우, 그 차이는 오차값에 상대적으로 크게 반영됩니다.

또한, 오차값에 제곱을 취하기 때문에 오차가 [0,1]의 값일 경우, MSE에서 오차는 원래보다 더 작게 반영되고 오차가 1보다 클 때는 더 크게 반영되니다.

RMSE는 MSE에서 루트를 취하기 때문에, 위에서 언급한 MSE의 단점을 보완하고 해소해줍니다.

따라서 RMSE는

  • 이상치에 덜 민감하면서 각 오차가 다른 가중치를 갖게된다.(MAE와의 차이)

훈련 세트 X에 대한 선형 회귀 가설 hθh_\theta의 MSE는 식[4-3]처럼 계산합니다.


<식 4-3 선형 회귀 모델의 MSE 비용함수>

MSE(X,hθ)=1mΣi=1m(θTx(i)y(i))2MSE(X, h_\theta) = \frac{1}{m} \Sigma^m_{i=1}(\theta^Tx^{(i)}-y^{(i)})^2


모델이 파라미터 벡터 θ\theta를 가지기 때문에 hθh_\theta로 사용하고, 편의상 MSE(θ)MSE(\theta)로 표현할 예정입니다.


정규 방정식과 계산 복잡도

책에는 비용 함수를 최소화하는 θ\boldsymbol\theta 값을 찾기 위한 해석적 방법을 소개합니다.

더 쉽게 표현하면 바로 결과를 얻을 수 있는 수학 공식을 의미합니다.


θ^=(XTX)1XTy\hat\theta=(\boldsymbol X^T \boldsymbol X)^{-1} \boldsymbol X^T \boldsymbol y

  • θ\boldsymbol \theta은 비용 함수를 최소화하는 θ\boldsymbol \theta의 값입니다.
  • y\boldsymbol yy(1)y^{(1)}부터 y(m)y^{(m)}까지 포함하는 타깃 벡터입니다.

정규방정식을 이해하기 위해 SVD의 유사역행렬 개념과 무어 펜로즈 등을 이해해야 하는듯 한데 아직 이 부분은 제가 이해하지 못했습니다.

책의 내용을 그대로 빌려 정리해보겠습니다.

정규방정식의 경우 (n+1)(n+1)(n+1)(n+1) 크기가 되는 XTX\boldsymbol X^T \boldsymbol X 의 역행렬을 계산합니다.

역행렬을 계산하는 계산 복잡도는 특성수가 늘어날 수록 배로 증가하기 때문에 매우 느려집니다.

이때문에 다른 방법으로 선형 회귀 모델을 학습 시키는 알고리즘을 소개해줍니다.

그것이 경사하강법, 배치 경사 하강법, 미니배치 경사 하강법, 확률적 경사 하강법(SGD) 해당 알고리즘이며, 이들은 특성이 많고 훈련 샘플이 많아 메모리에 담기 어려울 때 사용하기 적합합니다.


2. Gradient Descent

경사하강법(gradient descent)은 비용 함수를 최소화하기 위해 반복해서 파라미터를 조정해가는 것입니다.

파라미터 벡터 θ\boldsymbol \theta에 대해 비용 함수의 현재 gradient를 계산합니다.

그리고 감소하는 방향으로 진행하며 gradient가 0에 도달하면 최솟값에 도달한 것입니다.

구체적으로 보면 θ\boldsymbol \theta를 임의의 값으로 시작해서 (무작위 초기화, weight initialization) 한 번에 조금씩 비용 함수가 감소되는 방향으로 진행하여 알고리즘이 최솟값에 수렴할 때까지 점진적으로 향상시킵니다.

그림에서 모델 파라미터가 무작위하게 초기화된 후 반복적으로 업데이트하며 최솟값을 향해 갑니다.

여기서 학습 스텝 크기는 비용 함수의 기울기에 비례합니다. 이 말은 기울기가 클수록 더 빠르게 학습하고(최솟값에 도달하기 위해) 기울기가 감소할수록 최솟값에 가까워졌다는 의미이니 천천히 학습합니다. 스텝 크기가 점진적으로 줄어드는 방식이죠.

여기서 이 스텝 크기를 조절하는 것이 경사 하강법에서 중요한 파라미터이며, 학습률(learning rate) 하이퍼파라미터로 결정됩니다.

이제 학습률에 관련해서 두 가지 경우를 살펴보겠습니다.

<학습률이 너무 작을 때>

학습률이 너무 작으면 알고리즘이 수렴하기 위해 반복을 많이 진행해야 하므로 시간이 오래 걸립니다.

<학습률이 너무 클 때>

학습률이 너무 크면 더 큰 값으로 발산하게 만들어서 적절한 해법을 찾기 못하게 합니다.

하지만 위 그래프처럼 모든 비용 함수가 매끈한 그릇 모양을 갖고 있진 않습니다.


경사하강법의 두 가지 문제점은 전역 최솟값(global minimum)보다 덜 좋은 지역 최솟값(local minimum)에 수렴합니다.

어디서 시작하느냐에 따라 평탄한 지역을 지나기 위해 시간이 오래 걸리고 일찍 멈추게 되어 전역 최솟값에 도달하지 못합니다.

선형 회귀를 위한 MSE 비용 함수는 곡선에서 어떤 두 점을 선택해 선을 그어도 곡선을 가로지르지 않는 볼록함수입니다.

이런 convex한 특성을 가진 함수는 연속함수이고 모든 점에서 미분이 가능하기 때문에 경사 하강법 알고리즘에 적당합니다.

그래서 local minima가 없고 하나의 global minima만 있습니다.

또한, 이 비용함수는 feature들의 scale이 다르면 매우 길쭉한 모양이 되기도 합니다.


2-1. Batch gradient descent

각 모델 파라미터 θj\theta_j에 대해 비용 함수의 gradient를 계산해야 합니다.

다시 말해 θj\theta_j가 조금 변경될 때 비용 함수가 얼마나 바뀌는지 계산해야 합니다.

이를 partial derivative라고 합니다.

파라미터 θj\theta_j에 대한 비용 함수의


θjMSE(θ)=2mΣi=1m(θTx(i)y(i))xj(i)\frac{\partial}{\partial\theta_j}MSE(\theta)= \frac{2}{m} \Sigma^m_{i=1}(\theta^Tx^{(i)}-y^{(i)})x^{(i)}_j

gradient vector θMSE(θ)\nabla_\theta MSE(\theta)는 비용 함수의 편도함수를 모두 담고 있습니다.

이 공식은 매 경사 하강법 스텝에서 전체 훈련 세트 X\boldsymbol X에 대해 계산합니다.

이 전체 세트를 batch라고 합니다. 즉, 매 스텝에서 훈련 데이터 전체를 사용합니다.

그렇기 때문에 훈련 세트가 매우 클 경우 느리다는 특징이 있습니다.


<식 4-7 경사 하강법의 스텝>

θ(next step)=θηθMSE(θ)\boldsymbol \theta^{(next \ step)} = \boldsymbol \theta - \eta \nabla_\theta MSE(\theta)


정규방정식으로 찾은 것과 같습니다.

학습률 η\eta를 바꾸며 학습한 결과입니다.

  • 왼쪽은 학습률이 낮은 경우입니다.
  • 가운데는 학습률이 적당한 경우입니다.
  • 오른쪽은 학습률이 너무 높습니다.

여기서 적절한 학습률을 찾으려면 그리드 탐색을 사용할 수 있습니다.


2-2. Stochastic gradient descent

배치 경사 하강법의 문제점은 훈련 세트가 클수록 느려진다는 점입니다.

반대로 확률적 경사 하강법(stochastic gradient descent)은 매 스텝에서 한 개의 샘플을 무작위로 선택하고 그 하나의 샘플에 대한 gradient를 계산합니다.

매 반복에서 하나의 샘플을 처리해서 훨씬 더 빠릅니다.

대신 확률적(무작위)으로 알고리즘을 시행하기 때문에 배치 경사 하강법보다 훨씬 더 불안정합니다.

최솟값에 다다를 때까지 부드럽게 감소하지 않고 위아래로 요동치며 평균적으로 감소합니다.

비용 함수가 불규칙한 특징을 갖고 있을 때 local minima를 뛰어넘을 수 있기 때문에 배치 경사 하강법보다 global minima를 찾을 가능성이 높습니다.

무작위성이 갖고 있는 딜레마를 해결하는 방법은 학습률을 점진적으로 감소시키는 방법입니다.

시작할 때는 학습률을 크게 하여 수렴이 빠르게 이뤄질 수 있도록 도와주고, 점차 작게 줄여서 알고리즘이 global minima에 도달하게 도와줍니다.

그래서 매 반복에서 학습률을 결정하는 함수를 학습 스케줄(learning schedule)이라고 부르며, 이를 함께 사용하여 경사 하강법을 구현할 수 있습니다.

또 한 가지 생각할 점이 있습니다.

훈련 데이터 샘플을 무작위로 고르기 때문에, 선택한 샘플을 한 번 더 고르는 일이 발생할 수 있지 않은가? 인데요.

그러면 이 문제를 해결하기 위해 훈련 세트를 섞은 다음 하나씩 선택하는 방법을 고안할 수 있습니다.

하지만 이렇게 할 경우 보통 더 늦게 수렴됩니다.

이는 IID(independent and identically distributed)를 만족해야 파라미터가 평균적으로 global minima를 향해 진행된다고 보장합니다.

이렇게 진행하기 위해 각 샘플을 랜덤하게 섞거나 에포크를 시작할 때 훈련 세틀르 섞을 수 있습니다.

정렬된 샘플을 그대로 이용하는 경우에는 먼저 한 레이블에 대해 최적화하고 그 다음에 나오는 레이블에 최적화하는 방식으로 진행되기 때문에 결국은 최적점에 도달하지 못합니다.


2-3. Mini-batch gradient descent

4장에서 다루는 마지막 경사 하강법 알고리즘입니다.

미니배치 경사 하강법은 배치를 n개로 나눈 임의의 작은 샘플 세트를 활용하여 gradient를 계산하는 방법입니다.

SGD에 비해 미니배치 경사 하강법의 주요 장점은 행렬 연산에 최적화된 GPU를 사용하여 성능을 얻을 수 있다는 점입니다.

특히 미니배치를 이용하면 SGD보다 덜 불안정하고, 최솟값에 더 가까이 도달할 수 있습니다.

local minima에서 빠져나오긴 더 어려울 수 있습니다.

세 가지 경사 하강법 알고리즘을 비교하는 그래프입니다.

모두 최솟값 근처에 도달했지만 배치 겨ㅑㅇ사 하강법의 경로가 실제로 최솟값에서 멈추었고, SGD나 미니배치 경사 하강법은 근처에서 맴돕니다.

그렇지만 배치 경사 하강법에는 매 스텝에서 많은 시간이 소요되고, 확률적 경사 하강법과 미니배치 경사 하강법도 적절한 학습 스케줄을 사용하여 최솟값에 도달할 수 있습니다.


3. Polynomial Regression

다항 회귀는 각 특성의 거드제곱을 취해 새로운 특성으로 추가하고, 특성을 포함한 데이터셋에 선형 모델을 훈련시키는 방법입니다.

2차 방정식으로 비선형적인 모양을 띄는 데이터를 생성했습니다.

식은

y=0.5x12+1.0x1+2.0y = 0.5x^2_1 + 1.0x_1 + 2.0 + 가우시안 잡음

예측된 모델은

y^=0.56x12+0.93x1+2.0+1.78\hat y = 0.56x^2_1 + 0.93x_1 + 2.0 + 1.78

사이킷런에서는

from sklearn.preprocessing import PolynomialFeatures을 불러와서 사용할 수 있으며,

매개변수 degree=n은 특성이 n개인 배열을 특성이

(n+d)!d!n!\frac{(n+d)!}{d!n!}

개인 배열로 변환합니다.

1차, 2차, 300차 다항 곡선을 확인해보세요. 몇 차의 다항 회귀가 가장 잘 예측을 했나요?


4. Learning curve

학습 곡선(learning curve)을 보는 이유는 한 가지입니다.

모델이 올바르게 잘 학습되고 있느냐?

이 문제는 결국 우리가 만든 모델이 새로운 데이터가 들어왔을 경우에 잘 일반화할 수 있냐의 본질적인 문제에 가깝습니다.

그러면 이 모델을 어떻게 사용할지에 대해 판단할 수 있는 기준이 필요한데요.

이 일반화 성능을 추정하기 위해 2장에서는 교차 검증(cross validation)을 사용합니다.

훈련 데이터에서 점수가 좋지만 교차 검증의 점수가 나쁘다면 과대적합이라 판단했고, 양쪽 모두 좋지 않으면 과소적합이라 판단했습니다.

또다른 방법은 학습 곡선(learning curve)을 살펴보는 것입니다.

코드로 훈련 세트와 검증 세트의 모델 성능을 훈련 세트 크기(또는 훈련 반복)의 함수로 나타냅니다.

훈련 세트 크기라는 것은 모델 훈련 반복 수, epoch를 의미하는가 했는데 그렇지 않고 정말 모델에 들어가는 sample 수를 의미했습니다.

(별거 아닌 부분인데 용어가 모두 한국어로 번역되어 있다보니 공부하며 혼란스러운 부분이 많은 것 같습니다.)


4-1. underfitting

그래프를 그리면 이렇습니다. training set size에 따른 trainval의 RMSE 성능 지표를 보여주는 그래프입니다.

RMSE는 작을 수록 좋으니까 어느 정도 일정 값에 수렴하고 있는 두 값을 보아 과소적합이라 판단할 수 있습니다.

  • 훈련 데이터의 성능은 0에서 시작
  • 샘플 수가 1~2개 일 땐 모델이 완벽
  • 샘플 수가 늘어날 수록 데이터에 있는 noise나 비선형적인 부분 때문에 모델이 훈련 데이터를완벽히 학습하는 것이 불가능
  • 곡선이 평평해지면서 오차 상승

해당 그래프로 해석해보자면, 훈련 sample이 계속해서 늘어난다고 성능이 좋아지지 않을 거라 예상됩니다.

  • 검증 데이터는 모델이 적은 수의 sample을 갖고 있을 때 제대로 일반화되지 않아 초반에 오차가 매우 큼
  • training sample이 추가될 수록 학습이 진행되며 오차가 천천히 감소
  • 선형 회귀의 직선은 데이터를 잘 모델링 할 수 없음
  • 오차의 감소가 완만해지며 훈련 세트의 그래프와 가까워짐

해당 그래프가 과소적합 모델의 전형적인 모습입니다.

💡 과소적합: 두 곡선이 수평한 구간을 만들고 꽤 높은 오차에서 매우 가까이 근접해 있는 모습

💡 해결 방안: 더 복잡한 모델 사용, 더 나은 특성 선택


4-2. overfitting

이 학습 곡선은 위와 다른 점이 있습니다.

아까 과소적합을 나타낸 그래프는 단순 선형 회귀 모델을 사용한 경우였고,

지금은 10차 다항 회귀 모델을 학습한 그래프입니다.

그래서 일반 선형 회귀 모델을 썼을 때보다 RMSE가 훨씬 더 낫다는 걸 알 수 있습니다.

그러나 과대적합이라 판단할 수 있는데요. 그 이유는 아래 정리를 통해 한 번 정리해보시면 될 것 같습니다.

💡 과대적합: 두 곡선 사이의 공간 존재, 훈련 데이터의 오차가 검증 데이터의 오차보다 더 낮음(더 낫다), 더 많은 sample을 사용할 수록 두 곡선이 가까워짐

💡 해결 방안: 훈련 sample의 수를 늘림, 규제를 추가함(모델을 단순화한다는 의미, 모델 복잡도를 내림)


4-3. Bias–variance tradeoff

이 개념은 기본적이면서도 아주 중요한 개념입니다.

모델의 일반화 오차는 세 가지 다른 종류의 오차의 합으로 표현되는데요.

그게 편향, 분산, 줄일 수 없는 오차로 소개하고 있습니다.

  1. 편향(bias)
    일반화 오차 중에 편향은 잘못된 가정의 결과입니다. 데이터가 실제로는 2차인데 선형으로 가정하는 경우, 훈련 데이터에 과소 적합되어 편향이 커지게 됩니다. 너무 모델이 단순해서 실제 데이터가 가진 특성을 반영하지 못하는 경우, 편향이 크다고 생각할 수 있습니다.
  1. 분산(variance)
    분산은 훈련 데이터에 있는 작은 변동에 모델이 과도하게 민감히 반응할 때 커집니다. 자유도가 높은 모델(고차 다항 회귀 모델)이 높은 분산을 가지기 쉬워 훈련 데이터에 과대적합되는 경향이 있습니다.

    (이 책에서 나오는 자유도란 개념이 통계학에서 나오는 내용이라 고민을 많이 했는데, 1장에도 해당 개념이 소개됩니다. 어쨌든 다항 회귀 모델을 자유도가 높은 모델이라 설명한 것을 보아, 특성 수를 의미하는 것 같습니다.)

  2. 줄일 수 없는 오차(irreducible error)
    줄일 수 없는 오차는 데이터 자체에 있는 잡음 때문에 발생합니다. 이 오차를 줄이는 방법은 이상치 제거 등을 통한 noise, outlier를 제거하는 방법 뿐입니다.

모델의 복잡도가 커지면 통상적으로 분산이 늘어나고 편향은 줄어듭니다. 반대로 모델의 복잡도가 줄어들면 편향이 커지고 분산이 작아집니다.

그래서 이 둘의 관계를 트레이드오프(trade-off)라 부릅니다.


5. Regularized Linear Models

과대적합을 감소시키는 방법으로 모델 규제가 있었습니다.

자유도를 줄일수록 데이터에 과대적합 되기 어려우며 다항 회귀 모델의 가장 쉬운 규제 방법은 다항식의 차수를 줄이는 방법입니다.

이 규제의 효과는 학습 알고리즘을 데이터에 맞추고, 모델의 가중치가 가능한 작게 유지될 수 있도록 도와줍니다.

규제항의 주의점은 훈련하는 동안에만 추가되고, 훈련이 끝나고 모델의 성능을 평가할 때는 규제가 없는 성능 지표로 평가해야 합니다.

그 이유는 규제는 단순히 training set에만 과하게 overfitting을 막기 위함이어서, test set에서 실제 sample을 예측할 때는 필요가 없습니다.

선형 회귀 모델에서는 모델의 가중치를 규제합니다.

그 방법으로 3가지가 소개됩니다.

  • Ridge
  • Lasso
  • ElasticNet

입니다.


5-1. Ridge Regression

Ridge는 규제가 추가된 선형 회귀 모델 중 하나입니다.

더 소개될 Lasso, ElasticNet도 다른 방식으로 규제가 추가된 모델이라고 생각하시면 됩니다.

이 규제의 효과는 학습 알고리즘을 데이터에 맞추도록 도와주고, 모델의 가중치가 가능한 한 작게 유지되도록 노력합니다.

규제항 αΣi=1nθi2\alpha \Sigma^n_{i=1} \theta^2_i이 식에 추가됩니다.

  • 하이퍼파라미터 α\alpha는 모델을 얼마나 많이 규제할지 조정합니다.
  • α=0\alpha=0이면 Ridge 회귀는 선형 회귀와 같아짐
  • α\alpha가 아주 크면, 모든 가중치가 0에 가까워지며 결국 데이터의 평균을 지나는 수평선이 됩니다. (기울기가 0이 되면서)

<식 4-8 릿지 회귀의 비용 함수>

J(θ)=MSE(θ)+α12Σi=1nθi2J(\theta) = MSE(\theta)+\alpha \frac{1}{2} \Sigma^n_{i=1} \theta^2_i

θ0\theta_0은 규제되지 않습니다. w\boldsymbol w를 특성의 가중치 벡터라고 정의하면 규제항은 12(w2)2\frac{1}{2} ( \left| \left| w \right| \right|_2)^2과 같습니다.

여기서 말하는 규제는 l2l_2 norm과 같습니다.

아래 그래프는 몇 가지 다른 α\alpha를 사용하여 Ridge model을 훈련시킨 결과입니다.

왼쪽은 평범한 Ridge model을 통한 선형적인 예측이며, 오른쪽 그래프는 PolynomialFeatures(degree=10), StandardScaler를 사용한 후 Ridge model을 적용한 결과입니다.

α\alpha를 증가시킬수록 직선에 가까워지는 걸 볼 수 있고, 모델의 분산은 줄지만 편향은 커집니다.

즉, 규제가 커질수록 모델이 단순화 되기 때문에 분산은 줄어들고 편향은 커집니다.(오버피팅을 막는 방법)


5-2. Lasso Regression

Lasso 회귀도 l1l_1 norm을 사용하는 규제항을 추가한 선형 회귀의 또 다른 버전입니다.


<식 4-9 라쏘 회귀의 비용 함수>

J(θ)=MSE(θ)+αΣi=1nθiJ(\theta) = MSE(\theta)+\alpha \Sigma^n_{i=1} \left| \theta_i \right|

식은 릿지와 비슷해 보입니다. 릿지는 l2l_2 norm의 제곱을 2로 나눈 값을 사용했지만 라쏘는 단순히 l1l_1 norm을 사용합니다.

라쏘의 중요한 특징은 덜 중요한 특성의 가중치를 제거하려고 한다는 점입니다.

그래프를 보면 왼쪽은 선형 회귀이고 오른쪽은 다항 회귀입니다.

오른쪽 그래프에서 α=1e07\alpha=1e-07의 경우 차수가 높은 다항 특성의 가중치가 0이 되었음을 볼 수 있습니다.

라쏘는 자동으로 특성을 선택하고 희소 모델(sparse model)을 만듭니다. 즉, 0이 아닌 특성의 가중치가 적습니다.

해당 그래프로 다시 살펴보겠ㅅ브니다.

  • 두 축은 모델 파라미터 두 개를 나타내고, 배경의 등고선은 각기 다른 손실 함수를 의미합니다.
  • 위의 2개는 l1l_1 loss, 아래쪽 2개는 l2l_2 loss를 의미합니다.
  • 경사하강법을 실행하면 두 파라미터가 동일하게 감소함
  • gradient가 0에 도달할 때까지 진동하며 따라 내려감
    • l1l_1 loss는 0에서 정의되지 않기 때문에 진동함
    • l2l_2 loss는 원점까지 직선 경로를 따라 내려감

릿지와 라쏘의 특성 비교를 정리하자면,

  • 릿지는 파라미터가 global minima에 가까워질수록 gradient가 작아짐
  • gradient descent가 자동으로 느려지고 수렴에 도움이 됨(진동 X)
  • α\alpha를 증가시킬수록 최적의 파라미터가 원점에 가까워짐
  • 하지만 완전히 0이 되지는 않음

5-3. Elasticnet

엘라스틱넷은 릿지 회귀와 라쏘를 절충한 모델입니다.


<식 4-10 엘라스틱넷 비용 함수>

J(θ)=MSE(θ)+rαΣi=1nθi+1r2αΣi=1nθi2J(\theta) = MSE(\theta)+ r\alpha \Sigma^n_{i=1} \left| \theta_i \right| + \frac{1-r}{2} \alpha \Sigma^n_{i=1} \theta^2_i

규제항은 릿지와 회귀의 규제항을 단순히 더해서 사용합니다.

여기서 하나의 하이퍼파라미터 rr이 추가됩니다.

  • r=0r=0이면 엘라스틱넷은 릿지 회귀와 같음
  • r=1r=1이면 라쏘 회귀와 같음

여기까지 총 3개의 규제항을 추가한 선형 회귀 모델을 살펴보았습니다.

일반적으로 평범한 선형 회귀는 피하고 규제가 약간 있는 것이 더 성능이 좋습니다.

  • 라쏘는 불필요한 특성의 가중치를 0으로 만들어줍니다.
  • 특성 수가 훈련 샘플 수보다 많거나 특성 몇 개가 강하게 연관되어 있을 때는 라쏘가 문제를 일으킵니다. 그래서 보통 라쏘보단 엘라스틱넷을 사용합니다.

이 부분에 대해서 이야기를 했을 때,

라쏘가 문제를 일으키는 이유는 라쏘는 특성의 가중치를 0으로 만드는 특성이 있어서 특성끼리 연관이 큰 경우에는 하나를 지워버리면 남는 특성의 영향력이 없어지기 때문이라 생각했습니다. 해당 부분에 대해 오류가 있으면 댓글로 지적 부탁드립니다.


5-4. Earlystopping

조기 종료(earlystopping)는 경사하강법 같은 반복적인 학습 알고리즘을 규제하는 방법입니다. 위에서 소개한 규제항을 추가하는 방법과는 다른 방법입니다.

이 방법은 validation error가 최솟값에 도달하면 훈련을 중지시키는 방법이고,

최솟값에 도달했다는 판단 기준은 감소하던 validation error가 어느 정도에서 멈추었다가 상승할 때, 즉 과대적합되기 시작할 때쯤을 판단하고 알아서 멈춥니다.

되게 간단한 방법이라서 많이 쓰이는 방법입니다!

Best Model이라 쓰인 부분을 보면 파란색이 validation set의 성능 지표인데 저 지점을 기점으로 상승하는 것을 보여줍니다.

그래서 해당 부분에서 training을 멈추는 것이 early stopping입니다.


6. Logistic Regression

로지스틱 회귀는 선형 회귀 모델을 사용하여 분류에서 사용하는 모델입니다.

여기서는 로짓 회귀, 오즈 등의 개념이 나오는데 해당 부분은 개념 이해를 위해 한 번 공부하고 오시는 것을 추천드립니다.


6-1. logistic

로지스틱 회귀의 아이디어는 확률 추정입니다. 회귀의 경우는 어떤 특정한 값을 최종적으로 추론해내는 방법이고, 실제 label 값과 비교하여 손실을 줄여나가는 방식을 현재까지 공부했습니다.

로지스틱 회귀는 이를 확률 추정으로 바꾸어서 어떤 임계값을 통해 True or False 같은 class를 분류하게 됩니다.

방식은 같습니다.

  1. 입력 특성의 가중치 합을 계산
  2. 선형 회귀 값을 출력하는 것이 아닌 결괏값으로 로지스틱을 출력

<식 4-13 로지스틱 회귀 모델의 확률 추정(벡터 표현식)>

p^=hθ(θ)=σ(θTx)\hat p = h_\theta (\boldsymbol \theta) = \sigma(\theta^T \boldsymbol x)

여기서 로지스틱 σ()\sigma(·)은 [0,1] 사이의 값을 출력하는 시그모이드 함수(sigmoid function)입니다.


<식 4-14 로지스틱 함수>

σ(t)=11+exp(t)\sigma(t) = \frac{1}{1+exp(-t)}

이는 샘플 x\boldsymbol x가 양성 클래스에 속할 확률을 추정하여 예측 y^\hat y를 추정하게 합니다.

위 그래프를 보면 0.5를 기준으로 판단할 수 있습니다.


6-2. cost function

훈련의 목적은 양성 샘플(y=1y=1)에 댛서는 높은 확률을 추정하고 음성 샘플(y=0y=0)에 대해서는 낮은 확률을 추정하는 모델의 파라미터 벡터 θ\theta를 찾는 것입니다.

여기서 비용 함수로 크로스 엔트로피 함수를 사용합니다.


<식 4-17 로지스틱 회귀의 비용 함수(로그 손실)>

J(θ)=1mΣi=1m[y(i)log(p^(i))+(1y(1))log(1p^(i))]J(\theta) = - \frac{1}{m} \Sigma^m_{i=1}[y^{(i)}log(\hat p^{(i)})+(1-y^{(1)})log(1-\hat p^{(i)})]

이 비용 함수는 t가 0에 가까워지면 log(t)-log(t)가 매우 커집니다. 그러므로 모델이 양성 샘플을 0에 가까운 확률로 추정하면 비용이 크게 증가합니다.

또한, 음성 샘플을 1에 가까운 확률로 추정해도 비용이 증가합니다.

반면에 t가 1에 가까우면 log(t)-log(t)는 0에 가까워집니다.

따라서 기대한 대로 음성 샘플의 확률을 0에 가깝게 추정하거나 양성 샘플의 확률을 1에 가깝게 추정하면 비용은 0에 가까워집니다.

해당 비용함수는 볼록 함수이므로 경사 하강법을 사용하면 global minima를 찾는 것을 보장합니다.

이 비용 함수의 jj번째 모델 파라미터 θj\theta_j에 대해 편미분을 하면 <식 4-18>과 같습니다.


<식 4-18 로지스틱 비용 함수의 편도함수>

θjJ(θ)=1mΣi=1m(σ(θTx(i))y(i))xj(i)\frac{\partial}{\partial \theta_j} J(\theta) = \frac{1}{m} \Sigma^m_{i=1}(\sigma(\theta^T x^{(i)})-y^{(i)})x^{(i)}_j

각 샘플에 대해 예측 오차를 계산하고, jj번째 특성값을 곱해서 모든 훈련 샘플에 대해 평균을 냅니다.


6-3. Sotfmax Regression

로지스틱 회귀 모델은 기본적으로 이진 분류를 도와주는 모델입니다.

그렇다면 class가 여러 개인 다중 분류 문제에선 어떤 모델을 쓸 수 있을까요?

그게 이제 마지막 파트인 소프트맥스 회귀(softmax regression) 또는 다항 로지스틱 회귀(multinomial logistic regression)이라고 합니다.

개념 흐름을 정리해보자면

  • 샘플 x\boldsymbol x가 주어지면 소프트맥스 회귀 모델이 각 클래스 k에 대한 점수 sk(x)s_k(\boldsymbol x)를 계산함
  • 그 점수에 소프트맥스 함수를 적용하여 각 클래스의 확률 추정

이 방식은 앞서 다룬 선형 회귀 예측 식과 비슷합니다.


<식 4-19 클래스 k에 대한 소프트맥스 점수>

sk(x)=(θ(k))Txs_k(\boldsymbol x) = (\boldsymbol \theta^{(k)})^T \boldsymbol x

각 클래스마다 자신만의 파라미터 벡터 θ(k)\boldsymbol \theta^{(k)}가 있으며, 이 벡터들은 파라미터 행렬 Θ\boldsymbol \Theta에 각 행으로 저장됩니다.

샘플 x\boldsymbol x에 대해 각 클래스의 점수가 계산되면 소프트맥스 함수를 통과시켜 클래스 k에 속할 확률 p^k\hat p_k를 추정합니다.

이 함수는 각 점수에 지수 함수를 적용시켜서 정규화합니다.

여기서 의미하는 정규화는 로그를 취하면서 갖는 값들을 정규화되었다고 표현한 것 같으며, 이 방식을 로그-오즈 또는 로짓이라 합니다.


<식 4-20 소프트맥스 함수>

p^k=σ(s(x))k=exp(sk(x)Σj=1kexp(sj(x))\hat p_k = \sigma(\boldsymbol s(\boldsymbol x))_k = \frac{exp(s_k(\boldsymbol x)}{\Sigma^k_{j=1} exp(s_j(\boldsymbol x))}

  • k는 클래스 수
  • s(x)s(\boldsymbol x)는 샘플 x\boldsymbol x에 대한 각 클래스의 점수를 담은 벡터
  • σ(s(x))k\sigma(\boldsymbol s(\boldsymbol x))_k는 샘플 \boldsymbol x$에 대한 각 크랠스의 점수가 주어졌을 때 이 샘플이 클래스 k에 속할 추정 확률

로지스틱 회귀 분류와 마찬가지로 소프트맥스 회귀 분류도 추정 확률이 가장 높은 클래스를 선택합니다.


<식 4-21 소프트맥스 회귀 분류기의 예측>

y^=argmax σ(s(x))k=argmax sk(x)=argmax ((θ(k))Tx)\hat y = argmax \ \sigma(\boldsymbol s(\boldsymbol x))_k = argmax \ s_k(\boldsymbol x) = argmax \ ((\theta^{(k)})^T \boldsymbol x)

argmax란 함수를 최대화하는 변수의 값을 변환해주는 연산을 의미합니다.

이 식에서는 추정 확률 σ(s(x))k\sigma(\boldsymbol s(\boldsymbol x))_k가 최대인 k값을 반환하게 됩니다.

모델이 이제 확률을 추정하고, 예측을 어떻게 하는지 알았으므로 훈련하는 방법을 살펴보겠ㅅ브니다.

모델이 label에 대해서 높은 확률을 추정하도록 만드는 것이 목적이며, 크로스 엔트로피 같은 비용 함수를 최소화하는 것은 label에 대해 낮은 확률을 예측하는 모델을 억제하므로 이 목적과 맞습니다.

따라서 크로스 엔트로피는 추정된 class의 확률이 label과 잘 맞는지 측정하는 용도로 사용됩니다.


<식 4-22 크로스 엔트로피 비용 함수>

J(Θ)=1mΣi=1my(i)log(p^k(i))J(\Theta) = - \frac{1}{m} \Sigma^m_{i=1}y^{(i)}log(\hat p^{(i)}_k)

  • 이 식에서 yk(i)y^{(i)}_k는 i번째 샘플이 클래스 k에 속할 타깃 확률입니다.

여기서 k=2k=2가 되는 경우는 앞에서 보았던 이진 분류를 수행한 로지스틱 회귀와 동일해집니다.

여기서도 각 클래스에 대한 gradient vector를 계산할 수 있으므로 비용 함수를 최소화하기 위한 파라미터 행렬 Θ\Theta를 찾기 위해 경사 하강법을 사용할 수 있습니다.


여기까지 머신러닝 모델을 훈련 시키는 알고리즘과 그 알고리즘을 작동하는 방식 등을 살펴보았습니다.

어떤 task에 따라 어떤 모델을 선택해야하는지, 어떤 성능 지표를 선택하여 평가할 것인지 모델을 다룰 수 있는 다양한 하이퍼파라미터 등을 살펴보며 작동 원리를 공부했습니다.

내용에 대해 잘못된 부분 있으면 댓글로 지적 부탁드립니다.

감사합니다.

profile
Tistory로 이사갔어요

0개의 댓글