brunch

You can make anything
by writing

C.S.Lewis

by 박경아 Sep 09. 2022

3. 머신러닝이 학습하는 법

[마케터를 위한 머신러닝, 딥러닝 사전]

머신러닝은 컴퓨터가 데이터로부터 배우는 것이라고 했다. 그리고 좀 더 구체적으로는 딥러닝도 마찬가지지만 컴퓨터가 잘하는 계산을 이용해 데이터를 가장 설명할 수 있는 모델의 가중치를 찾는 과정이라고 했다.


그렇다면 이번 글에서는 머신러닝이 데이터를 어떻게 학습해 최적의 가중치를 찾는 지 머신러닝의 학습방법에 대해 좀 더 자세히 알아보도록 하자.



머신러닝은 어떻게 학습을 할까?


얼마 전 Day Shift라는 넷플릭스 영화를 보는데 '학습'과 관련해 갑자기 툭하고 와 닺는 대사가 있었다. 악당 두목인 여자 뱀파이어가 말한다. "같은 걸 계속하면서 다른 결과를 기대하는 넌 바보냐?" 갑자기 나도 혹시 같은 짓을 계속하면서 다른 결과를 기대하고 있는 건 아닌지 나한테 하는 말처럼 느껴지기도 한다.


https://fullcirclecinema.com/2022/08/15/day-shift-movie-review/


그렇다. 학습이란 계속되는 경험에서 원하는 결과를 얻기 위해 조금씩 개선해 나가거나 새로운 방법을 찾거나 혹은 거기서 자신만의 생각이나 법칙 같은 것을 발견하는 그런 과정일 것이다. 머신러닝 역시 수많은 데이터로부터 학습하고 결과를 개선해 나가고 그것을 수식으로 일반화한다는 점에서 학습(learning)이라 부를 수 있을 것이다. 


아래와 같이 세 개의 데이터가 있을 때 과연 어떤 선이 가장 데이터들을 잘 나타내는 선일까?? 간단히 중학교 때 배운 일차함수를 떠올리면 y=wx+b에서 기울기와 절편을 특정짓기 위해서는 두 개의 임의의 점이든 한 개의 점과 한 개 절편이 필요하다. 하지만 미지수는 2개인데 오히려 이보다 많은 데이터가 주어지면 이 모든 점을 한번에 만족시키는 하나의 선을 긋기 힘들어진다.

데이터에 선긋기


여러가지 선을 그을 수 있겠지만 머신러닝은 x, y 데이터의 관계를 가장 잘 나타내는 적절한 가중치, 즉 w와 b를 찾기 위해 실제 y값과 예측한 y값의 차이가 최소가 되는 w와 b를 찾는다. 이 때 x와 y 데이터가 선형 관계를 가질 것이라고 가정하고 선형 모형(일차함수)을 사용했는데 이를 가설함수(Hypothesis fuction)라고 한다.


y=wx+b는 독립변수 x의 변화에 따른 종속변수 y 값의 변화를 나타낸 식인데 y 값에 영향을 미치는 요인이 여러 개라면 독립변수는 여러 개로 늘어날 수 있다. 예를 들어 강아지의 일일 급식량과 관련해 견종과 몸무게, 성별, 운동량 등 영향을 미치는 여러 요인들이 있다면 강아지 급식량과 이들 요인들의 관계를 아래와 같은 다중 선형회귀 방정식으로 나타낼 수 있을 것이다. 

가설함수의 예 (다중 선형회귀)


다시 원래의 단순한 가설함수로 돌아가 최적의 w와 b를 찾기 위해 w와 b의 변화에 따라 y 예측값과 실제 y값의 차이의 합 또는 평균을 나타내는 것이 손실함수(Loss function)이다. 쉽게 말해 특정 w와 b 값을 정해 식을 만들고 거기에 x값들을 하나씩 넣었을 때 나오는 예측 y^값과 실제 y값의 차이를 손실로 보는 것이다. 그리고 이 손실들의 합 또는 평균이 최소화되는 w와 b를 찾는다.


n개의 데이터가 있을 때 손실함수 (MSE)


예를 들어, 강아지 몸무게와 그에 따른 일일 급식량이라는 x, y 데이터 쌍이 있다면 y=wx+b에서 절편을 없애고 더 단순화한 y=wx에 임의의 w값에서 시작해 실제 w값을 조금씩 바꿔가면서 x값을 넣어 예측한 y^값과 실제 y값의 차이의 평균 제곱합을 그래프로 나타내면 아래로 볼록한 2차함수 모양을 띈다. y와 y^의 차이는 음수일 수도 있기에 모든 오차를 제곱해 이를 더하고 데이터 개수로 나눈 평균 제곱오차(MSE, Mean Squared Error)를 손실함수로 사용했다. 참고로 모든 오차의 절대값을 더하고 데이터 개수로 나눈 평균 절대오차(MAE, Mean Absolute Error)라는 것도 있다.

w에 따른 손실함수의 변화


이제 w값에 따라 변화하는 손실함수를 정했다면 이 값(손실)이 최소가 될 때 w를 찾아보자. 단순히 위와 같은 2차 함수의 최소값을 찾기 위해서라면 2차함수를 미분해서 기울기가 0이 될 때 w를 찾으면 될 것이다. 하지만 실제 데이터는 앞서 다중회귀 방정식처럼 독립변수가 3개, 10개 혹은 100개 이상으로 우리가 최대 시각적으로 나타낼 수 3차원을 넘어설 것이고, 그 손실함수 역시 어떤 모양을 나타낼 지 상상하기 어렵다. 


독립변수 2개일 때 손실함수는 이런 모양을 띌 것이다.


암튼 어떤 모양일지 짐작 안가는 이 손실함수의 최소값은 나중에 데이터를 다루면 자연히 익혀는 개념이지만 벡터와 행렬의 연산을 이용해 손실함수의 미분 벡터가 0이 되는 가중치 벡터를 한 번에 구할 수 있다. 최소자승법(OLS, Ordinary Least Squares)이라고 하는데 인간이라면 벡터의 행렬곱을 일일히 계산해야겠지만 컴퓨터는 넘파이 벡터 연산을 통해서 한 번에 딱! 구해낼 수 있다. 


손실함수의 최소값을 구하는 또 다른 방법으로는 바로 어떻게 생긴지 상상도 안되는 다차원의 손실함수 공간을 조금씩 조금씩 기울기가 완만해지는 곳으로 내려와서 최소값을 찾아내려가는 방법이 있다. 이를 경사하강법(Gradient Decent)라고 하는데 미분값의 절대 크기가 점점 줄어드는 방향으로 내려가는 것을 의미한다. 흔히들 경사하강법을 길이 전혀 안보이고 어딘지 모르는 낯선 산속에서 여하튼 낮은 곳을 향해 계속해서 내려가는 방법에 비유하는데, 머신러닝에서는 이를 최적화 함수 혹은 최적화 알고리즘이라고 한다. 


그럼 굳이 넘파이 연산을 해서 가중치를 구하면 되지 왜 경사하강법을 쓰는 걸까? 머신러닝 특히 딥러닝은 수십, 수백만의 데이터셋을 다루고 이들의 벡터 연산을 한 번에 마치려고 하면 컴퓨터가 작동하지 않거나 시간이 얼마나 걸릴지 모르겠다. 경사하강법은 데이터를 전체 혹은 그룹으로 혹은 하나씩 학습해서 가중치를 조금씩 바꿔 나가며 손실함수가 최소가 되는 최적의 가중치를 찾아나가는 방법으로 대량의 데이터셋에도 작동하고 컴퓨터가 잘하는 계산을 여러 번 빨리 반복해 찾는 방법이기도 하다. 나중에 보면 알겠지만 이 경사하강법 역시 여러가지 기법들이 있다. 



머신러닝 모델링의 목적은 데이터 패턴을 일반화하는 것


머신러닝이 학습하는 과정을 가설함수와 비용함수, 최적화함수라는 3가지 측면에서 살펴보았다. 많은 머신러닝 알고리즘들이 각각의 가설, 비용, 최적화 함수를 가지고 있으며 새로운 머신러닝 알고리즘을 만나게 된다면 이러한 관점에서 이해해 보는 것이 도움이 될 것이라 생각한다. 단순하게 보이는 선형과 비선형 함수들을 깊이 쌓아놓은 딥러닝 역시 결국은 각각의 태스크에 맞는 손실함수와 최적화 함수를 거쳐 학습하게 된다. 


마지막으로 정리를 한 번 해보자. 그럼 왜 알고리즘의 최적의 가중치를 찾는 것일까? 가설-비용- 최적화 함수를 통해 최적의 가중치를 찾았다면 이제 가설함수가 완성되고 여기에 새로운 테스트 데이터 x를 넣어 y를 예측할 수 있기 때문이다. 예를 들어 고객의 구매확률에 영향을 미치는 요인들과 그에 따른 구매확률을 예측하는 수식을 도출했다면 새로운 고객의 데이터가 들어왔을 때 그 고객의 구매확률을 예측할 수 있을 것이다. 


이 때 예측을 잘하기 위해서는 학습하는 데이터의 양도 중요하고 어떤 알고리즘이 적합한 지 테스트해 보는 것도 중요하다. 결국 머신러닝 모델링은 데이터 패턴을 가장 잘 일반화(Generalize)할 수 있는 모델과 그 가중치를 찾는 과정이라 할 수 있다. 





* 더 읽어보면 좋은 자료

1. 딥러닝을 이용한 자연어처리 입문 - 머신러닝이란?

2. 딥러닝을 이용한 자연어처리 입문 - 선형회귀

3. 데이터 사이언스 스쿨 - 선형회귀분석의 기초


                    



                    



브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari