선형 회귀
시험 공부하는 시간을 늘리면 늘릴수록 성적이 잘 나온다. 또한 운동량이 많을수록 몸무게는 줄어든다. 이는 수학적으로 생각해보면 어떤 요인의 수치에 따라서 특정 요인의 수치가 영향을 받고 있다고 말할 수 있다. 조금 더 수학적인 표현을 써보면 어떤 변수의 값에 따라 특정 변수의 값이 영향을 받고 있다고 볼 수 있다. 다른 변수의 값을 변하게 하는 변수를 x, 변수 x에 의해 값이 종속적으로 변하는 변수를 y라고 해 보자.
이때 변수 x의 값은 독립적으로 변할 수 있는 것에 반해, y 값은 계속해서 x 값에 의해 종속적으로 결정되므로 x를 독립 변수, y를 종속 변수라고도 한다. 선형 회귀는 한 개 이상의 독립 변수 x와 y의 선형 관계를 모델링한다.
단순 선형 회귀 분석
위의 수식은 단순 선형 회귀의 수식을 보여준다. 여기서 독립 변수 x와 곱해지는 값 w를 머신러닝에서는 가중치, 별도로 더해지는 값 b를 편향이라고 한다. 직선의 방정식에서는 각각 직선의 기울기와 절편을 의미한다. w와 b가 없이 y와 x란 수식은 y는 x와 같다는 하나의 식밖에 표현하지 못한다. 하지만 가중치와 편향이 있다면 x와 y가 표현하는 직선은 무궁무진해진다.
다중 선형 회귀 분석
집의 매매 가격은 단순히 집의 평수가 크다고 결정되는 것이 아니라 집의 방 개수, 층 수, 지하철 역과의 거리와도 영향이 있다. 이러한 다수의 요소를 가지고 집의 매매가격을 예측해보자. 집의 매매가격이란 y는 여전히 1개지만 이제 x가 1개가 아니라 여러 개가 된다. 이를 다중 선형 회귀 분석이라고 한다.
가설 세우기
단순 선형 회귀를 가지고 문제를 풀어보자. 어떤 학생의 공부 시간에 따라 다음과 같은 점수를 얻었다는 데이터가 있다.
이를 좌표 평면에 그려보면 다음과 같다.
알고 있는 데이터로부터 x와 y의 관계를 유추하고자 이 학생이 8, 9시간 공부했을 때의 성적을 예측해보고 싶다. x와 y의 관계를 유추하기 위해서는 수학적으로 식을 세워보게 되는데 머신 러닝에서는 이러한 식을 가설이라고 한다.
위의 그림은 w와 b 값에 따라 다르게 그려지는 직선의 모습을 보여준다. 이처럼 결국 선형 회귀는 주어진 데이터로부터 y와 x의 관계를 가장 잘 나타내는 직선을 그리는 일을 말한다. 그리고 어떤 직선인지 결정하는 것은 w와 b의 값이므로 선형회귀에서 해야할 일은 결국 적절한 w와 b를 찾아내는 것이다.
비용 함수(Cost Function) : 평균 제곱 오차(MSE)
앞서 말했듯이 해야할 일은 문제에 대한 규칙을 가장 잘 표현하는 w와 b를 찾는 일이다. 머신 러닝은 w와 b를 찾기 위해 실제값과 가설로부터 얻은 예측값의 오차를 계산하는 식을 세우고, 이 식의 값을 최소화하는 최적의 w와 b를 찾아낸다.
이때 실제값과 예측값의 오차에 대한 식을 비용 함수(Cost Function) 또는 손실 함수(Loss Function)라고 한다. 비용 함수는 단순히 실제값과 예측값에 대한 오차를 표현하면 되는 것이 아니라, 예측값의 오차를 줄이는 일에 최적화된 일이어야 한다. 회귀 문제의 경우에는 주로 평균 제곱 오차(Mean Square Error, MSE)가 사용된다.
위의 그래프에 임의의 w 값 13과 임의의 b 값 1을 가진 직선을 그렸다. 이제 이 직선으로부터 서서히 w와 b의 값을 바꾸면서 정답인 직선을 찾아야 한다. 여기서 정답인 직선이란 y와 x의 관계를 가장 잘 나타내는 직선이면서 모든 점들과 위치적으로 가장 가까운 직선을 그린다는 것과 같다.
이제 오차를 정의해보자. 오차는 주어진 데이터에서 각 x에서의 실제값 y와 위의 직선에서 예측하고 있는 H(x) 값의 차이를 말한다. 즉, 오차를 줄여가면서 w와 b의 값을 찾아내기 위해서는 전체 오차의 크기를 구해야 한다.
오차의 크기를 측정하기 위한 가장 기본적인 방법은 각 오차를 모두 더하는 방법이 있다. 위의 y = 13x + 1 직선이 예측한 예측값을 각각 실제값으로부터 오차를 계산하여 표를 만들어보면 아래와 같다.
그런데, 수식적으로 단순히 '오차 = 실제값 - 예측값'이라고 정의한 후에 모든 오차를 더하면 음수 오차도 있고, 양수 오차도 있으므로 오차의 절대적인 크기를 구할 수가 없다. 그래서 모든 오파를 제곱하여 더하는 방법을 사용한다. 이를 수식으로 표현하면 아래와 같다.
이때 데이터의 개수인 n으로 나누면, 오차의 제곱합에 대한 평균을 구할 수 있는데 이를 평균 제곱 오차(MSE)라고 한다.
이처럼 평균 제곱 오차의 값을 최소값으로 만드는 w와 b를 찾아내는 것이 정답인 직선을 찾아내는 일이다. 평균 제곱 오차를 w와 b에 의한 비용 함수로 재정의해보면 다음과 같다.
옵티마이저(Optimizer) : 경사하강법(Gradient Descent)
선형 회귀를 포함한 수많은 머신 러닝, 딥 러닝의 학습은 결국 비용 함수를 최소화하는 매개 변수인 w와 b를 찾기 위한 작업을 수행한다. 이 때 사용되는 알고리즘을 옵티마이저 또는 최적화 알고리즘이라 한다.
그리고 이 옵티마이저를 통해 적절한 w와 b를 찾아내는 과정을 머신 러닝에서 훈련 또는 학습이라고 부른다. 여기서 경사하강법은 가장 기본적인 옵티마이저 알고리즘이다.
경사 하강법을 이해하기 위해서 먼저 cost와 기울기 w와의 관계를 이해해보자. w는 머신 러닝 용어로는 가중치라고 불리지만 직선의 방정식 관점에서 보면 직선의 기울기를 의미한다. 아래의 그래프는 기울기 w가 지나치게 높거나, 낮을 때 어떻게 오차가 커지는지의 모습을 보여준다.
위의 그림에서 주황색선은 기울기 w가 20일 때, 초록색선은 기울기가 1일때를 보여주며 각각 y = 20x, y = x에 해당되는 직선이다. 이는 앞서 예측에 사용했던 y = 13x + 1 직선보다는 확연히 큰 오차값이다. 즉, 기울기가 지나치게 커지면 실제값과 예측값의 오차가 커지고, 기울기가 지나치게 작아도 실제값과 예측값의 오차가 커진다. 이는 b 또한 마찬가지다.
설명의 편의를 위해 편향 b가 없이 단순히 가중치 w만을 사용한 y=wx라는 가설 H(x)를 가지고, 경사 하강법을 수행한다고 해 보자. 이에 따라 w와 cost의 관계를 그래프로 표현하면 다음과 같다.
기울기 w가 무한대로 커지면 커질수록 cost의 값 또한 무한대로 커지고, 반대로 기울기 w가 무한대로 작아져도 cost의 값은 무한대로 커진다. 위의 그래프에서 cost가 가장 작을 때는 볼록한 부분의 맨 아래 부분이다. 기계가 해야할 일은 cost가 가장 최소값을 가지게 하는 w를 찾는 일이므로, 볼록한 부분의 맨 아래에 해당하는 w의 값을 찾아야 한다.
기계는 임의의 랜덤값 w값을 정한 뒤에, 맨 아래의 볼록한 부분을 향해 점차 w의 값을 수정해나간다. 위의 그림은 w값이 점차 수정되는 과정을 보여준다. 그리고 이를 가능하게 하는 것이 경사 하강법이다. 이를 이해하기 위해서는 미분을 이해해야 한다. 경사 하강법은 미분을 배우게 되면 가장 처음 배우게 되는 개념인 한 점에서의 순간 변화율 또는 다른 표현으로 접선에서의 기울기의 개념을 사용한다.
위의 그림에서 초록색 선은 w가 임의의 값을 가지게 되는 4가지의 경우에 대해서, 그래프 상으로 접선의 기울기를 보여준다. 주목할 것은 맨 아래의 볼록한 부분으로 갈수록 접선의 기울기가 점차 작아진다는 점이다. 그리고 맨 아래의 볼록한 부분에서는 결국 접선의 기울기가 0이 된다.
즉, cost가 최소화가 되는 지점은 접선이 기울기가 0이 되는 지점이며, 또한 미분값이 0이 되는 지점이다. 경사 하강법의 아이디어는 비용 함수를 미분하여 현재 w에서의 접선의 기울기를 구하고, 접선의 기울기가 낮은 방향으로 w의 값을 변경하고 다시 미분하고 이 과정을 접선의 기울기가 0인 곳을 향해 w의 값을 변경하는 작업을 반복하는 것에 있다.
비용 함수(MSE)는 아래와 같다.
이제 비용을 최소화하는 w를 구하기 위해 w를 업데이트하는 식은 다음과 같다. 이를 접선의 기울기가 0이 될 때까지 반복한다.
위의 식은 현재 w에서의 접선의 기울기와 a를 곱한 값을 현재 w에서 빼서 새로운 w의 값으로 한다는 것을 의미한다. a는 여기서 학습률이라고 하는데, 우선 a는 생각하지 않고 현재 w에서 현재 w에서의 접선의 기울기를 빼는 행위가 어떤 의미가 있는지 보자.
위의 그림은 기울기가 음수일 때, 0일 때, 양수일 때를 보여준다. 접선의 기울기가 음수일 때의 수식은 아래와 같이 표현할 수 있다.
기울기가 음수면 '음수를 빼는 것'은 곧 ' 해당 값을 양수로 바꾸고 더하는 것'과 같다. 결국 음수 기울기를 빼면 w의 값이 증가하게 되는데 이는 결과적으로 접선의 기울기가 0인 방향으로 w의 값이 조정된다. 만약, 접선의 기울기가 양수라면 위의 수식은 아래와 같이 표현할 수 있다.
기울기가 양수면 w의 값이 감소하게 되는데 이는 결과적으로 기울기가 0인 방향으로 w의 값이 조정된다. 결국, 아래의 수식은 접선의 기울기가 음수거나, 양수일 때 모두 접선의 기울기가 0인 방향으로 w의 값을 조정한다.
그렇다면 여기서 학습률(learning rate)는 어떤 의미를 가질까? 학습률은 w의 값을 변경할 때, 얼마나 크게 변경할지를 결정하며 0에서 1 사이의 값을 가지도록 한다. 예를 들어서 0.01이 될 수 있다. 학습률은 w를 그래프의 한 점으로 보고 접선의 기울기가 0일 때까지 경사를 따라 내려간다는 관점에서는 얼마나 큰 폭으로 이동할지를 결정한다. 직관적으로 생각하기에 학습률의 값을 무작정 크게 하면 접선의 기울기가 최소값이 되는 w를 빠르게 찾을 수 있을 것 같지만 그렇지 않다.
위의 그림은 학습률이 지나치게 높은 값을 가질 때, 접선의 기울기가 0이 되는 w를 찾아가는 것이 아니라 cost의 값을 발산하는 상황을 보여준다. 반대로 학습률이 지나치게 낮은 값을 가지면 학습 속도가 느려지므로 적당한 학습률의 값을 찾아내는 것도 중요하다. 자굼까지는 b를 배제시키고 최적의 w를 찾아내는 것에만 초점을 맞추어 경사 하강법의 원리에 대해서 배웠는데, 실제 경사 하강법은 w와 b에 대해서 동시에 경사 하강법을 수행하면서 최적의 w와 b를 찾아간다.
정리하자면 가설, 비용 함수, 옵티마이저는 머신 러닝 분야에서 사용되는 포괄적인 개념이다. 풀고자 하는 각 문제에 따라 가설, 비용 함수, 옵티마이저는 전부 다를 수 있으며 선형 회귀에 가장 적합한 비용 함수와 옵티마이저가 알려져 있는데 MSE와 경사 하강법이 이에 해당된다.
'NLP > 딥러닝을 이용한 자연어 처리 입문' 카테고리의 다른 글
[NLP] 5-5. 로지스틱 회귀(Logistic Regression) (1) | 2024.01.05 |
---|---|
[NLP] 5-4. 자동 미분과 선형 회귀 실습 (0) | 2024.01.04 |
[NLP] 5-2. 머신 러닝 훑어보기 (1) | 2024.01.03 |
[NLP] 5-1. 머신 러닝이란 (0) | 2024.01.03 |
[NLP] 4-2. 여러 가지 유사도 기법 (0) | 2024.01.02 |