TextGrad: 텍스트로 하는 자동 “미분”
개요
요즘 강한 AI는 모델 하나가 아니라 LLM 여러 개, 검색 엔진, 코드 실행기, 시뮬레이터를 엮은 **compound AI system(복합 AI 시스템)**인데, 이런 시스템은 대개 전문가가 프롬프트와 연결 방식을 손으로 다듬어 만든다. 신경망도 초창기엔 같은 처지였지만 backpropagation(역전파: 출력의 오차를 거꾸로 흘려 각 부품을 얼마나 고칠지 계산하는 방법)과 자동 미분 프레임워크가 나오면서 “손실 함수만 정하면 알아서 최적화되는” 시대가 열렸다. 이 논문의 통찰은, LLM API 호출처럼 미분이 안 되는 부품이라도 “이 답은 이런 이유로 틀렸고 이렇게 고치면 좋겠다”는 자연어 비평을 숫자 gradient 대신 쓰면 역전파의 뼈대를 그대로 옮겨 올 수 있다는 것이다. 그래서 TextGrad는 시스템을 계산 그래프로 보고, 최종 평가에서 나온 비평을 연쇄 법칙처럼 앞 단계로 넘겨 각 변수(프롬프트, 코드, 답안, 분자 SMILES 문자열, 치료 계획 가중치)마다 **textual gradient(텍스트 기울기)**를 모은 뒤, **Textual Gradient Descent(TGD)**라는 LLM 호출로 그 비평을 반영한 새 값을 쓴다. 문법도 PyTorch의 loss.backward(), optimizer.step()을 그대로 따라서, 사용자는 목적 함수만 정하면 된다. 특히 프롬프트만 고치던 선행 연구(DSPy, ProTeGi)와 달리, 문제 하나의 답 자체를 변수로 두는 **instance optimization(인스턴스 최적화)**까지 같은 틀에서 한다. 실험에서 gpt-4o의 GPQA 정확도는 CoT 51.0%에서 55.0%로 올랐고(Table 2), LeetCode Hard 완료율은 시연 예시 없이도 0.36으로 시연 1개를 쓴 Reflexion의 0.31을 넘었으며(Table 1), gpt-3.5-turbo의 프롬프트를 최적화해 Object Counting 정확도를 77.8%에서 91.9%로 올렸다(Table 3). 같은 틀로 신약 후보 분자와 전립선암 방사선 치료 계획까지 개선했지만, 이 둘은 컴퓨터 시뮬레이션 안에서만 확인했다(Section 5).
Implication: “미분”을 자연어 비평으로 바꿔 끼우면, 모멘텀·미니배치·제약 최적화 같은 수치 최적화의 도구 상자를 LLM 시스템 설계에 거의 그대로 빌려 올 수 있다. 다만 이는 비유이지 수렴이 보장된 수학적 미분이 아니다.
📎 https://arxiv.org/abs/2406.07496
배경과 문제
왜 어려운가. 새 세대 AI 응용은 여러 부품이 얽힌 시스템이다. 저자들은 기호 풀이기와 함께 올림피아드 수학을 푸는 LLM, 검색 엔진과 코드 인터프리터를 쓰는 프로그래밍 시스템, 실제 GitHub 이슈를 푸는 에이전트를 예로 든다(Section 1, author-stated). 그런데 이런 성과 상당수는 그 분야 전문가가 손으로 만들고 휴리스틱으로 조정한 시스템에서 나왔다. 그래서 복합 시스템을 원칙 있게, 자동으로 최적화하는 방법이 핵심 과제라고 말한다(Section 1, author-stated).
어느 흐름에서 나왔나. 두 갈래가 만난다.
- 신경망과 자동 미분. 신경망의 부품(뉴런)은 행렬 곱 같은 미분 가능한 함수로 이어져 있어서, 숫자 gradient와 역전파로 각 매개변수를 고칠 방향을 계산할 수 있었다. PyTorch 같은 자동 미분 프레임워크가 이것을 누구나 쓰게 만들었다(Section 1,
author-stated). TextGrad는 이 추상화(Variable, Model, Loss, Optimizer)를 그대로 흉내 낸다(Figure 1c). - LLM을 비평가·최적화기로 쓰는 연구. 가장 가까운 두 선행 연구로 저자들은 DSPy와 ProTeGi를 꼽는다(Section 4,
author-stated). DSPy는 LLM 시스템을 여러 층의 프로그램으로 보고 프로그램처럼 최적화한다. ProTeGi(Pryzant et al.)는 “textual gradient”라는 말을 처음 정의했는데, 과제에서 저지른 실수에 대한 LLM의 자연어 피드백을 프롬프트 최적화에 썼다. TextGrad는 이 비유를 프롬프트 최적화에서 자동 미분 전체로 넓힌다고 말한다. 그 밖에 Self-Refine, Reflexion 같은 자기 개선(self-refinement)과 test-time training(테스트 시점에 그 문제 하나에 맞춰 모델이나 답을 더 다듬는 방법)도 이 틀 안에서 몇 줄 코드로 표현된다고 주장한다(Section 4,author-stated).
기존 방법의 한계와 차이점.
- 숫자 gradient로 프롬프트를 최적화하는 white-box 방법은 모델 매개변수에 접근해야 해서 closed-source 모델에는 못 쓴다(Section 4,
author-stated). - DSPy와 ProTeGi는 프롬프트 최적화에 집중했다. TextGrad는 프롬프트나 시연 예시뿐 아니라 분자, 치료 계획, 코드 조각 같은 결과물 자체를 변수로 다룬다. 저자들은 이 instance optimization을 가장 큰 차이로 내세운다(Section 4,
author-stated). - 기존 LLM-as-optimizer 연구들은 각자 특정 응용에서 쓸모를 보였고, 이 논문은 “하나의 일반 프레임워크”로 여러 응용을 시험했다는 점을 차별점으로 든다(Section 4,
author-stated). 다만 각 응용에서 목적 함수 프롬프트는 과제마다 따로 썼다(Section 3.1, 3.2, Appendix F.2, G.1). “프레임워크를 고치지 않았다”는 말은 gradient 연산자와 TGD 프롬프트가 고정이라는 뜻으로 읽어야 한다(Section 2, Appendix A.3,analyst-inference).
지표
응용마다 지표가 다르다. 모든 수치는 컴퓨터 안에서 잰 값이다.
| 지표 | 무엇을 세는가 | 범위·단위 | 방향 | 분모·집계 | 측정 조건 | 원문 위치 |
|---|---|---|---|---|---|---|
| Completion Rate | LeetCode 플랫폼의 비공개 테스트를 모두 통과한 문제 비율 | 0–1 | 높을수록 좋음 | LeetCode Hard 39문제, 5 seed 평균 | gpt-4o, 5 iteration | Section 3.1, Table 1, Appendix C.1 |
| Accuracy (QA) | 객관식 최종 답(ABCD)이 정답과 같은 비율. 문자열 매칭으로 판정 | % | 높을수록 좋음 | GPQA Diamond 198문항, MMLU Machine Learning 112문항, College Physics 92문항 | gpt-4o, temperature 0, 3번 갱신 후 다수결 | Section 3.2, Table 2, Appendix D.1 |
| Accuracy (추론 과제) | Object Counting과 GSM8k는 응답의 마지막 숫자와 정답의 exact match. Word Sorting은 gpt-4o가 정답 목록과 비교해 1/0 판정 | % | 높을수록 좋음 | BBH 과제는 test 100개, GSM8k는 test 1319개 | 답하는 모델 gpt-3.5-turbo-0125, 피드백 모델 gpt-4o | Section 3.3, Table 3, Appendix E.1 |
| Vina score | AutoDock Vina 도킹 시뮬레이션으로 추정한 결합 친화도(binding affinity: 분자가 표적 단백질에 얼마나 잘 붙는지) | kcal/mol, 대개 −3.0 ~ −12.0 | 낮을수록(더 음수일수록) 좋음 | 분자 하나당 값. DOCKSTRING 표준 워크플로 | 58개 표적 단백질 | Section 3.4, Appendix F.1, F.2 |
| QED | 약물 유사성(druglikeness: 몸에 흡수되어 표적까지 갈 가능성)을 분자량·지용성·극성 표면적 등으로 합친 점수 | 0–1 | 높을수록 좋음 | 분자 하나당 값. RDKit Chem.QED | 위와 같음 | Section 3.4, Appendix F.1 |
| Mean dose | 표적이나 장기 부피에 들어간 평균 방사선량 | Gy | PTV(종양+여유 부피)는 처방량 70.20 Gy에 가까울수록, OAR(보호할 정상 장기)은 낮을수록 좋음 | 환자 5명 평균(괄호는 표준편차) | 전립선암 IMRT 환자 5명 | Section 3.5, Figure 3d·e |
| D_q (D95 등) | 부피의 q%가 받는 최소 선량 | Gy | PTV의 D95는 처방량과 같아야 함 | 위와 같음 | 위와 같음 | Section 3.5 “Evaluation metrics” |
보조 지표로 분자 새로움을 재는 Tanimoto·Tversky 유사도(0–1, 1이면 같은 구조)와 ADMET-AI가 예측한 돌연변이 유발성·임상 독성(0–1, 낮을수록 안전)이 부록에 있다(Appendix F.5, F.6). Figure 2d에도 Tanimoto와 Tversky 값이 나온다.
방법과 벤치마크 구성
한 문장 구조. 시스템을 계산 그래프로 바꾼다. 앞으로 계산(forward)해 손실을 얻고, 손실에서 거꾸로(backward) 각 변수에 대한 자연어 비평을 모으고, optimizer가 그 비평을 반영해 변수를 다시 쓴다.
1) 두 번의 LLM 호출로 보는 예 (Section 2, 식 1–9).
- forward:
Prediction = LLM(Prompt + Question),Evaluation = LLM(Evaluation Instruction + Prediction). - backward: 먼저 Evaluation을 보고 Prediction에 대한 비평 ∂Evaluation/∂Prediction을 얻는다(식 4). 그다음 그 비평과 “Prompt가 어떻게 Prediction을 만들었는지”를 함께 LLM에 주고 Prompt에 대한 비평을 얻는다(식 5). 숫자 미분의 연쇄 법칙(chain rule)을 흉내 낸 것이다.
- gradient 연산자 ∇LLM은 “여기 LLM과의 대화가 있다. {y}에 대한 비평은 이렇다. {x}를 어떻게 고칠지 설명하라”는 프롬프트로 구현된다(식 6). 저자들은 이 연산자가 응용 분야에 의존하지 않고, 한 번 구현하면 모든 응용에서 고정된다고 말한다(Section 2,
author-stated). 식 6과 9의 프롬프트는 설명용이며 실제 프롬프트는 다르다(Section 2 각주). 실제 프롬프트는 Appendix A.3, A.4에 있다. - update: TGD.step은 “{x}에 대한 비평은 이렇다. 비평을 반영해 새 변수를 만들어라”는 LLM 호출이다(식 9). 숫자 경사 하강의 θ − ∂L/∂θ에 해당한다(식 7–8).
2) 일반 형태 (Section 2, 식 10–12, Appendix A.2 Algorithm 1).
- 각 변수 v는 앞선 변수들(predecessors)을 입력으로 받는 함수 f_v의 출력이다(식 10).
- v에 대한 gradient는 v를 사용한 모든 다음 변수(successors) w에서 받은 비평들을 모은 집합이다(식 11). 숫자 미분에서는 이 값을 더하지만, 여기서는 “v가 쓰인 모든 맥락과 그 비평”을 이어 붙인다.
- 위상 정렬(topological sort) 순서로 그래프를 거꾸로 훑으며 gradient를 채운다(Algorithm 1).
- 비용: 간선이 n개인 그래프에서 한 번 최적화할 때 gradient 계산에 LLM 호출이 최대 n번 더 든다(Section 2,
author-stated).
3) 구현 부품 (Appendix A).
- Variable에는 값, role description(이 변수가 그래프에서 하는 역할을 설명하는 문자열), gradients, predecessors,
requires_grad가 있다(Appendix A.1). 저자들은 role description이 최적화 방향을 크게 바꾼다고 관찰했다. 예를 들어 역할을 “최종 숫자 답”으로 적으면 optimizer가 숫자만 남기고, “풀이와 최종 답”으로 적으면 풀이도 함께 쓴다(Appendix A.1,author-stated). - backward를 맡는 LLM의 시스템 프롬프트는 “너는 gradient 엔진이다. 새 버전을 제안하지 말고 비평만 하라. 이미 잘 되면 피드백하지 마라”는 내용이다. 모든 실험에서 같은 backward 모드를 썼다(Appendix A.3,
author-stated). tg.sum은 여러 손실을 줄바꿈으로 이어 붙이고, backward에서는 출력의 비평을 입력 모두에 그대로 넘긴다. 숫자 덧셈의 미분이 1인 것을 흉내 낸다(Appendix A.3, 식 22–24).- TGD optimizer는 개선된 변수를
<IMPROVED_VARIABLE>태그 안에 쓰게 한다. 태그 안 글이 변수를 그대로 대체한다(Appendix A.4).
4) 최적화 기법 (Section 2, Appendix B).
- Batch optimization: 미니배치의 손실을
tg.sum으로 합쳐 비평을 한꺼번에 optimizer에 준다. 프롬프트 최적화에 썼다. - Constrained optimization: “마지막 줄은 ‘Answer: $LETTER’ 형식” 같은 자연어 제약을
<CONSTRAINTS>태그로 optimizer 프롬프트에 붙인다. 저자들은 제약이 너무 많으면 LLM이 잘 안 지킬 수 있다고 적었다(Section 2,author-stated). - Momentum: optimizer가 이 변수의 이전 값 몇 개(예:
momentum_window=3)를 함께 본다. - In-context examples: 좋은 변수의 예시를 optimizer 프롬프트에 넣는다. 방사선 치료 실험에서 썼다.
5) 목적 함수와 두 종류의 최적화 (Section 2).
- 목적 함수는 미분할 수 없어도 되고, 입출력이 텍스트 같은 비정형 데이터여도 된다. 자연어로 쓴 LLM 평가(§3.3), 단위 테스트를 돌린 코드 인터프리터 출력(§3.1), 분자 시뮬레이션 엔진 출력(§3.4)을 모두 손실로 쓴다.
- Instance optimization: 문제 하나의 해(코드, 답안, 분자)를 직접 변수로 두고 테스트 시점에 고친다.
- Prompt optimization: 여러 질문에 두루 통하는 프롬프트 하나를 찾는다. 일반화가 목표라는 점이 instance optimization과 다르다.
6) 다섯 응용의 실험 설정.
| 응용 | 변수 | 손실 | 모델·반복 | 비교 대상 | 원문 위치 |
|---|---|---|---|---|---|
| 코드 최적화 | 코드 | LLM이 문제·코드·로컬 테스트 결과를 보고 쓴 비평(식 14) | gpt-4o, 5 iteration, 0 demonstration, 5 seed. iteration마다 손실·gradient·갱신에 LLM 호출 3번 | gpt-4o zero-shot, Reflexion(1 demonstration, 5 iteration). Reflexion은 저자들이 다시 돌렸고 데이터셋도 Reflexion 파이프라인으로 다시 추출했다 | Section 3.1, Appendix C.1 |
| 답안 최적화 | 답안 | ”비판적이고 창의적인 과학자로서 예측이 틀릴 수 있는 이유를 찾아라”는 LLM 평가(식 15). 정답을 쓰지 않는 self-supervised 손실 | gpt-4o, 3번 갱신 후 모든 답안 다수결, 답 형식 제약 사용 | CoT(temperature 0, simple-evals 프롬프트), gpt-4o 발표 수치 53.6%(temperature 0.5) | Section 3.2, Appendix D |
| 프롬프트 최적화 | 시스템 프롬프트 | 정답과 비교한 정확도(식 16) | 답하는 모델 gpt-3.5-turbo-0125, 피드백 gpt-4o. batch 3 × 12 iteration(복원 추출로 36개). iteration마다 validation 정확도가 오를 때만 프롬프트 교체 | zero-shot CoT, DSPy BootstrappedFewShotRandomSearch(후보 프로그램 10개, few-shot 8개) | Section 3.3, Appendix E |
| 분자 최적화 | SMILES 문자열 | Vina와 QED를 LLM에 주고 비평을 받음(식 17–18). Vina를 QED보다 10배 중요하게 두도록 프롬프트에 지정 | gpt-4o, 58개 표적 × 초기 조각 3개 × 10 iteration | DrugBank의 임상 승인 약물 118개(58개 중 29개 표적) | Section 3.4, Appendix F |
| 방사선 치료 계획 | 장기별 중요도 가중치 문자열 θ | matRad 수치 최적화기로 계획을 만든 뒤(inner loop), LLM이 임상 프로토콜과 비교해 평가 | gpt-4o, 최대 10 iteration. 임상가가 만든 계획 3개와 그 가중치를 in-context 예시로 제공, 이전 값과 gradient도 함께 제공(모멘텀) | 환자 5명의 실제 임상 계획(Eclipse) | Section 3.5, Appendix G |
방사선 치료에서 TextGrad가 고치는 것은 계획 자체가 아니라 바깥 고리(outer loop)의 하이퍼파라미터다. 안쪽 고리는 기존 수치 최적화기(matRad, interior point 알고리즘)가 그대로 푼다(Section 3.5, Appendix G.2). 즉 LLM이 사람 설계자가 하던 “가중치를 바꿔 보고 결과를 보는” 시행착오를 대신한다.
주요 결과
| 주장 | 근거 위치 | 관찰/수치 | 조건·주의 | 출처 라벨 |
|---|---|---|---|---|
| 코드 최적화에서 TextGrad가 Reflexion보다 높다 | Table 1, Section 3.1 | 완료율 zero-shot 0.26, Reflexion 0.31 ± 0.012, TextGrad 0.36 ± 0.018 | gpt-4o, 5 seed 평균, 39문제. Reflexion은 시연 1개, TextGrad는 0개 | author-stated |
| 본문과 표의 zero-shot 수치가 다르다 | Section 3.1 Results vs Table 1 | 본문은 “gpt-4o zero-shot 23%”, Table 1은 0.26 | 원문 안의 불일치. 어느 쪽이 맞는지 원문에서 확인할 수 없다 | analyst-inference |
| ”20% 상대 향상”이라는 표현은 표의 비교와 정확히 맞지 않는다 | Abstract, Section 1 vs Table 1 | Reflexion 대비 (0.36−0.31)/0.31 ≈ 16%, zero-shot 대비 (0.36−0.26)/0.26 ≈ 38% | 저자가 어떤 비교로 20%를 계산했는지 원문에 없다 | analyst-inference |
| 답안 최적화로 gpt-4o의 GPQA 정확도가 오른다 | Table 2, Section 3.2 | CoT 51.0%, 발표 수치 53.6%, TextGrad 55.0% | GPQA Diamond 198문항. 저자는 55%가 당시 알려진 최고 결과라고 말한다. seed 수나 분산은 보고되지 않았다 | author-stated |
| 53.6%와 55.0%의 차이는 문항 수로 약 3개다 | Table 2, Appendix D.1 | 1.4%p × 198 ≈ 2.8문항 | 반복 실험 없이 한 번 잰 값이라면 우연 변동과 구분하기 어렵다 | analyst-inference |
| MMLU 두 부분집합에서도 오른다 | Table 2 | Machine Learning 85.7 → 88.4%, College Physics 91.2 → 95.1% | ML 값은 112문항 중 96개·99개와 맞는다. College Physics 값은 92문항의 정수 비율로 떨어지지 않아 집계 방식이 설명과 다를 수 있다 | author-stated(수치), analyst-inference(문항 수 계산) |
| 프롬프트 최적화로 약한 모델의 추론 정확도가 크게 오른다 | Table 3, Section 3.3 | Object Counting 77.8 → 91.9%, Word Sorting 76.7 → 79.8%, GSM8k 72.9 → 81.1% (모두 zero-shot CoT → TextGrad) | gpt-3.5-turbo-0125, gpt-4o 피드백. 시연 예시 없이 지시문만 최적화 | author-stated |
| DSPy와 비교하면 한 과제에서만 앞선다 | Table 3, Section 3.3 | Object Counting은 DSPy 84.9% 대비 +7.0%p. Word Sorting(79.8%)과 GSM8k(81.1%)는 동률 | DSPy는 시연 8개를 프롬프트에 넣어 추론 비용이 더 든다(author-stated). 반대로 TextGrad는 매 단계 gpt-4o를 써서 최적화 비용이 든다 | author-stated |
| 두 방식을 합치면 조금 더 오른다 | Section 3.3 Results | GSM8k에서 DSPy의 시연과 TextGrad의 지시문을 합치면 82.1% | 한 과제, 한 조합만 보고됨 | author-stated |
| BBH 정확도는 test 100개로 설명과 맞지 않는 소수점을 가진다 | Table 3, Appendix E.1 | 100개 test라면 정수 %가 나와야 하는데 77.8, 84.9, 91.9 같은 값이 있다 | 반복 평균인지 다른 분모인지 원문에 설명이 없다. seed 수도 보고되지 않았다 | analyst-inference |
| 분자 최적화에서 모든 표적에 대해 결합력과 약물 유사성이 오른다 | Section 3.4 Results, Appendix F.4 | 58개 표적 모두에서, 초기 조각과 관계없이 개선 | 수치 표는 본문에 없고 부록 그림으로 보인다 | author-stated |
| 생성 분자는 승인 약물과 비슷한 Vina, 더 높은 QED를 보인다 | Figure 2b, Section 3.4 | 29개 표적 × 초기 조각 3개 분포 비교 | Vina·QED는 시뮬레이션과 계산식일 뿐, 실험·임상 검증은 범위 밖(Section 5) | author-stated |
| 생성 분자는 대부분 새로운 구조다 | Appendix F.5 | 6번째 iteration까지 생성 분자의 95%가 ChEMBL 어떤 분자와도 Tanimoto 0.80을 넘지 않음. 승인 약물과의 Tversky 유사도 중앙값 0.42, 범위 0.14–0.90 | 부록 결과. “기억해서 베꼈다”는 우려에 대한 간접 증거 | author-stated |
| 독성을 목적에 넣지 않았는데도 위험한 분자를 피한다 | Appendix F.6 | ADMET-AI 예측 돌연변이 유발성·임상 독성 분포가 승인 약물 118개와 비슷 | 예측 모델의 점수이지 실험값이 아니다 | author-stated |
| 방사선 치료 계획이 PTV 목표를 더 정확히 맞춘다 | Figure 3d, Supplementary Table 1 | PTV 평균 선량의 처방량 대비 편차: 방사선종양학자 +1.97 (0.36), TextGrad +0.51 (0.09). D95: −0.10 (0.15) vs +0.00 (0.00) | 환자 5명 평균(표준편차) | author-stated |
| 정상 장기에 들어가는 선량이 낮다 | Figure 3e, Supplementary Table 2 | 방광 평균 22.39 (5.55) → 20.92 (0.79) Gy, 직장 23.88 (6.45) → 17.18 (4.20) Gy | 환자 5명. in-context 예시로 준 임상 계획 3개가 평가 대상 5명과 겹치는지는 보고되지 않았다 | author-stated(수치), analyst-inference(겹침 우려) |
결과가 이어지는 방식. 다섯 응용은 같은 backward·TGD 프롬프트를 공유하고, 과제마다 손실 프롬프트와 변수만 바꾼다. 코드·답안·분자·치료 계획은 instance optimization, 추론 프롬프트는 prompt optimization이다. 숫자로 확인 가능한 벤치마크(코드, QA, 추론)에서는 개선 폭이 수 %p 수준이고, 기준선보다 LLM 호출을 더 많이 쓴다(analyst-inference). 과학 응용(분자, 치료 계획)은 저자 스스로 proof-of-concept(개념 증명)라고 부르며 in silico(컴퓨터 시뮬레이션 안) 검증에 그친다(Section 5).
Take-home
핵심 메시지. 미분이 안 되는 LLM 시스템도 “자연어 비평을 거꾸로 전달하고, 그 비평으로 변수를 다시 쓰는” 역전파 흉내로 꽤 일반적으로 최적화할 수 있다. 그리고 그 인터페이스를 PyTorch처럼 만들면 수치 최적화의 기법을 그대로 옮겨 쓸 수 있다.
결론이 성립하는 범위.
- 확인한 모델은 사실상 gpt-4o(손실·gradient·갱신 엔진)와 gpt-3.5-turbo-0125(프롬프트 최적화의 답하는 모델)뿐이다(Section 3). 다른 LLM, 특히 약한 모델이 gradient 엔진이 될 때도 통하는지는 보고되지 않았다.
- 저자들은 이 틀이 “현재 최고 수준 LLM이 시스템의 개별 부품과 하위 과제를 추론할 수 있다”는 가정 위에 서 있다고 밝힌다(Section 1,
author-stated). - 코드·QA·추론 벤치마크는 각각 39문제, 92–198문항, 100–1319개 test라는 작은 규모에서 확인했다(Appendix C.1, D.1, E.1).
저자가 인정한 한계 (author-stated).
- 분자와 치료 계획은 in silico 검증만 했다. 실제 효용은 실험과 임상 평가가 필요하며 이 논문 범위 밖이다(Section 5).
- 최적화 안정성을 높이려면 variance reduction(분산 감소), adaptive gradient, LLM 자기 검증 같은 기법과의 연결이 더 필요하다(Section 5).
- 도구 사용, RAG 같은 실제 LLM 응용 부품으로 연산을 넓혀야 한다(Section 5).
- 제약이 너무 많으면 LLM이 잘 안 지킬 수 있다(Section 2).
- Reflexion 비교에 쓴 LeetCode Hard 데이터셋은 다시 추출한 것이라 Reflexion 논문의 데이터셋과 같지 않을 가능성이 크다(Appendix C.1).
- gpt-4 계열에는 temperature 0으로도 없앨 수 없는 비결정성이 있을 수 있다(Section 3.2 각주).
작성자가 보는 우려 (analyst-inference).
- “gradient”는 저자 스스로 비유라고 밝힌다(Section 1). 손실이 줄어든다거나 수렴한다는 보장은 없다. 실제로 프롬프트 최적화는 validation 정확도가 오를 때만 변수를 교체하는 외부 장치에 기대고 있다(Section 3.3).
- 비교가 계산량 기준으로 맞춰져 있지 않다. GPQA에서 TextGrad는 갱신 3번과 다수결을 쓰고, CoT 기준선은 한 번 답한다. 개선의 일부가 “더 많이 생각하고 투표한 효과”일 수 있다. 같은 호출 수의 self-consistency(여러 번 답하고 다수결) 기준선은 보고되지 않았다.
- 손실, gradient, 갱신을 모두 같은 gpt-4o가 맡는다. Word Sorting 정확도도 gpt-4o가 판정한다(Appendix E.1). 평가자와 최적화기가 같을 때 생기는 편향은 따로 다루지 않았다.
- 본문 수치 불일치가 있다. 코드 zero-shot 23%(본문) vs 0.26(Table 1), “20% 상대 향상”의 계산 기준 불명, Figure 3의 패널 지칭 불일치(아래 Figure 3 항목).
- 방사선 치료는 환자 5명이고, in-context 예시 3개와 평가 환자의 관계가 보고되지 않았다.
반복 횟수와 공개 여부. Table 1만 5 seed 평균과 표준편차를 보고한다. Table 2와 Table 3에는 seed 수와 분산이 보고되지 않았다. 방사선 치료는 환자 5명 평균과 표준편차다. 코드는 https://github.com/zou-group/textgrad 에 공개했다고 밝힌다(Section 1).
읽지 못한 범위. 원문 41쪽 전체를 읽었다. 저장소 코드와 실제 실행 로그는 확인하지 않았다(unknown).
본문 도표
Figure 1 — 역전파 비유, PyTorch와의 대응, 네 가지 응용 예
- 무엇을 보여주는가: (a) 신경망에서 숫자 gradient로 하는 역전파, (b) LLM·검색 엔진·도구 호출기로 된 블랙박스 시스템에서 자연어 “gradient”로 하는 역전파, (c) Math·PyTorch·TextGrad의 추상화 대응표와 공통 문법, (d) 분자 최적화, (e) 코드 최적화, (f) 방사선 치료 계획 최적화, (g) 프롬프트 최적화의 실제 예.
- 읽는 법: (a)는 노드 값과 간선 가중치, 그리고 ∂Loss/∂v1 = 0.124 같은 숫자 gradient가 화살표로 거꾸로 흐른다. (b)는 같은 자리에 “this prompt can be improved by…” 같은 문장이 들어간다. (c)는 행이 Input·Model·Loss·Optimizer이고 열이 Math·PyTorch·TextGrad다. 예를 들어 PyTorch의
SGD(list(model.parameters()))가 TextGrad에서는tg.TGD(list(model.parameters()))다. 아래 띠는 forward(loss = loss_fn(model(input))) → backward(loss.backward()) → 갱신(optimizer.step()) 순서가 두 프레임워크에서 같다는 것을 보여 준다. (d)–(g)는 각 응용에서 변수가 어떻게 바뀌고 그 사이에 어떤 “Gradients” 문장이 있었는지 보여 준다. - 핵심 관찰: (d) 분자의 Vina 점수가 iteration 1, 2, 3에서 −4.3 → −5.5 → −7.5 kcal/mol로 내려간다. gradient 문장은 “극성을 높이는 작용기를 추가하라”, “극성 또는 방향족 기를 넣어라”다. (e) 코드의 gradient는
nums[i] == k인 경우를 현재 로직이 제대로 처리하지 못한다고 짚고, 다음 코드는 그 분기를 고친다. (f) 방광과 직장에 선량이 높던 계획이, “직장과 방광 가중치가 낮다”는 gradient 뒤에 더 잘 보호된다. (g) 프롬프트가 “Think step by step” 한 줄에서 “항목과 수량을 목록으로 쓰고 합산하고, 다시 확인하라”는 긴 지시문으로 바뀌며 정확도가 77.8%에서 91.9%가 된다. 이 값은 Table 3의 Object Counting 수치와 같다. - 의미와 주의: 저자는 이 그림으로 PyTorch와 같은 추상화를 써서 프레임워크를 일반적이고 배우기 쉽게 만들었다고 말한다(
author-stated). (d)–(g)는 선택된 예시 한 건씩이라 평균 성능을 보여 주지 않는다. 성능 수치는 Table 1–3과 Figure 2, 3에서 확인해야 한다(analyst-inference). (d)의 분자는 Figure 2a의 벤젠 출발 예와 다른 예다. 출발 분자가 사슬 모양이고 첫 Vina 값도 −4.3으로 Figure 2a의 −4.2와 다르다(analyst-inference, 그림 판독). - 확인 상태: viewed
Table 1 — LeetCode Hard 코드 최적화
- 무엇을 보여주는가: gpt-4o로 LeetCode Hard 문제를 풀 때 세 방법의 완료율.
- 읽는 법: 행은 방법, 열은 Completion Rate(0–1, 비공개 테스트 전부 통과 비율, 높을수록 좋음). ± 뒤는 5 seed의 변동이다. 원문은 이것이 표준편차인지 표준오차인지 밝히지 않았다.
- 핵심 관찰: Zero-shot 0.26, Reflexion(시연 1개, 5 iteration) 0.31 ± 0.012, TextGrad(시연 0개, 5 iteration) 0.36 ± 0.018.
- 의미와 주의: 저자는 Reflexion이 in-context 시연을 쓴 반면 TextGrad는 쓰지 않았다는 점에서 더 인상적이라고 말한다(Section 3.1,
author-stated). 본문은 같은 zero-shot을 23%로 적어 표의 0.26과 맞지 않는다. 39문제 기준 0.31과 0.36의 차이는 평균 약 2문제다(analyst-inference). 기존 문헌의 GPT-4 수치(zero-shot 7%, Reflexion 15%)는 다른 모델과 다른 데이터셋 추출본에서 나온 값이라 이 표와 직접 비교할 수 없다(Section 3.1, Appendix C.1). - 확인 상태: viewed
Table 2 — 질문 응답 답안 최적화
- 무엇을 보여주는가: gpt-4o의 zero-shot 답안을 TextGrad로 테스트 시점에 다듬었을 때 세 데이터셋의 정확도.
- 읽는 법: 행은 데이터셋별 방법, 열은 Accuracy(%). “Best reported [48]“는 gpt-4o 발표 문서의 수치로, temperature 0.5로 잰 값이다. CoT는 저자들이 temperature 0으로 다시 잰 값이다(Section 3.2).
- 핵심 관찰: GPQA는 CoT 51.0, 발표 수치 53.6, TextGrad 55.0. MMLU Machine Learning은 85.7 → 88.4. MMLU College Physics는 91.2 → 95.1.
- 의미와 주의: 저자는 테스트 시점에 계산을 더 써서 가장 강한 모델의 성능도 올릴 수 있음을 보여 준다고 해석한다(
author-stated). TextGrad 쪽은 갱신 3번과 다수결을 써서 기준선보다 LLM 호출이 많다. 반복 실험 결과는 표에 없다. GPQA에서 발표 수치와의 차이 1.4%p는 198문항 중 약 3문항이다(analyst-inference). - 확인 상태: viewed
Table 3 — 추론 과제 프롬프트 최적화
- 무엇을 보여주는가: gpt-4o를 gradient 엔진으로 써서 gpt-3.5-turbo의 시스템 프롬프트를 최적화했을 때, 세 추론 과제의 정확도를 CoT와 DSPy와 비교한다.
- 읽는 법: 행은 과제별 세 방법(CoT 0-shot, DSPy BFSR 시연 8개, TextGrad 지시문만 시연 0개), 열은 Accuracy(%). 굵은 글씨는 과제별 최고값이다.
- 핵심 관찰: Object Counting 77.8 / 84.9 / 91.9, Word Sorting 76.7 / 79.8 / 79.8, GSM8k 72.9 / 81.1 / 81.1 (CoT / DSPy / TextGrad 순). TextGrad는 세 과제 모두에서 CoT보다 높고, DSPy보다 높은 것은 Object Counting 하나뿐이다. 나머지 둘은 동률이다.
- 의미와 주의: 저자는 DSPy가 시연 예시를 고르고 TextGrad가 지시문을 고친다는 점에서 둘이 상호 보완적이라고 말한다(
author-stated). 표 아래 예시에서 GSM8k 프롬프트는 12 iteration 뒤 “문제를 다시 말하고, 단계별로 나누고, 계산을 다시 확인하라”는 지시가 추가되어 72.9%에서 81.1%가 된다. BBH 과제의 test가 100개인데 정수가 아닌 %가 나오는 이유는 원문에 없다(analyst-inference). - 확인 상태: viewed
Figure 2 — 텍스트로 하는 분자 최적화
- 무엇을 보여주는가: 벤젠 조각에서 시작해 표적 단백질 PPARA에 대한 결합력(Vina)과 약물 유사성(QED)을 함께 높이는 과정(a, c, d, e), 그리고 29개 표적 전체의 분포 비교(b).
- 읽는 법: (a)는 처음 세 iteration의 분자 구조와 그 사이 gradient 문장. (b)와 (c)는 x축이 QED(0–1, 오른쪽이 좋음), y축이 Vina 점수(kcal/mol, 아래가 좋음)다. (b)는 등고선 밀도 그림으로 회색이 초기 조각, 파란색이 TextGrad 결과, 빨간색이 DrugBank 승인 약물이다. (c)는 PPARA 한 표적에서 10 iteration의 궤적(점선)과 승인 약물 세 개(빨간 별). (d)는 가장 비슷한 승인 약물(Fenofibric Acid)과 TextGrad 최종 분자의 구조. (e)는 단백질 결합 자리에 놓인 분자의 자세(pose).
- 핵심 관찰: (a) Vina −4.2 → −5.5 → −7.5 kcal/mol, QED 0.44 → 0.59 → 0.79. (c) 궤적은 대략 QED 0.44, Vina −4.2에서 출발해 QED 0.8–0.9, Vina −8.4 안팎까지 간다. 승인 약물은 Fenofibrate가 약 (0.55, −8.0), Gemfibrozil이 약 (0.78, −7.2), Fenofibric acid가 약 (0.85, −7.7)에 있다(
analyst-inference, 그래프 판독). (d) 최종 분자와 Fenofibric Acid의 Tanimoto 0.38, Tversky 0.36. (b) 파란 분포가 빨간 분포보다 오른쪽(높은 QED)에 몰려 있고, 세로 범위는 대략 겹친다(analyst-inference, 그래프 판독). - 의미와 주의: 저자는 29개 표적과 초기 조각 3개에서 TextGrad가 승인 약물과 비슷한 Vina, 더 높은 QED의 분자를 설계했다고 말한다. 또 최종 분자는 가장 비슷한 승인 약물과도 구조 유사성이 낮고, 그럴듯한 결합 자세를 보인다고 한다(캡션,
author-stated). 하지만 Vina는 도킹 시뮬레이션의 추정값이고 QED는 계산식이다. 합성 가능성, 실제 결합, 독성은 실험으로 확인하지 않았다(Section 5). (e)의 “그럴듯함”은 정량 지표 없이 그림으로만 제시된다(analyst-inference). - 확인 상태: viewed
Figure 3 — 방사선 치료 계획 최적화
- 무엇을 보여주는가: textual gradient가 PTV와 OAR의 중요도 가중치를 조정하며 치료 계획이 바뀌는 과정(a), iteration에 따른 선량 변화(b, c), 임상 계획과의 최종 비교(d, e).
- 읽는 법: (a)는 한 단면의 선량 분포 색지도(파랑이 낮고 빨강이 높음)로, 초기값 → iteration 1 → iteration 5 순서이며 방광과 직장 윤곽이 표시돼 있다. (b)는 x축 iteration, y축 PTV 평균 선량(Gy)이고 빨간 점선이 임상 목표 70.20 Gy, 옅은 띠는 선량 퍼짐이다. (c)는 같은 x축에 방광·직장 평균 선량(Gy)과 빨간 점선의 임상 허용 최대치 30 Gy. (d)는 PTV의 평균 선량·D95를 처방량 대비 편차로, (e)는 방광·직장 평균 선량을 보여 준다. (d)와 (e)는 환자 5명의 평균이고 괄호가 표준편차다.
- 핵심 관찰: (a) 첫 gradient는 “PTV 기준을 못 맞췄으니 PTV 가중치를 올려라”, 그다음 gradient는 “직장·방광 가중치가 낮아 보호가 부족하니 조금 올려라”다. (b) PTV 평균 선량은 초기 약 79 Gy에서 iteration 1에 약 73 Gy, 이후 약 71 Gy로 목표선 가까이 가고 띠가 좁아진다(
analyst-inference, 그래프 판독). (c) 방광은 초기 약 15 Gy에서 iteration 1에 약 31 Gy로 튀었다가 iteration 5에 약 19 Gy, 직장은 약 12 → 28 → 22 Gy 정도다(analyst-inference, 그래프 판독). (d) PTV 평균 선량 편차 +1.97 (0.36) vs +0.51 (0.09), D95 −0.10 (0.15) vs +0.00 (0.00) (방사선종양학자 vs TextGrad). (e) 방광 22.39 (5.55) vs 20.92 (0.79) Gy, 직장 23.88 (6.45) vs 17.18 (4.20) Gy. - 의미와 주의: 저자는 TextGrad가 PTV 선량을 목표에 맞추고 분산을 줄이며(b), 방광과 직장 선량을 허용 최대치 아래로 유지하고(c), PTV 지표와 장기 보호 모두에서 임상 계획보다 낫다고 말한다(d, e)(캡션,
author-stated). 그런데 그래프를 읽으면 (c)의 iteration 1에서 방광 선량이 30 Gy 점선을 살짝 넘는다. 따라서 “허용치 아래 유지”는 최종 계획에 대한 말로 읽어야 한다(analyst-inference). 또 Section 3.5 본문은 PTV 결과를 “Figure 3 (c)”, 장기 보호를 “Figure 3 (d)“라고 부르는데, 캡션과 그림에서는 각각 (b)·(d)와 (c)·(e)에 해당한다. 원문 안의 패널 지칭 불일치다(analyst-inference). 환자는 5명뿐이다. - 확인 상태: viewed
Wiki 연결
- Automatic Prompt Optimization with Gradient Descent and Beam Search — ProTeGi. “textual gradient”를 처음 정의한 선행 연구로, 저자들이 직접 영감의 출처로 꼽는다(Section 4, 참고문헌 [25])
- Reflexion - Language Agents with Verbal Reinforcement Learning — Table 1의 코드 최적화 비교 대상이자 LeetCode Hard 데이터셋의 출처(참고문헌 [26])
- Self-Refine - Iterative Refinement with Self-Feedback — TextGrad가 자기 틀 안에서 몇 줄로 표현할 수 있다고 말하는 self-refinement 계열(참고문헌 [30])
- GPQA - A Graduate-Level Google-Proof Q&A Benchmark — Table 2의 주 벤치마크(참고문헌 [27])
- Meta-Harness - End-to-End Optimization of Model Harnesses — TextGrad 같은 “점수+요약 피드백” 최적화기를 넘어 원시 실행 이력 전체를 보게 한 후속 연구(
analyst-inference, 이 논문이 인용하지 않음)
BibTeX
@article{yuksekgonul2024textgrad,
title = {TextGrad: Automatic ``Differentiation'' via Text},
author = {Yuksekgonul, Mert and Bianchi, Federico and Boen, Joseph and Liu, Sheng and Huang, Zhi and Guestrin, Carlos and Zou, James},
journal = {arXiv preprint arXiv:2406.07496},
year = {2024},
url = {https://arxiv.org/abs/2406.07496}
}