본문 바로가기
인공지능

머신러닝/딥러닝 입문 - Linear Regression(선형회귀)

by 너의세가지소원 2023. 9. 3.
반응형

이거 받아쓰는 일도 쉬운 일은 아니구나. 덕분에 공부는 좀 더 잘되는 것 같기는 한데... 수식 표현을 어찌해야 할지 모르겠어서 인터넷 검색해 가면서 수식을 만들어 넣었다. 수학 블로그 하시는 분들은 생각보다 손이 많이 갈 것 같다. 그나마 여러 블로그의 글과 수식 만들어 주는 사이트 덕분에 어렵지 않게 해결했다. 아무리 공부해도 내용이 이해가 되지 않는 문과생 분들에게는 나처럼 이렇게 받아쓰면서 공부하시길 추천해 본다. 오늘 강의 주요 내용은 선형회귀이다.

 

[강의 영상]

 

 

[받아쓰기 내용]

기본적인 머신러닝의 컨셉 그리고 기본적인 용어들에 대해서 배우셨는데요. 그것을 바탕으로 실제 많이 사용되고 있는 알고리즘인 Linear Regression에 대해서 이야기해보도록 하겠습니다. 이렇게 사용된 슬라이드와 내용은 인터넷의 첫 번째 비디오에서도 말씀드렸지만 인터넷에 많이 있는 자료들을 가지고 만들어졌습니다.

자 우리가 어떤 학생이 몇 시간 정도 공부를 했더니 얼마 정도의 성적이 나더라는 데이터를 가지고 Supervised Learning을 한다고 가정합시다. Supervised Learning이라는 것이 바로 이러한 형태의 데이터를 가지고 학습을 시키는 것이죠. 그런데 여기서 우리가 예측을 하려고 하는 결국 최종적인 목표가 스코어, 0점에서 100점 사이가 되겠죠, 대략... 범위를 이렇게 예측하는 것이기 때문에 이런 형태의 머신러닝은 Supervised Learning 중에서도 Regression이라고 우리가 불렀죠? 그래서 이런 데이터 이미 다른 학생들이 10시간 공부했더니 90점이구나. 9시간 공부했더니 80점이야. 이런 데이터를 가지고 학습을 시킵니다. 학습을 시키죠. 이 과정을 트레이닝이라고 하고요. 이 데이터는 트레이닝 데이터라고 부르죠. 자 이 Regression 모델이... 이 데이터를 가지고 학습을 하면 이 속에서 어떤 모델을 만들겠죠. 우리가 알 수 없는 어떤 모델을 하나 만들게 됩니다. 그럼 이 학습이 끝난 거고요. 그런 후에 여러분들이 Regression을 사용한다는 것은 내가 어떤 학생이 있습니다. 7시간... 나는 이 학생이 7시간 공부를 했는데 시험을 치기도 전에 이 인공지능에게 물어봅니다. 이 학생이 몇 점이나 받을 수 있을까? 라고 물어보면, 이제 수학적으로는 이 학생에게 \(x\)라는 값을 넘겨주고 7을 주고 \(y\)가 얼마일까 물어보는 거죠. 그러면 이 Regression은 학습된 데이터를 기반으로 봤더니... 우리도 대략 보니까 우리 같은 경우에 데이터를 보고 대략 7시간 했으니까 이 친구가 한 65점 정도 받을 수 있겠구나. 라고 예측하듯이 이 Regression이 예측을 해주는 겁니다. 그래서 이것을 Linear Regression이라고 하는데 이것이 어떻게 동작하는지 어떻게 또 우리가 이것을 구현할 수 있을지 이야기해 보도록 하겠습니다.

조금 문제를 설명을 간단하게 하기 위해서 데이터 세트를 굉장히 간단하게 준비를 했습니다. \(x\)와 \(y\), \(y\)는 우리가 예측해야 될 대상이 되겠죠. \(x\)는 예측을 하기 위한 기본적인 자료 또는 Feature라고 말하는 데이터인데요. \(x\)가 1일 때 \(y\)가 1이고 \(x\)가 2일 때 \(y\)가 2이고 3일 때 3인 이런 학습 데이터가 있습니다. 트레이닝 데이터가 있습니다. 이걸 가지고 우리가 Regression 모델을 만들어 보려고 하는 겁니다. 이 데이터를 간단하게 그래프에 그려보면 이런 형태가 되겠죠. 이 \(x\)가 \(x\)의 축이 \(x\)값을 가지고 있고 이 \(y\)의 축이 \(y\)값을 표현한다고 했을 때 우리 데이터는 \(x\)가 1일 때 1이고 2일 때 2이고, \(x\)가 3일 때 또 \(y\)가 3인 이런 형태의 데이터가 있습니다. 3개의 학습 데이터가 있다고 보시면 되겠습니다. 그래서 우리가 이 Regression 모델을 학습한다는 것은 어떤 하나의 가설을 세울 필요가 있어요. 우리가 대략, 우리 데이터는 잘 모르겠지만 이런 형태로 맞을 거야. 그리고 이름이 Linear라고 이름이 붙여져 있는 것처럼 어떤 Linear한 모델이 우리가 가지고 있는 데이터에 맞을 거다. 이렇게 가설을 세우면서 하는 것이 바로 Linear Regression입니다. 이 Linear Regression이 굉장히 효과가 많은 것이 세상에 있는 많은 데이터들이 또는 세상에 있는 많은 현상들이 이렇게 Linear한 것으로 드러나는 경우가 설명될 수 있는 경우가 많이 있습니다. 예를 들면 우리가 처음에 예를 들었던 것처럼 학생이 공부를 많이 할수록 성적이 높아지죠. 이런 거라든지 아니면 또 어떤 학생들이 훈련을 많이 할수록 자기 달리기 실력이 올라간다든지, 또는 집의 가격을 예측한다고 했을 때 집에 크기가 크면 클수록 이 집의 가격이 올라간다든지, 이런 Linear로 설명을 할 수 있는 또 Linear로 모델을 세울 수 있는 경우가 많습니다.

그래서 Linear하게 우리 가설을 세운다는 것은 어떤 데이터가 있다면 여기에 잘 맞는 어떤 Linear한 선을 찾는다라는 것으로 생각할 수 있습니다. 이런 선이 우리가 가지고 있는 데이터에 맞을까? 또 이런 선이 데이터에 맞을까를 결정하는 것이죠. 어떤 것이 더 이 데이터에 잘 맞는 선일까? 이 선을 찾는 것이 바로 학습을 하는 것입니다.

자 이렇게 여러 가지 선을 그을 수 있겠는데요. 이것을 수학적으로 나타내면 어떻게 될까요? 2차원에서 선을 그는 것이니까 여러분들이 많이 보셨던 이런 형태의 수식이 나올 것입니다.

\(H(x)\)가 우리의 가설일 것이고요, 이것은 \(x\) 값, 즉 \(x\)의 값은, 값에 \(W\)라는 것을 곱하고 그리고 \(+ bx\) 이렇게 하면 대략 어떤 하나의 형태의 선이 나오게 될 겁니다. 이 선의 모양은 \(W\)와 \(b\)에 따라 선의 모양이 달라지겠죠? 그래서 일단 우리는 Hypothesis를 이런 1차 방정식이 될 것이다. 라고 가설을 세우는 것이 Linear Regression의 첫 번째 단계가 되겠습니다. 그래서 이런 형태로 가설을 세웁니다. 그러면 \(W\)와 \(b\)의 값에 따라 여러 다른 형태의 선들이 나타나겠죠. 그러면 이렇게 나타난 선들 중에서 어떤 선이 정말 우리가 가지고 있는 데이터에 가장 잘 맞는 선일까를 우리가 알아낼 수 있어야 되겠죠. 그렇게 해야만 우리가 여기서 아까 Hypothesis대로 정했던 \(H(x) = W_{x} + b\) 이렇게 정했는데 이 값이 무엇인지, 이 값이 가장 좋은 값이 무엇인지를 찾아낼 수가 있지 않겠습니까? 예를 들어 이런 경우에는 어떻게 우리가 표현할 수 있을까요? 여기 지금 0에서 시작하니까 대략적으로 \(H(x) = 1 * x + 0\)이라는 Hypothesis가 되겠죠. 이것이 이 선의 가설이 되겠습니다. 예를 들면 또 이런 경우에 이렇게 보면 지금 여기 처음에 시작이 0일 때 \(x\)가 0일 때 2이고요, \(x\)가 2일 때 예를 들어서 4 정도 된다고 가정했을 때, 대략 이것은 \(H(x) = 0.5 * x + 2\) 정도 되는 가설이 될 겁니다.그러면 이 두 개 중에 어떤 것이 더 좋은 가설이 될까요? 어떤 \(W\) , 어떤 \(b\)  값이 더 좋은 것일까요? 라는 것을 우리가 알아낼 수 있어야 됩니다.

가장 기본적으로는 어떤 선이, 어떤 모델이 또는 어떤 Hypothesis가 좋은가 할 때 실제 데이터와 우리 이 가설이 나타내는 이 데이터점, 이 점들과의 거리를 비교해서 거리가 멀면 나쁜 거고 거리가 가까우면 좋은 거죠. 그래서 그것을 계산하는 겁니다. 이것을 Linear Regression에서는 Cost Function이라고 부릅니다. 그 거리를 측정하는 것을 Cost Function이라고 부르는데 또 다른 이름으로는 보통 Loss Function이라고도 합니다. 그래서 코스트나 로스라는 펑션을 보시게 되면 우리가 세운 가슬과 실제 데이터가 얼마나 다른가 하는 것을 나타내는 것이죠.

자 우리가 아까 그래프에서도 보았듯이 이런 형태로 차이를 계산할 수 있는데 가장 기본적으로 계산하는 방법은 이 차를 계산하는 거죠. 우리가 가설을 세웠던 이 \(H(x)\)의 값과 실제 데이터의 값에 어떤 차이가 있는가를 계산하는 건데 여기에 이런 모델은 많이 좋지는 않습니다. 왜냐하면 이것이 플러스가 될 수도 있고 마이너스가 될 수도 있고 하기 때문에 보통 우리가 디스턴스를 계산할 때는 이 차이의... 차이를 제곱을 합니다 보통. 자 이렇게 제곱을 하게 되면 좋은 점이 이 차이가 플러스일 수도 있고 또 마이너스 이런 경우에는 플러스고 이런 경우 마이너스가 될 수가 있는데 이런 경우에 상관없이 일정하게 차이를 양수로 표현해주고, 또 제곱이 있기 때문에 차이가 작을 때보다 차이가 클 때 좀 페널티를 많이 주게 되는 거죠.차이가 클 때 더 이 값들이 커짐으로써 차이를 작게 만들 수 있는 굉장히 중요한 값을 나타내게 되는 것입니다. 그래서 이것을 바로 우리가 Cost Function이라고 부릅니다.

조금 더 Formal하게 정리해보자면 이런 식으로 지금 값이 3개가 있죠. \(x\)가 우리가 준비한 값이 이렇게 3개 값이 있는데 각각을 \(x\)의 첫 번째 또 \(y\)의 첫 번째라고 해서 차이를 계산하고, 두 번째는 또 \(x\)의 두 번째 값과 우리 가설에서 세운 값과 실제 \(y\)의 두 번째 값을 또 차이에 제곱을 하고 그리고 끝으로 이 세 번째 우리의 가설에 의한 세 번째 데이터 값과 실제 우리가 \(y\) 학습 데이터에 있는 정답이라고 하는 레벨이 된 그 데이터 값의 차이를 제곱을 하는 걸 다 더하는 겁니다. 다 더하고 그런 다음에 이 세 개의 데이터니까 평균을 3으로 이렇게 나누는 거죠. 이것이 이제 Cost Function이라고 말씀드렸고요.

 

\(cost = \frac{\mathrm{1} }{\mathrm{m}}\sum_{i=1}^{m}H(x^{(i)} - y^{(i)})^2\)

 

이것을 조금 더 일반화, 그러니까 이 데이터가 100개일 수도 있고, 또 알파고 같은 경우에는 엄청나게 300만인가요, 엄청나게 많은 데이터를 가지고 학습을 했는데 많은 데이터가 가질 수 있는데 그런 경우에도 쓰기 위해서 일반적으로 이렇게 표시해보면 이 \(m\)을 데이터의 개수라고 생각합시다.

우리 학습 데이터의 개수라고 이렇게 넣었을 때 개수만큼, 1부터 \(m\)개까지 더하는 겁니다. 뭘 더하느냐? 각각의 실제로 우리가 Hypothesis에서 가져온, 예측한 값과 그리고 실제의 값의 차이에 제곱을 하고 그런 다음에 이게 \(m\)개니까 \(m\)으로 나누어서 평균을 구하게 됩니다. 이것이 바로 Cost Function이죠.

이 Cost Function을 우리가 이제 계산을 했다면 이런 식의 Cost Function이 주어지는 것이고 우리가 Hypothesis가 바로 이렇게  \(H(x) = W_{x} + b\)로 Linear Regression 만큼 Linear로 주어진다고 했죠. 그러면 이것을 여기다가 기계적으로 대입을 하게 되면 됩니다. 그럼 이 Cost Function은 실제적으로 \(w\)와 \(b\)의 function이 됩니다.

 

여기에서 Linear Regression의 숙제는 이 값을 작게 하는 게 좋겠죠. 가장 작은 값을 가지는 \(w\)와 \(b\)를 구하는 것이 바로 Linear Regression의 학습이 되겠습니다. 이것을 조금 더 formal하게 적으면 우리가 이야기했던 이 Cost Function은 \(w\)와 \(b\)의 함수가 될 텐데 이것을 가장 작게 하는 값 (w\)와 \(b\)를 구하자라는 것이 이 코스트 값을 최소화하는 (w\)와 \(b\)를 구하는 것이 우리가 이 학습의 목표가 되겠습니다.

 

이 (w\)와 \(b\)를 최소화하는 또는 어떤 주어진 식에서 주어진 값들을 최소화하는 많은 알고리즘이 있습니다. 그래서 우선은 랩 시간을 통해서 이미 만들어진 알고리즘을 한번 사용하도록 할 거고요. 리니어 리그레이션을 직접 한번 구현해 보도록 하겠습니다. 그리고 다음 시간에는 비디오에서 이것을 우리가 실제적으로 이 미니마이저 하는 알고리즘을 구현할 필요는 없지만, 이것을 어떻게 미니마이저 하는지 한번 수식을 통해서 또 굉장히 직관적인 느낌을 갖기 위해서 한번 설명을 해 보도록 하겠습니다.

반응형

댓글