인지야공

인지야공/딥러닝 기초 정리/45번째 글

권한 단조성 — 하네스 표준화가 왜 알고리즘 문제인가

실행: python 10_authority.py (검증 환경: torch 2.8.0+cu129, RTX 5080) 이 글의 수치는 전부 그 스크립트를 돌려 얻은 것이다. 명세 게이밍 편에서 “통제는 하네스에 산다”고 한 것을 이어받는다.

명세 게이밍 편의 결론은 통제(controllability)는 모델이 아니라 하네스에 산다였다. 하네스가 정하는 것 중 가장 중요한 것이 행동 공간 AH\mathcal{A}_H 이고, 에이전트가 에이전트를 부르기 시작하면 그 AH\mathcal{A}_H 가 합성된다.

이 글이 재는 것은 한 줄이다.

유효 권한  =  위임 그래프의 도달 폐포\text{유효 권한} \;=\; \text{위임 그래프의 도달 폐포}

그리고 12~명세 게이밍 편에서 쓴 그래프 도달 가능성이 여기에 그대로 맞는 모형이다. 노드가 에이전트, 화살표가 “부를 수 있다”, 도달 집합이 유효 권한의 출처다. 과제를 새로 만들 필요가 없었다.

그리고 이 글을 쓰는 동안 내 출발점이 틀렸다는 것을 알게 됐다. 4장이 그것이다.


1. 유효 권한은 왜 폐포인가

에이전트 ii 는 자기가 선언한 권한 집합 decl[i]\mathrm{decl}[i] 를 가진다. 루트(0번)가 실제로 행사할 수 있는 것은 자기 것만이 아니다. 부를 수 있는 상대의 권한을 그 상대를 통해 쓸 수 있고, 그 상대가 또 누군가를 부르면 거기까지 이어진다.

eff(0)  =  ⋃v ∈ reach(0)decl[v]\mathrm{eff}(0) \;=\; \bigcup_{v \,\in\, \mathrm{reach}(0)} \mathrm{decl}[v]

단조성을 강제한다는 것은 이 합집합이 decl[0]\mathrm{decl}[0] 을 넘지 못하게 막는다는 뜻이다.

Achild⊆Aparent⟹eff(0)=decl[0]\mathcal{A}_{\text{child}} \subseteq \mathcal{A}_{\text{parent}} \quad\Longrightarrow\quad \mathrm{eff}(0) = \mathrm{decl}[0]

실험 설정은 이렇다. 에이전트 24개, 권한 24종, 각자 부를 수 있는 상대 2개, 루트는 8종으로 시작. 권한은 위임 트리를 따라 물려주되 자식은 부모 것의 일부만 받는다(최소 권한 원칙). 다만 간선당 25% 확률로 부모에게 없던 권한을 하나 얹는다.

이 25%가 악의가 아니라는 점이 중요하다. 현실에서는 각 에이전트가 자기 매니페스트에 “이 작업에 필요한 권한”을 스스로 적으면서 생긴다. 아무도 규칙을 어길 생각이 없어도 생긴다.

검산: 반경만큼 펼치면 폐포가 완성되는가 → 300개 중 300개.


2. 결과 1 — 아무도 규칙을 어기지 않았는데 권한이 는다

권한 증폭과 깊이 제한 검사

위임 깊이닿는 에이전트유효 권한증폭률루트에 없던 권한
12.58.4종1.05배0.36종
24.58.8종1.10배0.80종
410.09.9종1.23배1.85종
615.110.7종1.34배2.69종
818.711.2종1.40배3.21종

루트는 8종으로 시작했는데 깊이 8에서 11.2종을 쥔다. 늘어난 3.2종은 아무도 루트에게 준 적이 없다. 각각의 위임은 국소적으로 멀쩡했고, 합성이 그렇게 만들었을 뿐이다.

단조성을 강제하면 이 줄은 정의상 전부 1.00배다. 그래프의 파란 선이 그것이다.


3. 결과 2 — 루트 쪽에서 dd 홉만 펼쳐 보면

현실의 검사기는 흔히 루트 근처에서 몇 단계만 본다. dd 홉까지 펼친 검사기가 실제 권한을 얼마나 보는지 쟀다.

d=1d{=}12345678
반경 295%100%100%100%100%100%100%100%
반경 487%90%95%100%100%100%100%100%
반경 680%84%88%92%96%100%100%100%
반경 876%79%85%88%92%94%97%100%

대각선이 보인다. dd 가 반경에 닿기 전까지는 검사기가 권한의 일부만 본다. 한 홉 검사는 반경 8에서 실제 권한의 76%밖에 못 본다. 상수 깊이로는 도달 가능성을 풀 수 없다는 루프 트랜스포머 편의 이야기가 그대로 안전 문제로 옮겨 온 것이다.


4. 여기서 내 출발점이 틀렸다

나는 이 실험을 “국소 검사로는 전역 증폭을 못 막는다” 를 보이려고 시작했다. 3장까지 쓰고 나서 틀렸다는 것을 알았다.

모든 위임 간선에서 decl[v]⊆decl[u]\mathrm{decl}[v] \subseteq \mathrm{decl}[u] 를 확인하면, 귀납으로 전역 단조성이 따라온다.

∀(u→v)∈E:  decl[v]⊆decl[u]⟹⋃v∈reach(0)decl[v]=decl[0]\forall (u \to v) \in E:\; \mathrm{decl}[v] \subseteq \mathrm{decl}[u] \quad\Longrightarrow\quad \bigcup_{v \in \mathrm{reach}(0)} \mathrm{decl}[v] = \mathrm{decl}[0]

검사 자체는 한 홉만 보면 되는 쉬운 일이다. 3장이 보여준 것은 “국소 검사가 약하다”가 아니라 “루트에서 dd 홉만 펼쳐 보는 검사가 약하다”였다. 둘은 다른 얘기다.

그래서 질문을 바꿨다. 국소 검사가 충분하다면, 무엇이 문제인가?

빠짐없음(completeness)이 전부다

검사가 덮는 위임 간선의 비율 cc 를 낮춰 가며 쟀다. 덮인 간선에서는 이탈이 막히고, 빠진 간선으로만 샌다.

커버리지와 폐기

검사 커버리지증폭률루트에 없던 권한
100%1.00배0.00종
99%1.01배0.05종
95%1.03배0.20종
90%1.05배0.37종
75%1.10배0.84종
50%1.19배1.50종
0%1.29배2.31종

100%에서만 정확히 0이다. 99%를 덮어도 샌다.

검사는 평균이 아니라 전수여야 한다. 간선 하나가 빠지면 그 아래로 이어지는 위임 전체가 샌다 — 폐포이기 때문이다.

그리고 이것이 하네스 표준화가 필요한 이유의 알고리즘적 형태다. 각 하네스가 아무리 잘 검사해도, 서로의 경계를 넘는 호출을 아무도 책임지지 않으면 c<1c < 1 이 된다. 하네스가 nn 개면 경계가 O(n2)O(n^2) 개 생기고, 그 경계마다 “누가 검사하는가”가 정해져 있지 않다.

“난립”의 위험은 숫자가 많은 것이 아니라 경계가 많은 것이다.


5. 결과 3 — 안 거둬들이면 쌓이기만 한다

권한은 주는 것뿐 아니라 거두는 것도 설계에 들어가야 한다. 하위 목표가 끝날 때마다 그 목표를 위해 준 권한을 회수하는가로 갈린다.

에포크15102030
회수 안 함3종11종20종24종24종
에포크마다 회수3종3종3종3종3종

매 시점 “지금 하는 일에 필요한 권한”은 3종뿐이다. 그런데 회수하지 않으면 30 에포크 뒤에 24/24종이 살아 있다. 8배다.

누가 권한을 더 달라고 한 적이 없다. 끝난 일의 권한을 안 거둬들였을 뿐이다. 2026년의 Lingering Authority가 이름 붙인 문제가 이것이고, 처방은 에포크에 묶인 핸들과 종료 시 회수다.


6. 덧붙임 — 검사기를 배우게 해 봤다

“검사기를 모델에게 맡기면 되지 않나”에 답해 둔다. 간선 하나의 합법성을 판정하도록 4층 64차원 트랜스포머를 학습시켰다. 결과를 정직하게 적는다.

간선 단위 정확도72.8%
전부 “위반 아님”으로 찍으면74.7% ← 기저율
그래프 단위 정확도12.6%
폐포를 직접 계산하면100.0% (O(V+E)O(V{+}E))

기저율보다 낮다. 이 크기에서는 사실상 배우지 못했다. 더 키우면 배울 것이다 — 한 홉짜리 집합 포함 관계라 원리적으로 어려울 것이 없다.

그런데 그게 요점이 아니다. decl[v]⊆decl[u]\mathrm{decl}[v] \subseteq \mathrm{decl}[u] 는 두 줄짜리 집합 연산이고 정확히 푸는 방법이 이미 있다. 99%를 내는 모델을 만드는 것보다 100%를 내는 코드를 부르는 편이 낫다. 그리고 4장이 보인 대로 검사는 전수여야 하는데, 확률적 판정기는 “전수”라는 성질 자체를 줄 수가 없다.


7. 그래서 표준이 강제해야 하는 것

무엇을왜
단조성Achild⊆Aparent\mathcal{A}_{\text{child}} \subseteq \mathcal{A}_{\text{parent}}2장. 없으면 합성이 알아서 권한을 올린다
전수 검사모든 위임 간선, 하네스 경계 포함4장. 99%도 부족하다
폐포 계산근사하지 말고 O(V+E)O(V{+}E) 로 풀 것6장. 배울 문제가 아니다
회수에포크에 묶인 핸들, 종료 시 반납5장. 안 거두면 8배 쌓인다

이 넷은 전부 모델이 아니라 하네스가 하는 일이고, 전부 정확히 풀리는 그래프 문제다. 정렬 연구가 아직 못 푸는 문제와 달리, 이것들은 지금 당장 구현할 수 있다.


8. 한계

  1. 합성 그래프다. 층 구조로 반경을 고정해 만든 위임 그래프이고, 실제 에이전트 호출 그래프의 모양(순환, 재진입, 동적 생성)은 더 지저분하다.
  2. 권한을 집합으로 봤다. 실제 권한은 매개변수가 붙는다 — “파일 쓰기”가 아니라 “이 경로에 이 크기까지 쓰기”다. 부분집합 판정이 그만큼 어려워진다.
  3. 증폭 폭이 크지 않다. 1.05배에서 1.40배다. 권한 종류를 24개로 잡았고 이탈 확률이 25%라 그렇다. 중요한 것은 배율이 아니라 단조 증가한다는 것과 100%에서만 0이라는 것이다.
  4. 이탈을 확률로 넣었다. 실제로는 확률이 아니라 사람이 매니페스트를 적는 습관에서 나온다. 그 분포가 균일할 이유가 없다.
  5. 학습된 검사기 결과를 “학습은 안 된다”로 읽으면 안 된다. 내가 붙인 모델이 작았을 뿐이다. 논지는 “못 배운다”가 아니라 “배울 이유가 없다”이다.

9. 한 문단 요약

에이전트가 에이전트를 부르면 권한이 합성되고, 유효 권한은 위임 그래프의 도달 폐포가 된다. 각각의 위임이 국소적으로 멀쩡해도 루트는 자기가 준 적 없는 권한을 쥔다 — 깊이 8에서 8종으로 시작해 11.2종, 늘어난 3.2종은 아무도 준 적이 없다. 나는 이것을 “국소 검사로는 못 막는다”로 읽었는데 틀렸다. 모든 간선에서 부분집합을 확인하면 귀납으로 전역 단조성이 따라오고, 검사 자체는 한 홉짜리 쉬운 일이다. 진짜 문제는 빠짐없음이었다 — 커버리지를 낮춰 가며 재니 100%에서만 정확히 0이고 99%만 되어도 샜다. 검사는 평균이 아니라 전수여야 하고, 하네스가 여럿이면 경계를 넘는 호출을 아무도 책임지지 않아 c<1c < 1 이 된다. 난립의 위험은 숫자가 아니라 경계의 수다. 덤으로 회수를 안 하면 필요한 권한이 3종뿐인데도 30 에포크 뒤 24종이 살아 있었고, 검사기를 배우게 해 봤더니 기저율 아래였다 — 두 줄짜리 집합 연산을 굳이 근사할 이유가 없다.


참고

표시는 이 브라우저에만 남는다. 서버로 가는 것은 없다.