세상의 모든 기계는
사람의 어떤 기능을 대리하기 위해서 만듭니다.
계산을 대신해주면 계산기 이고
빨래를 대신해주면 세탁기 이고
판매를 대신해주면 자판기 이지요.
사람에게는 지능이 있으므로
이렇게 저렇게 움직이도록 작동방식과 순서를 ‘결정’해주면
시키는 그대로를 기계는 군말 없이 수행합니다.
그런데 요즘 세상에 와서는 희한한 기계가 등장했는데
바로 사람의 ‘결정’을 대신해주는 기계입니다.
좋은말로 인공지능이라고 부르는 것인데요.
사람이 결정해준 그대로를 수행하던 이전의 기계들과 달리
결정을 하는 기계라고 하면
당장은 뭔가를 결정할 수 없는 상황이라 함을
전제하고 있습니다.
그러니 결정하는 기계가 필요한 것이겠죠.
결정하는 기계는
그래서 필연적으로 학습을 해야만 작동할 수가 있습니다.
결정 이라는 단어와
배움 이라는 단어는
매우 밀접하게 관련되어 있습니다.
결정할 수 없는 상황이란
정보가 부족한 상황을 뜻하기 때문입니다.
상황을 (아직은) 배우지 못한 것이죠.
모든 정보가 군더더기없이 명확하고 확실하다면
우리는 결정을 하지 못할 이유가 없습니다.
불확실하기 때문에
곧 정보가 부족하기 때문에
곧 모르기 때문에
결정에 어려움을 겪습니다.
많이 배울수록
결정이 명확하고 분명해집니다.
사람이든 기계든 그것은 마찬가지입니다.
그러나 사람도 어찌할 수 없는 상황이 있는데
모든 상황에 명확한 정보를 갖고 행동하는 것은 아니기 때문이죠.
특히 미래의 일은
불확실하기 그지없습니다.
한치앞을 모르는 것이 미래 이지만
우리는 그나마 합리적일 결정을 내리려고 노력하며
한 순간 한 순간을 결정하면서
인생을 살아갑니다.
그러니 이제는
결정 (decision) 을 대신해주는 기계를 만들고 싶었던 것입니다.
어떤 기계를 만들든
만들기 위해서는 설계를 해야 하듯이
결정해주는 기계라고 해도 역시
초반에는 사람이 설계를 해 줍니다.
그러나 그 설계 과정의 후반부에는
기계가 데이터를 통해 스스로를 교정하는 단계로 완결을 짓는데,
그 단계를 머신러닝 이라고 부릅니다.
이것은 기계(머신)가 배우도록(러닝) 만드는 공학적인 방법 입니다.
머신러닝의 머신은, 데이터를 배웁니다.
우리가 배우는 기계를 만드는 이유는
우리 사람 대신에 뭔가를 결정하도록 시키기 위해서라고 말씀드렸습니다.
사진을 보고 고양이인지 강아지인지 결론을 결정짓는 것이든
차를 운전하면서 사람인지 나무인지를 결정하는 것이든
사람이 겪는 그것과 마찬가지로
기계도 결정장애를 겪습니다.
과거는 결정론적 (deterministic)입니다.
미래는 비결정론적 (non-deterministic)입니다.
결정론적인 세상은 이상적인 세상이고
모든 정보가 알려져 있습니다.
f라는 기능안에 입력 x를 넣으면 y라는 값이 나온다는 것을
모조리 알고 있지요.
반면에 비결정론적인 세상은 현실에 가깝고
알려진 정보도 있는 반면 모르는 정보도 많이 있습니다.
그러면 있는 것 중에 아마도 그럼직한 것을 선택할 수밖에 없지요.
머신 M은, 사람이 어떤 구조로 설계를 하는데,
그 구조를 지탱하는 어떤 값(parameter)들은
완성하지 않은 채로 놓아둡니다.
여기서 어떤 구조 라는 것은
인공신경망, SVM, Decision tree 등등의 이론적으로 알려진 구조 중에서
상황에 적합한 형태를
머신러닝 엔지니어가 골라줍니다.
기계는 그 구조 위에서
x일때 f(x)라는 데이터 하나,
f(x)일때 f^2(x)라는 데이터 하나,
f^3(x)일때 f^4(x)라는 데이터 하나,
이렇게 과거에 결정되었던 자료를 한군데로 모아서
데이터 세트 전체를 입력으로 받습니다.
그러면 단순하게 생각했을 때
그 중에서 가장 빈번히 등장하는 경우가
앞으로 모르는 상황에서도 또 등장할 가능성이 높겠지요.
그래서 머신러닝은 결정을 통계적으로 합니다.
과거에 많이 발생했던 경우가 앞으로도 많이 발생할 것이다
이처럼 단순히 빈도에 기대어서 추론을 하는 수도 있지만
그보다 더 합리적인 여러가지 통계적인 방법들이 알려져 있습니다.
그것들은 앞으로 차차 살펴보도록 하고요
여기서는 결정기계를 설계하는 과정의
기본적인 형상을 묘사하는 것을 목표로 하겠습니다.
머신러닝, 그러니까 결정하는 기계를 만드는 작업에서는
항상 확률과 통계가 함께 한다는 것을 잊지 마시고요.
그림에서 파란 왼쪽은 결정되어있는 세상, 예컨대 과거라고 보아도 좋겠고요.
오른쪽의 녹색은 결정되어있지 않은 세상, 예컨대 미래라고 보아도 좋겠습니다.
그러나 꼭 과거다 미래이다가 아니라
모든 정보가 확실하게 알려져있다(deterministic)
정보가 확실하게 알려져있지 않다(non-deterministic)가 좀더 좋은 표현입니다.
과거의 기록이라도 정보가 확실하게 결정되어있지 않은 경우는 많습니다.
예컨대 진시황릉 무덤의 연도를 추정한다든지요.
그럴 때는 비록 과거의 일이라 해도 전부 다 아는 것이 아니기 때문에
(데이터만 충분하다면) 머신러닝을 사용해서 합리적으로 (=그럴듯하게) 추정을 할 수도 있겠습니다.
그림의 오른쪽을 보시면
곧게 뻗은 대문자 X가 있습니다.
이것은 확률변수(random variable)인데요.
예컨대 주사위를 던졌다고 했을 때
1,2,3,4,... 각각의 눈금이 나올 확률은 theta로써
아직은 결정되어있지 않습니다.
확률변수 X는 바로 이 각각의 경우에 대한 확률값을 바구니에 들고다니는 집합(set) 입니다.
그림의 하단을 보시면
Likelihood of theta given X 라고 쓰여있지요.
Likelihood라는 것은, ~그럴듯하다 는 영어 표현입니다.
x라는 입력과 y라는 출력이 쌍으로 묶인 데이터가 주어졌을 때,
가장 그럴듯한 f는 무엇인가
를 묻는 것입니다.
주사위라고 하면 눈금은 1부터 6까지, 각각 1/6의 확률을 갖는데요,
여기서는 꼭 주사위가 아니라, 어떤 상황에서 취할 수 있는 가짓수가 5가지고
각각이 theta_1부터 theta_5까지의 확률을 갖는다고 봅니다.
데이터를 집어넣어서
theta_1부터 theta_5까지의 값을 ‘배우면'
머신러닝을 한 것입니다.
설계가 끝났다면 그다음에는 설계대로 동작할 일만 남겠지요.
빨간 박스친 부분이 모두 likelihood인데요
이것은 기계 M의 파라미터들 (theta_1 부터 theta_5까지)이 어떤 값일 때에, 우리가 가진 바로 그 데이터 X가 나올 확률이 최대가 되겠느냐
하고 묻는 것입니다.
계산의 편의를 위해서
i.i.d.를 사용하는데, 이것은
모든 확률변수들이 서로 영향을 미치지 않고 (independent)
모든 확률변수들이 등장할 가능성이 균등하게 (identically) 분포되어(distributed)있다는 가정입니다.
현실은 당연히 그렇지 않지만
계산의 편의를 위해서 전제하는 가정입니다.
왜 계산이 편해지냐하면
서로 독립인(=무관한) 사건들이 동시에 발생할 확률은
각각의 확률을 서로 곱한 것과 같기 때문입니다.
서로 다른 theta들이 서로 아무 영향을 주고받지 않는다고 가정한 것이죠.
영향을 주고는다고 놓고 만드는 수도 있지만
여기서는 간단하게 보고 넘어가겠습니다.
두번째로 우리는 그냥 likelihood보다는
log가 붙은 likelihood를 사용하는데요.
이것도 역시 계산의 편의를 위해서 사용합니다.
곱셈보다는 덧셈이 편리한데, 이렇게 바꾸더라도 로그함수는 단조증가 (monotonically increasing) 함수이기 때문에
계산 결과의 정확한 값은 바뀌겠으나, 계산 결과를 최대로 만드는 파라미터를 원하는 지금 상황에서는 결과에 영향을 미치지 않습니다.
데이터를 이용해서 가장 그럴듯하게 결정을 내리는 기계를 만드는 방법이
머신러닝이라고 했습니다.
Maximum likelihood estimation은,
그래서 우도를 최대화하는 파라미터를 구하는 방법입니다.
theta 위에 삿갓 모양을 hat 이라고 읽는데요,
주어진 데이터를 가지고, 그 데이터가 나옴직한 정도 를 의미하는 로그우도가 최대가 되도록 하는 파라미터 theta의 값을 추정해라
라는 뜻입니다.
저것을 계산하는 방법은
함수처럼 결과가 한번에 나오는 것이 아니라
이 데이터를 넣어서 파라미터를 조정해보고
저 데이터를 넣어서 파라미터를 조정해보고
요 데이터를 넣어서 파라미터를 조정해보고
이렇게 수맣은 데이터를 넣어본 뒤에
그중에 가장 큰 값을 내놓는데 사용된 파라미터를
기계의 최종 완성 형태로 보는 것입니다.