선형 회귀(Linear Regression)
이번에는 인공지능에서 가장 기본 적인 선형 회귀 바로 Linear Regression에 대해 알아보도록 합시다.
그래서 선형 회귀가 뭐임? 첨 들어봄
예시를 한번 들어봅시다.
쪽지 시험을 봤는데 2시간을 공부한 A학생은 60점이 나오고 4시간 공부한 학생은 80점, 6시간 공부한 학생은 100점이 나왔다라고 합시다.
위의 결과를 보고 우리는 쪽지 시험에 대비해서 공부에 시간을 많이 투자 할수록 시험 점수가 잘 나온다는 결과를 알 수 있습니다.
이 결과를 통해 공부에 투자하는 시간과 시험 점수는 서로 비례한다는 상관 관계를 알 수 있죠.
이와 같은 데이터를 통하여 종속변수 y(시험 점수)와 독립 변수 x(공부에 투자한 시간)간의 상관 관계를 모델링하는 기법을 바로 선형 회귀 Linear Regression이라고 합니다.
여기서 독립 변수 x의 개수에 따라 단순 선형 회귀와 다중 선형 회귀로 나뉘게 됩니다.
단순 선형 회귀(Simple Linear Regrssion)
단순 선형 회귀란 위의 수식과 같이 독립 변수가 1개인 선형 회귀를 말합니다.
???:그럼 저기서 w랑 b는 도대체 뭐임??
저기서 나타내는 w와 b는 이 뒤에 개념에도 다룰 아주 중요한 개념이니 잘 알아 두시기 바랍니다.
여기서 w는 weight(가중치) b는 bias(편향)을 의미합니다.
위의 수식을 평면에 그래프로 표현 해보겠습니다.
위의 그래프와 같이 w의 값과 b의 값에 따라서 기울기와 시작점이 달라지는 여러 개의 그래프가 생성되는 것을 알 수 있습니다.
그리고 weight는 기울기 bias는 절편을 나타내는 것을 알 수 있습니다.
이와 같이 독립 변수 x 1개와 종속 변수 y와의 관계를 나타 내는 것이 바로 단순 선형 회귀입니다.
다중 선형 회귀(Multi Linear Regression)
우리가 앞서 배웠던 단순 선형 회귀는 독립 변수 x 1개와 종속 변수 y와의 상관 관계를 알아내는게 바로 단순 선형 회귀였습니다.
다중 선형 회귀는 아래의 수식과 같이 단순 선형 회귀에서 독립 변수 x가 1개 아니라 여러개 일때를 나타내는게 바로 다중 선형 회귀입니다.
???:이걸 도대체 왜 배워야하고 알아야하는거임~ 아까 선형 회귀 했잖음~
분명히 이런 생각이 드는 분이 계실 겁니다.
저도 처음 공부할 때 그래서 이거 왜 배움? 이런 생각을 많이 했어요
인공지능을 실제로 적용할 때는 여러가지 조건과 환경에 대한 데이터를 기반으로 예측을하고 결과 값을 냅니다.
예를 들어 집의 평수를 기반으로하여 집 값을 예측하는 인공지능 모델을 만든다고 가정을 해봅시다.
그런데 사실 집의 평수만으로 집 값을 예측을 할 수가 없어요.
기본적으로 평수도 중요하지만 방의 개수, 화장실의 개수, 집의 구조, 배란다 유무, 주변 상가나 학교 등 기본 환경, 강남이냐 아니냐, 한강 뷰 있냐 없냐 등등 여러가지 너무나도 조건이 많이 생깁니다.
그리고 우리는 이런 조건들을 독립 변수 x들로 표현을 할 수 있고 이러한 독립 변수들을 통해 종속 변수 y(집 값)을 예측 할 수 있겠죠
이러한 너무나도 다양한 조건과 환경들이 있기 때문에 다중 선형 회귀를 배워야하는 겁니다.
실제로도 다중 선형 회귀가 더 중요해요.
위의 예시를 통해 우리는 다중 선형 회귀를 배웠어요
2개 이상의 독립 변수 x들과 종속 변수 y와의 관계를 알아 내서 모델링하는 기법
이것을 우리는 다중 선형 회귀라고 합니다.
가설(Hypothesis)을 한번 Araboza
여러분이 아시는 그 가설이 맞습니다.
인공지능이라고 해서 크게 달라지는건 없어요
앞서 선형 회귀 때 다루었던 쪽지 시험 점수와 공부 시간의 상관 관계를 한번 더 예시를 들어보겠습니다.
이와 같이 공부한 시간을 x 시험 점수를 y로 잡아봅시다.
그리고 만약에 위의 데이터에는 없지만 3시간을 공부하면 점수가 몇 점이 나올지 가설을 한번 세워 보도록 합시다.
가설을 세우게 된다면 70점을 아마도 대부분 세우실 겁니다
왜 여러분들은 데이터에 나와있지도 않은 결과인데도 불구하고 가설을 세우셧나요?
바로 기존의 데이터에서 x와 y의 상관 관계를 어느정도 이해를 했기 때문에 가설을 세울 수 있었습니다.
이와 같이 기존의 데이터에서 x와 y의 상관 관계를 이해를 하기 위 수학적으로 식을 세우는 것이 바로 머신 러닝에서의 가설 입니다.
즉 선형 회귀는 데이터에 잘 맞는 직선을 찾는 것을 의미하며, 데이터에 잘 맞는 직선이 어떤 건지 알기 위해 세우는 것이 가설입니다.
그리고 우리가 아까 봤던 이 그림이 바로 선형 회귀에서 가설을 세우는 그림입니다.
데이터를 점으로 표현 하였을 때 해당 점이 잘 이어지는 직선이 어떤 건지 막 그어서 그리는거죠 우리가 일상 생활에서 가설을 세웠을 때 맞으면 좋고 아님 말고 느낌이 드는 것과 똑같은 개념이라고 생각하시면 좋겠습니다
가설(Hypothesis)와 손실(Loss)의 관계
이번에는 손실(Loss)에 대해 배워 보도록 하겠습니다.
- ???:근데 어떤 사람은 Cost라고 하고 어떤 사람은 Loss라고 하던데요?
-
완전히 똑같은 말은 아닌데 머신 러닝에서는 비용 함수(Cost Function)=손실 함수(Loss Function)라고 말을 하긴 합니다. 그런데 왜 이거를 부르는 종류가 2가지나 있는지는
저도 자세하게는 몰?루(저는 이게 더 편해서 손실 함수라고 부릅니다.) 어떤 분은 목적 함수 (Objective Function)이라고도 하더라구요.
-
???:다른거 아님? 다르니까 종류가 2가지나 있는거 아님?
머신 러닝에서는 같다고!!!!!!!!!!!!!!!!!!!!!
-
손실에 대해 알아보도록 합시다.
아까 배웠던 선형 회귀에 대해 다시 떠올려 봅시다.
선형 회귀는 독립변수 x에 대해 종속 변수 y와의 관계를 모델링하는 기법이라 했습니다.
그리고 실제 데이터를 점으로 표현할 때 해당 점을 이어주는 직선을 표현하는 기법 입니다.
원래 실제 데이터와 모델이 예측한 데이터가 아무래도 다를 수 있습니다.
그럼 실제 데이터와 모델이 예측한 데이터값이 다를 경우 우리는 실제 데이터 값과 똑같게 혹은 근사하게 예측을 할 수 있도록 모델을 개선해야하는데 이때 필요한게 바로 손실 값입니다.
손실 값이란 실제 데이터와 모델이 예측한 데이터값 간의 오차를 계산하는 것입니다. 아래의 그림을 보시면 좀 더 이해하기 쉬울 것 입니다.
그림을 보면 위에서 제가 예시를 들었던 것과 같이 실제 데이터를 점으로 표현하였고 해당 점을 이어주는 직선을 모델이 표현하였습니다.
위의 그림을 자세하게 한번 다루어 보겠습니다.
2시간, 5시간때의 데이터는 해당 직선과 매우 근사한 값이기도 하며 3시간, 4시간 때의 데이터는 해당 직선에서 매우 멀어져 있습니다.
그렇기 때문에 해당 직선은 실제 데이터와 매우 근사하게 직선을 그었다는 느낌도 받을 수 있고 근사하게 그리지 못했다는 느낌을 받을 수 있습니다.
하지만 인공지능은 수학으로 이루어져 있기 때문에 느낌이라는 것은 수치적으로 표현할 수 없기 없습니다. 그럼으로 수학에서는 의미가 없음으로 인공지능에서도 의미가 없습니다.
그럼으로 우리는 해당 직선이 실제 데이터 값과 얼마나 유사한지 알 수 있는 객관적인 수치 지표가 필요하고 이를 손실 값으로 알 수 있습니다.
위의 그래프에서 빨간색 화살표가 바로 실제 데이터와 모델이 예측한 데이터 값의 차이 값 바로 손실 값입니다.
이 손실 값으로 우리는 모델이 실제 데이터와 얼마나 근사한지 혹은 일치하는지 알 수 있고 이 값을 통해 모델이 실제 값과 최대한 유사하게 예측할 수 있도록 개선을 할 수 있습니다.
그럼 총 손실값은 어떻게 구할까요?
위의 수식으로 구할 수 있습니다. y는 실제 데이터 값 H(x)는 모델이 예측한 값 입니다.
[실제 데이터 값-모델이 예측한 값]의 제곱을 한 뒤 모두 더해줍니다.
???:총 손실 값이면 실제 데이터 값-모델이 예측한값을 한 뒤 해당 값을 모두 더하면 되는거아님?
그렇게하면 총 손실 값을 구할 수가 없습니다.
위의 결과 표와 같이 모델이 예측한 값은 실제 데이터 값보다 클 수도 작을 수도 있기 때문에 만약 모델이 예측한 값이 실제 데이터 값보다 커버리게 되면 음수가 나오기 때문에 총 손실값이 0이 나올 수도 있고, 음수가 나올 수도 있고 양수가 나오더라도 정확한 총 손실 값이 아니기 때문입니다.
그렇기 때문에 우리는 정확한 총 손실 값을 구하기 위해서 제곱을 한 뒤 더해줍니다.
그리고 총 손실 값을 이용해 평균 손실을 구해주도록 하겠습니다.
평균 손실 값은 총 손실 값에서 데이터의 개수 만큼 나누어주면 끝입니다.
우리는 이렇게 평균 손실 값을 구할 수 있고 평균 손실을 Mean Squared Error 줄여서 MSE라고 부릅니다.
???:그럼 평균 손실을 왜 구하는 거임? 어디다 써먹으려고?
앞에서 말했다 싶이 우리는 손실 값을 통해서 해당 모델이 실제 데이터를 잘 예측했는지 알 수 있고 손실 값을 통해 모델의 성능을 개선할 수 있다고 했습니다.
우리는 위의 수식으로 선형 회귀를 나타낼 수 있고 weight값과 bias값에 따라서 그려지는 직선이 달라지는 것을 배웠습니다.
그리고 해당 weight값과 bias값에 따라서 우리는 MSE값이 작은 실제 데이터와 굉장히 유사한 직선을 그릴 수도 있고 MSE값이 매우 크고 실제 데이터와 굉장히 일치하지 않은 직선을 그릴 수도 있습니다.
그렇기 때문에 선형 회귀에서 우리의 목표는 MSE 값이 가장 작게 나오는 weight값과 bias값 구하는 것이 목표입니다.
그리고 해당 weight와 bias값을 구하기 위해 가장 최적화 된 식이 바론 손실 함수(loss function)입니다.
손실 함수를 나타내는 수식이 바로 평균 손실의 구하는 함수입니다.
서론과 중론이 너무 길어서 결론만 정리를 해드리도록 하겠습니다
- 실제 값과 모델이 예측한 값의 차이를 손실 값(loss)라고 부른다.
- 손실 값을 통해 우리는 모델이 얼마나 잘 예측을 하였는지 알 수 있고 총 손실 값, 평균 손실값(MSE)를 구할 수 있다.
- 평균 손실 값(MSE)이 가장 작게 나오는 weight와 bias를 구하는 것이 선형 회귀에서의 목적이며 해당 weight와 bias에 의한 평균 손실 값을 나타내는 함수를 우리는 손실 함수(loss function)이라고 부른다.
- 이때 손실 함수(loss function)은 평균 손실 값(MSE)를 구하는 함수와 똑같다.
옵티마이저 경사하강법에 대해 Araboza(Optimizer-Gradient Descent algorithm)
우리는 앞에서 Loss에 대해 배웠습니다.
그리고 선형회귀에서의 목적은 Loss function을 통해 Loss값이 가장 작게 나오는 weight와 bias를 구하는 것이라고 했습니다.
그럼 이번에는 어떻게 하면 Loss function의 값이 가장 작게 나오는 weight와 bias를 구할 수 있는지 알아 봅시다.
먼저 옵티마이저라는 단어의 정의부터 살펴봅시다.
옵티마이저(Optimzier)란 머신 러닝 혹은 딥 러닝에서 학습 과정을 최적화 하는 알고리즘 혹은
도구라고 부릅니다.
여기서 학습을 최적화 한다는 것은 Loss function이 최대한 작게 나오도록 가중치(weight)와 bias(매개변수)를 조절 한다는 의미입니다.
즉 옵티마이저란 Loss function이 최대한 작게 나오도록 하기 위해 필요한 weight와 bias를 최적화를 시켜주는 도구 혹은 알고리즘이라는 것 입니다.
그럼 경사하강법(Gradient Descent algorithm)은 무엇일까요?
위의 그래프를 예시로 한번 봐봅시다.
이번에는 bias를 고려하지 않고 해당 직선을 y=wx라고 가정하겠습니다 weight값만 신경을 쓰도록 하겠다는 의미입니다.
해당 직선들은 우리가 앞서 Loss function을 배울 때 다루었던 직선보다 loss가 큰 직선들 입니다.
그리고 weight도 훨씬 크거나 작은 직선들 입니다.
또한 weight가 너무 크면 loss도 커지고 weight가 너무 작아져도 loss가 커진다는 사실을 알 수 있습니다.
???:그럼 bias는 조상님이 걱정해줌?
bias도 마찬가지입니다.
bias도 너무 크면 loss값이 커지고 너무 작아도 loss값이 커지는 것은 똑같습니다.
그런데 bias까지 포함시켜서 설명하면 너무 복잡해져서 이해하기 어려울 것 같아 배재를 했습니다.
실제로는 bias도 똑같이 고려합니다.
bias가 어떻게 적용되는지는 먼저 이 설명을 마친 뒤 마지막에 하도록 하겠습니다.
그럼 이 사실을 바탕으로 이를 loss함수의 결과 값과 weight와의 관계를 나타내는 그래프를 한번 그려봅시다.
제가 앞에서 말했다 싶이 weight가 너무 작아져도 loss가 커지고 weight가 너무 커져도 loss가 커지는 y=x^2형태의 그래프가 완성이 되었습니다.
우리의 목표는 바로 loss값이 가장 작아지는 weight를 찾아가는 것 입니다.
???:그럼 이걸 어떻게 loss값을 스스로 찾아감? 우리는 눈으로 보기 때문에 어디 부분이 가장 작은 부분인지 알 수 있는데 컴퓨터는 모르잖음?
저 그래프를 더 자세하게 봐보도록 합시다.
우리의 목표는 가장 작아지는 loss값을 찾는거죠
위의 사진을 자세하게 봐봅시다. loss가 가장 작은 부분의 접선의 기울기는 0이라는 것을 알 수 있습니다.
이 개념은 우리가 고등학교 수학에서 배우는 미적분에서 나온 개념입니다.
y=x^2그래프에서의 접선의 기울기를 구하는 방법은 y=x^2그래프를 미분을 한 뒤 x부분에 해당 점의 값을 넣으면 해당 접선의 기울기를 알 수 있습니다.
이 개념을 이용해서 우리는 loss함수를 미분 함으로써 접선의 기울기가 0인 부분 즉 loss값이 가장 작은 부분을 찾아가는 것 입니다.
실제로 기계가 학습을 하며 weight를 조정하는 과정에서 임의의 weight를 지정하고 예측을 시작합니다. 예측 값과 실제 값의 차이값(loss)를 계산한 뒤 weight를 조정하면서 위의 그림과 같이 접선의 기울기가 0인 지점을 찾아가는 과정이 이루어집니다.
그리고 해당 과정은 현재 weight의 접선의 기울기를 구한 뒤 특정 값 알파를 곱한 뒤 현재 weight에서 빼는 방식으로 새로운 weight값을 조정합니다.
그럼 기울기가 양수 일 떄도 있고 음수 일때도 있을 겁니다.
경우에 따라서 계산하고 조정되는 방식이 어떤지 한번 자세하게 알아 봅시다.
- 기울기가 음수인 경우:weight값을 증가시켜야함
기울기가 음수일 경우에는 현재의 weight값이 위의 그림과 같이 접선의 기울기가 0인 weigt값보다 작은 것을 의미합니다. 그렇기 때문에 접선의 기울기가 0인 부분의 weight값에 도달하기 위해선 현재의 weight값을 더 크게 만들어 줘야합니다.
그렇기 때문에 w(현재 weight값)-a X (음수 기울기)를 함으로써 w+a X (양수 기울기)라는 식이 완성 됩니다.
- 기울기가 양수인 경우:weight값을 감소 시켜야함
그럼 접선의 기울기가 양수인 경우에는 현재의 weight값이 접선의 기울기가 0인 지점의 weight값보다 크다는 것을 의미합니다.
그렇기 때문에 접선의 기울기가 0인 weight를 구하기 위해서는 현재의 weight값을 감소시켜야합니다.
이를 수식으로 정리하면 위의 수식과 같이 (현재의 weight) - a X (양수기울기)를 해주면 됩니다.
bias도 완전 똑같습니다 수식에서 weight 대신에 bias를 넣은 것과 똑같습니다.
---
-???:그래서 이 a(알파)가 뭔데
그럼 우리가 앞서 다루었던 a(알파)는 도대체 무슨 값이길레 여기에 곱해주는 걸까요?
여기서 a는 바로 Learning rate라는 학습률이라는 값입니다.
여기서 Learning rate은 바로 우리가 weight값을 작게하거나 크게 할 때 얼마나 크게 할건지 혹은 작게 할건지 조정을 해주는 수치입니다. 이 수치는 우리가 직접 조정할 수 있어요! 그리고 진짜로 직접 조정해서 최적의 Learning rate을 찾아야함;;;
(사실 이런 작업들 때문에 시간과 인내와 여러분의 운빨이 필요합니다.)
그리고 이 수치적인 부분은 다음에 더 자세하게 다루도록 하겠습니다.
나중에 머신러닝을 할 때의 주의점들 부분을 모아서 설명해드리도록 할게요.
먼저 선형 회귀에 대해 이해를 하는게 더 중요하기 때문에 이 개념들에 대해 더 자세하게 이해를 하고 다룬 뒤 설명 드리겠습니다.
(절때로 내가 더 쓰기 귀찮거나 싫어서가 아님;;;)
선형 회귀 개념에 대해 다 알아 봤으니 실습 하십쇼.
하라해도 안할거 다 알지만 그래도 하십쇼.
댓글남기기