AI에게 코드로 그림 그리기를 가르치다: 보상 함수 재설계기
Training AI to Paint with Code
TL;DR Highlight
보상 신호 9개를 4개로 줄이고 쌍대 비교를 썼더니 학습 속도가 3배 빨라졌다
Who Should Read
LLM을 LLM-judge로 평가하거나 RL로 튜닝할 때 점수가 정체돼 고민인 개발자
Core Mechanics
- 코드로 그리면 결과물을 직접 고칠 수 있다
- 이미지 생성 AI는 프롬프트로만 수정할 수 있다.
- 저자들은 Qwen 3.5 35B가 p5.brush JavaScript 코드를 쓰게 하고 강화학습(RL)으로 학습시켰다.
- 코드가 결과물이라 프롬프트 없이도 세밀하게 편집할 수 있다.
- 신호 9개가 사실상 같은 말만 했다
- 첫 보상 함수는 컴파일 검사, 코드 길이, HPSv3, 품질 심사 4개, 프롬프트 일치 등 9개 신호였다.
- 품질 심사 4개와 프롬프트 일치 점수끼리 상관이 0.85~0.95였다.
- 보상은 0.65에서 멈췄고 결과는 늘 오각 꽃잎의 납작한 클립아트 꽃이었다.
- 코드 길이 보상은 30스텝에 포화됐다
- 코드 길이 항목이 전체 보상의 약 3분의 1을 차지했다.
- 30스텝쯤부터 기울기(학습 신호)가 0이 됐다.
- 실제로 편차를 보인 HPSv3(사람 선호 모델)는 가중치가 0.10뿐이었다.
- 절대 점수 대신 쌍대 비교로 바꿨다
- 0~10점 채점은 점수가 0 근처에 몰렸다.
- 심사 모델에게 결과물과 참조 그림 2장을 보여 주고 어느 쪽이 더 좋은 수채화인지 물었다.
- 보상은 비교에서 이긴 비율이다.
Community Reactions
- SVG가 더 적합하다는 의견
- SVG가 이미 코드로 된 이미지라 JavaScript로 픽셀을 만들게 하는 것보다 SVG를 직접 내게 하는 편이 낫다는 의견이 있었다.
- RL은 새로운 스타일에 비효율적이라는 경험
- SVG로 펠리컨을 그리게 가르쳐 봤더니 대부분의 행동은 베이스 모델 SFT에서 나왔다는 경험이 있었다.
- RL은 스타일이나 분포 밖의 새로움을 만드는 데 매우 비효율적이라는 의견이다.
- LLM 그림 능력을 간단히 테스트하는 방법
- 모델에게 프로그램으로 PNG의 색과 알파값을 지정해 800x800 그림을 그리게 하면 제너러티브 아트가 나온다는 경험이 있었다.
- 복셀로 비슷한 시도를 했다는 경험
- Rust 네이티브 모듈을 부르는 파이썬 코드만으로 괜찮은 복셀 모델을 만들었고 기대보다 잘 나왔지만 완벽하진 않았다는 경험이다.
How to Apply
- LLM 심사를 쌍대 비교로 바꿔 보기
- 지금 0~10점으로 채점하는 LLM-judge가 있으면 점수 분포 히스토그램부터 그려 본다.
- 점수가 몰려 있으면 기준 샘플 2개와 비교해 어느 쪽이 나은지 묻도록 바꾼다.
- 이긴 비율을 점수로 쓴다.
- 보상·평가 항목 간 상관 확인하기
- 평가 항목별 점수를 따로 로그로 남긴다.
- 항목 간 상관이 0.85 이상이면 하나만 남기고 합친다.
- 이미 포화돼 변하지 않는 항목은 가중치를 낮추거나 게이트로 바꾼다.
- 시스템 프롬프트에서 API 문서를 허용 목록으로 줄이기
- 환각된 API가 나오면 긴 레퍼런스를 빼고 쓸 함수 8개 안팎의 허용 목록만 넣는다.
- 3번 연속 돌려 없는 함수를 호출하는지 확인한다.
- 사람이 고른 좋은 예시 풀 만들기
- 출력 100~200개를 직접 좋음·보통·나쁨으로 분류한다.
- 좋음 등급만 비교 기준 풀로 쓴다.
Try It
# Claude나 ChatGPT에 그대로 붙여넣기 (논문 방법의 간이 버전: 쌍대 비교 심사)
당신은 엄격한 심사자입니다. 아래는 같은 질문에 대한 기준 답변 A, B와 평가 대상 답변 C입니다.
질문: {{질문}}
[기준 A]
{{좋은 예시 1}}
[기준 B]
{{좋은 예시 2}}
[평가 대상 C]
{{평가할 답변}}
지시: C를 A와 비교해 어느 쪽이 더 좋은지, C를 B와 비교해 어느 쪽이 더 좋은지 각각 고르세요. 각 비교마다 한 줄 이유를 쓰고, 마지막에 JSON으로만 {"vs_A": "C"|"A", "vs_B": "C"|"B", "win_rate": 0|0.5|1} 형태로 출력하세요.
이어서 해 볼 것: 기존 0~10점 채점 결과와 비교해 점수 분포가 더 넓게 퍼지는지 확인해 보세요.Terminology
관련 논문
The Judge Can Debias Itself: LLM-as-a-Judge가 스스로 편향을 고치게 하는 법
심사 프롬프트에 편향 경고를 넣거나 스스로 비판시켰더니 21개 중 20개 조합에서 정확도가 올랐다
미국 노동시간의 90%는 AI 벤치마크가 제대로 다루지 못하는 일이다
벤치마크 29개를 직업 과제에 매핑했더니 노동시간 90%가 커버 밖
Postgres 19, AI 코드 리뷰가 버그를 너무 많이 찾아 출시 연기
LLM 코드 리뷰가 버그를 쏟아내 Postgres 19가 11월로 밀리고 기능 8~10개가 빠졌다
StarSkirmish Bench v0.2: LLM이 1시간 만에 짜는 StarCraft 봇 대결
LLM에게 1시간 동안 StarCraft 봇을 짜게 했더니 GPT-6 Astra가 1위
그럴듯한 설명 하나면 멀티모달 LLM 심사위원도 속는다 (JUPE 벤치마크)
정답은 그대로 두고 설명만 붙였더니 MLLM 심사위원의 오답 거절률이 12.7~13.8%p 떨어졌다
신경망은 이미 깔끔하다: polysemanticity의 원인 재해석
뉴런을 직접 들여다봤더니 대부분 한 가지 역할이 있었다는 주장
Linus Torvalds의 첫 LLM 보조 패치 시리즈
Linus가 LLM으로 folio 조회 패치 10개를 만들어 read() 벤치가 10배 빨라졌다