강화학습과 검증기 관문 추론
📍 현재 위치: V부 · 신경 깊이: 사고 사슬과 강화학습 — 14장. 사고 사슬은 계산을 생성된 단계들로 언롤링하여 순차적 깊이를 회복했고, 오염된 중간 상태 하나가 그 뒤의 모든 것을 어떻게 탈선시키는지 측정했습니다; 이 장은 그 오염을 문턱에서 막아 세우는 계측 도구를 설치한 다음, 그 문의 판단으로부터 더 나은 제안자를 학습시킵니다.
앞 장은 우리에게 올바른 깊이에는 도달할 수 있지만 올바른 단계를 약속할 수는 없는 기계를 남겼습니다; 1권과 2권의 고전적 엔진들은 정반대의 성격을 가지고 있었습니다. 모든 단계가 인증되지만 아무것도 학습하지 않았습니다. 이 장은 그 둘을 합성합니다. 정책(policy, 후보 단계들에 대한 학습 가능한 분포) 하나가 유도를 제안하고, 정확한 검증기(verifier, 1권에서 그대로 빌려 온 규칙-사례화(rule-instantiation) 검사) 하나가 각 단계를 받아들이거나 기각합니다. 이 합성물은 두 계약 각각에서 가장 좋은 조항만을 물려받습니다: 게이트로부터는 구성상의 건전성을, 정책으로부터는 학습 가능성을 물려받는 것입니다. companion은 이 논증 전체를 학계 세계 위에서 실행하며, 그 가장 날카로운 반전, 즉 하나의 실패까지 포함합니다: 검증된 사실을 산출한 것에 대해 정책에 보상을 주면, 정책은 타당하지만 무관한 사실들을 양산하는 법을 배웁니다. 타당성 검사는 어떤 단계가 정확하다(correct)고 말할 뿐, 그것이 진행(progress)이라고 말하지는 않으며, 추론을 위한 강화학습에 관한 흥미로운 모든 것이 바로 그 틈새에 살고 있습니다.
칠판에 증명을 써 내려가는, 똑똑하지만 조심성 없는 견습생 한 명과, 그 옆에 지우개를 들고 서 있는 깐깐한 사서 한 명을 상상해 보십시오. 견습생은 빠르게 쓰고 자유롭게 추측합니다; 사서는 한 줄 한 줄을 규칙서와 대조하고, 이미 칠판에 있는 것에서 따라 나오지 않는 것은 무엇이든 즉시 지워 버립니다. 칠판 위에 살아남는 것은 무엇이든 정확함이 보장됩니다. 견습생이 아무리 제멋대로여도 상관없는데, 사서가 결코 잠들지 않기 때문입니다. 이제 견습생이 살아남긴 줄 가운데 어느 것이 실제로 증명을 완성했는지를 지켜보며 견습생을 훈련시키면, 견습생은 정말로 더 나아집니다. 하지만 살아남은 줄 하나하나에 대해 견습생에게 대가를 지불하면 뒤틀린 일이 벌어집니다: 견습생은 쉽고, 참이고, 쓸모없는 줄을 베껴 쓰는 것이 칠판을 가장 빨리 채우는 길임을 알아채고는, 아무것도 증명하지 않게 됩니다. 사서는 진리를 보장하고, 오직 보상만이 진행을 정의합니다.
이 장에서 다루는 내용
- 제안자/검증기 패턴: 설계 원칙으로서 서술된 노동 분업, 4권의 번역-후-증명 인수분해와 검증기 유도 증명 탐색 속에 있는 그 계보, 그리고 여기서 새로운 것, 즉 검증기의 판단으로부터 제안자를 학습시킨다는 점을 다룹니다.
- 정확한 환경: 학계 지식 베이스 위의 유도된-사실 집합으로서의 상태, 잡음 섞인 소프트맥스 정책이 내놓는 규칙 사례화로서의 행동, 그리고 커밋된 코드에서 그대로 인용한, 상수 비용의 재유도 검사 하나로서의 게이트를 다룹니다.
- 신뢰의 대가: 게이트 없는 사슬은 측정된 비율 0.247로 잘못된 사실을 저지르며, 그 잘못된 사실 아홉 개 가운데 대략 하나는 정직한 단계가 오염된 전제에 적용되어 만들어진다는 것을 다룹니다.
- 구성상의 건전성: 검증기 제약 디코딩이 모든 예산에서 유도된 집합 전체를 참된 폐쇄 안에 묶어 둔다는 것을, 세 줄짜리 귀납법으로 증명하고 6,612개의 승인된 단계에 걸쳐 검사하며, 재현율은 커밋된 예산 곡선으로 나타난다는 것을 다룹니다.
- 전문가 반복의 유도와 실행: 목표를 향해 게이트를 통과한 사슬을 표집하고, 검증된 성공만 남기고, 전부 유도해 보이는 최대우도 경사로 제안 로짓을 다시 학습시킵니다; 학습된 보상 모델이 어디에도 없는 채로 성공률이 0.205 → 0.343 → 0.463 → 0.535로 오르는 것을 다룹니다.
- 보상 해킹 전시물: 검증된-사실 개수 대 목표 F1이라는 두 가지 보상과, 소속-보상 정책이 훈련되지 않은 정책보다 더 많은 검증된 사실을 유도하면서도 그 관련성은 균등 기준선보다도 아래로 떨어진다는 커밋된 붕괴를 다룹니다.
- 과정 지도의 자리매김: 단계별 판단이야말로 정확한 검증기가 공짜로 내주는 바로 그것이라는 점, 그리고 프론티어가 그 오라클을 갖지 못한 곳에서는 하나를 훈련시키며 I부에서 III부까지의 모든 감사 의무를 물려받는다는 것을 다룹니다.
노동 분업: 정책은 제안하고, 검증기는 처분한다
이 패턴을 먼저 서술합니다. 그것이 알고리즘이기 이전에 하나의 설계 원칙이기 때문입니다. 추론 시스템을 비대칭적 계약을 가진 두 구성 요소로 나눕니다. 제안자(proposer)는 통계적입니다: 후보 단계를 생성하고, 틀려도 되며, 학습하는 유일한 부분입니다. 검증기(verifier)는 정확합니다: 근거 진리(ground truth)에 대해 재유도함으로써 각 후보를 받아들이거나 기각하며, 결코 학습하지 않고, 우리의 파편에서는 값싸게 작동합니다. 이 합성물은 두 구성 요소 어느 쪽도 홀로는 만족시키지 못하는 계약을 만족시킵니다: 시스템이 단언하는(asserts) 모든 것은 검증기를 통과한 것이므로, 제안자가 아무리 형편없어도 단언은 건전합니다; 그리고 시스템이 찾아낸(finds) 모든 것은 정책이 제안한 것이므로, 정책이 나아질수록 커버리지도 나아집니다. 오류 가능성은 학습될 수 있는 구성 요소 안에 격리되고, 정확성은 훼손될 수 없는 구성 요소에 닻을 내립니다.
이 시리즈는 이 패턴을 이미 만난 적이 있습니다. 4권의 번역-후-증명 인수분해는 오류를 범할 수 있는 파서를 정확한 엔진 앞에 두었습니다: 번역은 틀릴 수 있지만, 그것을 조건으로 하면 증명은 인증되었습니다. 현대의 검증기 문헌도 같은 이음매를 따라 자라났습니다. 그것은 표집된 수학 풀이를 재순위화하는 학습된 검증기들, 즉 양쪽 절반 모두 신경망인 제안자/점검자 분리로 시작했고 [1], 단계별 판단이 결과만 보는 판단보다 더 신뢰할 만한 검증기를 훈련시킨다는 것이 밝혀지면서 날카로워졌으며 [2], 스스로 생성한 근거가 최종 답의 정오로 걸러져 훈련 데이터로 되먹임되면서 하나의 학습 루프가 되었고 [3], 검증기의 단계 점수가 단계별 증명 생성을 이끌면서 하나의 탐색 절차가 되었으며, NLProofS가 그 전형적인 사례입니다 [4]. 이 장에서 새로운 것은 되먹임 엣지입니다: 검증기의 판단은 출력에 대한 필터일 뿐만 아니라 제안자를 위한 훈련 신호이기도 합니다. 그 닫힌 루프가 곧 강화학습이며, 강화학습 특유의 병리 현상을 데리고 나타나는데, 이 장의 마지막 삼분의 일이 그것을 측정합니다.
기계 장치에 앞서 구별 하나를 짚어 둡니다. 이 장 전체가 그 구별 위에서 돌아가기 때문입니다. 검증기는 정확히 하나의 질문에 답합니다: 이 단계는 이미 확립된 것으로부터 따라 나오는가? 이것이 정확성 신호(correctness signal)입니다. 그것은 다음 질문에는 답하지 않습니다: 이 단계는 유도를 목표에 더 가깝게 만드는가? 이것이 진행 신호(progress signal)이며, 어떤 건전성 검사도 그것을 제공하지 않습니다. student(erin)으로부터 researcher(erin)을 유도하는 것은 완벽하게 타당하면서도, 목표가 인용 사슬이라면 완벽하게 쓸모없습니다.
정책은 제안하고 정확한 게이트는 처분한다: 건전성은 모든 예산에서 구성상 성립하고, 학습은 재현율과 성공률을 끌어올리며, 검증된 단계가 진행인지 양산인지를 결정하는 것은 오직 보상뿐이다.
저자가 AI의 도움을 받아 직접 제작한 원본 도해.
환경: 학계 세계 위의 정확한 게임
companion verifier_gate.py는 위의 모든 주장이 검사될 수 있고 어떤 것도 조작될 수 없는 가장 작은 환경을 짓습니다. 이 세계는 1권의 것이며, 다시 타이핑하지 않고 그대로 가져옵니다(verifier_gate.py 63–65번째 줄): 학계 지식 베이스의 기본 사실 23개와 그 7개의 혼(Horn) 규칙 템플릿을 0부터 6까지 색인합니다(professor로부터의 researcher, student로부터의 researcher, researcher로부터의 person, grandAdvisor 합성, 부등식 가드가 있는 colleague 규칙, 그리고 기저 사례와 재귀 사례로 이루어진 두 개의 citesTransitively 규칙). 근거 진리는 최소 고정점(least fixpoint) 이며, 여기서 는 1권의 즉시-귀결 연산자(immediate-consequence operator)입니다: 사실 집합 에 적용하면, 는 에다가 몸체가 에서 만족되는 모든 규칙 머리를 더한 것이며, 기본 사실로부터 시작해 더 이상 아무것도 바뀌지 않을 때까지 반복하면 폐쇄가 나옵니다(forward_chain.py 42–63번째 줄). 이 세계에서 폐쇄는 47개의 원자를 가집니다: 기본 사실 23개에 유도 가능한 원자 24개를 더한 것이며, 그중 6개는 합성이나 재귀를 필요로 하는 grandAdvisor와 citesTransitively 원자, 즉 다중 홉 목표(multi-hop goal)입니다(verifier_gate.py 70–84번째 줄).
이 세계의 강화학습적 독법은 직접적입니다. 상태(state)는 지금까지 유도된 사실들의 집합 이며, 기본 사실에서 시작합니다. 행동(action)은 후보 단계입니다: 규칙 템플릿 과 결론 원자의 짝입니다. 정책(policy)은 일부러 최소화되어 있어서, 이 장의 모든 경사를 손으로 쓸 수 있습니다: 규칙 템플릿마다 하나씩인 실숫값 점수 7개로 이루어진 벡터, 즉 로짓(logit) ( 은 실수 일곱 개짜리 목록들의 공간입니다)을 소프트맥스(softmax)에 통과시켜, 를 얻습니다. 여기서 분모의 합은 일곱 개의 템플릿 전체에 걸쳐 돌며 점수를 확률 분포로 바꿉니다. 각 단계는 템플릿 를 표집하고, 그것을 에 대해 지면화(ground)하여(그 템플릿이 지금 당장 허가하는 모든 새로운 결론을 모으고), 결론 하나를 균등하게 골라냅니다. 그런 다음 환경의 정직성 장치가 발동합니다: 확률 로, 시드가 고정된 오염 채널(corruption channel)이 균등하게 뽑힌 상수 하나를 결론의 한 인자 자리에 끼워 넣어, 자신이 유도한 것을 잘못 보고하는 불완전한 신경 제안자를 대신합니다(verifier_gate.py 141–149번째 줄). 이 모듈은 이 축소판이 생략하는 것을 솔직하게 밝힙니다: 로짓은 상태에 의존하지 않으므로 정책은 시퀀스 모델이 아니라 밴딧(bandit, 상태와 무관하게 같은 고정된 행동 분포를 사용하는 의사결정 문제)이며, 제안자의 오류는 창발적 속성이 아니라 명시적인 잡음 채널입니다(verifier_gate.py 41–44번째 줄). 이러한 단순화 덕분에 아래의 모든 숫자가 정확히 재현 가능합니다.
게이트는 이 장의 중심 계측 도구이므로, 여기 전체를 그대로 싣습니다(verifier_gate.py 107–120번째 줄):
def verify_step(r_idx: int, proposed: tuple, derived: set) -> bool:
"""THE GATE — Volume 1's exact step verifier, never a learned score:
a proposed step is valid iff it instantiates rule ``r_idx`` against
the facts derived so far, i.e. ∃σ with head·σ = proposed and every
body atom·σ ∈ ``derived``. Seeding ``_match_body`` with mgu(head,
proposed) is equivalent (head variables bound first, the body match
binds the rest) and RE-DERIVES the step, never trusting the proposer."""
head, body = RULES[r_idx]
# σ₀ = mgu(head, proposed); None ⇒ not even an instance of the head.
sub0 = unify(head, proposed, {})
if sub0 is None:
return False
# Valid iff σ₀ extends to satisfy the WHOLE body inside `derived`.
return next(_match_body(body, derived, sub0), None) is not None
이 검사를 해독해 봅시다. 치환(substitution) 는 규칙의 변수들에 상수를 배정하는 것입니다; "단계가 타당하다"는 주장은, 그 아래에서 규칙의 머리가 정확히 제안된 원자가 되고 몸체의 모든 원자가 이미 안에 있는 사실이 되는 그런 가 존재한다는 뜻입니다. 코드는 이 를 두 단계로 찾습니다: unify(head, proposed, {})가 머리와 제안 사이의 최일반 단일화자(most general unifier)를 계산하고(머리의 변수들을 묶습니다), 1권의 전방향 연쇄기에서 가져온 _match_body(forward_chain.py 19–39번째 줄)가 그 묶음을 왼쪽부터 오른쪽까지 몸체의 원자들을 따라 에 대해 확장합니다. 제안자가 말하는 것은 그 무엇도 신뢰되지 않습니다; 단계는 처음부터 다시 유도됩니다. 비용을 눈여겨보십시오: 머리 단일화 한 번(고정된 아리티(arity)에 대해서는 상수 작업)에 더해, 유도된 집합에 대한 몸체 대조가 있는데, 이는 , 즉 지금까지 유도된 사실의 개수(막대 기호 는 집합의 크기를 나타냅니다)에 대해 몸체 길이만큼의 차수를 가진 다항식이며, 이 47-원자 세계에서는 사실상 상수입니다. 이 값쌈은 이 파편의 특권입니다. 혼 규칙, 데이터로그(Datalog), 그리고 2권의 EL 계열은 모두 다항식 단계 검사를 허용하지만, 프론티어가 항상 그런 것을 가지고 있지는 않습니다. 단계가 비형식적 수학이거나 열린-도메인 텍스트일 때는 가져다 쓸 verify_step이 없으며, 이 분야의 대응, 즉 점검자를 대신 훈련시키는 것 [1][2]이 이 장의 끝에서 그 나름의 비용과 함께 되돌아옵니다.
게임의 한 에피소드는 예산이 정해진 루프입니다(verifier_gate.py 152–193번째 줄): 역-누적분포함수(inverse-CDF, cumulative distribution function) 표집, 즉 누적 확률을 계산해 두고 균등하게 뽑은 난수를 처음으로 넘어서는 누적 질량의 템플릿을 고르는 방식으로 템플릿 하나를 뽑고, 그것을 지면화하고, 결론을 오염시킬 수도 있으며, 그것을 무작정 받아들이거나(게이트 없음(ungated) 모드) verify_step이 그것을 재유도할 때만 받아들입니다(게이트 있음(gated) 모드). 받아들여진 원자는 즉시 에 들어가 이후의 지면화에 먹이가 됩니다; 새로운 결론이 없는 템플릿은 허탕(dud)이며, 아무것도 만들어 내지 못한 채 예산 한 단계를 씁니다.
게이트 없음: 제안자를 신뢰하는 대가
실험 (a)는 모든 제안을 받아들입니다. 24단계씩 이백 개의 에피소드, 균등 정책, 그리고 받아들여진 모든 원자를 참 폐쇄에 대해 감사합니다(verifier_gate.py 198–216번째 줄). 커밋된 출력은 다음과 같습니다.
[1] ungated chains — accept every proposed conclusion (200 episodes x 24 steps)
accepted 3416 facts; wrong (outside the closure): 844 — committed wrong-fact rate 0.247
injected by the corruption channel : 752
DOWNSTREAM: valid steps, polluted premises : 92 (rate 0.027)
one wrong atom breeds more: unsound derivations pollute the closure
헤드라인 비율은 놀랍지 않습니다: 오염 채널은 네 번에 한 번꼴로 발동하며, 받아들여진 3,416개의 사실 가운데 752개(비율 0.220)가 그것의 직접적인 주입물입니다. 정말로 중요한 숫자는 두 번째 것입니다. 받아들여진 것 전체의 2.7퍼센트이자 잘못된 사실 아홉 개 가운데 대략 하나꼴인 92개의 잘못된 사실은 완벽하게 타당한 규칙 적용이었던 단계들이 저지른 것입니다: 감사는 자기 자신의 단계가 오염되지 않은 잘못된 원자를 하류(downstream)로 분류하는데, 이는 규칙이 이미 오염된 전제 위에서 정직하게 발동했다는 뜻입니다(verifier_gate.py 206–213번째 줄). 끼워 넣어진 advises 사실 하나는 합성 규칙의 교과서적 적용을 통해 가짜 grandAdvisor 결론들을 낳습니다; 끼워 넣어진 cites 하나는 가짜 전이 사슬을 낳습니다. 이것은 더 가혹한 통화로 치러지는 앞 장의 전파 전시물입니다: 그곳에서는 오염된 중간 상태 하나가 한 계산의 나머지 전체를 탈선시켰습니다; 여기서는 오염된 사실 하나가 공유 저장소로 들어가 그것을 건드리는 모든 미래의 유도를 오염시킵니다. 오염은 복리로 불어나며, 그 어떤 양의 하류 정직함도 그것을 고치지 못합니다. 이것이 게이트를 동기 부여하는 부정적 결과입니다: 사슬의 최종 답을 검사하는 것은 이미 너무 늦습니다. 그때쯤이면 잘못됨이 이미 타당한 추론들을 거쳐 세탁되어 있기 때문입니다.
검증기 제약 디코딩: 구성상의 건전성
실험 (b)는 정확히 한 가지만 바꿉니다: 모든 단계는 유도된 집합에 들어가기 전에 verify_step을 통과해야 합니다(verifier_gate.py 184–186번째 줄). 정책도 같고, 잡음도 같고, 예산도 같습니다. 이것이 사들이는 보증은 전부 유도해 볼 가치가 있습니다. 그 전제들이 모두 코드 안에서 눈에 보이기 때문입니다.
주장. 를 참 폐쇄라 하고, 를 개의 단계가 받아들여진 뒤의 게이트 통과 유도 집합이라 합시다. 그러면 모든 에서, 모든 예산에서, 모든 정책 아래에서 입니다(는 "부분집합이다"라고 읽습니다: 게이트를 통과해 유도된 집합의 모든 사실이 참 폐쇄 안에도 놓여 있다는 뜻입니다).
유도. 증명은 에 대한 귀납법이며, 폐쇄의 성질 하나를 사용합니다: 는 고정점(fixpoint)이며, 입니다. 이는 안의 전제들에 대해 어떤 규칙을 발동시키더라도 그 결론은 이미 안에 있다는 뜻입니다("규칙 아래에서 닫혀 있다"는 말이 뜻하는 바가 바로 이것이며, least_fixpoint가 반복을 멈추기로 결정하는 방식이기도 합니다. forward_chain.py 52–63번째 줄). 기저 사례: 은 기본 사실 23개이고, 폐쇄는 바로 그것들로부터 시작해 지어지므로 입니다. 귀납 단계: 라 가정하고, 게이트가 규칙 아래에서 원자 를 받아들인다고 합시다. 받아들여졌다는 것은 verify_step이 이고 몸체의 모든 원자 인 치환 를 찾았다는 뜻입니다. 이므로, 그 전제들은 모두 안에 놓여 있고, 따라서 규칙은 안에서 발동하며 그 결론은 를 만족시킵니다. 고정점 성질 에 의해 이고, , 즉 옛 집합에 새 원자 하나를 더한 것(는 집합의 합집합이고, 는 하나만 담은 집합입니다)은 를 만족시킵니다. ∎
이 귀납법이 결코 언급하지 않은 것을 눈여겨보십시오: 정책도, 로짓도, 오염률도 언급되지 않았습니다. 건전성은 오직 게이트만의 성질이며, 이 장이 계속 "구성상으로"(by construction)라고 말하는 이유입니다: 제안자는 얼마든지 악의적일 수 있지만 보증은 그대로 유지됩니다. 검증기가 신뢰하는 대신 재유도하기 때문입니다. companion은 그럼에도 이 정리를 경험적으로 검사합니다. 모든 에피소드에 대해 독립적으로 계산된 폐쇄에 맞서 sound &= new <= DERIVED_TRUE를 검사한 다음, 그것을 단언합니다(verifier_gate.py 234–235번째 줄과 384번째 줄); 이 assert는 수학이 아니라 구현을 감사합니다(verify_step의 버그는 그 증명의 전제를 무효로 만들 것입니다). 커밋된 결과: 모든 예산에 걸쳐, 6,612개의 받아들여진 단계 가운데 잘못된 사실 0개입니다.
이 보증이 주지 않는 것은 완전성이며, 커밋된 예산 훑기가 그것을 정직하게 값매김합니다(verifier_gate.py 221–244번째 줄):
[2] verifier-constrained decoding — same policy, same noise, exact gate (100 episodes per budget)
budget T recall of 24 accepted rejected duds
6 0.147 3.53 0.96 1.51
12 0.294 7.06 2.04 2.90
24 0.538 12.92 3.64 7.44
48 0.797 19.12 6.07 22.81
96 0.979 23.49 7.62 64.89
wrong facts committed: 0 of 6612 accepted — every derived set ⊆ lfp(T_P):
soundness is BY CONSTRUCTION; the budget buys only recall
열들을 함께 읽어 봅시다. 재현율(recall)은 한 에피소드가 실제로 유도해 내는, 유도 가능한 24개 원자 가운데 평균 비율입니다; 이것은 예산에 대해 비감소이며(verifier_gate.py 385–387번째 줄에서 허용 오차를 두고 단언됩니다), 6단계에서 0.147이었다가 96단계에서 0.979까지 오릅니다. 이것은 앞 장의 절단 법칙이 정책의 형태로 다시 나타난 것입니다: 순차 예산은 도달 범위를 사고, 오직 도달 범위만을 삽니다. 허탕(duds) 열은 대가 곡선이 꺾이는 모습을 보여 줍니다: 예산 96에서는 96단계 가운데 평균 64.89단계가 새로운 것을 아무것도 지면화하지 못합니다. 유도된 집합이 폐쇄의 거의 전부이기 때문입니다. 균등 정책은 큰 예산의 대부분을 남은 것이 거의 없다는 사실을 재발견하는 데 씁니다; 그 비효율이 바로 다음 절에서 학습이 흡수하는 여유분입니다. 기각(rejected) 열은 게이트가 제 몫을 하는 모습입니다. 96단계짜리 에피소드마다 평균 7.62개의 오염된 제안이 기록에 들어가는 대신 문턱에서 튕겨 나갑니다.
이 훑기는 또한 이 장이 이 권의 오류 자세 분류 체계 안에서 차지하는 자리도 고정시킵니다:
| 자세 | 계약 | 이 시리즈가 그것을 사는 곳 | 그것이 받아들이는 실패 |
|---|---|---|---|
| 건전하지만 절단됨 | 단언된 모든 것이 참이다; 유한 예산에서는 일부 진리에 도달하지 못한다 | 이 장의 게이트; 수렴 전에 멈춘 어떤 정확한 고정점이든 | 빠진 답 |
| 얼추 완전하지만 불건전함 | 모든 것이 답 또는 점수를 받는다; 답별 인증서가 없다 | 같은 지식 베이스 위의 3–4권 임베딩 점수기 | 잘못된 사실이 소리 없이 들어온다 |
| 받아들여지면 건전하고, 아니면 기권함 | 받아들여진 답은 인증되고, 나머지는 거부되며, 커버리지가 측정된다 | III부의 기권과 합성된 게이트 | 줄어든 커버리지 |
세 번째 행이 배치 합성물입니다: 게이트 통과 디코딩을 실행하고, 목표가 유도되면 답하고, 그렇지 않으면 기권하며, 위험-커버리지 지점을 보고합니다; 이것은 이 절의 보증이 III부의 인터페이스를 입은 모습입니다.
전문가 반복: 보상 모델 없는 강화학습
지금까지 정책은 죽은 무게였습니다. 균등 분포가 예산을 써서 허탕만 낳았던 것입니다. 실험 (c)는 검증기 계열에서 가장 오래된 트릭인 전문가 반복(expert iteration)을 사용하여 정책이 학습하게 만듭니다. 이 트릭은 시도를 표집하고, 검증된 성공을 남기고, 제안자를 그 위에서 다시 학습시키는 루프이며, 현대적 형태로는 STaR(Self-Taught Reasoner, 스스로 가르치는 추론기)로 알려져 있습니다 [3]. 계보에 대한 정직한 주석 하나: STaR는 최종-답 정확성만으로 검사된 근거를 남기지만, 우리의 루프는 남기는 모든 궤적을 추가로 단계별로 게이트하며, 이는 엄격히 더 강한 필터입니다. companion은 일부러 빡빡한 5단계 예산 아래에서 6개의 다중 홉 목표를 겨냥합니다. 이 예산에서 균등 정책은 대개 몇 안 되는 뽑기를 분류 규칙에 낭비합니다(verifier_gate.py 263–284번째 줄): 각 라운드는 균등하게 뽑힌 목표 원자를 향한 게이트 통과 에피소드 400개를 표집합니다; 목표가 예산 안에서 유도되면 에피소드는 성공한 것입니다; 성공한 궤적들의 검증된 단계는 남겨지고, 로짓은 최대우도(maximum likelihood)로 그것들에 다시 맞춰집니다.
이 재학습은 그 유도를 볼 가치가 있습니다. 코드가 그대로 적용하는 것이 대수 네 줄뿐이기 때문입니다. 남겨진 단계들의 템플릿 색인 을 모으고(여기서 은 그 라운드의 모든 성공한 궤적에 걸쳐 받아들여진 단계 전부를 셉니다), 소프트맥스 정책 아래에서 그것들의 평균 로그가능도(log-likelihood)를 최대화합니다.
여기서 두 번째 등식은 소프트맥스의 를 전개한 것일 뿐입니다: 분자는 자신의 로짓을 기여하고, 분모는 자신의 로그합(log-sum)을 기여합니다. 하나의 로짓 에 대해 미분해 봅시다. 첫 번째 항은 일 때 정확히 을 기여하므로, 에 대해 평균을 내면 경험적 빈도(empirical frequency) , 즉 남겨진 단계 가운데 템플릿 를 사용한 것의 비율을 얻습니다. 두 번째 항은 모든 에 대해 같으며, 그 도함수는
연쇄 법칙에 의해 이렇게 됩니다(의 도함수는 이고, 안쪽 합의 항만이 에 의존하기 때문입니다). 빼면,
이 시리즈가 1권에서 뉴런 하나에 대해 처음 유도했던 소프트맥스/교차 엔트로피 상쇄가 정책 갱신으로 다시 나타난 것입니다. 경사 상승(gradient ascent) 는, 여기서 는 학습률(learning rate), 즉 상승 갱신 한 번의 스텝 크기(아래 코드의 lr 인자이며 verifier_gate.py의 LR_STAR)인데, 정확히 일 때 정지합니다: 재학습은 검증된 성공이 실제로 사용한 템플릿의 경험적 분포, 즉 최대우도 추정치를 향해 정책을 옮깁니다. 코드는 곧 그 방정식입니다(verifier_gate.py 249–260번째 줄):
def refit(logits: np.ndarray, counts: np.ndarray, lr: float = LR_STAR,
steps: int = STAR_STEPS) -> np.ndarray:
"""Fit the policy to the kept verified steps by gradient ascent on the
mean log-likelihood L(z) = (1/M) Σ_t log softmax(z)_{r_t}. With
empirical frequencies c̄_k = counts_k / Σ counts, the gradient is
∂L/∂z_k = c̄_k − p_k (the softmax/cross-entropy cancellation), so the
ascent z ← z + η (c̄ − p) converges toward p = c̄, the MLE."""
z, c = logits.copy(), counts / counts.sum()
for _ in range(steps):
# ∂L/∂z = c̄ − softmax(z)
z = z + lr * (c - softmax(z))
return z
가치망도, 보상 모델도 없고 갱신이 지도 학습식 최대우도인데도 왜 이것을 강화학습이라고 부를까요? 데이터가 보상에 의해 선택되기 때문입니다. 성공한 궤적만 남기는 것은 환경의 이진 반환(목표가 예산 안에서 유도되면 1, 아니면 0)에 대한 정책 개선이며, 이 방식에서는 환경 자신, 즉 정확한 게이트로 검사되는 폐쇄 소속 여부가 완벽한 심판 노릇을 합니다. 강화학습이 보상 모델을 필요로 하는 것은 오직 환경이 자기 자신의 에피소드를 채점할 수 없을 때뿐입니다. 우리의 환경은 채점할 수 있으며, 이것이 바로 다항식 파편의 깊은 경제성입니다. 커밋된 실행은 다음과 같습니다:
[3] expert iteration (STaR-lite) — keep verified successful trajectories, refit (400 goal episodes/round, budget 5)
iter success rate policy mass on goal rules (3,5,6)
0 0.205 0.429
1 0.343 0.689
2 0.463 0.807
3 0.535 0.884
gradient ascent on kept steps: dL/dz = c_bar - softmax(z)
두 번째 열을 메커니즘으로 읽어 봅시다: 규칙 3, 5, 6은 그 머리가 목표 원자를 만들어 낼 수 있는 템플릿들이며(grandAdvisor와 두 개의 citesTransitively 규칙, verifier_gate.py 82–84번째 줄), 균등 정책은 그것들에 의 질량을 부여합니다. 남기고-다시학습하는 라운드마다 질량이 그것들 위로 옮겨 가고, 0.429 → 0.689 → 0.807 → 0.884, 성공률도 이를 따라갑니다. 0.205 → 0.343 → 0.463 → 0.535, 0.330의 상승이며, 하니스는 이것이 표집 오차 안에서 단조롭고 전체적으로 최소 0.20이라는 것을 단언합니다(verifier_gate.py 391–398번째 줄). 정직한 유보 사항은 이 모듈 자신의 것입니다: 이것은 23개 사실짜리 세계 위의 밴딧 정책이며, 탐색 압력이 전혀 없고(질량이 한번 집중되면 정책이 드문 템플릿을 계속 방문하도록 강제하는 것이 아무것도 없습니다), 파국적 망각의 위험도 없으며(잊을 다른 것이 없습니다), 실제 부트스트래핑 문헌의 규모 현상들, 즉 모델이 배울 새로운 문제를 더 이상 풀지 못할 때 포화되는 경향(STaR 계열에 기록되어 있습니다 [3])도, 순수한 강화학습 부트스트래핑이 애초에 수지가 맞는지의 규모 의존성 [5]도, 그중 무엇도 없습니다.
보상 해킹 전시물: 타당성은 진행이 아니다
이제 이 장의 중심인 실험 (d)가 나옵니다. 이 실험은 더 날카로운 최적화기를 루프 안에 넣고, 보상의 정의가 그것을 만들거나 무너뜨리게 놔둡니다. 이 최적화기는 점수-함수 정책 경사(score-function policy gradient)인 REINFORCE이며, 이 장이 그 유도를 소유하고 있으므로 정의로부터 곧바로 시작합니다. 목적 함수는 기대 반환(expected return) 입니다. 여기서 는 에피소드 전체(궤적)이고, 는 현재 정책이 그것을 생성할 확률이며, 는 그것의 스칼라 반환이고, 는 기댓값, 즉 확률로 가중된 궤적들에 대해 평균을 낸 반환입니다. 기댓값을 궤적에 대한 합으로 써서 미분해 봅시다.
는 에 의존하지 않기 때문입니다. 이제 우도-비 트릭(likelihood-ratio trick)입니다: 의 도함수가 이므로, 모든 양의 함수는 를 만족시킵니다. 따라서
이는 개선되고 있는 바로 그 정책으로부터 에피소드를 표집하여 추정할 수 있는 기댓값입니다. 궤적의 로그확률은 에피소드 안의 무작위적인 모든 것, 즉 템플릿 뽑기, 균등 지면화 선택, 오염 동전, 게이트의 판정 위에서 인수분해됩니다. 오직 템플릿 뽑기만 에 의존하므로, 다른 모든 인자는 미분하면 0이 되고 가 되며, 이는 허탕과 검증기에 기각된 단계를 포함해 에피소드 안의 모든 뽑기 에 걸쳐 합해집니다. 각 뽑기가 정책 확률을 지녔기 때문입니다. 뽑기 하나당 경사는 재학습의 것과 같은 계산을 표본 하나에 대해 수행한 것입니다: 이므로 이며, 여기서 는 크로네커 델타(Kronecker delta, 이면 , 아니면 )입니다; 벡터 형태로는 , 즉 뽑힌 템플릿의 원-핫(one-hot) 벡터에서 정책을 뺀 것입니다. 마지막으로, 반환에서 어떤 상수 기준선(baseline) 를 빼도 추정량은 비편향(unbiased)으로 남는데, 그 이유는
모든 에 대해 확률이 1로 합산되기 때문입니다. companion은 배치 평균을 로 사용하고, 추가로 배치 표준편차로 나눕니다; 그 나눗셈은 분산-제어용 스텝 크기 휴리스틱(그것은 경사를 이동시키는 것이 아니라 재조정합니다)이며, 표준적인 관행이고 그렇게 표시되어 있습니다. 전체 유도는 자동미분(autodiff) 없이 손으로 그대로 적용되며(verifier_gate.py 301–337번째 줄), 점수 함수는 np.bincount(out["drawn"], minlength=N_RULES) - len(out["drawn"]) * p로 나타납니다.
동일한 이 기계 장치, 동일한 게이트, 동일한 예산 12로 두 정책이 훈련되며, 오직 한 줄, 즉 의 정의에서만 다릅니다(verifier_gate.py 320–326번째 줄):
- 소속 보상(membership reward): 에피소드가 유도한, 검증기가 승인한 사실의 개수. 이것이 유혹적인 쪽입니다: 정확히 게이트가 인증하는 것에 보상을 주므로, "검증된 추론에 대한 보상"처럼 보입니다.
- 목표-F1 보상(goal-F1 reward): , 6개 원자짜리 목표 집합 에 대한 것입니다. 여기서 는 에피소드가 유도한 원자만 남긴 집합, 즉 유도된 집합에서 기본 사실 23개를 뺀 것입니다(는 "집합으로서의 빼기"라고 읽습니다): 로 두면, 정밀도(precision)는 (유도된 것 가운데 원했던 것의 비율)이고, 재현율은 (원했던 것 가운데 유도된 것의 비율)이며, 는 그 둘의 조화 평균입니다(
verifier_gate.py289–298번째 줄).
각각 15번의 REINFORCE 갱신을 거친 뒤, 두 정책과 훈련되지 않은 균등 기준선이 모두 동결되어 300개의 새로운 게이트 통과 에피소드 위에서 평가됩니다(verifier_gate.py 340–356번째 줄). 커밋된 비교는 다음과 같습니다:
[4] reward hacking — same gate, same budget (12), two rewards (15 REINFORCE updates)
policy verified facts relevance F1 vs goals
uniform (untrained) 7.26 0.382 0.412
reward = #verified 8.80 0.154 0.183
reward = set-level F1 5.04 0.976 0.882
the membership policy piles 0.643 of its mass on rule 4,
colleague(X,Y) <- shared affiliation: 8 valid, goal-irrelevant
atoms to harvest. More verified facts, LESS progress —
validity is a correctness signal, not a progress signal
가운데 행을 곱씹어 보십시오. 이것이 세 개의 숫자로 된 이 장의 논지이기 때문입니다. 소속-보상 정책은 자신의 목적에서는 성공했습니다: 에피소드당 8.80개의 검증된 사실을 얻어, 균등 기준선의 7.26을 능가합니다(하니스는 그 격차를 단언합니다, verifier_gate.py 406–407번째 줄). 이것은 또한 완벽하게 건전합니다: 게이트는 결코 움직이지 않았으므로, 그 사실들 하나하나가 참 폐쇄 안에 있습니다. 그리고 이것은 실제 과제에서는 훈련되지 않은 정책보다도 못합니다: 그 관련성 비율(relevance fraction), 즉 유도된 원자 가운데 목표 원자가 차지하는 비율은 균등 정책의 0.382에서 0.154로 무너지고(단언됩니다, verifier_gate.py 408–409번째 줄), 목표 F1도 0.412에서 0.183으로 떨어집니다. 그 메커니즘은 전시물과 함께 인쇄되어 있습니다: 정책은 규칙 4, 즉 colleague 규칙을 발견했는데, 그 소속-공유 몸체는 기본 사실만으로 만족되고 8개의 서로 다른 타당한 원자(MIT와 CMU의 순서 있는 동료 쌍들)를 허가하며, 이는 어떤 템플릿이든 제공하는 가장 큰 규모의 쉬운 검증된 사실 수확량입니다. 정책은 그곳에 0.643의 확률 질량을 쌓아 올리고 양산했습니다. 모든 colleague 사실은 게이트를 통과하지만, 그중 어느 것도 인용 사슬을 전진시키지 않습니다. 한편 F1-보상 정책은 셋 가운데 가장 적은 사실을 유도합니다. 에피소드당 5.04개입니다. 그리고 중요한 모든 것에서 압도합니다: 관련성 0.976, F1 0.882입니다. 진행은 물량도 아닙니다; 올바른 목적을 최적화하는 정책은 더 적게 유도하면서 더 많이 성취합니다.
이것은 책상 규모의 보상 해킹(reward hacking)이며, 그 형태는 기록된 프론티어 현상과 일치합니다: 대리 보상(proxy reward)이 주어진 최적화기는 그 대리를 극대화하며, 대리와 의도 사이의 간극이 바로 그 행동이 향하는 곳입니다. 프론티어의 검증 가능한-보상 시스템들은 정확히 이 장이 짓는 것과 같은 게이트류 보상, 즉 학습된 보상 모델 대신 선택된 규칙 기반 검사에 기대는데, 그 이유는 정확히 학습된 것들이 규모에서 해킹을 초대하기 때문입니다 [5]; 그리고 어려운 수학에서 단계별 판단이 결과만 보는 판단을 능가한다는 과정 지도 결과는, 같은 간극을 반대편에서 측정한 것입니다 [2]. 이 장이 고집하는 이름 붙이기는 다음과 같습니다: 게이트는 정확성 신호(correctness signal, 이 단계는 타당한가?)를 내고, 보상은 진행 신호(progress signal, 이 단계는 목표를 진전시키는가?)를 부호화해야 하며, 어떤 건전성 보증도 하나를 다른 것으로 바꾸어 주지 않습니다. 이 전시물은 이 구별을 유달리 깨끗하게 만드는데, 정확성 신호가 정확한 오라클이라는 점에서 완벽하기 때문이며, 그런데도 해킹은 일어납니다. 무엇이 잘못되었든, 그것은 검증이 아니었습니다.
과정 지도, 자리매김하기
프론티어가 단계별 판단에 붙이는 이름은 과정 지도(process supervision)입니다: 최종 답만이 아니라 추론 흔적의 각 단계를 채점하거나 걸러내고, 그 더 촘촘한 신호로 학습시키는 것입니다 [2]. 이 장은 의례 없이 처음부터 줄곧 과정 지도를 해 왔습니다. 다항식 파편에서는 단계별 심판이 공짜이기 때문입니다: verify_step은 정확한 오라클이고, 마이크로초 단위로 작동하며, 아부로 넘어갈 수 없습니다. 이것이 명백하게 서술된 신경-기호적 우위입니다. 정책이 단계에 대해 거짓말하지 않도록 가르치는 데 보상 예산이 쓰이지 않습니다; 게이트가 거짓말을 구성상 수지가 맞지 않는 것으로 만들며, 학습 신호 전체는 어느 타당한 단계를 취해야 하는가라는 진정으로 어려운 질문을 다루는 데 남겨지는데, 이는 앞 절이 그것을 신중하게 써야 한다고 보여 준 바로 그 신호입니다.
프론티어가 그런 오라클을 갖지 못한 곳, 즉 비형식적 수학, 테스트 없는 코드, 열린-도메인 논증에서는 하나를 훈련시킵니다: 먼저 풀이 전체를 판정하는 결과-지도(outcome-supervised) 검증기가 왔고 [1], 더 효과적인 것은 사람 또는 자동화된 단계 레이블에 맞춰진, 단계 품질에 대한 신경 채점기인 과정-보상 모델(process-reward model)입니다 [2]. 이 움직임은 불가피하고 생산적이지만, 그것이 무엇을 내주는지 눈여겨보십시오: 학습된 검증기는 그 자신이 하나의 모델이며, 이 권이 지어 온 모든 감사가 이제 그것에게도 적용됩니다. 그것의 단계 점수는 보정되어 있습니까, 아니면 자신만만하게 틀렸습니까(III부)? 그것은 "타당한 단계"라는 개념을 배웠습니까, 아니면 훈련 풀 안에서 타당성과 공기하는 추론 지름길을 배웠습니까? 그것이 암묵적으로 내놓는 설명, 즉 "이 단계는 낮은 점수를 받았다"는 것은 그 자신의 실제 계산에 충실합니까? 학습된 게이트는 학습된 보상이 그랬던 것과 정확히 같은 방식으로 양산될 수 있으며, 프론티어 규모에서는 기록된 실패 보고들이 오라클이 제거된 우리 전시물처럼 읽힙니다 [5]. 이 권의 실들이 여기서 땋입니다: I부에서 III부까지는 추론 프론티어로부터의 곁길이 아니었습니다; 그것들은 검증기가 정확하기를 멈추는 바로 그 순간 의무가 되는 실사(due diligence)입니다.
미해결 부분
세 개의 열린 가장자리가 있으며, 그것들이 연구자를 얼마나 걱정시켜야 하는지가 커지는 순서로 나열합니다. 첫째, 열린 유도를 위한 보상 설계입니다. 우리의 F1 보상은 해킹 전시물을 고쳤지만, 그 고침이 눈여겨보게 만드는 방식으로 반칙을 씁니다: 그것은 채점 대상이 될 알려진 목표 집합을 전제합니다. 진정으로 탐구적인 추론, 즉 아무도 진술한 적 없는 정리를 향해 유도하는 것은 목표 누설 없는 진행 신호를 필요로 하며, 원칙에 입각한 구성은 존재하지 않습니다; 참신성 보상, 학습된 진행 추정기, 커리큘럼 일정 모두가 우리의 소속 보상이 보여 준 것과 같은 취약성, 즉 최적화기가 양산할 수 있는 대리 지표를 가진 채 살아 있는 제안들입니다. 둘째, 검증기 커버리지입니다. 건전성 귀납법은 빈틈이 없었지만, 그 안의 모든 것은 를 정의하는 규칙 집합에 상대적입니다. 게이트는 오직 규칙이 옳은 만큼만 건전하고, 오직 규칙이 완전한 만큼만 완전합니다; 불완전한 검증기는 요란하게 실패하지 않습니다. 그것은 도달 가능한 공간을 소리 없이 절단하여, 스스로 재유도할 수 없는 타당한 추론을 기각하고, 정책은 그것을 결코 제안하지 않는 법을 배우게 됩니다. 우리의 7규칙 세계에서는 커버리지가 규정상 완전합니다. SNOMED CT 규모의 온톨로지에서는, 모델링 공백과 버전이 매겨진 규칙 집합을 가진 채, "게이트가 그것을 기각했다"와 "그것은 틀렸다"가 조용히 갈라지며, 어떤 커밋된 assert도 검증기가 표현할 수 없는 진리를 탐지할 수 없습니다. 셋째, 이 책상이 손댈 수 없는 규모의 질문입니다: 검증된 자기-개선이 복리로 불어나는지, 아니면 포화되는지입니다. 우리의 전문가 반복은 여섯 개의 목표 위에서 네 라운드 동안 오릅니다; 프론티어의 질문은, 자기 자신의 검증된 성공 위에서 훈련하는 정책이 계속해서 배울 만큼 어려운 문제를 생성해 낼 수 있는지, 아니면 자신의 커리큘럼을 소진하고 정체하는지입니다. 부트스트래핑 문헌은 서로 다른 체제에서 두 행동 모두를 보여 주며 [3][5], 주어진 규모에서 어느 체제가 성립하는지는, 이 권 기준으로는, 이름값을 할 만한 이론이 없는 경험적 질문입니다.
왜 중요한가
이 장은 V부의 궤적을 이 권에서 가장 이식하기 쉬운 설계 패턴으로 마무리 짓습니다. 깊이-천장 장은 고정된 깊이의 네트워크는 그 자체로 무한정 유도를 할 수 없다고 말했습니다; 사고 사슬은 언롤링을 통해 깊이를 회복했지만, 생성된 모든 단계를 신뢰해야 한다는 대가를 치렀습니다; 이 장은 학습을 없애지 않으면서 그 신뢰를 제거했습니다. 정확한 게이트 뒤에 있는 통계적 제안자라는 이 합성물은, 이 시리즈가 지어 온 모든 것의 배치 가능한 형태입니다: 1권의 고정점은 게이트의 근거 진리가 되었고, 4권의 미분 가능한 제안자들은 훈련시킬 가치가 있는 그것이 되었으며, 이 권의 I부에서 III부까지는 게이트 자신이 학습되는 날을 위한 감사 키트가 되었습니다. 여러분 자신의 연구를 위해 간직해 둘 전시물은 가장 값싼 것입니다: 어떤 추론 루프에든 보상을 더하기 전에, 그것이 정확성을 재는지 진행을 재는지 물으십시오. 여기, 완벽한 검증기를 가진 23개 사실짜리 세계에서 그 둘은 구성상 직교하며, 이는 규모에서의 어떤 검증기 품질도 그 둘을 여러분 대신 합쳐 주지는 않으리라는 뜻입니다. 그리고 간직해 둘 숫자들은 이 계약입니다: 게이트 없이는 잘못된-사실 비율 0.247, 게이트가 있으면 6,612개 가운데 0개, 재현율은 측정된 가격에 사들여집니다. 구성상의 건전성은 실재하고, 값을 치를 수 있으며, 다항식 파편에서는 값싸게 얻어집니다; 그것이 사 주지 않는 것, 즉 방향은 정확히 아직 배워야 할 것으로 남습니다.
핵심 용어
- 제안자/검증기 패턴(proposer/verifier pattern): 추론 시스템을 후보 단계를 생성하는 통계적 구성 요소와 자신이 재유도할 수 있는 단계만을 받아들이는 정확한 구성 요소로 나누는 것입니다; 단언은 검증기의 건전성을 물려받고, 커버리지는 제안자의 품질을 물려받습니다.
- 검증기 제약 디코딩(verifier-constrained decoding): 생성 도중에 단계별로 검증기를 적용하여, 유효하지 않은 단계가 유도된 기록에 결코 들어오지 못하게 하는 것입니다; 완료된 출력만을 채점하는 재순위화(reranking)와 대비됩니다.
- 구성상의 건전성(soundness by construction): 받아들여진 단계에 대한 귀납법으로 증명되는 보증으로, 모든 예산에서 모든 정책 아래에서 게이트를 통과한 유도 집합이 안에 머문다는 것입니다; 오직 게이트만의 성질입니다.
- 전문가 반복(expert iteration): 시도를 표집하고 → 검증된 성공을 남기고 → 그 단계들로 제안자를 다시 학습시키는 루프입니다; 학습된 가치도 보상 모델도 없이 환경 보상에 맞선 정책 개선입니다.
- REINFORCE / 점수-함수 경사(score-function gradient): 정책-경사 추정량 이며, 소프트맥스 정책에 대해 입니다; 기준선은 이기 때문에 편향 없이 뺄 수 있습니다.
- 보상 해킹(reward hacking): 최적화기가 대리 보상이 대변하려던 의도를 희생시키면서 그 대리 보상만을 극대화하는 것입니다; 여기서는 소속 보상이 타당하지만 무관한 사실들을 양산함으로써 극대화됩니다.
- 정확성 신호 대 진행 신호(correctness signal vs progress signal): 검증기가 인증하는 것(이 단계는 타당하다)과 보상이 부호화해야 하는 것(이 단계는 목표를 진전시킨다)의 차이입니다; 어떤 건전성 검사도 후자를 제공하지 않습니다.
- 과정 지도(process supervision): 결과만 보는 판단 대신 추론 흔적의 단계별 판단으로 학습시키는 것입니다; 다항식 파편에서는 공짜이고 정확하며, 오라클이 없는 곳에서는 학습된 과정-보상 모델로 근사됩니다.
- 관련성 비율(relevance fraction): 에피소드가 유도한 원자 가운데 목표 집합 안에 놓인 것의 비율입니다; 검증된-사실 개수는 오르는데도 소속 보상 아래에서 무너지는 값입니다(0.382 → 0.154).
이 장이 이끄는 곳
V부는 구성상 건전하고, 강화학습으로 개선 가능하며, 안으로부터는 측정할 수 없는 단 하나에 대해 정직한 시스템으로 끝납니다: 그것의 벤치마크 숫자가 겉보기 그대로를 뜻하는지 여부입니다. 그 질문은 자신만의 계측 도구를 필요로 합니다. 일곱 가지 난도 축은 "추론 벤치마크에서의 정확도"를 단일한 숫자로 취급하기를 거부하며 VI부를 엽니다. 과제 난도를 (깊이, 너비, 재귀, 주의분산 등의) 직교하는 축들로 분해하고, 같은 학계 세계 위에서 총점이 동일한 두 시스템이 어떻게 완전히 다른 난도 표면을 차지할 수 있는지를 보여 줍니다.
Companion 코드: examples/frontier/verifier_gate.py는 잡음 섞인 제안 정책, 1권의 examples/logic/forward_chain.py에서 가져온 정확한 단계 게이트, 그리고 네 가지 실험(게이트 없는 오염, 게이트 통과 예산 훑기, 전문가 반복, 그리고 두 가지 보상 해킹 비교) 전부를 구현합니다. 이 장의 모든 숫자를 재현하려면 python3 examples/frontier/verifier_gate.py를 실행하십시오; 그 실행은 결정적이며 모든 주장이 assert로 지켜집니다.