Haru's 개발 블로그

[머신러닝] 선형 회귀(Linear Regression) 본문

머신러닝 & 딥러닝/머신러닝

[머신러닝] 선형 회귀(Linear Regression)

Haru_29 2023. 5. 31. 06:07

이번 포스팅에서는 딥 러닝을 이해하기에 필요한 선형 회귀에 알아보도록 하겠습니다.

선형 회귀(Linear Regression)

변수 x의 값은 독립적으로 변할 수 있는 것에 반해, y값은 계속해서 x의 값에 의해서, 종속적으로 결정되므로 x를 독립 변수,y 를 종속 변수라고도 합니다. 선형 회귀는 한 개 이상의 독립 변수 x y의 선형 관계를 모델링합니다. 만약, 독립 변수 x가 1개라면 단순 선형 회귀라고 합니다.

 

1) 단순 선형 회귀

y = wx + b

위의 수식은 단순 선형 회귀의 모습을 보여줍니다. 여기서 독립 변수 x와 곱해지는 값 w를 머신 러닝에서는 가중치(weight), 별도로 더해지는 값b를 편향(bias)이라고 합니다. 그리고 이것은 그래프 상으로 말하면 하나의 직선밖에 표현하지 못합니다.

 

2) 다중 선형 회귀 분석(Multiple Linear Regression Analysis)

위는 여전히 y는 1개이지만 x는 1개가 아니라 여러 개가 되었습니다. 이를 다중 선형 회귀 분석이라고 합니다. 

 

가설(Hypothesis) 세우기

단순 선형 회귀를 가지고 문제를 풀어봅시다. 어떤 학생의 공부 시간에 따라서 다음과 같은 점수를 얻었다는 데이터가 있습니다.

hours(x) score(y)
2 25
3 50
4 42
5 61

여기서 알고있는 데이터로부터 x y의 관계를 유추하고, 이 학생이 6시간, 7시간, 8시간을 공부하였을 때의 성적을 예측해보고 싶습니다.x  y의 관계를 유추하기 위해서 수학적으로 식을 세워보게 되는데 머신 러닝에서는 이러한 식을 가설(Hypothesis) 이라고 합니다. 아래의 H(x)에서 H는 Hypothesis를 의미합니다.

 

따라서 선형 회귀는 주어진 데이터로부터 x y의 관계를 가장 잘 나타내는 직선을 그리는 일을 말합니다. 그리고 어떤 직선인지 결정하는 것은 w b의 값이므로 선형 회귀에서 해야할 일은 결국 적절한 w b를 찾아내는 일이 됩니다.

 

비용 함수(Cost function) : 평균 제곱 오차(MSE)

머신 러닝은 w b를 찾기 위해서 실제값과 가설로부터 얻은 예측값의 오차를 계산하는 식을 세우고, 이 식의 값을 최소화하는 최적의 w b를 찾아냅니다.

이때 실제값과 예측값에 대한 오차에 대한 식을 목적 함수(Objective function) 또는 비용 함수(Cost function) 또는 손실 함수(Loss function) 라고 합니다. 함수의 값을 최소화하거나, 최대화하거나 하는 목적을 가진 함수를 목적 함수(Objective function)라고 합니다. 그리고 값을 최소화하려고 하면 이를 비용 함수(Cost function) 또는 손실 함수(Loss function)라고 합니다.

비용 함수는 단순히 실제값과 예측값에 대한 오차를 표현하면 되는 것이 아니라, 예측값의 오차를 줄이는 일에 최적화 된 식이어야 합니다.

일단, 회귀 문제의 경우에는 주로 평균 제곱 오차(Mean Squared Error, MSE)가 사용됩니다.

예를 들어 위쪽의 예시에서 w의 값 13과 임의의 b의 값 1을 가진 직선을 가진 예측값과 각각 실제값의 오차를 계산하여 표를 만들어보면 아래와 같습니다.

 

hours(x) 2 3 4 5
실제값 25 50 42 61
예측값 27 40 53 66
오차 -2 10 -9 -5

그 다음 모든 오차를 제곱하여 더하는 방법을 사용합니다. 다시 말해 위의 그림에서의 모든 점과 직선 사이의 ↕ 거리를 제곱하고 모두 더합니다. 이를 수식으로 표현하면 아래와 같습니다. 단, 여기서 은 갖고 있는 데이터의 개수를 의미합니다.

이때 데이터의 개수인 n으로 나누면, 오차의 제곱합에 대한 평균을 구할 수 있는데 이를 평균 제곱 오차(Mean Squered Error, MSE)라고 합니다. 수식은 아래와 같습니다.

따라서 예측값과 실제값의 평균 제곱 오차의 값은 52.5입니다.

 

옵티마이저(Optimizer) : 경사하강법(Gradient Descent)

선형 회귀를 포함한 수많은 머신 러닝, 딥 러닝의 학습은 결국 비용 함수를 최소화하는 매개 변수인 w b을 찾기 위한 작업을 수행합니다. 이때 사용되는 알고리즘을 옵티마이저(Optimizer) 또는 최적화 알고리즘이라고 부릅니다. 

그리고 이 옵티마이저를 통해 적절한 w b를 찾아내는 과정을 머신 러닝에서 훈련(training) 또는 학습(learning)이라고 부릅니다. 여기서는 가장 기본적인 옵티마이저 알고리즘인 경사 하강법(Gradient Descent)에 대해서 배웁니다. 

경사 하강법을 이해하기 위해서 cost와 기울기 w와의 관계를 이해해보겠습니다. w는 머신 러닝 용어로는 가중치라고 불리지만, 직선의 방정식 관점에서 보면 직선의 기울기를 의미하고 있습니다. 아래의 그래프는 기울기 w가 지나치게 높거나, 낮을 때 어떻게 오차가 커지는 모습을 보여줍니다. 

위의 그림에서 주황색선은 기울기 w가 20일 때, 초록색선은 기울기 w가 1일 때를 보여줍니다. ↕는 각 점에서의 실제값과 두 직선의 예측값과의 오차를 보여줍니다. 이는 앞에서 예측한 w가 13보다 큰 오차값을 보여줍니다. 즉, 기울기가 지나치게 크면 실제값과 예측값의 오차가 커지고, 기울기가 지나치게 작아도 실제값과 예측값의 오차가 커집니다. 그리고 b도 마찬가지로 지나치게 작거나 커도 실제값과 예측값의 오차가 커집니다.

기울기 w가 무한대로 커지면 커질 수록 cost의 값 또한 무한대로 커지고, 반대로 기울기 w가 무한대로 작아져도 cost의 값은 무한대로 커집니다. 위의 그래프에서 cost가 가장 작을 때는 볼록한 부분의 맨 아래 부분입니다. 기계가 해야할 일은 cost가 가장 최소값을 가지게 하는w를 찾는 일이므로, 볼록한 부분의 맨 아래 부분의 w의 값을 찾아야 합니다.

기계는 임의의 랜덤값 w값을 정한 뒤에, 맨 아래의 볼록한 부분을 향해 점차 w의 값을 수정해나갑니다. 위의 그림은 w값이 점차 수정되는 과정을 보여줍니다. 그리고 이를 가능하게 하는 것이 경사 하강법(Gradient Descent)입니다. 경사 하강법은 미분을 배우게 되면 가장 처음 배우게 되는 개념인 한 점에서의 순간 변화율 또는 다른 표현으로는 접선에서의 기울기의 개념을 사용합니다.

즉, cost가 최소화가 되는 지점은 접선의 기울기가 0이 되는 지점이며, 또한 미분값이 0이 되는 지점입니다. 경사 하강법의 아이디어는 비용 함수(Cost function)를 미분하여 현재 w에서의 접선의 기울기를 구하고, 접선의 기울기가 낮은 방향으로 w의 값을 변경하고 다시 미분하고 이 과정을 접선의 기울기가 0인 곳을 향해 w의 값을 변경하는 작업을 반복하는 것에 있습니다.

따라서 비용 함수(Cost function)는 아래와 같습니다.

이제 비용(cost)를 최소화하는 w를 구하기 위해 w를 업데이트하는 식은 다음과 같습니다. 이를 접선의 기울기가 0이 될 때까지 반복합니다.

위의 식은 현재 w에서의 접선의 기울기와 알파와 곱한 값을 현재 w에서 빼서 새로운 w의 값으로 한다는 것을 의미합니다. 알파는 여기서 학습률(learning rate)이라고 합니다.학습률은 w를 그래프의 한 점으로보고 접선의 기울기가 0일 때까지 경사를 따라 내려간다는 관점에서는 얼마나 큰 폭으로 이동할지를 결정합니다. 직관적으로 생각하기에 학습률 알파의 값을 무작정 크게 하면 접선의 기울기가 최소값이 되는w를 빠르게 찾을 수 있을 것같지만 그렇지 않습니다.

위의 그림은 학습률 알파가 지나치게 높은 값을 가질 때, 접선의 기울기가 0이 되는 w를 찾아가는 것이 아니라 의 값이 발산하는 상황을 보여줍니다. 반대로 학습률 알파가 지나치게 낮은 값을 가지면 학습 속도가 느려지므로 적당한 알파의 값을 찾아내는 것도 중요합니다.

 

출처 : https://wikidocs.net/21670

 

 

Comments