다중 에이전트 실험에서, 고장난 데이터가 '문화 형성' 판정을 통과해버린 이야기
요약
본 기사는 다중 에이전트가 언어만으로 '문화'를 형성하는지 조사한 실험을 다루며, 그 과정에서 발견된 3가지 판정기 허점을 분석합니다. 일반 어휘 포착, 주입 문자열 반복, 모델 사전 분포 등 문화가 아닌 요소를 문화로 오인했던 문제를 지적하고 개선 방안을 제시합니다.
핵심 포인트
- 문화 형성의 기준에 대한 엄격한 재검토 필요
- 일반 단어와 실험자 주입 문자열의 분리 분석
- 귀무 모델 비교를 통한 통계적 유의성 확보
결론
다중 에이전트의 문화 형성 실험에서, 고장난 데이터가 '문화가 형성되었다'는 판정을 통과할 수 있는 3개의 허점을 발견했습니다.
- 판정기가 일반적인 단어나, 실험자가 매 세대 붙이는 문자열의 반복까지 '문화'로 계산하고 있었습니다.
- 설정 항목이 경고 없이 무시되어, 조건을 바꾼 줄 알았던 실험이 대조군과 동일한 설정으로 실행되고 있었습니다.
- 클라우드의 월간 사용 한도에 도달했음에도 실험이 멈추지 않아, 실패한 세대가 '존재하지 않는 세대'로 조용히 버려진 채 판정에 포함되었습니다.
이 모든 것은 결과가 좋아 보일 때일수록 알아차리기 어려운 실수였습니다. 아래에서는 이 3가지 허점의 내용과, 이를 막기 위해 작성한 짧은 코드를 순서대로 보여드리겠습니다. 실험 자체의 결과는 후반부에 간략하게 요약하겠습니다.
어떤 실험이었나
언어 모델만으로 만든 6체의 에이전트 사회에서, 인간의 도움 없이 문화가 생겨날 수 있는지 조사하는 실험입니다. 6체는 개발 출처가 다른 3종류의 언어 모델에 각각 2체씩 할당되었습니다. 주제는 사회에서 공유할 '축제'를 설계하라는 것이었습니다.
1세대는 6체가 참여하는 1회의 회의입니다. 회의가 끝나면, 유전 알고리즘(GA)으로 다음 세대의 성격이 결정됩니다. 다음 세대의 에이전트는 이전 세대의 대화를 기억하지 못합니다. 이전 세대에 대해 알 수 있는 것은, 주제에 내장된 이전 세대 발화의 발췌본과, 이전 세대가 만든 도구(축제를 나타내는 Python 함수)의 목록뿐입니다. 이를 50세대를 반복합니다. 동일한 조건의 실험을 여러 번(이하 run) 실행하여 비교합니다.
문화는 다음 5가지 속성을 갖춘 정보로 정의했습니다. 세대를 거쳐 전달되는 것(전달), 여러 계통에서 공유되는 것(공유), 그 사회에 고유한 것(고유성), 이전 세대 위에 쌓이는 것(누적), 오래 지속되는 것(장수). 판정기에는 이 5가지에 대응하는 기준을 적용했습니다.
제가 이 실험을 시작하게 된 것은, 일본어나 영어 같은 언어 자체가 '눈치껏 분위기를 읽는 문화'나 '자유롭게 사는 문화'를 형성하고 있다고 느꼈기 때문입니다. 그렇다면 AI만의 사회에서도 같은 일이 일어날까? 언어만으로 시뮬레이션할 수 없을까, 하고 생각했습니다.
허점 1: 판정기가 문화가 아닌 것을 센 세 가지 경우
실험을 시작했을 때, 판정은 대화의 생 로그(raw log)에서 4가지 증거(어휘 계승률, 발화 의미의 수렴, 확산된 조어, 지속된 정형구)를 계산하고, 3가지 이상 모이면 '문화 형성'으로 간주했습니다. 이 판정에는 문화가 아닌 것을 문화로 센 경우가 3가지 있었습니다.
- 일반 어휘 포착. 조어 전파를 측정하는 지표가 일반적인 단어까지 포착했기 때문에, 50세대에서는 어떤 run에서도 수백 건이 합격했습니다.
- 주입한 문자열의 반복. 주제나 도구에 필요한 요건 문처럼, 실험자가 매 세대 컨텍스트에 붙이는 문자열을 에이전트가 반복하는 것만으로도, 반복된 표현의 수나, 세대를 거쳐 이어지는 단어(전통어)의 수가 증가했습니다.
- 모델의 사전 분포. 어떤 run에서도 나오는 단어는 그 사회의 문화가 아니라, 모델 자체의 습관입니다.
위양성 제거: 주입어 제외・귀무 모델・사전 등록
판정을 다시 만들고 다음 3가지를 추가했습니다.
- 주입어 제외: 매 세대에 주입하는 고정 문자열에서 유래한 단어(1 run당 약 550단어)를 계산하기 전에 제거합니다.
- 귀무 모델과의 비교: 각 단어가 '어떤 세대에 나오는지'만 무작위로 바꿔서, 세대의 연결성을 끊은 데이터를 30번 만듭니다. 실제 데이터의 전통어 수가 이 우연한 수준을 몇 배나 초과하는지 확인합니다. 여기서 전통어란 최종 세대 시점에서, 최초 출현부터 3세대 이상 지나고, 그 사이의 절반 이상의 세대에 나타나는 단어를 말합니다.
- 사전 등록: 도달 조건을 실험을 돌리기 전에 기록했습니다. '동일한 조건으로 새로 돌린 3 run이 모두 5가지 기준을 충족하는 것'입니다. 기준과 임계값은 이후 변경하지 않았습니다.
귀무 모델의 개념은 다음 열몇 줄로 설명할 수 있습니다. 실험에 사용된 코드 그 자체가 아니라, 설명을 위한 간략 버전입니다.
import random
def is_tradition(gens, last_gen, min_age=3):
"""최초 출현부터 min_age 세대 이상 지나고, 그 사이의 절반 이상의 세대에 나타나는 단어인가?"""
...
다시 만든 판정을 먼저 과거의 8가지 조건(24 run)에 적용했습니다. 도달 조건을 충족하는 조건은 하나도 없었습니다. 전달 경로가 없는 대조군은, 누적과 장수의 기준으로 반드시 탈락했으므로, 판정기가 조건을 구별할 수 있다는 것은 확실히 증명되었습니다. 한편, 우연과의 비율을 보는 기준은, 모든 run이 임계값을 크게 초과하여, 조건을 구별하는 힘이 없었습니다. 임계값은 사전 등록되어 있으므로 변경하지 않고, 구분은 나머지 기준이 담당한다고 읽기로 했습니다.
첫 번째 시도에서, 이전 세대의 발화 일부를 400자로 확장하는 조건을 실행했습니다. 그런데 새로 추가한 발화 글자 수 항목을 실험 시스템에 전달할 항목 목록에 포함시키는 것을 깜빡했습니다. 목록에 없는 항목은 오류나 경고 없이 무시됩니다. 결과적으로, 확장했어야 할 조건이 발화 400자로 그대로, 직전 조건과 완전히 동일한 설정으로 실행되었습니다.
이 run을 버리지 않고 '직전 조건의 새로운 3 run'으로 처리했습니다. 그러자 이전에 실험에서 '도구 선택(후보를 3개 만들게 하고, 요구사항을 가장 많이 충족하는 것 단 하나만 남기는 방식)만이 언어 측면의 누적을 만든다'고 결론 내렸던 결과가 재현되지 않았습니다. 3 run에서 차이가 완전히 분리되어 보여도, 재현된다는 보장은 없습니다. 이전 결론은 우연이었을 가능성이 높다고 판단하고, 원래 실험 기록에 정정을 추가했습니다.
재발 방지책으로, 읽히지 않은 항목이 시작 시 경고를 보내도록 했습니다. 원리는 설정을 읽기 기록이 있는 딕셔너리로 만들고, 실험 시스템 초기화가 끝난 시점에 미독 항목을 확인하는 것입니다.
class TrackedConfig(dict):
"""읽힌 항목을 기록하는 설정 딕셔너리"""
def __init__(self, *args, **kwargs):
...
이 경고 덕분에, 이전에 다른 실험에서 사용했던 설정 항목 중 하나도 현재 코드에서는 읽히지 않고 있다는 것을 알게 되었습니다. 당시에도 읽히지 않았다면, 그 실험 결론의 일부는 설정 효과가 아닐 것입니다. 이 점은 확인되지 않았습니다.
구멍 3: 이용 한도를 넘긴 후에도 실험이 계속되어 망가진 데이터가 판정을 통과함
시도를 마친 후, 모델 조합을 변경하는 재현 실험을 시작했는데, 클라우드 추론 서비스의 월간 사용 한도에 도달했습니다. 그때까지 사용한 토큰은 총 약 2억 개였습니다. 한도에 도달한 이후의 호출은 모두 실패했지만, 실험은 멈추지 않았습니다. 구현이 세 가지가 중첩되어 있었기 때문입니다.
- 클라이언트가, 한도를 알리는 HTTP 429도 '일시적인 혼잡'으로 간주하고 지수 백오프(exponential backoff)로 재시도했습니다.
- 재시도가 다 떨어지면, 에이전트는 '응답할 수 없습니다'라는 취지의 대체 문자열을 반환했고, 실험은 이를 발화로 받아 다음 단계로 진행했습니다.
- 분석 측에서는 이 대체 문자열을 조용히 버렸습니다. 모든 발화가 실패한 세대는 발화가 0건인 '존재하지 않는 세대'로 처리되었습니다.
실패만으로 채워진 데이터를 포함한 것이 오류 없이 판정에 걸렸습니다. 다른 모델 조합에서의 재현 실험에서는, 완주한 3 run의 판정이 5・3・5로 나왔습니다. 한도에 도달한 이후의 세대가 비어 있는 상태로 진행했음에도 불구하고, 3 run 중 2 run이 엄격한 5 기준을 모두 충족시킨 것입니다. 판정이 부자연스럽다고 느껴져 로그를 확인했고, 한도 초과에 눈치챈 것은 3시간 이상 뒤였습니다. 망가진 데이터가 '문화 있음'이라는 판정을 내릴 수 있다는 것이 이 실험에서 가장 무거운 교훈이었습니다.
저는 평소 사용 현황(usage)을 보면서, 한도에 도달할 것 같으면 실험을 멈추고 다음 달에 한도가 풀리면 계속하는 운영을 해왔습니다. 이번에는, 완주한 run의 판정이 부자연스러웠기 때문에 처음으로 이상함을 감지했습니다. 판정을 철회하고, 실행되던 run을 멈춘 뒤, 실패 전 세대만 가지고 다시 비교하기로 결정했습니다.
대책은 3가지입니다.
- 429 본문에
을 우회하는 것, 스레드 풀(thread pool)을 통해서도 예외가 호출한 곳으로 전달되는 것을 확인했습니다. 상한에 도달하기 전에 끝났던 21회의 실행에 대해서는 실패한 발화가 단 한 건도 없음을 확인하고 그 결과를 그대로 사용했습니다.
운영상의 교훈은 진척(세대 수)이 아니라, 실패율을 모니터링하는 것입니다. 세대가 진행되어도 내용물이 연속적인 실패라면 실험은 진전하고 있지 않은 것입니다.
실험 자체의 결과
판정기(判定器)를 다시 만들고 나니, 설정을 항목별로 바꿔가며 시도한 것이 4번 있었습니다. '구멍 3' 이용 상한에 대한 사고는 그 이후 재현 실험에서 발생했습니다. 문화의 성패를 가른 것은 도구의 선발·출력량·적응도의 가중치·세대수가 아니라, 전 세대의 발화를 얼마나 끊지 않고, 어느 정도 양을, 몇 명에게 전달하느냐였습니다. 발췌본을 400자에서 1,200자로 늘리니, 전달의 강도를 나타내는 지표(우연 수준과의 비율)가 23배대에서 4.76.3배로 높아졌습니다. 1세대의 발화 수를 8명에서 16명으로 늘리자, 전통어의 수 상한은 거의 두 배가 되었습니다. 전달하는 발화를 후반부 3명분에서 6명분(전원)으로 하니, 3회 실행 모두 사전에 등록한 도달 조건을 충족했습니다.
다만, 도달한 문화에는 유보 사항이 3가지 있습니다.
- 발화의 2/3는 전 세대의 정형화된 필사본이었습니다. 핵심을 매 세대 노래하고 주변만 개정하는 '전례형' 문화입니다. 필사본을 제외하고 다시 판정하니, 누적 기준은 3회 실행 모두 하락했고, 장수(長壽) 기준도 3회 중 2회에서 하락합니다.
- 본보를 3명에서 6명으로 한 효과가 다수의 본보를 따르는 동조적 전달(Henrich & Boyd, 1998) 때문인지, 아니면 전달하는 문자량이 두 배가 된 것 때문인지는 구별할 수 없습니다. 당초 가설이었던 '소수 본보에 의한 일괄 개혁을 막는' 장치는 사후 검증에서 확인할 수 없었습니다.
- 다른 모델 조합으로 재현한 부분과 그렇지 않은 부분이 있습니다. 문화가 형성되는 자체와 그 사회에 고유하다는 것은 재현했지만, 전달의 강도와 누적은 원래 조합일 때만 강했습니다. 이 재현 실험은 '구멍 3' 이용 상한 때문에 도중에까지의 부분 데이터입니다.
다음에 같은 실험을 하기 전 확인 사항
다음에 다른 조건으로 실험을 돌리기 전에, 다음 3가지를 확인합니다.
- 판정기는 실험자가 주입한 문자열을 제외하고 계산하는가. 우연 수준(귀무 모델)과 비교하는가. 임계값은 결과를 보기 전에 정했는가?
- 전달된 설정 항목이 모두 읽혔는가. 시작 시 미독 항목에 경고하는 장치가 있는가?
- 실패한 호출이 성공한 발화와 같은 유형의 데이터가 아닌가. 세대별 실패율을 내고 0이 아닐 때는 판정을 돌리지 않는 장치가 있는가?
AI와의 분담
이 기사의 코드는, 메커니즘을 설명하기 위해 다시 작성된 일반 형태입니다. 실험에 사용된 코드 그 자체가 아닙니다.
실험의 코드와 분석의 대부분은 AI에게 맡겼습니다. 분석 결과가 사람에게 읽기 쉬운 형태로 되어 있는지, 어떤 결과를 믿을지 같은 판단은 제가 하고 있습니다. 이 기사의 초안도 AI가 작성했고, 제가 내용을 확인하고 있습니다.
목표하는 모습
이 실험에서 얻은, 전 세대의 정보를 다음 세대에 어떻게 전달할지에 대한 지식을 분신 설계에 적용하는 것을 목표로 합니다.
맺음말
MetAIra는 성격 진단으로 분신을 만들고, 일일 기록으로부터 깨달음을 전달하는 서비스입니다.
참고: Henrich, J., & Boyd, R. (1998). The evolution of conformist transmission and the emergence of between-group differences. Evolution and Human Behavior, 19, 215–241.
Discussion
AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn ML의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기