기계 학습

From Hidden Wiki
(Redirected from 기계학습)
Jump to navigation Jump to search

개요

영어: Machine Learning (머신 러닝)

인공지능의 대표적인 방법이었던 전문가 시스템은 사람이 직접 많은 수의 규칙을 집어넣는 것을 전제로 하였다. 이같은 접근 방법은 과학에 기반한 학문들, 예를들어 의학이나 생물 분야에서는 큰 역할을 할 수 있었다. 의사들의 진단을 도와주는 전문가 시스템에 기반한 프로그램을 생각해보면 인간이 지금까지 발견한 의학적인 규칙들을 데이터베이스화 하여 등록시켜주면 되는 것이었다.

하지만 시간이 지남에 따라 세상은 사람조차 스스로 어떻게 작동되는지 아직 정확히 모르는 영역을 구현하는 프로그램을 요구하기 시작했다. 대표적으로 음성인식을 들 수 있겠다. 애플시리 같은 프로그램을 만든다고 생각해보자. 일단 사람이 어떤 문장을 말했는지 소리 → 알파벳으로 알아들을 수 있어야 하며, 알파벳으로 이루어진 그 문장이 어떠한 의미를 갖는지 해석할 수 있어야 한다. 이 같은 시스템은 사람이 하나하나 규칙을 만들어 준다고 형성될 수 있는 것이 아니다. 소리 같은 경우에는 컴퓨터PCM의 형태로 전달이 되는데 대체로 이는 1초에 최소 나무위키 항목 하나 분량의 데이터를 포함하고 있다. 절대로 "열이 많이 나고 오한이 있고 구토증상이 있으므로 독감이다"라는 쉬운 조건부로 해결될 문제가 아닌 것이다. 전체적인(오차가 존재하며 거대한) 데이터를 보고 그것이 의미하는 정보들을 명확히 짚어낼 줄 알아야 한다.

그리하여 나온 방법이 기계학습이다. 이름에서 알 수 있듯이 기계학습은 기계, 즉 컴퓨터를 인간처럼 학습시켜 스스로 규칙을 형성할 수 있지 않을까 하는 시도에서 비롯되었다. 주로 통계적인 접근 방법을 사용하는데, 위의 독감의 예와 반대로 "독감이 걸린 사람은 대부분 열이 많이 나고 오한이 있고 구토 증상이 있었다"라는 통계에 기반하여 독감을 진단하는 것이다. 예시를 보면 알 수 있듯이 이는 인간이 하는 추론 방식과 유사하고 매우 강력하다.

아주 간단히 말하자면, 그냥 인간의 사고를 효율적인 계산 및 처리를 바라보는 관점에서부터 접근하여 모방하는 방법의 또다른 줄기[* 기억하고 축약하며 깨우쳐 이해하기 (기록하고 읽어들이며 비교하고 알아내기)]라고 나타낼 수 있겠다. ~~사실 조건을 맞춰서 컴퓨터를 돌리면 인간과 흡사한 '결과물'을 내기가 의외로 쉽다… 단적인 예시는 체스나 바둑이다. 실제로 인간처럼 '이해'했다고 할 수는 없지만.~~ ~~결국에는 성능 문제지.~~

지금에 이르러선 거의 모든 체계(인공지능, 검색보완, 맞춤형광고, 판매관리, 기계 조종, 인력개편 등등)는 빠르고 만족스러운 결과를 선보이기 위해 기계학습의 방법론에 의존하는 추세이다.

필수과목

수학/통계학이 적어도 15학점 가까운 분량으로 필요하다.

* 기초적인 통계학: 확률 '분포' 란 무엇이며, 그에 따른 계산을 할 때 왜 적분을 써야 하며 하는가, 베이즈 법칙이란 무엇인가 등의 지극히 기초적인 배경 정도는 반드시 필요하다. 
* 선형대수학: 고차원의 숫적 데이터를 다루고, 따라서 행렬이 필연적으로 등장한다. 
* 수치해석 : 비선형 모델 및 소숫점을 컴퓨터로 처리하는 과정 그 자체와 관련된 이러저러한 문제들에 대해 반드시 알아야 한다.
* 수열: 확률 그래프 모델이라는 물건이 등장하는데, 여기서 등장하는 그래프는 엑셀 그래프가 아니고 이산수학에서 말하는 그래프다.
* 미적분학 : 다변수함수의 미적분까지는 반드시 공부해야 한다. 또, 테일러 급수와 그를 이용한 함수 근사값 구하기도 반드시 알아야 한다. 기계학습에서 많이 써먹는 것 중 하나인 경사 하강법에 이게 등장하기 때문. 그 외 라그랑주 승수법도 다뤄야 할 때가 있는데, 이것 역시 다변수함수 미적분학은 가야 나온다. 또, 계속 미분을 하면 왜 기울기가 0이 될 수도 있는가 하는 것도 다변수함수 미적분학을 공부하면 알 수 있다.
* 병렬 및 분산 시스템: 어마어마한 양의 선형대수학 계산을 효율적으로 하는 데에 이만한 게 없다. 따라서 필수적으로 알아둬야 한다. 

선택과목

* 통계역학 : 호필드 망, 볼츠만 기계 등 재귀신경망 기법들의 원리가 대부분 여기서 힌트를 얻어서 만들어졌다.
* 최적화: 대부분의 학습방법이란 게 주어진 데이터에 맞춰서 오차를 최소화하면서 회귀 함수를 만드는 것인데, 이 때 필연적으로 최적화와 관련된 이야기가 반드시 등장한다. 미적분과 더불어서 경사 하강법, 그리고 인공신경망의 학습과정과 관련된 문제들이 정확히 무슨 이야기인지 그 이해를 보충하는 데에 도움이 된다.
* 어느 정도 이상의 통계학: 웬만한 기계학습 관련 기본기들은 사실 통계학에서 쓰던 것들이나 통계학자들이 처음 개발한 것들을 응용한 것이며, 그 인공신경망도 통계학적인 관점에서 볼때는 아주 크고 복잡한 혼합 회귀모형의 일종에 지나지 않는다. 통계학에서 퍼온 것들: 회귀분석, 다변량 분석, 군집 분석, 확률 분포 추정, 마르코프/은닉 마르코프 모델, 서포트 벡터 머신, 베이즈 정리, 베이즈 확률론/베이지언 통계학. 단, 해당 주제들에 대해 깊게 배우다보면 어느덧 통계학을 복수전공하고 있는 자신을 보게 될 지도 모른다.
* 변분법: 베이즈 확률론에 기반한 알고리즘들을 쓰다 보면 여러가지 의미로 어마어마한 적분들의 근사값을 어떻게든 구해야 하는데, 이 때 쓰이는 방법 중에 하나가 범함수를 이용한 것이며, 범함수를 다루려면 변분법을 알아야 한다.
* 함수해석학: 기하 기반의 알고리즘들을 공부하다보면 내적 공간, 바나흐 공간, 힐버트 공간 등에 대한 이야기가 필연적으로 나오며, SVM의 경우 '커널 기법'이라는 것이 사용되는데, 이 모든 것에 대한 이론적 근간이 바로 함수해석학에 있다. 단, 소볼레프 공간 등에 대해 배울 정도로 많이 배울 필요는 없고 [* 함수해석학 과목들이 대개 오만가지 이름 하에 여러개가 개설되어 있는 경우가 많으니 진도표를 잘 보고 수강해야 한다. 진도 막판에 소볼레프 공간 이야기를 맛보기로 하는 정도라면 모를까, 처음부터 그런 이야기를 하면서 베소프 공간 같은 이야기를 하고 있다면 그건 편미분방정식 연구를 준비하는 수학 대학원생들을 위한 과목이다. ], 어지간한 물리학도들이나 공학도들이 하는 정도로만 하면 된다.
* 측도론: 확률이란 무엇인가를 근본적으로 탐구하게 된다.

또, 기계학습 알고리즘을 배웠을 때 그것을 구현하는 데 필요한 프로그래밍 언어도 알아야 한다. 대표적으로 3가지를 들자면, R 언어는 현재 가장 많이 쓰이는 통계 기반 프로그래밍 언어이다. R 언어의 강점은 간단한 코딩으로 충분히 인지 가능할 정도로 시각화된 데이터를 얻어내는 것에 있다. 이를 통해 개발 파이프라인을 단축시키는데 많은 기여를 한다. 그리고, 기계학습 기본기들이 죄다 통계학을 기반으로 한 것을 감안한다면 R이 많이 쓰이는 것이 납득갈 것이다. 또, 파이썬은 R 언어에 이어 이 분야에서 두 번째로 많이 쓰이는 언어이며, numpy 라이브러리를 써서 기계학습 알고리즘을 코딩하도록 도와준다. 비록 R 언어보다 코딩에 다소 시간이 걸리지만, 파이썬 언어의 대표적 장점인 이식성이 있어 다양한 분야에서 사용되어지며, Scipy 라이브러리 등을 추가하여 내부 변수의 계산을 하거나 Cython 등을 이용하여 알고리즘의 속도를 빠르게 하기에도 용이하다. 마지막으로 MATLAB이 있는데 아무래도 수학적 정밀도가 어느 정도 보장되는 언어이다보니 주로 연구실 등에서 사용된다. 기계학습에서 쓰이는 프로그래밍은 일반적으로 흔히 생각하는 객체지향 프로그램보다는 엄청난 스케일의 과학컴퓨팅 위주인데, 바로 이 점 때문에 아예 해당 분야에 최적화되어있는 MATLAB이나 해당 라이브러리들이 원숙하게 개발되어 있는 파이썬을 쓰는 것이다. 또, 포트란이나 최근에 뜨고 있는 줄리아 (Julia) 같이 과학컴퓨팅에 최적화되어 있는 프로그래밍 언어들을 쓰는 것도 고려해볼 수 있다.

IT분야가 다 그렇듯 알고리즘은 소수의 천재가 만들어내고 대부분의 엔지니어는 그것들을 적재적소에 활용하는 역할을 맡는다. 알려진 알고리즘들은 이미 함수로 구현까지 끝나 있다. 따라서 이 문서를 보고 있을 대부분의 개발자들은 각 알고리즘의 장점과 단점을 외우고 호출방식을 익히는 것이 실용적인 면에서 훨씬 중요하다.

복수전공 및 부전공

장래에 기계학습 그 자체와 관련 연구분야의 최전선에 뛰어들 생각이 있으면 참고할 것.

요즘 기계학습 연구자들 중에는 아예 물리학 전공이나 통계학 전공 출신도 종종 보인다. 아니, 전산학자들이 먼저 그 연구를 시작한 것과는 별개로, 해당 분야에 대해 공부하는 데에 적합한 배경지식은 물리학과 통계학을 공부하며 더 잘 배울 수 있다고 봐도 된다.

당장 호필드 망, 볼츠만 기계 등이 통계역학을 섭렵한 물리학자들이 결정적인 공헌을 했다. 변분법 역시 원래 고전역학과 광학에서 그 동기를 찾을 수 있다. 기계학습에 쓰이는 기초적인 정도의 함수해석학도 양자역학 덕분에 오늘날 그 위상을 차지한 것이다.

통계학의 경우, 회귀 분석은 물론이고, '비지도 학습'이란 이름 하에 퍼져있는 군집 분석 및 확률 분포 추정, 그리고 요즈음 '통계학습'이라는 이름하에 판을 치고 있는 베이즈 통계학 모두 통계학 3~4학년은 가야 제대로 배운다.

따라서 물리학/전산학 복수전공에 통계학 부전공을 권한다. 미적분과 기초 통계학은 물론이고, 변분법, 통계역학, 함수해석학, 그리고 컴퓨터 비전 쪽으로 갈 경우 이미지 처리 그 자체에 종종 쓰이는 어느 정도 이상의 미분기하학 등은 모두 물리학을 공부하면서 아주 자연스럽게 배울 수 있기 때문이다 [* 미분기하학은 일반 상대성 이론까지 갈 것도 없이 고전역학과 전자기학을 공부하는 과정에서 배울 수 있다. ]. 기계학습 그 자체를 배우는 데에 도움이 되는 통계학 분야들은 과목을 잘 고른 통계학 부전공 과정으로 공부하면 된다.

정의

기계학습의 가장 그럴듯한 정의는 다음과 같다. 이는 "Machine Learning" 책을 지은 CMU교수 Tom M. Mitchell이 제시한 것이다.

> "A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P, if its performance at tasks in T, as measured by P, improves with experience E"

즉, 어떠한 작업 T에 대해 꾸준한 경험 E를 통하여 그 T에 대한 성능 P를 높이는 것, 이것이 기계학습이라고 할 수 있다.

정의에서 알 수 있듯이, 기계학습에서 가장 중요한 것은 E에 해당하는 데이터이다. 좋은 품질의 데이터를 많이 가지고 있다면 보다 높은 성능을 끌어낼 수 있다.

학습 종류에 따른 분류

기계학습 문제들을 학습 종류에 따라 3가지로 나눌 수 있다.

특히, 레이블(label)의 유무에 따라 지도학습과 비지도학습으로 나뉘는데, 여기서 레이블이란, 학습 데이터의 속성을 무엇을 분석할 지에 따라 정의되는 데이터를 뜻한다.

* 지도 학습(Supervised Learning): 사람이 교사로서 각각의 입력(x)에 대해 레이블(y)을 달아놓은 데이터를 컴퓨터에 주면 컴퓨터가 그것을 학습하는 것이다. 사람이 직접 개입하므로 정확도가 높은 데이터를 사용할 수 있다는 장점이 있다. 대신에 사람이 직접 레이블을 달아야 하므로 인건비 문제가 있고, 따라서 구할 수 있는 데이터양도 적다는 문제가 있다.
  * 분류(Classification): 레이블 y가 이산적(Discrete)인 경우 즉, y가 가질 수 있는 값이 [0,1,2 ..]와 같이 유한한 경우 분류, 혹은 인식 문제라고 부른다. 일상에서 가장 접하기 쉬우며, 연구가 많이 되어있고, 기업들이 가장 관심을 가지는 문제 중 하나다. 이런 문제들을 해결하기 위한 대표적인 기법들로는 로지스틱 회귀법 [* 통계학의 그것 맞다 ], KNN, 서포트 벡터 머신 (SVM), 의사 결정 트리 등이 있다.아래와 같은 예시가 있다.
     * 주차게이트에서 번호판 인식: 요새 주차장들은 티켓을 뽑지 않고, 차량 번호판을 찍어서 글자를 인식하는데 정확도를 높인다. 번호판은 정형화 되어있으므로 전통적인 컴퓨터 비전으로도 처리는 가능하나, 오염 등에 대해 정확도를 높이자면 기계학습을 하면 더 좋다. 이미지 픽셀 값들에 따라 숫자 글자를 분류한다.
     * 페이스북이나 구글 포토의 얼굴 인식: 역시 컴퓨터 비전을 이용하되 기계학습을 결합. 페이스북에 사진을 올리면 친구 얼굴 위에 이름이 자동으로 달리고는 하는데, 이것 역시 기계학습을 이용한 것. x가 이미지 픽셀, y가 사람 이름인 경우.
     * 음성 인식: 음성 wav 파일에 대해서 해당 wav 부분이 어떤 음절인지를 인식하는 것. 애플 시리, 구글 보이스 등에서 사용된다(질문에 대해서 답해주는 부분 말고, 인식 부분만). x가 음성 파형, y가 음절.
  * 회귀(Regression): 레이블 y가 실수인 경우 회귀문제라고 부른다. 보통 엑셀에서 그래프 그릴 때 많이 접하는 바로 그것이다. 데이터들을 쭉 뿌려놓고 이것을 가장 잘 설명하는 직선 하나 혹은 이차함수 곡선 하나를 그리고 싶을 때 회귀기능을 사용한다. 잘 생각해보면 데이터는 입력(x)와 실수 레이블(y)의 짝으로 이루어져있고, 새로운 임의의 입력(x)에 대해 y를 맞추는 것이 바로 직선 혹은 곡선이므로 기계학습 문제가 맞다. 통계학의 회귀분석 기법 중 선형회귀 기법이 이에 해당하는 대표적인 예이다.
* 비지도 학습(Unsupervised Learning): 사람 없이 컴퓨터가 스스로 레이블 되어 있지 않은 데이터에 대해 학습하는 것. 즉 y없이 x만 이용해서 학습하는 것이다. 정답이 없는 문제를 푸는 것이므로 학습이 맞게 됐는지 확인할 길은 없지만, 인터넷에 있는 거의 모든 데이터가 레이블이 없는 형태로 있으므로 앞으로 기계학습이 나아갈 방향으로 설정되어 있기도 하다. 통계학의 군집화와 분포 추정 등의 분야와 밀접한 관련이 있다.
  * 군집화(Clustering): 데이터가 쭉 뿌려져 있을 때 레이블이 없다고 해도 데이터간 거리에 따라 대충 두 세개의 군집으로 나눌 수 있다. 이렇게 x만 가지고 군집을 학습하는 것이 군집화이다.
  * 분포 추정(Underlying Probability Density Estimation): 군집화에서 더 나아가서, 데이터들이 쭉 뿌려져 있을 때 얘네들이 어떤 확률 분포에서 나온 샘플들인지 추정하는 문제이다.
* 반지도 학습 (Semisupervised learning): 레이블이 있는 데이터와 없는 데이터 모두를 활용해서 학습하는 것인데, 대개의 경우는 다수의 레이블 없는 데이터를 약간의 레이블 있는 데이터로 보충해서 학습하는 종류의 문제를 다룬다.

강화학습

Reinforcement Learning

위의 두 문제의 분류는 지도의 여부에 따른 것이었는데, 강화학습은 조금 다르다. 강화학습은 현재의 상태(State)에서 어떤 행동(Action)을 취하는 것이 최적인지를 학습하는 것이다. 행동을 취할 때마다 외부 환경에서 보상(Reward)이 주어지는데, 이러한 보상을 최대화 하는 방향으로 학습이 진행된다. 그리고 이러한 보상은 행동을 취한 즉시 주어지지 않을 수도 있다(지연된 보상). 이 때문에 문제의 난이도가 앞의 두개에 비해 대폭 상승하며, 시스템을 제대로 보상하는 것과 관련된 신뢰 할당 문제 라는 난제가 여전히 연구원들을 괴롭히고 있다 . 대표적으로 게임 인공지능을 만드는 것을 생각해볼 수 있다. 체스에서 현재 나와 적의 말의 배치가 State가 되고 여기서 어떤 말을 어떻게 움직일지가 Action이 된다. 상대 말을 잡게 되면 보상이 주어지는데, 상대 말이 멀리 떨어져 이동할 때 까지의 시간이 필요할 수 있으므로, 상대 말을 잡는 보상은 당장 주어지지 않는 경우도 생길 수 있다. 심지어는 그 말을 잡은 것이 전술적으로는 이익이지만 판세로는 불이익이라 다 끝났을 때 게임을 질 수도 있다. (지연된 보상). 따라서 강화학습에서는 당장의 보상값이 조금은 적더라도, 나중에 얻을 값을 포함한 보상값의 총 합이 최대화되도록 Action을 선택해야 하며, 게다가 행동하는 플레이어는 어떤 행동을 해야 저 보상값의 합이 최대화되는지 모르기 때문에, 미래를 고려하면서 가장 좋은 선택이 뭔지 Action을 여러 방식으로 수행하며 고민해야 한다. 좋은 선택이 뭔지 Action을 찾는 것을 탐색, 지금까지 나온 지식을 기반으로 가장 좋은 Action을 찾아 그것을 수행하는 것을 활용한다고 하여, 강화학습을 푸는 알고리즘은 이 둘 사이의 균형을 어떻게 잡아야 할지에 초점을 맞춘다. 위 방법들과는 다르게 실시간으로 학습을 진행하는 게 일반적이다.

알고리즘

기계학습의 대략적인 알고리즘에 대해 기술한다. 지도학습/비지도학습에 관련된 기본기들은 굳이 전산학이 아니라 통계학의 다변량 분석과 관련된 과목을 수강해도 익힐 수 있지만, 반지도학습, 강화학습 등은 반드시 전산학, 그 중에서도 관련 석사/박사들을 위한 특별 과목에서나 접할 수 있다. 마르코프 모델, 은닉 마르코프 모델 등도 굳이 전산학 뿐만 아니라 통계학에서도 관련 과목들을 취급하니 참고. 베이즈 정리 그 자체야 통계학 1~2학년때부터 나오는 이야기지만, 그 법칙을 이용한 분류 알고리즘 그 자체는 대개는 기계학습 과목을 따로 들어야 한다.

학습 알고리즘: 경사/기울기 하강법(Gradient Descent)

특히 지도학습에서, 말은 학습이라고 써놨으니 거창하지만, 그 원리는 데이터에 맞춰서 오차값을 최소화하면서 회귀식을 만드는 것이다. 오차함수가 오목(concave)/볼록(convex)함수라는 전제하에, 반드시 최소점이 존재하므로, 이를 찾아내는 알고리즘이 바로 경사 하강법이다.

기울기는 아주 특별한 의미를 지니는 벡터장인데, 방향도함수가 최대의 변화를 갖는 방향이 바로 기울기가 가리키는 방향이기 때문이다 [* 여러가지 방법으로 이를 접근할 수 있다. 전미분의 정의를 가지고 이해할 수도 있고, 백터 스칼라곱의 기하학적 정의를 가지고도 이해할 수도 있다.]. 따라서, 오차함수가 오목(concave)/볼록(convex)함수라는 전제하에, 시작 위치를 잘 고르고 기울기의 반대방향으로 계속 내려가다보면 최소점을 언젠가는 찾아낼 수 있다 [* <math>y = x^{2}</math> 같은 경우가 대표적인 예이다. 0보다 큰 임의의 x값에서 출발한 뒤, 계속해서 기울기의 반대방향으로 내려가다 보면 언젠가는 (0, 0)에 도달한다.] .

그 유명한 인공신경망도 경사 하강법과 그 변종인 확률적 경사 하강법을 이용하여 학습시킨다. 그러나, 인공신경망은 이 과정에서 기울기 벡터의 연산과 관련된 문제가 발생하기 쉽고 [* 대표적으로 기울기가 사라지는(?) Vanishing Gradient Problem 이 있다. 보통 각 노드는 비선형성을 추가하기위해 활성함수를 사용하는데, 대표적으로 sigmoid 함수가 있다. 이 함수의 특징은 어떤 x값이 들어와도 0~1사이의 값을 내는데, 문제는 각 노드별 편미분값을 구하기위해 chain rule을 이용하여 back propagation을 할때 생긴다. 즉, 1 미만의 값이 지속적으로 곱해지며 전달되므로, 어느순간에는 매우 0에 가까워지며, 결과적으로 컴퓨터의 부동소수점 연산으로 인하여 마치 기울기값이 "사라져" 버리는 즉 0이되어버린다. 그러면 그 노드보다 앞에 있는 노드들은 0만 전달받으므로 더이상 업데이트가 불가능 즉 학습이 되지 않는다. ], 반드시 절대적인 최소점이 존재하지 않는 문제도 생긴다. 무수히 많은 극솟값들 사이에서 계속해서 더 적은 극솟값을 향해 계산이 멈추지 않는 문제가 생기는데 [* 똑같이 <math> y = (x - 1)(x - 2)(x - 3) </math>를 예로 들어서, 임의로 1보다 적은 x값을 가지고 기울기의 반대방향으로 계속 하강하다보면 끊임없이 밑으로 간다 ] 이 경우 임의의 값을 가지고 루프를 멈추어야 한다. 하지만 더 심각한 문제가 있다. 최소점이 없으면 임의의 극솟값에서 멈추는 [* <math> y = (x - 1)(x - 2)(x - 3) </math> 같은 경우, 시작지점을 x = 5 같은 데로 고르고 기울기의 반대방향으로 하강하면 약 (2.58, -0.38) 이라는 극솟값에서 멈추게 된다. ] 문제가 있는데 이 경우 해결이 어렵다. 자세한 내용은 심층학습, 인공신경망 참조.

이것 자체를 이용해서 무언가에 대한 예측이나 글자체 인식에 대한 답을 뱉어내는 것이 아니고, 이것을 이용해서 글자체 인식, 안면 인식 등의 작업을 행하는 알고리즘들을 학습시킨다.

회귀기법

지도학습류 문제를 푸는 데에 주로 쓰인다.

선형 회귀법, 로지스틱 회귀법, 그리고 굳이 따지고 보면 인공신경망도 여기에 해당한다. 선형 회귀법은 지도학습의 회귀문제를 푸는 데에 쓰이고( 새로운 값의 예측), 로지스틱 회귀법과 인공신경망은 지도학습의 분류문제를 푸는데에 주로 쓰인다. 계량경제학 문서 참조.

인공신경망

인공신경망 (Artificial Neural Network; ANN)은 CNN, RNN, DQN 등으로 나뉜다. 얼마나 인공신경망이 깊으냐에 따라 심층학습 (Deep learning)이라고도 한다.

확률 기반

확률 기반 기계학습 알고리즘은 대부분 베이즈 정리에 기반한다. 베이즈 정리는 다음과 같은 형태로 확률적 추론에 이용되는 정리이다.

<math>{P(Y|X) = \frac{P(X|Y)P(Y)}{P(X)}}</math>

여기서 P(Y|X)는 조건부 확률로 "X가 주어졌을 때 Y가 발생할 확률"로 생각하면 된다.

의학 진단의 예를 들어 수식을 설명하자면 X가 "열이 많이 난다"고 Y가 "독감"이라면, P(Y|X)는 열이 많이 나는 환자가 독감 환자일 확률, P(X|Y)는 독감 환자가 열이 많이 나는 확률, P(X)는 환자 중에 열이 많이 나는 환자가 있을 확률, P(Y)는 환자 중에 독감이 발생한 환자가 있을 확률이다.

여기서 베이즈 정리의 강력함은 "열이 많이 나는 환자가 독감 환자일 확률"(구하기 힘든 값)을 "독감 환자가 열이 많이 날 확률"(구하기 쉬운 값)로 추정할 수 있다는데 있다.

아래는 베이즈 정리에 기반한 대표적인 알고리즘들이다.

Naive Bayes Classifier (NBC)

이름에서 알 수 있듯이 베이즈 정리를 활용한 단순한(naive) 분류기이다. 왜 나이브(순진)하냐 하면 입력값들이 서로 독립이라 가정하기 때문이다. 실생활에서는 대개 입력값들이 어떤 연관관계를 가진다.

<math>Y</math> 가 일어날 원인 <math>{X_1, X_2, X_3, …, X_N}</math> 이 서로 독립임을 가정하면 <math>{P(X|Y) = \Pi_{i=1}^N P(X_i|Y)}</math> 임을 이용하여 <math>{P(Y|X) = \frac{P(X|Y)P(Y)}{P(X)} \simeq \frac{\Pi_{i=1}^N P(X_i|Y)P(Y)}{P(X)}}</math> 으로 레이블을 추정하는 알고리즘이다.

여기서 각 확률값의 연산과 증명은 대학교 미적분 때 배우는 라그랑주 승수법를 통해 진행할 수 있다.

Hidden Markov Model (HMM)

은닉 마르코프 모델(HMM: Hidden Markov Model)은 마르코프 모델의 일종으로, 시계열 분석을 할때 자주 쓰이는 확률형 모델이다. 마르코프 모델이란 보통 여러개의 상태가 존재하고 상태간의 전이 확률을 마르코프 확률(Markov Property)로 정의한 것을 말하는데, 이때 상태=출력(관측값이 상태와 같음) 이면 마르코프 연쇄(MC: Markov Chain), 상태!=출력(관측값이 상태가 아님) 은닉되어있으면(함수라던가, 확률분포라던가..) HMM으로 부른다.

  • 마르코프 모델이란 어제의 일이 오늘에만 영향을 미치는 모델을 말한다.

||파일:external/upload.wikimedia.org/300px-HiddenMarkovModel.svg.png||

간단한 마르코프 모델을 잘 나타낸 그림으로, 상태 <math>X_{1}</math>, <math>X_{2}</math>, <math>X_{3}</math>가 존재하고, 상태가 전이할 확률 <math>a_{12}</math>, <math>a_{21}</math>, <math>a_{23}</math> [* 여기서는 일부 상태로의 전이확률이 나타나지 않았지만, 보통 전이 확률은 자기자신을 포함한 모든 상태로의 확률분포로 나타낸다. ]이 존재한다. 다만 상태 <math>X_{1}</math>, <math>X_{2}</math>, <math>X_{3}</math>는 직접적인 관측값을 나타내지 않으며 실질적인 관측값인 <math>y_{1}</math>, <math>y_{2}</math>, <math>y_{3}</math>, <math>y_{4}</math>가 일어날 확률을 <math>X_{1}</math>에서는 <math>b_{11}</math>, <math>b_{12}</math>, <math>b_{13}</math>, <math>b_{14}</math>, <math>X_{2}</math> 에서는 <math>b_{21}</math>, <math>b_{22}</math>, <math>b_{23}</math>, <math>b_{24}</math> 이런 식으로 정의한다.

HMM의 주요 문제는 관측열이 나올 수 있는 확률을 계산하는 평가(Evaluation), 관측열이 주어졌을 때 이 관측열이 나올 확률이 가장 높은 상태열을 추측하는 해석(Decoding), 주어진 훈련셋트로 모수를 학습하는 훈련(Training)이 있다. 각 평가, 해석, 훈련 문제의 해결 방법은 Forward-backward 알고리즘, Viterbi 알고리즘, Baum-Welch 알고리즘이며, 이 셋모두 EM알고리즘에 속한다.

기하 기반

주어진 입력의 특징(feature)을 벡터(vector)로 만들어 특징 벡터끼리의 기하학적인 관계를 기반으로 추론을 진행하는 시스템을 이야기한다. 주로 벡터끼리의 거리나 코사인 유사도를 사용한다.

예를 들어 가장 원시적인 형태의 검색엔진의 경우에는 문서에 어떤 단어가 몇 개 있는지를 벡터로 만든 후, 검색어도 마찬가지로 벡터로 만들어 벡터 유사도를 통해 문서를 순위화 하는 Vector Space Model을 사용하였다.

K-Means Clustering

주어진 입력을 군집화 하는 비교사 학습 방법이다. 총 K 개의 클러스터가 있다고 가정하고, 특징 공간(feature space)에서 K 개의 중간점(centroid)를 찾는 알고리즘이다.

k-Nearest Neighbors (k-NN)

지도학습 모델이다. 레이블 되어 있는 학습 데이터가 있어야 한다. 입력된 특징 벡터 X에 가장 가까운 점 k개를 뽑아 이들의 레이블을 사용하는 분류기이다. 점들이 서로 다른 레이블들을 가질 경우 가장 많은 레이블을 선택한다.(다수결). 다수결에서 결과가 특정되도록 만들기 위해 k는 홀수로 선정한다.

Support Vector Machine (SVM)

Support vector란 특징 공간에서 주어진 두 분류의 데이터를 구분지을 수 있는 최적(optimal)의 초평면(hyperplane)을 의미한다. SVM은 그러한 support vector를 찾는 알고리즘으로 두 분류에서 가장 가까운 데이터를 하나씩 찾아서 그 거리를 계산했을 때 가장 멀어질 수 있는 초평면을 찾는 것을 목표로 한다.

이것만 하면 단순한 linear classifier이어서 XOR과 같이 직선으로 나눌 수 없는 함수는 학습을 진행하지 못하지만, SVM은 여기에 kernel function이란 개념을 도입하여 특징 공간을 접어버리거나 꼬아버려 선형으로 분류할 수 있게 만들어버린다.

기하 기반의 기계학습의 끝판왕으로 이것으로 필기인식, 사진 안에 있는 물체 인식, 영화 리뷰 분석 등 온갖 문제를 해결한다.

첨언 하자면 SVM의 기본원리는 함수해석학에서 배우는 3개의 정리 중, 한-바나흐 정리에서 찾아볼 수 있다. 이 정리의 기하학적인 버전이 어느 vector space에서 두 개의 intersection이 비어있는 convex한 subset이 정의 되었을 때 (점들을 이어서 두 개의 convex hull을 만들어도 된다), 두 convex한 subset A와 B를 나누는 초평면이 반드시 존재한다라고 하고, 이는 곧 SVM의 실현 가능성을 의미한다.

앙상블 기반

앙상블 학습(Ensemble Learning)

다양한 분류기의 예측 결과를 결합하여 예측값을 얻는다는 방법. 단일 분류기에 비해 신뢰성이 높게 한다는 목표를 잡는다.

대표적인 방법으로 부스팅과 배깅이 있다.

* Boosting: 잘못 분류된 개체들에 대한 학습 규칙을 정의하여 더 정확한 분류 규칙을 만듬.
* Bagging (Bootstrap aggregrating): 주어진 데이터에 대해 여러 부트스트랩을 형성한 뒤 각 부트스트랩 자료로부터 모델링을 하는 것. 

응용 분야

실제의 많은 기계학습 연구에는 고가의 그래픽 카드가 쓰인다. 그래픽 카드의 병렬처리가 기계학습에 알맞은 까닭이다. 마이크로소프트그래픽 카드 이상의 성능을 내기 위해서 FPGA를 연구하고 있다. 바이두FPGA 회사인 알테라와 협력하여 딥 러닝을 연구중이다. 엔비디아는 기계학습에 많은 투자를 하고 있으며 기계학습 연구 툴 DIGITS을 개발하였다. 그래픽 카드의 병렬 처리에 대한 컴퓨터 아키텍처 관련 정보는 GPGPU 를 참고하면 된다. 요즘 매체에서 많이 보이는 딥러닝용 슈퍼 컴퓨터의 내부는 이것이 탑재되어 미친 듯이 전기를 흡입한다.

구글에서 [사용하여 이미지를 보고 이를 설명하는 캡션을 작성하는 인공지능을 만들었다고 한다.] 2017년 인공지능 소프트웨어 관련 시장은 국내 6조원 정도로 추정된다.

* 자연 언어 처리: 기계 번역, 음성인식, 검색 (text에 기반한 멀티미디어 검색, 지능형 검색 등), 자동색인, 음성 합성 (TTS), 형태소 분석 및 구문 분석
* Computer Vision, 패턴 인식, Image processing
* 데이터 마이닝
* 업무 자동화: 골드만삭스는 기업 Kensho의 시스템을 도입해 자연 언어 처리를 통해 금융기관들의 경제지표, 실적, 주가동향을 학습하고 자동으로 문서를 생성하게 했다. AXA 다이렉트는 자동차 보험 가입자들의 사고율을 예측하였다. JP 모건 체이스는 계약 관련 플랫폼 COin (Contract intelligence)을 통해 법률 문서에서 주요 정보와 조항을 추출하였는데, 연 36만시간이 소요되는 일을 짧게 줄였다. 참고로 오늘날 대출 서비스 오류의 80%가 계약 해석 오류이다. 노무라증권은 직원이나 고객이 입력한 데이터의 오타나 이상치를 발견하고자 한다. 도쿄 증권 거래소는 시세조작 및 이상거래를 탐지하고자 한다. 
 * 서비스: 사용자가 텍스트나 음성을 통해 질의를 입력하면 고객에게 서비스를 제공한다. 금융권의 경우 송금, 조회, 환전, 대출, 상품 추천 등.
* 신용평가: 개인의 거래 기록, SNS 사용, 인터넷 사용 등을 분석하여 새로운 방식으로 개인의 신용도를 측정한다. 
* 준법감시

대학, 취업에서의 기계학습

컴퓨터공학과에서 다루고 있다. 회귀, 식별, 군집화, 확률 분포 추정, 마르코프 연쇄, 마르코프 무작위장, 은닉 마르코프 모델 등은 일단 통계학에서도 취급하기는 하지만, 반지도 학습, 강화학습 등에 대해 알고 싶으면 컴퓨터공학을 대학원 이상으로 공부해야 한다.

미국 등지의 대학원에서는 이미 기계학습(machine learning)이라는 단어가 일종의 유행어 (buzz word)로서 아무데나 쓰는 말이 되었다는 자조적인 이야기를 하는 사람들이 늘고 있다. Python 언어에 Pandas, scikit-learn, 텐서플로우 같은 라이브러리가 있으면 중학생도 기계학습에 관련한 결과물을 활용할 수 있게 되었다. 문제는 이것만으로는 "데이터 과학자" 일을 하기에는 부족한데도 불구하고, 이들이 "데이터 과학자"를 자칭하면서 서류를 내거나 면접을 보러 와서 인사 담당자의 시간을 낭비하게 한다는 점이다. 그래서 한 데이터 과학자는 면접에서 사이킷런과 텐서플로우 인강을 따라했다면서 기계학습을 할 줄 안다고 말하는 학부생들에게 "네, 제 16살짜리 딸도 파이썬을 쓸 줄 알지요."라고 냉소했을 정도. 한 기업의 AI 과학자 채용 요건은 다음과 같다. 'NIPS, ICML, ICLR, CVPR, EMNLP 등 국제학회에 논문 게재 경험 우대'. 국제 최상위 학회에 논문을 쓰는 법은 순식간에 되는 것이 아니라 대학원에서 7년에 가까운 박사과정을 거치면서 서서히 길러진다. 기업에서 전문가로 우대하는 사람 역시 기계학습 대학원을 졸업한 사람이다.

하지만 2014년경 이후 기계학습의 인기가 극히 높아지면서 대학원 입학은 극히 힘들어지고 있다. 이미 기계학습 관련 유명 컨퍼런스에서 발표 경험이 있어야 박사 입학 가능성을 노려볼 수 있을 정도로 인기있는 곳도 있다. 이런 곳의 박사졸 초봉은 전세계적으로 세전 3억원 정도에 육박하고 있다.

이런 박사급 채용이 아니라 학사~석사 수준의 프로그래머 채용이라 할지라도 딥러닝 라이브러리(TensorFlow, Caffe, Theano, Torch 등)를 이용한 딥러닝 기반 개발 경험만 가지고는 안 된다. 미적분, 선형대수, 확률/통계 과목을 대학 수준으로 이해해야 하고, 각종 문제를 해결하기 위해서는 자료구조알고리즘에 대해 알아야 한다. 가급적 AI 기반 서비스 및 제품 상용화 경험이 있는 쪽이 좋다.

2016년 미래창조과학부에서 미래 성장동력으로 선정되면서 앞으로 중요도와 대학내 입지가 커지고 있다.[[1]]

머신 러닝 소프트웨어

파일:top-analytics-data-science-machine-learning-software-2015-2017.jpg

* Python
 * TensorFlow
 * scikit-learn
* MATLAB: 머신 러닝을 위한 툴박스를 제공한다.

관련 문서

* 인공신경망
 * DQN
  * 알파고
 * DDPG
* 인공지능
 * 자연 언어 처리
* 제4차 산업혁명
* 테이(인공지능)
* 텐서플로우
* 뉴로모픽 컴퓨팅
* 데이터 마이닝
* 빅 데이터 프로세싱

분류:인공지능