2013년 9월 20일 금요일

추석특집! 추석 날짜를 예측하는 인공지능??

민족 최대의 명절 한가위입니다. 특히 지난 17일엔 고백데이였는데요, 그 날 고백해서 차이면 크리스마스가 차인지 100일째 되는 날이 된다고 합니다. 아무쪼록 풍성한 한가위에 몸과 마음, 턱선, 옆구리 모두 살찌우는 한가위 되시길 바랍니다. 살 찔까봐 너무 걱정하지 마세요~ 어차피 안생기니까요ㅋ

한가위보다 한가인... 연정훈.. 이 나쁜....ㅠㅠㅠ
아.. 그런데 말이죠, 내년 추석은 또 언제죠??? 흠.... 추석이 언젠지 검색하고 계신가요? 아니, 근데 언제까지 이렇게 촌스럽게 달력을 뒤적이고 있어야하나요? 멋지게 양력-음력을 변환하는 식이 있지않을까요?

한국표준연력에 따른 음력 날짜의 결정... 뭐래는거니...?-_-....
출처 : http://manse.kisti.re.kr/contents-4.html
결론은...! 29일30일을 번갈아 갖는 기본적인 대원칙 속에 19년에 7번의 윤달을 둔다는 이야기입니다. 아.. 근데 정확한 식은 없다는군요...ㅠ 윤달에 대한 적용이 워낙 복잡해서 말이죠... 그래서 말인데요, 이같은 패턴을 로봇에게 마구 알려준 뒤, 로봇에게 으로 찍게끔 하는 방법은 없을까요...? 이 문제를 한번 기계학습(Machine Learning)으로 한번 풀어보도록 하죠.

기계학습은 종종 패턴인식(Pattern Recognition)과도 혼용되어 쓰이기도 하는데요, 기계학습이 "데이터로부터 지식을 습득"하는 좀더 포괄적인 개념이라고 할 수 있습니다. 지난 글(관련 글 : 너의 정체가 무엇이냐? Pattern Recognition)에서는 패턴인식을 회귀(regression), 분류(classification), 군집(clustering), 서술(description)으로 구분하였는데요, 오늘 우리는 연속적인 데이터에 대해 관계식을 유추해보고자 하는 회귀(Regression) 문제에 대해 다뤄보고자 합니다.

크레용팝... 잘 살고있니...? 훅 가버린거니...?ㅠ
지난 글에서는 회귀에 관한 가장 기본적인 방법인 최소자승법(Least Square Method)에 대해서 배웠었습니다. (관련 글 : 1,3,5,( ),9? 로봇을 위한 IQ Test!) 그 방법의 단점은 '데이터는 아마 선형적 관계를 가질 것이야...'라고 편견을 갖고 함수 예측을 시작했다는 것이죠. y=ax+b 라는 model을 놓고 데이터들에 가장 잘맞는 모델 변수들을 찾는 문제였는데요, 만약에 데이터들이 그림(4)의 경우처럼 지수함수와 같이 선형이 아니었다라고 한다면 예측은 전혀 틀려지는 것이죠ㅠㅠ 세상 일이 어디 선형 뿐인가요...ㅠ

그래서 이렇게 미리 '1차함수다, 2차함수다' 등의 model을 주지않고 예측하는 방법이 있습니다! (천잰데...?ㅋ) 이러한 방법을 비변수적(non-parametric) 회귀방법이라고 하는데요, 그 대표적인 방법 중 하나가 바로 Gaussian Process Regression (GPR) 입니다.
정수론, 해석함수, 타원함수, 통계학, 미분기하학, 전자기학, 기하학, 위상수학, 측지학 등에서 뛰어난 업적을 남기신 가우스(1777~1855)느님. 천재가 오래살면 얼마나 위대한 업적을 남기는지 보여주심! (출처 : 위키피디아)
GPR이란 사실 여러 개의 정규분포곡선(normal distribution or gaussian distribution)을 겹쳐놓는 것입니다. 많은 값들 중에 (0,0)이란 데이터가 관측되었다고 생각해봅시다. 그럼 이 관측된 데이터에 대해가장 그럴법한 함수의 예측은 아마도 (0,0)의 확률이 가장 높은, 즉 (0,0)을 중심으로 갖는 정규분포곡선일 것입니다. 만약 이번에 (2,0)에 두번째 데이터로 관측이 됐다면...? 두 개의 정규분포 봉우리가 생기는 낙타 모습이 아닐까요? 이와 같이 각각의 관측 데이터에 대해 정규분포들을 봉우리들을 생성함으로써 이들이 중첩된 모습(multivariate Gaussian)으로써 함수가 예측되는 것입니다!(1) 어떤가요? 사전에 '이건 1차함수일거야, 2차함수일거야'라는 예측없이도 함수가 추정가능한, 정말 멋진 방법 아닌가요?

그림은 관측된 포인트를 기준으로 95%의 함수예측 분포를 보여줍니다.
어차피 외계어들은 안보실꺼자나요...ㅠ
(출처 : Rasmussen, Carl Edward. "Gaussian processes for machine learning." (2006))
드디어 마무리~ '내년의 추석날짜를 예측해보자'라는 문제로 시작을 했었는데요, 사실 그건 밑밥(죄송합니다..ㅠ)이었고, 정말로 하고싶은 이야기는 이거였어요.
"주어진 데이터로부터 함수 관계를 어떻게 알아내지?"
GPR에서는 각 데이터마다 정규분포 봉우리를 씌워 어떠한 예측가능한 분포를 만듦으로써 데이터로부터 함수관계를 예측하였습니다. GPR의 더 멋진 점은 위의 그림에서처럼 데이터가 관측된 곳 근처에서는 큰 확신(certainty)으로, 데이터 관측이 적은 곳은 적은 확신으로 함수를 예측하고 있다는 것을 분산값(variance)를 통해 보여준다는 것입니다! 이에 따라 로봇은 확신이 적은 곳에 더욱 데이터를 달라며 요청하기도 하고, 또 예측성능을 더 높이기도 합니다.

사실 확실성에 대한 비율은 사용자가 정해줄 수 있답니다. 사용자의 요청에 따라 '조금만 관측되더라도 믿어버리겠어'라는 결단력 guy와 '조금 들어온 데이터를 어떻게 믿어...'라는 소심 guy 사이에서 그 값을 결정해줄 수 있는데요, 이러한 것은 이미지의 필터에도 활용된답니다. 뽀샵으로 막 그림 뭉개고, 혹은 사진 선명하게 만들고 이런거 있죠?ㅋ 마지막으로 Gaussian Filter에 대한 동영상을 보여드리면서 글을 마치도록 하겠습니다. 그동안 ICRA 때문에 글을 못써 죄책감에 시달렸는데 이제 좀 마음이 가벼워지네요! 그럼 다음에 더 재미있는 글로 찾아뵙겠습니다!  :D

gaussian low-pass filter in image processing
출처 : http://youtu.be/7mDJ09lqEb0

(1) 사실 Gaussian Process Regression도 'noise는 정규분포를 따를 것이다'라는 가정을 가지고 있긴 합니다. 즉, 실제 데이터가 있을 법한 곳의 위치가 관측된 데이터를 기준으로 모든방향으로 동등하게 퍼져있을 것이라는 것이죠. 그런데 많은 자연계의 현상이 이러한 정규분포를 따르기 때문에 이 가정은 대부분의 경우에서 유효한 가정이랍니다. Gauss 짱!

* 제 글은 RSS로도 구독하실 수 있습니다. http://t-robotics.blogspot.kr/feeds/posts/default
  facebook page: http://facebook.com/trobotics