'로그 > 전공' 카테고리의 다른 글
| 나의 언어 편력기 (0) | 2010/08/05 |
|---|---|
| 카테고리 이론 동영상 강좌 (0) | 2010/06/09 |
| SSH 터널링으로 사설망 리눅스 PC 접속하기 (0) | 2009/02/05 |
| 리눅스에서 소스 패키지 설치/제거하기 (4) | 2008/02/27 |
| 제어이론(control theory)에 대한 간단한 요약 (1) | 2007/11/26 |
| 재미있는 연구결과, 그리고 파이썬 놀이 (1) | 2007/02/28 |
| 나의 언어 편력기 (0) | 2010/08/05 |
|---|---|
| 카테고리 이론 동영상 강좌 (0) | 2010/06/09 |
| SSH 터널링으로 사설망 리눅스 PC 접속하기 (0) | 2009/02/05 |
| 리눅스에서 소스 패키지 설치/제거하기 (4) | 2008/02/27 |
| 제어이론(control theory)에 대한 간단한 요약 (1) | 2007/11/26 |
| 재미있는 연구결과, 그리고 파이썬 놀이 (1) | 2007/02/28 |
| 구들장(온돌)의 역사 (0) | 2010/07/12 |
|---|---|
| 리처드 도킨스의 현미경 비유에 대해 (8) | 2008/02/29 |
| 이기적 유전자가 말라리아를 멈출 수 있을까? (6) | 2007/04/01 |
| 프랑스어 열혈 공부중 (1) | 2005/09/25 |
| 나의 언어 편력기 (0) | 2010/08/05 |
|---|---|
| 카테고리 이론 동영상 강좌 (0) | 2010/06/09 |
| SSH 터널링으로 사설망 리눅스 PC 접속하기 (0) | 2009/02/05 |
| 리눅스에서 소스 패키지 설치/제거하기 (4) | 2008/02/27 |
| 제어이론(control theory)에 대한 간단한 요약 (1) | 2007/11/26 |
| 재미있는 연구결과, 그리고 파이썬 놀이 (1) | 2007/02/28 |
ssh -R 3030:localhost:22 kanie@147.46.101.102plink -L 4040:localhost:3030 kanie@147.46.101.102| 나의 언어 편력기 (0) | 2010/08/05 |
|---|---|
| 카테고리 이론 동영상 강좌 (0) | 2010/06/09 |
| SSH 터널링으로 사설망 리눅스 PC 접속하기 (0) | 2009/02/05 |
| 리눅스에서 소스 패키지 설치/제거하기 (4) | 2008/02/27 |
| 제어이론(control theory)에 대한 간단한 요약 (1) | 2007/11/26 |
| 재미있는 연구결과, 그리고 파이썬 놀이 (1) | 2007/02/28 |
요즘 재미있게 보고 있는 sonnet님의 블로그에 보수적 변화는 왜 우월한 진보전략인가라는 글이 올라왔습니다. 진화생물학의 관점을 통해 사회변화의 속도와 방향에 대해 설명하는 글이었는데요. 반론이라고 하기보다는 보론의 성격에서, 같은 문제를 좀 다르게 들여다보고 싶어서, 생각하는 바를 글로 정리해 보고자 합니다. 요즘 하고 있는 공부와도 약간은 관계가 되는 얘기라 좀 긴 포스팅이 될 것 같네요.
리처드 도킨스의 유명한 책 [눈먼 시계공]에는 진화과정을 현미경 초점을 맞추는 과정에 비유하는 다음과 같은 대목이 나옵니다.
이러한 도약론자의 진화 이론을 모두 폐기시킬 수 있는 분명한 이유가 있다. … 두 가지 이유 중 첫 번째는 앞 장에서 다른 주제로 등장했던 위대한 통계학자이자 생물학자인 R. A. 피셔가 지적한 것이다. 피셔는 도약설이 오늘날보다도 훨씬 유행하고 있던 시대에 모든 형태의 도약설에 대해 강한 신념으로 반론을 제기했다. 그는 다음과 같은 비유를 사용했다. 초점은 거의 맞지만 완전하지는 않은 현미경이 있다고 가정하자. 더군다나 현미경은 초점 조절 이외의 방법으로는 정확한 상(像)을 얻을 수 없다. 만약 이 현미경의 상태를 터무니없게 변화시켰을 때(이것은 돌연변이에 해당한다.) 초점이 맞아 올바른 상의 질이 전반적으로 향상될 수 있는 가능성은 어느 정도일까? 피셔는 그 질문에 대해 이렇게 답했다.
어떤 식으로든 큰 폭의 조정이 이루어질 경우에는 상(像)의 질이 향상될 가능성이 극히 작지만, 현미경 제작자나 사용자가 의도한 최소의 조정 폭보다 미세한 조정이 이루어질 경우 개선될 확률은 거의 정확하게 2분의 1임은 거의 확실하다.
피셔가 “쉽게 알 수 있다.”라고 생각한 것이 일반 과학자로서는 획득하기 어려운 지력을 요구한다는 점에 대해서는 이미 설명했지만, 위의 인용문에서 피셔가 “거의 확실하다.”라고 말한 데에도 마찬가지 사실이 적용될 수 있다. 그럼에도 불구하고 곰곰이 생각해 보면 언제나 그가 옳았다는 것을 알 수 있으며, 이 경우에는 그다지 힘들이지 않고도 만족스럽게 그 사실을 증명할 수 있다. 조정을 가하기 전의 현미경이 초점이 거의 맞추어져 있는 상태라는 가정에 대해 잘 생각해 보자. 렌즈가 완전히 초점이 맞는 위치보다 조금 낮은 위치, 가령 10분의 1센티미터 정도 슬라이드 글라스에 가까운 위치에 있다고 하자. 그런데 아주 미세하게, 가령 100분의 1센티미터 정도 임의적으로 렌즈를 움직인다면 초점이 앞의 경우보다 나아졌을 것이다. 렌즈를 움직이는 방향은 임의적이므로 이러한 두 가지 경우 중 어느 한쪽이 일어날 확률은 2분의 1이다. 조정을 위한 렌즈의 움직임이 최초의 오차에 비해 작으면 작을수록 초점이 향상될 확률은 2분의 1에 가까워질 것이다. 이러한 사실로부터 피셔의 명제의 후반부는 완전히 입증된다.
그러나 현미경의 경통을 대돌연변이에 비견될 만큼 큰 폭으로, 더욱이 임의의 방향으로 움직여 보자. 가령 1센티미터를 움직였다고 하자. 그러면 상하 어느 쪽 방향으로 움직이든 관계없이 초점은 이전보다 훨씬 더 어긋나게 될 것이다. 가령 경통을 아래쪽으로 움직였다면, 이상적인 위치에서 1.1센티미터 떨어지게 될 것이다.(이렇게 되면 실제로는 렌즈가 슬라이드 글라스에 부딪쳐 부서지고 말 것이다.) 위쪽으로 움직인 경우에는 이상적인 위치에서 0.9센티미터 떨어져 있을 것이다. 경통을 움직이기 전에는 기껏해야 정확한 초점에서 0.1센티미터밖에 떨어져 있지 않았지만 어느 쪽으로든 ‘대돌연변이’적 큰 움직임이 일어나면 사태를 더욱 악화시 키게 된다. 지금까지 우리는, 극히 큰 움직임(대돌연변이)과 극히 작은 움직임(미소돌연변이)을 계산해보았다. 물론 중간적인 크기의 움직임에 대해서도 같은 계산을 적용할 수 있지만, 거기에는 아무런 의미도 없다. 이제 움직임이 작으면 작을수록 향상이 이루어질 확률이 2분의 1이 되는 한편의 극단에 가까워지고, 움직임이 크면 클수록 향상이 이루어질 확률이 0이 되는 또 한편의 극단적인 경우에 가까워진다는 사실이 명확해졌을 것이다.
독자들은 지금까지의 논의가 현미경에 임의의 조정을 가하기 이전에 이미 초점이 거의 정확하게 맞추어져 있었다는 최초의 가정에 의존하고 있다는 사실을 알아차렸을 것이다. 만약 현미경의 초점이 2센티미터 벗어나 있었다면 비록 1센티미터를 임의로 변화시켜도, 100분의 1센티미터를 임의로 변화시켰을 때와 마찬가지로 향상될 확률은 50퍼센트이다. 이 경우에 ‘대돌연변이’는 훨씬 빨리 현미경의 초점을 맞출 수 있다는 이점을 가질 것이다. 그렇게 된다면 물론 피셔의 논의는 임의의 방향으로 6센티미터 움직인 ‘거대돌연변이’에 적용될 것이다.
그러면 피셔는 왜 현미경의 초점이 처음부터 거의 맞추어져 있었다는 가정에서 출발했을까? 이 가정은 현미경이 비유에서 맡은 역할에서 비롯된다. 임의의 조정을 거친 후의 현미경은 돌연변이를 일으킨 동물을 나타낸다. 또한 임의의 조정을 거치기 전의 현미경은 돌연변이를 일으킨 동물의 돌연변이를 일으키지 않은 정상적인 부모를 나타낸다. 부모의 경우에는 분명 번식할 수 있을 정도로 오래 살았을 테고 따라서 분명 훌륭한 조정 과정을 거쳤을 것이 다. 같은 이유로 임의적인 상하 움직임을 거친 앞의 현미경의 초점이 전혀 맞지 않는 경우란 상상할 수 없고 비유로 표현되고 있는 동물이 완전히 생존할 수 없는 경우도 불가능하다. 이것은 비유에 불과하기 때문에 ‘전혀 맞지 않은’ 크기가 1센티미터든 10분의 1센티미터든 또는 100분의 1센티미터든, 우리의 논의에서는 하등 중요치 않다. 중요한 것은 우리가 점차 그 정도가 커지는 돌연변이를 생각하고 있다면 돌연변이가 커짐에 따라 점점 이익이 적어지는 점에 도달하며, 반대로 계속 그 크기가 감소하는 돌연변이를 생각하고 있다면 점차 돌연변이가 유리해질 수 있는 확률이 50퍼센트가 되는 점에 도달할 것이라는 사실이다.
이러한 의미에서, 예를 들면 촉각지와 같은 대돌연변이가 유리할 것인지(최소한 유해한 결과는 피할 수 있는지), 즉 그것들이 진화적 변화의 토대가 될 것인지에 대한 논의는 지금 생각하고 있는 돌연변이가 ‘어느 정도’ ‘큰’가에 대한 논의임을 분명히 알 수 있다. 돌연변이가 ‘크면’ 클수록 유해하고 그에 따라 어느 종의 진화에 결합될 가능성은 줄어든다. 실제로 유전학 연구실에서 연구되는 거의 모든 돌연변이는(그 돌연변이가 크지 않으면 유전학자가 알아차릴 수 없으므로) 상당히 크다고 말할 수 있지만 그 돌연변이를 일으킨 동물의 입장에서는 유해하다.(역설적이게도 나는 이 사실을 다윈주의에 대한 ‘반증’이라고 생각하는 사람들을 만난 적이 있다.) 따라서 피셔의 현미경 이야기는 최소한 극단적인 형태의 ‘도약’ 진화설에 대해 회의를 품게 만드는 한 가지 근거를 제공해 준다.
Dawkins, Richard, The Blind Watchmaker: Why the Evidence of Evolution Reveals a Universe Without Design, W. W. Norton, 1986
(이용철 역, 『눈먼 시계공』, 사이언스 북스, 2004, p.376-380)
sonnet 님의 [보수적 변화는 왜 우월한 진보전략인가]에서 재인용.
리처드 도킨스는 훌륭한 진화생물학자이며, 그의 학문적 업적이 생물학에 많은 변화를 가져왔다는 점은 부정할 수 없습니다. 그러나, 그와 별개로 그의 완고한 점진주의는 모든 진화생물학자들이 공유하는 관점이라고 하기는 어렵습니다.
진화생물학자들 사이에 벌어진 유명한 논쟁으로 점진론 대 단속평형(인용문에서 도킨스가 "도약론자"라 칭하는) 논쟁이 있습니다. 점진론은 다윈이 처음 진화론을 제창했을 때부터 내려온 해석으로, "생물종의 진화는 작은 돌연변이가 일정한 속도로 조금씩 쌓여 큰 변화를 이루는 과정"이라는 시각이고, 반면 단속평형설은 "생물종의 진화 경로에는 변화가 거의 없는 (수백만 년 단위의) 긴 안정 단계와 빠른 속도로 큰 변화가 일어나는 (수만년 단위의) 단계가 반복해서 나타난다"는 시각입니다.
도킨스는 이 책에서 점진론을 옹호하는 증거로 현미경 비유를 들고 나오는데요, 사실 이 비유는 점진론을 옹호하기보다는, 점진주의를 극단으로 밀고 나갔을 때 생기는 약점을 잘 드러내는 비유입니다.
현미경의 비유를 간단한 그래프로 나타내 봅시다.
허섭한 그림판 실력은 눈감아 주셨으면 합니다.
위 그림에서는, 상이 가장 선명하게 나타나는 손잡이 위치를 몰라도 현미경의 초점을 맞출 수 있습니다. 조금씩 조금씩 현미경의 손잡이를 돌리다 보면 더 잘 보이는 방향과 잘 안 보이는 방향을 알 수 있고, 잘 보이는 방향으로 나아가다 보면 가장 선명한 지점에 언젠가 도달하게 됩니다.
그러나 현미경의 초점을 맞추는 것과 같은 간단한 문제는 사실 현실세계에 잘 존재하지 않습니다. 쉽게 풀리는 문제는 더 이상 문제가 아니니까요. 현실세계에서 중요한 문제는 오히려 다음과 같은 상황일 경우가 많죠.
위 그래프가 명백히 보여주는 것처럼, 점진론적인 진행만으로는 복잡한 문제를 해결하는 것은 불가능합니다.
컴퓨터가 주어진 문제를 해결하는 과정을 "최적의 해답을 찾아나가는 과정"으로 보고 그 과정을 연구하는 학문을 최적화 이론이라고 합니다. (수학자들의 용어로 하면, 비선형 문제공간에서 최적해 또는 근사 최적해를 찾아내는 알고리즘을 연구하는 학문입니다.) 최적화 이론에서는 이런 상황을 등산으로 산봉우리에 올라가는 과정으로 비유하곤 하는데요. 위의 현미경 비유는 말하자면 가장 높은 하나의 큰 봉우리가 존재하는 상황입니다. 이 상황에서는 가장 높은 봉우리가 어딘지 몰라도 높은 곳을 향해서 조금씩 나아가기만 하면 언젠가는 가장 높은 봉우리에 반드시 도달합니다. 그러나 복잡한 그래프에서 똑같은 점진적 전략을 취하면 낮은 산봉우리 가운데 하나에 안주하여, 가장 높은 봉우리에는 결코 도달할 수 없습니다.
그러면 아래와 같은 복잡한 문제에서, 최적화 이론을 연구하는 사람들이 취한 전략은 무엇일까요? 그들은 단속평형설이 주장하는 바와 같은 전략을 취합니다. 점진적인 진행을 계속하되, 하나의 산봉우리에 막히면 그 산봉우리의 위치를 기억해 놓고 무작위적인 큰 변화를 가합니다. 그 다음 거기서부터 다시 점진적인 진행으로 탐사를 재개하는 거죠. 이런 전략에는 다양한 변주들이 존재합니다만, 최적화 이론에서 취하는 다양한 전략들이 갖는 공통점은, "무작위적인 변화" 입니다.
무작위적인 변화 전략이 최적의 해답을 향해 나아가는 과정
위 그래프는 점진적 변화(푸른 선)에 무작위적인 변화(붉은 선)를 더한 전략이 최적의 해답을 향해 나아가는 과정입니다. 여기서 주의깊게 봐야 할 것은, 무작위적인 큰 변화(붉은 선)는 더 내려가는 방향, 즉 해답의 가치를 더 저하시키는 방향으로 움직이는 경우가 많다는 점입니다. 점진적인 변화(푸른 선)를 통해 나아간 곳은 최고봉보다는 낮더라도 주변의 다른 곳보다는 어쨌든 높은 곳이기 때문에, 무작위적인 큰 변화를 가할 경우 해답의 가치는 높아지는 경우보다 낮아지는 경우가 더 많습니다. 그렇더라도 최종적인 결과는 점진적인 변화만으로 나아간 것보다는 더 높은 곳에 도달하게 됩니다.
최적화 전략의 여러가지 예 가운데 하나로 유전 알고리즘이라는 것이 있습니다. 이 전략은 기존의 점진적인 방법으로 풀기 어려운, 가장 복잡한 문제를 푸는 데 주로 사용되는 전략으로, 엄청나게 방대해진 현대의 CPU 설계를 도와주는 시스템이나, 신약 개발시 체내 특정 단백질의 반응을 예측하는 분자 시뮬레이션 등에 등장합니다.
유전 알고리즘은 그 이름에서 유추할 수 있는 것처럼, 생물의 진화 전략을 모사하여 최적해를 찾는 과정입니다. 유전 알고리즘은 하나의 후보로부터 시작하지 않고, 해답이 될 후보를 여러 개 두고 시작합니다.(큰 유전자 풀) 이 가운데 무작위로 몇 개의 품질이 우수한 후보를 두 개 골라, 두 유전자를 무작위로 섞는 방식으로 자손을 만드는데,(유성생식) 그것을 다시 무작위로 약간만 변형시킵니다.(돌연변이) 그리고 품질이 좋지 않은 해를 몇개 골라 역시 무작위로 제거합니다.(자연선택) 이 과정을 반복하여 점점 나은 최적해를 향해 나아가는 전략입니다.
이 전략에서 중요한 것은 "무작위"의 정도와 방법을 조절하는 부분입니다. 후보들을 결합해 자손을 만드는 과정에서 가장 우수한 두 후보를 고르는 전략을 취하면, 모든 후보들이 서로 비슷한 경로를 따라가 하나의 낮은 산봉우리에 모여 버립니다. 우수한 후보를 고르되 적당한 무작위를 가하는 것이 중요합니다. 마찬가지로 후보를 제거하는 과정에서도 가장 품질이 떨어지는 후보를 제거해 버리면 가장 높은 산봉우리를 찾아가는 것은 불가능합니다. 이것을 유전 알고리즘 연구자들 사이에서는 "유전자의 다양성을 유지한다"고 표현하는데요. 이 "유전자 다양성"의 유지는 유전 알고리즘이 효과적으로, 빠른 시간 안에 최적해를 찾는 데 핵심적인 역할을 합니다.
유전 알고리즘은 또한 최적해가 개선되는 과정에서 특징적인 그래프를 보여줍니다.
전형적인 순수 유전알고리즘의 평균 품질 개선 그래프.
(그래프는 이곳에서 가져왔습니다.)
위 그래프는 세대를 거듭함에 따라 후보들의 평균 품질이 개선되는 과정을 보여주는 그래프인데요, 잘 보면 어떤 정체 상태에 오래 머물러 있다가 아무런 계기도 없이 후보들의 품질이 급작스럽게 개선되고, 다시 오랜 정체상태를 반복하는 패턴이 보입니다. (이 논문에서는 낮은 값을 갖는 후보가 더 좋은 품질의 후보이기 때문에 세로축의 방향은 반대입니다만, 패턴은 같습니다.)
이런 패턴이 나타나는 이유는 복잡하지만 대단히 중요합니다.
정체 단계에서, 대부분의 후보들은 작은 산봉우리에 수렴하여 잘 움직이지 않습니다. 이곳에서 몇몇 후보들은 무작위적인 변화를 통해 다른 산봉우리를 향해 점프하기도 하지만, 대부분 품질이 좋지 않기 때문에 무작위적인 제거의 대상이 됩니다. 그러나 무작위적인 제거 과정에서 살아남은 몇몇 후보들은 다시 점진적인 작은 돌연변이를 통해 새로운 산봉우리를 향해 올라갑니다. 이렇게 새로운 산봉우리를 올라가던 후보가 어느 순간 다른 대부분의 후보들보다 더 품질이 좋아지는 순간이 오면 전체 후보군들 사이에 갑작스러운 전이가 일어납니다. 작은 산봉우리에 안주하고 있던 대부분의 후보군들이 멸종하고, 더 높은 산봉우리를 올라가는데 성공한 후보의 자손들이 유전자 풀의 대부분을 점령하는 극적인 세대교체가 일어납니다. 그래프에서 보이는 계단 모양 패턴은 그런 과정의 결과물입니다.
여기서 이야기는 다시 점진론과 단속평형론의 논쟁으로 돌아옵니다.
생물 진화의 화석 증거가 보여주는 패턴은, 점진론의 주장보다는 단속평형론의 주장에 더 가깝습니다. 대부분의 화석은 수십만년에서 수백만년까지에 이르는 긴 시간동안 별다른 진화의 흔적 없이 거의 같은 유전자를 유지합니다. 그러다가 수만년 단위의 짧은 시간동안 폭발적으로 변화하여 새로운 종을 형성합니다.
여기서 유추할 수 있는 것은, 생물 진화의 역사가 단속적인 평형과 빠른 진화적 변화 사이를 오가는 이유는, 유전 알고리즘이 긴 정체상태와 빠른 변화과정을 오가는 이유와 같다는 것입니다. 점진적인 작은 변화만으로는 진화에 일정한 한계가 존재합니다. 그러나 "유전자의 다양성"을 유지하고 있다면, 어느 순간 빠른 변화가 시작됩니다. 그 변화는 언젠가 또다른 한 점에 수렴하지만, 그것은 이전에 정체되어 있던 점과는 다른 새로운 지점입니다.
주목해야 할 것은, 하나의 수렴 지점과 다른 수렴 지점 사이의 빠른 변화를 추동하는 것은 "점진적인 변화"라는 것입니다. 이 지점에 있어서는 도킨스의 말이 옳습니다. 무작위적인 큰 변화를 무턱대고 반복하는 것은 결코 정교하고 작은 변화를 축적하는 것만큼 빠르게 변화를 만들어낼 수 없습니다.
때문에, 좀더 큰 견지에서 점진론과 단속평형은 서로에 대한 반론이 아니라 보론이 될 수 있습니다. 대진화의 견지에서 진화를 추동하는 힘은, 결과적으로는 점진적인 변화입니다. 누가 뭐라고 해도 인류를 비롯한 현생 생물들은 오랜 세월동안 아주 작은 변화가 쌓여 이루어진 결과물입니다. 그러나 점진적인 변화만으로는 영원히 변화를 지속할 수는 없습니다. 변화를 계속하기 위해서는, 지금까지의 틀을 깨버리는 큰 변혁이 어떤 시점에서는 필요합니다.
솔직히 말해서, 저는 사회학이나 기술사학에 있어서는 문외한입니다. 저같은 사람이 다른 분야의 과학적 통찰을 사회에 그대로 갖다대는 것은 대단히 위험한 일일 것입니다. 그러나, 생물학의 시각에서 들여다본 사회의 모습에 어떤 새로운 풍경을 더할 수는 있다는 입장에서, 과감히 논의를 연장해 보고자 합니다.
어떤 위대한 선구자의 큰 발걸음과, 무명 기술자들의 상대적으로 작은 발걸음으로 기술 발전을 나누어 볼 때, 양쪽은 둘 다 똑같이 중요합니다. 선구자의 큰 발걸음 그 자체가 기술을 발전시키는 것은 아닙니다. 그러나 그 발걸음은 지금까지 우리가 눈앞의 작은 봉우리에만 눈이 팔려 보지 못했던 새로운 경지를 제시합니다. 그 방향으로 실제로 나아가는 것은 무명 기술자들의 한걸음 한걸음이지만, 그것을 근거로 방향을 제시한 사람의 업적을 평가절하하는 것은 온당치 않습니다.또한, 어떤 변화가 점진적이냐 아니면 커다란 도약이냐 하는 것은 문제를 바라보는 시각의 규모에 따라 달라집니다. 전체 지구의 역사라는 커다란 시각에서 보면, 생명의 진화는 끊임없는 점진적 발걸음입니다. 그러나 한 생물종의 진화의 역사라는 보다 작은 시각에서 보면 진화를 규정하는 것은 일시적인 커다란 변화와, 변화가 없는 오랜 시기의 불규칙한 반복입니다. 그보다 또 한번 작은 시각에서, 한 종에서 다른 종으로 변화하는 역사를 살펴보면, 그것은 끊임없는 작은 돌연변이의 축적입니다. 문제를 어떤 시각에서 보는가에 따라 점진주의는 맞기도 하고 틀리기도 합니다. 인간 사회의 발전, 혹은 기술의 발전에 있어서도 이것은 마찬가지일진대, 그 가운데 점진주의라는 하나의 시각만을 가져와 사회를 보는 창으로 쓰는 일은 역시 온당치 않습니다.
저의 전공인 컴퓨터공학의 기술 발전을 들여다 봅시다. 집적회로 기술이 발명된 이후로, 하나의 칩에 사용되는 트랜지스터의 개수는 무어의 법칙(3년에 4배씩)에 따라 거의 완전히 예측가능한 추세로, 지극히 점진적인 발전과정을 따라 발전하고 있습니다. (CPU 설계기법도 사람이 연구하는 것일진대, 이렇게 완벽히 예측가능한 곡선을 그린다는 것은 사실 불가사의한 일입니다.) 그러나, 진공관, 혹은 트랜지스터로 CPU를 만들던 시절에도 그 추세가 지금과 같았을까요? 앞으로도 이 추세가 계속 유지될까요?재미있는 것은, 트랜지스터의 개수 면에서는 얘기가 조금 다르지만, CPU의 속도를 나타내는 기준 가운데 하나인 GHz의 숫자는 그 성장세가 빠르게 줄어들고 있습니다. 여기에는 여러가지 이유가 있는데, 한마디로 하면 CPU 하나의 초당 연산속도를 늘리는 데는 이제 반도체기술 자체의 한계에 다다랐기 때문입니다. 일종의 단속평형 상태입니다. 그러나 CPU 업계는 이제 다른 분야에서 경쟁을 시작했습니다. 하나의 칩에 여러 개의 코어를 집어넣기 시작한 것입니다. 불과 몇년 전에 돌풍을 일으키며 등장한 듀얼 코어는 요즘은 웬만한 데스크탑 컴퓨터에는 다 들어가는 CPU가 되었습니다. 요즘 하이엔드 데스크탑에는 쿼드 코어가 들어가는 모양이더군요. 애플에서 발매한 맥 프로 컴퓨터의 최고급 사양에는 무려 8-코어가 들어가기도 합니다. 전혀 다른 형태의 새로운 경쟁이, 또다시 점진적인 형태로 시작된거죠. 한편 보다 큰 반도체기술의 시각에서 보면 여전히 집적회로 기반 CPU의 전체적 성능은 코어 개수의 지속적인 증가와 함께 지극히 점진적으로 증가하고 있습니다.
진화생물학은 변화를 이야기하는 학문입니다. 그 변화의 양상은 단순하지도 않고, 아직 우리는 그 변화에 대해 다 알지도 못합니다. 진화생물학의 틀로 세상을 들여다보는 시각은 분명 큰 도움이 되지만, 그 시각이 좀 넓어졌으면 하는 바람에서 적어 봅니다.
| 구들장(온돌)의 역사 (0) | 2010/07/12 |
|---|---|
| 리처드 도킨스의 현미경 비유에 대해 (8) | 2008/02/29 |
| 이기적 유전자가 말라리아를 멈출 수 있을까? (6) | 2007/04/01 |
| 프랑스어 열혈 공부중 (1) | 2005/09/25 |
요즘 (2000년대 후반) 나오는 리눅스 배포판들은 패키지 관리를 깔끔하게 해주기 때문에 원하는 프로그램을 마우스 클릭 한두번으로 설치하고 사용할 수 있지만, 그게 여의치 않은 경우가 있죠. 예를 들면 원하는 프로그램이 패키지 목록에 없을 때라던가, 아니면 관리자 권한이 없어 프로그램을 마음대로 설치할 수 없는 경우요. 그럴 때는 소스를 직접 다운받아서 설치하고, 제거해야 합니다.
리눅스 사용자들은 아마 다 알고 계시겠지만, 그래도 저같은 리눅스 초보에게는 tar.gz로 묶인 소스코드 뭉치를 던져주고 알아서 설치를 하라고 하면 머리가 아파오지요. 우리 모르는 사람들끼리 서로서로 설치/제거법을 알아보아요.
예를 들어 설명해봅시다. 저는 요즘 하는 일 때문에 ImageMagick이라는 라이브러리가 필요합니다. 학교에서 사용하는 서버는 우분투 리눅스 5.10인데, 우분투의 친절한 패키지 관리자를 통해 ImageMagick 을 설치할 수는 있긴 하지만... 버전이 6.2.xx 네요. 제게 필요한 버전은 6.3 이상이므로, 6.3 버전 소스 코드를 다운받아 직접 설치하기로 했습니다.
만약 우분투를 쓰고 계시다면, 그리고 소스 코드 컴파일을 한번도 해본 적이 없다면, (혹은 컴파일이란 게 뭔지 모르신다면) 컴파일과 설치를 위한 기본 도구들을 먼저 설치해야 합니다. 설치는 간단합니다. 시냅틱 패키지 관리자나, sudo aptitude를 이용해서 build-essential 패키지를 설치하세요.
대부분의 다른 리눅스 배포판들은 gcc / make / ld 등의 도구들이 다 깔려 있습니다. 다음으로 진행합시다.
구글로 검색해서 ImageMagick의 홈페이지를 찾았습니다. 다운로드 페이지를 잘 읽어보고 원하는 소스 코드를 다운받습니다. 저의 경우 주소는 ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick.tar.gz 이렇게 되네요.
웹 브라우저로 검색해서 다운받는다면 다운받는 것은 쉽습니다. 그러나 리눅스 GUI에 직접 접근할 수 없고, 커맨드라인만 사용할 수 있는 환경이라면, wget을 사용하면 됩니다. wget은 대부분의 리눅스 배포판에 기본으로 깔려 있으므로, wget [웹 주소] 이렇게만 치면 됩니다.
wget ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick.tar.gz
소스 코드를 다운받았습니다. 압축파일 이름은 ImageMagick.tar.gz 네요. 이제 다운받은 압축파일을 풀어봅시다.
리눅스 환경에서 대부분의 압축 파일은 확장자가 tar.gz로 되어 있습니다. 만약 GUI를 사용할 수 있는 환경이라면 그냥 압축파일 관리자를 이용해 새 디렉토리에 압축을 푸시고, 아니라면 tar를 이용해 압축을 풀어 봅시다. tar -xzvf [파일 이름] 이라고 치면 됩니다.
tar -xzvf ImageMagick.tar.gz
여기서부터가 까다롭습니다. 소스 패키지 설치는 GUI로는 진행할 수 없기 때문에, 먼저 리눅스 터미널을 열어야 합니다. 열었으면, 압축을 푼 디렉토리로 가봅시다. ImageMagick-6.3.9 라는 디렉토리가 생겼네요.
cd ImageMagick-6.3.9
일반적으로 소스 패키지 설치는 configure / make / make install 의 3단계로 이루어집니다. configure는 설치 전에 여러가지 옵션을 지정해주고 컴파일 환경을 검사하는 단계입니다. configure 옵션은 프로그램마다 조금씩 다르므로, 설치 전에 먼저 README나 INSTALL 같은 설치문서를 읽어보는 것을 추천합니다. (문서가 주로 영어로 되어 있다는 것은 참 슬픈 일입니다.) 여기서 설치 옵션 부분을 읽어보고 나에게 필요한 옵션이 있다면 적어둡니다.
configure는 내게 필요한 도구가 다 있는지, 라이브러리는 다 있는지 같은 것들을 체크해주고 빌드 환경을 만들어주는 스크립트입니다.
설치할 때 옵션을 주지 않으면 기본으로 /usr/local/bin 이나 /usr/local/lib 밑에 설치하는데, 이 디렉토리들은 관리자 권한이 없이는 접근할 수 없습니다. 이 경우에는 --prefix 옵션을 주어 설치 디렉토리를 바꿔야 합니다. 저는 저의 홈 디렉토리 밑에 imagemagick이라는 디렉토리를 만들어 그 곳에 설치하기로 했습니다. (이 경우 홈 디렉토리를 ~ 기호로 축약하는 것은 보통 에러를 일으킵니다. 루트 디렉토리부터 절대경로를 다 써주어야 합니다.)
./configure --prefix=/home/kanie/imagemagick
그 외 다른 옵션들도 넣어 보았습니다.
./configure --prefix=/home/kanie/imagemagick --disable-static --with-modules --without-perl --with-x=no
이렇게 하면 이제 컴파일 준비가 완료됩니다.
보통은 빌더 환경이 잘 갖추어져 있지 않다는 것을 의미합니다. 필요한 프로그램이나 라이브러리가 없는 경우가 대부분이므로, 빌드 문서를 잘 읽어보시고 필요한 프로그램이나 라이브러리를 설치해 주세요.
make distclean이라고 치면 configure 설정을 모두 제거해줍니다. 그리고 configure 부터 다시 시작하시면 됩니다.
make distclean
make는 미리 정해진 스크립트를 따라 소스 코드를 컴파일해주는 도구입니다. configure를 마쳤다면 make를 쳐서 컴파일합니다.
make
make가 실패하는 경우는 보통 컴파일 에러입니다. 이때는 컴파일 에러를 해결한 후 처음부터 다시 컴파일하는 것을 추천합니다. make clean 하면 컴파일이 취소되고, make를 치면 다시 컴파일할 수 있습니다.
make clean
컴파일이 완료되면 make install 을 치면 설치가 완료됩니다.
make install
설치한 후에 압축파일을 풀었던 디렉토리는 지우지 않는 것을 추천합니다. 나중에 설치 제거할 때 필요하니까요.
설치 제거를 하려면 make를 했던 디렉토리로 돌아와 다음과 같이 치면 됩니다.
make uninstall
| 카테고리 이론 동영상 강좌 (0) | 2010/06/09 |
|---|---|
| SSH 터널링으로 사설망 리눅스 PC 접속하기 (0) | 2009/02/05 |
| 리눅스에서 소스 패키지 설치/제거하기 (4) | 2008/02/27 |
| 제어이론(control theory)에 대한 간단한 요약 (1) | 2007/11/26 |
| 재미있는 연구결과, 그리고 파이썬 놀이 (1) | 2007/02/28 |
| image morphing 과제 (0) | 2006/04/17 |
언제나처럼, 스스로를 이해시켜서 나중에 써먹기 위해 쓴 글입니다. (기계과나 전기과에서 배우는 내용인 듯 한데... 논문 읽다보면 종종 튀어나와서...) 사용된 근거의 정확성이나 이론적 무결성은 보장하지 않습니다. 이 분야에 대해 정말 써먹을 수 있는 지식이 필요하신 분은 신뢰할만한 textbook을 참고하세요.
제어이론은, 굉장히 여러가지 요소를 가진 예측하기 힘든 시스템을(미쿡말로는 dynamic system이라고 합니다.) 1. 의도한 대로, 2. 안정적으로 움직이게 하기 위한 공학이론입니다.
단도직입적으로, 운전자가 직접 운전하지 않고 컴퓨터가 알아서 운전하는 자동차가 있다고 생각해 봅시다. 운전자는 직접 핸들을 잡고 엑셀을 밟아 자동차를 운전하는 것이 아니라, 사용자가 원하는 속도를 입력하면 그 속도를 유지하며 달리게 됩니다. 운전자가 자동차에게 "시속 60km로 달려라" 하고 명령을 내렸다고 합시다. 자동차의 속력에는 많은 요소가 작용하지만, 엔진의 스로틀(엔진에 연료를 분사하는 비율을 조절하는 밸브 정도로 이해하시면 됩니다)이 가장 큰 역할을 할 겁니다. 예를 들어 스로틀이 연료를 초당 50mg의 비율로 분사하면 자동차의 속도가 60km/h가 되는 걸로 실험실에서 대충 계산이 나왔다고 합시다.
그러면 자동차를 원하는 속도로 달리게 하고 싶을 때 생각할 수 있는 가장 간단한 방법은, 운전자가 원하는 속도 60km/h를 입력하면(외부입력) 사전에 계산된 어떤 방정식을 통해서(컨트롤러) 그에 맞는 스로틀의 비율인 초당 50mg으로 자동차를 제어(출력)하는 겁니다. 이렇게 외부입력만을 받는 가장 간단한 시스템을 feed-forward controller라고 합니다.
그러면 그냥 스로틀을 초당 50mg으로 고정시키면 자동차의 속력이 정확히 60km/h가 나오느냐... 그건 아닙니다. 오르막길에서는 엔진의 힘이 같더라도 속도가 느려질 것이고, 내리막길에서는 더 빨라질 거구요, 비포장도로에서는 또 느려질 거고, 고속도로에서는 좀더 빨라질 겁니다. 그 밖에도 공기저항이라든지, 도로가 비에 젖어서 마찰력이 적다던지 하는 수많은 상황이 발생할 수 있는데, feed-forward controller는 이런 종류의 외부 상황 변화에 대해 반응할 방법이 전혀 없다는 것이 단점이죠.
그러면 좀더 똘똘한 컨트롤러를 생각해봅시다. 사용자가 원하는 속도 60km/h를 입력하면, 스로틀을 초당 50mg으로 일단 맞춰놓고 달려봅니다. 그런데 오르막길에다 도로 상황도 별로 좋지 않아서 속도가 40km/h 정도밖에 안 나오네요. 그러면 스로틀을 조금씩 더 열어 더 빠른 속도를 냅니다. 그러면 점점 속도가 올라 60km/h가 되겠죠. 그러면 그 상태로 스로틀을 유지하는 거죠. 어 그런데 길이 내리막으로 바뀌었군요. 속도가 빨라집니다. 그러면 더 빨라진 속도를 입력으로 받은 컨트롤러는 다시 서서히 스로틀을 닫아 속도를 줄입니다. 그러면 다시 60km/h에서 속도가 안정되겠죠.
이렇게 자동차의 속도(출력)를 다시 컨트롤러(복잡한 톱니바퀴로 스로틀을 제어하는 기계일 수도 있고, 아니면 자동차에 탑재된 조그만 컴퓨터일 수도 있겠죠.)에게 입력으로 주어 (피드백, 우리말로는 되먹임) 컨트롤러가 스로틀(출력)을 더 늘리거나 줄일 수 있도록 한다면, 자동차의 속도를 외부 환경에 큰 영향을 받지 않도록 안정적으로 제어할 수 있습니다. 이런 간단한 되먹임 시스템을 피드백 컨트롤러라고 합니다.
피드백 컨트롤은 사실 모든 생물이 자기 자신을 제어할 때 사용하는 테크닉이기도 하고, 엔지니어들이 오래 전부터 사용해온 테크닉이기도 합니다. 그럼 제어이론(control theory)이라는 거창한 이름이 붙은 이유는 뭐냐... 이 피드백 시스템을 수학적으로 잘 모델링하려는 거죠. 피드백 시스템을 보다 안정적으로 유지하며, 갑작스런 외부 요인으로 시스템이 요동을 쳐도 다시 원래 상태를 회복할 수 있도록 (영어로는 robust하다고 합니다.) 하는 안전한 컨트롤러를 설계하는 것이 제어이론의 목표입니다.
피드백 시스템중에 (비교적) 이론적으로 간단하고 실제로 제일 많이 응용되는 것은 PID 컨트롤러라고 합니다. 이 PID 컨트롤러에 초점을 맞춰 설명을 해보죠.
PID 컨트롤러에게는 입력(자동차 예제로 설명하면 사용자가 원하는 속도 60km/h) r(t)이 주어집니다. 그냥 고정된 값 r이 아니라 r(t)인 이유는 이 값이 시간 t에 따라 변할 수 있기 때문이죠. 이 값을 입력으로 받은 컨트롤러는 시스템을 제어(이 경우 자동차 스로틀을 바꾸겠죠)하고, 거기에 따라서 시스템의 전체 출력(자동차의 속도) y(t)가 변할 겁니다. 이 시스템을 완벽하게 컨트롤한다면 r(t)와 y(t)는 같은 값이 되겠지만, 실제로 그렇지는 않을 거고 약간의 차이가 존재하겠죠. 이 차이를 e(t) = r(t) - y(t) 라고 합시다.
PID 컨트롤러는 이 e(t) 값에 어떤 상수를 곱하고(Proportional : 비율이라는 뜻이죠) 적분(Integral)을 하고 미분(Derivative)을 한 값을 컨트롤러에게 다시 되먹여서 시스템을 제어한다고 해서 PID 컨트롤러라 부릅니다. 만약에 여기서 적분값 I를 쓰지 않는다면 PD 컨트롤러, D를 쓰지 않는다면 PI 컨트롤러, 그냥 결과값에 상수만 곱해서 되먹인다면 P 컨트롤러가 됩니다.
수식으로 쓰면,
이런 식이 됩니다. 여기서 Kp, Ki, Kd는 각각 적당한 상수가 되겠죠.
이때 컨트롤러는 구동장치(actuator : 시스템을 실제로 작동시키는 장치. 우리의 예제에서는 스로틀이 되겠죠)를 u만큼 움직여서 시스템을 조절하는데, PID 컨트롤러의 경우 이 u 값이 u = P + I + D 가 되는 것이죠.
P, I, D의 계수 Kp와 Ki, Kd는 각각 시스템의 안정성에 일정한 영향을 미칩니다.
Kp는 이 경우 시스템이 오차 e에 얼마나 빠른 속도로 반응하는가를 결정합니다. 자동차 예제에서, 극단적으로 Kp가 0이라면 컨트롤러는 전혀 시스템에 반응하지 않고, 따라서 자동차는 전진하지 않겠죠. 반대로 Kp가 매우 크다면? 정지상태에서 사용자가 60km/h라는 값을 입력했을 때 급가속하여 순식간에 60km/h에 가까워질 겁니다. 그러나 안정적으로 60km/h를 유지하지 못하고 상하로 요동이 심해집니다.
Ki는 안정상태에 들어선 시스템이 미세한 오차를 얼마나 빨리 제거하는가를 결정합니다. Ki가 0인 시스템은 안정 상태에서도 정확히 입력값에 다가서지 않고 지속해서 요동칩니다. 그러나 반대로 Ki가 너무 크면 Kp의 경우와 마찬가지로 시스템이 불안정해지죠
Kd는 시스템이 얼마나 빨리 안정상태에 들어서는가를 결정합니다. Kd가 큰 시스템은 금방 요동을 멈추고 안정 상태에 들어섭니다. 반면에 Kd가 너무 크면 입력값에 도달하는 속도가 느려지죠.
이런 시스템의 안정성에 대해 자세히 논하려면 라플라스 이론이라는 것을 알아야 하는데, 공학수학을 대충 배워서 -_- 라플라스 이론에 대해서는 자세히 모르는고로 이 부분은 스킵하겠습니다.
어려워 보이지만, 사실 PID 컨트롤러는 의외로 주변 곳곳에서 발견됩니다. 위에서 예로 든 자동차의 속도조절장치는 물론이고, 하드 디스크의 헤드 제어, 파워 서플라이의 전압 조절, 정교한 전자식 지진계 같은 곳에도 쓰입니다. 같은 이론을 스프링과 지렛대를 이용한 기계장치에까지 적용하면 포크레인 같은 대형 건설장비에 사용되는 제어 시스템도 일종의 PID 컨트롤러입니다.
위 내용의 대부분은 영문 wikipedia를 적당히 편집한 결과입니다. 따라서 자동적으로 이 문서는 GFDL 라이선스를 따릅니다. 이 내용을 가져가서 재배포하실 때는 반드시 이 문서가 GFDL 라이선스를 따른다는 것을 명시하셔야 하며, 이 내용을 수정/변경하실 때는 그 결과물 또한 GFDL 라이선스를 따라야 합니다.
이 글은 스프링노트에서 작성되었습니다.
| SSH 터널링으로 사설망 리눅스 PC 접속하기 (0) | 2009/02/05 |
|---|---|
| 리눅스에서 소스 패키지 설치/제거하기 (4) | 2008/02/27 |
| 제어이론(control theory)에 대한 간단한 요약 (1) | 2007/11/26 |
| 재미있는 연구결과, 그리고 파이썬 놀이 (1) | 2007/02/28 |
| image morphing 과제 (0) | 2006/04/17 |
| 스도쿠 (7) | 2005/06/08 |