2 minute read

정규방정식과 경사 하강법

비용 함수

비용 함수는 선형 모델의 예측과 훈련 데이터 사이의 거리를 뜻하므로 이것을 최소화한다면 모델이 더 좋은 성늘을 낸다는 것을 뜻한다.

선형 회귀 모델을 예로 들면 선형 회귀에서는 주로 평균 제곱 오차(Mean squared error)를 비용 함수로 사용한다.

정규 방정식

선형회귀에서 각각의 y값을

\(y^{1},y^{2},...,y^{i}\) 라 하고 이 직선을

\[\hat{y}=\theta_0 x_0+\theta_1 x_1+\theta_2 x_2+...+\theta_n x_n =\theta \cdot x(x_0=1 가상의 특성) \\ 모델 \ 파라미터:\theta \\ 특성의 \ 개수 : x_1,...,x_n \\ bias : \theta_0 \\ Weight:\theta_1,...,\theta_n\]

라 했을 때 MSE는

\[MSE(X,h_\theta)=\frac{1}{m}\sum_{i=1}^m(\theta^Tx^{(i)}-y^{(i)})^2 \\ 샘플의 개수 :m\]

로 볼 수 있다.

이 오차가 가장 작아지는 점은 위 함수를 미분했을 때 0이 되는 지점임은 분명하다

\[MSE=\frac{1}{m}(X\hat{\theta}-y)^2 \\ \\ X=\begin{bmatrix}x_0^{(1)}&x_1^{(1)}&...& x_n^{(1)}\\ . \\ . \\ . \\ x_0^{(m)}&x_1^{(m)}&...& x_n^{(m)}\end{bmatrix} \\ m*n행렬 \\ 1행 : 1번째 \ 샘플의 \ n개의 \ 특성 \\ m행 : m번째 \ 샘플의 \ n개의 \ 특성 \\ \\ \hat{\theta}=\begin{bmatrix}\theta_0\\ . \\ . \\ . \\ \theta_n\end{bmatrix} \\ 1*n행렬\\ \\ y=\begin{bmatrix}y^{1}&...&y^{m}\end{bmatrix}\\ m*1행렬\]

미분하면

\[MSE=\frac{1}{m}(X\hat{\theta}-y)^2 \\ 0= \frac{2}{m}X^T(X\hat{\theta}-y)\\ Transpose를 \ 해 \ 주어야 \ 곱샘이 \ 가능 \\ \\ X^TX\hat{\theta}=X^Ty\\ \hat{\theta}= (X^TX)^{-1}X^Ty\\ 정규방정식\]

정규방정식이 나오고 이 정규방정식을 사용하면 바로 비용함수가 가장 작은 점을 구할 수 있는데 왜 경사 하강법을 사용할까?

이는 특성의 수가 늘수록 행렬 연산에 들어가는 비용이 경사하강법보다 훨씬 증가하기 때문이다.

경사 하강법

경사 하강법의 기본 아이디어는 비용 함수를 최소화하기 위해 반복해서 파라미터를 조정해가는 것이다.

경사하강법1

비용 함수에서 임의의 초기값으로부터 시작하여 조금씩 비용함수가 감소하는 방향으로 진행하여 최솟값에 수렴할 때 까지 점진적으로 향상시키는 방식이다.

경사하강법을 구현하기 위해서는 모델 파라미터의 그레디언트를 구해야 한다.

MSE를 예시로 배치 경사 하강법을 구현해보면

\[MSE(X,h_\theta)=\frac{1}{m}\sum_{i=1}^m(\theta^Tx^{(i)}-y^{(i)})^2\\ 각 \ 파라미터에 \ 대하여 \ 편도함수 \ 구하기 \\ \\ 파라미터\theta_j에서의 편도함수: \frac{\partial}{\partial\theta_j}MSE(\theta) =\frac{2}{m}\sum_{i=1}^m(\theta^Tx^{(i)}-y{(i)})x_j^{(i)}\\ \\ \nabla_\theta \ MSE(\theta)= \begin{bmatrix} \frac{\partial}{\partial\theta_0}MSE(\theta)\\ \frac{\partial}{\partial\theta_1}MSE(\theta) \\.\\.\\.\\ \frac{\partial}{\partial\theta_n}MSE(\theta)\end{bmatrix} =\frac{2}{m}X^T(X\theta-y)\\ \\ 그래디언트 \ 벡터\nabla_\theta \ MSE(\theta) 는 \ 모든 \ 파라이터의 \ 편도함수값이 \ 들어있다\\ \\ \\ 경사 \ 하강법의 \ 스텝\\ \theta^{next \ step}= \theta-\eta\nabla_\theta MSE(\theta)\\ 학습률:\eta\]

아래로 내려가야 하기 때문에 학습율을 곱해서 빼 주면 다음 스텝 값을 구할 수 있다.

이 학습률이 너무 크거나 작다면 문제점이 생길 수 있다.

경사하강법문제

너무 작다면 최솟값까지 너무 오래 걸릴 것이고 너무 크다면 다음 스텝이 오히려 이전보다 더 좋지 못한 결과를 담을 수도 있다.

경사하강법2

MSE는 convex function이므로 하나의 전역 최소값만 갖지만

위의 그림처럼 MSE가 아닌 복잡하고 모델 파라미터가 많은 비용함수의 경우 지역 최솟값으로 빠져버리거나 기울기가 0인 부분에서 멈춰버릴 수도 있다.

경사하강법3

또한 특성의 스케일이 맞춰지지 않은 경우 더 시간이 오래 걸린다.

왼쪽의 그림은 비용이 높은 구간에서는 더 높은 학습률이 적용된 모습이지만 오른쪽은 비효율적으로 감소하는 모습이다.

경사 하강법

배치 경사 하강법

Batch Stochastic Gradient Descent

매 스텝에서 훈련 데이터 전체를 사용하는 것 훈련 세트가 커질수록 느려진다.

확률적 경사 하강법

무작위 한 개 샘플에 대한 그래디언트를 계산하므로 큰 훈련세트도 빨리 할 수 있지만 훨씬 불안정해진다.

경사하강법4

Stochastic Gradient Descent

불안정하므로 최솟값에 안착하지 못하지만 또한 지역 최솟값을 건너뛰어버리는 장점도 가지고 있다.

최솟값에 안착하기 위해 학습률을 점차 줄이는 방식을 사용하는데 너무 빨리 줄인다면 지역 최솟값에 갇혀버릴 수 있고 너무 천천히 줄어들면 최솟값을 찾지 못하고 맴돌수도 있다.

훈련 샘플이 IID(Independent and Identically Distributed)되어있어야만 전역 최적값을 향해 진행된다고 보장할 수 있다.

샘플 간 독립적이고(Independent) 동일 분포(Identically Distributed)를 따라야 한다.

확률적 경사 하강법에서 한 개의 샘플만 사용하기 때문에 만약 차례대로 샘플을 섞지 안은 채로 사용하면 한 레이블에 최적화되고 그 다음 레이블에 최적화되는 식으로 진행되는데 이것을 동일 분포라고 할 수 없을 것이다.

그러므로 훈련하는 동안에 다음 에포크가 실행될 때에는 샘플이 섞이거나 랜덤하게 선택되야 한다.

미니배치 경사 하강법

Mini-Batch Stochastic Gradient Descent

전체 훈련 세트 중에서 임의의 작은 샘플 세트(미니배치)에 대해 그레디언트를 계산한다.

미니배치의 크기를 늘리면 SGD보다 덜 불규칙하게 움직인다.

선형 회귀를 사용한 알고리즘 비교

선형 회귀를 사용한 알고리즘 비교

참고

박해선,혼자 공부하는 머신러닝, 한빛미디어, 2021,199~215p

Aurelien Geron,hands-on Machine Learning with Scikit-Learn, Keras & TensorFlow,한빛미디어,2020,164p~176p