글쓴이 보관물: snowall

snowall에 대하여

onecup, research department

거미의 지능

(이 글은 http://snowall.tistory.com/1755 를 보충하여 다시 작성한 글이다.)

거미는 지능을 갖고 있는가? 이 질문에 대답하기 위해서, 우선 지능이 무엇인가 정의하여야 한다. http://en.wikipedia.org/wiki/Intelligence 하지만 백과사전을 참조해봤자 어려운 얘기가 잔뜩 써 있을 뿐이다. 지능이라는 용어는 의식, 기억, 목적, 이런 것들과 구별되어야 한다. 이 용어들은 어느 정도의 관련성은 있지만 완전히 같거나, 어떤 용어가 다른 용어를 완전히 포괄하거나 하지 않는다. 이 점에 대해서 더 긴 논의는 하지 않을 생각이다. 이 글에서는 지능에  대해서만 이야기 할 것이고, 그것이 이와 같이 유사해 보이는 다른 용어와 혼동되면 곤란하다는 점만 짚고 넘어가도록 하겠다.

 지능에 대한 유명한 판정법에는 존 설이 제안한 중국어 방 검사가 있다. 중국어 방 검사란 다음과 같다. 어떤 방 안에 사람이 한 명 들어가 있는데 이 사람은 영어만 할 줄 아는 사람이다. 이 방 안에 중국어로 된 질문을 넣으면 이 사람이 그 질문에 대한 대답을 작성해서 내보낸다. 이 작업을 하기 위해서 이 사람에게는 영어로 되어 있는 “중국어 처리방법”이 주어져 있다. 이 책은 중국어 단어의 뜻이나 문법에 대해서는 전혀 나와있지 않으며, 단지 어떤 기호나 단어가 주어져 있을 때 그 기호를 처리하는 방법에 대한 설명만이 나와 있다. 이 책이 충분히 잘 만들어져 있다면, 방 밖에서 중국어로 대화하는 중국어 사용자는 이 안에 중국인이 들어있는지 중국어를 모르는 사람이 들어있는지 알 수 없다. 또한, 이 책의 규칙은 컴퓨터에 의해서 실행될 수도 있으므로 이 작업을 하는 주체가 컴퓨터인지 사람인지도 구분하기 어려울 수 있다.

이런 상황에서, 질문을 던진다. 과연 중국어 방 안에 있는 사람은 중국어를 이해하고 있는 것인가? 그는 중국어를 어떻게 사용하는지 모르지만, 영어로 된 사용설명서만으로 충분히 질문을 처리할 수 있다. 만약 그가 중국어를 이해한 것이라면, 같은 일을 처리할 수 있는 컴퓨터 역시 중국어를 이해한 것일까? 반대로, 컴퓨터가 중국어를 이해하지 않은 것이라고 해야 한다면 중국어 방에 들어간 사람 역시 중국어를 이해하지 않은 것인가? 물론 중국어 방 검사는 지능과 인공지능을 구별할 수 없다는 뜻이며, 인공지능이 완벽하게 대답을 하더라도 그것이 지능이 있다고 말할 수는 없다는 뜻이다. 이에 대한 반론으로는, 중국어 방 안에 있는 사람은 중국어를 이해하지 못했더라도 그 사람을 포함한 중국어 방 전체는 중국어를 이해했다고 생각할 수 있다는 주장이 있다. 나는 이에 대해서 아직은 답이 없는 것으로 알고 있다.

지능에 대한 또 다른 검사 방법이 있는데, 앨런 튜링이 제안한 튜링 검사이다. 튜링 검사 역시 매우 간단한데, 다음과 같다. 여러명의 심사위원을 두고 이 심사위원들이 검사 대상에게 질문을 던진다. 검사 대상은 인공지능일 수도 있고 진짜 사람일 수도 있다. 대화의 공정성을 기하기 위하여 채팅을 이용하는 것으로 해도 좋다. 충분한 대화를 진행한 후, 만약 심사위원들이 검사 대상이 인공지능인지 진짜 사람인지 구분할 수 없다면 이 검사에 참여한 인공지능은 인간과 비슷한 수준의 지능을 갖고 있다는 것으로 판단할 수 있다는 것이다.

이런식으로 지능이 있는지 알아볼 수 있는 검사 방법들이 제안되어 있다. 여기서 이런 방식의 지능 검사에 대해서 더 깊이 들어가지는 않겠지만, 중요한 것은 지능 검사를 하기 위해서 대상과 상호작용을 해야 한다는 것이다. 대상과 상호작용을 할 방법이 없다면 지능 검사 역시 불가능하다.

그렇다면 이 글에서 주제로 삼고 있는 거미의 지능을 어떻게 다룰 것인가? 거미에게 지능이 있는지 없는지 알기 위해서는, 거미에게 뭔가를 물어봐야 하는데, 거미가 외부와 소통하는 방식은 거미줄이다. 따라서 거미줄을 건드리거나 거미줄 위에서 거미가 움직이는 것들이 거미의 언어라고 말할 수 있다.

거미에게 지능이 있는지 검사하기 위해서는, 지능을 정의하고 그 지능이 “거미의 지능”인 경우 어떻게 검사할 수 있는지 방법을 제안해야 한다.

튜링 검사에서 힌트를 얻어서 지능이 무엇인가 이야기한다면, 지능이란 지능이 있다고 믿어지는 대상으로부터 지능이 있다는 결론을 얻어낼 수 있는 능력이다. 사실 이렇게 지능을 정의하면 지능을 재귀적으로 정의해야 하고, 다른 객체의 지능은 또한 어떻게 알아낼 것인가에 대한 질문이 끝없이 이어지면서 순환 논리에 빠진다. 다만 일반적으로 인간은 지능을 갖고 있는 것으로 간주되므로 인간을 참조하여 거미의 지능을 판정해 보자.

이제 우리는 거미를 위한 튜링 검사를 설계해야 한다. 앞에서 말했듯이 거미와 대화할 수 있는 방법은 거미줄 뿐이다. 예를 들어, 거미줄의 위쪽 두번째 줄을 흔드는 것은 거미에게 “How are you?”라고 물어보는 것일까? 그렇다면 거미는 그곳으로 달려와서 그곳에 뭐가 있는지 확인하고 “이건 먹는 것인가?” 이렇게 물어볼 것이다. 이것을 인간에게 시킨다고 하자. 인간이 거미가 될 수는 없으므로, 실제 거미와 똑같이 생긴 로봇을 만들고, 이것의 조작을 인간에게 맡긴다. 물론 이 로봇은 겉보기에는 거미와 구별할 수 없다. 거미 로봇을 거미줄 위에 올려놓고, 거미줄의 위쪽 두번째 줄을 흔들어 보자. 인간은 거미의 행동패턴을 알 수 있기 때문에 이 경우 그곳으로 달려와서 그곳에 뭐가 있는지 확인하고 “이건 먹는거임?” 이렇게 물어볼 것이다. 인간은 거미가 되었다. 따라서, 검사를 하고 있는 사람은 이놈이 거미인지 사람인지 구별할 수 없다. 인간이 거미를 흉내내고 있음을 알더라도 구별할 수 없다. 따라서 인간과 거미는 같은 수준의 지능을 갖고 있다.

이쯤에서 여러분의 마음 속에서는 “그럴듯 하긴 한데, 그건 아니잖아?” 하는 생각이 들 것이다.

어떤 일을 해야 하는지만 알려주면 뭐든지 따라할 수 있는 만능 기계와, 그 일만 해야 하는 특수 기계는, 적어도 그 만능 기계가 특수 기계와 같은 일을 하고 있는 한 결코 구분이 되지 않는다. 여기서 인간은 만능 기계에 해당하고 거미는 특수 기계에 해당한다.

물론 인간이라면 거미를 따라하다가 실수할 수도 있고, 그렇다면 검사 대상인 거미가(또는 거미 로봇이) 실수할때까지 계속해서 검사를 하여 알아낼 수도 있을 것이다. 자, 그럼 이제 거미를 똑같이 따라하는 기계를 만들어 보자. 거미를 연구하는 사람들이 알아낸 거미의 모든 행동패턴을 저장장치에 입력해 놓고, 거미줄에서 특정 입력이 들어오면 그때 거미가 하는 행동을 똑같이 따라할 수 있는 기계이다. 이 기계보고 거미 로봇을 조작하도록 한 후, 튜링 검사를 해보자. 로봇은 인간과 비교해서 실수를 하지 않을테니 보다 완벽하게 거미를 따라할 수 있을 것이다.

이 실험에서 만약 둘 다 알려진 행동 패턴 대로만 움직인다면 거미와 거미 로봇은 구별할수 없다. 반대로, 둘 중 하나로부터 알려지지 않은 행동 패턴이 나타난다면, 알려지지 않은 행동 패턴을 한 쪽이 바로 거미라는 것을 알 수 있다. 왜냐하면 거미 로봇은 지능이 없는 기계에 의해서 사전에 입력된 대로 조작되고 있기 때문이다. 그러므로 여기서 발견한 새로운 행동 패턴은 거미의 새로운 신비를 밝힌 것이다.

다시 인간이 거미 로봇을 조작하는 경우로 돌아오자. 앞서 말했듯이, 거미가 알려지지 않은 행동 패턴을 하는 경우에는 기계가 조작하는 거미 로봇과 구별이 된다. 문제는, 눈앞에 있는 거미줄 위에 있는 거미처럼 생긴 놈이 진짜 거미인지 인간이 조작하는 거미 로봇인지 여전히 구별할 수 없다는 것이다. 인간이 실수를 해서 거미 로봇의 조작에 실패한 것인지, 거미가 아직 알려지지 않은 행동패턴으로 움직인 것인지 구분할 수가 없다. 이것을 연구하기 위해서 같은 행동패턴이 반복되는지 살펴볼 수도 있지만, 거미 로봇을 조작하는 인간도 바보가 아니라면 같은 행동패턴이 반복되도록 할 것이며, 그러다가 또 실수를 하더라도 여전히 이게 거미인지 인간인지 구별이 가지 않게 된다.

이 논리에 반박하고 싶은 사람이 많을 것이라 생각한다. 만약 거미에게 지능이 있으면, 이번엔 인간이 하는 것을 따라할 수 있어야 하지 않은가? 이런 질문을 던지고 싶을 것이다. 하지만 일단 그렇게 하기 위해서는 거미에게 그렇게 하라고 시켜야 한다. 이 시점에서 진지하게 물어보자. 거미에게 “인간을 따라해보렴”이라고 시키려면 거미줄을 어떻게 움직여야 할까? 우리는 그것을 알 수 없다. 정확히 말하면, 아직은 모른다고 충분히 주장할 수 있다. 우리는 거미가 거미줄의 흔들림에 반응하는 모든 패턴을 다 알고 있지만, 또는 모두 다 알 수 있겠지만, 그럼에도 불구하고 거미에게 어떤 일을 지시하기 위해서 어떻게 소통해야 하는지 모른다. 거미가 지능을 갖고 있지만 우리가 거미의 언어를 모르기 때문에 그와 대화할 수 없는 것일수도 있고, 거미가 지능이 없어서 거미에게 그렇게 시킬 수 없는 것일수도 있다. 이 두가지 경우는 여전히 구별할 수 없다.

여기서, 나는 거미가 지능을 갖고 있을 수 있다는 것과, 그것에 대해 알 수가 없다는 이야기를 하였다. 이와 유사한 논리는 지능을 갖고 있을 수 있는 다른 생명체에도 적용할 수 있고, 외계 생명체에도 생각해 볼 수 있고, 인공지능의 경우에도 고려해 볼 수 있다. 만약 우리가 인간이 아닌 다른 생명체에게 지능이 있음을 또는 없음을 증명하고 싶을 때, 어떻게 해야 확신할 수 있을까? 이 질문에 대해서는 좀 더 고민해보고 추가로 글을 써볼 생각이다.

4차 산업혁명

4차 산업혁명의 시대가 오고 있다고 한다. 산업혁명은 산업에 대단히 큰 변화가 나타나는 현상이다. 첫번째 산업혁명은 증기기관을 이용한 기계화, 두번째 산업혁명은 공장식 대량화, 세번째 산업혁명은 컴퓨터에 의한 자동화, 그리고 네번째 산업혁명은 가상화에 의한 분산화이다. https://en.wikipedia.org/wiki/Industry_4.0

나는 4차 산업혁명을 가상화에 의한 분산화라고 생각하는데, 가상화와 그로부터 가능하게 된 분산화가 기존의 컴퓨터 자동화를 뛰어넘어서 생산과 소비를 비롯한 세상의 모든 부분에 큰 영향을 주기 때문이다.

가상화라는 것은 실존 또는 실체를 추상화하여 실체가 없는 객체로 바꾸는 것을 뜻한다. 실체가 없는 객체이지만, 가상화 기술에 의해서 그 객체는 실체에 영향을 줄 수 있다. 가령, 비트코인이라는 새로운 화폐의 등장이 좋은 예가 될 것이다. 비트코인은 어떤 국가나 기관에서 발행한 화폐도 아니고, 금덩어리나 철광석처럼 실체가 있는 자원으로 존재하지도 않는다. 비트코인은 오직 인터넷에 연결된 컴퓨터의 연결망에 담겨진 정보에 의해 정의되는데, 만약 전 세계의 컴퓨터가 꺼진다면, 또는 인터넷이 끊긴다면 비트코인은 사라진다. 우리는 상평통보나 로마시대의 금화를 보고서 그러한 화폐가 존재했다는 사실을 확인할 수 있다. 하지만 비트코인은 그런 실체가 전혀 없으며, 굳이 실체를 찾는다고 한다면 비트코인에 관한 수학적 이론을 처음으로 제안한 논문이라고 할 수 있을 것이다. 하지만 그것도 그 존재에 대한 이야기일 뿐 우리가 비트코인이라고 부르는 것은 그 어디에서도 찾을 수 없다. 하지만 분명히 우리는 비트코인으로 물건을 구입할 수 있으며, 사기를 당하지 않는 한 그렇게 구입한 물건은 확실히 내가 사용할 수 있는 물건이 된다. 이것이 기술의 발전에 의해 나타난 가상화의 한 사례라고 생각한다.

가상화가 이 이야기에서 중요한 이유는 우리가 살고 있는 세계 그 자체를 넓히기 때문이다. 현재 우리가 사는 현실 세계는 여러 법칙에 의해서 제약을 받고 있다. 여기서 말하는 법칙이란 물리적 법칙, 생물학적 법칙 등 자연 법칙을 비롯하여 인간의 법, 특정한 규칙 등 각종 규칙이 있다. 법칙은 이 세계를 구성하는 동시에 세계에 의해서 정해져 있고 그것을 바꾸는 것은 매우 어렵거나 불가능하다. 하지만 가상화 기술에 의해서 만들어진 가상 세계는 실제 세계에 영향을 줄 수 있으면서, 동시에 가상 세계의 법칙은 얼마든지 쉽게 바꿀 수 있다.

가상화에서 법칙을 쉽게 바꿀 수 있다는 것이 어째서 중요한가? 만약 우리가 날씨를 마음껏 조절할 수 있다면 농업 생산성이 매우 크게 늘어날 것이고 식량난은 사라질 것이다. 또, 물리 법칙을 바꿔서 초광속 통신이나 초광속 여행이 가능하다면 땅걱정 할 필요 없이 온 우주를 다니면서 널찍하게 살 수 있을 것이다. 하지만 우리는 실제 물리 법칙에 기반한 세계에서 살고 있으므로 이런 것들을 기대하기 어렵다. 가상세계 역시 실제 세계 위에 만들어져 있으므로 실제 세계의 법칙을 어길 수는 없다. 하지만 실제 세계의 법칙을 어길 수 없다는 제약 조건은 오직 가상세계가 실제 세계에 영향을 주는 상황에서만 작동한다. 즉, 가상 세계가 실제 세계에 영향을 주지 않는 상태로 남아있는 한 가상 세계는 얼마든지 그 법칙을 바꾸고, 그 모습을 바꾸며 변할 수 있고, 우리가 마음껏 변화시킬 수 있다.

이 특징은 우리에게 하나의 새로운 가능성을 열어주는데, 실제 세계에 영향을 줄 때, 같은 영향이 나타날 수 있는 다양한 방법이 존재할 수 있다는 점이다. 가령, 통신 매체가 발달하면서 전자우편이 일상적으로 사용하게 되었는데, 이것이 우리 생활에 가져온 변화는 매우 놀라울 정도이다. 같은 내용을 전달하더라도 실체가 있는 편지를 사용한다면 최소한 몇 시간에서 며칠씩 걸리는 것이 매우 당연하지만 전자우편을 사용한다면 1초 이상 걸리지 않는다. 여기서 시간이라는 자원이 절약되며, 남는 자원을 이용해서 다른 곳에 사용할 수 있게 되는 것이다. 현실 세계에 존재하는 다른 자원에 대해서도 마찬가지로 현실의 자원을 사용하는 다양한 방법을 제공하고 같은 자원을 더 효율적으로, 더 효과적으로 사용할 수 있는, 더 좋은 방법을 찾을 수 있다는 것이다.

이러한 가상화는 우리에게 분산화를 가능하게 하였는데, 바로 이 부분에서 4차 산업혁명이 시작된다. 가상화는 물리적 실체의 구체적 상태나 위치 등에 영향을 받지 않고, 그런 현실의 요소에 영향을 받는다 해도 그에 맞춰서 가상 세계의 법칙을 고칠 수 있으므로 여전히 그 객체는 변함없이 존재할 수 있다(!). 이 자유로움을 잘 활용하면 가상 세계에서는 하나의 큰 덩어리로 존재하는 객체라 하더라도 실제로 꼭 연결되어 있는 연속체일 필요가 없다는 사실을 알 수 있다. 반대로, 실제 세계에서 하나로 연결된 연속체를 가상 세계에서는 여러개로 쪼개어 생각할 수도 있다. 이것이 바로 가상화에 의해 가능하게 된 분산화이다.

분산화는 자원의 낭비를 줄일 수 있는 방법 중 하나이다. 자원의 낭비는 해당 자원이 목적을 위해 사용될 때, 목적을 위해 사용되지 않으면서 다른 곳에 사용할 수도 없는 자원이 발생하는 것이다. 예를 들어, 나무토막을 깎아서 밥그릇을 만들어 낸다고 하면 우리가 사용하는 자원은 밥그릇에 해당하는 부분이고 깎아낸 톱밥은 낭비되는 자원이다. 분산화가 가능해지면, 나무토막에서 밥그릇을 만들어 낸 후 남는 톱밥을 다른 곳에 보내서 사용할 수 있다. 비료의 재료로 쓴다거나, 난방 연료로 쓴다거나 하는 것들이 가능하다. 물론 이런 사례들은 기존에도 이미 충분히 하고 있던 것들이기 때문에 잘 와닿는 사례는 아니다. 하지만 가상화를 통한 분산화는 쪼갤 수 없었던 것들을 쪼개어 낭비되는 자원을 줄일 수 있다.

대표적인 사례가 재택근무의 일상화이다. 재택근무가 가지고 있는 장점은 분명하다. 출퇴근으로 낭비되는 시간이 없고, 사무실 비용이 줄어들고, 교통비도 절약되고, 업무시간이 자유로워진다. 하지만 ‘업무’라고 하는 것이 갖고 있는 특성상 쪼개기가 매우 어려웠으며 업무는 다들 회사에, 사무실에 모여서 하는 것이 당연했기 때문에 재택근무가 대중화, 일상화 될 수 없었다. 여기에 가상화를 도입하면, 현실에서 쪼갤 수 없었던 업무가 가상적으로 쪼갤 수 있게 된다. 이렇게 나눠진 업무들 중에서 자신이 처리해야할 분량만을 가져다가 자신의 집이나 편한 장소에서 처리하여 결과물을 반환하면, 가상 세계에서 결과물이 다시 합쳐져서 현실의 결과물로 나타난다.

또한, 가상화는 그 속에서 가상의 처리자를 만들어 낼 수도 있는데, 그것이 바로 인공지능의 등장이다. 기존에는 현실 세계의 객체나 사건을 다루기 위해서 반드시 그와 연관된 물리적 실체가 필요했고, 그 물리적 실체를 설계하거나 운전하기 위해서 지능이 필요한 경우에는 반드시 사람이 필요했다. 즉, 지능은 사람만이 가지고 있다는 것이 현실의 법칙이기 때문에 이것을 어길 수 없는 것이다. 하지만 가상 세계에서는 지능을 가진 객체가 반드시 사람이어야 할 필요가 없으며, 그 부분을 프로그램이 대체하는 것이 가능하다. 위에서 예를 들었던 재택근무를 다시 가져와 본다면, 분리된 업무 덩어리들 중에 어떤 것들은 인공지능이 처리할 수 있을 것이고, 그것들을 인공지능에게 맡긴다면 업무를 처리하기 위해 필요한 사람의 수가 줄어든다. 따라서 그만큼 사람들은 다른 일들을 할 수 있게 된다.

기존의 산업혁명과 마찬가지로, 4차 산업혁명도 결과적으로 이 세계에서 사람이 개입해야 하는 부분이 줄어들게 된다. 사람이 개입해야만 하는 부분이 줄어들기 때문에 사람이 필요없어지는 것이고, 동시에 사람은 자유를 얻게 된다. 만약 사람의 가치가 사람이 필요한 부분이 있었기 때문에 존재하는 것이었다면, 4차 산업혁명은 사람들의 가치를 떨어트리고 행복을 빼앗아 갈 것이다. 하지만, 어떤 사람이 그 존재 자체로써 중요한 가치를 갖는다고 한다면, 4차 산업혁명은 그 사람이 다른 일들을 덜 하는 대신에 더 가치있는 일들을 할 수 있는 기회를 줄 것이다.

블로그 이전 완료

블로그 이전을 완료했습니다. 문제는 그림과 서식이 제대로 백업이 안된건데요. 신고하시면 그때그때 고치든가 하겠습니다. 언젠가는 끝나겠죠…

글 중에 도저히 이상해서 읽을수가 없다(!) 싶은 글이 있으면 알려주세요. 편집을 다시 하겠습니다. 지금 상태는 자동백업-자동업로드 기능을 이용한 것이라 상태가 그냥 개판입니다. 수천개에 달하는 글을 하나씩 곱씹을 여유가 없다보니 양해 바랍니다. 그냥 알려주시면 적당한 시일 내에 그것만 집중적으로 다시 고치도록 하겠습니다.

 

티스토리 – TTXML 백업 프로그램

tistory2ttxml

티스토리 백업이 막힌 현재, TTXML로 티스토리 백업을 하는 프로그램을 만들었다.

이 프로그램은 GPL에 의거하여 자유롭게 사용할 수 있다.

이 프로그램을 사용하여 나타날 수 있는 모든 결과는 사용한 사람의 책임이다.

파이썬 3.6기준으로 만들었는데, 아마 2.7에서도 작동하긴 할 것이다.

질문은 새로운 블로그인 http://melotopia.net/b 로 하기 바란다.

워드프레스로 옮기는 경우 TTXML importer에서 오류가 나는데, 인코딩 때문에 발생하는 문제이다. Notepad++등의 프로그램에서 EUC-KR로 읽어온 다음, UTF-8로 변환하여 저장을 하면 된다. 아니면 이 프로그램을 직접 고쳐서 인코딩 문제를 해결해도 된다.

일단 제 프로그램은 공개된 글만 자동으로 다운로드 받을 수 있습니다. 비공개글이면 일단 비공개 설정을 공개로 풀어주는 과정이 필요합니다.

그리고 글의 주소 체계가 숫자로 써져야 합니다. 예를 들어, snowall.tistory.com/53 처럼 끝부분에 숫자가 있어야 합니다. 글자가 있는 경우에는 안됩니다. 숫자로 표시되도록 고쳐주든가 해야겠죠.

그 다음, 제 프로그램은 다운로드 받은 내용을 TTXML이라는 형식으로 저장을 시켜줍니다. TTXML은 티스토리에서 백업을 지원하던 시절에 백업을 받으면 주는 파일 형식입니다. 또한, TTXML말고 HTML파일로도 같이 저장이 됩니다.

TTXML을 이용하는 이유는 워드프레스에서 TTXML을 읽어서 워드프레스에 자동으로 올려주는 플러그인이 있기 때문이었고요.

아무튼, 위의 내용을 알고 있는 상태에서 제 프로그램을 실행시키면 되는데요, 프로그램을 실행시키기 전에 고쳐야 할 부분이 있습니다.

33번째 줄의 domainname=”\”melotopia.net/b\”” 에 본인이 사용할 워드프레스 블로그의 주소를 적어야 합니다. 워드프레스를 사용하지 않을 거라면 사용할 블로그의 주소를 적어주시면 될 것 같습니다.

36번째 줄의 while idname<4000: 에서 4000이라는 숫자를 고쳐야 하는데, 이 숫자는 본인이 작성한 글의 전체 갯수보다 큰 숫자이기만 하면 됩니다. 저는 글이 3500개 정도 있어서 4000을 썼습니다.

파이썬 코드의 실행방법은 일단 python.org에서 파이썬을 다운로드 받아서 설치한 후 파이썬 코드를 더블클릭하면 됩니다.

이 때, BeautifulSoup이라는파이썬 패키지를 설치해야 할 겁니다. 아마 커맨드라인에서 pip install beautifulsoup4 을 실행시키면 될 겁니다.

글 번호에 해당하는 글이 없거나 비공개인 경우 오류가 발생하는 것을 고쳤습니다. 걍 try문으로 에러나면 건너뛰게 했습니다.

이 블로그의 첫 글입니다

snowall이 자체 서버에 새로운 둥지를 틀었습니다. 기존의 티스토리 블로그에 있던 내용은 어떻게 될지 모르겠네요. 언젠가는 티스토리 서비스 역시 종료될 것이므로 그 전에 이곳으로 다 백업해서 가져오긴 해야 하는데, 티스토리에서 블로그 백업 서비스를 하지 않는 관계로, 하나씩 가져다가 퍼와야 할 것 같네요.

물론 손으로 퍼다가 나르지는 않을 것이고, 가능하면 자동화시켜서 옮길 예정입니다.

melotopia.net 자체는 저의 기본 홈페이지이고, 여기서는 저의 개인 웹하드, 개인 위키 등등에 대한 링크도 달려 있습니다. melotopia.net/b 로 접속하셔야 블로그에 들어오게 됩니다.

여러 문의사항등은 snowall@gmail.com 으로 하시면 됩니다.

반, 짝

반, 짝

사방천지가 깜깜한데

저 앞에 반짝이는 빛이 있어 가보았더니

별도 아니고 터널의 끝도 아니었다.

무엇이었을까.

사방천지가 밝은데

눈앞을 가로지르는 선이 있어 가보았더니

담벼락도 아니고 바다의 끝도 아니었다.

무엇이었을까.

그 끝에 있던 것은

아마도 나의 반

아마도 나의 짝

사방천지가 깜깜한데

저 앞에 반짝이는 빛이 있어 가보았더니

별도 아니고 터널의 끝도 아니었다.

2017. 1. 14. 남기환.

Stochastic Parallel Gradient Descent method

SPGD알고리즘은 함수 최적화를 할 때 사용하는 알고리즘이다. 기존의 Steepest descent method라든가 Conjugate Gradient method같은 경우, 특정 방향에 대해서 최적해를 찾고 그 위치에서 그 다음으로 진행할 방향을 선택해서 더이상 움직이지 않을 때 까지 반복하는 알고리즘이다. 두 방법의 차이는 그 다음 방향을 결정하는데 좀 더 개선된 방법이냐 아니냐의 차이가 있을 뿐이다.

SPGD알고리즘은 통계적으로 접근하는데, 덕분에 빠른 최적화가 가능하다. 수학적, 통계학적인 이야기는 다 빼고 알고리즘만 설명하도록 한다. 자세한 것은 구글에 검색하면 다 나올 것이다.

어떤 함수 V(x)가 주어져 있다. V(x)는 하나의 실수값을 갖고, x는 N차원에서의 벡터이다. g는 0이 아닌 어떤 실수인 상수인데, 이따가 설명하도록 하겠다.

1. x에 대해서 어떤 임의의 벡터 a를 선택한다.

2. P=V(x+a), Q=V(x-a)를 계산한다.

3. P-Q=R을 얻을 수 있을 것이다.

4. x를 x+g*R*a로 교체하고 1번으로 돌아가서 반복한다.

5. 더이상 움직이지 않을 때 까지(==V(x)와 V(x+g*R*a)가 별로 차이가 없을 때 까지) 반복한다.

이 알고리즘이 작동하는 이유는 R=P-Q이기 때문이다. g>0인 경우에 만약 P가 더 크다면 R>0이므로 벡터가 x+a방향으로 움직이게 된다. 만약 Q가 더 크다면 R<0이므로 벡터가 x-a방향으로 움직이게 된다. 여기서 g>0이면 V가 커지는 방향으로 최적화가 이루어지고, g<0이면 V가 작아지는 방향으로 최적화가 이루어진다.

a자체는 임의로 고르지만 대체로 난수 함수가 0~1사이에서 하나를 고르게 되어 있으므로 a의 최대 크기는 제한적일 것이다. 만약 V가 엄청 큰 공간에서 최적화 해야 하는 경우라면, 이것은 너무 느릴 수 있을 것이다. 따라서 g가 충분히 큰 숫자가 되어야 한번에 멀리 갈 것이다. 내가 봤던 논문에서는 최대화 하는 경우 g를 한 스텝 지나갈 때 마다 g/V로 교체하고, 최소화 하는 경우 g를 한 스텝 지나갈 때 마다 g*V로 교체하는 것을 보았다.

실제로 계산에 적용해보면 g/V나 g*V를 그냥 두면 스텝 수가 너무 많아지는 경우 g값이 무한대로 발산하거나, 무한소로 수렴한다. 무한대가 되는 경우 컴퓨터 계산 범위를 넘어가므로 오류가 발생하고, 무한소가 되는 경우 0이 되어 버리므로 아예 움직이지 않게 된다. 따라서 이런 경우를 방지하기 위해 알고리즘을 구현하는 과정에서 적절한 수준에서 크기를 재조절 해주어야 한다.

이렇게 했어도 결국 최적화 지점 근처에서 한번에 너무 멀리 가버리면 망하는데, 그래서 a에 R을 곱해주는 것이다. R의 부호는 최적화 방향을 결정하고, R의 크기는 한 스텝의 크기를 조절한다. R은 최적화 지점에 가까워질 수록 그 크기가 작아지므로 최적화 지점 근처에서 천천히 움직이게 해 준다. 또한, 실수로 너무 멀리갔을 경우 다시 무작위로 크게 움직이도록 하므로 최적화 속도를 빠르게 할 수 있다.

이 알고리즘의 수렴성은 통계적으로 보장된다. 즉, 무한히 오래 돌리면 반드시 최적점에 수렴한다. 하지만 이것은 반대로 문제가 되는 부분이기도 한데, R의 크기가 계속해서 작아지므로 수렴 속도가 점점 느려진다. 그래서 최적점 근처에서 “운이 좋아서” 최적점에 매우 가까운 점으로 뛰어들지 않는다면 계속해서 최적점 근처에서 헤메고 다닐 수 있다.

쑥국-아내에게 / 최영철


쑥국-아내에게 / 최영철
 

참 염치없는 소망이지만
다음 생애 딱 한번만이라도 그대 다시 만나
온갖 감언이설로 
내가 그대의 아내였으면 합니다
그대 입맛에 맞게 간을 하고
그대 기쁘도록 분을 바르고
그대 자꾸 술 마시고 엇나갈 때마다
쌍심지 켜고 바가지도 긁었음 합니다
그래서 그래서 지금의 그대처럼 
사랑한다는 말도 한번 못 듣고
고맙다는 말도 한번 못 듣고
아이 둘 온 기력을 뺏어 달아난
쭈글쭈글한 배를 안고
골목 저편 오는 식솔들을 기다리며
더운 쑥국을 끓였으면 합니다
끓는 물 넘쳐 흘러
내가 그대의 쓰린 속 어루만지는
쑥국이었으면 합니다