딥러닝, 머신러닝, 차이가 무엇인가

실무에서의 데이터분석 분야는, 산업별, 고객별, 상황별로 몇가지로 딱 나눠보기가 힘들다. 웨이퍼 Anomaly 예측, 공항의 수요 예측, 공휴일의 제품 예측, 텍스트 분석을 통한 고객 분류, 고객 군집화 등.

그러나 무언가를 예측해야 하는 작업을 알고리즘적으로 적용해보면, 크게 두세개의 메인스트림이 있다고 할수 있을것같다.

  • 딥러닝이 쓰이는 이미지류
  • 기존의 전통적인 방법이 주가 되는 테이블류의 데이터

보통 딥러닝이 머신러닝의 일종이라는 쉬운 설명, 혹은 feature extraction이 생략된 러닝이라는 설명이 따르는데, 사실 잘 따지고 보면 둘은 조금 특질이 다르다.

딥러닝은 전처리일뿐..

사실 둘은 위상이 다르다. 딥러닝은 보통 feature extraction하는 부분이 메인이라 할수 있고, 정작 데이터를 다 합쳐서 예측하는 부분은 head에서의 인공신경망이 대부분이다. 즉 어떻게 보면 feature engineering의 단계, 피처를 골라내는 전처리와 동일한 의미일수 있다.

컨볼루션 필터, 위에서 아래로 해상도를 바꾸면서 이것저것 합치는 것들, 모두 feature를 잘 뽑아내기 위한 사전단계일 뿐이다. 이 feature는 여러 레이어를 겹치면서 1024 x 1024 이미지가 5 x 5 x 10000 이런식의 10000개의 feature가 골라내지는것이다.

따라서, 딥러닝은 이미지나 음성 등 분명한 패턴은 존재하는데 그 이유가 무엇인지 골라내기가 애매할 때 쓴다고 생각할 수 있다. 예를들어 성별을 구별하는 문제를 생각해보자. 사람의 경우 이성의 얼굴형태나 실루엣만 잠깐 봐도 대부분은 기가막히게 이성인지 동성인지 잘 골라낸다. 그렇다면 이를 잘 구별하게 해주는 요인을 딱 열거해보라면? 눈썹의 길이? 턱의 위치? 입술의 길이? 뽑아내기가 애매하다. 이러한 경우에 딥러닝에 맡기면, 정확히 어떤 로직에 의해 훈련되는지는 바로 알기 힘들지만, 여튼 이후 분류 알고리즘이 신경망에 넣을정도로 예쁘게 feature 를 골라내준다.

텍스트 분석은 어떤가?

텍스트도 마찬가지로 분명한 패턴이 있다. 그러기에 문자가 있고 의사소통이 있다. 다만, 그 패턴이 너무 애매하고 컨텍스트를 파악하는 능력이 중요하다. ‘감’이 중요하다는건데, 그 감이 뭔지 고려하지 않고 번역등을 시도했다가는 엉뚱한 번역이 되기 십상이다. 텍스트분석에는 Embedding이라는 표현을 많이 듣게 되는데, 컨텍스트에 맞게 단어를 숫자로 옮기는 과정이다. 이 자체가 뭔가 분류를 하지는 않는다. 고로, feature extraction과정인것이다. 숫자가 정확히 무엇을 의미하는지는 알지 못한다. 하지만 우리가 바로 말하기 어려운 문맥과 맥락을 어떤방식으로든 표현했다고 생각해볼수는 있다.

디시전 트리류는 이미 feature가 예쁘게 골라져 있을때 쓰기 편하다.

정말 많은 경우의 실무 데이터들이 모조리 이 분류로 떨어지는데, 디시전 트리 기반이 되는 부스팅은 feature는 모두 예쁘게 골라져 있다고 가정한 상태에서 모델 훈련이 시작된다. 회사 실무에서 볼수 있는 데이터들은 오라클 데이터나 여튼 어떠한 데이터베이스에 테이블 형태로 잘 담겨져 있는 형태가 많다. 그걸 고려해서 데이터 설계자들이 테이블을 만들때 열심히 그림도 그려가며 유용한 column을 나열하고 이에따라 데이터들을 열심히 넣게 되었다.

이 설계자들은 어떤사람들인가? 대부분 20년동안 테이블만 만드시는 DBA분들이 있는데, 테이블 설계의 장인이 벌써 feature extraction을 용도에 맞게 잘 해놓았다고도 표현할 수 있다. 물론 gubun과 같은 애매한 단어로 예비 컬럼을 대충쓰다가 섞이는 경우는 있지만, 그럼에도 불구하고 그것또한 규칙은 있게 집어넣어 놓았다.

이러한 경우 딥러닝은 전혀 필요가 없다. 우리가 잘 알려져 있는 컬럼을 무작위로 흩어 놓아 보기 어렵게 한 다음에 다시한번 이를 추출하는 작업을 해야하는가? 이럴 필요가 전혀 없다.

시계열은?

다시한번 생각해보면, . timestamp가 찍혀져 있으면 시계열이라고도 볼수 있지만, 여튼 테이블 형태이다. 단순히 시간에 따른 value의 움직임이 보이는 시계열은 눈에 보이는 패턴이 없으면 기존 이론등(ARIMA, Holt-Winters)에 fitting하기 힘들다. 우리가 관심가지는 시계열 데이터는 사실 굉장히 많은 x변수를 어떻게 처리하냐가 관건이기 때문에, 결국에는 짜내려면 부스팅류를 찾게 된다.

딥러닝을 이용해 피처를 추출 하고, 부스팅을 써서 정확도를 올릴수 있지 않을까?

좋은 시도이긴한데, 정확도는 FCN(Full connected neural network)보다 보통은 떨어진다. 일단 트리기반 부스팅은 결정경계(Decision Boundary)가 우둘투둘하기 때문에 훈련시 있었던 데이터 경계 밖의 보지않은 데이터에 대해서는 쥐약이다. 부스팅의 장점은 스케일링 등이 필요없이 막 집어넣을 수 있고, 범주형 데이터 (Categorical) 또한 취급하기가 너무 쉬운데에 있다. 오라클 DB에 들어가는 데이터는 까보면 엄청나게 많은 범주형 데이터들이 있다. 따라서, 인공신경망이 우세하다.

테이블 데이터에 인공신경망은?

상당히 귀찮은 과정이 있는데, 스케일링을 정말 잘해야 한다는것과 생각보다 많은 파라미터 세팅이 필요하다는 것이다. 부스팅의 경우 대충 iteration만 조절하면 다른 파라미터들은 어떻게 넣든 결국에는 비슷비슷하다.

대부분의 경우, 데이터 feature가 딱딱 나눠지는 테이블 데이터류는 인공신경망(전처리가 잘되었어도)이 부스팅보다 정확도가 소폭 떨어진다.

결론

  • feature가 애매한 경우(이미지, 음성) – 딥러닝 (CNN)
  • feature가 순서가 있고 패턴이 있는데 애매한 경우 (텍스트) – 딥러닝 (RNN)
  • feature가 예쁘게 생긴 테이블이나 꽤 데이터가 많고 전처리가 복잡할 것같은 경우 – 디시전트리를 베이스로 하는 앙상블 방법 (부스팅 혹은 랜덤포레스트, 설명력을 높이려면 단일의 디시전트리)
  • feature간의 상관성이 적고 설명력이 중요한 경우 – 회귀 등.

댓글 남기기