다변수 선형 회귀 모델과 경사 하강법
단순 선형 회귀 vs. 다변수 선형 회귀
이전 포스팅에서는 단순 선형 회귀 모델을 사용하여 하나의 설명 변수를 기반으로 목표 변수를 예측하는 방법을 살펴보았다. 그러나 실제 문제에서는 여러 개의 설명 변수를 사용하여 목표 변수를 예측해야 하는 경우가 많다. 이러한 경우 다변수 선형 회귀 모델을 사용한다.
다변수 선형 회귀 모델은 단순 선형 회귀 모델을 확장하여 여러 개의 설명 변수를 포함한다. 모델은 다음과 같이 표현된다.
y = w[0] + w[1] * x[1] + w[2] * x[2] + ... + w[m] * x[m]
여기서 y는 목표 변수, x[1], x[2], ..., x[m]은 설명 변수, w[0], w[1], w[2], ..., w[m]은 가중치이다.
SSE 일반화
단순 선형 회귀 모델에서 사용했던 제곱 오차 합 (SSE)은 다변수 선형 회귀 모델에도 적용할 수 있다. SSE는 다음과 같이 일반화된다.
SSE = 1/2 * Σ(t[i] - M[w](d[i]))^2
여기서 t[i]는 i번째 훈련 샘플의 실제 목표 변수 값이고, Mw는 i번째 훈련 샘플에 대한 모델의 예측값이다.
경사 하강법: 최적의 가중치를 찾는 방법
단순 선형 회귀 모델에서는 오류 표면이 볼록 함수이기 때문에 최소 제곱 최적화를 통해 최적의 가중치를 쉽게 찾을 수 있었다. 그러나 다변수 선형 회귀 모델에서는 변수의 수가 증가함에 따라 오류 표면이 복잡해지고, local minima 문제가 발생하여 최소 제곱 최적화만으로는 최적의 가중치를 찾기 어려울 수 있다.
error surface |
이러한 문제를 해결하기 위해 경사 하강법이라는 알고리즘을 사용한다. 경사 하강법은 오류 표면의 기울기를 따라 이동하면서 오류를 최소화하는 가중치를 찾는 방법이다.
경사 하강법의 작동 방식
- 임의의 가중치 값으로 시작한다.
- 현재 가중치에서 오류 표면의 기울기를 계산한다.
- 기울기의 반대 방향으로 가중치를 업데이트한다.
- 오류가 충분히 작아지거나, 더 이상 감소하지 않을 때까지 2-3단계를 반복한다.
경사 하강법 알고리즘
1. w = 임의의 가중치 값으로 초기화
2. repeat
3. for each w[j] in w:
4. w[j] = w[j] - α * ∂L[2]/∂w[j]
5. until convergence
여기서 α는 학습률 (learning rate)로, 가중치 업데이트의 크기를 조절하는 역할을 한다. 이 때 학습률이 너무 크면 최적의 가중치를 찾지 못하고 오류 표면에서 발산할 수 있고, 너무 작으면 학습 속도가 느려진다. 적절한 학습률 값은 문제에 따라 다르며, 일반적으로 실험을 통해 결정한다.
오류 델타 함수
error delta function |
학습률에 곱해진 편미분 식은 다른 말로 오류 델타 함수라고 지칭한다. 오류 델타 함수는 가중치 업데이트 방향을 결정하는 함수이다. 오류 델타 함수는 오류 표면의 기울기를 계산하여 기울기의 반대 방향을 가리킨다. 기울기가 양수라면 가중치를 줄이는 방향으로 업데이트하고, 기울기가 음수라면 가중치를 높이는 방향으로 업데이트하도록 유도한다.
![]() |
equation transformation |
배치 경사 하강법
배치 경사 하강법은 훈련 샘플을 일정한 단위의 묶음으로 만들고, 그에 대한 오류를 계산하여 가중치를 업데이트하는 방법이다. 일반 경사 하강법의 경우, 데이터 하나마다 반복해야 하기 때문에 빅데이터를 다룰 때 학습 시간이 오래걸린다는 단점이 있다. 배치 경사 하강법은 묶음에 해당하는 데이터들의 squared error를 더하여 가중치를 한번만 업데이트하기에 효율적이다.
지난 시간 다뤘던 임대 가격 예측 모델에 feature를 확대한 예시를 통해 자세히 알아보자.
data set |
일단 ENERGY RATING에 대해서는 숫자형이 아니기에 생략하고 나머지 데이터로 다뤄보겠다.
ID = d[0] = 1, SIZE = d[1], FLOOR = d[2], BROADBAND RATE = d[3]
Gradient Descent Iteration 1 |
Gradient Descent Iteration 2 |
위와 같이 초기 가중치를 설정하고, 이를 이용해 error를 계산할 수 있다. 앞서 오류 델타 함수는 error와 데이터 값의 곱으로 표현할 수 있다고 하였으므로, 함수값을 구할 수 있다. 이 예제에서 batch size는 10이므로, 이를 다 더하여 가중치를 업데이트하는데 이용할 수 있다.
이때 경사 하강법의 속도를 높이기 위해 초기 가중치를 적절히 설정하는 것이 중요하다. 일반적으로 설명 변수 값을 정규화하여 초기 가중치를 [-0.2, 0.2] 범위에서 균등하게 선택하는 것이 효과적이다. 정규화는 squared error가 너무 커지는 것을 방지하는 데에도 도움이 된다.
범주형 설명 변수 처리
앞선 예시에서 ENERGY RATING는 A, B, C로 표현된 변수였다. 이러한 범주형 설명 변수는 선형 회귀 모델에서 어떻게 다뤄야 할까? 이에 대한 답은 one-hot encoding에 있다. one-hot encoding은 각 범주에 대해 새로운 이진 변수를 생성하는 방법이다.
One hot encoding |
비선형 관계 모델링
설명 변수와 목표 변수 간의 관계가 비선형일 경우, basis function을 사용하여 비선형 관계를 모델링할 수 있다. basis function은 입력 값을 변환하여 비선형 관계를 선형 모델로 표현할 수 있도록 한다.
basis function |
예를들어, 강수량과 잔디의 성장과의 관계를 다음과 같이 나타낼 수 있다.
polynomial relationship |
basis function에 의해 non-linear할 것 같지만, 모델 입장에서는 weight의 관점에서 보기 때문에 여전히 linear하다.
마치며
이번 포스팅에서는 다변수 선형 회귀 모델과 경사 하강법에 대해 알아보았다. 경사 하강법은 다변수 선형 회귀 모델의 최적 가중치를 찾는 데 유용하게 사용되는 알고리즘이다. 다음 시간에는 최근의 인공지능을 있게 한 Neural Networks에 대해 알아보겠다.