쌍곡 임베딩: 곡률 공간의 계층
📍 현재 위치: 3부 · 온톨로지 임베딩 — 11장. TransBox와 mOWL은 EL++ 공리를 평평한 공간의 영역으로 임베딩하는 도구 상자를 완성했습니다; 이 장은 더 급진적인 질문을 던집니다: 만약 공간 자체가 위계에 맞지 않는 모양이라면 어떨까요?
지금까지의 모든 온톨로지 임베딩은 그 공간에 사는 대상을 바꾸어 왔습니다: 점은 상자, 공, 그리고 이동된 영역이 되었지만, 그 바탕이 되는 공간은 여전히 , 즉 보통의 평평한 유클리드 공간이었습니다. 그러나 학계 세계, 그리고 SNOMED CT, Gene Ontology, WordNet에 담긴 가장 깊은 구조는 is-a 위계이며, 위계는 곧 트리입니다. 트리는 평평한 공간이 도무지 따라잡을 수 없는 성장률을 지닙니다: 세대가 하나 늘어날 때마다 노드 수는 곱해지는 반면, 유클리드 공의 방은 반지름에 대해 오직 다항식적으로만 늘어납니다. 이 장은 그 부조화를 계수 논증으로 정밀하게 밝힌 다음, 반지름에 대해 방이 지수적으로 늘어나는 공간인 푸앵카레 공(Poincaré ball)을 소개하고, 그 거리 함수를 해독하고 미분하며, 그 안에서 훈련시키는 리만 경사 하강법을 유도하고, 똑같이 작은 차원 에서 학계 is-a 트리에 대한 커밋된 정면 대결을 실행합니다: 손실도 같고, 시드도 같고, 일정도 같으며, 오직 기하학만 다릅니다.
확장된 가족 나무 전체를 둥근 탁자 위에 그린다고 상상해 보십시오. 시조가 되는 조상을 한가운데 두고, 그 자녀들을 그 주위의 고리에, 손주들을 다시 그 바깥 고리에 둡니다. 각 고리는 그 앞 고리보다 대략 두 배 더 많은 사람을 담아야 하지만, 각 고리의 길이는 그 앞 고리보다 조금밖에 길어지지 않으므로, 다섯 번째 세대쯤이면 이름들이 서로 겹치기 시작하고 여덟 번째 세대쯤이면 아예 읽을 수 없게 됩니다. 이제 같은 나무를, 자가 가장자리로 미끄러질수록 줄어드는 마법의 원반 위에 그려 보십시오: 가장자리 근처의 탁자 위 1센티미터는 "진짜" 거리로는 1마일에 해당한다고 칩시다. 가장자리 근처에는 사실상 무한한 공간이 있으므로, 모든 세대는 진짜 거리로 따졌을 때 언제까지나 필요한 만큼 넉넉한 고리를 얻게 됩니다. 푸앵카레 공은 바로 그 마법의 원반을 수학적으로 정확하게 만든 것이며, 그 안에서 임베딩을 훈련한다는 것은 매 단계마다 줄어드는 자를 고려에 넣은 채로 경사 하강법을 수행한다는 뜻입니다.
이 장에서 다루는 내용
- 정직하게 수행한 계수 논증 — 진 트리는 깊이 에서 개의 노드를 가지며, 패킹 경계(packing bound)는 반지름 인 유클리드 공이 오직 다항식 개수만큼의 잘 분리된 점만을 담을 수 있음을 보여 주므로, 깊은 트리의 평평한 임베딩은 왜곡이나 차원 중 하나로 대가를 치러야 합니다; 쌍곡 공간의 방은 처럼, 즉 트리와 같은 비율로 늘어납니다.
- 공식에 앞서 해독되는 푸앵카레 공 — 경계 근처에서 거리를 부풀리는 계량 인자 를 지닌 열린 단위 공이며, 모든 조각에 이름이 붙은 닫힌 형태의 거리 를 다루며, 중심에서와 가장자리에서 직접 검산합니다.
- 미분된 거리 — 에 대한 완전한 연쇄 법칙 유도이며, 모든 대수적 단계를 보여 주고, 짝이 되는 코드가 실제로 계산하는 바로 그 공식에 정확히 도달합니다.
- 유도된 리만 SGD(stochastic gradient descent, 확률적 경사 하강법) — 공 자신의 계량 아래에서의 최급강하: 유클리드 그래디언트를 로 다시 스케일링하고, 모든 점을 열린 공 안쪽에 붙들어 두는 투영 안전장치를 더합니다.
- 에서의 커밋된 정면 대결 — 22개 노드로 이루어진 학계 위계를 동일한 손실, 시드, 음성 샘플, 일정으로 두 번 임베딩하며, 공이 순위 상관 대결에서 이기고 트리를 반지름 방향으로 정렬해 내는데, 평균 노름은 깊이에 대해 엄밀히 증가합니다.
- 낮은 차원이 요점인 이유 — 2차원이면 이 장이 실제 배치를 그대로 그릴 수 있으며, 이 분야의 결과는 저차원 쌍곡 임베딩이 훨씬 더 고차원인 유클리드 임베딩과 위계 표현에서 맞먹는다는 것입니다.
- 쌍곡 함의 원뿔(hyperbolic entailment cone) — 2부의 영역을 휘어진 공간 안에 다시 세워, 기하학과 포섭 사이의 원을 닫습니다.
- 아직 풀리지 않은 부분 — 지금까지의 모든 모델은 각 노드를 표(table) 조회로 임베딩하는데, 그래프의 배선은 그 자신만의 인코더를 가질 자격이 있으며, 이는 4부를 엽니다.
계수 논증: 트리는 평평한 공간을 넘어선다
트리가 얼마나 빨리 자라는지부터 시작해 봅시다. 진 트리(모든 내부 노드가 개의 자식을 갖는 트리로, 글자 는 분기 계수(branching factor)입니다)에서 루트는 깊이 에 홀로 앉아 있고, 깊이 의 자식 수는 개, 그 자식들의 수는 개이며, 일반적으로 깊이 (글자 는 루트로부터 센 세대 수입니다)는 개의 노드를 담습니다. 성장은 깊이에 대해 지수적입니다: 세대가 하나 늘 때마다 인구는 곱해집니다. 소박한 학계 위계조차 잎(leaf) 부분에서는 이런 식으로 행동합니다: 이 위계의 다섯 세대는 하나의 루트에서 시작해 가장 깊은 세대인 여섯 개의 노드(개념 Dean과 다섯 명의 개인)에 이르며, SNOMED CT 같은 실제 온톨로지는 수십만 개의 개념에 걸쳐 십여 세대 깊이로 뻗어 있습니다.
이제 평평한 공간이 얼마만큼의 방을 내주는지 물어봅시다. 모든 변(edge)의 길이가 대략 이 되도록 트리를 임베딩한다고 합시다; 그러면 깊이가 최대 인 모든 노드는 루트의 상(image)을 중심으로 한 반지름 의 공 안에 들어앉고, 서로 다른 노드들은 어떤 최소 거리, 이를테면 적어도 만큼은 떨어져 있어야 합니다, 그렇지 않으면 임베딩이 그 노드들을 붕괴시킨 셈입니다. 그러므로 진짜 질문은 패킹(packing) 질문입니다: (개의 좌표를 지닌 유클리드 공간이며, 는 임베딩 차원입니다) 안의 반지름 인 공에는, 모든 쌍별 거리를 적어도 로 유지하면서 몇 개의 점이 들어갈 수 있을까요?
그 경계는 부피를 비교하는 데서 나오며, 모든 단계는 초보적입니다. 그런 점들을 이라 하고, 개수는 개라 합시다(여기서부터 이 장 전체에서 는 벡터 의 보통의 유클리드 노름, 즉 그 직선 길이이므로, 는 두 점 사이의 직선 거리입니다). 각 주위에 반지름 인 작은 공 을 그립니다. 이 작은 공들 중 어느 둘도 내부 점을 공유할 수 없습니다: 만약 어떤 점 가 와 둘 다의 내부에 있다면, 삼각 부등식(triangle inequality, 우회로가 직행로보다 짧을 수 없다는 규칙)에 의해 이 성립하여, 분리 조건과 모순됩니다. 각 작은 공은 또한 확장된 공 안에 통째로 들어 있는데, 그 중심이 원점으로부터 이내에 있고 반지름이 이기 때문입니다. 에서 반지름-인 공의 부피는 오직 에만 의존하는 상수 에 대해 이므로, 반지름 인 개의 서로소인 공이 반지름 인 하나의 공 안에 들어맞으려면 다음이 강제됩니다
평평한 공간의 용량은 반지름에 대해 다항식적입니다: 고정된 차원 에서, 반지름 인 공은 잘 분리된 점을 최대 개까지만 담습니다. 이를 트리가 요구하는 개의 노드와 맞세우고 로그를 취해 보면: 변 길이가 단위이고 분리 거리도 단위인, 깊이 의 임베딩은 를 필요로 하며, 이는 곧
즉 트리의 깊이에 대해 거의 선형으로 늘어나는 차원을 뜻합니다. 구체적인 숫자들은 평면() 안의 이진 트리()에서 이 압박을 생생하게 보여 줍니다:
| 깊이 | 트리 노드 수 | 평평한 공간의 용량 | 쌍곡 둘레 |
|---|---|---|---|
깊이 에 이르면 이진 트리는 사실상 평면을 다 써 버리고, 깊이 에 이르면 반지름- 원판이 담을 수 있는 것보다 예순 배나 더 많은 분리된 점을 요구합니다. 무언가는 굽혀야 하며, 후보는 오직 둘뿐입니다: 차원 를 올리거나(파라미터가 곱절로 늘어납니다), 아니면 거리가 압축되도록 놓아두어 서로 다른 노드들이 몰려 붙게 하는 것인데, 이것이 바로 왜곡(distortion), 즉 그래프 거리와 임베딩 거리 사이의 측정된 간극입니다. 이 둘 사이의 트레이드오프는 정확하게 만들 수 있으며, 정밀한 정리들은 패킹 경계가 밑그림으로 그리는 것과 똑같은 이야기를 합니다: 평평한 공간은 트리에 대해 대가를 치르는데, 차원으로 치르든 충실도로 치르든, 그 대가는 깊이와 함께 커집니다 [1].
표의 마지막 열이 탈출구입니다. 쌍곡 평면(hyperbolic plane), 즉 일정한 음의 곡률을 가진 2차원 공간에서는, 반지름 인 원의 둘레가 이 아니라 인데, 여기서 는 쌍곡 사인(hyperbolic sine)입니다(곧 쓰이게 될 두 자매 함수는 쌍곡 코사인(hyperbolic cosine) 와 쌍곡 탄젠트(hyperbolic tangent) 입니다); 이 클 때 이는 대략 이 되어, 반지름에 대해 지수적입니다. 차원에서 쌍곡 부피는 처럼 늘어납니다. 트리의 인구와 쌍곡 공의 방은 같은 비율로 늘어나므로, 어떤 깊이의 트리라도 변의 길이가 정직하고 노드들이 정직하게 분리된 채로 쌍곡 평면에 임베딩됩니다: 세대 는 그저 에 비례하는 반지름의 원을 차지하며, 그 원의 길이는 지수적으로 큽니다. 쌍곡 공간은, 바로 이런 정확한 의미에서, 트리의 연속적인 기하학입니다 [2]. 남은 일은 그것의 계산 가능한 모델을 만드는 것입니다.
푸앵카레 공, 공식에 앞서 해독하다
우리가 계산을 수행할 모델은 푸앵카레 공(Poincaré ball)입니다: 점들의 집합으로서는 전혀 이국적이지 않으며, 그저 열린 단위 공일 뿐입니다
즉 유클리드 길이가 1보다 작은 모든 벡터들입니다("열려 있다"는 것은 경계 구면 이 제외된다는 뜻입니다). 이국적인 것은 자(ruler) 쪽입니다. 이 공은 리만 계량(Riemannian metric), 즉 모든 점에 국소적인 길이 개념을 부여하는 규칙을 지니며, 여기서 그 규칙은 등각(conformal)입니다: 점 에서, 모든 무한소 유클리드 길이는 다음 인자만큼 곱해집니다
이는 모든 방향에서 동일한 인자입니다(그 방향 독립성이 바로 "등각"이 뜻하는 바입니다; 행렬로 쓰면 그 계량은 , 즉 항등 행렬에 스칼라를 곱한 것입니다). 원점에서는 로, 고정된 보정 상수입니다. 이 됨에 따라 분모 는 0으로 가고 는 폭발합니다: 가장자리 근처에서는, 머리카락 굵기만 한 유클리드 이동이 거대한 쌍곡 여정이 됩니다. 경로의 길이는 그 경로를 따른 의 적분이며, 두 점 사이의 거리는 그 둘을 잇는 최단 경로(측지선, geodesic)의 길이입니다. 가장자리 자체는 모든 곳으로부터 무한히 멀리 떨어져 있습니다; 유한해 보이는 원반이 무한한 세계를 담고 있는 것입니다.
위에서 약속한 지수적인 방은 바로 이 인자로부터 곧장 흘러나옵니다. 원점을 중심으로 하는 유클리드 반지름 의 원을 생각해 봅시다. 그 쌍곡 반지름 는 중심으로부터 자로 보정된 거리이며, 계량으로부터 직접 계산할 수 있습니다. 곧은 반지름 선분이 중심에서부터의 최단 경로입니다: 원점에서 그 점까지의 어떤 경로 든 그 노름을 에서 까지 움직여야 하고, 노름은 경로 자체가 움직이는 것보다 빠르게 변할 수 없으며(의 변화율은 속도의 반지름 방향 성분으로, 많아야 그 전체 길이 입니다), 계량 인자는 오직 노름에만 의존하므로, 모든 경로의 쌍곡 길이는 적어도 아래의 반지름 방향 적분만큼이며, 이 값은 반지름 선분이 달성합니다. 그 적분을 부분분수분해()로 계산하면:
여기서 은 역쌍곡탄젠트(inverse hyperbolic tangent)입니다: 을 에 대해 풀면 을 얻고, 따라서 이 되어 위 적분과 일치합니다. 이를 뒤집으면 입니다. 원의 쌍곡 둘레는 반지름 에서의 계량 인자에 그 유클리드 둘레를 곱한 것입니다:
중간 단계에서는 를, 마지막 단계에서는 배각 항등식 를 사용했습니다. 두 항등식 모두 지수 정의로부터 한 줄이면 나옵니다: 이고, 이를 로 나누면 첫 번째 항등식이 나옵니다; 가 두 번째 항등식입니다. 이는 정확히 표의 열입니다: 모델이 기하학을 실현하는 것입니다.
임의의 두 점 사이에서도 일반적인 측지선을 따라 똑같은 적분을 수행하면 닫힌 형태의 거리가 나오며 [2], 이것이 바로 이 장의 나머지 모든 것이 미분하게 될 공식입니다:
쓰기 전에 모든 조각에 이름을 붙여 봅시다. 분자 는 두 점 사이의 제곱된 유클리드 간극의 두 배, 즉 가공하지 않은 평평한 공간의 분리 거리입니다. 분모에 있는 각 인자 와 는 각 점이 가장자리로부터 얼마나 떨어져 있는지를 재며, 점이 중심에 있을 때 1이고 경계에서는 0입니다; 이는 계량 인자 가 나누는 것과 같은 양들입니다. 바깥 함수 는 역쌍곡코사인(inverse hyperbolic cosine)으로, 인 인자에 대해 로 정의되며, 에서 이고 가 클 때는 처럼 자랍니다. 그러므로 거리는 그 분수가 작을 때(점들이 서로 가깝고 둘 다 가장자리에서 멀 때) 작고, 분수가 폭발할 때(점들이 가장자리 가까이에 있어 분모가 사라질 때) 로그적으로 자랍니다. 짝이 되는 구현은 그대로 옮겨 적은 것입니다 (hyperbolic.py 112–121번째 줄):
def poincare_dist(U: np.ndarray, V: np.ndarray) -> np.ndarray:
"""Row-wise Poincaré distance
d(u, v) = arcosh( 1 + 2·‖u−v‖² / ((1−‖u‖²)(1−‖v‖²)) ).
``arccosh`` is NumPy's inverse hyperbolic cosine; the argument is clipped
to ≥ 1 so that u = v gives exactly 0 despite rounding."""
uu = np.sum(U * U, axis=-1)
vv = np.sum(V * V, axis=-1)
dd = np.sum((U - V) ** 2, axis=-1)
gamma = 1.0 + 2.0 * dd / np.maximum((1.0 - uu) * (1.0 - vv), _EPS)
return np.arccosh(np.maximum(gamma, 1.0))
두 가지 특수한 경우가 이 공식을 블랙박스에서 하나의 계측 도구로 바꿔 줍니다. 원점 근처에서 이 공은 그저 두 배로 늘어난 유클리드 평면입니다. 와 가 둘 다 아주 작다면, 두 분모는 모두 대략 이 되어, 그 인자는 가 됩니다. 작은 에 대해 쌍곡 코사인은 로 전개되므로, 작은 에 대해 입니다; 를 대입하면 , 즉 유클리드 거리에 원점의 계량 인자 를 곱한 값을 얻습니다. 반지름을 따라서는 거리가 정확한 닫힌 형태를 가집니다. 이고 이라 둡시다. 그러면
따라서 이고,
이는 정확히 우리가 계량 자체로부터 적분해 낸 반지름 방향 거리 이므로, 이 닫힌 형태는 원리로부터 직접 계산된 그 한 가지 경우에서 독립적인 검산을 통과합니다. 일 때 이는 처럼 행동합니다: 유클리드 반지름의 마지막 얇은 한 조각이 무한정 늘어난 쌍곡 반지름을 담고 있는 것입니다. 다음 검산들은 poincare_dist 자체로 계산된 것이며, 평평한 공간에는 없는 위치 의존성을 보여 줍니다: 동일한 유클리드 간극 이 중심 근처에서는 의 비용이 들지만 가장자리 근처에서는 의 비용이 듭니다.
| 점쌍 | 유클리드 | 푸앵카레 |
|---|---|---|
| 과 | ||
| 과 | ||
| 과 | ||
| 과 | ||
| 과 |
마지막 행은 트리 임베딩 메커니즘을 축소판으로 보여 줍니다: 평평하게 읽으면 두 단위 떨어져 있다고 할 두 점이, 쌍곡적으로는 열다섯 단위나 떨어져 있는데, 그 둘을 잇는 측지선이 내부를 관통해 뻗어야 하기 때문입니다. 가계도의 양쪽에 있는 사촌 잎들은 가장자리 가까이에, 즉 유클리드로는 가깝게 자리 잡을 수 있지만, 쌍곡적으로는 루트를 거치는 그 긴 경로가 요구하는 만큼 멀리 떨어져 있을 수 있습니다.
거리를 미분하다, 모든 단계를 보이며
훈련은 점들을 움직여 거리를 줄이거나 늘리므로, 우리에게는 , 즉 인자 중 하나에 대한 거리의 그래디언트가 필요합니다. 코드가 쓰는 약어를 도입합니다: 와 (두 개의 가장자리-근접도 인자)이며, 를 의 인자라 합시다,
첫 번째 단계: 바깥쪽 도함수. 로부터, 양변을 에 대해 미분하면: 입니다. 로부터 이 나오므로(이므로 양수입니다),
두 번째 단계: 안쪽 도함수. 는 분자 를 통해서도, 그리고 를 통해서도 에 의존합니다. 제곱 노름의 그래디언트는 이고, (두 번째 점을 원점에 둔 같은 사실로부터) 이므로, 입니다. 에 곱의 법칙을 적용하면 다음이 나옵니다
세 번째 단계: 대괄호 안을 정리하기. 와 (은 내적입니다)를 사용해 그것을 전개하면:
항들은 서로 상쇄되고, 항들은 로 접혀 들어갑니다. 네 번째 단계: 둘을 연쇄시키기. 첫 번째부터 세 번째 단계까지를 곱하면,
이것이 바로 발표된 푸앵카레 거리의 그래디언트입니다 [2]. 이므로, 에 대한 그래디언트는 두 점을 맞바꾼(, ) 것과 똑같은 식이며, 두 번째 유도는 필요하지 않습니다. 짝이 되는 파일은 둘 다를 손으로 계산하며, 어디에도 오토그래드(autograd)는 쓰이지 않고, 코드는 박스로 둘러싸인 그 공식을 그대로 옮긴 것입니다 (hyperbolic.py 146–155번째 줄):
root = np.sqrt(np.maximum(gamma * gamma - 1.0, _EPS)) # √(γ²−1)
# ∂d_j/∂u = 4/(β_j·√(γ_j²−1)) · [ (‖v_j‖² − 2⟨u,v_j⟩ + 1)/α² · u − v_j/α ]
grad_u = (4.0 / (beta * root))[:, None] * (
((vv - 2.0 * uv + 1.0) / alpha ** 2)[:, None] * u - V / alpha)
# ∂d_j/∂v_j = 4/(α·√(γ_j²−1)) · [ (‖u‖² − 2⟨u,v_j⟩ + 1)/β_j² · v_j − u/β_j ]
grad_v = (4.0 / (alpha * root))[:, None] * (
((uu - 2.0 * uv + 1.0) / beta ** 2)[:, None] * V
- np.outer(1.0 / beta, u))
제곱근 아래의 _EPS 바닥값은 정확히 한 곳에서 중요해집니다: 일 때 이고 이 되어, 거리는 (마치 에서의 처럼) 뾰족한 모서리를 갖게 되고, 가공하지 않은 공식은 0으로 나누게 됩니다. 그 바닥값은 그 모서리를 크지만 유한한 그래디언트로 바꿔 주는데, 이는 표준적인 수치적 안전장치입니다.
리만 SGD: 공 자신의 자 아래에서의 최급강하
1권의 경사 하강법 장은 이 최급강하 방향임을 증명했지만, 그 증명은 은근히 평평한 자를 가정하고 있었습니다: 그것은 유클리드 단위 길이를 가진 후보 걸음들을 비교했습니다. 푸앵카레 공에서는 자가 유클리드 자의 배이므로, "최급"이라는 개념은 다시 유도되어야 하며, 그 답은 정밀하고 아름다운 방식으로 달라집니다.
파라미터 점 에 의존하는 손실을 이라 하고, 그 점에서의 보통의 유클리드 그래디언트, 즉 편도함수들의 벡터를 이라 합시다. 그러면 작은 걸음 는 손실을 1차로 만큼 변화시킵니다(이 테일러 사실은 기하와 무관합니다; 도함수는 자에 신경 쓰지 않습니다). 기하가 바꾸는 것은 제약 조건입니다. 공정한 비교는 그 걸음의 길이를 공간이 측정하는 대로 고정합니다: 공의 계량은 걸음 에 길이 를 부여하므로, 공의 자로 잰 단위 걸음은 길이 인 유클리드 걸음입니다. 그 집합에 대해 1차 변화량을 최소화합시다. 코시–슈바르츠 부등식(Cauchy–Schwarz inequality)에 의해,
등호는 정확히 가 방향을 가리킬 때 성립합니다. 그러므로 최급강하 방향은 바뀌지 않지만(등각 계량에서는 재스케일링이 모든 방향에서 동일하므로, 승자를 회전시킬 수 없습니다), 달성 가능한 계량 길이 단위당 속도는 이며, 가 큰 가장자리 근처에서는 감쇠됩니다. 이 두 사실을 함께 담아내는 벡터가 리만 그래디언트(Riemannian gradient) 인데, 이는 어떤 걸음과의 계량 내적도 1차 변화량을 재현해 내는 유일한 벡터로 정의됩니다: 모든 에 대해 입니다. 이므로 이는 모든 에 대해 로 읽히고, 모든 것에 대해 동일한 내적을 갖는 두 벡터는 서로 같으므로,
말로 풀면: 리만 SGD는 그래디언트를 역계량으로 다시 스케일링한 유클리드 SGD이며, 여기서는 계량이 등각이기 때문에 그 스칼라가 입니다 [2]. 이 재스케일링 인자는 원점에서는 이고 가장자리에서는 0으로 무너지는데, 이는 버그가 아니라 기하학이 말하는 바입니다: 경계 근처에서는 고정된 쌍곡 걸음이 사라져 가는 유클리드 걸음에 대응하므로, 갱신은 자가 확대하는 바로 그곳에서 유클리드 항으로는 줄어들어야 합니다. 한 가지 안전장치가 남아 있습니다. 갱신식 (여기서 는 1권의 경사 하강법 장에서 익숙해진 걸음 크기 스칼라인 학습률입니다)은 직선 이동이며, 유한한 직선 이동은 공간의 일부가 아닌 경계 구면 위나 그 바깥에 떨어질 수 있습니다(그리고 그곳에서는 가 무한합니다). 표준적인 해결책은 투영(projection, 리트랙션)입니다: 걸음이 벗어나면, 그 점을 공 안쪽 바로 안으로 다시 스케일링합니다. 훈련 루프는 이 둘을 모두 구현하며, 주석은 유도의 결론을 그대로 담고 있습니다 (hyperbolic.py 244–254번째 줄; 투영 헬퍼 함수는 174–178번째 줄입니다):
if geometry == "hyperbolic":
# RIEMANNIAN SGD: the ball's metric is g_θ = (2/(1−‖θ‖²))²·I,
# so the Riemannian gradient is the Euclidean gradient rescaled
# by the INVERSE metric, (1−‖θ‖²)²/4; the step is then
# projected back into the ball.
scale_u = (1.0 - float(u @ u)) ** 2 / 4.0
scale_V = (1.0 - np.sum(V * V, axis=1)) ** 2 / 4.0
X[ui] = _project(u - lr * scale_u * grad_u)
np.add.at(X, tids, -lr * scale_V[:, None] * grad_V)
for t in np.unique(tids):
X[t] = _project(X[t])
_project는 노름이 를 넘는 모든 점을 그 껍질(shell) 위로 다시 스케일링합니다; 그 반지름에서 원점까지의 거리는 이미 로, 깊은 쌍곡 영역입니다. 같은 파일 안의 유클리드 대조 모델은 그냥 그 거리, 그냥 그 그래디언트로 동일한 루프를 실행하며, 재스케일링도 투영도 없습니다 (hyperbolic.py 255–258번째 줄), 이것이 바로 다가올 비교를 통제된 실험으로 만들어 주는 지점입니다.
목적함수, 일정, 그리고 임베딩되는 위계
저 그래디언트들은 어떤 손실을 따라 내려가고 있을까요? 최초의 푸앵카레 임베딩 연구가 제시한 레시피입니다 [2]: 연결된 각 쌍에 대해, 그 거리를 표본으로 뽑힌 비-이웃들까지의 거리에 비해 작게 만드는 것입니다. 구체적으로, 참 부모 가 인덱스 에 있고 표본으로 뽑힌 다섯 개의 부정 예시(negative) (도 아니고 에 인접하지도 않은 노드들)가 있는 is-a 변 에 대해, 손실은 부호를 바꾼 거리들에 대한 음의 로그-소프트맥스입니다,
여기서 두 번째 형태는 이고 이기 때문에 성립합니다. 각 거리에 대한 그 도함수는 두 줄이면 나옵니다. 첫 번째 항은 에 을 기여하고 나머지에는 아무것도 기여하지 않습니다; 로그-합 항은 모든 에 대해 다음을 기여합니다,
여기서 는 모델이 현재 후보 에 부여하는 소프트맥스 확률이고, 은 참 부모에 대해서는 , 그 밖에는 입니다. 이는 1권에서 단일 뉴런이 만들어 냈던 것과 똑같은 교차 엔트로피 신호를, 새로운 변수로 읽어 낸 것입니다: 로짓 에서는 도함수가 정확히 예측 빼기 목표, 즉 인 이지만; 거리 변수에서는 로짓이 거리의 부호를 바꾼 것이기 때문에 부호가 뒤집혀 가 됩니다. 힘에 대한 읽기는 그대로입니다: 참 부모는 힘 으로 더 가까이 끌어당겨지고(모델이 틀렸을 때는 세게, 이미 확신하고 있을 때는 부드럽게), 각 부정 예시는 힘 로 밀려납니다. 이 루프는 수치 안정성을 위한 표준적인 최댓값-이동(max-shift) 기법과 함께 정확히 이것을 계산합니다 (hyperbolic.py 231–242번째 줄):
# L = d_0 + log Σ_j e^{−d_j} (computed with the max-shift trick)
m = float(np.max(-d))
e = np.exp(-d - m)
Z = float(np.sum(e))
total += float(d[0]) + m + math.log(Z)
# ∂L/∂d_j = [j = 0] − p_j with p_j = e^{−d_j} / Σ_k e^{−d_k}
coeff = -(e / Z)
coeff[0] += 1.0
grad_u = coeff @ gU # Σ_j (∂L/∂d_j)·(∂d_j/∂u)
grad_V = coeff[:, None] * gV # (∂L/∂d_j)·(∂d_j/∂v_j)
그 일정은 원 논문의 번인 레시피를 따릅니다: 처음 개 에폭은 학습률의 십분의 일로 실행되는 번인(burn-in)을 거치는데, 이는 원점 근처의 초기화(각 좌표가 구간 에서 균등하게 뽑히므로, 모든 것이 공의 평평한 중심에서 시작합니다)가 전체 강도의 갱신이 배치를 확정 짓기 전에 부드럽게 스스로 자리를 잡도록 해 줍니다; 학습률 자체는 여기서 로, 원 논문이 자유 파라미터로 남겨 둔 값을 이 실행이 스스로 고른 것입니다 (hyperbolic.py 185–188번째 줄이 LR = 0.1, BURN_IN = 10, EPOCHS = 2000, NEGATIVES = 5를 설정하고; 216번째 줄이 lr = LR / 10.0 if epoch <= BURN_IN else LR를 적용합니다).
위계 자체는 2권의 개념 트리에 3권의 개체들을 그 아래에 매단 것입니다: 개념 척추(Person이 Researcher를 포섭하고, Researcher는 Professor와 Student로 갈라지며, Dean은 Professor 아래에 있습니다), 가상의 루트 Entity 아래의 네 개의 최상위 개념, 그리고 kg.TYPE_OF에 담긴 ABox 타입으로부터 나오는 개체마다 하나씩의 변입니다 (hyperbolic.py 53–65번째 줄):
def build_edges() -> list[tuple[str, str]]:
"""The is-a edge list as (child, parent) pairs: the concept spine of the
Volume 2 TBox, the four top concepts under the virtual root, and one edge
per individual from its ABox type (``kg.TYPE_OF`` — never retyped)."""
edges: list[tuple[str, str]] = [
("Person", ROOT), ("Paper", ROOT), ("Institution", ROOT), ("Topic", ROOT),
("Researcher", "Person"),
("Professor", "Researcher"), ("Student", "Researcher"),
("Dean", "Professor"),
]
for ind in kg.ENTITIES: # alice → Professor, p1 → Paper, mit → Institution ...
edges.append((ind, kg.TYPE_OF[ind]))
return edges
이로부터 개의 노드(루트를 포함한 개의 개념과 개의 개체), 개의 변, 그리고 개의 노드 쌍이 나옵니다(이항 계수(binomial coefficient) 는 "개 중 개 선택"으로 읽으며, 개의 노드에서 순서 없는 쌍을 고르는 방법의 수를 셉니다: ); 각 임베딩이 그에 견주어 평가받는 정답은 모든 쌍 사이의 너비 우선 탐색(breadth-first search) 홉 거리로, 지름이 인 트리 계량입니다. 실행은 세대들을 직접 출력합니다:
depth 0: Entity
depth 1: Institution, Paper, Person, Topic
depth 2: Researcher, cmu, logic, mit, ml, nesy, p1, p2, p3
depth 3: Professor, Student
depth 4: Dean, alice, bob, carol, dave, erin
그 모양에 주목하십시오: 깊이 가 가장 넓은 세대(개 노드)인데, 이는 여덟 개의 잎 개체(논문들, 기관들, 주제들)가 깊이- 개념에 직접 붙어 있는 반면, 사람들은 Researcher를 거쳐 두 단계 더 내려가기 때문입니다. 이 불균등함은 우리가 노름 표를 읽을 때 중요해집니다.
d = 2에서의 정면 대결, 커밋된 실행에서 읽어내다
이제 두 모델은 오직 기하학만 다른 조건 아래에서 훈련됩니다: 같은 소프트맥스 손실, 같은 시드-0 초기화, 같은 학습률 일정, 그리고 부정 예시 샘플링 스트림이 파라미터 값을 결코 들여다보지 않으므로, 정확히 같은 부정 예시 추출까지 말입니다. python3 hyperbolic.py를 실행하면 훈련 흔적이 출력됩니다:
training: Nickel–Kiela softmax loss, 5 negatives/edge, lr=0.1 (first 10 epochs at lr/10), 2000 epochs, seed 0
epoch hyperbolic loss euclidean loss
1 1.7933 1.7931
10 1.7379 1.7287
100 0.2601 0.4319
500 0.0594 0.2350
1000 0.0966 0.1051
2000 0.0560 0.0914
에폭 에서는 둘을 구별할 수 없습니다( 대 ): 모든 것이 여전히 공의 평평한 중심에 있는데, 그곳에서는 우리가 유도했듯이 푸앵카레 거리가 그저 유클리드 거리의 두 배이므로, 두 목적함수는 거의 같은 지형을 보게 됩니다. 에폭 에 이르면 둘은 결정적으로 갈라져 대 가 되고, 에폭 에서는 쌍곡 손실()이 유클리드 손실()의 사분의 일에 불과합니다: 같은 목적함수라도 트리를 위한 방이 있는 공간에서는 그저 더 쉽게 만족됩니다. 그다음은 개의 정답 쌍 전체에 대한 평가입니다:
reconstruction of the tree metric (231 node pairs, BFS distances 1..6)
hyperbolic euclidean
Spearman rank correlation 0.8136 0.7539
mean distortion (scale-fit) 0.2593 0.2421
fitted scale s 3.5925 3.5025
두 행 모두 정직하게 읽어 봅시다. 스피어만 순위 상관계수(Spearman rank correlation, 순위 벡터들의 피어슨 상관으로, 트리 거리 이 심하게 동률을 이루기 때문에 hyperbolic.py 290–309번째 줄에서 동률을 고려하여 계산됩니다)는 이렇게 묻습니다: 임베딩이 그 쌍들을 올바른 순서로 놓는가, 가까운 쌍은 가깝게 먼 쌍은 멀게? 여기서는 공이 편안한 차이로 이깁니다, 대 이며, 모델당 개의 숫자라는 동일한 예산에서입니다. 스케일 맞춤 평균 왜곡(전역 스케일 하나를 맞춘 다음 의 평균을 냅니다; hyperbolic.py 281–287번째 줄)은 더 엄격한 질문을 던집니다: 단 한 번 맞춘 재스케일링(코드는 를 비율 들의 평균으로 맞춥니다) 이후에, 거리들이 비례적으로 올바른가? 여기서는 평평한 모델이 근소하게 더 낫습니다, 대 입니다. 그 차이는 있는 그대로 읽어야 합니다: 이는 기하학의 한계가 아니라 이 훈련 실행의 속성입니다. 소프트맥스 손실은 오직 참 부모를 표본으로 뽑힌 부정 예시들보다 더 가깝게 만드는 것에만 보상을 주며, 임베딩 거리를 홉 수와 결코 비교하지 않으므로, 훈련 안의 어떤 것도 비례적 충실도를 요구하지 않습니다(가장자리 근처의 가장 깊은 세대가 붐비면서 그 쌍별 거리 중 일부를 더욱 압축했을 수도 있지만, 이는 이 실행이 따로 분리해 내지 못하는 가설입니다: 커밋된 점들은 투영 껍질에 이르기 전에 멈춰 있습니다). 쌍곡 공간 자체는 훨씬 더 잘할 수 있습니다: 구성적 임베딩은 임의의 트리를 쌍곡 평면에 곱셈적 왜곡을 원하는 만큼 1에 가깝게 만들어 배치할 수 있으므로 [1], 왜곡 행은 이 손실이 애초에 요구하지 않았던 것을 측정할 뿐, 그 공간이 내줄 수 있는 것을 측정하는 것이 아닙니다. 이 훈련된 공이 낮은 차원에서 실제로 보존하는 것은 트리 계량의 순서이며, 이 모듈의 역량 단언(competency assert)은 정확히 그 주장만을, 그 이상도 이하도 아니게 지킵니다 (hyperbolic.py 377번째 줄: assert rho_hyp > rho_euc).
쌍곡 공간의 특징적인 효과는 반지름 방향 정렬입니다. 실행은 훈련된 공에 대해, 각 세대의 평균 유클리드 노름을 출력합니다 (norms_by_depth, hyperbolic.py 312–321번째 줄):
hyperbolic norm vs tree depth (deeper generations near the boundary)
depth nodes mean ‖x‖
0 1 0.7595
1 4 0.9838
2 9 0.9870
3 2 0.9875
4 6 0.9996
그 평균들은 깊이에 대해 엄밀히 증가하며, hyperbolic.py 386번째 줄의 단언은 만약 그렇지 않은 경우가 생기면 모듈을 실패시킵니다. 유클리드 노름들은 뭉쳐 있는 것처럼 보이지만(깊이 이후로는 모두 과 사이입니다), 그것은 평평한 자가 하는 말일 뿐입니다; 각 평균 노름 을, 앞서 유도한 반지름 방향 공식 을 사용해 원점으로부터의 쌍곡 거리로 변환해 봅시다:
| 깊이 | 평균 | 쌍곡 반지름 |
|---|---|---|
| (Entity) | ||
| (최상위 개념들) | ||
| (Researcher + 잎 개체 8개) | ||
| (Professor, Student) | ||
| (Dean + 사람 5명) |
위계는 반지름에서 곧바로 읽힙니다: 루트는 대략 쌍곡 단위 바깥에, 최상위 개념들은 근처에, 그리고 가장 깊은 개체들은 를 넘어, 어떤 크기의 세대라도 들어맞는 껍질에 눌려 있습니다. 깊이 에서 깊이 으로 넘어가는 그 하나의 작은 걸음은, 앞서 언급한 불균등함 때문입니다: 깊이 는 이미 경계에 바짝 붙은 여덟 개의 잎 개체(p1–p3, mit, cmu, logic, ml, nesy)를 담고 있는데, 이들은 그 아래에 아무것도 매달려 있지 않기 때문에 일찌감치 가장자리에 이르는 반면, 깊이 은 오직 두 개의 내부 개념인 Professor와 Student만을 담고 있으며, 이들은 자신의 자식들 가까이 남아 있기 위해 살짝 안쪽에 머물러야 합니다(hyperbolic.py 378–384번째 줄의 코드 주석이 정확히 이 해석을 기록하고 있습니다). 잎들은 경계로 서둘러 가고, 허브들은 뒤처집니다. 반지름이 재고 있는 것은 깊이 그 자체가 아니라 그 아래에 깊이가 얼마나 있는가이며, 이는 정확히 2부가 박스로 구축했던 포함 관계 직관이 이제 거리만을 다루는 목적함수로부터 비지도로 다시 떠오른 것입니다: 손실에는 깊이도, 방향도, 포섭도 언급되지 않지만, 기하학은 온톨로지의 층위를 재구성해 내는데, 왜냐하면 지수적인 방이 마침 수많은 깊은 세대들이 필요로 하는 바로 그곳에 있기 때문입니다.
커밋된 d = 2 푸앵카레 임베딩으로 본 학계 is-a 트리: 루트는 중심 가까이, 각 세대는 바깥으로 밀려나 있고, 모든 계열은 자기만의 각도 구역에 있으며, 동일한 44개 숫자 예산에서 공이 트리 계량과의 순위 상관에서 평평한 평면을 이긴다.
저자가 AI의 도움을 받아 직접 제작한 원본 도해.
왜 2차원이 장난감이 아니라 핵심인가
를 고른 것은 교육적인 동기에서였습니다: 훈련된 좌표들이 곧 이 장의 그림이며, 아무것도 투영되어 사라지지 않고, 반지름과 구역에 관한 모든 주장은 출력된 좌표 목록에 대해 검산할 수 있습니다. 그러나 이 선택은 또한 이 분야의 핵심적인 경험적 발견, 즉 쌍곡 임베딩이 차원이 부족할 때야말로 가장 잘 작동한다는 사실을 반영하기도 합니다. 최초의 푸앵카레 임베딩 실험은 8만 개가 넘는 노드를 가진 WordNet 명사 위계를, 차원이 5에서 10인 임베딩으로 재구성하여 차원 200인 유클리드 임베딩과 맞먹거나 그것을 능가했습니다 [2]; 표현 트레이드오프 분석은 그 이유를 정량화하는데, 평평한 공간은 트리에 차원이나 왜곡 중 하나를 소비하는 반면 쌍곡 공간은 어느 쪽도 소비하지 않습니다 [1]. 이 결과는 지식 그래프 전반으로도 이어집니다: 관계별 회전을 갖춘 쌍곡 KG 임베딩은 WN18RR 같은 위계가 풍부한 벤치마크에서, 최신 유클리드 모델과 맞먹으면서도 자릿수 단위로 더 적은 차원을 사용합니다 [3]. 이 교훈은 계수 논증을 일반화합니다: 파라미터는 예산이고, 기하학은 그 환율을 정하며, 데이터가 트리 모양일 때 곡률은 그렇지 않으면 차원이 사야 했을 것을 대신 사 줍니다. 한 가지 유의점이 이 주장을 정직하게 지켜 줍니다: 곡률은 하나의 사전 지식(prior)으로, 데이터가 그 성장 패턴과 맞아떨어지는 만큼만 정확히 보상을 돌려줍니다. 학계 KG의 비위계적 관계들(인용, 저술, 소속)은 트리 기하가 특별히 여지를 마련해 두지 않은 순환과 교차 연결을 담고 있으며, 이는 실용적인 시스템들이 모든 것에 대해 하나의 곡률 공간을 고정하기보다는 관계마다 곡률을 학습하는 이유 중 하나입니다 [3].
함의 원뿔: 2부의 영역을, 공 안으로 휘어 넣다
위에서 본 거리만의 목적함수는 위계의 층위를 되찾아 냈지만, 각 노드를 하나의 점으로 표현하므로 여전히 포섭을 단언할 수는 없습니다; 2부는 함의(entailment)에는 포함 관계를 지닌 영역이 필요하다고 주장했습니다. 이 두 아이디어는 합쳐집니다. 쌍곡 함의 원뿔(hyperbolic entailment cone)은 원점 주위의 작은 공 바깥에 있는 푸앵카레 공의 각 점 에서(이 구성은 유효한 원뿔 개구부가 존재하지 않는 중심의 -이웃을 제외합니다), 원점으로부터 벌어져 나가는 원뿔 를 도려내는데, 그 개구부는 가 커질수록 좁아집니다: 그 제외된 핵 바로 바깥에 있는 일반적인 개념들에게서 가장 넓고, 가장자리로 갈수록 사라집니다. 에 있는 개념은 자신의 원뿔 안에 임베딩된 모든 것을 함의하며, 이 구성은 소속 관계를 전이적으로 만듭니다: 이면 인데, 이는 포섭이 사슬을 이룬다는 사실의 기하학적 형상입니다(그리고 그 중첩이야말로 더 깊은 점들이 더 좁은 원뿔을 지녀야 하는 정확한 이유입니다) [4]. 2부의 평평한 원뿔과 박스가 부피를 놓고 다투었던 지점에서(평평한 공간의 일반적인 개념은 자신의 모든 자손을 담으려면 기하학적으로 거대해야 합니다), 원점 근처에 닻을 내린 넓은 원뿔은 가장자리를 향한 지수적인 방으로 부채처럼 펼쳐지는데, 이것이 바로 그 원뿔에 모든 자손을 위한 공간을 마련해 주는 것입니다: Person의 원뿔은 Researcher의 더 좁은 원뿔을 담을 수 있고, 그 원뿔은 Professor의 원뿔을 담으며, 그 원뿔은 alice를 담는데, 이 중 어느 것도 공간이 모자라지 않습니다; 훈련은 원뿔-소속 에너지에 대한 마진 손실을 최소화하며, WordNet에서 거리 임베딩과 평평한 순서 임베딩 양쪽 모두에 견주어 상당한 향상을 보고했습니다 [4]. 우리는 여기서 원뿔을 다시 구현하지는 않습니다; 요점은 그 결합 자체입니다, 즉 논리를 위한 영역과 위계를 위한 곡률을 하나의 기하학 안에 담는 것으로, 이는 EL 임베딩에서 TransBox와 mOWL에 이르기까지 평평한 공간에서 탐구되었던 것과 같은 설계 공간이 곡률 공간에서 다시 열린 것입니다.
아직 풀리지 않은 부분
이 장은 스스로의 틀 안에서도 정직한 균열 하나를 눈에 보이게 남겨 둡니다: 실행의 왜곡 행은 공의 승리가 비례적 충실도가 아니라 순서에 관한 것임을 보여 주며, 가장자리 근처에서는 모델이 산술 그 자체와 부딪힙니다. 투영 껍질 에서, 모든 공식이 나누는 차이 는 약 입니다; 가장 깊은 커밋된 점들은 노름 에 있으며, 더 큰 트리의 다음 세대마다 남은 공간의 또 다른 배 조각이 필요해집니다. 깊이 인 노드를 충실하게 표현하려면 경계까지의 간극에 대해 대략 비트 정도가 필요하므로, 데이터가 아니라 부동소수점 정밀도가 깊은 위계에서 구속력 있는 제약이 됩니다 [1]; 이후의 활발한 연구들은 쌍곡 공간의 대안적인 좌표계부터 다중 정밀도 산술에 이르기까지 다양한 해결책을 제안해 왔습니다.
그러나 더 큰 미해결 부분은 1부에서 3부 전체를 아우릅니다. 이 열한 개 장의 모든 모델, TransE의 이동, 박스와 공과 원뿔들, 그리고 이제 이 휘어진 공까지도, 하나의 조용한 설계 결정을 공유합니다: 각 개체나 개념의 임베딩은 조회 테이블 안의 자유로운 한 행이며, 그래디언트에 의해 조정되지만 다른 모든 행과 구조적으로 독립적입니다. 그래프의 배선은 오직 손실을 통해서만, 한 번에 변 하나씩만 들어옵니다; 어떤 모델도 노드의 표현을 그 이웃으로부터 계산해 내지 않습니다. 이는 우리의 진행 중인 예시가 분명히 보여 주는 구체적인 대가를 낳습니다: 새로운 노드(새로운 학생, 갓 출판된 논문)는 행이 없으므로, 재훈련 없이는 그것에 관해 아무것도 예측할 수 없으며, 주변 환경이 똑같은 두 노드는 손실이 우연히 그들을 서로 밀어 붙이지 않는 한 서로 무관한 벡터를 학습합니다. 그래프 안에서 노드의 의미는 상당 부분 그 배선 안에 살고 있으며, 빠져 있는 것은 배선 그 자체를 소비하는 인코더, 즉 각 노드의 벡터를 그 이웃 벡터들로부터 재귀적으로 계산하여, 구조가 표현을 단지 제약하는 데 그치지 않고 결정하도록 하는 인코더입니다. 그런 인코더를 만들고, 그것이 구별해 낼 수 있는 것의 정확한 논리적 한계를 밝혀내는 일이 4부입니다.
왜 중요한가
신경-기호 프로그램에 있어, 이 장은 하중을 떠받치는 두 가지 사실을 전해 줍니다. 첫째, 기하학은 논리 모양의 대가를 지닌 하나의 모델링 선택입니다: 이 시리즈가 다루는 모든 온톨로지(학계 TBox, SNOMED CT, Gene Ontology, WordNet)의 is-a 뼈대는 트리 모양이며, 계수 논증은 평평한 공간이 그 모양에 대해 차원이나 왜곡으로 대가를 치러야 함을 증명하고, 휘어진 공간은 아무 대가도 치르지 않음을 증명합니다. 4권이 논리적 구조를 미분 가능하게 만들 때, 거리가 이미 위계를 존중하는 공간은 검사할 수 있을 만큼 작은 예산으로 학습자에게 온톨로지의 골격을 공짜로 건네줍니다. 둘째, 이 커밋된 실행은 이 시리즈가 계속 돌아가는 건전성 탐침의 축소판입니다: 깊이나 포섭에 관해 아무것도 듣지 못한 거리만의 목적함수가 세대들을 정확히 정렬하는 반지름들을 만들어 냈고, 기하학이 논리를 부분적으로만 지키는 지점에서는(순서는 맞지만 비례 거리는 아닙니다) 단언들이 정확히 그렇게 말해 줍니다. 학습된 기하학에서 논리적 구조를 읽어 내고, 그 읽기를 얼마나 신뢰해야 할지를 아는 것이, 통합 권이 의지하는 규율입니다.
핵심 용어
- 진 트리 / 분기 계수(b-ary tree / branching factor) — 내부 노드마다 개의 자식을 갖는 트리로, 깊이 가 개의 노드를 담습니다; 평평한 공간이 따라잡을 수 없는 지수적 성장입니다.
- 패킹 경계(packing bound) — 반지름-인 유클리드 공에는 쌍별 거리가 적어도 인 점이 최대 개까지만 들어맞음을 보이는 부피 논증입니다; 트리의 지수적 요구에 맞선 다항식적 용량입니다.
- 왜곡(distortion) — 그래프 거리와 임베딩 거리 사이의 불일치입니다; 여기서는 개 쌍 전체에 대한 의 평균으로, 스케일을 맞춘 다음 측정합니다.
- 푸앵카레 공(Poincaré ball) — 등각 계량 인자 를 지닌 열린 단위 공 입니다; 방은 반지름에 대해 지수적으로 늘어나고 가장자리는 무한히 멀리 떨어져 있습니다.
- 측지선(geodesic) — 공간 자신의 계량이 길이를 재는 방식으로 두 점 사이의 최단 경로입니다; 공 안에서는 중심 쪽으로 휘어진 호입니다.
- 푸앵카레 거리(Poincaré distance) — 입니다; 반지름 방향으로는 입니다.
- 리만 그래디언트 / 리만 SGD(Riemannian gradient / Riemannian SGD) — 공간의 계량 아래에서의 최급강하 벡터로, 여기서는 유클리드 그래디언트를 로 다시 스케일링한 다음 공 안쪽으로 투영합니다.
- 번인(burn-in) — 일정의 처음 에폭들을 낮춘 학습률로 실행하여, 원점 근처의 초기화가 전체 강도의 갱신 이전에 스스로 자리 잡도록 하는 것입니다.
- 스피어만 순위 상관계수(Spearman rank correlation) — 순위 벡터들의 피어슨 상관으로, 동률을 고려합니다; 임베딩이 개의 쌍을 트리와 같은 순서로 배열하는지를 봅니다.
- 쌍곡 함의 원뿔(hyperbolic entailment cone) — 원점으로부터 벌어져 나가는 공의 한 영역으로, 그 전이적 포함 관계가 포섭을 부호화하며, 2부의 영역과 이 장의 곡률을 하나로 묶습니다.
이 길이 이끄는 곳
3부는 위계가 말 그대로 기하학 안에서 눈에 보이는 채로 마무리됩니다: 반지름은 깊이로, 부채꼴 구역은 계열로, 포섭은 곡률 속 포함 관계로 나타납니다. 지금까지 어떤 모델도 하지 않은 일은 인코딩하는 동안 그래프를 들여다보는 것입니다: 1부에서 3부까지의 모든 벡터는 훈련된 테이블 항목이었고, 배선은 오직 손실을 통해서만 말해 왔습니다. 다음 장인 메시지 전달은 그 설계를 뒤집습니다. 각 노드의 표현은 층을 하나씩 거치며 그 이웃들의 표현으로부터 계산될 것이고, 그리하여 그래프의 구조 자체가 네트워크의 계산 그래프가 됩니다; 같은 학계 지식 그래프가 그래프 신경망(graph neural network, GNN) 청사진의 집계-갱신 방정식들을 통해 흐르게 될 것이고, 정확히 논리적인 답을 가진 새로운 질문이 곧바로 떠오릅니다: 오직 자신의 이웃만을 보는 네트워크가 과연 무엇을 구별하도록 학습할 수 있을까요?
짝이 되는 코드: examples/neural/hyperbolic.py는 2권의 개념 척추와 kg.TYPE_OF로부터 22개 노드로 이루어진 위계를 구축하고, 푸앵카레 거리와 그 손으로 유도한 그래디언트, 공 투영을 갖춘 리만 SGD, 그리고 동일하게 설정된 유클리드 대조군을 구현한 다음, 이 둘을 BFS 트리 계량에 견주어 평가합니다. 이 장의 모든 숫자를 재현하려면 python3 examples/neural/hyperbolic.py를 실행하십시오; 이 모듈의 단언들은 스피어만 승리, 깊이에 대해 엄밀히 증가하는 노름 표, 그리고 훈련된 모든 점이 열린 공 안에 머무른다는 것을 지킵니다.