목차
0. 학습 목표
1. 선형 회귀
2. 정규 방정식
3. 경사하강법
4. 로지스틱 회귀
0. 학습 목표
최적화(optimization)란, loss 함수(손실함수, 비용함수)를 최소화하는 parameter를 구하는 과정입니다. 딥러닝 네트워크에서는 예측값과 실제값을 loss 함수를 통해 비교하며 예측값과 실제값이 가까워지도록, 즉 loss 함수가 최소가 되도록 parameter를 업데이트합니다.
가장 간단한 모델 중 하나인 선형 회귀로부터
- 직접 계산할 수 있는 공식을 사용하여 훈련 세트에 대해 loss 함수를 최소화하는 parameter를 해석적으로 구합니다.
- 반복적인 최적화 방식-경사 하강법(gradient descent)-을 사용하여 parameter를 조금씩 바꾸면서 loss 함수를 최소화시키는 과정을 살펴봅니다.
1. 선형 회귀(Linear Regression)
삶의 만족도와 1인당 GDP의 관계는 다음과 같은 선형모형으로 가정될 수 있습니다.
$$Satisfaction = \beta_0 + \beta_1 \times GDP+\epsilon$$
$$\hat{y} = \beta_0 + \beta_1 X$$
- $\hat{y}$ : 예측값
- $\beta_0$ : $y$절편(intercept), 상수항(constant, bias)
- $\beta_1$ : 기울기(slope)
여기서 parameter는 $\beta_0, \beta_1$이며 최적의 parameter를 찾는다는 것은 Y대 X의 산점도에 있는 점들을 가장 잘 표현하는 직선을 찾는 것과 동일합니다. 즉 Y와 X의 연관성을 가장 잘 나타내는 직선$\hat{y}$을 찾는다면 어떤 X에 대해서라도 대응되는 예측값을 구해보는 것이 가능합니다.
회귀식을 퍼셉트론 모델에 대응시켜본다면 위와 같습니다. 모형은 input에 weight가 곱해지고 bias가 더해져서 나온 예측값($\hat{y}$)과 실제값($y$)의 오차를 줄여나가며 실제값에 더욱 가깝게 예측할 수 있도록하는 방식으로 학습됩니다. 이 때 예측값과 실제값의 오차를 MSE(Mean Squared Error, 평균제곱오차)를 이용해 계산합니다.
$$MSE = \frac{1}{n} \sum_{i=1}^n (y_i-\hat{y_i})^2, \quad i=1,2,...,n$$
(* 오차($y_i - \hat{y_i}$)의 제곱은 항상 양수이므로 데이터의 수가 많아질수록 오차제곱합은 커지게됩니다. 오차제곱합만으로는 실제 오차가 커서 값이 커지는 것인지 데이터가 많아서 커지는 것인지 알 수 없으므로 데이터의 수만큼 나눠주는 것입니다.)
2. 정규방정식(Normal Equation)
정규방정식은 선형 회귀상에서 알지 못하는 parameter $\beta$를 구할 수 있는 공식입니다.
$i$번째 예측값에 대하여 $\hat{y_i} = \beta_0 + \beta_1 x_i$라고 표현할 수 있다면 대응되는 실제값은 예측값에 오차를 더한 값인 $y_i = \beta_0 + \beta_1 x_i + \epsilon_i$가 됩니다. 이 때 오차는 산점도의 실제값($y_i$)에서 직선 위의 예측값($\hat{y_i}$)까지의 수직 거리로 오차에 대해서 재표현한다면 다음과 같습니다.
$$\epsilon_i = y_i - \hat{y_i} = y_i - \beta_0 - \beta_1 x_i, \quad i=1,2,...,n$$
목표는 오차를 최소화하는 직선을 찾는 것으로 직선은 $y$절편과 기울기가 있다면 구할 수 있습니다. 다시 말해 목표는 오차를 최소화하는 parameter $\beta_0, \beta_1$를 찾는 것이 되겠네요.
통상적으로 최소제곱법(least squares method)를 이용하여 parameter $\beta_0, \beta_1$을 찾으며, 오차의 제곱합을 최소로 하는 직선의 방정식을 구할 수 있습니다.
$$S(\beta_0, \beta_1) = \sum_{i=1}^n \epsilon_i^2 = \sum_{i=1}^n (y_i - \beta_0 - \beta_1 x_i)^2$$
다음 식이 0이 되도록 풀면 $S(\beta_0, \beta_1) = \sum_{i=1}^n \epsilon_i^2 =0$, $\beta_0, \beta_1$에 대한 연립방정식인 정규방정식을 풀면 오차제곱합을 최소로 하는 parameter에 대한 추정값인 $\hat{\beta_0}, \hat{\beta_1}$을 구할 수 있습니다.
3. 경사 하강법(Gradient Descent)
feature가 다양해질수록 찾아야하는 최적의 parameter는 많아지고 loss 함수도 복잡해지므로 loss 함수를 최소화하기 위해 반복해서 parameter를 조정해가는 최적화 알고리즘인 경사 하강법을 사용할 수 있습니다. 목표는 복잡한 loss 함수에서 지역 최소값(local minimum)에 빠지지 않고 전역 최소값(global minimum)을 찾아가는 것입니다.
일반적으로 최소값을 구할 때, 미분해서 기울기가 0이 되는 지점을 찾습니다. 이와 동일하게, 임의의 초기값에서 시작하여 loss 함수가 감소되는 방향으로 진행하며 loss 함수를 최소화하는 parameter를 찾습니다. 학습 스텝의 크기는 loss 함수의 기울기에 비례하여 parameter가 최소값에 가까워질수록 스텝의 크기가 점진적으로 줄어듭니다. 학습률(learning rate)을 조정함으로 학습 스텝의 크기를 결정할 수 있습니다. 이 때, 학습률이 너무 작으면 최소값을 찾기 위한 시간이 너무 오래 걸리고 학습률이 너무 크면 알고리즘이 발산하거나 진동하여 최소값으로 수렴하지 못할 수 있습니다.
모든 parameter에 대해서 편도함수를 이용해 loss 함수의 기울기를 구하며 $$\frac{\partial }{\partial \beta_j} MSE{(\underline{\beta})} = \frac{2}{n}\sum_{i=1}^n (\underline{\beta}^T \underline{X}^{(i)}-y^{(i)})x_j^{(i)}$$
이 때, 얼마만큼의 $X$를 사용할 것인지에 따라 세 가지 경사 하강법으로 나눌 수 있습니다.
- 배치 경사 하강법(batch gradient descent) : 전체 훈련 세트를 사용하므로 훈련 세트가 아주 클 시에는 매우 느립니다.
- 확률적 경사 하강법(stochastic gradient descent) : 매 반복에서 하나의 샘플만을 사용해 연산합니다.
- 미니배치 경사 하강법(mini-batch gradient descent) : 임의의 작은 샘플 세트(미니 배치)만을 사용해 연산합니다.
확률적 경사 하강법과 미니배치 경사 하강법은 전체 훈련 세트를 사용하는 배치 경사 하강법보다 불규칙하게 수렴하므로 global minimum에 도달하지 못할 수 있습니다. 따라서, 처음에는 학습률을 크게 해서 local minimum에 빠지지 않게 하고 global minimum에 수렴할 수 있도록 학습률을 줄이는 학습 스케줄(learning schedule)을 적절하게 사용해야 합니다.
4. 로지스틱 회귀(Logistic Regression)
로지스틱 회귀는 샘플이 특정 클래스에 속할 확률을 추정하며 분류 task에 사용됩니다.
- 이진 분류
일반적인 회귀 모형 $y=\beta_0 + \beta_1 x_1 + \beta_2 x_2 + \cdots + \beta_n x_n$ 의 좌측항을 확률로 바꾸면 $p=\beta_0 + \beta_1 x_1 + \beta_2 x_2 + \cdots + \beta_n x_n$, 확률값은 0과 1 사이에 존재하는데 우측항이 0과 1 사이에 존재한다는 것을 보장할 수 없기 때문에 다음 식을 취해줍니다. 이는 통상적으로 알고 있는 sigmoid 함수와 같습니다.
$$p = \frac{1}{1+e^{-(\beta_0 + \beta_1 x_1 + \beta_2 x_2 + \cdots + \beta_n x_n)}}$$
$exp$안의 $x$에 대해서 $x<0$ 이면 $sigmoid(x)<0.5$이고, $x \geq 0$이면 $sigmoid(x) \geq 0.5$ 이므로 로지스틱 회귀 모델은 $\underline{\beta}^T \underline{X}$가 양수일 때 1이라고 예측하고 음수일 때 0이라고 예측합니다.
$$\hat{y} = \left\{\begin{matrix}
0, \quad \hat{p}<0.5\\1, \quad \hat{p} \geq 0.5
\end{matrix}\right.$$
오차를 계산하는 loss 함수로는 Log Loss를 사용합니다. 음의 로그를 취하여 확률이 1일 때는 $-log(1.0)=0$, 확률이 0.6일 때는 $-log(0.6)=0.5$ 처럼 확률이 낮을 때 값이 커지도록 합니다. Log Loss를 하나의 식으로 쓰면 다음과 같습니다.
$$J(\underline{\beta}) = - \frac{1}{n} \sum_{i=1} ^n [y_i log(\hat{p}_i) + (1-y_i)log(1-\hat{p}_i)]$$
Kovi는 SSDC(Samsung Software Developer Community)를 기반으로 만들어진 커뮤니티입니다. ML, DL, Computer Vision, Robotics에 관심 있고 열정 있는 사람들이 모여 함께 활동 중입니다.
Kovi Instagram : https://www.instagram.com/kovi.or.kr/
Kovi SSDC : https://software.devcommunities.net/community/communityDetail/98
이 포스팅은 Kovi 커뮤니티 스터디의 일환으로 작성되었습니다.
posted by. Goyami
'Hands-On Machine Learning' 카테고리의 다른 글
[핸즈온머신러닝] CH8. 차원 축소 (Dimension Reduction) (0) | 2023.01.13 |
---|---|
[핸즈온머신러닝] CH7. 앙상블(Ensemble) 학습 (0) | 2022.12.09 |
[핸즈온머신러닝] CH6. 결정 트리(Decision Tree) (1) | 2022.12.09 |
[핸즈온머신러닝] CH5. 서포트 벡터 머신(Support Vector Machine; SVM) (0) | 2022.12.09 |
[핸즈온머신러닝] CH3. 분류 (Classification) (0) | 2022.11.27 |