이번 포스트에서 다룰 내용은 가장 널리 이용되고 있고 가장 큰 비중을 차지하고 있는 오차기반의 머신러닝의 기법에 대한 내용이다. 유사도기반(2020/12/22 - [텐서플로우] - 기계학습의 종류 - 유사도 기반), 정보기반(2020/12/13 - [텐서플로우] - 기계학습의 종류 - 정보 기반), 확률기반(2021/01/10 - [텐서플로우] - 기계학습의 종류 - 확률기반)의 학습과 마찬가지로 오차기반의 학습 방법 역시 어떠한 목적(정답)에 다다르기 위한 최적 신경망(일종의 미분방정식)을 구하는 공통을 목표를 가지고 있지만 그 방법론에 있어 오차를 최소화하는 방식이다.
자 설명을 쉽게 하기 위해서 우선 가장 간단한 미분방정식인 단순선형회귀를 예로 들어보자.
특정 데이터셋에서 이 데이터의 특징을 가장 설명할 수 있는 Y = a + bX +e (a:상수, b:계수, e:error) 이라는 직선의 방정식을 구한다고 하자. 이때 Y' = a + bX 라는 방정식을 두고 이 직선과 실제 데이터 Y와의 잔차는 Y-Y' 이 된다. 이 잔차를 최소화하는 방법을 잔차제곱법이라고 하고 종속변수의 확률분포를 토대로 우도함수(Likelyhood)를 이용해서 구하는 방법을 최우추정법이라고 하는데 이번 포스트에서는 최소제곱법만 다룬다.
우선 잔차의 합을 구해야하는데 단순히 Y-Y' 을 sum 해버리면 경우에 따라 오차가 이미 0(혹은 0보다 적은 값)이 되어 버릴 수 있다. 그렇기 때문에 여기서 (Y-Y')^2 의 합을 이용해서 미지의 파라메터 a,b 를 구해야 하는데 이의 상세한 유도과정은 아래와 같다.
f(a,b) = sum{(Y-Y')^2} = sum{(Y-(a + bX))^2}
f'(a',b) = sum{-2(Y-(a + bX)} = 0
f'(a,b') = sum{-2X(Y-(a + bX)} = 0
위의 식과 같이 a,b 에 대해 각각 편미분한 값을 0으로 둔 미분방정식을 도출하고 이 두 방정식을 연립하여 풀면
a = sum{Yi} - b*sum{Xi}
b = n*sum{XiYi}-sum{Xi}*sum{Yi} / (n*sum{Xi^2} - sum{Xi}^2) (n:데이터의 갯수)
과 같이 이미 주어진 데이터인 X,Y에 대한 식으로 주어지기 때문에 a,b의 값을 어렵지 않게 구할 수 있다.
자 위의 풀이과정은 우리가 이미 알고 있는 공식에 의해 도출된 값이다. 이것을 그대로 코딩화하는 것도 그닥 어렵지는 않다. 다만 이러한 과정을 우리는 기계학습이라고 부르지는 않는다. 왜냐하면 학습이라고 하기 조금 애매하다. 그리고 만약 이러한 미분방정식을 이미 알고 있다고 하면 구태여 비싼 돈 들여서 GPU를 사고 빅데이터를 수집하고 인건비를 들여가며 머신러닝을 돌릴 필요가 없다. 우리가 실제 마주하는 여러가지 실전 문제들은 위의 과정처럼 단순 명료하지 않은 경우가 대부분이고 또한 그 움직임, 속성, 특성 등을 기술하는 closed solution 이 존재하지 않는 경우가 거의 대다수 이기 때문이다.
기계학습의 똑같은 문제에 대해 접근 방식을 조금 달리한다. 멍청한 기계는 인간처럼 경험적으로 알고 있는 공식이 없다. 즉 아주 단순무식하게 추론해야할 직선의 방정식이 주어지면 그냥 미지수에 대해 1,2,3,,,, 과 같이 무작위로 대입을 해보면서 그 값들의 조합이 실제의 관측치와 얼마나 오차가 발생하는가에 대해 기록하고 적정한 수준 즉 데이터셋을 통해 측정한 결과 가장 오차가 적은 지점(아래 그림의 빨간색 영역)에서의 미지수 조합을 채택하는 방식이다.
하지만 이러한 방식에도 한계가 있다. 실제 우리가 구하고자 하는 방정식의 모델이 단순한 선형모형이고 데이터셋의 크기가 그닥 크지 않을 경우에는 위와 같이 무작위 대입법을 통해서도 비교적 짧은 시간내에 원하는 결과를 도출할 수 있다. (슈퍼컴퓨터와 GPU가 받쳐준다면 더 빠르게) 그러나 만약 다항모형이라면 그것도 직선이 아닌 비선형 모형이라면? 그에 따라 가중치의 수도 늘어나기 때문에 고차원 가중치 공간을 다루어야 한다. (3차원 이상은 그림으로 그리기 어려워서 포기..ㄷㄷ)
하지만 여기서 포기할 순 없지. 만약 오차의 곡선이 아래로 볼록한 형태이고 전역 최소점을 가지고 있다고 한다면 다차원공간이라고 하더라도 임의의 한점에서 지도를 탐색하듯 오차등고선을 따라 움직이는 경사 하강법을 이용하게 된다. 또한 최소점에 접근하기 위해 SGD, ADAM, ADAGRAD 등과 같은 여러가지 방법론도 등장하게 된다. 그러나 슬프게도 여기서 또 하나 문제가 발생한다. 바로 임의의 한점이라는 단서가 붙었다. 더 슬픈 사실은 학습률이라는 개념도 추후에는 다루겠지만 이것은 경사를 하강할 때 얼마만큼 움직일 것인가를 정하는 파라메터이다.
가끔 나는 RNN, LSTM, GRU 등 여러가지로 다 학습해봤는데 예측 결과가 형편이 없어요. 라는 분들이 있다. 그렇다. 그럴 수 있다. 특히나 그 분석대상이 주가와 같이 상당한 무작위성을 포함한 확률적 변수라고 한다면 말이다. 그렇다. 머신러닝에 대한 이해도가 깊고 알고리즘 분석력이 뛰어나다고 해서 결코 퀀트를 잘 할수 없다.
왜? 이미 우리는 주가라는 불확실한 데이터를 다루고 있지만 합리적인 임의의 한점을 선택해야하고 경험적 직관에 따른 학습률도 선택해야한다. 이 매개변수를 선택함에 있어 이론적 근거? 현재까지는 찾아본바 없다. 우리는 통상 이러한 파라메터들을 하이퍼 파라메터라 부르는데 이름만 그럴싸하지 쉽게 말해서 뭘로 정하느냐에 따라서 그때 그때 다르다는 말이다.
그러면 주식데이터를 인공지능 학습에 이용하는 것은 의미가 없다? 필자의 생각은 꼭 그렇지 않다는 입장이다. 왜? 만약 하이퍼파라메터를 잘 못 선정했다고 치자. 그러나 입력데이터 셋의 정규화 및 데이터간의 인과관계에 대해 자신만의 철학과 통찰력에 따라 1차 가공을 수행했다면 국지적인 최소값이 정답으로 도출되었다고 하더라도 그 최소값은 전역 최소값과 그리 멀지 않은 값이거나 혹은 고차원 공간에서 또 다른 최소값일 확률이 높기 때문이지.
강화학습도 좋고, 시계열 예측도 좋고, 분류를 하던 예측을 하던 간에 데이터 간의 인과관계를 무시한 채 무조건 빅데이터만 때려 박아넣고 머신러닝을 돌렸다고 결코 좋아할 일은 아니다. 물론 실계좌로 돌려서 깨져보면 알아서 정신이 들테니 그닥 말리고 싶지는 않다.
'텐서플로우' 카테고리의 다른 글
기계학습의 종류 - 확률기반 (0) | 2021.01.10 |
---|---|
기계학습의 종류 - 유사도 기반 (0) | 2020.12.22 |
기계학습의 종류 - 정보 기반 (0) | 2020.12.13 |
데이터구조 : Numpy 와 Pandas (0) | 2020.09.15 |
텐서플로우란? (0) | 2020.08.28 |
댓글