본문으로 건너뛰기

박스 대 공: 표현력 이야기

📍 현재 위치: Part II · 영역·기하 임베딩(Region and Geometric Embeddings) — 7장. 베타·확률 임베딩은 영역을 밀도와 맞바꾸어 부정(negation)을 손에 넣었습니다. 2부가 닫히기 전에, 이 부의 첫 두 도형인 공(ball)과 박스(box)는 이 부 전체를 출발시킨 연산, 곧 논리곱(conjunction)과 정면으로 마주해야 합니다.

2부는 이제 개념을 위한 세 가지 기하를 갖추었습니다. 손으로 배치한 공과 원뿔, 질의 경로를 따라 교차시키는 박스, 그리고 부정을 표현할 수 있는 베타(Beta) 밀도가 그것입니다. 이 장은 앞의 두 기하를 단 하나의 결정 가능한 기준 위에서 맞대결시킵니다. 여기에는 학습도, 손실도, 그래디언트도 없습니다. 오직 정확한 2차원 기하만 있으며, 모든 주장은 먼저 손으로 유도한 뒤 동반 모듈 boxes_vs_balls.py가 조밀한 격자 위에서 결정론적으로 검증합니다. 이 판정은 내년에 더 나은 옵티마이저가 뒤집을 수도 있는 벤치마크 점수가 아닙니다. 집합 패밀리의 닫힘 성질(closure property)이며, 영구적입니다.

쉽게 말하면

어두운 무대 위에 둥근 스포트라이트 두 개가 있고, 두 빛의 원이 겹치도록 조준되어 있다고 상상해 보세요. 가운데에 두 번 밝혀진 부분은 아몬드, 즉 렌즈 모양입니다. 이제 연출가가 스포트라이트 하나를 건네며 말합니다. 저 두 번 밝혀진 부분만, 더도 말고 덜도 말고 정확히 비추라고요. 불가능합니다. 둥근 빛줄기는 아몬드의 모서리를 어둠 속에 남기거나, 한 번만 밝혀진 바닥까지 빛을 흘립니다. 아몬드는 결코 원이 아니기 때문입니다. 그런데 연출가에게 둥근 빛줄기 대신 직사각형 마스킹 플래그를 주면 문제는 사라집니다. 두 직사각형의 빛이 겹치는 곳에서는 그 겹침 자체가 완벽한 직사각형이므로, 플래그 하나로 정확히 테두리를 잡을 수 있습니다. "개념 AND 개념"이 바로 그 겹침입니다. 직사각형은 AND에서 살아남고, 원은 그렇지 못합니다.

이 장에서 다루는 내용

  • 닫힘 기준: 개념이 영역이고 논리곱이 교집합이라면, 영역 패밀리가 교집합에 대해 닫혀 있는지가, 어떤 학습보다 먼저, 논리곱 개념을 정확히 표현할 수 있는지를 판가름합니다.
  • 렌즈의 유도: (0, 0)과 (2, 0)에 중심을 둔 반지름 1.5짜리 공 두 개에 대해, 겹침이 축 위에서 차지하는 구간과 (1, ±√1.25)에 놓인 두 모서리 점을 대수의 매 단계를 보이며 유도합니다.
  • 최소 포함 공: 삼각 부등식이 주는 하한, 두 부등식을 더해 얻는 포함 증명, 그리고 격자 검증: 중심 (1, 0), 반지름 √1.25 ≈ 1.1180, 공을 벗어나는 렌즈 점은 0개.
  • 좌표로 지목한 거짓 양성: 커밋된 점 p = (−0.1173, −0.0160)은 덮개 안에 있고 공 A 안에 있으면서 공 B의 중심에서 2.1174 떨어져 있습니다. 이어지는 면적 회계: 최선의 덮개 공의 60.56퍼센트가 기하학적으로 틀렸습니다.
  • 같은 시험대에 오른 박스: 꼭짓점 max/min 교집합이 좌표별로 정확함을 증명한 뒤, 4,000,000개 격자점 전부에서 소속 불일치 0으로 확인합니다.
  • 파라미터 장부: 공은 d+1개, 박스는 2d개의 수가 들고, 추가되는 d−1개의 수는 하나의 등방적 반지름 대신 d개의 독립적인 구간 제약을 사 줍니다.
  • 공을 위한 공정한 변론: 회전 불변성, 단일 스케일, 매끄러운 그래디언트. 닫힘이라는 사실은 절대적이지만 실용적 판정은 과제 상대적인 이유.

기준: 교집합에 대한 닫힘

이 부를 연 개념 읽기를 되새겨 봅시다. 학술 세계의 개체들은 Rd\mathbb{R}^d, 곧 dd개의 실수로 이루어진 목록들의 공간의 점이며, 여기서 dd는 임베딩 차원입니다(이 장 전체에서 d=2d = 2이므로 모든 것을 그림으로 그려 눈으로 확인할 수 있습니다). Student나 Professor 같은 개념은 영역(region), 곧 그 공간의 부분집합이고, 개체는 자신의 점이 그 영역 안에 떨어질 때 정확히 그 개념에 속합니다. 영역 패밀리(region family) F\mathcal{F}는 하나의 매개변수적 도형이 만드는 모든 영역의 집합입니다. 모든 공, 혹은 모든 축 정렬 박스처럼요. 모델이 앞으로 표현할 수 있는 모든 개념은 선택된 패밀리에서 뽑아야 합니다.

2권은 논리곱의 의미를 고정했습니다. 개념 CDC \sqcap D("C 그리고 D"라고 읽습니다)는 모든 해석에서 둘 모두에 속하는 개체들의 집합, 곧 집합 교집합 CIDIC^{\mathcal{I}} \cap D^{\mathcal{I}}를 지시합니다(기호 \cap는 두 피연산자 모두에 놓인 점들의 집합을 만듭니다). 따라서 논리곱의 영역은 강제됩니다. 두 피연산자 영역의 교집합이어야 합니다. 학술 세계는 이런 질문을 끊임없이 던집니다. "논문을 저술한 학생"은 논리곱 Student ⊓ ∃authored.Paper이고, 이를 기하학적으로 답하는 일은 두 영역을 교차시키는 일입니다 [1].

기준을 원리로 진술하면 이렇습니다. 모든 영역 쌍 X,YFX, Y \in \mathcal{F}(기호 \in는 "의 원소이다"라고 읽습니다)에 대해 교집합 XYX \cap Y가 다시 F\mathcal{F}의 원소일 때, F\mathcal{F}교집합에 대해 닫혀 있다(closed under intersection)고 말합니다. 그러면:

개념이 패밀리 F\mathcal{F}에서 뽑은 영역이고 논리곱이 교집합이라면, 모든 쌍에 대해 논리곱 개념이 정확히 표현 가능한 것은 F\mathcal{F}가 교집합에 대해 닫혀 있을 때, 그리고 오직 그때뿐이다.

두 방향 모두 짧습니다. F\mathcal{F}가 닫혀 있으면, 참 영역 XYX \cap Y는 그 자체로 패밀리의 일원이므로 모델은 그것을 저장하고, 다시 교차시키고, 여느 원자 개념처럼 넘겨줄 수 있습니다. 아무것도 잃지 않습니다. F\mathcal{F}가 닫혀 있지 않으면, 교집합이 패밀리 밖에 놓이는 X,YFX, Y \in \mathcal{F}가 존재합니다. 모델이 논리곱 대신 어떤 영역 ZFZ \in \mathcal{F}를 내놓든 집합으로서 ZXYZ \neq X \cap Y이므로, 둘을 가르는 증인 점이 있습니다. ZZ에는 있으나 XYX \cap Y에는 없는 점이라면 모델이 잘못 구성원이라 부르는 거짓 양성(false positive)이고, XYX \cap Y에는 있으나 ZZ에는 없는 점이라면 모델이 잘못 배제하는 거짓 음성(false negative)입니다. 이 오류는 데이터를 한 점도 보기 전에, 옵티마이저가 돌기 전에 존재합니다. 학습의 성질이 아니라 도형 카탈로그의 성질입니다. 닫힘이야말로 논리곱 질의 응답(conjunctive query answering)에 박스가 선택된 이유이고 [1], 박스 교집합을 격자(lattice)의 하한 연산(meet)으로 다룰 수 있는 이유이며 [2], 3부에서 살펴볼 온톨로지 임베딩 연구가 박스 쪽으로 이동한 이유입니다 [3]. 이 장의 나머지는 두 판정을 모두 손에 잡히게 만듭니다.

두 공이 만드는 렌즈

두 피연산자 영역을 좌표로 한 번에 고정합니다. boxes_vs_balls.py의 42–44행이 선언하는 그대로입니다. 중심 c\mathbf{c}와 반지름 rr을 갖는 (ball)은 중심에서 거리 rr 이내의 점들의 집합, B(c,r)={pR2:pcr}B(\mathbf{c}, r) = \lbrace \mathbf{p} \in \mathbb{R}^2 : \lVert \mathbf{p} - \mathbf{c} \rVert \le r \rbrace입니다. 여기서 이중 막대 \lVert \cdot \rVert는 유클리드 길이, 곧 성분 제곱합의 제곱근을 뜻합니다. 우리의 두 공은

A=B((0,0),1.5),B=B((2,0),1.5),A = B\big((0, 0),\, 1.5\big), \qquad B = B\big((2, 0),\, 1.5\big),

이므로 점 (x,y)(x, y)x2+y22.25x^2 + y^2 \le 2.25일 때 AA에, (x2)2+y22.25(x - 2)^2 + y^2 \le 2.25일 때 BB에 속합니다. 여기서 2.25=1.522.25 = 1.5^2입니다(거리 조건의 양변을 제곱하면 두 변 모두 음이 아니므로 집합을 바꾸지 않고 제곱근이 사라집니다).

첫째, 두 중심을 잇는 축, 곧 직선 y=0y = 0 위에서 겹침이 차지하는 범위입니다. 그 위에서 AA에 속하려면 x22.25x^2 \le 2.25가 필요합니다. 양변에 제곱근을 취하고, 제곱 부등식은 두 부호 모두를 허용함을 기억하면 1.5x1.5-1.5 \le x \le 1.5가 나옵니다. BB에 속하려면 (x2)22.25(x - 2)^2 \le 2.25, 곧 1.5x21.5-1.5 \le x - 2 \le 1.5가 필요하고, 세 부분 모두에 22를 더하면 0.5x3.50.5 \le x \le 3.5가 됩니다. 교집합의 점은 두 사슬을 동시에 만족해야 하므로, 축 위에서 겹침은

0.5    x    1.50.5 \;\le\; x \;\le\; 1.5

의 구간에 걸쳐 있고, 모듈은 이 구간을 LENS_X_MINLENS_X_MAX로 저장합니다(boxes_vs_balls.py 49–50행).

둘째, 두 경계 원이 교차하는 점들입니다. 경계 위에서는 부등식이 등식이 됩니다. x2+y2=2.25x^2 + y^2 = 2.25이고 (x2)2+y2=2.25(x - 2)^2 + y^2 = 2.25입니다. 첫 식에서 둘째 식을 빼면 y2y^2 항이 소거됩니다.

x2(x2)2=0.x^2 - (x - 2)^2 = 0.

(x2)2=x24x+4(x - 2)^2 = x^2 - 4x + 4로 전개해 대입하면,

x2x2+4x4  =  4x4  =  0x=1.x^2 - x^2 + 4x - 4 \;=\; 4x - 4 \;=\; 0 \quad\Longrightarrow\quad x = 1.

x=1x = 1x2+y2=2.25x^2 + y^2 = 2.25에 되돌려 넣으면 y2=2.251=1.25y^2 = 2.25 - 1 = 1.25이므로 y=±1.25±1.1180y = \pm\sqrt{1.25} \approx \pm 1.1180입니다(boxes_vs_balls.py 55–56행). 이 두 모서리 점을 q+=(1,+1.25)q_+ = (1, +\sqrt{1.25}), q=(1,1.25)q_- = (1, -\sqrt{1.25})라 부릅시다. 각 점은 중심 모두에서 거리 12+1.25=2.25=1.5\sqrt{1^2 + 1.25} = \sqrt{2.25} = 1.5에 있어 두 경계 원 위에 정확히 놓이므로, 둘 다 닫힌 교집합에 속합니다.

교집합 ABA \cap B렌즈(lens)입니다. 반지름 1.51.5인 두 원호가 모서리 q+q_+qq_-에서 만나며 둘러싸는 볼록 영역입니다. 그리고 렌즈는 공이 아닙니다. 직관적으로 말하면, 렌즈의 경계에는 원호들이 각을 이루며 만나는 두 모서리가 있지만 원은 어디서나 매끄럽게 휩니다. 면적을 이용한 물샐틈없는 논증은 두 절 아래에서 도착합니다. 커밋된 실행은 유도된 기하를 그대로 출력합니다.

1. two balls and their lens
A = ball((0.0, 0.0), r = 1.5) B = ball((2.0, 0.0), r = 1.5)
lens spans x ∈ [0.50, 1.50] on the axis; boundaries cross at (1.0, ±1.1180)
smallest enclosing ball: center (1.0, 0.0), radius √1.25 = 1.1180
grid check (2000×2000): lens points escaping the ball = 0
farthest lens point from the center: 1.1175 (= radius 1.1180 — the crossing points are diameter ends)

렌즈를 덮는 가장 작은 공

ABA \sqcap B를 표현하라는 요구를 받은 공 기반 모델은 공으로 답해야 합니다. 재현율(recall)에 가장 관대한 선택은 렌즈 전체를 담는 가장 작은 공입니다. 논리곱의 진짜 구성원이 하나도 배제되지 않도록요. 그 공은 두 단계로 정확히 찾을 수 있습니다. 반지름의 하한 하나, 그리고 그 하한에 도달하는 구성 하나입니다.

하한. 어떤 공 B(c,r)B(\mathbf{c}, r)이 렌즈를 담는다고 합시다. 그러면 두 모서리 q+q_+qq_-도 담습니다. 삼각 부등식(triangle inequality)은 임의의 세 점에 대해 두 점 사이의 직행 거리가 셋째 점을 거치는 거리들의 합을 넘지 않는다고 말합니다. 이를 q+q_+, c\mathbf{c}, qq_-에 적용하면:

q+q    q+c+cq    r+r  =  2r.\lVert q_+ - q_- \rVert \;\le\; \lVert q_+ - \mathbf{c} \rVert + \lVert \mathbf{c} - q_- \rVert \;\le\; r + r \;=\; 2r.

두 모서리는 좌표 x=1x = 1을 공유하므로 둘 사이의 거리는 높이의 차, q+q=21.25\lVert q_+ - q_- \rVert = 2\sqrt{1.25}입니다. 대입하면 21.252r2\sqrt{1.25} \le 2r, 따라서 r1.25r \ge \sqrt{1.25}입니다. 반지름이 1.251.1180\sqrt{1.25} \approx 1.1180 미만인 공은 렌즈를 덮을 수 없습니다.

구성. 이 하한은 모서리들의 중점 (1,0)(1, 0)에 중심을 두고 반지름이 정확히 1.25\sqrt{1.25}인 공으로 달성되며, 그 공이 렌즈 전체를 담는다는 증명은 세 줄의 대수입니다. (x,y)(x, y)를 임의의 렌즈 점이라 하면 두 소속 부등식이 모두 성립합니다.

x2+y2    2.25andx24x+4+y2    2.25,x^2 + y^2 \;\le\; 2.25 \qquad\text{and}\qquad x^2 - 4x + 4 + y^2 \;\le\; 2.25,

둘째 식은 (x2)2+y22.25(x-2)^2 + y^2 \le 2.25의 제곱을 전개한 것입니다. 두 부등식을 항별로 더하면:

2x24x+4+2y2    4.5.2x^2 - 4x + 4 + 2y^2 \;\le\; 4.5.

모든 항을 22로 나누면:

x22x+2+y2    2.25.x^2 - 2x + 2 + y^2 \;\le\; 2.25.

xx에 대해 완전제곱을 만듭니다. x22x+1=(x1)2x^2 - 2x + 1 = (x - 1)^2이므로 좌변은 (x1)2+1+y2(x-1)^2 + 1 + y^2이고, 양변에서 11을 빼면

(x1)2+y2    1.25(x - 1)^2 + y^2 \;\le\; 1.25

가 됩니다. 이는 정확히 "그 점이 (1,0)(1, 0)에서 거리 1.25\sqrt{1.25} 이내에 있다"는 진술입니다. 모든 렌즈 점이 이를 만족하므로 공 B((1,0),1.25)B\big((1,0), \sqrt{1.25}\big)는 렌즈를 담습니다. 하한에 의해 더 작은 공은 담지 못하니, 이 공이 바로 유일한 최소 포함 공(smallest enclosing ball)이고, q+q_+qq_-는 그 지름 하나의 양 끝입니다(boxes_vs_balls.py 65–66행). 여유가 어디로 갔는지 눈여겨보세요. 합에서 등호가 성립하려면 두 피연산자 부등식에서 동시에 등호가 성립해야 하는데, 그런 일은 두 모서리에서만 일어납니다. 즉 다른 모든 렌즈 점은 덮개의 엄격한 내부에 놓입니다. 덮개가 헐겁다는 첫 번째 조짐입니다.

이어서 모듈은 이 구성을 수치적으로 검증합니다. 덮개의 경계 정사각형 위에 2000×20002000 \times 2000개의 셀 중심(cell center) 격자를 깔고(격자 꼭짓점이 아니라 중심을 쓰므로 어떤 표본도 영역 경계 위에 정확히 놓이지 않습니다. boxes_vs_balls.py 102–110행), 4,000,0004{,}000{,}000개 점 전부에서 세 가지 소속을 모두 평가한 뒤, 덮개를 벗어나는 렌즈 점을 셉니다(boxes_vs_balls.py 149–158행):

X, Y, cell = _cell_grid(BEST_CENTER[0] - r, BEST_CENTER[0] + r, -r, r)
in_a = _sq_dist(X, Y, CENTER_A) <= RADIUS ** 2
in_b = _sq_dist(X, Y, CENTER_B) <= RADIUS ** 2
lens = in_a & in_b # membership in A ∩ B
ball = _sq_dist(X, Y, BEST_CENTER) <= r ** 2 # membership in best ball
lens_cnt, ball_cnt = int(lens.sum()), int(ball.sum())
lens_area_grid = lens_cnt * cell
ball_area_grid = ball_cnt * cell
escaped = int(np.count_nonzero(lens & ~ball)) # lens points outside ball
max_dist = float(np.sqrt(_sq_dist(X, Y, BEST_CENTER)[lens].max()))

실행은 escaped = 0을 보고합니다. 수백만 렌즈 표본 중 단 하나도 덮개 밖으로 떨어지지 않아 포함 증명과 일치합니다. 또한 중심에서 가장 먼 렌즈 표본이 거리 1.11751.1175에 있다고 보고하는데, 이는 반지름 1.11801.1180보다 격자 셀의 절반만큼 짧습니다. 격자는 21.252.23612\sqrt{1.25} \approx 2.2361의 폭을 20002000개 셀로 나누므로 셀당 약 0.00110.0011이고, 셀 중심은 모서리 점 위에 정확히 놓일 수 없으니 0.00050.0005의 간격은 예상되는 이산화 오차입니다. 192행의 역량 검증 assert는 두 사실 모두를 요구하므로, 이 포함은 실재하며 동시에 빈틈없이 팽팽합니다.

좌표로 지목한 거짓 양성

덮개는 렌즈를 담습니다. 날카로운 질문은 덮개가 그 밖에 무엇을 더 담느냐입니다. 여분의 점 하나하나가, 논리곱의 의미론은 배제하는데도 공 모델은 ABA \sqcap B의 구성원이라 불러야 하는 개체이기 때문입니다. 모듈은 시드가 고정된 탐색으로 그중 최악의 점을 사냥합니다. 덮개의 경계 정사각형에서 균등하게 20,00020{,}000개 표본을 뽑아 덮개 안에 있는 것만 남기고, 렌즈 조건을 가장 큰 여유로 위반하는 점을 고릅니다(boxes_vs_balls.py 164–174행):

rng = np.random.default_rng(0)
pts = rng.uniform([BEST_CENTER[0] - r, -r], [BEST_CENTER[0] + r, r],
size=(20_000, 2))
d_a = np.sqrt((pts[:, 0] - CENTER_A[0]) ** 2 + (pts[:, 1] - CENTER_A[1]) ** 2)
d_b = np.sqrt((pts[:, 0] - CENTER_B[0]) ** 2 + (pts[:, 1] - CENTER_B[1]) ** 2)
d_c = np.sqrt((pts[:, 0] - BEST_CENTER[0]) ** 2 + (pts[:, 1] - BEST_CENTER[1]) ** 2)
violation = np.maximum(d_a, d_b) - RADIUS # > 0 ⟺ outside the lens
violation[d_c > r] = -np.inf # keep only points inside the ball
i = int(np.argmax(violation))
fp: Point = (float(pts[i, 0]), float(pts[i, 1]))
fp_da, fp_db, fp_dc = float(d_a[i]), float(d_b[i]), float(d_c[i])

violation 줄은 렌즈 소속을 식 하나에 담습니다. 어떤 점이 렌즈에 속하는 것은 중심까지의 거리가 모두 1.51.5 이하일 때, 곧 두 거리 중 큰 쪽이 1.51.5 이하일 때이므로, max(dA,dB)1.5\max(d_A, d_B) - 1.5가 양수라는 것은 비소속의 증명서입니다. 생성기의 시드가 고정되어 있으므로(default_rng(0)) 매 실행이 동일한 점을 찾고, 그 점의 세 거리와 함께 출력합니다.

2. the ball's false positives (the price of forcing a lens into a ball)
exhibit p = (-0.1173, -0.0160) [seeded search, rng(0), 20000 samples]
|p − c_A| = 0.1184 vs 1.5 → inside A
|p − c_B| = 2.1174 vs 1.5 → OUTSIDE B ⇒ p ∉ lens A ∩ B
|p − c_ball| = 1.1174 vs 1.1180 → inside the enclosing ball
areas analytic | grid
lens A ∩ B 1.5487 | 1.5487
best ball 3.9270 | 3.9271
false-positive fraction (ball − lens)/ball = 0.6056 | 0.6056

세 줄을 작은 기소장으로 읽어 봅시다. 점 p=(0.1173,0.0160)p = (-0.1173, -0.0160)은 공 AA의 중심에서 겨우 0.11840.1184 떨어져 있어 AA 깊숙이 들어와 있습니다. 공 BB의 중심에서는 2.11742.1174 떨어져 있어 BB의 반지름 1.51.5를 한참 넘습니다. 논리곱의 한 피연산자를 정면으로 어기므로 렌즈에 속하지 않습니다. 그런데 덮개의 중심까지의 거리는 1.11741.1174로 덮개의 반지름 1.11801.1180의 아슬아슬한 안쪽이므로, 공 모델은 pABp \in A \sqcap B라고 단언합니다. 탐색은 덮개의 서쪽 가장자리, x=11.250.118x = 1 - \sqrt{1.25} \approx -0.118 부근으로 수렴했습니다. 덮개에서 BB의 중심으로부터 가장 먼, 위반이 가장 커지는 곳입니다. 189행의 assert가 이 증명서를 고정합니다. 덮개 안에 있으면서 피연산자 공 하나의 밖에 있다는 것을요.

면적으로 치르는 값: 60.56퍼센트

이름 붙은 점 하나는 존재를 증명합니다. 실패의 정직한 척도는 덮개의 얼마만큼이 틀렸는가입니다. 두 면적 모두 정확히 계산할 수 있고, 그 유도는 훌륭한 원 기하 연습이므로 전부 풀어서 보입니다.

x=1x = 1은 렌즈를 거울상인 두 반쪽으로 가릅니다. 현의 저쪽 편에서는 AA에 속한다는 것이 이미 BB에 속함을 함의합니다. x1x \ge 1인 점은 (x2)2x2(x-2)^2 \le x^2을 만족하는데, 전개하면 4x+40-4x + 4 \le 0이고 이는 정확히 x1x \ge 1이기 때문입니다. 따라서 그 점에서 BB의 중심까지의 거리는 AA의 중심까지의 거리 이하이고, AA에 속한다는 사실이 그 거리를 1.51.5 이하로 만들어 줍니다. 그러므로 현의 오른쪽 반렌즈는 정확히 AA에서 x=1x = 1 너머의 원의 활꼴(circular segment)이고, 전체 배치가 직선 x=1x = 1에 대해 반사 대칭이므로 왼쪽 반은 BB의 합동인 활꼴입니다.

활꼴의 면적은 부채꼴(sector) 빼기 삼각형입니다. AA의 중심에서 모서리 q+=(1,1.25)q_+ = (1, \sqrt{1.25})로 그은 반지름은 길이가 1.51.5이고 수평 성분이 11이므로, 양의 xx축과 이루는 각 α\alphacosα=1/1.5=2/3\cos\alpha = 1/1.5 = 2/3(밑변 나누기 빗변)을 만족합니다. 따라서 α=arccos(2/3)0.841069\alpha = \arccos(2/3) \approx 0.841069라디안입니다. 여기서 arccos\arccos는 역코사인, 곧 주어진 값을 코사인으로 갖는 각입니다. AA에서 각 α-\alpha부터 +α+\alpha까지 쓸어 낸 부채꼴은 넓이 πr2\pi r^2인 전체 원판의 비율 2α2π\tfrac{2\alpha}{2\pi}입니다:

sector  =  2α2ππr2  =  αr2  =  0.841069×2.25    1.89240,\text{sector} \;=\; \frac{2\alpha}{2\pi}\,\pi r^2 \;=\; \alpha\, r^2 \;=\; 0.841069 \times 2.25 \;\approx\; 1.89240,

곱셈 내내 α\alpha는 반올림하지 않고 옮깁니다(먼저 소수 넷째 자리로 반올림하면 표시되는 마지막 자릿수가 흔들립니다). AA의 중심, q+q_+, qq_-를 꼭짓점으로 하는 삼각형은 밑변이 두 모서리를 잇는 현으로 길이 21.252.23612\sqrt{1.25} \approx 2.2361이고, 높이는 중심에서 현까지의 거리인 11입니다:

triangle  =  12×21.25×1  =  1.25    1.11803.\text{triangle} \;=\; \tfrac{1}{2} \times 2\sqrt{1.25} \times 1 \;=\; \sqrt{1.25} \;\approx\; 1.11803.

빼면 활꼴의 면적은 1.892401.11803=0.774371.89240 - 1.11803 = 0.77437이고, 렌즈는 그런 활꼴 두 개입니다:

area(AB)  =  2×0.77437  =  1.54874    1.5487.\text{area}(A \cap B) \;=\; 2 \times 0.77437 \;=\; 1.54874 \;\approx\; 1.5487.

이는 모듈이 71–74행에서 계산하는 닫힌 형태, r=1.5r = 1.5와 중심 거리 d=2d = 2에 대한 2r2arccos ⁣(d2r)d24r2d22r^2 \arccos\!\big(\tfrac{d}{2r}\big) - \tfrac{d}{2}\sqrt{4r^2 - d^2}와 일치합니다. 덮개의 면적은 π×(1.25)2=π×1.25=3.9270\pi \times (\sqrt{1.25})^2 = \pi \times 1.25 = 3.9270입니다. 따라서 덮개에서 렌즈 밖에 놓인 면적의 몫, 곧 거짓 양성 비율(false-positive fraction)은

11.54873.9270  =  10.3944  =  0.6056.1 - \frac{1.5487}{3.9270} \;=\; 1 - 0.3944 \;=\; 0.6056.
해석적 계산조밀 격자 (4,000,000개 셀 중심)
렌즈 ABA \cap B 면적1.54871.54871.54871.5487
최소 포함 공 면적3.92703.92703.92713.9271
거짓 양성 비율0.60560.60560.60560.6056

격자 열은 셀을 세어 계산하고(면적은 154–156행, 비율은 176–179행), 해석적 열은 위의 공식으로 계산하며, 둘은 마지막 표시 자릿수에서 1 이내로 일치합니다(최선의 공 행은 3.92703.92703.92713.9271로 읽힙니다). 195–198행의 assert들은 0.010.01 이내의 일치와 비율에 대한 하한 0.50.5를 요구합니다. 가능한 최선의 공에서도 5분의 3 이상이 기하학적으로 거짓이고, "가능한 최선"이라는 말은 실제로 일을 하고 있습니다. 렌즈를 덮는 어떤 공도 반지름이 1.25\sqrt{1.25} 이상이므로 면적이 3.92703.9270 이상이고, 따라서 거짓 양성 면적이 3.92701.5487=2.37833.9270 - 1.5487 = 2.3783 이상입니다. 덮개가 더 엉성한 학습된 모델은 이보다 나빠질 뿐입니다. 공을 렌즈 안쪽에 들어가도록 줄이면 보장된 오류가 거짓 음성으로 바뀔 뿐입니다. 렌즈가 공이 아니므로 어느 한쪽의 오류는 피할 수 없습니다. 첫 절의 기준이 이제 숫자를 싣고 돌아온 것입니다. 이 면적 회계는 렌즈를 처음 그렸을 때 미뤄 둔 약속도 갚습니다. 렌즈 자신이 공이라면 렌즈를 담는 공이 되므로, 하한에 의해 반지름이 1.25\sqrt{1.25} 이상, 면적이 3.92703.9270 이상이어야 합니다. 그런데 실제 면적은 1.54871.5487이므로, 렌즈는 공이 아닙니다.

논리곱 아래에서 두 영역 패밀리를 비교하는 두 패널 도해. 왼쪽 패널: 원점과 그 오른쪽 두 단위 지점에 중심을 둔 반지름 1.5의 겹치는 두 원 A와 B. 아몬드 모양의 겹침인 렌즈가 음영으로 칠해져 있고, x가 1인 지점의 위아래 높이 ±1.118에 두 모서리 점이 표시되어 있다. 그 중점에 중심을 두고 반지름 1.118을 갖는 점선 원, 곧 최소 포함 공이 렌즈와 함께 거짓 양성으로 음영 처리된 넓은 주변 영역을 덮는다. 좌표 (−0.1173, −0.0160)의 전시된 거짓 양성 점 p가 점선 원의 왼쪽 가장자리 근처, 원 A의 안이자 원 B의 훨씬 밖에 표시되어 있고, 레이블이 거짓 양성 비율 0.6056을 보고한다. 오른쪽 패널: 겹치는 축 정렬 직사각형 A′과 B′. 그 겹침은 그 자체로 직사각형이며 정확히 음영 처리되어 있고, 아래 꼭짓점들의 최댓값과 위 꼭짓점들의 최솟값을 취하는 꼭짓점 산술이 주석으로 달려 있으며, 레이블이 4백만 점 격자에서 소속 불일치 0을 보고한다. 하단 각주가 두 패밀리를 대비한다. 공은 교집합에 대해 닫혀 있지 않고, 박스는 닫혀 있다. 같은 논리곱, 두 기하: 렌즈 A ∩ B를 덮는 최선의 공은 면적 기준 60.56퍼센트가 거짓 양성인 반면, 박스 교집합 A′ ∩ B′은 4백만 격자점 하나하나에서 정확하다. 저자가 AI의 도움을 받아 직접 제작한 원본 도해.

같은 시험을 정확히 통과하는 박스

이제 다른 패밀리에 동일한 시험을 치릅니다. Rd\mathbb{R}^d축 정렬 박스(axis-aligned box)는 좌표마다 하나씩 놓인 구간들의 곱입니다. 점 p\mathbf{p}가 아래 꼭짓점 lo\mathbf{lo}와 위 꼭짓점 hi\mathbf{hi}를 갖는 박스에 속하는 것은 11부터 dd까지의 모든 좌표 인덱스 ii에 대해 loipihiilo_i \le p_i \le hi_i일 때 정확히 그때입니다. 시험용 박스는 A=[1.5,1.5]×[1.0,1.0]A' = [-1.5, 1.5] \times [-1.0, 1.0]B=[0.5,3.5]×[1.0,1.0]B' = [0.5, 3.5] \times [-1.0, 1.0]입니다(×\times는 집합 곱으로, 첫째 좌표는 첫째 구간에서, 둘째 좌표는 둘째 구간에서 뽑습니다). 렌즈가 그랬듯 겹침이 xx축 위에서 같은 구간 [0.5,1.5][0.5, 1.5]에 걸치도록 골랐습니다.

닫힘 주장은 두 박스의 교집합이 다시 박스이며, 꼭짓점 산술(corner arithmetic)로, 곧 아래 꼭짓점들의 좌표별 최댓값과 위 꼭짓점들의 좌표별 최솟값으로 계산된다는 것입니다. 증명은 좌표당 동치 하나씩입니다. 실수 uu, aa, bb에 대해, max(a,b)\max(a, b)aabb 중 큰 쪽을 뜻할 때:

ua   and   ubumax(a,b).u \ge a \;\text{ and }\; u \ge b \quad\Longleftrightarrow\quad u \ge \max(a, b).

왼쪽에서 오른쪽으로: uu는 두 수 모두 이상이고, 특히 둘 중 큰 쪽 이상인데, 그 큰 쪽이 바로 max(a,b)\max(a, b)입니다. 오른쪽에서 왼쪽으로: max(a,b)\max(a, b) 자체가 aa 이상이고 bb 이상이므로, umax(a,b)u \ge \max(a, b)이면 \ge의 추이성(어떤 수가 둘째 수 이상이고 둘째 수가 셋째 수 이상이면 셋째 수 이상)에 의해 uau \ge aubu \ge b가 나옵니다. 상한에 대해서는 두 수 중 작은 쪽인 min\min으로 거울상 동치가 성립합니다. 둘을 모든 좌표 ii에 적용하면, 점이 ABA' \cap B'에 속하는 것은 각 ii에 대해

max ⁣(ailo,bilo)    pi    min ⁣(aihi,bihi)\max\!\big(a^{lo}_i,\, b^{lo}_i\big) \;\le\; p_i \;\le\; \min\!\big(a^{hi}_i,\, b^{hi}_i\big)

일 때 정확히 그때이고, 이는 그 꼭짓점들을 갖는 박스의 소속 조건 그대로입니다. 어떤 좌표에서 아래쪽 최댓값이 위쪽 최솟값을 넘으면 그 구간이 비고 교집합도 비는데, 이 역시 패밀리가 표현합니다(빈 박스). 격자(lattice) 이론의 용어로 교집합은 하한 연산(meet)이고 빈 박스는 바닥 원소(bottom element)입니다 [2]. 구현은 증명을 그대로 옮겨 적은 것으로, 좌표당 비교 두 번이므로 dd차원 구현의 실행 시간은 dd에 비례합니다. 커밋된 2차원 버전은 두 좌표를 모두 풀어서 씁니다(boxes_vs_balls.py 84–93행):

def box_intersection(a: Box, b: Box) -> Box:
"""The intersection of two axis-aligned boxes, computed in O(d).

A point p satisfies a_lo ≤ p ≤ a_hi AND b_lo ≤ p ≤ b_hi exactly when
max(a_lo, b_lo) ≤ p ≤ min(a_hi, b_hi), coordinate by coordinate — so the
intersection IS a box (possibly empty), with no approximation at all.
"""
lo = (max(a[0][0], b[0][0]), max(a[0][1], b[0][1]))
hi = (min(a[1][0], b[1][0]), min(a[1][1], b[1][1]))
return (lo, hi)

시험 쌍에 적용하면: 아래 꼭짓점 (max(1.5,0.5),max(1.0,1.0))=(0.5,1.0)(\max(-1.5, 0.5), \max(-1.0, -1.0)) = (0.5, -1.0), 위 꼭짓점 (min(1.5,3.5),min(1.0,1.0))=(1.5,1.0)(\min(1.5, 3.5), \min(1.0, 1.0)) = (1.5, 1.0)이므로 AB=[0.5,1.5]×[1.0,1.0]A' \cap B' = [0.5, 1.5] \times [-1.0, 1.0]입니다. 박스이며, 어디에도 근사 단계가 없습니다. 이어서 모듈은 앞서와 동일한 조밀 격자 규율을 적용하여, 합집합의 경계 박스에 놓인 2000×20002000 \times 2000개 셀 중심 하나하나에서, 계산된 교집합 박스의 소속이 "AA'에 속함 AND BB'에 속함"이라는 논리곱과 같은지 시험합니다(boxes_vs_balls.py 182–185행):

ibox = box_intersection(BOX_A, BOX_B)
Xb, Yb, _ = _cell_grid(BOX_A[0][0], BOX_B[1][0], BOX_A[0][1], BOX_A[1][1])
mismatches = int(np.count_nonzero(
_in_box(Xb, Yb, ibox) != (_in_box(Xb, Yb, BOX_A) & _in_box(Xb, Yb, BOX_B))))
3. boxes: intersection by corner arithmetic IS a box
A′ = [-1.5, 1.5] × [-1.0, 1.0]
B′ = [0.5, 3.5] × [-1.0, 1.0]
A′ ∩ B′ = [max lows, min highs] = [0.5, 1.5] × [-1.0, 1.0]
grid check (2000×2000 over the union's bounding box): membership mismatches = 0

4백만 개 점에서 불일치 0이며, 200행의 assert가 이를 지킵니다. 격자가 무엇을 입증하는지는 정확히 해 둡시다. 수학은 모든 점에 대해 한정하는 좌표별 동치로 이미 결판났고, 격자는 구현이 그 정리를 실현함을 검증합니다. 2권의 완성 규칙에서 오라클 검사가 맡았던 것과 같은 역할입니다. 공의 성적표가 "덮개의 0.6056이 거짓"이라 적힌 곳에서, 박스의 성적표는 "그 무엇의 0도 거짓이 아님"이라 적혀 있습니다. 이 비대칭이 이 장의 제목이 말하는 표현력 이야기이고, 다중 홉(multi-hop) 질의 엔진이 논리곱을 위해 박스를 선택한 이유입니다 [1]. 정확한 꼭짓점 교집합을 쓰는 엔진은 논리곱을 사슬로 이어도 기하학적 오류를 전혀 누적하지 않습니다.

d차원에서의 파라미터 장부

지금까지의 비교는 평면에서 살았지만 두 패밀리는 어느 차원에서든 정의되며, 파라미터를 세어 보면 박스의 힘과 비용이 모두 설명됩니다. Rd\mathbb{R}^d의 공은 중심 dd개의 수에, 등방적(isotropic)으로, 곧 모든 방향에 같은 크기로 적용되는 반지름 하나를 더해 d+1d + 1개의 파라미터입니다. 박스는 중심에 차원별로 별도의 반너비를 더한(동등하게는 아래 꼭짓점과 위 꼭짓점) 2d2d개의 파라미터입니다(boxes_vs_balls.py 124–129행):

def param_counts(d: int) -> tuple[int, int]:
"""(ball, box) parameter counts in ℝ^d. A ball is a center (d numbers)
plus ONE isotropic radius — the same extent in every direction — for
d + 1 parameters; a box is a center plus a per-dimension half-width, 2d
parameters, i.e. d independent interval constraints."""
return d + 1, 2 * d
차원 dd공: d+1d + 1박스: 2d2d박스의 추가 d1d - 1개 수가 사 주는 것
223344독립 구간 제약 2개 (공은 반지름 1개)
161617173232독립 구간 제약 16개
64646565128128독립 구간 제약 64개

오른쪽 열이 진짜 알맹이입니다. 박스는 독립적인 1차원 제약 dd개의 논리곱입니다. 좌표 1은 이 구간 안에, AND 좌표 2는 저 구간 안에, 각 구간을 따로따로 정할 수 있습니다. 모델의 좌표들이 속성을 인코딩하게 된다면, 박스는 정보 없는 구간을 넓게 벌려 "연차는 여기서 저기 사이, AND 논문 수는 이 선 위, AND 나머지는 무엇이든"을 조각해 낼 수 있습니다. 공은 그런 구조를 하나도 표현하지 못합니다. 단 하나의 부등식 pcr\lVert \mathbf{p} - \mathbf{c} \rVert \le r이 모든 좌표를 하나의 종합 거리로 묶어 버리므로, "이 원형(prototype) 근처, 모든 방향으로 균일하게"라고만 말할 수 있습니다. 같은 좌표별 독립성이 관계 패턴을 위한 박스 계산법에도 동력을 공급하는데, 거기서는 평행이동되고 크기가 조정된 박스들이 점 임베딩으로는 증명 가능하게 포착할 수 없는 추론 규칙을 담아냅니다 [4]. d=64d = 64에서 박스는 공의 6565개에 맞서 128128개의 수를 치릅니다. 개념당 대략 두 배의 메모리이고, 그 두 배의 예산이 사는 것이 바로 정확한 논리곱입니다.

공을 위한 공정한 변론

위의 판정이 한쪽으로 기운 것은 기준 자체가 한쪽만 재기 때문이므로, 정직함은 장부의 반대쪽 열을 요구합니다. 공에게는 실질적인 장점이 있습니다. 공은 회전 불변(rotation invariant)입니다. 소속이 오직 거리 pc\lVert \mathbf{p} - \mathbf{c} \rVert에만 의존하고 중심을 축으로 한 공간의 어떤 회전도 이를 바꾸지 못하므로, 공 모델은 어떤 좌표 방향도 특별 대우하지 않습니다. 박스는 축에 용접되어 있습니다. 박스를 45도 돌리면 어떤 박스로도 표현할 수 없는 마름모가 되고, "좌표 1이 좌표 2 이하"처럼 좌표들을 상관시키는 경계는 이 패밀리에게 보이지 않습니다. 축 정렬은 모델링 편향(bias)입니다. 학습된 기저가 의미 있는 방향들과 줄을 맞추리라는 말 없는 내기이며, 학습 목적함수의 어떤 것도 그 내기를 강제하지 않습니다. 공은 또한 해석 가능한 단일 스케일 하나만 지니고, 실용적인 어떤 영역 패밀리 못지않게 파라미터가 적으며, 경사 하강에 친절합니다. 부호 있는 거리 pcr\lVert \mathbf{p} - \mathbf{c} \rVert - r은 중심을 제외한 어디서나 매끄러워 어느 접근 방향에서도 유익한 그래디언트를 공급합니다. 엄격한(hard) 박스 소속은 면과 꼭짓점을 따라 꺾이는 평평한 지시 함수이고, 서로 떨어진 박스들은 그래디언트를 완전히 0으로 만듭니다. 이 실패가 문헌을 매끄럽게 완화된, 그리고 확률적인 박스 변형으로 밀어 갔습니다 [2].

그러므로 실용적 판정은 과제 상대적입니다. "이 원형 근처"라는 구조가 지배하고 논리곱에 무관심한 과제라면 절반의 비용으로 공이 더 나을 수 있습니다. 그러나 닫힘 논증은 과제 상대적이지 않고, 경험적이지 않으며, 더 나은 옵티마이저로 폐기할 수도 없습니다. 두 공의 교집합은 공이 아니고, 우리의 렌즈를 덮는 최선의 공은 면적 기준 60.56퍼센트가 거짓이며, 두 박스의 교집합은 박스이고 오류는 정확히 0입니다. 영역 패밀리를 고른다는 것은, 당신의 기하가 어떤 논리 연산을 거짓말 없이 수행할 수 있는지를 미리 고르는 일입니다.

아직 풀리지 않은 부분

이 장의 모든 것은 손으로 배치되었고, 그것이 이 장의 강점이자 정직한 한계입니다. 강점: (0.1173,0.0160)(-0.1173, -0.0160)의 거짓 양성은 패밀리에 관한 정리이고, 모든 공 모델 아래에 깔린 바닥이며, 어떤 양의 학습으로도 이길 수 없습니다. 한계: 이 바닥이 실전에서 얼마나 아픈지는 이 장이 말해 주지 않습니다. 실제 목적함수가 실제 온톨로지에 맞서 공들을 학습시키면, 수많은 경쟁 제약 아래에서 반지름은 늘어나고 중심은 떠밀립니다. 그때 논리곱 오류는 평범한 학습 오류에 삼켜질 수도, 고차원의 여유 공간에 가려질 수도, 아니면 기하가 예측한 바로 그 자리에서 드러날 수도 있습니다. 2권의 정규화된 TBox가 이 질문을 구체적으로 만들어 줍니다. 그 NF2 공리들은 A1A2BA_1 \sqcap A_2 \sqsubseteq B의 꼴을 갖는데(\sqsubseteq는 "에 포섭된다"라고 읽습니다. 논리곱의 모든 구성원이 BB의 구성원이라는 뜻입니다), A1A2A_1 \sqcap A_2를 정확히 표현하지 못하는 기하는 공리가 BB 안에 담겨 있다고 단언하는 바로 그 영역을 근사해야 합니다. 그 강제된 근사가 학습된 임베딩에서 측정 가능한 불건전성(unsoundness)으로 나타나는지는, 이 장이 예측만 할 수 있을 뿐 결판낼 수 없는 경험적 질문입니다. 그리고 이 기준은 앞으로 갈수록 양날입니다. 박스는 교집합에 대해서는 닫혀 있지만 합집합, 여집합, 회전에 대해서는 닫혀 있지 않으므로, 지금까지 만난 어떤 패밀리도 논리가 요구할 수 있는 모든 구성자(constructor)에 대해 닫혀 있지 않습니다 [3]. 닫힘은 연산자별 성질입니다. 기하를 고르는 일은 어떤 연산자가 정확하게 따라올지를 고르는 일이고, 그 경계를 어디까지 밀 수 있는지는 이 분야의 열린 설계 문제입니다.

왜 중요한가

이 장은 2부가 3부로 도는 경첩입니다. 신경-기호(neuro-symbolic) 프로그램은 논리 연산자의 기하학적 혹은 미분 가능한 대응물을 필요로 하고, 그 대응물이 연산자의 법칙을 흉내 내는 시늉이 아니라 실제로 지키기를 요구합니다. 교집합에 대한 닫힘은 그런 첫 번째 법칙이고, 원 기하와 격자로 검사할 수 있습니다. 벡터 공간에서의 논리곱 질의 응답이 박스를 선택한 것은 이 패밀리가 교집합에 대해 닫혀 있기 때문입니다 [1]. 발표된 시스템의 학습된 교집합 연산자가 근사하려는 명세(specification)인 정확한 꼭짓점 교집합을 쓰면, 논리곱을 사슬로 이어도 기하학적 오류가 누적되지 않습니다. 손실 0에 도달하는 것이 기하가 공리들의 진짜 모델임을 보증한다고 주장하는 온톨로지 임베딩의 건전성 논증은, 애초에 영역 패밀리가 공리들이 요구하는 것을 표현할 수 있다는 데 기대고 있습니다. 그것이 3부의 주제로 실어 나른 닫힘 논증입니다 [3]. 그리고 대수적 법칙 하나를 진술하고 커밋된 숫자로 기하를 그 법칙에 결정론적으로 시험하는 이 장의 방법은, 이 권의 나머지가 학습된 모델에 적용하는 탐침(probe)의 원형입니다. 4권이 논리를 미분 가능하게 만들 때 같은 규율이 더 큰 규모로 되돌아옵니다. 모든 부드러운(soft) 연산자는 자신의 엄격한(hard) 대응물에게, 어떤 법칙을 보존하고 어떤 법칙을 조용히 어기는지 해명할 의무를 집니다.

핵심 용어

  • 영역 패밀리(region family) — 하나의 매개변수적 도형이 만드는 모든 영역(모든 공, 모든 박스). 표현 가능한 모든 개념은 여기서 뽑아야 합니다.
  • 교집합에 대한 닫힘(closure under intersection) — 패밀리의 임의의 두 원소를 교차시켜도 다시 패밀리의 원소가 되는 성질. 박스에서는 성립하고(꼭짓점 산술), 공에서는 실패합니다(렌즈).
  • 렌즈(lens) — 겹치는 두 공의 교집합. 두 원호가 두 모서리에서 만나며 둘러싸는 볼록 영역이고, 공이 아닙니다.
  • 최소 포함 공(smallest enclosing ball) — 영역을 담는 최소 반지름의 공. 우리의 렌즈에서는 중심 (1,0)(1, 0), 반지름 1.251.1180\sqrt{1.25} \approx 1.1180이며, 최소성은 삼각 부등식으로, 포함은 두 부등식의 합으로 증명됩니다.
  • 기하학적 거짓 양성(geometric false positive) — 참 영역과 그 최선의 패밀리 근사 사이의 간극 때문에, 어떤 학습보다도 먼저 패밀리가 오분류하도록 강제되는 점. (0.1173,0.0160)(-0.1173, -0.0160)에서 전시되었고, 면적 비율은 0.60560.6056입니다.
  • 원의 활꼴(circular segment) — 원판에서 현 너머의 영역. 넓이 = 부채꼴 − 삼각형 = 현까지의 거리 hh에 대해 r2arccos(h/r)hr2h2r^2\arccos(h/r) - h\sqrt{r^2 - h^2}이며, 두 개가 렌즈를 이룹니다.
  • 꼭짓점 산술(corner arithmetic) — 아래 꼭짓점들의 좌표별 최댓값과 위 꼭짓점들의 좌표별 최솟값으로 계산하는 박스 교집합. 정확하며, 실행 시간은 차원에 선형입니다.
  • 등방성(isotropy) — 반지름 하나가 모든 방향에 똑같이 적용되는 공의 성질. 회전 불변성과 단일 스케일을 주는 대신 좌표별 구조를 포기합니다.
  • 파라미터 수 d+1d+12d2dRd\mathbb{R}^d에서 공 대 박스의 비용. 박스의 추가 d1d - 1개의 수가 dd개의 독립 구간 제약을 사 줍니다.

이 다음으로 이어지는 것

이 장은 영역들을 손으로 배치하고, 그 도형들이 무엇을 할 수 있고 무엇을 할 수 없는지 증명했습니다. 다음 장 EL 임베딩은 그 배치를 경사 하강법에 넘깁니다. ELEm 구성은 2권의 실제 TBox의 각 정규형을 공들 위의 기하학적 손실로 바꿉니다. NF1은 공의 포함을 요구하고, NF3와 NF4는 존재 한정을 역할별 평행이동으로 실어 나르며, 서로소성(disjointness)은 공들을 밀어 떼어 놓고, 논리곱인 NF2는 이 장이 공은 정확히 해낼 수 없다고 증명한 바로 그것을 공에게 요구합니다. 학습은 낮지만 0이 아닌 손실에 도달하고, 그다음 탐침이 시작됩니다. 충족 가능한 개념들의 모든 순서쌍에 대해, 학습된 기하는 2권의 여덟 개 함의된 포섭을, 그리고 오직 그것만을 재현할까요? 이 장은 기하가 어디서 휘어질지에 대한 예측을 이미 제출했습니다. 다음 장이 그 실험을 실행합니다.


동반 코드: examples/neural/boxes_vs_balls.py에 이 장의 모든 구성이 담겨 있습니다. 주석 속 렌즈 상수와 그 유도(42–74행), 꼭짓점 산술 교집합(84–93행), 셀 중심 격자(102–110행), 파라미터 수(124–129행), 그리고 역량 검증 assert를 갖춘 전체 검증(135–200행)까지입니다. python3 examples/neural/boxes_vs_balls.py를 실행하면 여기 인용된 모든 숫자를 바이트 단위로 재현할 수 있으며, 실행은 다음으로 끝납니다: SUMMARY boxes_vs_balls: ball_radius=1.1180 fp_point=(-0.1173,-0.0160) fp_ratio=0.6056 lens_area=1.5487 ball_area=3.9270 box_mismatches=0.