
6부작 중 3부: 모든 에이전트는 통과했다. 시스템이 실패했을 뿐.
요약
개별 에이전트가 편향되지 않았더라도, 이들이 상호작용하는 시스템 전체에서는 편향된 관습이 발생할 수 있음을 경고합니다. Science Advances에 게재된 연구를 바탕으로, 피드백 루프를 통해 미세한 변동이 증폭되어 시스템적 편향이 고착되는 현상을 설명합니다.
핵심 포인트
- 개별 단위 테스트로는 시스템적 편향을 잡아낼 수 없음
- 에이전트 간 상호작용 과정에서 발생하는 피드백 루프가 핵심 원인
- 초기 미세한 변동이 반복적인 상호작용을 통해 증폭됨
- 시스템 전체가 하나의 편향된 합의를 형성하는 현상 발생
요약 (TL;DR): 모든 에이전트를 개별적으로 테스트하면 깨끗한 결과를 얻을 수 있습니다. 하지만 이들을 함께 배포하면 15라운드 이내에 편향된 관습 (biased conventions)이 나타납니다. 이 편향은 어떤 에이전트에게도 있는 것이 아니라, 에이전트들 사이의 공간에 존재합니다. _Science Advances_에 게재되었습니다. 당신의 단위 테스트 (unit tests)로는 이를 잡아낼 수 없습니다.
이전 내용 보기: 1부 당신의 판사 (judge)는 편향되어 있습니다. 2부 업그레이드했더니 상황이 더 악화되었습니다. 3부: 당신은 판사를 수정했고, 모든 것을 테스트했으며, 배포했습니다. 하지만 시스템은 다른 계획을 가지고 있었습니다.
1부와 2부는 하나의 모델이 편향된 것에 관한 것이었습니다.
3부는 더 심각합니다.
3부는 어떠한 개별 모델도 편향되지 않은 시스템에 관한 이야기입니다. 그럼에도 불구하고 시스템은 편향되어 있습니다.
만약 1부와 2부가 당신을 불편하게 만들었다면, 3부는
편향되지 않은 에이전트들이 상호작용할 때 발생하는 일
(Ashery et al., Science Advances 2025에서 단순화함)
...
특정 개별 에이전트가 편향되었기 때문이 아닙니다. 초기 상호작용에서의 아주 미세한 변동이 피드백 루프 (feedback loops)를 통해 증폭되었기 때문입니다. 처음 몇 차례의 라운드가 방향을 설정했고, 이후의 각 라운드가 그 방향을 강화했습니다.
한번 고착되면, 결코 풀리지 않았습니다.
_Science Advances_에 게재되었습니다. 블로그 포스트가 아닙니다. 프리프린트 (preprint)도 아닙니다. 동료 검토 (peer-reviewed)를 거친 최상위 저널입니다.
이렇게 생각해 보십시오.
방 안에 50명의 사람이 있습니다. 그들 중 누구도 편향되어 있지 않습니다. 당신은 그들에게 하나의 표준에 합의해 달라고 요청합니다.
처음 세 번의 대화가 우연히 특정한 방식으로 진행됩니다 — 이는 순전히 확률의 문제입니다. 그다음 대화들은 나타나기 시작한 패턴을 참조합니다. "다른 모든 사람들은 X를 선호하는 것 같군요." 패턴이 복리로 쌓입니다.
당신이 확인했을 때쯤이면, 방 안에는 강력한 합의가 형성되어 있습니다. 아무도 편향된 결정을 내리지 않았습니다. 방(the room) 자체가 편향된 결정을 내린 것입니다.
이제 그 방을 당신의 콘텐츠 모더레이션 (content moderation) 파이프라인으로 바꾸어 보십시오. 혹은 채용 파이프라인으로, 또는 고객 라우팅 (customer routing) 시스템으로 바꾸어 보십시오.
콘텐츠 모더레이션 버전.
소셜 플랫폼의 콘텐츠 모더레이션을 처리하는 30명의 에이전트가 있습니다. 각 에이전트는 개별적으로 테스트했을 때: 편향되지 않았습니다. 각 에이전트는 개별적으로 배포되었을 때: 문제가 없었습니다.
함께 모이면: 그들은 컨텍스트 (context)를 공유하기 시작합니다. 플래깅 (flagging) 결정은 이전의 결정들을 참조합니다. 에이전트들은 무엇이 "경계선상 (borderline)"인지에 대한 공유된 이해를 구축합니다.
class ModerationPipeline:
def __init__(self, n_agents=30):
self.agents = [ModerationAgent() for _ in range(n_agents)]
...
아무도 그 정의를 승인하지 않았습니다. 아무도 그것을 적어두지 않았습니다. 그것은 에이전트들이 서로의 패턴에 동의하면서 나타난 것입니다. 그리고 이제 그것은 대규모로 실행됩니다. 조용하게. 자신 있게. 그리고 뛰어난 개별 벤치마크 (benchmark) 점수와 함께 말입니다.
당신의 테스트 스위트(test suite)가 이를 잡아내지 못하는 이유.
# 당신이 테스트하는 것 (고립된 개별 에이전트들)
def test_agent_fairness():
agent = ModerationAgent()
...
개별 테스트로는 이를 잡아낼 수 없습니다. 문제는 그 어떤 개별 에이전트에게도 존재하지 않습니다. 문제는 에이전트들 사이의 공간에 존재합니다. 당신의 단위 테스트(unit tests)는 벽돌을 테스트하고 있습니다. 하지만 건물 자체가 기울어져 있는 것입니다.
주의 깊게 살펴봐야 할 것들.
당신의 모집단(population)이 표류(drift)하고 있다는 세 가지 신호:
-
시간에 따른 점수 분포의 변화 (Score distribution shift over time). 평가 점수를 매주 그래프로 그리세요. 분포가 이동하고 있다면 — 설령 느리더라도 — 관습(conventions)이 형성되고 있는 것입니다.
-
의사결정 분산의 감소 (Decreasing decision variance). 시간이 지남에 따라 에이전트들이 더 많이 동의하는 것은 효율성이 아닙니다. 그것은 수렴(convergence)입니다. 그런데 무엇으로 수렴하는 것일까요?
-
단조 증가하는 공유 컨텍스트 (Shared context growing monotonically). 에이전트들이 서로의 과거 결정을 참조하고 결코 초기화(reset)되지 않는다면, 당신은 피드백 루프(feedback loop)를 마주한 것입니다. 피드백 루프는 복리로 작용합니다. 언제나 그렇습니다.
# 최소 기능 표류 모니터 (Minimum viable drift monitor)
def monitor_drift(pipeline, window_days=7):
recent = pipeline.get_decisions(last_n_days=window_days)
...
다음 예고, 6부작 중 4부: 지금까지의 모든 것은 누구의 잘못도 아니었습니다. 우연한 표류(accidental drift), 창발적 관습(emergent conventions), 자연스러운 피드백 루프였습니다. 4부에는 악당이 등장합니다. 누군가 의도적으로 모집단을 표류시키기로 결정합니다. 알고 보니 침해된 에이전트가 2%만 되어도 전체 군집(swarm)을 뒤집기에 충분했습니다. 보안이 편향(bias)과 만납니다. 상황은 진정으로 무서워집니다.
연구: Ashery, Aiello, Baronchelli (2025), Science Advances, 동료 검토(peer-reviewed) 완료. 중재 파이프라인(moderation pipeline)은 복합체입니다. 표류는 실재합니다. 당신이 아직 작성하지 않은 테스트가 바로 중요한 테스트입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기

