지도학습(Supervised Learning) 기초(회귀, 분류, 비용함수)
*본 게시물은 22-1학기 연세대학교 일반대학원 딥러닝을이용한비정형데이터분석(이상엽 교수님) 수업 내용을 정리한 것입니다.
지도학습을 위해서는 정답과 힌트(feature) 정보가 있는 데이터가 필요합니다. 이 데이터를 바탕으로 훈련을 통해 정답과 힌트 정보의 관계를 학습하게 됩니다. 가령 개와 고양이를 분류하는 문제일 경우, 훈련을 통해 학습 데이터에 존재하는 개와 고양이의 특징을 알게 됩니다.
귀가 쫑긋하면 고양이 수염이 길면 고양이 |
귀가 처지면 강아지 수염이 짧으면 강아지... |
지도학습의 힌트 정보는 독립변수의 값, 정답 정보는 종속 변수의 값으로 바꿔서 이야기할 수 있습니다. 즉, 훈련을 통해 독립변수와 종속변수 간의 관계를 배우는 것이 바로 지도학습입니다. 관계를 배울 때에는 알고리즘(=수학적 모형/모델/함수)을 사용합니다.
1. 지도 학습의 예) 아파트 가격 예측하기
지도학습을 사용하여 아파트의 평수 정보를 통해 아파트 가격을 예측하는 것을 학습할 수 있습니다. 학습을 통해 독립변수(평수)와 종속변수(아파트 가격)의 관계를 파악하고, 이 관계에 대한 정보를 사용하여 아파트 가격을 예측하는 원리입니다.
평수 | 가격(억원) |
30 | 3 |
34 | 4.0 |
34 | 3.8 |
48 | 6 |
위와 같은 54개의 관측치들이 있다고 가정합니다. 이 5개의 관측치를 학습 데이터로 삼아 훈련을 할 수 있습니다. 이렇듯 학습 데이터에는 독립변수와 종속변수에 대한 정보가 모두 존재하여, 이를 모두 사용하여 학습을 합니다. 반면에 평가(test) 데이터에는 종속변수에 대한 정보 없이 오로지 독립변수(평수)만 사용하기에, 학습을 통해 배운 독립변수(평수)-종속변수(가격)의 관계를 활용하여 평가 데이터의 종속 변수를 예측하게 됩니다.
위의 표에 제시된 독립변수(평수)와 종속변수(가격)의 관계를 파악하기 위해 알고리즘으로 1차 함수(linear function)를 사용해보겠습니다.
위 식과 같이 y는 종속변수, x는 독립변수가 됩니다.
그렇다면 b0, b1는 뭘까요?
보통 b0는 y절편, b1은 기울기(y변화량/x변화량)라 부릅니다. 기울기가 3일 경우 x가 1 증가 시 y는 3 증가, 기울기가 -2일 경우 x가 1 증가하면 y는 2만큼 감소합니다.(너무 당연하지만 ^^;)
또한 b0, b1은 함수의 모양을 결정하는 '파라미터'라 불립니다. 일차 함수의 그래프(직선)는 y와 x의 관계를 표현하는데요, 이 그래프(직선)의 모양은 파라미터에 의해 달라집니다. 즉, 직선의 모양에 따라 y와 x의 관계가 달라지기에, 직선의 모양을 바꾸는 파라미터들은 x와 y의 관계를 결정하는 역할을 한다고 말할 수 있습니다! 때문에 x와 y의 관계를 가장 잘 밝혀주는 파라미터를 찾아야만 합니다.
그림으로 다시 설명하겠습니다.
왼쪽은 학습 데이터(관측치)를 좌표평면에 흩뿌린 상태입니다. 이 점(data point)들을 가장 잘 설명(=독립변수와 종속변수의 관계를 가장 잘 설명)할 수 있는 선을 찾아야 합니다.
오른쪽은 b0, b1의 값에 따라 각기 달라진 직선의 모양을 볼 수 있습니다. 딱 보기에도 초록색이 점들을 가장 잘 설명하고 있는 상태이기에, 학습을 통해서 직선의 모양이 초록색이 되는 b0, b1값을 구해야 함을 알 수 있습니다. 즉 학습을 통해 독립변수와 종속변수 관계를 가장 잘 설명하는 파라미터의 최적값(optimal value)을 찾아야 합니다. 최적값을 찾은 이후에는 이를 힌트 정보만 사용하는 평가(test) 데이터에 적용하여 모형이 학습이 잘 되었는지를 살펴볼 수 있습니다.
만일 위 표에 존재하는 학습 데이터로 훈련을 거쳐 다음의 식을 도출했다면, 이를 평가 데이터에 적용해 볼 수 있습니다.
정리하자면 기계학습에서 학습이란 선택한 알고리즘(수학적모형/모델/함수)을 사용하여 학습 데이터에 존재하는 독립변수와 종속변수 간의 최적의 관계를 파악하는 것입니다. 이는 독립변수와 종속변수 사이의 관계를 가장 잘 밝혀주는 파라미터의 최적값을 찾는다는 말과 동일합니다. (또 밑에서는 두 변수 간 관계를 설명하지 못하는 오차를 최소화하는 최적의 파라미터 값을 찾는 것이 학습입니다 ^^)
2. 지도학습 알고리즘 문제 2가지
지도학습 알고리즘으로 풀 수 있는 문제는 회귀(regression), 분류(classification) 두 개입니다. 문제들은 종속변수의 형태의 의해 결정되는데요, 종속변수의 값이 연속변수이면 회귀이고, 이산변수이면 분류문제입니다. 문제에 따라 적용하는 알고리즘이 달라지기에 잘 구별해야 합니다.
종속변수의 값이 연속변수(취할 수 있는 값이 무수함) | 회귀 문제(값을 예측하는 문제: 어느 값이 나와도 상관 없음) |
종속변수의 값이 이산변수(취할 수 있는 값이 유한함) | 분류 문제(분류 라벨의 확률을 리턴: 값으로 라벨 1개만 취할 수 있음) |
3. 기계학습의 2가지 학습
기계학습은 1) 최적값을 최대화 하거나, 2) 오차(error)를 최소화하는 방법으로 학습됩니다. 보통은 오차를 최소화하는 방향으로 이루어집니다. 오차가 최소라는 뜻은, 독립변수와 종속변수 간 관계를 설명하지 못하는 정도가 최소화되었단 뜻입니다. 또한 위에 말한 것과 마찬가지로, 종속변수와 독립변수를 가장 잘 설명한다는 뜻은 오차를 최소화하는 최적 파라미터를 찾는다는 뜻과 같습니다.
오차는 다음 그림과 같이 매 관측치(데이터 포인트)마다 발생합니다.
그렇다면 전체 오차는 어떻게 표현을 해야 할까요? 단순히 생각하면 다 더할 수도 있지만 만일 오차가 '-5 -1 0 +1 +5'처럼 나와버린다면 전체 오차가 0이 되어버리게 됩니다. 이에 따라 오차는 최대한 양수로 표현을 해야 합니다. 그 방법에는 절댓값과 제곱이 있습니다.
기계학습에서는 모형이 설명하지 못하는 정도, 즉 오차를 나타내기 위해 비용 함수(cost function)을 사용합니다.
4. 오차를 나타내는 정도 - 비용함수(cost funciton; 손실함수, loss fucntion)
비용함수는 학습 데이터에 존재하는 전체 에러 정도, 즉 모형이 학습 데이터를 설명하지 못하는 정도를 나타냅니다. 이에 따라 손실함수 값을 최소화하는 최적의 파라미터 값을 찾는 것이 곧 오차를 최소화하는 파라미터를 찾는 것과 똑같습니다.
비용함수는 풀고자 하는 문제(회귀, 분류)에 따라 다르게 선택할 수 있는데, 회귀에는 MSE(Mean Square Error), 분류에는 CE(Cross Entropy)를 사용합니다.
1) MSE(Mean Square Error)
MSE 원리는 간단합니다. N은 학습 데이터에 존재하는 관측치의 수입니다. 매 관측치마다 정답과 비교하여 그 오차를 제곱한 후, 모두 더하고, 더한 개수(N)만큼 나눕니다. N으로 나누는 이유는 비용함수 값이 너무 커지는 것을 방지하기 위함입니다.
MSE는 회귀 문제에 많이 사용됩니다. MSE가 많이 사용되는 이유는 비용함수를 최소화 할때 미분을 사용하게 되는데, MSE는 미분이 용이하기 때문입니다.
2) CE(Cross Entropy)
CE는 분류 문제에 사용되는 단 한 가지의(!) 비용함수입니다. CE는 그림과 같이 관측치의 종속변수 값이 1이 될 확률& 0이 될 확률 2가지를 표현합니다.
결론적으로 MSE든 CE든 이 비용함수의 값을 최소화하는 것이 중요합니다. 어떻게 최소화할 수 있을까요? 이는 정규방정식과 경사하강법으로 가능합니다.
5. 비용함수 최소화 방법- 정규방정식, 경사하강법
1) 정규방정식(Normal Equation)
정규방정식은 비용함수가 볼록한 convex형태일 때 가능한 방법입니다. 가령 다음과 같이 경력(독립변수)과 연봉(종속변수)이 주어진 데이터셋이 있고 수학적 모형은 y햇=b1x1을 사용하여 경력을 토대로 연봉을 예측하는 회귀문제일 때, MSE를 사용하여 비용함수를 구하게 됩니다.
경력(x) | 연봉(y) |
1 | 2 |
2 | 6 |
총 학습 데이터 개수는 2이므로 다음과 같이 MSE가 계산됩니다.
이를 통해 비용함수는 파라미터 b1에 대한 이차방정식이 되어, 다음 그림과 같이 그래프로 그릴 수도 있습니다.
이제는 비용함수 값을 최소화하는 지점을 구해야 합니다. 보통은 접선의 기울기를 사용하여, 기울기가 0이 되는 지점을 비용함수 값이 최소화가 되는 지점이라 간주합니다.
여기에서 비용함수가 최소화되는 지점은 접선의 기울기 값이 0이 되는 가장 볼록한 부분입니다. 이에 따라 b1에 대해 미분을 한 후 b1과 관련된 1차방정식을 풀면 비용함수를 최소화하는 파라미터 값을 구할 수 있습니다.
이에 따라 비용함수를 최소화하는 파라미터 b1은 14/5가 됩니다. 이렇게 미분값이 0이 되는 방정식을 정규방정식(normal equation)이라 합니다. 이렇게 구한 파라미터로 수학적 모형을 다시 정의하면 y= 14/5x1가 됩니다. 이를 통해 정답이 없는 정보에 대해서도 연봉을 예측할 수 있습니다.
2) 경사하강법
다만 정규 방정식의 경우 볼록한 부분이 하나인 부분에 대해서만 적용이 가능한 것이 단점입니다. 그러나 딥러닝 같은 경우 훨씬 복잡한 비용함수 형태들이 나옵니다. 때문에 더이상 정규 방정식을 쓸 수가 없습니다.
이에 따라 경사하강법이라는 새로운 방법을 도입할 수 있습니다. 경사하강법은 경사(gradient), 즉 접선의 미분값을 계속 하강(descent)하면서 기울기가 0이 되는 부분을 찾아갑니다. 때문에 정규방정식처럼 파라미터(bi)에 대한 방정식을 풀어 한번에 최적 파라미터 값을 구할 수는 없고, 기울기를 사용해 bi값을 조금씩 업데이트 해가며 최적 파라미터를 찾습니다.
경사하강법은 아래와 같이 특별한 공식을 사용합니다.
bi의 새로운 값은 bi 현재값에서 bi 현재값의 미분값에 에타를 곱한 값을 뺄셈하여 구합니다. 여기서 에타란 그림에서 n처럼 보이는 녀석인데, 학습률(learning rate)을 나타냅니다. 학습률은 한번에 업데이트를 얼마나 시킬 것인지를 결정하는 하이퍼파라미터이며, 보통 0~1사이의 값을 가집니다.
(1) 경사하강법의 예
정규 방정식 때 다루었던 예시를 경사하강법을 사용하여 풀어보겠습니다. 일단 예시가 연봉에 대해 예측하는 회귀 문제였으므로, 비용함수는 MSE를 사용하게 됩니다. 여기까지는 위와 동일합니다.
대신에 한번에 정규 방정식을 푸는 것이 아닌, 임의의 값으로 초기화(initializing)하여 미분을 계속 사용하여 파라미터를 업데이트하는 경사하강법을 적용합니다.
초기 파라미터는 15로 가정했습니다. 이에 따라 다음과 같이 경사하강법 식을 구할 수 있습니다.(학습률은 0.01로 가정합니다)
경사하강법 계산 결과, 새로운 파라미터 값은 14.39가 됩니다. 이 파라미터가 0에 가까워져 최소가 되는 값이 최적 파라미터를 갖는 지점입니다.
(2) 접선의 기울기에 따른 업데이트 방향
접선의 기울기가 양수이냐 음수이냐에 따라 업데이트 방향이 달라집니다. 접선의 기울기가 양수일 때에는 우->좌 순으로 경사하강법이 진행될 때입니다. 기울기가 늘 양수이기에, -에타*기울기는 결론적으로 음수가 되어 값이 감소되기에 업데이트 방향이 왼쪽을 향하게 되기 때문입니다. 접선의 기울기가 양수일 때에는 왼쪽으로 갈수록 기울기가 최소가 되는 최적 파라미터 값을 찾을 수 있습니다.
반대로 접선의 기울기가 음수일 경우, 좌 ->우 순으로 경사하강법이 진행됩니다. 접선의 기울기가 늘 음수이기에 결론적으로 -에타*기울기는 늘 양수가 되어 오른쪽으로 업데이트가 이루어지기 때문입니다. 오른쪽으로 가야 기울기가 최소가 되는 최적 파라미터 값이 도출됩니다.