1. What is the Machine Learning?

머신러닝을 제대로 배워보기로 했다. 관심은 있었지만 깔짝깔짝 건드리다가, 이번에 수업도 듣는 김에 약간의 시간을 써서 수업 정리 겸, 나중에 강의에 써먹을 내용 사전 준비 겸…

그렇다면 머신러닝이 일단 뭐냐? 정의는 역시 위키피디아.

A field of computer science that gives computers the ability to learn without being explicitly programmed.


기존의 컴퓨터 기술들이 사람들이 직접 컴퓨터에게 데이터를 가지고 무엇을 어떻게 할지를 알려주어 예상한 결과를 추출하는 것이었다면, 머신러닝은 컴퓨터에게 데이터와 그 데이터를 분석 방법을 던져주고, 예상한, 혹은 예상하지 못한 결과를 컴퓨터가 알아내도록 하는 것이라고 할 수 있다.

이러한 학습과정을 컴퓨터(기계)가 하기 때문에 우리는 이를 기계 학습(Machine Learning)이라고 한다. 그리고 요즘 참 핫하지.

예를 들어보자.

alt text

위 그래프1에서 각 점들을 입력받아, 러닝 과정을 통해 컴퓨터가 붉은 점선을 출력할 수 있도록 하는 것이 아주 간단한 머신 러닝이라 할 수 있다. (이 예는 regression(회귀분석)이다.)

사실 컴퓨터에게 이것을 찾아내게 하는 것은 상당히 어려운 일이다. 그런데 요즘은 각종 머신러닝 패키지들이 워낙 잘 나와서 (특히 R과 Python), 사용자는 아주 간단한 이론과 어떤 경우에 무엇을 사용해야 하는지만 이해하고 있으면 누구든 머신러닝을 통해 뭔가를 해볼 수가 있다.

그럼에도 불구하고, 머신러닝을 제대로 응용하는 것은 여전히 간단하지 않다. 위의 예처럼 몇 개의 데이터가 아니라 수백, 수천만개의 데이터를 분석하고자 할 때, 모든 데이터를 다 검토할 수 없기 때문이다. 따라서 데이터의 샘플을 뽑아 분석하게 되는데, 컴퓨팅 파워가 허락하는 선에서 어느 정도의 샘플을 어떻게 뽑아서 기계에게 학습시킬 것인지가 또 관건이 된다.

샘플이 결과의 왜곡을 불러일으키는 예.

alt text

위 그래프에서 보듯 만약 추출한 샘플이 전체 입력 분포의 일부만 대표한다면 컴퓨터는 잘못된 예측 결과를 보여주게 된다. 물론 확률적으로 저렇게 데이터를 뽑아낼 가능성은 낮지만, 어떤식으로든 샘플은 전체 데이터와 다를 수 밖에 없다. 그래서 ‘샘플을 어떻게 추출할 것인가?’에 대해서도 고민해야 하는 것. 컴퓨터가 러닝을 잘 하도록 하기 위해서는 좋은 샘플 추출을 위한 방법들뿐만 아니라, 실제 수집된 데이터의 적절한 정제를 통해 모델에 입력될 수 있는 데이터의 생성, 적절한 모델의 선택, 모델에 넣을 적절한 파라미터의 선택 등 다양한 점들을 고려해야 하기 때문에 어렵다.

하지만 그만큼 재미있고, 유용하다. 그러니 공부해봄직 하다.

2. Key concepts and terms in ML

이 포스팅의 나머지 부분에서는 머신러닝의 주요 개념 및 용어를 정리하려 한다. 안그래도 수학에 취약한데 자꾸 statistics, linear algebra에 더해 기본적인 머신러닝 용어들까지 여기저기서 갑작스레 튀어나오니 처음 공부하는 사람은 쉽게 헷갈릴 수 있다. 실제로 그런 사람들도 많고…

우선 머신러닝은 크게 supervised learning(지도학습)과 unsupervised learning(비지도 학습)으로 나뉜다.

  • supervised learning: 결과 값을 알려주고 그 결과 값과 유사한 값을 도출하는 방향으로 러닝을 유도하는 것.
  • unsupervised learning: 결과 값을 알려주지 않고 주어진 데이터를 통해 값을 예측하도록 하는 것.

이게 특별히 어려운 개념도 아니고, 이에 대해서 좋은 글들이 워낙 많으니 검색 ㄱㄱ.
검색이 귀찮은 사람을 위해 supervised와 unsupervised learning에 대한 좋은 링크 하나. (한국어 번역본도 있다! 심지어 다른 머신러닝 이해하는데도 좋다.. 능력자)

그래프를 보면서 용어를 연구해보자. 다음의 그래프 내의 각 번호는 아래 번호들과 매칭된다. (각 번호 아랫단계로 넣은 항목(-)들은 하위 항목이 아니라, 그래프에 보이지는 않지만 함께/구분하며 이해하면 좋은 용어들이다.)

alt text

1. Data / Stimulus / Input

말 그대로 입력받은 데이터다. 쉽지.

  • Attributes: 입력 값의 속성. 이해를 돕기 위해 X가 값을 하나만 갖고 있는 것을 가정했지만, 대부분의 경우 입력 데이터는 다양하다. 가령 X가 맛, Y가 사람들이 선호하는 정도라고 하고, 두 가지의 관계를 러닝하고 싶다고 한다면, X는 매운 맛, 단 맛, 신 맛 등 다양한 종류의 세부 맛들을 가질 것이다. 여기서 각각의 맛이 하나의 attribute이다.
  • Dimension: 이 때 각각의 맛은 하나의 차원이 된다. 즉, 입력 데이터가 X라면 attribute로 x1(매운 맛), x2(단 맛), x3(신 맛), … 등을 가지게 되는 것이다.

2. Response / Output

입력이 함수를 거친 후 나와야 하는 출력. 입력 값에 대한 출력값이지만, 머신러닝 자체의 출력은 아니다. 그럼 머신러닝의 출력은? 설계를 어떻게 하느냐에 따라 모델이 될 수도 있고, 추가 입력에 대한 출력 값이 될 수도 있고.

3. Hypothesis

가설, 즉 주어진 입력들에 해당하는 출력(에 가까운 값)을 구할 수 있는 함수. 목표 함수를 찾는 과정에서 계속 실험해보는 대상이다.

  • Target function: 목표 함수, 즉 구하고자 하는 답이다. supervised learning(지도학습)에서 러닝을 유도할 때 사용하는 중요한 개념으로, Target function을 찾아내기 위해 많은 가설을 실험해보고 목표 함수와 오차율이 가장 작은 가설을 택하게 된다.
  • Model: 가설과 거의 동일한 의미로 쓰인다. 조금 더 큰 의미로 쓰일 때에는, hypothesis들을 통칭하는 형태, 즉 decision tree model과 같은 방식으로 쓰인다. 머신 러닝 외의 분야에서는 보통 다르게 쓰이므로 유의.
  • classifier / regressor: 우리의 가설/모델이 classification을 하면 classifier, regression을 하면 regressor
  • assumption: 가설의 기본적인 가정들. 원래 데이터, 환경, 오차 등에 대한 잘못된 가정을 바탕으로 가설을 세운다면, 가설을 아무리 테스트해도 좋은 학습 결과를 얻을 수 없다.(e.g. 이 데이터들은 선형적인 분포를 가질 것이라고 가정하고 linear regression만 죽어라 돌렸는데, 사실은 3차 함수에 근접한 분포를 보인다면..? 똥망)

4. Error

오차. 오차에는 여러가지가 있다. 나중에 기회되면 관련해서 포스팅을 하려고 하나, 그 전에는 링크 참조1. (사실 링크가 더 좋을 수도)

  • residual: 통계적으로 간단하게 말하자면, 모수의 오차가 error, 표본의 오차가 residual(잔차)(한국어로는 뭔가 굉장히 어색…) 위 링크 참조.
  • bias / variance: 편향과 분산. 이미 헷갈리고 있다거나 수학이라면 지긋지긋하다!라 한다면 지금 볼 필요는 없으나, 곧 꼭 나오는 중요한 개념. 그렇게 어렵지 않다. 링크 참조2.

  ※ 한 차원 위의 이야기: 위 그래프는 하나의 가설에 대한 결과를 보인 것이다. 즉, 여러 입력에 대해 하나의 가설로 평가하여 그에 대한 오차를 구한 결과를 표현한 것인데, 사실 머신러닝은 수많은 입력과 수많은 가설에 대해 계산을 반복하여 구한 최선의 결과를 사람에게 보여주는 것이다. 따라서 사람이 수많은 입력, 수많은 가설, ‘최선의 결과’에 대한 정의를 입력해주고, 어떤 종류의 모델을 사용할 것인지, 그 모델의 주요 변수들을 어떻게 정의할 것인지 결정해 주어야 한다.

5. Learner

Target function과 오차가 가장 적은 Hypothesis를 찾기 위해 설계된 프로그램. 보통 머신러닝을 이용해 만드는 프로그램/소스코드가 이 learner다.

  • parameter: 모델에서 사용할 변수들. 모델마다 다 다르다. 데이터의 훈련 세트나 테스트 세트를 어떻게 뽑아낼 것인지, 몇 번이나 러닝을 반복할 것인지 등이 포함. 러닝에서 어떤 모델을 사용할 지 선택했다면 그 모델의 변수를 어떻게 사용할지도 결정해주어야 한다. 일반적인 코딩에서의 파라미터를 생각하면 된다.
  • estimator: 각 변수를 사용했을 때 도출된 결과들을 어떻게 평가해서 최적의 결과를 도출할 것인가를 결정하는 평가도구. 이 역시 모델에 따라 다른데 오차를 최소화한다거나 최대값을 구한다거나 하는 방식으로 구현된다.
  • training set: 원래의 데이터에서 최적의 모델을 도출(training)하는데 사용하기 위해 뽑아낸 데이터들의 집합.
  • testing set / validation set: 트레이닝 세트로 도출한 모델을 테스트 하는데 사용하는 데이터들의 집합. 트레이닝/테스트 세트의 선정은 오차와도 밀접한 관련이 있다.


머신러닝을 제대로 시작하면서 용어 정립하는데 시간이 꽤 걸렸다. 시작부터 모든 걸 알 수는 없지만, 이 부분을 어느정도 클리어하고 다음 단계로 넘어간다면 시간을 좀 절약하는데 도움이 될 것 같다.


I acknowledge that contents of this posting is based on 2017 Fall EECS349 course by Prof. Bryan Pardo at Northwestern Universtiy. I post this for the learning purpose of myself.



  1. All graph in this post is taken from the slide in 2017 Fall EECS349 class at NU.