앞 절 첫머리의 역사에서, 반구 지도 두 장은 이음매에서 항로가 끊겼고 입체사영 두 장은 넉넉히 겹쳐서 그 문제를 풀었다. 그리고 앞 절 끝에서 이 이음매 고민, 곧 겹치는 곳에서 두 차트의 좌표를 어떻게 이을 것인가에 전이함수라는 이름을 붙였다. 이제 그 번역 규칙을 실제로 구해 보자.
문제는 겹치는 부분이다. 지도책의 유럽 지도와 아시아 지도는 터키 근처에서 겹친다.
지도책의 유럽 지도와 아시아 지도 — 보라색 띠가 두 지도가 겹치는 곳이다. 이스탄불은 유럽 지도에서 (8.9, 1.5), 아시아 지도에서 (0.6, 4.0)이다. 숫자는 달라도 같은 장소다
앞에서 본 구면의 두 차트도 마찬가지다. 북극과 남극을 뺀 나머지 점은 모두 두 차트에 함께 들어 있고, 같은 점이 두 차트에서 서로 다른 좌표를 받는다. 두 좌표가 같은 점이라는 것을 어떻게 알아볼 수 있을까?
역사: 번역 규칙이 정의가 되기까지
리만은 조각마다 좌표를 붙이고 조각 사이를 번역하면 된다는 씨앗을 뿌렸지만, 그 뒤로도 오랫동안 곡면과 그 고차원 친척들은 바깥 공간 속에 놓인 모양으로 다뤄졌다. 앙리 푸앵카레(Henri Poincaré)가 1895년 논문 「위치 해석(Analysis Situs)」의 첫머리에서 내린 정의도 그랬다. 바깥 공간의 좌표가 어떤 식을 만족하는 점들의 모임이라는 것이다. 원으로 치면 평면에서 x2+y2=1을 만족하는 점들이다. 그런데 이런 모양을 계산하려면 결국 조각으로 나눠야 한다. 원만 해도 위 반원은 y=1−x2, 아래 반원은 y=−1−x2로 따로 적어야 하고, 양 끝 (1,0)과 (−1,0) 근처는 x를 y로 적는 조각이 또 필요하다. 푸앵카레는 같은 논문의 셋째 절에서 이런 조각을 여러 개 이어 쓰는 더 넓은 정의를 새로 내놓았다. 두 조각이 겹치면 한 조각의 좌표가 다른 조각의 좌표의 매끄러운 함수이고 「그 반대도 그렇다」는 조건을 붙였다. 겹치는 곳의 번역이 양쪽으로 매끄러워야 한다는, 오늘날 전이함수에 거는 조건의 첫 모습이다.
다만 푸앵카레의 조각은 여전히 바깥 공간 속의 그래프였다. 바깥 공간 없이 조각과 번역 규칙만으로 공간을 세우는 정의는 헤르만 바일(Hermann Weyl)이 1911~1912년 리만 곡면 강의에서 내놓고 1913년 책 『리만 곡면의 개념(Die Idee der Riemannschen Fläche)』으로 펴냈다. 그 뒤 오즈월드 베블런(Oswald Veblen)과 J. H. C. 화이트헤드(J. H. C. Whitehead)도 매끄러운 매니폴드를 바깥 공간 없이 정의해 발표했고, 1936년 해슬러 휘트니(Hassler Whitney)는 조각과 번역 규칙만으로 정한 매니폴드가 언제나 차원이 충분히 높은 바깥 공간 속에 곡면처럼 놓일 수 있음을 증명했다. 두 정의가 같은 것을 가리킨다는 뜻이다. 이 책도 바깥에서 곡면을 내려다보는 대신 지도와 번역 규칙만 들고 다니는 쪽을 따른다.
좌표 번역기
구면의 두 차트로 번역을 한 건 해 보자. φN 지도에서 (2,0)에 찍힌 점은 구면 위의 (0.8,0,0.6)이다. 이 점을 φS 지도로 보면 0.8/(1+0.6)=0.5이므로 (0.5,0)에 찍힌다. 같은 점이 한 지도에서는 (2,0), 다른 지도에서는 (0.5,0)이다. 원점에서의 거리 2가 1/2로 뒤집혔다.
이 번역은 두 걸음이다. 먼저 φN 지도의 (2,0)에서 구면 위의 점으로 되돌아가고(지도에서 구면으로 거꾸로 가는 함수라서 φN−1로 적는다), 그 점을 φS 지도로 읽는다. 두 걸음을 이어 붙인 함수를 φS∘φN−1로 적는다. 오른쪽에 적힌 함수부터 차례로 한다는 뜻이다.
전이함수 (좌표 번역기 / Transition Map) — 겹치는 영역 Uα∩Uβ(β는 베타)에서 한 좌표를 다른 좌표로 변환하는 함수 φβ∘φα−1. 이 함수가 매끄러우면(C∞이면) 두 차트가 "호환된다"고 말한다. 아틀라스의 모든 차트 쌍이 호환되면 매끄러운 아틀라스라 한다.
C∞는 「C 무한」이라 읽고, 몇 번이든 미분할 수 있다는 뜻이다. 번역 규칙에 이런 조건을 거는 까닭은 둘이다.
번역은 매끄러워야 한다. 유럽 좌표를 아시아 좌표로, 또는 그 반대로 바꾸는 함수가 매끄럽지 않으면, 한 지도에서 곧게 가던 배가 다른 지도에서는 갑자기 꺾이거나 튄다 — 갑자기 좌표가 점프하면 곤란하니까. 매끄럽지 않은 번역이 실제로 무엇을 망가뜨리는지는 아래 문제 9에서 숫자로 본다.
번역 규칙들이 서로 모순이 없어야 한다. A → B → C로 가든, A → C로 직접 가든, 결과는 같아야 한다. 차트들이 모두 한 공간에서 왔다면 이 조건은 저절로 지켜진다. 원점이 두 개인 직선처럼 지도만 들고 이어 붙여 공간을 만들 때는 따로 챙겨야 한다.
두 차트가 겹치는 영역(북극과 남극을 모두 뺀 부분) 전체에서 이 번역을 식 하나로 쓸 수 있다.
이것은 단위원을 거울 삼아 안과 밖을 뒤집는 반전(inversion)이다. 적도는 두 차트 모두에서 단위원 위에 놓이고, 북반구는 φN에서는 단위원 밖으로, φS에서는 단위원 안으로 간다. 전이함수는 원점에서만 정의되지 않는데, φN의 원점은 남극이라 애초에 겹치는 영역에 없다. 겹치는 영역 전체에서 무한히 미분 가능하므로 이 아틀라스는 매끄럽다.
지금까지를 정리하면 다음과 같다:
국소적으로 Rn처럼 보이는 공간은, Rn으로의 좌표를 붙이는 함수들(차트)의 모음과 겹치는 영역에서의 매끄러운 변환 규칙(전이함수)으로 빠짐없이 나타낼 수 있다.
두 입체사영 차트로 구면을 덮은 아틀라스다. 두 평면 중 어느 쪽에서든 점을 끌면 구면 위의 점이 따라 움직이고, 구면은 끌어서 돌려 볼 수 있다. 점을 북극 쪽으로 가져가면서 φN 좌표가 어떻게 되는지, 그동안 φS 좌표와 전이함수는 어떻게 되는지 지켜보자.
ML에서: 같은 분포를 두 좌표로 읽기
정규분포 하나는 평균 μ(뮤)와 표준편차 σ(시그마, σ>0) 두 숫자로 정해지므로, 정규분포들의 모임은 2차원 매니폴드이고 (μ,σ)는 그 위의 차트 하나다. 그런데 신경망이 σ를 직접 내놓게 하면 σ>0이라는 제약을 따로 챙겨야 해서, 흔히 로그값을 대신 출력하게 한다. VAE(변분 오토인코더, Variational Autoencoder. 이미지 같은 데이터를 적은 수의 숫자로 줄였다가 되살리도록 학습하는 생성 모델)의 인코더가 분산 σ2 대신 logσ2을 내놓는 것이 대표적인 예다.
이렇게 하면 같은 분포 모임에 차트가 두 장 생긴다. 예컨대 (μ,σ)와 (μ,s), s=logσ 사이의 전이함수는 σ=es, s=logσ로 양쪽 모두 무한히 미분 가능하다. 여기서 움직이는 것은 모델이 출력하는 분포의 매개변수이고, 좌표가 달라도 가리키는 분포는 같다. 유럽 지도의 좌표와 아시아 지도의 좌표가 같은 이스탄불을 가리키는 것과 같다.
문제 7 — 온도 눈금 세 개 사이의 번역
확인 섭씨, 화씨, 켈빈 세 온도 눈금 사이에는 번역 규칙이 있다. 화씨 = 1.8 × 섭씨 + 32이고, 켈빈 = 섭씨 + 273.15이다. (1) 섭씨 25도를 화씨로 바꾼 뒤 그 값을 켈빈으로 바꾼 결과가, 섭씨 25도를 켈빈으로 바로 바꾼 결과와 같은지 확인하라. (2) 어떤 사람은 화씨를 섭씨로 바꿀 때 「30을 빼고 반으로 나눈다」는 어림 규칙을 쓰고, 거기에 273을 더해 켈빈을 얻는다. 섭씨 25도로 같은 확인을 해 보라. 어느 길로 가느냐에 따라 답이 달라지면 무엇이 곤란한가?
같이 풀기 세션 7
김민준
섭씨 25도는 화씨 77도예요. 77에서 32를 빼고 1.8로 나누면 다시 25, 273.15를 더하면 298.15 K. 섭씨에서 바로 가도 298.15 K라 같아요.
선생님
(2)는요?
김민준
77에서 30을 빼고 반으로 나누면 23.5, 273을 더하면 296.5 K. 1.65 K 차이인데, 어림이니까 그 정도는 괜찮지 않아요?
이서연
차이가 일정하지 않은데. 섭씨 0도로 해 보면 화씨 32도라서 어림 길로는 274 K, 바로 가면 273.15 K야. 이번엔 0.85 K 더 커. 100도면 9.15 K나 작고.
선생님
누군가 「오늘 낮 기온 296.5 K」라고 적어 놓았어요. 원래 섭씨로 몇 도였을까요?
김민준
바로 바꾼 거면 23.35도, 어림 길로 바꾼 거면 25도예요. 어느 길로 왔는지 모르면 알 수가 없네요. 번역표끼리 말이 안 맞으면 같은 날씨가 적는 사람마다 다른 숫자가 되는 거예요.
이서연
지도책도 똑같겠네요. 유럽 지도에서 아시아 지도를 거쳐 러시아 지도로 옮긴 좌표와 유럽 지도에서 러시아 지도로 바로 옮긴 좌표가 다르면, 같은 도시가 러시아 지도에 두 군데 찍혀요.
문제 8 — 두 장의 지도에서 같은 점 읽기
계산 단위구 위의 두 점 A=(0.6,0,0.8), B=(0,−0.8,−0.6)의 φN 좌표와 φS 좌표를 구하라. 전이함수로 φN 좌표를 번역하면 φS 좌표가 나오는지 확인하고, 북극 (0,0,1)에서는 어떻게 되는지 설명하라.
풀이를 마친 뒤 위 도구의 「점 A」「점 B」를 누르거나, X·Y·Z 칸에 점의 위치를 넣고 「이 점 찍기」를 눌러 자기 답과 비교해 보자.
같이 풀기 세션 8
김민준
numpy로 먼저 돌려 봤어요. A는 φN(A)=(3,0), φS(A)=(1/3,0)이 나와요. 그런데 전이함수에 (3,0)을 넣으니까 (27,0)이 나와서 안 맞아요. 공식이 틀린 거 아니에요?
이서연
너 (x,y)에 x2+y2를 곱했지? 공식은 나누는 거야. (3,0)/9=(1/3,0), 딱 맞아.
선생님
곱할지 나눌지 헷갈릴 때 쓸 수 있는 검산이 하나 있어요. 적도는 두 차트에서 어디로 가죠?
김민준
둘 다 단위원이요. 그러면 북반구에 있는 A는 φN에선 단위원 밖, φS에선 안이어야 하니까, 3이 27로 가면 여전히 밖이라 말이 안 되네요. 안팎을 뒤집으려면 나눠야 하고요.
김민준
PyTorch 과제에서 역행렬 대신 행렬을 곱해 놓고 조교한테 “단위벡터 하나 넣어서 검산은 해 봤어요?” 소리 들었던 거랑 똑같아요.
이서연
B도 해 볼게요. φN(B)=(0,−0.8)/1.6=(0,−0.5)이고 φS(B)=(0,−0.8)/0.4=(0,−2). 번역하면 (0,−0.5)/0.25=(0,−2)로 맞아요. 그런데 북극은 φN(0,0,1)=(0/0,0/0)이니까 부정형이잖아요. 극한을 잡으면 값이 나오지 않을까요?
선생님
한번 잡아 보세요. 경도는 고정하고, 북극에서 각도 t만큼 떨어진 점에서 출발해서 t→0으로 보내면요?
이서연
X=sint, 1−Z=1−cost≈t2/2니까 X/(1−Z)≈2/t. 0으로 수렴하는 게 아니라 무한대로 가네요. 어느 방향에서 다가가든 ∣φN∣→∞예요.
선생님
그래서 북극은 φN의 영역에 처음부터 넣지 않은 거예요. 그 자리는 φS가 맡아서 (0,0)으로 멀쩡하게 보여 줘요. 차트 한 장이 못 담는 점은 다른 장이 담으면 돼요.
이서연
해석학 시간에 1/x가 (0,1]에서는 연속인데 0에서 값을 억지로 붙일 수는 없다고 배운 것과 같네요. 정의역 밖의 점을 극한으로 끌어들이려고 하면 안 되는 거군요.
문제 9 — 표준편차를 어느 좌표로 내놓을까
계산 정규분포의 표준편차 σ를 모델마다 다른 좌표로 내놓는다. 모델 A는 로그 분산 logσ2을, 모델 B는 s=logσ를, 모델 C는 분산 v=σ2을 내놓는다. (1) 모델 A가 −1.2를 내놓았다. 같은 분포를 모델 B와 모델 C의 좌표로 적어라. (2) 모델 B의 좌표 s와 모델 C의 좌표 v 사이의 전이함수를 양쪽 방향으로 적고, 두 차트가 호환되는지 판정하라. (3) 모델 D는 일부러 c=s3을 내놓게 만들었다. 모델 B와 모델 D의 차트는 호환되는가?
같이 풀기 세션 9
김민준
로그 분산이 −1.2면 s=logσ는 그 절반이라 −0.6이고, σ=e−0.6=0.549, 분산 v는 0.301이에요.
선생님
(2)는요?
김민준
v=e2s, 거꾸로는 s=21logv예요. 그런데 logv는 v=0에서 음의 무한대로 가잖아요. 매끄럽지 않으니까 호환이 안 돼요.
이서연
v=0이면 σ=0인데, 그건 정규분포가 아니잖아. 처음부터 σ>0인 분포만 모은 공간이니까 v=0은 모델 C의 좌표 범위에 없어.
김민준
아, 북극이랑 같네요. 차트에 없는 점을 끌어와서 매끄럽지 않다고 한 거예요. v>0에서는 두 방향 다 몇 번이든 미분되니까 호환돼요.
선생님
그럼 (3)의 모델 D는요?
이서연
c=s3은 매끄럽고, 거꾸로 s=c1/3도 연속이에요. 서로 일대일로 대응하고요. 호환될 것 같은데요.
선생님
σ=1 근처에서 모델 D의 출력 c를 아주 조금 바꾸면 σ가 얼마나 바뀌는지 재 볼래요?
김민준
σ=1이면 s=0, c=0이에요. c를 0.001 올리면 s=0.1, σ=1.105라서 0.105 바뀌어요. c를 0.000001 올리면 s=0.01, σ=1.010이라서 0.01 바뀌고요. 걸음을 1000분의 1로 줄였는데 변화는 10분의 1밖에 안 줄었어요.
이서연
그러면 c로 잰 σ의 변화율이 105에서 10,050으로 커진 거네. c1/3을 미분하면 31c−2/3이라 c=0에서 끝없이 커져요. 연속이긴 한데 매끄럽지 않은 번역이었어요. 그러니 호환되지 않아요.
선생님
모델 D로 학습하면 σ가 1 근처에 올 때 무슨 일이 생길까요?
김민준
손실을 c로 미분한 값, 곧 c 쪽 그래디언트(손실이 가장 가파르게 느는 방향과 크기)에 이 변화율이 곱해지니까, σ=1 근처에서 그래디언트가 폭주해요. 모델 B의 좌표로는 멀쩡한 한 걸음이, 모델 D의 좌표로 번역하면 무한대가 되는 거예요.
선생님
그래서 전이함수는 양쪽 방향 모두 매끄러워야 한다고 요구해요. 점을 번역하는 것만이 아니라, 점이 움직이는 걸음까지 번역할 수 있어야 하니까요.
김민준
조교가 제곱근이 들어간 손실은 0 근처에서 그래디언트가 NaN(계산이 깨져 숫자가 아니게 된 값)이 된다고 작은 값을 더해 두라고 했던 게 이거였네요.