Co-evolution of self-replication and function in a digital primordial soup
이 논문은 무작위 Z80 어셈블리 프로그램이 존재하는 디지털 환경에서, 과업 기반의 선택 압력이 자기 복제와 수학적 문제 해결의 자발적 공진화를 어떻게 유도하는지를 입증하며, 이를 통해 기능적 요구가 어떻게 생식 구조를 형성하는지, 그리고 복제 역학이 역으로 어떻게 창발적인 학습 커리큘럼을 만들어내는지 밝힌다.
원본 논문은 CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) 라이선스로 제공됩니다. 이것은 아래 논문에 대한 AI 생성 설명입니다. 저자가 작성한 것이 아닙니다. 기술적 정확성을 위해서는 원본 논문을 참조하세요. 전체 면책 조항 읽기
디지털 바다를 상상해 보십시오. 물과 화학 물질이 아닌, 32바이트 크기의 코드 조각들로 가득 찬 '원시 수프'입니다. 이들은 아직 똑똑한 프로그램이 아닙니다. 그저 부서진 타자기에서 쏟아져 나온 글자들처럼, 무작위로 뒤섞인 명령어들의 집합일 뿐입니다. 이 수프 속에는 그들이 스스로를 복제하는 방법을 알려주는 미리 만들어진 규칙이 없습니다. 그들은 오직 올바른 동작의 순서를 우연히 발견함으로써 스스로 복제하는 법을 터득해야 합니다.
연구진이 던진 핵심 질문은 이것이었습니다. 이 무작위 코드 조각들이 스스로를 복제하는 법을 배우는 동시에, 수학 문제까지 푸는 법을 배울 수 있을까?
위대한 발견: 복제와 계산은 함께 성장한다
이 시뮬레이션에서 답은 아주 명확한 "예"였습니다. 무작위 코드는 단순히 자신을 복제하는 법을 배운 것이 아니라, 다항 방정식(변수 또는 등이 포함된 수학 문제)을 푸는 법을 정확히 동시에 학습했습니다. 수학 문제를 풀어야 한다는 압박감이 오히려 코드가 자신을 더 잘 복제하도록 돕는다는 사실이 밝혀졌습니다.
북적이는 댄스 플로어를 생각해 보십시오. 만약 모든 사람이 옆 사람을 맹목적으로 따라 하기만 한다면, 서로 발이 엉켜 넘어질 것입니다. 하지만 만약 춤 파트너를 얻기 위해 수수께끼를 풀어야 한다면, 사람들은 더 효율적으로 움직이기 시작할 것입니다. 수수께료를 풀 수 있는 코드가 더 자주 춤을 출 수 있었고, 댄스 플로어를 통째로 점령하지 않으면서도 자신을 복제할 수 있는 코드가 살아남았습니다.
"로드-푸시(Load-Push)" 대 "LDIR"의 진화
처음에 자신을 복제하는 데 성공한 코드는 서툴렀습니다. 저자들은 이를 "로드-푸시(Load-Push)"라고 부르는 방식으로 사용했습니다. 마치 필사가가 책을 베껴 쓰기 위해 한 글자를 읽고, 쓰고, 다음 글자를 읽고, 쓰는 과정을 반복하는 것과 같습니다. 이 방식은 프로그램의 32바이트 "테이프"(메모리) 전체를 차지했습니다. 수학을 할 수 있는 공간이 전혀 남지 않았던 것입니다. 이 서툰 복제본들은 격자를 점령했지만, 수학 수수께끼는 풀지 못했습니다.
그 후, 멋진 일이 일어났습니다. 코드가 "지름길"을 찾아낸 것입니다. 그들은 LDIR(Load, Increment, Repeat - 로드, 증가, 반복)이라는 특별한 명령어를 발견했습니다. 이것은 마치 한 페이지 전체를 한 번에 복사할 수 있는 마법 도장을 찾은 것과 같습니다. 갑자기 코드는 자신을 복제하는 데 단 몇 바이트만을 필요로 하게 되었고, 덕분에 테이프에 수학 해답을 적을 수 있는 충분한 공간이 생겼습니다.
수학 문제를 풀어야 한다는 압박이 이 전환을 가속화했다는 점을 논문은 보여줍니다. 서툰 "로드-푸시" 복제본들은 수학 과제가 활성화되었을 때 훨씬 더 빠르게 효율적인 "LDIR" 복제본들로 대체되었습니다. 문제를 풀어야 한다는 필요성이 복제 메커니즘을 더 작고 효율적으로 만들도록 강요한 것입니다.
"대사적(Metabolic)" 식단: 더 열심히가 아닌, 더 똑똑하게
연구진은 여기에 한 가지 반전을 더했습니다. 바로 "대사 비용"입니다. 현실 세계에서 생각하는 데는 에너지가 들듯이, 이 디지털 세계에서도 프로그램이 수학 문제를 푸는 데 너무 많은 단계를 소모하면 벌칙을 받았고, 다른 개체와 상호작용할 기회를 얻기 어려워졌습니다.
이러한 압박은 코드가 영리한 기술을 진화시키게 만들었습니다. 그들은 자신이 무엇을 하고 있는지 확인하기 위해 "센서"(컴퓨터 메모리의 특정 레지스터)를 체크하는 법을 배웠습니다.
- 수학 테스트 중: 센서에는 숫자가 들어 있었습니다. 코드는 이를 감지하고, 수학 문제를 푼 다음, 에너지를 아끼기 위해 즉시 멈췄습니다(halt).
- 복제 단계 중: 센서는 0이었습니다. 코드는 이를 보고 "정지" 명령을 무시한 채, 복제를 완료하기 위해 계속 실행되었습니다.
이것은 시험 공부를 열심히 하는 학생이 정답을 얻은 직과마 에너지를 아끼기 위해 즉시 멈추지만, 노트를 베껴 쓰는 연습을 할 때는 계속 작업하는 것과 같습니다. 이 "조건부 중단(conditional halting)"은 에너지 페널티 때문에 구체적으로 진화한 결과였습니다.
어려운 문제의 비밀: 자발적 커리큘럼
가장 놀라운 부분은 여기 있습니다. 연구진이 큰 규모의 혼합된 군중(모든 개체가 누구와도 상호작용할 수 있는 환경) 속에서 코드가 매우 어려운 수학 문제를 풀도록 시도했을 때, 코드는 실패했습니다. 정체되어 버린 것입니다.
하지만 연구진이 군중을 32개의 별도 "이웃(neighborhoods/niches)"으로 나누고, 각 이웃에 서로 다른 수학 문제를 할당한 뒤, 상호작용을 드물게 일어나도록 설정하자 마법이 일어났습니다. 시스템은 스스로 학습 커리큘럼을 만들어냈습니다.
- 쉬운 이웃들은 먼저 간단한 수학을 해결했습니다.
- 가끔씩 쉬운 이웃의 프로그램이 어려운 이웃으로 이동했습니다(이를 "교차 니치 폴리네이션(cross-niche pollination)"이라 부릅니다).
- 이는 단순한 해법을 어려운 이웃으로 가져와 디딤돌 역할을 하게 했습니다.
어려운 문제들은 곧바로 정답을 향해 뛰어오르는 것이 아니라, 이미 다른 곳에서 진화한 더 단순한 해법들을 토대로 구축되며 해결되었습니다. 논문은 이러한 공간적 구조가 진화를 안내하는 "창발적 커리큘럼(emergent curriculum)"을 생성하며, 이는 모든 인구가 한데 섞여 있을 때는 나타나지 않았던 현상이라고 제안합니다.
이것이 아닌 것
이 시뮬레이션이 수행하지 않은 작업에 유의해야 합니다. 연구진은 코드가 자신을 복제하는 법을 알도록 프로그래밍하지 않았습니다. "복제" 버튼을 주지도 않았습니다. 수학 해법을 직접 설계해주지도 않았습니다. 시스템은 순수한 무작위성에서 시작되었습니다. 또한, 코드가 자신을 복제하는 법을 배웠지만, 복잡한 유전적 혼합(성적 생식과 같은)이나 공생 관계를 자발적으로 발견하지는 못했습니다. 주로 무성 복제 방식에 머물렀습니다.
결론
이 디지털 시뮬레이션에서, 문제를 해결하려는 동기는 생명의 메커니즘(복제) 자체를 능동적으로 재형성했습니다. 효율적이어야 한다는 필요성이 코드가 자신을 복제하는 방식을 바꾸어 놓았고, 환경의 구조는 코드가 무엇을 배울 수 있는지를 결정했습니다. 이는 생명 초기 단계에서 생존을 위한 투쟁과 번식 능력은 별개의 단계가 아니라, 서로를 밀어 올리는 하나의 얽힌 춤이었을 수도 있음을 시사합니다.
연구 분야의 논문에 파묻히고 계신가요?
연구 키워드에 맞는 최신 논문의 일일 다이제스트를 받아보세요 — 기술 요약 포함, 당신의 언어로.