본문으로 건너뛰기

BoxEL과 Box²EL: 충실한 온톨로지 임베딩

📍 현재 위치: 3부 · 온톨로지 임베딩 — 9장. EL 임베딩은 2권의 TBox에 맞서 공을 훈련시키고 추론기 자신의 판정으로 그것을 감사했습니다; 이 장은 정확히 하나의 변수, 곧 개념의 모양을 바꾸어 동일한 감사를 박스로 다시 실행합니다.

앞 장은 자신의 손실 함수 안에 이미 새겨 넣은 하나의 고백으로 끝을 맺었습니다. 공 모델은 논리곱 공리 ABCA \sqcap B \sqsubseteq C(⊓는 개념의 논리곱으로, AABB 둘 모두에 속하는 것을 뜻합니다; ⊑는 "~에 포섭된다"라고 읽으며, 이 공리는 AABB 둘 모두에 속하는 모든 것이 CC라는 뜻입니다)를 두 공의 실제 교집합에 맞서 훈련시킬 수 없었는데, 그 교집합이 렌즈이고 렌즈는 공이 아니기 때문입니다; 대신 중점 어림법(midpoint heuristic)으로 대체한 뒤 스프링들이 그럴듯한 곳에 자리 잡기를 바라야 했습니다 [1]. 박스 대 공은 훈련이라고는 전혀 없이 그 바탕에 깔린 닫힘 사실을 증명했습니다. 이 장은 그 고리를 마저 닫습니다: 동일한 열여섯 개의 정규형, 동일하게 재계산된 금본위(gold standard), 동일한 탐침을 그대로 가져와, 공 대신 축 정렬 박스를 BoxEL [2]과 그 교집합 지향의 형제 모델 ELBE [3]의 방식으로 훈련시킵니다. 이름에 관해 미리 하나 정확히 짚어 두겠습니다: 진짜 BoxEL은 공리를 박스의 부피로 채점하고 역할을 이동에 축별 크기 조정을 더한 것으로 모델링하므로, 이 동반 코드의 이동 전용, 모서리-힌지 핵심은 사실 ELBE의 설계에 가장 가깝습니다; 이 장은 모양을 가리킬 때는 계열 이름을, 세부 사항을 가리킬 때는 인용을 사용합니다. 그 결실은 두 행짜리 혼동 표이며, 두 행 모두 동일한 데이터에 맞서 동일한 심판 아래, 단 한 번의 실행 안에서 다시 계산된 것입니다.

쉽게 말하면

두 도시계획가에게 같은 구역제 법규가 주어졌다고 상상해 보십시오. 첫 번째 계획가는 오직 원형 구역만 다룹니다. 대부분의 법규는 쉽습니다: "Professor는 Researcher 안에 있다"는 원 하나를 다른 원 안에 그리는 일일 뿐입니다. 그런데 "Professor 구역과 Researcher 구역 양쪽 모두에 놓인 것은 무엇이든 Person 구역에도 놓여야 한다"는 법규는 겹침에 관한 것이고, 두 원의 겹침은 렌즈 모양인데 원형 도구 세트로는 이 모양을 그릴 수 없습니다; 그나마 쓸 수 있는 최선의 수는 렌즈를 둘러싸는 원을 그리는 것인데, 이는 원래 양쪽 구역 어디에도 속하지 않던 땅을 조용히 편입시켜 버립니다. 두 번째 계획가는 직사각형 구역을 다루며, 두 직사각형의 겹침은 그 자체로 직사각형이고, 그 모서리는 부모 직사각형들의 모서리에서 곧바로 읽어 낼 수 있습니다. 두 계획가 모두 같은 검사관에게 같은 법규로 채점받습니다. 작은 마을에서는 둘 다 만점을 받지만, 차이는 직사각형 계획가의 만점은 측정에서 나온 것이고 원형 계획가의 만점은 운이 통할 만큼 여유 공간이 넉넉했던 데서 나온 것이라는 데 있습니다. 이 장이 바로 그 채점된 정면 대결이며, 여기서 직사각형은 R8\mathbb{R}^8 안의 박스입니다.

이 장에서 다루는 내용

  • 구성 자체로 통제된 비교: box_el.py는 공 모델과 완전히 동일한 데이터 파이프라인을 임포트합니다: 14개의 공리가 16개의 정규형으로, 역할 사슬 하나는 소리 내어 건너뛰고, 15개의 훈련 가능한 공리, el_completion.classify()에서 다시 계산되어 결코 손으로 다시 타이핑되지 않는 여덟 쌍짜리 금본위(gold standard)입니다.
  • 모서리별 힌지로서의 박스 포함 관계: 차원마다 유도한 포함 기준, 모든 서브그래디언트(도함수가 유일하지 않은 꺾인 지점에서도 타당한 기울기)를 모서리와 o=ewo = e^{w} 반너비 매개변수화를 통해 끝까지 구해 낸 제곱 힌지 ihlo,i2+ihup,i2\sum_i h_{lo,i}^2 + \sum_i h_{up,i}^2, 그리고 위반량을 제곱하지 않고 절댓값 그대로 합하는 1-노름을 뜻하는 평범한 L1 힌지는 교착에 빠질 수 있는 곳에서 제곱 힌지는 왜 대립하는 공리들을 풀어 주는지입니다.
  • 마침내 정확해진 NF2: 교집합 박스 lI=max(lA,lB)l_I = \max(l_A, l_B), uI=min(uA,uB)u_I = \min(u_A, u_B)CC에 맞서 직접 훈련시키는 방법, 그것이 참된 집합 교집합과 같음을 보이는 짧은 증명, 빈 교집합에 대한 공허한-만족(vacuous-satisfaction) 관례, 그리고 지배적인 모서리를 통한 서브그래디언트 경로 배정입니다.
  • 존재 제한과 분리성: 박스 이동으로 표현한 NF3와 NF4, 그 이동 그래디언트의 유도, 그리고 가장 값싼 단 하나의 축에서 걸리는 분리성 힌지입니다. 박스는 어느 축에서든 놓치는 순간 정확히 서로소이기 때문입니다.
  • 커밋된 정면 대결: 실제 실행에서 나온 두 행짜리 표(모델, 참 양성(true positive) TP, 거짓 양성(false positive) FP, 거짓 음성(false negative) FN, 정밀도, 재현율)입니다: 이 TBox 위에서 두 기하 모두 완벽한 8/8을 기록하며, 이 장은 왜 이 동점이 정직한 결과인지, 그럼에도 왜 박스의 이점이 구조적인지를 꼼꼼히 논증합니다.
  • 닫힘 전시: 훈련된 Professor ⊓ Researcher 교집합을 모서리 하나하나 인쇄한 것입니다: 거짓 면적이 0인, Professor 박스와 완전히 동일한 진짜 영역이며, Professor와 Student 박스는 ⊑ ⊥가 요구하는 그대로 어느 한 축에서 서로 놓칩니다.
  • Box²EL의 정교화: 개념별 범프 벡터(bump vector)와 역할 박스가 온톨로지 수준에서 역할당 하나의 이동이라는 병목을 고칩니다 [4].

같은 실험, 바뀐 변수 하나

두 기하 사이의 비교는 공리를 서로 다르게 읽고, 서로 다른 쌍에 대해 탐침하고, 서로 다른 금본위에 맞서 채점된다면 아무 의미가 없습니다. 그래서 동반 모듈 box_el.py는 그 어떤 데이터도 스스로 소유하기를 거부합니다. 이 모듈의 첫 실질적인 줄들은 공 모델 자체와 온톨로지, 그리고 2권의 추론기를 그대로 임포트합니다(box_el.py 44–48행):

import kg # noqa: F401 (imported for its sys.path side effect: ../logic, ../symbolic)
import el_embed # the ELEm-style ball model — the head-to-head baseline
import ontology as onto
from el_completion import classify, normalize
from ontology import BOT

이어지는 파이프라인은 앞 장의 것을 한 줄 한 줄 그대로 따릅니다: normalize(onto.TBOX)는 동일한 16개의 정규형을 내놓고, 역할 사슬 하나는 걸러 내며(단일 이동 벡터로는 합성 advises ∘ advises를 모델링할 수 없다는, 앞 장에서 유도한 바로 그 이유 때문입니다), 남은 15개의 공리가 손실이 됩니다(box_el.py 54–62행). 금본위는 결코 손으로 타이핑되지 않습니다; 헬퍼 함수 _gold_subsumptions()el_completion.py(2권의 완성 알고리즘, el_completion.py 302–319행)에서 classify()를 호출하여, 충족 가능한 8개의 이름 붙은 개념들 사이에서 추론된 포섭 관계만을 남깁니다. 실행은 다른 무엇보다 먼저 이 출처를 인쇄합니다:

1. data — the same normal forms el_embed.py trains on
14 TBox axioms → 16 normal forms: 6 NF1 + 2 NF2 + 3 NF3 + 4 NF4 + 1 role chain
skipped: advises ∘ advises ⊑ grandAdvisor — one translation vector cannot compose two hops
trained: 15 axioms over 13 boxes (9 axiom names incl ⊤, fresh ['_N1', '_N2'], untrained
controls Institution/Topic) and 2 role translations ['advises', 'authored']; gold (recomputed
from el_completion.classify): 8 subsumptions

두 모델 모두 동일한 15개의 공리를 보고, 동일한 16번째 공리를 건너뛰며, 동일한 56개의 순서 있는 질의에 답하고, 동일한 추론기에게 채점받습니다. 끝에 나오는 혼동 표에서 무엇이 다르든, 그것은 오직 모양 하나의 차이로만 돌릴 수 있습니다. 이것이 바로 "구성으로 통제되었다"는 말의 뜻입니다: 그 통제는 글 속의 약속이 아니라, import 문 그 자체입니다.

모델: 개념은 박스, 역할은 이동

임베딩 차원을 공 모델과 똑같이 d=8d = 8로 고정합니다. 기호가 등장하기 전에 먼저 매개변수를 풀어 읽어 둡시다: 각 개념 AA는 자신의 박스가 놓이는 점인 중심(center) 하나와, 각 축을 따라 그 박스가 중심으로부터 얼마나 뻗어 나가는지를 나타내는 반너비(half-width) 벡터 하나를 갖습니다; 인덱스 iidd개의 축 전체를 훑습니다. 형식적으로, 개념 AA는 다음과 같은 축 정렬 박스가 됩니다

box(A)  =  i=1d[cA,ioA,i,    cA,i+oA,i],\mathrm{box}(A) \;=\; \prod_{i=1}^{d} \big[\, c_{A,i} - o_{A,i},\;\; c_{A,i} + o_{A,i} \,\big],

여기서 \proddd개의 구간으로 이루어진 데카르트 곱을 만들고, cARdc_A \in \mathbb{R}^d는 중심이며, oA,i>0o_{A,i} \gt 0은 축 ii 위에서의 반너비입니다. 이 두 모서리에는 이 장 내내 쓸 이름을 붙여 둡니다: 아래 모서리(lower corner) lA=cAoAl_A = c_A - o_A위 모서리(upper corner) uA=cA+oAu_A = c_A + o_A이며, 둘 다 좌표별로 계산합니다. 점 xx가 그 박스 안에 놓이는 것은 정확히 모든 축에서 lA,ixiuA,il_{A,i} \le x_i \le u_{A,i}가 성립할 때입니다.

반너비는 항상 양수여야 하며, 이 코드는 공 모델이 양의 반지름을 값싸게 확보했던 것과 똑같은 방식으로 양수 조건을 공짜로 얻어 냅니다: 로그 오프셋(log-offset) wA,iw_{A,i}를 저장해 두고 oA,i=ewA,io_{A,i} = e^{w_{A,i}}로 설정하므로, 어떤 사영(projection) 단계도 결코 필요하지 않습니다. 각 역할 rr은 이전과 마찬가지로 단 하나의 이동 벡터(translation vector) trRdt_r \in \mathbb{R}^d입니다. 매개변수를 모서리로 바꾸는 헬퍼 함수가 이 모델의 전부입니다(box_el.py 156–163행):

def corners(cen: np.ndarray, logoff: np.ndarray, ci: int,
shift: np.ndarray | None = None
) -> tuple[np.ndarray, np.ndarray, np.ndarray]:
"""Corners of concept ci's box, optionally translated by ``shift``:
half-width o = e^w, lower = c (+ shift) − o, upper = c (+ shift) + o."""
o = np.exp(logoff[ci])
c = cen[ci] if shift is None else cen[ci] + shift
return c - o, c + o, o

제외 사항 하나는 공 모델에서 그대로 넘어오며, 그 이유도 같습니다: ⊥(바닥, 공집합을 나타내는 개념)는 박스를 얻지 못하는데, 이 매개변수화에서 모든 박스는 양의 부피를 가지므로 "비어 있음"을 표현할 수 없기 때문입니다; 오른쪽에 ⊥가 오는 단 하나의 공리(Professor ⊓ Student ⊑ ⊥, "둘 모두인 것은 없다")는 대신 분리성(disjointness)으로 훈련됩니다. ⊤(꼭대기, 모든 것을 나타내는 개념)는 훈련 가능한 박스를 얻으며, 데이터에 의해 모양이 잡힙니다; ⊤를 사용하는 유일한 공리는 그저 더 약해질 뿐, 결코 틀리지는 않습니다(box_el.py 99–105행). Institution과 Topic은 어떤 TBox 공리에도 등장하지 않으므로 그 박스는 무작위 초기화 상태 그대로 남습니다: 탐침이 속아 넘어가서는 안 되는 두 개의 훈련되지 않은 대조군입니다.

모서리 하나하나로 유도한 박스 포함 관계

이 장의 모든 것은 하나의 질문으로 환원됩니다: 한 박스가 다른 박스 안에 들어앉는 것은 언제일까요? 주장에 앞서 장부 정리 하나를 짚어 둡니다: 논리의 ⊑는 개념들 사이의 관계이고 기하의 ⊆는 점들의 집합 사이의 관계이며, 이 모델 전체의 내기는 전자를 후자로 실현하는 것, 곧 공리 ABA \sqsubseteq Bbox(A)box(B)\mathrm{box}(A) \subseteq \mathrm{box}(B) 여부로 채점하는 것입니다. 공에게는 그 포함 검사가 중심과 반지름에 대한 단 하나의 스칼라 부등식이었습니다. 박스에서는 그 답이 축들에 걸쳐 분해되며, 바로 그 분해로부터 모든 그래디언트가 나옵니다.

주장. box(A)box(B)\mathrm{box}(A) \subseteq \mathrm{box}(B)가 성립하는 것은 정확히 모든 축 ii에 대해 다음이 성립할 때입니다,

lB,i    lA,ianduA,i    uB,i.l_{B,i} \;\le\; l_{A,i} \qquad \text{and} \qquad u_{A,i} \;\le\; u_{B,i}.

말로 풀면: AA의 아래 모서리는 BB의 아래 모서리와 같거나 그 위에 있고, AA의 위 모서리는 BB의 위 모서리와 같거나 그 아래에 있다는 것을, 차원마다 하나씩 뜻합니다. 왜 그런지 보려면, 박스가 구간들의 곱이고 곱의 포함 관계는 그 인자들의 포함 관계로 환원된다는 사실을 떠올리면 됩니다: box(A)box(B)\mathrm{box}(A) \subseteq \mathrm{box}(B)가 성립하는 것은 정확히 모든 ii에 대해 구간 [lA,i,uA,i][l_{A,i}, u_{A,i}][lB,i,uB,i][l_{B,i}, u_{B,i}] 안에 포함될 때입니다. 구간 [a1,a2][a_1, a_2][b1,b2][b_1, b_2] 안에 포함되는 것은 정확히 b1a1b_1 \le a_1이고 a2b2a_2 \le b_2일 때입니다: 둘 다 성립하면, a1xa2a_1 \le x \le a_2인 임의의 xxb1a1xa2b2b_1 \le a_1 \le x \le a_2 \le b_2를 만족합니다; 첫째 조건이 실패하면(a1<b1a_1 \lt b_1) 점 a1a_1[a1,a2][a_1,a_2] 안에 있지만 [b1,b2][b_1,b_2] 안에는 없고, 둘째 조건에 대해서도 대칭적으로 같은 일이 일어납니다. 노름도, 제곱근도 없이, 포함 관계는 2d2d개의 개별 스칼라 비교입니다.

훈련 손실은 각 비교가 얼마나 심하게 실패하는지를 재고, 약간의 여유를 요구하며, 모두가 성립할 때 0이 되어야 합니다. 엄격성 마진(strictness margin) γ=0.05\gamma = 0.05를 도입합니다(포함 관계는 양쪽에 γ\gamma만큼의 여유를 두고 성립해야 하며, 그래야 나중에 탐침의 허용 오차가 딛고 설 자리가 생깁니다). 그리고 축별 포함 위반(inclusion violation)을 다음과 같이 정의합니다

hlo,i  =  max ⁣(0,  lB,ilA,i+γ),hup,i  =  max ⁣(0,  uA,iuB,i+γ).h_{lo,i} \;=\; \max\!\big(0,\; l_{B,i} - l_{A,i} + \gamma\big), \qquad h_{up,i} \;=\; \max\!\big(0,\; u_{A,i} - u_{B,i} + \gamma\big).

각각은 하나의 힌지(hinge)입니다: 대응하는 비교가 마진을 두고 성립하는 순간 0이 되고, 그렇지 않으면 위반량에 선형으로 비례해 커집니다. 축에 대해 합하면, ihlo,i+ihup,i\sum_i h_{lo,i} + \sum_i h_{up,i}는 평범한 L1 포함 위반, 곧 공-포함 힌지의 박스 버전입니다. 훈련에 쓰는 손실은 대신 각 항을 제곱합니다:

Lincl(A,B)  =  i=1dhlo,i2  +  i=1dhup,i2.L_{\mathrm{incl}}(A, B) \;=\; \sum_{i=1}^{d} h_{lo,i}^{2} \;+\; \sum_{i=1}^{d} h_{up,i}^{2}.

이 값을 계산하는 함수는, 그 기준과 그래디언트를 모두 유도하는 주석과 함께, 이 모듈의 심장부입니다(box_el.py 166–196행):

def hinge_incl(la: np.ndarray, ua: np.ndarray, lb: np.ndarray, ub: np.ndarray
) -> tuple[float, tuple[np.ndarray, ...]]:
"""Training loss for "box A ⊆ box B, strictly by γ" with corner gradients.

A ⊆ B needs, on every axis i: l_B,i ≤ l_A,i and u_A,i ≤ u_B,i
(A's lower corner at or above B's lower, A's upper at or below B's upper).
The per-axis inclusion violation, demanding γ of slack on each side, is

h_lo,i = max(0, l_B,i − l_A,i + γ), h_up,i = max(0, u_A,i − u_B,i + γ)

— so Σ_i h_lo,i + Σ_i h_up,i is the plain L1 inclusion violation, the box
analogue of the ball-containment hinge — and the loss SQUARES each term:

L = Σ_i h_lo,i² + Σ_i h_up,i².

Why squared: with the plain L1 hinge every active constraint pulls with
constant magnitude 1, so two opposing axioms (e.g. Dean ⊑ Professor
against Dean ⊑ ∃advises.Professor through the shared translation) can
cancel EXACTLY on a shared coordinate and stall while both stay active.
Squaring makes the pull proportional to the violation, so the network
relaxes like springs (a design argument, not a convergence theorem).

Gradients, by the chain rule through max(0, x)² (derivative 2·max(0, x),
which is 0 at and below the kink — no subgradient choice needed):
∂L/∂l_A = −2 h_lo ∂L/∂u_A = +2 h_up (the inner box shrinks/recenters)
∂L/∂l_B = +2 h_lo ∂L/∂u_B = −2 h_up (the outer box grows around it).
"""
h_lo = np.maximum(0.0, lb - la + GAMMA)
h_up = np.maximum(0.0, ua - ub + GAMMA)
loss = float((h_lo ** 2).sum() + (h_up ** 2).sum())
return loss, (-2.0 * h_lo, 2.0 * h_up, 2.0 * h_lo, -2.0 * h_up)

이 주석의 주장 두 가지는 이 시리즈의 정해진 방식이 요구하는 전체 유도를 받을 자격이 있습니다.

모서리 그래디언트. 한 축 위의 아래-모서리 항, hlo,i=max(0,lB,ilA,i+γ)h_{lo,i} = \max(0,\, l_{B,i} - l_{A,i} + \gamma)hlo,i2h_{lo,i}^2를 잡아, lA,il_{A,i}에 대해 미분해 봅시다. 힌지가 비활성일 때(lB,ilA,i+γ0l_{B,i} - l_{A,i} + \gamma \le 0) 그 항은 상수 00이므로 도함수도 00입니다. 힌지가 활성일 때는 hlo,i=lB,ilA,i+γh_{lo,i} = l_{B,i} - l_{A,i} + \gamma이므로, 제곱을 관통하는 연쇄 법칙에 의해

hlo,i2lA,i  =  2hlo,ihlo,ilA,i  =  2hlo,i(1)  =  2hlo,i,\frac{\partial\, h_{lo,i}^{2}}{\partial\, l_{A,i}} \;=\; 2\, h_{lo,i} \cdot \frac{\partial\, h_{lo,i}}{\partial\, l_{A,i}} \;=\; 2\, h_{lo,i} \cdot (-1) \;=\; -2\, h_{lo,i},

그리고 마찬가지로 hlo,i2/lB,i=+2hlo,i\partial h_{lo,i}^2 / \partial l_{B,i} = +2 h_{lo,i}, hup,i2/uA,i=+2hup,i\partial h_{up,i}^2 / \partial u_{A,i} = +2 h_{up,i}, hup,i2/uB,i=2hup,i\partial h_{up,i}^2 / \partial u_{B,i} = -2 h_{up,i}입니다. 이 네 벡터가 정확히 hinge_incl이 돌려주는 튜플입니다. 꺾인 지점 그 자체(max(0,x)2\max(0,x)^2에서 x=0x = 0)에서는 좌우 편미분이 모두 00이므로(왼쪽 가지는 상수이고, 오른쪽 가지는 도함수가 2x02x \to 0입니다), 제곱 힌지는 어디서나 미분 가능하며, 공 모델의 L1 힌지들과는 달리 여기서는 어떤 서브그래디언트 관례도 전혀 필요하지 않습니다. 부호들이 하강 갱신 θθηL/θ\theta \leftarrow \theta - \eta\, \partial L/\partial\theta(여기서 θ\theta는 훈련되는 임의의 매개변수이고, η\eta는 학습률(learning rate), 곧 보폭 상수입니다) 아래에서 물리적으로 말이 된다는 점에 주목하십시오: 안쪽 박스의 아래 모서리는 위로 밀리고 위 모서리는 아래로 밀리며(제자리로 줄어들거나 다시 중심을 잡습니다), 바깥쪽 박스의 모서리는 바깥으로 밀립니다(자신이 품은 것을 감싸며 커집니다).

왜 제곱인가. 평범한 L1 힌지에서는, 위반량의 크기와 무관하게, 활성인 모든 제약이 위반된 모서리 좌표마다 크기 11인 일정한 그래디언트를 기여합니다. 여기서 그로부터 유도할 수 있는 정확한 진술이 있으며, 그것은 모서리 그래디언트가 L/c=L/l+L/u\partial L/\partial c = \partial L/\partial l + \partial L/\partial u(바로 아래, 모서리-에서-매개변수 단계에서 유도하는 연쇄)에 의해 중심으로 연쇄된 뒤, 매개변수 좌표 위에서 성립합니다. 주석이 드는 예시는 Dean ⊑ Professor와 Dean ⊑ ∃advises.Professor입니다(advises.Professor\exists \text{advises}.\text{Professor}는 "어떤 Professor를 지도하는 것들"이라고 읽습니다); Dean은 두 공리 모두의 안쪽 박스이며, 두 번째 공리는 공유된 이동을 통해 Dean에 도달합니다. 중심 좌표 cDean,ic_{\text{Dean},i} 하나를 고정하고, 첫 번째 공리의 아래-힌지가 축 ii에서 활성이라고(Dean이 Professor 아래로 튀어나온다고) 하고, 두 번째 공리의 위-힌지도 그곳에서 활성이라고(이동된 Dean이 Professor 위로 튀어나온다고) 합시다. 활성인 각 L1 힌지 max(0,x)\max(0, x)는 자신이 닿는 모서리에 고정된 크기 11의 도함수를 기여합니다: 첫 번째 공리는 L1/lDean,i=1\partial L_1/\partial l_{\text{Dean},i} = -1을 보내고, 두 번째 공리는 L2/uDean,i=+1\partial L_2/\partial u_{\text{Dean},i} = +1을 보내며, 둘 다 중심으로 연쇄하면 (L1+L2)/cDean,i=(1)+(+1)=0\partial (L_1 + L_2)/\partial c_{\text{Dean},i} = (-1) + (+1) = 0이 됩니다: 두 위반이 모두 남아 있는 동안 그 중심 좌표는 어떤 그래디언트 단계도 밟지 않습니다. 이는 좌표 하나에 국한된 교착이지, 전체 시스템이 얼어붙는다는 증명이 아닙니다: 다른 좌표들(그 가운데는 반너비 wDean,iw_{\text{Dean},i}도 있습니다)과 대립하는 박스들 자신의 모서리들은 여전히 그래디언트를 받으며, 그 움직임이 힌지 하나를 비활성화해 교착을 깰 수도 있습니다. 그러나 그런 일이 반드시 일어나도록 강제하는 것은 아무것도 없으며, 바로 이 교착이 제곱 힌지가 막아 내도록 설계된 실패 양상입니다. 제곱을 취하면 각 당김이 고정된 11이 아니라 자신의 위반량에 비례하는 크기 2h2h를 갖게 되므로, 대립하는 두 힌지는 오직 위반량이 같을 때만 균형을 이루고, 어떤 비대칭이든 전체 위반을 줄이는 쪽으로 순 당김을 만들어 냅니다. 이는 설계 논증이지 수렴 정리가 아닙니다: 이 손실은 o=ewo = e^{w} 매개변수화와 NF2의 max/min 경로 배정 때문에 비볼록이므로, 충족 가능한 부분집합에서 손실 0에 도달한다는 어떤 보장도 여기서 따라 나오지 않습니다. 커밋된 트레이스가 보여 주는 것은 이 설계가 노리는 바로 그 거동입니다: 아래 에폭 표의 모든 손실 그룹은 초기 과도 상태를 거친 뒤 자리를 잡고(NF2 스파이크와 분리성 열의 뒤늦은 깜빡임은 모두 표 아래에서 설명합니다), 그것이 자리 잡는 잔여는 공리별로 낱낱이 짚어 낼 수 있는데, 그 일부는 증명 가능하게 불가피하고 가장 큰 부분은 충족 가능한 공리들 사이의 마진 대치이며, 그 해석은 표를 따라 이어집니다. 공 모델은 마진과 가중치로 이 대치를 피해 갔지만, 박스 모델은 그것을 손실 자체 안에서 다룹니다.

모서리에서 매개변수로. 손실은 모서리로 표현되지만, 경사 하강은 중심과 로그 오프셋을 갱신합니다. 그 연쇄는 두 줄이면 됩니다. l=col = c - o이고 u=c+ou = c + o이며 o=ewo = e^{w}(좌표별)이므로, cic_i를 살짝 흔들면 두 모서리 모두가 비율 11로 움직이고, wiw_i를 살짝 흔들면 oio_i가 비율 oi/wi=ewi=oi\partial o_i/\partial w_i = e^{w_i} = o_i로 움직이며, 이는 lil_i를 비율 oi-o_i로, uiu_i를 비율 +oi+o_i로 움직입니다. 따라서

Lc  =  Ll+Lu,Lw  =  (LuLl)o,\frac{\partial L}{\partial c} \;=\; \frac{\partial L}{\partial l} + \frac{\partial L}{\partial u}, \qquad \frac{\partial L}{\partial w} \;=\; \left(\frac{\partial L}{\partial u} - \frac{\partial L}{\partial l}\right) \odot o,

여기서 \odot는 좌표별 곱입니다. 이것이 바로 _add_box_grad이며, 그대로 옮기면 다음과 같습니다(box_el.py 199–208행):

def _add_box_grad(g_cen: np.ndarray, g_logoff: np.ndarray, ci: int,
dl: np.ndarray, du: np.ndarray, off: np.ndarray) -> None:
"""Chain corner gradients to concept ci's parameters.

lower = c (+ shift) − o and upper = c (+ shift) + o with o = e^w, so
∂L/∂c = ∂L/∂lower + ∂L/∂upper
∂L/∂w = (∂L/∂upper − ∂L/∂lower) · o (since ∂o/∂w = e^w = o).
"""
g_cen[ci] += dl + du
g_logoff[ci] += (du - dl) * off

hinge_incl_add_box_grad를 손에 넣으면 NF1은 끝난 것입니다: ABA \sqsubseteq Bbox(A)\mathrm{box}(A)box(B)\mathrm{box}(B) 위의 포함 힌지이고, 모서리 그래디언트는 두 개념의 매개변수 모두에 연쇄적으로 이어집니다(box_el.py 215–223행). 나머지 정규형들은 바로 이 힌지를 유도된 박스에 적용한 것이며, 바로 그 지점에서 기하가 논리를 수행하기 시작합니다.

마침내 정확해진 NF2: 교집합은 박스다

이 부(Part) 전체가 쌓아 올려 온 순간이 바로 여기입니다. NF2 공리 ABCA \sqcap B \sqsubseteq C는 두 개념의 집합 교집합에 관해 말합니다. 공 모델은 그 집합을 만들어 낼 수 없었으므로 중점 대리물을 훈련시켰습니다. 박스 모델은 그것을 모서리 산술 두 줄로 정확하게 만들어 냅니다.

주장. box(A)box(B)\mathrm{box}(A) \cap \mathrm{box}(B)가 비어 있지 않다면, 그것은 그 자체로 박스이며, 그 모서리는

lI,i  =  max ⁣(lA,i,lB,i),uI,i  =  min ⁣(uA,i,uB,i).l_{I,i} \;=\; \max\!\big(l_{A,i},\, l_{B,i}\big), \qquad u_{I,i} \;=\; \min\!\big(u_{A,i},\, u_{B,i}\big).

증명은 정의를 풀어내면 그만입니다. 점 xx가 두 박스 모두에 놓이는 것은 정확히, 모든 축 ii에 대해 lA,ixiuA,il_{A,i} \le x_i \le u_{A,i}lB,ixiuB,il_{B,i} \le x_i \le u_{B,i}가 함께 성립할 때입니다. 두 아래 경계는 그중 더 큰 쪽이 성립할 때 정확히 함께 성립하고, 두 위 경계는 더 작은 쪽이 성립할 때 정확히 함께 성립하므로, 그 두 조건의 쌍은 max(lA,i,lB,i)ximin(uA,i,uB,i)\max(l_{A,i}, l_{B,i}) \le x_i \le \min(u_{A,i}, u_{B,i})와 동치이며, 이는 xx가 모서리 lI,uIl_I, u_I를 갖는 박스 안에 놓인다는 뜻입니다. 이것은 근사가 아니라 집합의 등식입니다: 박스 계열은 교집합에 대해 닫혀 있으며(closed under intersection), 이 성질은 박스 대 공이 공에게는 성립하지 않음을 측정해 보인 바로 그 성질입니다(렌즈를 감싸는 최선의 공은 증명 가능하게 거짓인 면적을 60.56퍼센트 실었습니다). 이는 또한 정확히 ELBE의 설계 논증이기도 한데, ELBE는 바로 이 교집합적 닫힘을 위해 명시적으로 박스를 선택했습니다 [3].

그러므로 NF2 손실은 전혀 새로운 손실이 아닙니다. 교집합 박스를 만든 다음, 그것을 CC에 맞선 안쪽 박스로 삼아 동일한 hinge_incl에 넣으면 됩니다: 이제 손실은 논리가 말하는 것과 동일한 ⊓를 말합니다. max와 min에 대한 서브그래디언트 장부 정리까지 포함한 구성은 다음과 같습니다(box_el.py 274–279행):

la, ua, oa = corners(cen, logoff, a)
lb, ub, ob = corners(cen, logoff, b)
lI = np.maximum(la, lb)
uI = np.minimum(ua, ub)
a_lo = (la >= lb).astype(float) # 1 where A's lower corner is binding
a_up = (ua <= ub).astype(float) # 1 where A's upper corner is binding

지시 벡터 a_loa_up은 축마다 어느 쪽의 모서리가 교집합의 모서리인지를 기록합니다: AA의 아래 모서리가 최댓값을 이루는 축에서는 lI,i/lA,i=1\partial l_{I,i}/\partial l_{A,i} = 1이고 그 밖에서는 00이며, BB가 그 나머지를 차지합니다(위 모서리에 대해서도 min을 통해 마찬가지입니다). 정확히 동점일 때 max는 미분 가능하지 않습니다; 코드는 동점을 AA 쪽으로 배정하는데, 이는 유효한 서브그래디언트들 가운데 결정론적으로 고른 선택이므로 재실행해도 바이트 단위로 동일합니다. hinge_incl(lI, uI, lc, uc)가 교집합에 대한 모서리 그래디언트를 돌려주면, 그것은 이 지시자들을 통해 각 축에서 지배적인 쪽 부모에게 배정된 다음, 언제나처럼 _add_box_grad에 의해 중심과 로그 오프셋에 연쇄적으로 이어집니다(box_el.py 313–322행).

진정으로 논리적인 미묘한 지점 하나가 남아 있습니다. 훈련된 박스들이 너무 멀리 떨어져 표류해서 교집합이 비어 버리면, 곧 어느 축에서 lI,i>uI,il_{I,i} \gt u_{I,i}가 되면 어떻게 될까요? 그러면 개념 ABA \sqcap B는 공집합을 나타내고, 논리에서 공리 C\varnothing \subseteq CCC가 무엇이든 참입니다: 공허한 만족(vacuous satisfaction)입니다. 코드는 그 근거까지 붙여 이 관례를 구현합니다(box_el.py 308–312행):

# ORDINARY NF2 (A ⊓ B ⊑ C). If the intersection is empty on some axis
# (l_I > u_I), then A ⊓ B ≡ ⊥ and ∅ ⊑ C holds VACUOUSLY: loss 0, and the
# subgradient is 0 (the axiom asks nothing of an empty intersection).
if bool(np.any(lI > uI)):
return 0.0, False

손실도 0, 그래디언트도 0입니다: 이 공리는 빈 교집합에 아무것도 요구하지 않으므로, 이 퇴화된 방식으로 공리를 만족시켰다고 해서 기하가 벌을 받지는 않습니다. 공 모델에는 이런 경우 분석에 깔끔하게 대응하는 것이 없는데, 애초에 비어 있는지 검사할 수 있는 교집합 대상을 전혀 만들어 내지 않기 때문입니다.

이동으로서의 존재 제한, 놓친 축으로서의 분리성

두 존재 제한 형태는, 공 모델이 이동된 중심에 대한 포함 부등식을 재사용했던 것과 똑같이, 이동된 박스에 대한 포함 힌지를 재사용합니다. NF3, 곧 Ar.BA \sqsubseteq \exists r.B에서 안쪽 박스는 box(A)\mathrm{box}(A)+tr+t_r만큼 이동시킨 것입니다: 그 모서리는 lA+trl_A + t_ruA+tru_A + t_r인데, 박스의 모든 점에 상수 벡터를 더하면 그 벡터가 두 모서리 모두에 더해지기 때문입니다. 새로 생기는 그래디언트는 이동의 그래디언트뿐이며, 그것은 동일한 연쇄 법칙에서 그대로 떨어져 나옵니다: 이동된 각 모서리는 항등 도함수로 trt_r에 의존하므로, 손실이 trt_r에 대해 갖는 민감도는 두 안쪽 모서리에 대한 민감도의 합입니다(box_el.py 234–241행):

la, ua, oa = corners(cen, logoff, a, shift=tra[r])
lb, ub, ob = corners(cen, logoff, b)
loss, (dla, dua, dlb, dub) = hinge_incl(la, ua, lb, ub)
_add_box_grad(g_cen, g_logoff, a, dla, dua, oa)
_add_box_grad(g_cen, g_logoff, b, dlb, dub, ob)
# ∂L/∂t_r = ∂L/∂l_inner + ∂L/∂u_inner
g_tra[r] += dla + dua
return loss

NF4, 곧 r.BA\exists r.B \sqsubseteq A는 그 거울상입니다: BBrr-원상(preimage)은 box(B)\mathrm{box}(B)tr-t_r만큼 이동시킨 것으로 모델링되고, 이는 box(A)\mathrm{box}(A) 안에 포함됩니다; 이 모서리들은 좌표마다 도함수 1-1trt_r에 의존하므로 이동 그래디언트의 부호가 뒤집혀 L/tr=(L/linner+L/uinner)\partial L/\partial t_r = -(\partial L/\partial l_{\mathrm{inner}} + \partial L/\partial u_{\mathrm{inner}})가 됩니다(box_el.py 244–259행). 여기서 기준선과의 비대칭 하나를 짚어 둘 만합니다: NF4에 대해 공 모델은 되돌려 이동된 BB-공이 AA맞닿기만을, 곧 겹침 힌지 max(0,cBvrcArBrAγ)\max(0,\, \lVert c_B - v_r - c_A \rVert - r_B - r_A - \gamma)(el_embed.py 225–239행)만을 요구했습니다; 여기서 \lVert \cdot \rVert는 유클리드 노름, 곧 성분들의 제곱을 모두 더한 값의 제곱근이고, cAc_AcBc_B는 두 공의 중심, rAr_ArBr_B는 그 반지름이며, vrv_r은 공 모델의 역할 이동으로 이 장의 trt_r에 대응합니다. 박스 손실은 대신 완전한 포함 관계를 요구합니다. 박스의 해석은 엄밀히 더 강하며, ∃r.B ⊑ A가 실제로 말하는 바에 더 가깝습니다: 원상 영역의 모든 점이 AA에 속해야지, 그중 어떤 한 점만으로는 충분하지 않습니다.

분리성(disjointness)은 박스 기하가 두 번째 배당금을 지불하는 지점이며, 박스가 언제 놓치는가에 관한 사실에서 출발합니다. 축별 중첩(overlap)을 다음과 같이 정의합니다

ovi  =  uI,ilI,i  =  min ⁣(uA,i,uB,i)max ⁣(lA,i,lB,i).\mathrm{ov}_i \;=\; u_{I,i} - l_{I,i} \;=\; \min\!\big(u_{A,i}, u_{B,i}\big) - \max\!\big(l_{A,i}, l_{B,i}\big).

교집합이 비어 있지 않은 것은 정확히 모든 축에서 ovi0\mathrm{ov}_i \ge 0일 때입니다(이는 앞서 나온 공허함 검사를 긍정문으로 다시 읽은 것입니다). 이를 부정하면: 두 박스가 서로소인 것은 정확히 어느 축에서든 놓칠 때, 곧 적어도 하나의 ii에 대해 ovi<0\mathrm{ov}_i \lt 0일 때입니다. 그러므로 공리 Professor ⊓ Student ⊑ ⊥는 8개 축 전부에서 두 박스를 분리하라고 요구하지 않습니다; 깨끗하게 하나만 놓쳐도 충분하며, 그 이상을 요구하는 것은 논리가 실제로 요구하는 것보다 엄밀히 더 많은 것을 요구하는 셈입니다. 그래서 구현된 손실은 오직 가장 작은 중첩, 곧 분리하기에 이미 가장 값싼 축 하나에만 힌지를 걸며, 그 설계 근거는 다음과 같이 남아 있습니다(box_el.py 282–292행):

# DISJOINTNESS. Per axis, overlap_i = u_I,i − l_I,i = min(u_A, u_B)_i
# − max(l_A, l_B)_i. The boxes intersect iff overlap_i ≥ 0 on EVERY
# axis, so they are disjoint iff they MISS ON SOME AXIS (overlap < 0
# somewhere). We therefore hinge only the SMALLEST overlap — the axis
# already cheapest to separate — with γ slack (an L1 hinge over all
# axes would demand separation on every axis, far more than ⊑ ⊥ asks):
# k = argmin_i overlap_i, L = max(0, overlap_k + γ).
ov = uI - lI
k = int(np.argmin(ov)) # deterministic: first minimal axis
h = max(0.0, float(ov[k]) + GAMMA)
loss = W_DISJ * h * h # squared hinge, weighted λ_⊥

기호로 쓰면, 가장 작은 중첩의 인덱스를 k=argminiovik = \arg\min_i \mathrm{ov}_i라 할 때 손실은 λmax(0,ovk+γ)2\lambda_\bot \max(0, \mathrm{ov}_k + \gamma)^2입니다; 앞서와 동일한 연쇄 법칙에 의해 그 그래디언트는 uI,ku_{I,k}를 아래로, lI,kl_{I,k}를 위로 밀며, 어느 쪽 부모의 모서리가 지배적인지에 따라 배정되어, 두 박스가 그 한 축을 따라 서로 줄어들며 멀어지게 됩니다. 가중치 λ=8\lambda_\bot = 8은 공 모델의 분리성 가중치와 동일한 구조적 이유로 존재합니다: 충족 불가능한 TenuredStudent가 두 개의 포함 힌지(TS ⊑ Professor와 TS ⊑ Student)를 통해 Professor와 Student를 서로 끌어당기므로, 단 하나의 분리성 힌지가 여유를 두고 그 줄다리기에서 이겨야 하기 때문입니다(box_el.py 130–137행).

동일한 세 가지 EL 정규형을 공 모델과 박스 모델로 각각 다룬 모습을 학계 세계 TBox 위에 그려 비교한 두 열짜리 도해. 청록색으로 그려진 왼쪽 열은 공 모델을 보여준다: NF1을 위한, 더 큰 Researcher 공 안에 들어앉은 작은 Professor 공, NF2를 위한, 겹치는 두 공의 렌즈 모양 교집합과 거짓 면적으로 표시된 점선의 둘러싸는 원, 그리고 NF3를 위한, 역할 이동 화살표로 옮겨진 공이다. 인디고색으로 그려진 오른쪽 열은 박스 모델을 보여준다: Researcher 박스 안에 들어앉은 Professor 박스와, 그 모서리에 주석으로 달린 축별 모서리 부등식(아래-B가 아래-A와 같거나 그 아래, 위-A가 위-B와 같거나 그 아래)이 있고, 겹치는 두 박스의 정확한 교집합 사각형이 짙게 칠해져 있으며 그 모서리에는 아래쪽들의 좌표별 최댓값과 위쪽들의 좌표별 최솟값이라는 이름표가 붙어 있고, 같은 이동 화살표로 옮겨진 박스가 있다. 두 열 아래에는 공유된 띠 하나가 분리성 규칙을 보여준다: 하나의 강조된 축 k를 따라 분리된 두 박스와 축별 중첩 공식이 있고, 그 옆에는 공은 TP 8 FP 0 FN 0, 박스는 TP 8 FP 0 FN 0이라 적힌 작은 두 행짜리 점수판이 있으며, 각 행에는 그 스위트의 동결된 탐침 허용 오차, 공은 0.15, 박스는 0.05가 함께 주석으로 달려 있다. 두 기하 아래 놓인 같은 세 가지 공리 모양: 포함 관계와 이동은 비슷해 보이지만, 오직 박스 열의 교집합만이 참된 영역이며, 분리성은 오직 하나의 놓친 축만을 필요로 한다. 저자가 AI의 도움을 받아 직접 제작한 원본 도해.

훈련, 그리고 커밋된 정면 대결

훈련은 세 매개변수 블록(중심, 로그 오프셋, 이동) 위에서 이루어지는 전체 배치 경사 하강, θθηθL\theta \leftarrow \theta - \eta\, \nabla_\theta L이며, 시드 0 초기화에서 시작해 학습률(learning rate) η=0.05\eta = 0.05로 4000 에폭 동안 진행되고, 에폭 3800 이후에는 η/10\eta/10으로 감쇠하여 최종 평형이 안정적이고 인용 가능한 숫자로 자리 잡게 합니다(box_el.py 357–374행). 커밋된 트레이스는 스프링 네트워크가 완화되는 모습을 보여줍니다(python3 box_el.py, 3절):

3. training — total squared-hinge loss and by axiom group (epoch 1 = untrained)
epoch : total | NF1 NF2⊓ disj NF3 NF4
1 : 283.4835 | 121.3894 0.0000 0.0000 62.7180 99.3761
10 : 10.3909 | 6.2613 0.0000 0.0002 1.9388 2.1907
50 : 1.1293 | 0.3796 0.4096 0.0000 0.2306 0.1095
100 : 0.2988 | 0.1469 0.0257 0.0000 0.1068 0.0193
300 : 0.1465 | 0.0800 0.0174 0.0000 0.0488 0.0003
1000 : 0.0943 | 0.0510 0.0149 0.0000 0.0284 0.0000
2000 : 0.0804 | 0.0425 0.0150 0.0000 0.0228 0.0000
4000 : 0.0678 | 0.0351 0.0150 0.0031 0.0146 0.0000

이 열들을 읽어 보십시오. 이 장의 이야기를 축소판으로 들려주기 때문입니다. NF2 열이 0.00000.0000에서 시작하는 것은 초기화 시점에 논리곱이 충족되어서가 아니라, 무작위로 흩어진 박스들의 교집합이 비어 있어서 빈 교집합이 그 공리를 공허하게 만족시키기 때문입니다; 에폭 50에 이르면 포함 힌지들이 박스들을 서로 끌어당겨 교집합이 비지 않게 되고, NF2 손실은 잠깐 0.40960.4096까지 치솟았다가 다시 완화됩니다. 그리고 총 손실은 결코 0에 도달하지 못하는데, 앞 장과 같은 증명 가능한 이유 때문입니다: TenuredStudent는 분리성 힌지가 서로 떼어 놓은 두 박스 안에 동시에 들어앉아야 하는데, 비어 있지 않은 박스는 빌 수 없으므로, 그 공리들은 영구적인 위반, 곧 ⊥의 기하학적 그림자를 계속 짊어집니다. 그 그림자는 0에 도달할 수 없는 이유를 설명해 주지만, 최종 0.06780.0678 대부분이 자리 잡은 곳은 아닙니다. 커밋된 트레이스가 낱낱이 짚어 내듯, TenuredStudent 무리(그 두 개의 포함 관계, TenuredStudentAdvisor 존재 제한, 그리고 그것들이 맞서 싸우는 분리성 힌지)는 그 잔여 가운데 증명 가능하게 불가피한 부분이며, 가장 큰 몫은 Researcher ⊑ Person과 Person ⊓ _N1 ⊑ Researcher(여기서 _N1은 ∃authored.Paper를 위해 도입된 신선 이름 정규화입니다) 사이에 놓여 있는데, 이 둘은 함께 충족 가능한 공리이면서도 그 엄격한 γ\gamma 마진이 Researcher 박스를 서로 반대 방향으로 잡아당깁니다: 이는 논리가 강제하는 위반이 아니라 평형이 자리 잡는 스프링 타협이며, 나머지는 다른 곳에 흩어진 작은 스프링 타협입니다. 분리성 열도 축소판으로 같은 평형 이야기를 들려줍니다. 훈련 중반까지는 0에 머물다가, 끝에 가서 희미하게 다시 활성화되는데, 훈련된 박스들이 실제로 서로소로 마무리되기는 하지만(아래의 닫힘 전시는 최소 중첩이 0.0304-0.0304임을 인쇄합니다) 요구되는 γ=0.05\gamma = 0.05의 여유에는 못 미치기 때문이며, λmax(0,0.0304+0.05)2=80.019620.0031\lambda_\bot \max(0,\, -0.0304 + 0.05)^2 = 8 \cdot 0.0196^2 \approx 0.0031이 바로 표의 마지막 항목입니다.

훈련이 끝난 뒤, 건전성 탐침은 AABB 바깥으로 가장 심하게 튀어나온 축, 곧 최악-축 돌출(worst-axis protrusion)이 허용 오차 ε\varepsilon 이내일 때 정확히 그때 ABA \sqsubseteq B를 받아들입니다(box_el.py 381–389행):

def probe_gap(cen: np.ndarray, logoff: np.ndarray, a: str, b: str) -> float:
"""The worst-axis protrusion of box a outside box b:

gap(A, B) = max_i max(l_B,i − l_A,i, u_A,i − u_B,i).

gap ≤ 0 means A is truly inside B; the probe accepts A ⊑ B iff gap ≤ ε."""

이 탐침은 공 탐침과 동일한 56개의 순서 있는 쌍을 훑되, ε=0.05\varepsilon = 0.05를 쓰며, 이는 공 모델의 ε=0.15\varepsilon = 0.15(el_embed.py 55행)에 맞섭니다. 커밋된 실행은 8개의 금본위 포섭 관계를 그 훈련된 간격(gap)과 함께 인쇄한 다음, 중심이 되는 두 행짜리 혼동 표를 인쇄합니다(python3 box_el.py, 4–5절):

4. soundness probe — accept A ⊑ B iff gap(A,B) = max_i max(l_B−l_A, u_A−u_B) ≤ ε = 0.05
the 8 gold subsumptions, by their trained gaps:
Dean ⊑ Person gap = -0.1048 ✓ contained
Dean ⊑ Professor gap = 0.0199 ✓ contained
Dean ⊑ Researcher gap = -0.0544 ✓ contained
Professor ⊑ Person gap = -0.1000 ✓ contained
Professor ⊑ Researcher gap = -0.0500 ✓ contained
Researcher ⊑ Person gap = 0.0000 ✓ contained
Student ⊑ Person gap = -0.0500 ✓ contained
Student ⊑ Researcher gap = -0.0500 ✓ contained
scan of 8·7 = 56 ordered pairs: predicted 8, TP 8, FP 0, FN 0
wrong pairs: none

5. balls vs boxes — the same 56-pair probe, same axioms, seed 0
model TP FP FN precision recall probe slack
balls (ELEm) 8 0 0 1.0000 1.0000 ε = 0.15
boxes (BoxEL) 8 0 0 1.0000 1.0000 ε = 0.05

각 점수가 얻어진 탐침 여유와 함께 표로 정리하면:

모델TPFPFN정밀도재현율탐침 여유 ε\varepsilon
공 (ELEm) [1]8001.00001.00000.15
박스 (BoxEL 방식) [2]8001.00001.00000.05

정직한 헤드라인은 동점입니다: 이 16개 공리짜리 TBox 위에서, 기하 모두 금본위 포섭 관계를 완벽하게 복원합니다. 이를 묻어 버리기는 쉽지만, 그것은 잘못된 일일 것입니다. 8개의 충족 가능한 이름 붙은 개념을 가진 14개 공리짜리 온톨로지는, 공 모델의 근사를 드러낼 만큼 충분한 논리곱 압력을 애초에 갖고 있지 않습니다: 두 개의 NF2 정규형 가운데 하나는 분리성이고, 그러면 중점 어림법이 만족시켜야 할 평범한 논리곱은 단 하나만 남으며, R8\mathbb{R}^8 안의 제약 하나는 어딘가 적당한 곳에 자리 잡을 여유 공간을 넉넉히 남겨 줍니다. 진짜 차이는 세 가지 관찰에서 드러납니다.

첫째, 탐침-여유 열을 점수의 일부로 읽으려는 유혹을 물리쳐야 합니다. 각 스위트의 허용 오차는 한 번 정해진 뒤 동결되었습니다(공에게는 ε=0.15\varepsilon = 0.15이며, 그 선언 주석이 정확히 그렇게 말합니다, el_embed.py 55–56행; 박스에게는 ε=0.05\varepsilon = 0.05입니다), 그러므로 이 열은 측정된 필요가 아니라 탐침의 설정값을 기록한 것입니다. 위의 금본위-간격 목록은 왜 이 구분이 한 행 안에서조차 중요한지를 보여줍니다: 여덟 개의 박스 간격 가운데 여섯 개는 0.0500-0.0500 이하에 있어, 전체 훈련 마진 γ\gamma만큼의 여유를 온전히 두고 엄밀하게 성립하지만, Dean ⊑ Professor는 0.01990.0199만큼 튀어나와 있고, 여유가 쓸 만큼 있었기 때문에 겨우 통과합니다. 두 허용 오차는 각 모델이 어떤 잣대로 측정되었는지를 말해 줄 뿐, 어느 쪽이 도움을 필요로 했는지를 말해 주지는 않습니다.

둘째, 그 이점은 구조적이며, 점수가 아니라 손실에서 드러납니다: 박스의 NF2 손실은 CC에 맞서 정확한 교집합을 훈련시키는 반면, 공의 NF2 손실은 대리물을 훈련시킵니다. 그 대리물의 실패 양상은 무작위가 아니라 체계적인 거짓 면적이며, 논리곱의 개수와 중첩 깊이에 따라 누적됩니다.

셋째, 그 누적이야말로 발표된 기록이 실제 규모에서 정확히 보여 주는 것입니다. 수천 개의 NF2 공리가 교집합을 시험하는 표준 온톨로지 벤치마크(GALEN, Gene Ontology, Anatomy) 위에서, 박스 기반 모델들은 대부분의 벤치마크와 지표 조합에서 공 기준선 대비 향상을 보고합니다: ELEm 대비 BoxEL [2], 그리고 보고된 설정 대부분에서 ELEm 공 모델과 BoxEL, ELBE를 포함한 기준선 집합 전체를 앞서는 Box²EL [4]입니다. ELBE는 동일한 교집합적 닫힘 논증을 펴지만, 자신의 향상을 이 세 온톨로지가 아니라 합성 논리곱 과제와 단백질 상호작용 예측에서 보고하며, 거기서 가장 큰 도약은 논리곱 지표 위에 정확히 자리합니다 [3]. 장난감 규모의 동점과 발표된 격차는 두 규모에서 읽어 낸 같은 현상입니다: ⊓에 대한 충실함은 훈련의 속성이기 이전에 기하의 속성이며, 온톨로지가 그것을 실제로 시험하는 순간부터 정확도를 갉아먹기 시작합니다.

닫힘 전시: 모서리 하나하나로 본 훈련된 교집합

혼동 표는 판정을 비교합니다. 닫힘 전시는 대상 자체를 비교합니다. 훈련이 끝난 뒤, 실행은 Professor 박스와 Researcher 박스를 가져와 모서리 산술로 그 교집합을 계산한 다음, 네 개의 모서리 벡터 전부를 인쇄합니다(python3 box_el.py, 6절):

6. closure — Professor ⊓ Researcher by corner arithmetic IS a box
axis 1 2 3 4 5 6 7 8
inter lo -0.643 0.151 -0.151 -0.317 -0.222 -0.125 0.154 0.360
inter hi -0.205 0.429 0.312 0.179 0.253 0.314 0.627 0.810
Prof lo -0.643 0.151 -0.151 -0.317 -0.222 -0.125 0.154 0.360
Prof hi -0.205 0.429 0.312 0.179 0.253 0.314 0.627 0.810
the model learned Professor ⊑ Researcher, so the intersection ≈ the Professor box
(Professor ⊓ Researcher ≡ Professor) — whereas two balls intersect in a lens that
is NOT a ball: boxes_vs_balls.py measures 60.56% false-positive area for the best
enclosing ball, and here the corner arithmetic is exact with zero false area

Professor/Student disjointness, exactly: min per-axis overlap = -0.0304 < 0

각 열을 따라 숫자를 읽어 보십시오: 교집합의 모서리는 인쇄된 정밀도까지 모든 축에서 Professor의 모서리와 일치합니다. 이것이 바로 기하를 통해 비쳐 보이는 논리입니다. 2권의 추론기는 Professor ⊑ Researcher를 도출했고, 훈련은 그것을 포함 관계로 실현했으며, 포함 관계는 교집합 항등식 XY=XX \cap Y = X(XYX \subseteq Y일 때)가 좌표 안에서 성립하게 합니다: 모든 축에서 Professor의 아래 모서리가 더 큰 아래쪽이고 Professor의 위 모서리가 더 작은 위쪽이므로, max/min 산술은 Professor 자신의 모서리를 그대로 돌려줍니다. 인쇄된 영역은 거짓 면적이 0인, 진짜이며 질의 가능한 개념 box(ProfessorResearcher)\mathrm{box}(\text{Professor} \sqcap \text{Researcher})이며, 같은 논리곱에 대한 공 모델의 최선의 노력은 증명 가능하게 거짓인 면적을 60.56퍼센트 실었습니다. 그리고 마지막 줄은 분리성 장부를 마감합니다: 훈련된 Professor 박스와 Student 박스는 축별 최소 중첩이 0.0304-0.0304로, 적어도 한 축에서 엄밀하게 놓치므로, ⊑ ⊥ 공리는 허용 오차 안에서만이 아니라 훈련된 기하 안에서 정확히 성립합니다. 이 모듈의 역량 검증 assert들은 매 실행마다 이 모든 것을 고정합니다: 훈련된 15개의 공리와 건너뛴 1개의 사슬, 8개 중 8개의 금본위 복원, 공의 재현율 이상의 재현율, 음의 최소 중첩, 그리고 비어 있지 않은 교집합 박스입니다(box_el.py 441–453행).

Box²EL: 범프, 역할 박스, 그리고 다대다 관계의 해법

위의 모든 것에도 살아남는 약점 하나가 있으며, 앞 장에서 이미 그것을 만난 적이 있습니다: 역할은 단 하나의 이동 벡터라는 점입니다. advises를 거쳐 가는 모든 공리는 동일한 tadvisest_{\text{advises}}를 재사용해야 하므로, Dean ⊑ ∃advises.Professor와 Professor ⊑ ∃advises.Student가 둘 다 성립한다면, 화살표 하나가 Dean 박스를 Professor 박스 안으로 그리고 동시에 Professor 박스를 Student 박스 안으로 실어 날라야 하며, 그 두 요구 사이의 스프링 타협이 바로 NF3 잔여 손실이 사는 곳입니다. 이는 이동 모델에서 본 TransE의 일대다 붕괴를 온톨로지 수준에서 그대로 되풀이한 쌍둥이이며, Box²EL이 그 발표된 해법입니다 [4]. Box²EL은 역할 어휘를 두 차례 바꿉니다. 첫째, 모든 개념 AA는 자신의 박스 외에도 범프 벡터(bump vector) bARdb_A \in \mathbb{R}^d를 가지며, 존재 제한 Ar.BA \sqsubseteq \exists r.B채움말(filler)의 범프를 원본에 더한 채로 채점됩니다: 원본 박스가 겪는 이동이 bBb_B만큼 이동되므로, 같은 역할이라도 채움말이 다르면 다르게 도착합니다. 그러면 단 하나의 역할이 모든 쌍을 하나의 공유된 오프셋 위로 강제하지 않고도 여러 개념 쌍을 관계 지을 수 있습니다. 둘째, 역할 rr 자체가 점 이동이 아니라 한 쌍의 역할 박스(머리 박스와 꼬리 박스)가 되므로, rr의 정의역과 치역에 속한다는 것은 다른 모든 것과 마찬가지로 영역 포함 관계가 되고, 이 모델은 역할의 원본들과 목표들이 각각 방향이 아니라 부피를 가진 공간의 영역을 차지한다는 것을 표현할 수 있습니다. 장난감 TBox 위에서는 이 가운데 어느 것도 필요하지 않으므로, 동반 코드는 이동 전용 핵심을 그대로 유지합니다(그 독스트링이 그렇게 말합니다, box_el.py 13–15행); GALEN, Gene Ontology, Anatomy 규모에서는, WWW '24 평가가 이 두 변화로 벤치마크 스위트 대부분에서 BoxEL과 ELBE, 그리고 공 기준선 대비 포섭 예측이 향상된다고 보고합니다 [4]. 앞으로 계속 이어질 패턴은 이것입니다: 기하학적 정교화가 한 걸음씩 더해질 때마다(공 → 박스 → 범프를 가진 박스) 이전 기하가 조용히 근사하고 있던 논리의 한 조각을 되사 옵니다.

아직 풀리지 않은 부분

이 장과 앞 장이 공유하는 탐침에는 조용한 사각지대 하나가 있으며, 그것을 정직하게 짚어 내면 "충실하다"는 말이 뜻해야 할 바가 다시 틀 지어집니다. 이 탐침은 이름 붙은 개념들 사이의 포섭 관계만을 검사합니다: 원자적 이름들로 이루어진 56개의 순서 있는 쌍을 추론기에 맞대어 판정한 것뿐입니다. 그 집합 위에서의 재현율은 충실함에 필요하지만 충분하지는 않은데, EL++는 이름에 관한 진술만을 함의하지 않기 때문입니다. EL++는 구성자로 합성된 개념에 관한 진술도 함의합니다: 훈련된 기하는 TBox가 결코 함께 언급한 적 없는 쌍에 대해서도 ABCA \sqcap B \sqsubseteq C를 올바르게 처리할까요? r.(AB)\exists r.(A \sqcap B)는 논리가 요구하는 바로 그 자리에 놓일까요? 원자적 쌍에서의 완벽한 점수는 합성된 쌍에서의 체계적인 오류와 얼마든지 양립할 수 있으며, 바로 이 장이 기린 그 닫힘 성질이야말로 이 질문을 날카롭게 만드는 것입니다: box(A)box(B)\mathrm{box}(A) \cap \mathrm{box}(B)실제로 박스이므로, 이 기하는 훈련되지 않은 것들을 포함해 모든 논리곱에 확정된 영역을 배정하며, 그 각각의 영역은 검증 가능한 주장입니다. 공은 이런 식으로 심문조차 할 수 없었습니다; 박스는 할 수 있으므로, 박스는 그 의무도 함께 물려받습니다. 필요한 것은, 복합 개념에 배정되는 영역이 그 부분들로부터 EL++ 구성자 집합 전체에 걸쳐 함의를 보존하는 방식으로 계산된다는 것을, 그저 장려하는 정도가 아니라 구성 자체가 보장하는 모델입니다: 닫힘이 훈련이 끝난 뒤의 전시물이 아니라 표현 그 자체의 불변량이 되는 것입니다. 이는 일반적으로 열린 설계 문제이며, 특히 다음 장의 주제입니다.

왜 중요한가

신경-기호 프로그램에게 이 장은 하나의 구호를 측정 프로토콜로 격상시킵니다. "임베딩은 온톨로지를 존중해야 한다"는 막연하지만, "초개념에 맞서 정확한 교집합 박스를 훈련시킨 다음, 통제된 기준선에 맞서 한 행 한 행 훈련된 기하를 추론기의 분류에 대조하여 채점하라"는 하나의 실험이며, 커밋된 실행이 바로 그 사례입니다. 앞으로 전해질 교훈은 두 가지입니다. 첫째, 논리의 대수와 맞아떨어지도록 기하를 선택하라는 것입니다: NF2가 정확해진 이유는 더 나은 옵티마이저나 더 큰 모델이 아니라, 공리가 말하는 연산 아래 닫힌 표현이었기 때문입니다; 같은 원리가 복합 질의 응답에서의 질의 논리곱을 위한 기하, 그리고 4권의 미분 가능한 연산자를 위한 기하를 골라낼 것입니다. 둘째, 충실함에는 짚어 낼 수 있는 예산이 있다는 것입니다: 잔여 손실은 공리마다 항목화되며, 그중 하나는 충족 불가능한 TenuredStudent가 기하에 드리운 그림자인, 증명 가능하게 피할 수 없는 몫이고, 다른 하나는 함께 충족 가능한 공리들 사이에서 γ\gamma-마진 스프링이 만드는 타협입니다. 따라서 오류는 그저 작기만 한 것이 아니라 귀속 가능하며, 각 몫을 그 원인까지 추적할 수 있습니다. 4권이 지각 모델이 TBox를 위반하면 벌점을 받도록 신경망 예측기에 이런 종류의 손실을 붙일 때, 그 지도 신호의 품질은 정확히 여기서 측정된 그 품질입니다: 논리 자신의 언어로 말하는 손실은 논리를 전달하고, 그것을 근사하는 손실은 근사를 전달합니다.

핵심 용어

  • 축 정렬 박스(Axis-aligned box) — 중심 cc와 양의 반너비 o=ewo = e^{w}로 매개변수화된, dd개의 구간 [cioi,ci+oi][c_i - o_i,\, c_i + o_i]의 곱입니다; BoxEL 방식 모델들의 개념 모양입니다.
  • 아래/위 모서리(Lower / upper corner) — 벡터 l=col = c - ou=c+ou = c + o입니다; 이 장의 모든 포함, 교집합, 분리성 조건은 모서리에 대한 부등식입니다.
  • 포함 위반(모서리별 힌지)(Inclusion violation, per-corner hinge) — 손실 imax(0,lB,ilA,i+γ)2+imax(0,uA,iuB,i+γ)2\sum_i \max(0, l_{B,i} - l_{A,i} + \gamma)^2 + \sum_i \max(0, u_{A,i} - u_{B,i} + \gamma)^2이며, box(A)\mathrm{box}(A)가 모든 면에서 마진 γ\gamma를 두고 box(B)\mathrm{box}(B) 안에 들어앉을 때 정확히 0이 됩니다.
  • 제곱 힌지(Squared hinge) — 각 위반량을 제곱하면 그래디언트가 위반량에 비례하게 되므로, 대립하는 제약들은 L1 힌지가 허용하는 일정한 크기의 좌표별 상쇄에 갇혀 교착되는 대신 스프링처럼 풀려납니다.
  • 교집합적 닫힘(Intersectional closure) — 두 박스의 교집합이 다시 박스이며 모서리가 lI=max(lA,lB)l_I = \max(l_A, l_B), uI=min(uA,uB)u_I = \min(u_A, u_B)라는 성질입니다; 이 성질 덕분에 NF2는 공리가 언급하는 바로 그 대상을 정확히 훈련시킬 수 있습니다 [3].
  • 공허한 만족(Vacuous satisfaction) — 교집합 박스가 비어 있는(어느 축에서 lI,i>uI,il_{I,i} \gt u_{I,i}인) NF2 공리는 손실도 그래디언트도 0으로 기여한다는 관례입니다. C\varnothing \subseteq C가 논리적으로 참이기 때문입니다.
  • 중첩/놓친 축(Overlap / missed axis) — 축별 양 ovi=min(uA,i,uB,i)max(lA,i,lB,i)\mathrm{ov}_i = \min(u_{A,i}, u_{B,i}) - \max(l_{A,i}, l_{B,i})입니다; 박스는 어떤 ii에 대해 ovi<0\mathrm{ov}_i \lt 0일 때 정확히 서로소이므로, 분리성 훈련은 오직 가장 작은 중첩에만 힌지를 겁니다.
  • 탐침 간격(Probe gap) — gap(A,B)=maximax(lB,ilA,i,uA,iuB,i)\mathrm{gap}(A,B) = \max_i \max(l_{B,i} - l_{A,i},\, u_{A,i} - u_{B,i})이며, AABB 바깥으로 가장 심하게 튀어나온 축의 정도입니다; 탐침은 이 간격이 ε\varepsilon 이하일 때에만 ABA \sqsubseteq B를 받아들입니다.
  • 범프 벡터(Bump vector, Box²EL) — 같은 역할이라도 채움말에 따라 다르게 도착하도록 존재 제한의 원본에 더해지는, 개념별 벡터입니다. 역할당 하나의 이동이라는 문제에 대한 온톨로지 수준의 해법입니다 [4].
  • 역할 박스(Role box, Box²EL) — 역할의 원본과 목표를 단일 점 이동이 아니라 영역으로 나타내는, 머리/꼬리 한 쌍의 박스입니다 [4].

이 다음으로 이어지는 것

아직 풀리지 않은 부분은 그 공백에 이름을 붙였습니다: 원자적 포섭 관계에 대한 재현율은 필요하지만 충분하지 않으며, 충실함이 실제로 결판나는 곳은 구성자 집합입니다. 다음 장 TransBox와 mOWL은 그 문장의 두 절반 모두를 진지하게 받아들입니다. TransBox는 EL++ 개념 문법 전체에 대한 닫힘을 겨냥한 구성으로, 복합 개념이 운이 아니라 구성 그 자체에 의해 영역을 얻도록 합니다; 그리고 mOWL은 이 부(Part)가 줄곧 손으로 만들어 온 실험(온톨로지를 불러오고, 정규화하고, 기하학적 모델을 훈련시키고, 추론기에 대조하여 평가하는 일)을 SNOMED CT와 Gene Ontology 규모에서 표준적이고 재현 가능한 워크플로로 바꾸어 주는 도구입니다. 질문은 그대로 이어집니다: "기하가 TBox를 암기할 수 있는가"가 아니라 "기하가 논리를 계산하는가"입니다.


동반 코드: examples/neural/box_el.pyexamples/neural/el_embed.py와 동일한 15개의 정규형 공리 위에서 박스 모델을 훈련시키며(둘 다 정규화와 금본위 분류를 위해 2권의 examples/symbolic/el_completion.py를 임포트합니다), 단 하나의 프로세스 안에서 두 기하 모두에 대해 56쌍짜리 건전성 탐침을 실행하고, 위에서 인용한 정면 대결 표와 닫힘 전시, 분리성 검사를 인쇄합니다. 이 장의 모든 숫자를 재현하려면 examples/neural/에서 python3 box_el.py를 실행하십시오; 시드 0은 실행마다 출력이 바이트 단위로 동일하게 만들며, run()의 역량 검증 assert들은 인용된 어떤 주장이라도 더 이상 성립하지 않으면 프로세스를 실패시킵니다.