<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>shurain</title><link>http://blog.shurain.net/</link><description>Personal thoughts on various subjects</description><language>ko-KR</language><lastBuildDate>Mon, 06 Feb 2012 16:02:53 +0900</lastBuildDate><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/shurain" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="shurain" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><title>2011년 회고 - 월드 오브 워크래프트
</title><link>http://blog.shurain.net/posts/67</link><description>
&lt;p&gt;시작은 평범했다. 당시에는 연구실 일이 바쁘지도 않았고 따로 시간을 많이 쏟아야 하는 일이 있던 것도 아니었다.&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;img alt="얼라에 무슨 종족이 제일 간지나냐" src="/m/posts/ganji.png" /&gt;
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;그렇게 물은 뒤 바로 다음날 와우를 시작하게 되었다.&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;a href="/m/posts/billing.png"&gt;
&lt;img src="/m/posts/billing.png" alt="와우 결제 명세" width="100%"&gt;
&lt;/a&gt;
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;시작은 성기사로 시작하였으나 며칠 후에 인간 대머리 흑인 남캐 마법사 박비범으로 노선을 변경하고 본격적으로 와우를 하게 되었다. 이때가 3월 27일.&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;a href="/m/posts/85.png"&gt;
&lt;img src="/m/posts/85.png" alt="만렙" width="100%"&gt;
&lt;/a&gt;
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;만렙을 찍는데 대충 열흘가량이 걸렸고 4월 12일 황혼의 요새에서 첫 레이드를 시작하게 되었다. 와우를 처음 시작하는 애를 열흘 만에 만렙을 찍어주고 일주일 만에 레이드를 보냈으니 당연히 플레이는 개판이었다. 처참한 플레이에 자극을 받아서 그 이후로는 동영상을 찍어가며 자신의 플레이를 분석하고 연구하였다.&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;a href="/m/posts/facebook2.png"&gt;
&lt;img src="/m/posts/facebook2.png" alt="꿈에서도 화법 딜 연습" width="100%"&gt;
&lt;/a&gt;
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;당시 페이스북 기록을 보면 한 사람 딜러의 역할을 제대로 하지 못해 고민했던 흔적이 보인다. 나에게는 딜러가 잘 맞을 것이라며 추천해준 스토익의 말을 떠올려보면 역시 딜러는 욕심이 많은 사람이 해야 한다. 꿈에서도 딜 연습을 하는 수준이었으니 나는 딜에 대한 욕심이 적지는 않았던 것 같다. &lt;/p&gt;
&lt;p&gt;어찌 되었든 당시의 레이드 공격대는 주 2일, 1회에 2~3시간가량 게임을 하는 라이트 한 막공이었다. 진짜 시작은 4.2 패치로 열린 불의 땅과 함께였다. 7월 3일부터 길드에서 제대로 된 정공으로 불의 땅 레이드에 도전하기 시작했다. 첫 주에 일반을 전부 정리하고 2주차부터 하드 트라이를 시작하였다. 하나하나 정리하면서 결국 최종적으로는 9월 14일 라그나로스 하드 서버 최초 킬을 달성할 수 있었다. 초반에는 이전과 비슷하게 주 2일 1회 5시간가량의 일정으로 진행되었고 막판에는 2일 정도의 추가 일정에 1회 트라이가 7시간가량 가는 꽤 하드한 일정을 소화했었다.&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;a href="/m/posts/ragkill.png"&gt;
&lt;img src="/m/posts/ragkill.png" alt="라그나로스 하드 서버 최초 킬" width="100%"&gt;
&lt;/a&gt;
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;당시에 세계 149위, 국내 30위 정도의 순위였고 다음 4.3 패치 때 더 나은 결과를 얻을 수 있을 것이라고 다들 생각하고 있었다. 그리고 12월 3일 용의 영혼 레이드가 시작되었다. 주 5일 일정에 1회 7시간의 상당히 하드한 일정을 소화하느라 다들 고생이 많았지만 꽤 빠른 진도를 볼 수 있었다. 마지막 네임드인 데스윙의 광기 직전의 데스윙의 등까지는 세계 39위 수준이었으니 꽤 빠른 진도였다고 할 수 있다. 하지만 마지막에 인원 관리의 문제로 결국 레이드가 완전히 끝난 것은 2012년 2월 5일. 비록 서버 최초 하드 킬이었지만 세계 204위로 부진한 성적이었다.&lt;/p&gt;
&lt;p&gt;&lt;center&gt;
&lt;a href="/m/posts/deathwingkill.png"&gt;
&lt;img src="/m/posts/deathwingkill.png" alt="데스윙의 광기 하드 서버 최초 킬" width="100%"&gt;
&lt;/a&gt;
&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;2011년 한해를 와우와 함께 보냈다고 해도 과언은 아닐 것이다. 초반에는 라이트한 일정이었지만 자신의 무능함에 자극을 받아 꽤 많은 시간을 투자하였고 막판에는 하드한 일정에 허덕이며 많은 시간을 투자하였다. 되돌아보면 와우를 통해 평소에 잘 알고 있었던 것의 확인과 새로운 경험이 많았던 한해였다.&lt;/p&gt;
&lt;p&gt;나 자신의 실수를 모니터링하기 위해 동영상을 찍어가며 분석을 했던 것과 외국 포럼의 온갖 수식이 난무하는 글을 암호 해독하는 기분으로 하나하나 이해하기 위해 노력했던 것은 결국 남들에게 부끄럽지 않은 수준의 딜로 결과를 보여주었다. 이는 예전에 &lt;a href="http://blog.shurain.net/posts/17/" target="_blank"&gt;달인이 되기&lt;/a&gt;에서 썼던 것과 비슷한 맥락의 이야기이다. 결국 시간을 들여 연구하고 피드백을 통해 점진적인 개선을 하는 것이 중요했다. 이는 원래 익히 알고 있던 사실을 재확인하는 기회였다고 볼 수 있다.&lt;/p&gt;
&lt;p&gt;레이드를 하드하게 하면서 뼈저리게 느낀 것이 있다면 시간 투자의 중요성이다. 어떤 기술을 완벽하게 습득하는 데에는 분명히 시간이 걸린다. 레이드에서 느낀 것은 시간을 쏟아부어서 얻어낸 결과는 나를 배신하지 않는다는 것이었다. 정말 어려운 네임드였던 데스윙의 등은 나중에 베스트 맴버로 트라이를 하면 한 번에 잡아내는 수준이 되었는데 이는 앞서 있었던 300여 회의 지옥의 트라이 때문이었다. 그러나 훨씬 더 쉬운 네임드에서는 이후에도 그 수준의 경지에 이르지는 못하였다. 매번 트라이를 하면서 느낀 신기한 경험이었는데 시간을 부어서 얻은 경험을 무시할 수 없다는 것을 정말 절실하게 느꼈다.&lt;/p&gt;
&lt;p&gt;그리고 인원 관리의 어려움이 마지막에 가장 크게 다가왔다. 하드한 일정에 끌려가는 사람들 모두를 컨트롤하는 것은 굉장히 힘든 일이었다. 실질적인 공대장을 맡고 있던 스토익이 가장 크게 느꼈을 테지만 인원 관리는 정말 어려운 일인 것 같다. 아직 이 부분은 나에게는 미지의 영역이다. 앞으로 사람을 다룰 일이 생길 텐데 어떻게 하는 것이 좋을지 아직 전혀 감이 오지 않는다. 원래 어려운 일이라는 것은 익히 알고 있었지만 이번 레이드를 보면서 정말 어려운 일이라고 다시 느끼게 되었다.&lt;/p&gt;
&lt;p&gt;아무튼 나의 2011년은 이제야 끝이 났다. 아마 앞으로 이렇게 하드하게 레이드를 하는 일은 없을 거다. 이제는 2012년 계획을 세울 때가 되었다.&lt;/p&gt;
&lt;p&gt;Thank you Blizzard, for an awesome 2011.&lt;br /&gt;
But also, fuck you Blizzard, for my lost 2011.&lt;br /&gt;
I hope never to see you again.&lt;/p&gt;
</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Sungjoo Ha</dc:creator><pubDate>Mon, 06 Feb 2012 16:02:53 +0900</pubDate><guid>http://blog.shurain.net/posts/67</guid></item><item><title>죽음
</title><link>http://blog.shurain.net/posts/66</link><description>
&lt;p&gt;지난 토요일 제주도 출장을 마치고 집에 와서 피곤을 풀며 게임을 하고 있었다. 간만에 엄마한테서 전화가 왔는데 외할아버지께서 돌아가셨다는 연락을 들었다. 연세가 이미 아흔이 되셨고 몸이 썩 좋지도 않으셨으니 조만간 돌아가실 거라고 생각은 하고 있었지만 꽤 갑작스러운 소식이었다. 당일에 동생이 외할아버지댁에 가서 함께 저녁도 먹고 '저 또 올게요.'라며 저녁 8시쯤 외할아버지댁을 나섰다고 하니 큰 징후가 없이 갑작스레 돌아가신 셈이다.&lt;/p&gt;
&lt;p&gt;연락을 받고 큰 충격은 없었다. 이미 마음의 준비를 하고 있던 일이기도 했고 내가 원체 이런 일에 둔감하기도 한 것 같다. 빈소에 사람은 별로 없었다. 번잡함을 피하고자 일부러 연락을 별로 안 했던 것 같다. 간만에 외가 쪽 식구들이 모두 모여 조촐하게 이런저런 이야기를 하는 분위기였다.&lt;/p&gt;
&lt;p&gt;빈소에 찾아가서 입관을 보며 마지막으로 인사를 하는데 종교를 갖고 있지 않은 나에게는 더 나은 세상으로 가느니 하는 이야기는 관심이 없었다. 그저 내가 기억할 수 있는 외할아버지와의 추억을 몇 개 떠올리며 그걸로 끝이었다. 내가 어느 정도 스스로 판단을 내릴 수 있는 나이가 된 후에 처음 겪는 친척의 죽음인데 큰 의미로 다가오지는 않았다. 다만 외할아버지가 정정하시던 그 모습을 볼 수 없다는 점이 약간 마음에 걸릴 뿐이다.&lt;/p&gt;
&lt;p&gt;사람이 좋은 인생을 살았다는 것은 어떤 뜻일까? 외할아버지께서는 당신이 좋은 인생을 사셨다고 생각하셨을까? 외할머니께서 돌아가신지 이미 20년이 넘었고 그 이후를 꽤 외롭게 보내셨을 터이다. 장남과의 불화로 외가 쪽 사람들이 모두 모일 때 외삼촌을 볼 수 있는 일은 없었다. 외할아버지는 그런 마음의 응어리를 전부 푸셨을까? 나로서는 알 수 없다.&lt;/p&gt;
&lt;p&gt;엄마는 어떤 기분일까? 이모들이 모두 눈물을 조금씩 보일 때 우리 엄마는 눈물 한 방울 흘리지 않았다. 겉으로는 내색하지 않고 있지만 엄마도 속이 편하지는 않을 것이다. 부모의 죽음은 언젠가는 찾아올 일이라는 것은 알고 있지만 나는 아직 그 아픔과 고통, 안타까움과 착잡함 그리고 어딘지 모르게 있을 후련함은 전혀 알 수가 없다.&lt;/p&gt;
&lt;p&gt;언젠가 나도 부모님의 죽음을 겪게 될 터이다. 마음의 준비는 어떻게 하는 것일까? 현실적인 준비는 또 어떠한가? 나는 아직 아무것도 알 수가 없다. &lt;/p&gt;
</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Sungjoo Ha</dc:creator><pubDate>Wed, 12 Oct 2011 06:23:12 +0900</pubDate><guid>http://blog.shurain.net/posts/66</guid></item><item><title>서버 복구
</title><link>http://blog.shurain.net/posts/65</link><description>
&lt;p&gt;서버 대규모 업데이트를 했는데 갖가지 문제가 생겨서 지난 며칠간 블로그가 내려가 있었다.&lt;/p&gt;
&lt;p&gt;오래간만에 삽질하면서 리눅스 머신 하나 새로 장만해야 하겠다는 생각을 했다. 린은 머신 자체도 이미 4,5년은 됐고 내가 리눅스를 지금보다 훨씬 잘 모를 때 설정한 녀석이라 엉망인 부분이 많이 있다. 개인적으로 개발용으로 사용하던 나가토는 NIC가 나가버린 것 같은데, 덕분에 곤란한 일을 좀 겪게 되었다.&lt;/p&gt;
&lt;p&gt;탈 없이 잘 쓸 수 있는 리눅스 머신이 하나 있었으면 하는데 돈을 쓰기는 아쉽고... 계륵이다 진짜. 어차피 X는 거의 쓰지도 않을 것이고, 기본적인 개발용 서버로서의 기능과 블로그 호스팅 + IRC 접속 클라이언트의 역할만 해주면 되는데 남는 머신이 없다. 보통은 게임을 하기 위해 윈도우 머신을 하나 새로 사면서 원래 사용하던 윈도우 머신을 리눅스로 돌리는 방식으로 버티고 있었는데 얼마 전에 맥북 에어를 사버려서 금전적인 여유도 없다.&lt;/p&gt;
&lt;p&gt;괜히 징징글이 되어버렸다.&lt;/p&gt;
</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Sungjoo Ha</dc:creator><pubDate>Tue, 16 Aug 2011 04:22:24 +0900</pubDate><guid>http://blog.shurain.net/posts/65</guid></item><item><title>스팸 방지책
</title><link>http://blog.shurain.net/posts/64</link><description>
&lt;p&gt;블로그를 시작하고 한동안은 스팸이 전혀 달리지 않았다. 방문자가 적으니 당연한 일이지만 장고에서 제공하는 커맨트 기능에는 기본적인 스팸 방지책이 포함되어 있기 때문이다. 그 방식은 리카형이 예전에 썼던 &lt;a href="http://ricanet.com/new/view.php?id=blog/051203" target="_blank"&gt;글&lt;/a&gt;에 있는 방법과 같다. 일종의 허니팟을 만들어서 내용이 들어와서는 안 되는 인풋 태그에 내용이 들어오면 스팸으로 판단하는 방법이다. 그런데 시간이 지나다 보니 스팸이 하나 둘 달리더니 급기야는 가뜩이나 댓글 안 달리는 블로그에 스팸이 판치기 시작했다. 하나 둘 지우다가 그 양이 너무 많아지니 피곤해져서 결국엔 새로운 스팸 방지 기능을 추가하기로 하였다.&lt;/p&gt;
&lt;p&gt;우선은 리카형이 새로이 추가한 &lt;a href="http://ricanet.com/new/view.php?id=blog/110514" target="_blank"&gt;캡챠 비스무리한 방법&lt;/a&gt;을 고려해 보았는데 사용자가 조금이라도 더 귀찮아지는 점에서 일단 아웃. 곰곰이 생각을 해보다가 이미 널리 알려진 훌륭한 스팸 필터링 시스템이 있는 것을 떠올렸다.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://akismet.com/" target="_blank"&gt;Akismet&lt;/a&gt;이라는 서비스가 있다. 워드 프레스에서 사용하는 스팸 필터링 시스템인데 개인 블로그 사용자는 무료로 사용하는 것이 가능하다. 역시 누가 이미 &lt;a href="http://patrickbeeson.com/blog/2009/feb/21/how-stop-spam-django-blog/" target="_blank"&gt;장고에 akismet을 붙인 코드&lt;/a&gt;를 공개해 두어서 대충 추가해 보았다. 앞으로는 스팸 댓글 지우러 블로그 오는 일이 없었으면 좋겠다.&lt;/p&gt;
</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Sungjoo Ha</dc:creator><pubDate>Sun, 03 Jul 2011 06:01:43 +0900</pubDate><guid>http://blog.shurain.net/posts/64</guid></item><item><title>Dimensionality Reduction
</title><link>http://blog.shurain.net/posts/63</link><description>
&lt;p&gt;&lt;a href="http://blog.shurain.net/posts/60/" target="_blank"&gt;이전 글&lt;/a&gt;에서 LSA가 singular value decomposition을 사용해서 dimensionality reduction을 한다고 하였다. 이번엔 dimensionality reduction 자체에 대해 조금 이야기해 보고자 한다.&lt;/p&gt;
&lt;p&gt;Dimensionality reduction은 넓게 보면 현재 고려하는 문제에서 고려의 대상을 줄이는 것을 뜻한다. 앞의 LSA의 경우에는 고려 중인 단어-문서 행렬의 랭크를 떨어뜨려서 문제의 차원을 줄였다. 어찌 되었든 문제의 차원을 떨어뜨리는 것은 여러 의미가 있는데, 역시 가장 쉽게 떠올릴 수 있는 것은 computational cost의 감소이다. 문제의 크기가 감소하면 수행시간도 감소하게 되니 이는 당연한 장점이라고 할 수 있겠다. 하지만 앞선 글에서도 언급했지만, 차원을 줄이는 가장 큰 이유는 computational cost의 감소가 아니다. 문제를 풀면서 차원을 줄이는 가장 큰 이유는, 무엇을 하든, 그 정확도를 높이기 위함이다. 간단히 말해서, 문제의 복잡도를 잘 줄이면, 우리는 그 문제를 더 잘 풀 수 있게 된다.&lt;/p&gt;
&lt;p&gt;어떤 문제와 그 문제를 '예측'하는 모델의 복잡도 사이에는 미묘한 관계가 있다. 아주 단순한 모델보다는 조금 더 복잡한 모델이 그 문제의 추이를 잘 예측하지만 이러한 관계는 어느 정도까지만 지속되고 모델이 굉장히 복잡해지면 오히려 실제 테스트에서는 그 예측의 정확도가 떨어지게 된다. 이러한 현상을 overfitting이라 부르는데, 주어진 문제의 차원(복잡성)을 잘 줄이면 이런 overfitting을 회피할 수 있다. Overfitting을 일으키는 요소는 여러 가지가 있지만, 크게 생각하면 필요한 정보가 없는 것과 불필요한 정보가 있는 두 가지 경우를 생각할 수 있다. 차원을 떨어뜨리는 행위는 주어진 training set에서 필연적으로 발생하는 위의 두 가지 경우에 대한 대응책이다. 복잡도를 줄이면서 노이즈를 제거하고, 복잡한 상태에서는 보이지 않던 숨겨진 의미가 드러나도록 하는 역할을 한다.&lt;/p&gt;
</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Sungjoo Ha</dc:creator><pubDate>Wed, 25 May 2011 14:49:32 +0900</pubDate><guid>http://blog.shurain.net/posts/63</guid></item><item><title>늘어짐
</title><link>http://blog.shurain.net/posts/62</link><description>
&lt;p&gt;요즘 한없이 늘어지기만 한다. 질질질질질질질----&lt;/p&gt;
&lt;p&gt;사람들과 만나 웃고 떠들며 이야기할 때만 기운이 나고 연구실에서나 방에서 컴퓨터 앞에 앉아서 무의미하게 시간을 보내고 있다 보면 정말 늘어진다. 한여름 세탁기를 돌리고는 잊어버린 채 잠이 들어서 다음 날 보면 세탁기 안에서 쉰내가 풀풀 나는 아직 덜 마른 채 남아 있는 무거운 빨랫감이 된 느낌이다.&lt;/p&gt;
&lt;p&gt;휴일이면 느지막이 일어나서 빈둥거리며 웹서핑을 하다가 문득 깨어난 뒤로 아무것도 먹지 않은 것을 깨닫고 저녁을 먹으러 오후 8시쯤 집을 나서서 홀로 기계 우동 한 그릇 먹고 괜히 집에 돌아가기 싫은 마음에 술자리를 찾아가게 된다. 술을 잘 먹는 것도 아니면서 새벽까지 부어라 마셔라. 기침이 떨어지지 않아서 담배를 피우는 것도 괴로우니 자연스레 얼마 피지 않게 되는데 여전히 습관 때문에 술자리에선 가끔 입에 물어서 몇 모금 뻐끔뻐끔하다가 콜록거리며 장초를 비벼 끄게 된다. 술 약한 나는 도중에 후달리니까 적당히 빼주다 보면 어느새 날이 지나가고 술이 가져다주는 호기로움이 노래방까지 이어져서 노래방이 이기나 내가 이기나 날이 샐 때까지 불러 재끼다 보면 가끔은 승리하고 종종 패배하며 아쉬움을 뒤로하고 추적추적 내리는 새벽비를 맞으며 집으로 돌아가서 쓰러지는 그런 생활의 반복이다.&lt;/p&gt;
&lt;p&gt;생활에 낙이 있다면 그 기운으로 그나마 건설적인 생활을 지탱할 수 있지 않을까 싶은데 지금 상태로는 좀 힘들어 보인다. 미쳐서 달려들 수 있는 무언가가 필요해. 지적인 자극을 계속해서 던져주는 그런 것. 혹은 감정적인 면을 자극해주는 그런 것. 자꾸 외부적인 요인을 찾는 것이 기분 나쁘지만 원래 사람이 그런 거 아닌가? 으으으...&lt;/p&gt;
</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Sungjoo Ha</dc:creator><pubDate>Tue, 24 May 2011 18:59:12 +0900</pubDate><guid>http://blog.shurain.net/posts/62</guid></item><item><title>Latent Semantic Analysis
</title><link>http://blog.shurain.net/posts/60</link><description>
&lt;p&gt;얼마 전 누군가 &lt;a href="http://en.wikipedia.org/wiki/Singular_value_decomposition" target="_blank"&gt;Singular Value Decomposition&lt;/a&gt;에 대해 물어오기에 생각이 나서 글을 남긴다.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Latent_semantic_analysis" target="_blank"&gt;LSA&lt;/a&gt; 혹은 LSI(Latent Semantic Indexing)는 문서(document)와 단어(term) 사이의 관계를 알아내는 기법이다. 예전에 &lt;a href="http://blog.shurain.net/posts/5/" target="_blank"&gt;'LDA에 대해서'&lt;/a&gt;에서도 언급했지만 LDA의 형님뻘 되는 방법이라고 볼 수도 있겠다.&lt;/p&gt;
&lt;p&gt;LSA의 아이디어는 간단하다. 문서와 단어 사이의 관계를 나타내는 행렬이 있을 때, 이 행렬의 차원을 줄여서 원래의 행렬보다 간결하되 기존의 행렬의 성질을 유지하는 그런 행렬을 찾으면 이를 여러 가지 의미로 유익하게 사용할 수 있으리라는 것이다.&lt;/p&gt;
&lt;p&gt;애초에 문서나 단어, 양쪽 다 매우 많은 경우가 보통이기 때문에 필연적으로 단어-문서 행렬은 크기가 어마어마하게 크다. 이는 computational cost라는 현실적인 문제에 부딪히게 되므로 차원을 줄여서 접근하는 방법은 가장 떠올리기 쉬운 방법의 하나이다. 하지만 그보다 더 중요한 것은 차원을 줄이는 것 자체가 &lt;a href="http://en.wikipedia.org/wiki/Overfitting" target="_blank"&gt;overfitting&lt;/a&gt;을 줄여준다는 것이다. 이는 &lt;a href="http://en.wikipedia.org/wiki/Dimension_reduction" target="_blank"&gt;dimensionality reduction&lt;/a&gt;이 자체적으로 갖는 성질이다. LSA의 관점에서는 차원을 줄이는 행위가 노이즈를 줄이고 너무 희소한 행렬(overly sparse)을 덜 희소하게 만들어서 숨어 있는 의미를 찾는 역할을 한다.&lt;/p&gt;
&lt;p&gt;조금 더 자세하게 LSA의 과정을 살펴보면 term-document 행렬이 있을 때, 이 행렬의 term vector 두 개의 내적은 두 단어 사이의 (문서에 대한) 상관관계를 나타낸다고 해석할 수 있다. 비슷한 맥락에서 두 document vector의 내적은 두 문서 사이의 (단어에 대한) 상관관계를 나타낸다. 이를 확장하여 앞서 언급한 term-document matrix에 자기 자신을 transpose하여 곱하면 이러한 상관관계의 행렬로 볼 수 있다. 이 행렬의 차원을 줄여서 앞서 말한 매력적인 성질을 갖는 근사 행렬을 구하는 것이 목적이다.&lt;/p&gt;
&lt;p&gt;이 근사 행렬은 singular value decomposition이라는 방법을 사용해서 구하게 된다. Singular value decomposition은 여러 용도로 사용할 수 있는데, 여기에서는 행렬의 &lt;a href="http://en.wikipedia.org/wiki/Rank_%28linear_algebra%29" target="_blank"&gt;랭크(rank)&lt;/a&gt;를 줄이는 방법으로서 사용된다. Singular value decomposition 자체는 주어진 행렬을 &lt;img src="http://tinyurl.com/67vjsoy"&gt;의 세 행렬로 나눈다. 여기에서 중요한 것은 가운데에 있는 &lt;img src="http://tinyurl.com/45ww2nz"&gt;인데, 이 행렬은 diagonal matrix로 singular value라 불리는 녀석들로 구성된다. 이 &lt;img src="http://tinyurl.com/45ww2nz"&gt;에서 r개의 가장 큰 singular value만 남겨서 만들어지는 새로운 행렬을 &lt;img src="http://tinyurl.com/4hzqg9q"&gt;라 하면 Eckart–Young theorem에 의해 &lt;img src="http://tinyurl.com/4poy85h"&gt;는 기존의 행렬의 랭크를 r로 떨어뜨린 근사 행렬이 된다. 즉, singular value decomposition을 사용해서 우리가 찾고자 했던 원래 행렬의 차원을 떨어뜨린 새로운 행렬을 구할 수 있다. 이렇게 구한 새로운 행렬은 각각의 term vector는 concept space를 형성하고, document vector 끼리는 문서의 클러스터를 형성한다고 해석할 수 있다. 이 뒤로는 이 행렬의 활용만 남게 된다. &lt;/p&gt;
&lt;p&gt;이런 종류의 기법을 논하는 글을 읽을 때마다 느끼는데, 역시 연구를 하고자 하면 최소한의 수학적 베이스가 갖춰지지 않고서는 정말 어렵다는 생각이 든다. &lt;a href="http://en.wikipedia.org/wiki/Pagerank" target="_blank"&gt;페이지 랭크&lt;/a&gt;도 그렇고 LSA도 그렇고 선형 대수적 기법을 가져와서 사용하는데, 애초에 그러한 테크닉이 존재한다는 사실도 모르면 이를 가져다 쓸 수 있을 리도 없으니 말이다. 비단 선형 대수뿐만이 아니라 현대 대수나 통계적인 기법은 여기저기에서 다양하게 사용된다. 그래서 꾸준히 기초를 다질 필요가 있다.&lt;/p&gt;
</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Sungjoo Ha</dc:creator><pubDate>Wed, 09 Mar 2011 03:46:01 +0900</pubDate><guid>http://blog.shurain.net/posts/60</guid></item><item><title>취미
</title><link>http://blog.shurain.net/posts/58</link><description>
&lt;p&gt;요 며칠간 밤낮으로 게임을 하며 보냈다. 주로 스팀에서 구매한 게임을 하는데 얼마 전에 데드 스페이스 엔딩을 보았고 신용카드 한도 초과로 다른 게임을 살 수 없어서 예전에 구매했던 오렌지 팩에 있던 게임을 하나 둘 건드리다가 며칠 전에 어세신 크리드를 구매하여 새로운 게임이 가져다주는 새로운 감각에 취해서 지내고 있다. &lt;/p&gt;
&lt;p&gt;이미 예전부터 익히 알고 있던 것이지만 게임은 정말 시간 하나는 기가 막히게 지나가게 한다. 파괴의 운명을 맞은 우주를 구하든 세계 파멸을 가져올 악신의 부활을 저지하든 아니면 그냥 와이프랑 잘 살아보겠다고 이승과 저승을 넘나들든 어찌 되었든 게임을 하는 그 순간만큼은 나는 그 세계의 주인공이다. 소설이나 영화와 다르게 나와 직접적인 상호작용이 있는 게임은 분명히 엄청난 몰입감이 있고 굉장히 매력적인 매체이다.&lt;/p&gt;
&lt;p&gt;다만 역시 게임은 남는 게 별로 없다. 비단 게임뿐만은 아니고 사람들이 취미 삼아 하는 것의 대부분이 소모적이다. 물론 그 자체에서 만족감이 있고 얻어가는 것도 있지만 아무래도 소모적인 것은 사실이다. 나 자신만 보더라도 취미라고 할만한 것이 독서, 영상매체 감상, 게임 등 소모적인 것이 대부분이다. 그나마 생산적인 취미라고 해봤자 가끔 하는 프로그래밍과 글쓰기 정도일까? &lt;s&gt;쓰레기 생산도 생산은 생산이지.&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;생산적인 취미를 갖고 싶다는 욕구 자체는 어디에서 연유하는지 잘 모르겠다. 자신의 창작품을 보면 드는 뿌듯함이 매체를 소모하면서 느끼는 만족감보다 압도적이기 때문일까? 생산적인 취미가 좋다면 그러한 취미를 가지면 된다고 쉽게 말할 수도 있지만 무언가를 만들어내는 행위는 매우 많은 노력이 필요하다. 애초에 무언가를 만드는 것은 으레 그러하듯 거창함을 동반하게 마련이다. 그렇기에 가벼운 마음으로 즐기기에 상대적으로 어려움이 크다. &lt;/p&gt;
&lt;p&gt;내가 찾은 우회책은 생산과 소모의 가장자리에 있는 취미를 갖는 것이다. 악기 연주가 그 경우인데, 이건 일방적인 생산도 소모도 아닌 것 같다. 악기 연주는 &lt;s&gt;소음&lt;/s&gt;음악을 만들어내고 자신이 만들어낸 그 음악에서 가끔이지만 뿌듯함을 느끼기도 한다. 하지만 개인적으로 느끼는 거창함은 훨씬 적은 느낌을 받는다. 어쩌면 다른 생산적인 취미에서도 비슷한 요소를 찾아낼 수 있을지도 모른다. 그런 면을 발견하는 것도 흥미로운 일일 것 같다.&lt;/p&gt;
</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Sungjoo Ha</dc:creator><pubDate>Wed, 09 Mar 2011 03:14:37 +0900</pubDate><guid>http://blog.shurain.net/posts/58</guid></item><item><title>킥봇리그 전략
</title><link>http://blog.shurain.net/posts/56</link><description>
&lt;p&gt;다음의 글은 리그가 끝나고 다들 전략을 공개할 때 '메타 리즈닝의 승리'라는 제목으로 썼던 글이다. 1등을 했던 제노도 비슷한 전략을 가지고 우승하였기에 제목의 선정이 크게 잘못되지는 않았다고 본다. 이후에 다시 볼 일이 있을 것 같기에 이곳에도 공개한다.&lt;/p&gt;
&lt;p&gt;Approach&lt;/p&gt;
&lt;p&gt;전략의 선택에 앞서 내가 잘할 수 있는 것이 무엇인지 고민해보았다. 답은 공부였고, 나는 이 문제를 공부하기로 하였다. 그리고 International RoShambo Programming Competition이 있었다는 사실을 발견하였다. 그리고 제1회 가위바위보 대회의 우승 전략 및 다른 사람들의 전략을 얻을 수 있었다. 그 이후에는 이를 가공하는 일만 남게 되었다. 이후에 사용하는 메타-전략의 골격은 제1회 가위바위보 대회 우승자인 Iocaine Powder의 전략의 골격과 같다.&lt;/p&gt;
&lt;p&gt;Meta-Strategy
상대방의 다음 선택을 예측하는 어떠한 predictor P0가 있다고 하자. P0가 상대의 전략을 제대로 예측한다고 가정할 때, 상대가 선택을 꼬지 않고 그대로 사용한다면 이 P0를 사용해서 상대를 이길 수 있다. 하지만 만약 상대방이 내가 이것을 예측할 것을 고려하여 한 번 선택을 꼬는 경우를 생각할 수 있다. 이 predictor를 P1이라고 하자. 위에서 언급한 선택을 꼬는 과정은 꼬리에 꼬리를 무는 방식으로 무한히 이어질 수 있지만 결과적으로는 P0와 P1의 반복이 계속될 뿐이다. 다른 측면에서 이를 바라보는 경우가 또 있는데, 상대가 나에게 P0를 사용하여 나의 다음 수를 예측하는 경우를 상상할 수 있다. 이를 예측하는 predictor를 P0’이라고 하자. 비슷한 맥락에서 P1’도 상상할 수 있다.&lt;/p&gt;
&lt;p&gt;우리는 단일 predictor P0에 대해서 P0와 P1, P0’ 그리고 P1’ 네 개의 predictor를 얻을 수 있다. 만약 P0가 올바른 predictor였다면 위에서 언급된 네 가지 predictor 중 하나는 반드시 상대의 다음 선택을 올바르게 예측할 것이다. 이 네 가지 predictor 중 올바른 선택을 하기 위해서 메타-전략이 필요하다.&lt;/p&gt;
&lt;p&gt;메타-전략은 단순히 과거의 성능을 기준으로 어떠한 predictor가 맞는 predictor인지 판별한다. 즉, P0, P1, P0’, P1’을 모두 계산하여 P0가 더 성능이 가장 좋으면 P0를 선택하고 P1이 더 성능이 좋았으면 P1을 선택한다.&lt;/p&gt;
&lt;p&gt;Predictors&lt;/p&gt;
&lt;p&gt;메타-전략이 있더라도 훌륭한 predictor가 없다면 전혀 의미가 없다. 메타-전략을 살리기 위해 좋은 predictor를 최대한 많이 구현하려고 노력하였다.&lt;/p&gt;
&lt;p&gt;Random Fall-back&lt;/p&gt;
&lt;p&gt;만약 어떠한 킥봇이 42를 안정적으로 이길 수 있다면 최종적으로 랜덤한 선택을 하는 전략이 그 어떠한 전략보다 나은 결과를 보일 것이다 (랜덤은 그 누구도 이길 수 없다!). 이를 사용하여 42는 자신보다 강력한 상대를 만나더라도 높은 확률로 지지 않을 수 있다.&lt;/p&gt;
&lt;p&gt;Frequency Analysis&lt;/p&gt;
&lt;p&gt;상대의 0과 1의 빈도수를 토대로 상대의 다음 선택을 예측한다. 왼쪽으로 찬 경우가 많았다면 왼쪽, 오른쪽으로 찬 경우가 많았다면 오른쪽을 다음 선택으로 예측한다. 이 자체로는 큰 의미가 없는데 상대방이 빈도수를 토대로 예측하는 경우를 잡기 위해서 이 전략을 넣었다.&lt;/p&gt;
&lt;p&gt;History Analysis&lt;/p&gt;
&lt;p&gt;과거의 기록을 바탕으로 상대의 다음 수를 예측한다. 어떠한 수열 S에 당면했을 때, 과거에 S라는 수열이 나왔던 적이 있다면 이를 토대로 다음 상대의 수를 예측한다. 마지막으로 상대가 찬 방향에서 시작해서 계속해서 과거로 거슬러 올라가면서 longest matching string을 찾도록 하였다. 이를 나의 기록, 상대의 기록 그리고 양쪽 모두의 기록을 보는 경우를 포함하였다. 과거의 기록을 바탕으로 하는 이 전략은 매우 강력한데, 실제로 상위권에 포진한 대부분의 사람이 이와 유사한 전략을 사용하고 있으리라 예상된다.&lt;/p&gt;
&lt;p&gt;Multiple Neural Network&lt;/p&gt;
&lt;p&gt;다양한 구조의 신경망을 만들어서 입력을 받을 때마다 back-propagation으로 학습을 시키고 다음 상대방의 선택을 예측하게 시켰다. 다양한 구조란 신경망의 input node, hidden node의 개수와 learning rate를 다양하게 설정하였다는 뜻이다. 이 방법은 위의 과거 기록 기반의 전략이 잡지 못하는 상대를 잡기 위해 고안되었다.&lt;/p&gt;
&lt;p&gt;Multiple Neural Network with Offline Learning&lt;/p&gt;
&lt;p&gt;이전 경기 로그를 가지고 한 경기당 하나의 신경망을 학습시켰다. 이렇게 만들어진 여러 신경망을 가지고 상대방의 입력이 들어올 때마다 back-propagation으로 학습을 시켰다. 단, 이 경우에는 구현의 편의를 위해 모든 신경망이 단일 구조를 갖도록 하였다.&lt;/p&gt;
&lt;p&gt;Memetic Algorithm Using Neural Network&lt;/p&gt;
&lt;p&gt;신경망을 결정하는 각 노드의 weight를 모두 모아서 weight vector를 만들고 이를 염색체로 사용하는 유전 알고리즘을 돌렸다. 그리고 지역 최적화 기법으로 back-propagation을 사용하는 미미틱 알고리즘을 사용하였다.&lt;/p&gt;
&lt;p&gt;1-D chromosome encoding, random selection, one-point crossover, random replacement, basic mutation을 사용하였고, local은 back-propagation을 썼다. Fitness value는 training data를 랜덤하게 선택하여 신경망이 내뱉는 결과와 얼마나 일치하는지로 평가하였다.&lt;/p&gt;
&lt;p&gt;사용한 기법을 보면 알 수 있지만 정말 소박하게 구현을 하였는데 이는 이 predictor가 리그 후반부에 작성되었기 때문이다. 남은 시간이 얼마 없어서 더 성능을 높이는 노력을 할 수 없었다. 신경망에 적합한 k-D encoding으로 우선 표현을 하고 간단한 정규화에, 하다못해 룰렛휠 선택, 다차원 교차와 평범한 대치 연산을 사용했더라면 더 나은 결과가 나왔을 것으로 예상한다.&lt;/p&gt;
&lt;p&gt;리그 후반부에 작성된 predictor이기 때문에 아직 성능 향상의 여지가 많이 남아 있었는데도 이 predictor만 사용한 42가 15W 7T(+ 3/- 4) 8L 17239 scores (57.52%)의 결과로 10위를 차지하였다.&lt;/p&gt;
&lt;p&gt;Markov Chain&lt;/p&gt;
&lt;p&gt;이전 m개의 state로 다음 state를 확률 기반으로 예측하는 마코프 체인을 고려하였다. 사실 과거 히스토리를 하나씩 스테이트로 놓고 다음 상대의 선택을 확률적으로 표현하면 그것이 그대로 마코프 체인이라고 할 수 있다. (ex. 강원이가 공개한 tolerance 기반의 모델)&lt;/p&gt;
&lt;p&gt;Hard-coded Sequence&lt;/p&gt;
&lt;p&gt;랜덤하지만 결정된 수열을 출력하는 상대를 잡기 위해 한 번이라도 경기에 나온 적이 있던 수열은 모두 저장하여 이를 비교하도록 하였다. 또한 나올 법한 수열을 몇 개 임의로 집어 넣었는데 binary sequence, pi, e, sqrt(2)~sqrt(10)의 값을 저정하였다.&lt;/p&gt;
&lt;p&gt;Target Identification&lt;/p&gt;
&lt;p&gt;42의 구조가 바뀌면서 예전에는 잡을 수 있던 적을 못 잡는 경우가 생겼다. 이를 해결하기 위해서 최초 10번의 선택을 고정하고 이를 토대로 상대방을 판단하는 로직을 구현하였다. 상대가 파악되면 (미리 결정한 까다로운 적인 경우), 상대를 이길 수 있는 수열을 출력하도록 하였다. 단, 이 경우에도 다른 모든 predictor는 예측을 계속해서 수행하고, target identification이 예상하는 수열과 다른 수열이 등장하면 예측했던 상대가 아니라고 판단하고 기존의 다른 전략들로 상대하도록 하였다.&lt;/p&gt;
&lt;p&gt;최초 10번의 선택이 모든 봇끼리 서로 다를 확률이 상당히 높지만 반드시 그럴 필요는 없고, 42가 상대하기 까다로운 적끼리 서로 겹치지만 않으면 되었다. 실제로 매우 강력한 NPC인 간디2의 경우 다른 봇과 초기 10번의 선택이 같았는데, 그 상대는 쉽게 이길 수 있었기 때문에 해당 수열을 보면, 상대가 간디2라는 가정을 하고 게임을 진행하다가 예상과 다른 수열이 나오면 전략을 바로 바꾸는 식으로 대응하였다.&lt;/p&gt;
&lt;p&gt;Window&lt;/p&gt;
&lt;p&gt;과거 모든 기록을 보는 것보다 때로는 일정한 크기의 창을 두고 그만큼의 과거를 보는 경우가 더 성능이 좋은 때도 있다. 이를 위해 여러 크기의 창을 두고 각각에 대해 위의 전략들을 적용하도록 하였다.&lt;/p&gt;
&lt;p&gt;Meta-Meta Strategy&lt;/p&gt;
&lt;p&gt;단순한 메타-전략은 맹점이 있다. 42가 상대방이 P0 predictor를 사용하는 것을 알아차렸다고 가정하자. 만약 상대방이 한 게임의 절반이 지났을 때, P1으로 predictor를 변경하면 그동안 P0는 n/2의 점수를 쌓았지만 P1은 0점을 쌓았기 때문에 앞으로 n/2의 패배를 하기 전에는 계속해서 P0 predictor를 P1 대신에 사용하게 된다. 이를 막기 위해서 메타-창(meta-window)를 두어서 메타-창에서 가장 나은 전략을 선택하도록 하였다. 즉, P0로 n/2를 이기고 그 이후에는 메타-창에서 결정된 어떠한 값 k번 패배를 하면 P1으로 전략 교체가 가능하도록 하였다.&lt;/p&gt;
&lt;p&gt;예를 들어서 하드 코딩된 수열을 출력하던 적이 상대를 잡기 위해 특정 시점 이후에 자신의 수열을 반전시켜서 출력한다고 가정하자. 메타-메타-전략을 사용하지 않으면 특정 시점 동안 쌓았던 하드 코딩 전략 P0의 점수만큼의 점수를 다른 전략들이 얻기 전에는 계속해서 패배할 수밖에 없다. 하지만 메타-메타-전략을 사용하면 P0의 반전인 P1이 상대를 이기는 데 필요한 라운드는 메타-창에 의해 미리 결정된 k번에 불과하다. 즉, 상대가 자신의 수열을 반전시켜도 42는 여전히 상대를 압도적으로 이길 수 있다.&lt;/p&gt;
&lt;p&gt;다만 메타-메타-전략은 그 특성상 자신의 안정성을 높이면서 공격의 날카로움을 반감시키는 역할을 하게 된다. 비슷한 능력의 두 봇이 경쟁을 하되 한쪽은 보수적인 (안전을 우선시하는) 선택을 하고 다른 한쪽은 공격적인 선택을 한다면 확률적으로 공격적인 선택을 하는 쪽이 더 유리하다. 실제로 가장 공격적인 행태를 띄는 42는 소수의 강력한 predictor만을 사용하고 따로 창이나 메타-창을 두지 않은 경우였다. 이 경우 메타-메타-전략을 사용하는 42가 잡을 수 없는 적을 잡는 경우가 있었지만 반면 잡을 수 있는 적을 놓치는 경우도 발생하였고, 앞서 언급했다시피 하드 코딩 전략을 카운터하기 위해 수열을 반전시키는 전략이 나오는 것을 대비하여 메타-메타-전략을 포기할 수는 없었다. 메타-메타-전략이 공격적인 42와 비교해서 보는 손실을 최소화하기 위해 상대를 판단하고 그 상대를 이길 수 있는 수열을 뱉어내는 predictor를 도입하였다.&lt;/p&gt;
&lt;p&gt;메타-메타-전략도 완벽하지는 않다. 상대가 만약 메타-창이 결정한 상수 k를 알게 되면 이 k를 기점으로 자신의 전략을 변화시키면 메타-메타-전략은 바보가 될 수밖에 없다. 이를 해결하기 위해서는 decay-factor를 도입해서 메타-창이 결정하는 k 값이 시간이 가면서 줄어들도록 하는 방법을 생각할 수 있는데, 시간적인 여유가 부족하여 구현하지는 못하였다.&lt;/p&gt;
&lt;p&gt;Day-to-day Strategy&lt;/p&gt;
&lt;p&gt;메타-전략과 메타-메타-전략의 틀이 완성된 이후에는 각각의 predictor를 만드는 데에 집중하였다. 매번 개별 전략을 사용하여 이전에 잡을 수 없던 상대를 잡는지 관찰하였는데, 이는 단순히 좋은 predictor를 얻는 데에 그치지 않고 과거 로그를 바탕으로 42의 본체가 잡히는 경우를 최소화하는 역할도 겸해주었다.&lt;/p&gt;
&lt;p&gt;많은 날을 신경망을 사용하는 방법에 소모하였는데 좋은 결과는 리그 후반에 가서야 얻을 수 있었다. 리그 초반에 사용했던 신경망 기법에는 여러 문제점이 있었는데 이를 하나씩 보완하다가 리그 후반이 돼서야 제대로 된 신경망을 사용할 수 있었다. 여기에 낭비한 시간을 줄였다면 지금 공략하지 못하는 상대도 공략할 수 있었으리라 본다.&lt;/p&gt;
&lt;p&gt;어느 정도 predictor가 완성되면 메타-메타 42에 추가하여 실험하였는데, 여러 predictor가 뒤섞이면서 개별 predictor로 잡을 수 있던 상대를 잡지 못하는 경우가 생기기도 하였는데, 이는 42에 사용되는 인자를 변경하여 대부분 처리하였고, 그렇게 해도 잡을 수 없는 상대는 판별 이후에 이전에 승리를 거뒀던 수열을 내뱉는 방식으로 처리하였다.&lt;/p&gt;
&lt;p&gt;Final 42&lt;/p&gt;
&lt;p&gt;최종적으로 42는 random fall-back, frequency predictor, history analysis, multiple online neural network, hard-coded sequence와 target identification을 predictor로 사용하였다. 최종본에 사용된 하드 코딩 데이터는 직전 경기에서 확인한 고정 수열 및 몇 개의 유명 수열을 (pi, e, sqrt(2~10)) 사용하였다. 이는 하드코딩된 수천개의 데이터가 predictor 선택에서 너무 자주 선택되는 현상을 보였기 때문이다. 여타 신경망의 변종들은 target identification에 사용될 수열을 구하는 데에만 사용하였는데, 미미틱 알고리즘과 offline learning 신경망은 학습에 걸리는 시간이 무척 길었기 때문에 42의 최종 버전에서는 제외되었다. 마코프 체인은 리그 막판에 구현하여서 세부조절을 하고 구현체를 더 견고하게 만들 시간이 부족하여 제외되었다. &lt;/p&gt;
</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Sungjoo Ha</dc:creator><pubDate>Tue, 01 Mar 2011 22:53:45 +0900</pubDate><guid>http://blog.shurain.net/posts/56</guid></item><item><title>킥봇리그 소개
</title><link>http://blog.shurain.net/posts/55</link><description>
&lt;p&gt;&lt;a href="http://blog.shurain.net/posts/46/" target="_blank"&gt;예전 글&lt;/a&gt;에서 킥봇리그에 대한 이야기를 꺼낸 적이 있었다. 기록을 남겨둘 필요가 있을 것 같아서 블로그에도 남긴다.&lt;/p&gt;
&lt;p&gt;킥봇리그에 대한 설명은 주최자가 올린 &lt;a href="http://seo.80port.net/kickbot/intro.php" target="_blank"&gt;글&lt;/a&gt;을 읽어보는 편이 더 이해가 잘 될 것이다. 간단히 이야기해서 왼쪽 혹은 오른쪽으로 슛을 차는 AI를 짜서 다른 AI들보다 잘하면 되는 대회였다.&lt;/p&gt;
&lt;p&gt;한 달간 매일 새로운 코드를 제출하고 새로운 AI들의 경기 결과를 바탕으로 자신의 전략을 수정하는 일을 반복하였다. 이 당시에는 이러한 경쟁에 매우 심취하여서 정말 신나게 하루하루가 지나갔었다.&lt;/p&gt;
&lt;p&gt;최종결과는 안타깝게도 &lt;s&gt;콩&lt;/s&gt; 2등이었지만 재미있고도 유익한 경험이었다. 경기가 진행되면서 나타나는 여러 양상이 매우 흥미롭게 얽혀갔으며 상대의 전략 추측 및 여러 심리전이 매우 인상 깊었다. 이런 참가자가 몇 되지도 않고 단순한 규칙을 사용하는 대회에서도 이런 식으로 많은 일이 있을 수 있다는 게 신선한 충격을 주었다.&lt;/p&gt;
&lt;p&gt;대회가 끝나고 사람들이 하나 둘 자신들의 전략을 공개하였는데, 이를 보며 여러 가지 느낀 점이 많았다. 대부분 과거의 패턴을 파악해서 이를 기반으로 미래를 예측하는 방식을 사용하였는데, 간단히 생각할 수 있으면서도 강력한 기법이기에 많은 사람이 사용하였고 베리에이션도 많았다. 그 밖에 뉴럴 네트워크나 랜덤 함수를 조금 꼰 봇도 있었다. 여러 봇을 보며 생각할 거리가 많이 있었다.&lt;/p&gt;
&lt;p&gt;나의 전략은 다른 글에서 자세하게 소개하도록 하겠다.&lt;/p&gt;
</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Sungjoo Ha</dc:creator><pubDate>Tue, 01 Mar 2011 02:29:47 +0900</pubDate><guid>http://blog.shurain.net/posts/55</guid></item><item><title>The Fray - You Found Me
</title><link>http://blog.shurain.net/posts/54</link><description>
&lt;p&gt;&lt;object width="480" height="390"&gt;&lt;param name="movie" value="http://www.youtube.com/v/0QI3EkFHd0U?fs=1&amp;amp;hl=ko_KR"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/0QI3EkFHd0U?fs=1&amp;amp;hl=ko_KR" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="390"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;
&lt;p&gt;신을 만나서 어떠한 질문이든 던지라고 할 때 어떠한 질문을 하게될까?&lt;/p&gt;
&lt;p&gt;공감이 가는 질문과 대답이다.&lt;/p&gt;
</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Sungjoo Ha</dc:creator><pubDate>Fri, 25 Feb 2011 21:52:46 +0900</pubDate><guid>http://blog.shurain.net/posts/54</guid></item><item><title>연결
</title><link>http://blog.shurain.net/posts/53</link><description>
&lt;p&gt;이상하게도 기운이 없는 하루였다.&lt;/p&gt;
&lt;p&gt;정말 온몸에 기운이 없어서 몸을 움직일 수조차 없는 그런 날은 아니었다. 다만 어째서인지 정신적으로 참 기력이 없는 하루였다. 오전 중에 맥북 에어로 코드를 작성하다가 내 생각대로 동작해주지 않는 OS X에 기분이 상해서였을까? 아니면 계속해서 생기는 연구실 잡무 때문이었을까? 며칠간 나를 은근하게 괴롭히던 문제가 오늘 해결이 되었음에도 상쾌한 기분보다는 마무리를 마저 지어야 함에 질린 감이 조금 있었던 것일까? 저녁에 디군과 약속을 잡고 퇴근을 할 무렵에는 정말 정신적인 여유가 없었다.&lt;/p&gt;
&lt;p&gt;간만에 디군과 고기에 술 한 잔 나누면서 내가 잠시 몸담았던 회사의 이야기를 듣고 있자니 내가 정말 좋아했던 그 분야의 기억이 되살아나며 기분이 조금 풀렸다. 그밖에 평범한 사는 이야기나 주변인들의 안부를 나누고 결혼 언제 하냐는 드립을 쳤다가 연애나 하라는 반격을 당하기도 했다. 어쩌다 고깃집에서 합류한 동기며 후배들과 함께 커피숍에 가서 커피를 마시며 대단치 않지만 왠지 모르게 기운을 조금이나마 차리고 해어졌다.&lt;/p&gt;
&lt;p&gt;방에 돌아와 신년 계획의 일부를 조금 진행하고, 웹서핑도 조금 하고, 사람들과 이야기도 조금 하였다. 노트북에선 계속해서 Jason Mraz의 no doubling back이 흘러나오고 멍하니 음악을 듣다 보니 어느덧 평소의 여유가 돌아온 것을 알 수 있었다. 결국 내가 좋아하는 사람들과의 연결이 나를 움직이게 하는 모양이다.&lt;/p&gt;
&lt;p&gt;나라는 사람의 전부를 이해할 사람을 찾을 수 있을지는 모르겠지만 일부라도 이해하고 이를 받아줄 수 있는 사람을 만나는 것은 축복이라 불러도 이상하지 않음을 다시금 느낀다. 함께 신나게 전공 이야기를 나눌 수 있는 사람들, 시시콜콜한 일상의 소소한 재미를 나눠주는 사람들, 나의 뻔한 술자리 이야기를 늘 들어주는 사람들이 있기에 아직 세상은 그래도 살만하다. 우울한 세계관 속에서도 재미를 찾아가고 있으니 아직은 영화가 끝날 때가 아닌 모양이다.&lt;/p&gt;
</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Sungjoo Ha</dc:creator><pubDate>Tue, 22 Feb 2011 03:41:09 +0900</pubDate><guid>http://blog.shurain.net/posts/53</guid></item><item><title>회상
</title><link>http://blog.shurain.net/posts/52</link><description>
&lt;p&gt;스웨덴에 있을 때에는 정말 외로울 법한 삶을 살았다. 정훈이형이 같이 갔기는 했지만 서로 방을 따로 썼었고 나는 사람을 만나러 돌아다니지도 않았었으니까.&lt;/p&gt;
&lt;p&gt;한국에서와는 다르게 아침 일찍 일어나서 오븐에 토스트를 던져 넣은 뒤 가볍게 운동을 하고 빵을 씹으며 수업을 들으러 가곤 했다. 내가 있던 기숙사는 Lilla Sunnersta라는 곳이었는데 수업을 주로 듣던 MIC에서 자전거로 대충 15분가량 걸리는 곳에 있었다. 처음 갔을 때는 날씨도 화창하고 낮과 밤의 길이도 한국과 비슷해서 좋았던 것 같다. 자전거를 달리며 지나가는 주변 풍경을 즐기고 학교 앞에 있는 양 때를 보며 한국에서 느낄 수 없던 여유를 느끼곤 했다.&lt;/p&gt;
&lt;p&gt;종종 정훈이형의 버디였던 데이빗이랑 여기저기 돌아다니곤 했는데 도심 중심부에 조그만 호수가 있고 거기에 오리가 무척 많았다. 그 근처에 앉아서 데이빗이 이야기했던 기억이 나는데 스웨덴에서는 그냥 자연을 즐기며 사는 것 같다고 했었다. 이후에 가끔 혼자 여기저기 돌아다니면서 괜히 앉아서 산들산들 불어오는 바람을 즐기곤 했었다.&lt;/p&gt;
&lt;p&gt;이제야 갑자기 이런 기억이 다시 나는 것은 자취를 새로 시작했기 때문인가? 그 시절에는 여유로움을 느꼈지 외롭다는 생각은 별로 하지 않았던 것 같다. 지금도 외로운지는 잘 모르겠지만 그 당시의 여유는 없어진 것 같다. 치열하게 몰두할만한 무엇은 킥봇 리그 이후로는 없었고 그렇다고 여유로움을 만끽할만한 마음의 여유는 없는 것 같다. 그러니 괜스레 담배나 한 대 입에 물고 이딴 글이나 쓰고 있겠지.&lt;/p&gt;
</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Sungjoo Ha</dc:creator><pubDate>Sat, 05 Feb 2011 15:40:00 +0900</pubDate><guid>http://blog.shurain.net/posts/52</guid></item><item><title>Pride and Prejudice
</title><link>http://blog.shurain.net/posts/51</link><description>
&lt;p&gt;(전략) "However, he wrote some verses on her, and very pretty they were."&lt;/p&gt;
&lt;p&gt;"And so ended his affection," said Elizabeth impatiently. "There has been many a one, I fancy, overcome in the same way. I wonder who first discovered the efficacy of poetry in driving away love!"&lt;/p&gt;
</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Sungjoo Ha</dc:creator><pubDate>Thu, 03 Feb 2011 03:34:57 +0900</pubDate><guid>http://blog.shurain.net/posts/51</guid></item><item><title>두서없는 이야기
</title><link>http://blog.shurain.net/posts/49</link><description>
&lt;p&gt;어느덧 새해의 1/12가 지나가 버렸다. 한 달간 있었던 일들을 두서없이 나열해보자.&lt;/p&gt;
&lt;p&gt;한 해의 시작을 술 (그리고 식상+안식상한 아저씨들)과 함께 녹두 어딘가의 와인 파는 집에서 맞이하였다. 아마 데낄라 샷을 신년이라고 서비스로 두어 잔 마셨던 것 같다. 늘 있는 그런 술자리 대화가 있었고 나이를 한 살 더 먹음에 대한 한탄과 이루어 놓은 것 없는 인생에 대한 부끄러움을 성찰은 개뿔 그냥 술 먹고 놀았던 것 같다.&lt;/p&gt;
&lt;p&gt;입구역에서 한동안 자취를 하게 되었고 집에는 쿨하게 사흘 전쯤 통보했던 것 같다. 역시 엄마도 쿨하게 알았다고 했었지. 아무튼 자취를 시작하게 되었는데 일단 어려움을 이해해주고 기꺼이 방을 빌려준 아사삐에게 감사해야 할 것 같다. 돌아오면 몰타라도 가야 할 기세. 어찌 되었든 자취를 하면서 마음에 여유가 조금 생겼다. 웁살라에 갔을 때도 느꼈지만 나는 혼자 사는 편이 마음이 편하다. 웁살라에 갔을 때처럼 돼지가 되어버리면 어쩌나 하는 걱정이 살짝 들지만 그건 그것대로 좋을지도 모르겠다.&lt;/p&gt;
&lt;p&gt;크리스마스 전에 주문을 넣었던 킨들이 드디어 도착해서 내 손에 쥐어지게 되었다. 킨들이 생기고 나니 트위터를 거의 하지 않게 되었다. 나는 분명히 아이폰으로도 열심히 글을 읽고 있었다. Read It Later에는 늘 읽어야 할 글이 수십 개씩 쌓여 있었고, 이동하면서 줄기차게 글을 하나둘 먹어치우고 있었다. 분명히 그때도 꽤 집중해서 글을 제거하고 있었다고 생각했는데 킨들로 옮겨오고 나서 트위터를 하지 않는 것을 보니, 아이폰으로 글을 읽으며 트위터를 비롯한 온갖 집중을 방해하는 유혹 요소들을 잘 제어하지 못했던 모양이다. Read It Later의 활용이 쉽다는 점에서 아이폰을 무척 요긴하게 사용하고 있었는데 지금은 url을 넣으면 적당히 본문만 잘라서 킨들로 보내주는 프로그램을 간단히 만들어서 잘 사용하고 있다.&lt;/p&gt;
&lt;p&gt;뭔가 글을 더 쓰고 싶었는데 갑자기 변덕이 생겨서 여기까지만 쓰기로 했다.&lt;/p&gt;
</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Sungjoo Ha</dc:creator><pubDate>Wed, 02 Feb 2011 20:21:01 +0900</pubDate><guid>http://blog.shurain.net/posts/49</guid></item><item><title>신년 계획 계획
</title><link>http://blog.shurain.net/posts/48</link><description>
&lt;p&gt;2011년이 된 지 어느덧 보름이 넘게 지났다. 지난해를 돌아보는 기년회가 얼마 전에 있었는데 비록 &lt;s&gt;밤새 스타2를 하다가 정오쯤에나 잠들어서&lt;/s&gt; 아주 바쁜 일이 생겨서 뒤풀이만 참가했지만 발표 준비를 하면서 지난해를 돌아볼 수 있었다. 그러면서 느낀 것이 굵직한 1년 계획이 있어야 한다는 것이다.&lt;/p&gt;
&lt;p&gt;하루하루에 할 수 있는 일에는 한계가 있다. 큰마음을 먹고 일주일간 노력한다 하여도 달성할 수 있는 일의 크기는 결국 그 정도 수준에 머무를 수밖에 없다. 당장 할 수 있는 작은 것들이 모여서 커지는 것은 분명한 사실이지만 그 방향을 결정하는 것은 결국 장기적인 계획이다.&lt;/p&gt;
&lt;p&gt;한해가 시작하면서 그 해에 달성했으면 하는 목표를 세우고 이를 실제로 달성 가능하게 할 준비를 할 필요가 있다. 그런 의미에서 나는 1월을 신년 계획의 계획을 세우는 달로 잡았다. 1월 1일이 되자마자 올해는 이렇게 살아야지 하고 세우는 계획이라는 것이 결국에는 세부적인 사항이 부족하고 실질적으로 달성 가능하지 않은 목표를 세우는 경우가 많다. 그런 문제를 방지하기 위해 1월 동안 여러 목표를 생각해보고 그 중 가장 가치 있는 몇몇 목표들을 선택하여 세부적인 계획을 세우는 것이다. &lt;/p&gt;
&lt;p&gt;지금까지 5, 6가지 정도의 목표가 나왔는데 각각을 검토하며 버릴 것은 버리고 세부적인 계획을 세우고 있는다. 이게 완성되고 2월에 본격적으로 목표 달성을 위한 단계를 하나씩 밟아갈 텐데 어떻게 흘러갈지 기대된다.&lt;/p&gt;
</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Sungjoo Ha</dc:creator><pubDate>Tue, 18 Jan 2011 16:46:06 +0900</pubDate><guid>http://blog.shurain.net/posts/48</guid></item><item><title>근황
</title><link>http://blog.shurain.net/posts/46</link><description>
&lt;p&gt;요새 근처에서 좋은 소식이 여럿 들려왔다. 진심으로 축하하고 덩달아 나도 신이 나면서도 한편으로는 씁쓸한 이 기분.&lt;/p&gt;
&lt;p&gt;몇 주 전부터 치아 교정을 받고 있다. 사실 나는 별생각이 없었는데 엄마가 일하는 곳에서 요새 누가 교정을 했더니 인물이 확 달라졌다는 말씀을 하시면서 나더러 하라고 하시더라. 뭐 나야 돈도 없는데 내주신다니 땡큐지만... 개고생 할 생각을 하니 벌써 아득하다. 오늘 이를 뽑았는데 아직 아프지는 않지만 마취 기운이 풀리기 시작하면 헬 오브 지옥이 열리겠지? 덕분에 일주일간 금주에 금연이긴한데 과연 지킬 수 있을지는 또 다른 이야기.&lt;/p&gt;
&lt;p&gt;요새 킥봇리그에 빠져서 다른 것은 아무것도 못하는 생활을 살고 있다. 킥봇이 뭔지는 아마 나중에 자세히 설명할 기회가 또 있으리라 본다. 아무튼 정말 오래간만에 열중할 수 있는 소일거리를 찾아서 기분이 좋다. 정말 이렇게 무언가에 열중하는 것이 몇 년만인지 모르겠다. 이렇게 연구를 했으면 벌써 논문이 하나 나왔겠지.&lt;/p&gt;
&lt;p&gt;아무튼 요약하자면 신나고 씁쓸하고 땡큐에 아득하지만 기분이 좋다!&lt;/p&gt;
</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Sungjoo Ha</dc:creator><pubDate>Wed, 24 Nov 2010 19:47:54 +0900</pubDate><guid>http://blog.shurain.net/posts/46</guid></item><item><title>Collected Fictions
</title><link>http://blog.shurain.net/posts/45</link><description>
&lt;p&gt;There Are More Things&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I had foreseen this failure, but it is one thing to foresee something and another thing when it comes to pass.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The Improbable Impostor Tom Castro&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;But Fate (for such is the name that we give the infinite and unceasing operation of thousands of intertwined causes) would not have it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;보르헤스는 이야기가 매력적이기도 하지만 사용하는 표현이 내 마음에 드는 경우가 많다.&lt;/p&gt;
</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Sungjoo Ha</dc:creator><pubDate>Thu, 21 Oct 2010 15:25:35 +0900</pubDate><guid>http://blog.shurain.net/posts/45</guid></item><item><title>Ulrikke
</title><link>http://blog.shurain.net/posts/44</link><description>
&lt;p&gt;디군 추천으로 보르헤스의 Collected Fictions를 읽고 있다. 국문 번역을 읽고 싶지는 않고 스페인어는 못하니 어쩔 수 없이 영문 번역본을 주문했다. 우선 디군이 추천해준 The Book of Sand를 먼저 다 읽었는데, 여러 환상적인(literally) 이야기가 매력적이다. 다음은 모래의 책에 있는 단편 중의 하나인 Ulrikke의 일부이다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;"On Oxford Street," she said, "I will retrace the steps of de Quincey, who went seeking his lost Anna among the crowds of London."&lt;/p&gt;
&lt;p&gt;"De Quincey," I replied, "stopped looking. My search for her, on the other hand, continues, through all time."&lt;/p&gt;
&lt;p&gt;"Perhaps," Ulrikke said softly, "you have found her."&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;다른 정말 환상적인 이야기들이 잔뜩 있지만 나는 이 이야기가 가장 기억에 남는다. 나는 이런 당당함을 사랑한다.&lt;/p&gt;
</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Sungjoo Ha</dc:creator><pubDate>Fri, 15 Oct 2010 01:47:37 +0900</pubDate><guid>http://blog.shurain.net/posts/44</guid></item><item><title>심금을 울리는 시
</title><link>http://blog.shurain.net/posts/43</link><description>
&lt;p&gt;&lt;img alt="날씨야 네가 아무리 추워봐라 내가 옷 사 입나 술 사 먹지" src="/m/posts/alcpoem.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;술타령&lt;/p&gt;
&lt;p&gt;날씨야&lt;br /&gt;
네가&lt;br /&gt;
아무리 추워봐라&lt;br /&gt;
내가&lt;br /&gt;
옷 사 입나&lt;br /&gt;
술 사 먹지&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;이 시를 나에게 알려준 유키에게 감사.&lt;/p&gt;
</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Sungjoo Ha</dc:creator><pubDate>Mon, 04 Oct 2010 17:42:54 +0900</pubDate><guid>http://blog.shurain.net/posts/43</guid></item></channel></rss>

