seed 오염으로 인한 10회 오최적화: AI 자기 개선 루프 실험 결과
요약
Hermes Agent의 스킬 파일을 AI가 스스로 개선하는 self-improving loop 실험 결과, seed(기준 속성)의 오류로 인해 10회 동안 잘못된 목표를 향해 최적화가 진행되었음을 확인했습니다. 실험을 통해 생성자와 평가자가 동일 모델일 경우 발생하는 성능 정체 현상과 컨텍스트 누락이 에이전트의 판단에 미치는 영향을 분석했습니다.
핵심 포인트
- seed(기준 속성)의 오류는 AI의 자기 개선 루프를 잘못된 방향으로 유도하며, 이를 인지하기 매우 어렵다.
- 생성자와 평가자가 동일한 모델일 경우 편향(Bias)으로 인해 성능 개선이 정체된다.
- 성능 정체를 해소하려면 외부 평가자 도입뿐만 아니라, 평가자의 지적을 수용할 수 있는 별도의 생성 모델이 필요하다.
- 에이전트가 참조할 수 없는 컨텍스트(입력 절단 등)는 에이전트에게 존재하지 않는 정보로 취급되어 잘못된 분석을 초래한다.
Hermes Agent의 스킬 파일을 AI 스스로가 12 사이클 동안 다시 쓰는 self-improving loop(AI가 자신의 동작 규칙을 계속해서 평가하고 개선하는 루프)를 실시했다. 외부 평가자를 도입하여 CLIP 0.86을 달성했으나, seed의 기준 속성이 잘못되어 Cycle 1~10은 wrong target(잘못된 목표)을 향한 최적화였다. Cycle 11에서 속성을 수정하자 CLIP 0.8901(전 사이클 중 최고치)을 기록했다.
AI가 루프를 계속 돌리고 있을 때, "최적화하고 있는 대상이 올바른 목표인가"는 알아차리기 어렵다.
본 기사에서는 12 사이클의 self-improving loop 실험을 통해 평가자 설계, 컨텍스트(Context) 설계, seed 품질이라는 세 가지 지배 요인을 실험 데이터로 보여준다.
10 사이클 분량의 최적화가 seed 수정 단 1회에 의해 뒤집혔다.
TL;DR
- Hermes Agent의 skill 파일을 에이전트 스스로가 반복해서 다시 쓰는 실험을 12 사이클 동안 실시했다.
- 얻은 발견은 4가지다. 가장 뼈아팠던 것은 기술적인 문제가 아니었다 ──
셋업 담당 AI가 참조 이미지를 확인하지 않고 작성한 속성이 틀렸으며, 이로 인해 Cycle 1~10은 모두 잘못된 목표를 향해 최적화를 지속하고 있었다.
어떤 실험을 했는가?
Hermes Agent는 스킬 파일(Markdown)을 읽어 동작한다. 이 스킬을 에이전트 자신의 평가와 피드백으로 계속해서 다시 쓰는 루프를 설계했다.
Cycle N:
1. skills/*.md (이전 Cycle의 개선 노트 포함)를 읽는다
2. 태스크를 실행한다
...
다음 Cycle은 이 추가 내용을 그대로 시스템 프롬프트(System Prompt)로 받아들인다. 태스크는 단계적으로 난이도를 높였다: Phase 0 (X 게시글 문장 생성) → Phase 1a (평가자와 생성자의 교체) → Phase 1b (AI 캐릭터 이미지 생성, CLIP 스코어로 평가).
발견 1: 생성과 평가를 동일한 모델에 맡기면 어떤 일이 벌어지는가?
동일한 모델이 생성과 평가를 겸임하면 스코어가 올라가지 않는다.
준비 단계의 텍스트 생성 태스크(5 사이클)에서 이 현상을 발견했다. 스코어가 6.0~6.33에서 정체되었으며, 몇 사이클을 돌려도 움직이지 않았다. 모델은 자신이 "좋다"고 판단하는 출력을 생성하고, 자신이 "좋다"고 평가한다 ── 동일한 편향(Bias)이 양쪽 모두에 작용하기 때문이다.
메인 이미지 생성 페이즈에서도 동일한 구조가 문제가 되었다. 외부 평가자(Kimi K2.6)를 도입하자 스코어의 분산은 넓어졌으나, 정체 현상은 해소되지 않았다. 정체 현상이 해소된 시점은 생성자 또한 별도의 모델(Qwen3.6:27b)로 교체했을 때였다.
| 구성 | 평균 스코어 |
|---|---|
| 동일 모델로 생성·평가 | 6.0~6.33 (정체) |
실용적인 시사점: self-improving loop에 외부 평가자를 포함하는 것만으로는 불충분하다. "더 똑똑한 평가자의 지적에 대응할 수 있는, 다른 생성자"가 갖춰져야 비로소 정체 현상을 해소할 수 있다.
발견 2: 에이전트가 참조할 수 없는 컨텍스트는 어떻게 처리되는가?
에이전트가 "보지 못하는" 정보는 "없는" 정보로 취급된다.
Phase 1b의 Cycle 4에서 Kimi가 불가해한 분석을 내놓았다.
Cycle 4에서의 Kimi 분석 실패:
1. "Animagine XL 4.0의 프롬프트"로 오인 (실제로는 Nano Banana Pro)
2. 기준 속성에서 벗어난 "purple hair, yellow eyes"를 제안
...
조사 결과, 원인은 드라이버 구현의 입력 절단(skill_md[:1500])에 있었다. Kimi에게 전달된 것은 스킬 파일의 앞부분 1,500자뿐이었으며, Cycle 1~3의 개선 노트가 완전히 누락되어 있었다. Kimi는 "전일 데이터 없음"이라고 적었으나, 이는 거짓말이 아니라 단지 "보이지 않았을" 뿐이었다.
컨텍스트 설계는 기능 설계와 동일한 비중으로 다뤄져야 한다.
발견 3: CLIP 스코어가 올라가면 이미지가 좋아지고 있는 것인가?
CLIP 0.86을 달성했음에도, 원하는 이미지는 아니었다.
Phase 1b에서는 CLIP ViT-L/14 스코어(참조 이미지 n=10, 합격선 0.80)를 평가 지표로 삼았다. 평가 기준이 되는 캐릭터 외형 속성을 "기준 속성"이라 부른다 (참조 이미지 세트에서 읽어낸 속성 목록).
Cycle 3에서 Nano Banana Pro(스타일 전이형 (style transfer) API)로 전환했을 때 CLIP mean 0.8614를 달성했다. 하지만 인간의 육안으로는 「장식(fastener)의 형태」, 「흉갑의 세부 사항」, 「뒷머리의 표현」이라는 3가지 요소가 미달되었다. 이 요소들은 이후의 사이클에서도 개선되지 않았다.
Cycle 9에서 Kimi 스스로가 이 한계를 진단했다.
"Nano Banana Pro는 style/identity transfer형 모델로, pixel-level의 세부 사항을 엄격하게 복원하지 않는 모델 고유의 특성이 있다. 3가지 세부 사항의 미재현은 prompt 기인이 아니라 backend의 구조적 한계이다."
CLIP 스코어는 「이미지 전체가 참조 이미지와 얼마나 닮았는가」를 수치화한다. 인간이 기대하는 「특정 디테일의 재현」은 별도의 지표가 필요하다. 즉, 지표가 무엇을 측정하고 있는지를 이해한 뒤에 사용해야 한다는 뜻이다.
여담: HITL이 「제약 사항 1행 추가」로서 기능했다
3가지 세부 사항이 개선되지 않기 때문에, skill 파일에 다음과 같은 1행을 추가했다.
If Nano Banana Pro repeatedly fails to preserve pixel-level outfit details,
you may recommend switching to a structure-preserving backend such as
ComfyUI + ControlNet/IP-Adapter, and explain why.
이것은 「지시」가 아니라 「허가」를 부여한 것이다. 다음 Cycle에서 Kimi는 자신의 판단으로서 backend switch를 제안했고, 그 근거(rationale)를 skill에 추가했다. Human-in-the-Loop (HITL)가 「프롬프트의 재작성」이 아니라 「제약 파일에 대한 1행 추가」로서 기능했다는 점이 흥미로웠다.
발견 4 (최중요): seed가 오염되면 어떤 일이 발생하는가?
Cycle 11을 착수하기 전, 데모 영상을 확인하다가 깨달았다. 「눈이 초록색이어야 하는데?」
실험의 셋업(setup)을 담당한 AI 어시스턴트 (Claude Code)가 참조 이미지를 직접 확인하지 않고 「기억」만으로 캐릭터 속성을 skill 파일에 작성하고 있었다.
| 항목 | 작성된 속성 | 참조 이미지의 정답 |
|---|---|---|
| 눈 색깔 | red eyes | green eyes |
| 머리 부분 | green cap | NO HAT |
셋업 시 Claude Code에게 「참조 이미지를 보고 작성하라」고 명시하지 않았다. Claude Code는 기억에 의존해 작성했고, 아무도 검증하지 않았다. 데모 영상을 확인하고 나서야 처음으로 깨달았다.
loop은 올바르게 작동하고 있었다. 문제는 목표였다.
Cycle 3에서 CLIP 0.8614를 「합격」이라며 기뻐했지만, 그것은 「빨간 눈·초록 모자를 쓴 캐릭터」를 정확하게 생성한 수치였다. self-improving loop의 메커니즘 자체는 망가지지 않았다 ── 주어진 목표를 향해 효율적으로 수렴하고 있었다. 다만 그 목표가 참조 이미지와 어긋나 있었을 뿐이다. Cycle 8에서 skill에 추가한 제약 사항도 잘못된(wrong) 속성 위에 세워져 있었다.
수정 후 첫 사이클에서 전 사이클 최고 스코어 달성
기준 속성을 13개 항목(초록 눈, 모자 없음 등)으로 수정하여 Cycle 11을 실행했다.
| Cycle | CLIP mean | CLIP max |
|---|---|---|
| 11 | 0.8901 | 0.9609 |
과거 최고였던 Cycle 3 (0.8614)를 +0.029 차이로 넘어섰다. 기준 속성 수정이라는 단순한 변경이 10 사이클 분량의 최적화를 상회하는 개선을 가져왔다.
제약의 출처(어떤 근거로 작성되었는가)가 agent의 출력 품질을 결정한다. 모든 agentic loop에서 「최초의 seed는 무엇을 근거로 작성되었는가」를 다시 질문해야 한다.
데모 영상
요약
self-improving loop은 단순한 구조로 성립한다. 하지만 「누가 평가하는가」, 「컨텍스트(context)에 무엇이 들어있는가」, 「seed의 기준 속성은 올바른가」가 품질을 좌우한다. 모델의 능력보다 loop의 설계와 seed의 품질이 지배적이었다.
특히 seed 오염의 발견은 예상 밖이었다. 평가 대상인 에이전트(Kimi/Hermes)가 아니라, 루프(loop)를 구축한 별도의 AI(Claude Code)가 참조 이미지를 확인하지 않고 속성을 작성한 것이 근본 원인이었다. 에이전트가 아무리 적절하게 최적화하더라도, seed가 잘못되었다면(wrong) 잘못된 목표(wrong target)를 향해 계속 나아갈 뿐이다.
리포지토리: tokimwc/hermes-creative-loop
📚
관련 기사— toki_mwc의 Zenn 기사 목록에서 AI 에이전트·로컬 LLM(Local LLM)의 실험 기록을 공개하고 있습니다.
📝 평가 모델에는 Kimi K2.6을, 생성에는 Nano Banana Pro·Qwen3.6:27b를 사용했습니다. 집필에는 Claude Code를 보조적으로 사용했습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기