선형 회귀 (Linear Regression)
회귀 문제는 숫자 값을 예측하려고 할 때 발생한다. 일반적인 예로는 가격 예측(주택, 주식 등), 병원에서의 환자 체류 기간 예측, 수요 예측(소매 판매) 등이 있다.
구체적인 예를 들어, 주택의 면적과 나이를 기반으로 주택 가격을 추정하고자 한다고 가정해 보자. 주택 가격을 예측하기 위한 모델을 개발하려면 각 주택의 판매 가격, 면적, 나이 등을 포함한 데이터(훈련 데이터셋)를 확보해야 한다. 여기서 하나의 판매에 해당하는 데이터가 포함된 각 행은 샘플(data point, instance, example)이라고 한다. 우리가 예측하려는 것(가격)은 레이블(label, target)이라고 하며, 예측이 기반되는 변수(나이와 면적)는 특성(features, covariates)이라고 한다.
정의
선형 회귀란 알려진 다른 관련 데이터 값을 사용하여 알 수 없는 데이터의 값을 예측하는 데이터 분석 기법이며, 회귀 문제를 해결하기 위한 표준 도구 중에서 가장 간단하고 가장 널리 사용되는 방법이다. 선형 회귀는 몇 가지 간단한 가정에 기반한다.
- 특성 $\mathbf{x}$와 타겟 $y$간의 관계가 대략적으로 선형이라고 가정한다. 즉, 조건부 평균 𝐸[𝑌 ∣ 𝑋 = 𝐱] 이 특성의 가중합으로 표현될 수 있다고 가정한다. 이 가정은 관측 노이즈로 인해 목표 값이 여전히 예상값에서 벗어날 수 있음을 허용한다.
- 노이즈가 잘 동작하며 정규 분포를 따른다. 일반적으로 데이터셋의 샘플 수를 나타내기 위해 $n$을 사용한다. 샘플과 목표를 열거하기 위해 위첨자를 사용하고, 좌표를 인덱스하기 위해 아래첨자를 사용한다. 더 구체적으로, $\mathbf{x}^{(i)}$는 $i$번째 샘플을 나타내며, $\mathbf{x}_{j}^{(i)}$는 해당 샘플의 $j$번째 좌표를 나타낸다.
모델
모든 솔루션의 핵심에는 특징이 타겟의 추정값으로 변환되는 방식을 설명하는 모델이 있다. 선형성의 가정은 타겟(가격)의 기대값이 특징(면적과 나이)의 가중합으로 표현될 수 있음을 의미한다.
$$price = w_{area} * area + w_{age} * age + b$$
여기서 $w_{area}$, $w_{age}$는 가중치(weights), $b$는 편향(bias, offset, intercept)이라고 불린다. 가중치는 각 특징이 예측에 미치는 영향을 결정하며, 편향은 모든 특징이 0일 때 추정값의 값을 결정한다. 면적이 0인 경우는 없지만, 편향이 필요한 이유는 모든 선형 함수들을 표현할 수 있게 해주기 때문이다. 주어진 데이터셋에서 우리의 목표는 평균적으로 모델의 예측이 데이터에서 관찰된 실제 가격에 최대한 가깝게 맞춰지도록 가중치 $\mathbf{w}$와 편향 $b$를 선택하는 것이다.
특징이 몇 개 안 되는 데이터셋에 집중하는 것이 일반적인 분야에서는 모델을 위의 식과 같은 장황한 형태로 명시하는 것이 흔하다. 그러나 기계 학습에서는 보통 고차원 데이터셋을 다루기 때문에 더 간결한 선형 대수 표기법을 사용하는 것이 편리하다. 입력이 $d$개의 특징으로 구성될 때, 각 특징에 인덱스를 부여하고(1부터 $d$까지) 예측 $\hat{y}$를 다음과 같이 표현할 수 있다.
$$\hat{y} = w_{1}x_{1} + ... + w_{d}x_{d} + b$$
특성 벡터를 $\textbf{x}\in{\mathbb{R}^{d}}$, 가중치 벡터를 $\textbf{w}\in{\mathbb{R}^{d}} $라고 하면, 모델을 간결하게 벡터 $\mathbf{x}$와 $\mathbf{w}$ 간의 내적을 통해 표현할 수 있다.
$$\hat{y} = \mathbf{w}^{\top}\mathbf{x} + b$$
위의 식에서 벡터 $\mathbf{x}$는 단일 샘플의 특징을 나타낸다. 우리는 전체 데이터셋의 모든 특징을 디자인 행렬 $\textbf{X}\in{\mathbb{R}^{n\times{d}}}$를 통해 참조하는 것이 편리할 때가 많다. 여기서 $\mathbf{X}$는 각 샘플에 대해 한 행, 각 특징에 대해 한 열을 포함한다. 모든 특성 $\mathbf{X}$에 대해 예측 $\hat{\mathbf{y}}\in{\mathbb{R}^{n}}$ 는 행렬-벡터 곱으로 표현할 수 있다.
$$\hat{\mathbf{y}} = \mathbf{X}\mathbf{w} + b$$
이처럼 훈련 데이터셋의 특성 $\mathbf{X}$와 이에 해당되는 레이블 $\mathbf{y}$가 주어졌을 때, 선형 회귀의 목표는 새로운 데이터 샘플의 레이블을 최소 오차로 예측할 수 있도록 가중치 벡터 $\mathbf{w}$와 편향 $b$를 찾는 것이다.
$\mathbf{X}$가 주어졌을 때, $\mathbf{y}$를 예측하기 위한 최적의 모델이 선형적이라고 믿더라도 모든 $i$ ($1\leq{i}\leq{n}$)에 대해 $y^{(i)}$가 정확히 $\textbf{w}^{\top}\textbf{x}^{(i)}$와 일치하는 $n$개 샘플의 실제 데이터셋을 찾는 것은 어렵다. 예를 들어, 특성 $\textbf{X}$와 레이블 $\textbf{y}$를 관찰하기 위해 사용하는 도구에 관계없이 측정 오차가 있을 수 있다. 따라서 기본적인 관계가 선형적이라고 확신할 때에도 이러한 오류를 고려하기 위해 노이즈 항을 포함해야 한다. 최적의 모델 파라미터 $\mathbf{w}$와 $b$를 찾기 전에 두 가지가 더 필요하다.
- 주어진 모델의 품질을 측정할 방법 (손실 함수)
- 모델의 품질을 향상시키기 위한 업데이트 절차
손실 함수 (Loss Function)
손실 함수는 모델의 예측값과 실제 정답 사이의 차이를 수치화하여 모델의 성능을 평가하고 개선 방향을 제시하는 역할을 한다. 회귀 문제에서 가장 일반적인 손실 함수는 제곱 오차(squared error)이다. 예를 들어, 예제 $i$에 대한 예측값이 $\hat{y}^{(i)}$이고 해당 실제 레이블이 $y^{(i)}$인 경우, 제곱 오차는 다음과 같다 ($\frac{1}{2}$은 큰 차이를 만들지 않지만 손실 함수를 미분할 때 편리하다).
$$l^{(i)}(\textbf{w}, b) = \frac{1}{2}(\hat{y}^{(i)} - y^{i})^{2}$$
다음 그림은 일차원 입력이 있는 회귀 모델의 적합도를 시각화한 것이다.
제곱 형태로 되어 있기 때문에 예측값 $\hat{y}$와 타겟 $y$ 차이가 클수록 손실이 커진다. 큰 손실을 방지하게 해주지만 이상치에 민감하게 반응할 수도 있다는 단점도 존재한다.
모델의 전체적인 품질을 측정하려면 평균 제곱 오차(Mean Squared Error; MSE)를 사용한다.
$$L(\textbf{w}, b) = \frac{1}{n} \sum_{i = 1}^{n} l^{(i)}(\textbf{w}, b)$$
모델을 훈련할 때 우리의 목표는 모든 훈련 샘플에서 총 손실을 최소화하는 파라미터 $\textbf{w}$와 $b$를 찾는 것이다.
$$\textbf{w}^{*}, b^{*} = \underset{\textbf{w}, b}{argmin} L(\textbf{w}, b)$$
미니배치 확률적 경사 하강법 (Minibatch Stochastic Gradient Descent)
대부분의 딥러닝 모델을 최적화하기 위한 주요 기술은 손실을 줄이기 위해 파라미터를 업데이트하는 것인데, 이 알고리즘을 경사 하강법(Gradient Descent)이라고 한다.
손실을 줄이는 데에는 여러가지 방법이 있는데, 그중 확률적 경사 하강법(Stochastic Gradient Descent; SGD)은 대규모 데이터셋을 다룰 때 모델을 훈련하는 데 자주 사용되는 최적화 기법으로서, 하나의 샘플만 고려하고 각 관찰에 기반하여 업데이트 단계를 수행하는 알고리즘이다. SGD는 큰 데이터셋에 장점이 있지만 계산적 및 통계적 단점이 있다.
미니배치 확률적 경사 하강법(Minibatch Stochastic Descent)으로 이러한 문제를 해결할 수 있다. 가장 기본적인 형태로, 각 반복 $t$에서 먼저 $|B|$개의 훈련 샘플들로 이루어진 미니배치 $B_{t}$를 무작위로 샘플링한다. 그런 다음, 미니배치의 평균 손실에 대한 모델 파라미터에 대한 미분(경사)을 계산한다. 마지막으로, 경사에 미리 정해진 값 $\eta$를 곱하고, 그 결과 항을 현재 파라미터 값에서 뺀다. 이는 다음과 같이 표현할 수 있다.
$$(\textbf{w}, b) \leftarrow (\textbf{w}, b) - \frac{\eta}{|B|} \sum_{i\in{B_{i}}}\partial_{(\textbf{w}, b)}l^{(i)}(\textbf{w}, b)$$
요약하자면 미니배치 SGD는 다음과 같이 진행된다.
- 랜덤한 값으로 모델 파라미터를 초기화한다.
- 데이터를 무작위로 샘플링하여 미니배치를 추출하고, 파라미터를 음의 경사 방향으로 업데이트한다.
확률적 경사 하강법에 대한 더 자세한 내용은 여기서 찾아볼 수 있다.