곡면 위의 직선은 뭔가

지수 사상: 한 점에서 쏘아 보낸 측지선들

측지선 방정식은 출발점과 출발 속도만 정하면 경로를 하나로 정해 준다. 곡면 위에서 학습하는 옵티마이저 가운데에는 걸음마다 지금 점에서 방향 하나와 걸음 크기를 골라 이렇게 측지선을 따라 가는 것이 있다. 그렇다면 한 점에서 모든 방향, 모든 속력으로 측지선을 쏘아 보내면 곡면 위에 어떤 그림이 생길까?

방향과 힘을 정하면 떨어지는 곳이 정해진다

한 점에서 방향과 속력을 정해 측지선을 쏘아 보내는 일은 대포를 쏘는 것과 같다. 방향과 힘(속도)을 정하면 포탄이 떨어지는 곳이 정해진다. 반지름 1인 구의 북극에서 같은 발사 속력으로 두 발을 쏘아 보자. 한 발은 경도 0° 쪽, 한 발은 경도 90° 쪽이다. 포탄은 측지선을 따라 1초 동안 날아가 떨어진다. 접선공간(북극에서 구에 닿는 평면)에 그린 두 발사 화살표는 끝끼리 발사 속력의 2\sqrt{2}배만큼 떨어져 있다. 이것을 곡면 위 두 착탄점 사이의 거리(대원을 따라 잰)와 비교하면 다음과 같다.

발사 속력 평면에서 두 화살표 끝의 거리 곡면에서 두 착탄점의 거리
0.1 0.1414 0.1413
1 1.414 1.275
π\pi 4.443 0 (둘 다 남극)

발사 속력이 작으면 평면에 그린 그림을 곡면에 거의 그대로 옮겨 붙일 수 있다. 속력이 커질수록 곡률 때문에 어긋나고, 속력이 π\pi이면 어느 방향으로 쏘아도 모두 남극 한 곳에 떨어진다.

지수 사상. (가) 북극에서 접선공간(북극에 닿는 평면)의 두 방향으로 발사 속력 1의 화살표를 그리고, 각 화살표 방향의 측지선(경도선)을 시간 1만큼 따라가 착탄점을 찍었다. (나) 발사 속력 π로 네 방향으로 쏘면 측지선이 모두 남극 한 곳에 모인다. (나)의 화살표는 길이를 줄여 그렸다
지수 사상. (가) 북극에서 접선공간(북극에 닿는 평면)의 두 방향으로 발사 속력 1의 화살표를 그리고, 각 화살표 방향의 측지선(경도선)을 시간 1만큼 따라가 착탄점을 찍었다. (나) 발사 속력 π로 네 방향으로 쏘면 측지선이 모두 남극 한 곳에 모인다. (나)의 화살표는 길이를 줄여 그렸다

그런데 왜 하필 「지수」일까? 곱셈으로 이루어진 공간에서 보면 까닭이 드러난다. 양수 전체를, 두 수 사이의 거리를 차가 아니라 비율의 로그로 재는 공간으로 보자(1에서 2까지와 2에서 4까지가 같은 거리). 이 공간에서 1에서 속도 v\textcolor{#1f77b4}{v}로 출발한 측지선은 시간 1 뒤에 정확히 eve^{\textcolor{#1f77b4}{v}}에 닿는다. 이런 공간에서는 이 함수가 보통의 지수함수가 되어 이름이 붙었다.

구면에서 길이 π\pi인 벡터가 모두 대척점(구의 중심을 지나 정반대편에 있는 점, 북극이면 남극) 한 곳으로 모인다는 것은, 한 점에서 출발한 측지선들이 반 바퀴 뒤 다시 한 점에서 만난다는 뜻이다. 이렇게 한 점에서 나간 측지선들이 다시 한 점에 모이는 곳을 켤레점(conjugate point)이라 부른다. 이것이 측지선의 "최단 자격"과 관련이 있다.

측지선이 가장 짧다고 한 것은 조금만 흔들어 본 가까운 경로들과 견줄 때, 곧 국소적으로(가까운 것끼리만 견줄 때) 한 이야기였다. 멀리 돌아가는 길까지 모든 경로와 견주는 전역적으로(곡면 전체를 놓고 견줄 때)도 가장 짧은지는 아직 따지지 않았다. 곡면의 위상(topology: 전체가 어떻게 이어져 있는지. 원기둥처럼 한 바퀴 감기는 구조)과 켤레점이 이 물음과 어떻게 얽히는지는 아래 문제 7에서 보자.

ML에서: 곡면 위의 경사하강법

평면에서의 경사하강법은 x←x−η ∇f(x)x \leftarrow x - \eta\, \nabla f(x)로, 현재 점에서 그래디언트(가장 가파른 방향의 벡터) 반대 방향으로 한 걸음 옮긴다(η\eta는 걸음 크기를 정하는 학습률). 매개변수가 구면이나 길이 제약이 있는 행렬처럼 휘어진 공간 위에 있으면, 이 뺄셈은 공간 밖으로 튀어 나간다. 대신 그래디언트에서 곡면 바깥으로 삐져나가는 성분을 뺀 접선공간 안의 벡터를 쓰고(이것을 ∇f\nabla f와 구별해 grad f\mathrm{grad}\, f로 적는다), 지수 사상으로 그 방향의 측지선을 따라 곡면 위에서 한 걸음 간다: x←exp⁡x(−η grad f(x))x \leftarrow \exp_x(-\eta\, \mathrm{grad}\, f(x)). 보나벨(S. Bonnabel)이 2013년 『IEEE Transactions on Automatic Control』에 발표한 논문 "Stochastic Gradient Descent on Riemannian Manifolds"는 이런 확률적 경사하강법의 수렴을 다뤘다. 여기서 움직이는 것은 모델의 매개변수다. 지수 사상을 매번 계산하는 일이 실제로 얼마나 부담이고 어떻게 피하는지는 아래 문제 8에서 숫자로 본다.

문제 7 — 측지선은 언제까지 가장 짧은가

킬러 (가) 서울에서 대원을 따라 25,000 km를 간 경로는 최단경로인가? (나) 서울에서 대척점(지구 반대편 정반대 점)까지 대원을 따라 가는 약 20,015 km의 경로는 최단경로인가? 최단경로는 하나뿐인가?

같이 풀기 세션 7

김민준 M01
김민준

둘 다 최단이죠. 측지선은 최단경로라고 배웠잖아요.

선생님 T01
선생님

민준 학생, 지구 둘레가 몇 km예요?

김민준 M01
김민준

약 40,030 km요. 그럼 25,000 km를 갔으면… 반대 방향으로 가면 40,030 − 25,000 = 15,030 km밖에 안 되네요.

김민준 M04
김민준

측지선인데 최단이 아니라고요? 핸들을 한 번도 안 꺾었는데요?

선생님 T01
선생님

측지선은 “가까운 경로들 중에서” 짧은 거예요. 조금만 흔들어 본 경로보다는 짧지만, 완전히 다른 쪽으로 도는 경로까지 이긴다는 보장은 없어요.

이서연 S01
이서연

(가)는 최단이 아니고, 그럼 (나)는 대척점까지니까 짧은 쪽 호 그 자체잖아. 최단이고, 최단이면 하나뿐이야. 강볼록 함수의 최솟점은 유일하다고 배웠거든.

선생님 T01
선생님

서연 학생, 서울에서 북쪽으로 출발한 대원과 남쪽으로 출발한 대원은 각각 어디로 가요?

이서연 S05
이서연

둘 다 대척점으로 가요. 동쪽으로 출발해도, 어느 방향으로 출발해도 반 바퀴 가면 전부 대척점에서 만나요. 길이도 전부 20,015 km로 같고요. 최단경로가 무한히 많아요.

이서연 S07
이서연

길이 범함수는 볼록하지 않구나. 구면이 둥글어서 경로 공간이 휘어 있으니 유일성을 공짜로 얻을 수 없는 거야.

선생님 T01
선생님

맞아요. 지수 사상에서 본 켤레점, 곧 한 점에서 나간 측지선들이 다시 한 점에 모이는 곳이 여기서 나와요. 측지선은 켤레점에 닿기 전까지만 가까운 경로들보다 짧아요. 구면에서는 켤레점이 바로 대척점이라서 (가)의 경로는 대척점을 지나는 순간 최단 자격을 잃었어요.

김민준 M08
김민준

그러니까 측지선은 "지금 당장은 직진이 제일 빠르다"는 뜻이지, "끝까지 제일 빠르다"는 뜻은 아니네요!

김민준 M01
김민준

PyTorch 과제에서 처음 그래디언트 방향으로 계속 밀고 나갔더니 loss가 줄다가 어느 순간부터 다시 늘었던 거랑 비슷해요. 처음에 제일 좋은 방향이 끝까지 제일 좋은 방향은 아니었어요.

선생님 T13
선생님

원기둥에서도 생각해 볼 만해요. 한 점에서 바로 위의 점까지 가는 나선 측지선은 몇 바퀴 감느냐에 따라 무수히 많은데, 그중 최단은 감지 않는 세로 모선 하나예요.

문제 8 — 구면 위의 한 걸음, 싸게 가기

계산 길이가 1이어야 하는 매개변수 ww(단위 구면 위의 점)를 경사하강법으로 학습한다. 지금 w=(1,0,0)w = (1, 0, 0)이고, 이번 걸음의 접선 방향 벡터가 v=−η grad f=(0, 0.5, 0)\textcolor{#1f77b4}{v} = -\eta\, \mathrm{grad}\, f = (0,\ 0.5,\ 0)이다. (가) 그냥 더한 w+vw + \textcolor{#1f77b4}{v}의 길이는 얼마인가? (나) 지수 사상으로 간 점 exp⁡w(v)\exp_w(\textcolor{#1f77b4}{v})는 어디인가? (다) 더한 뒤 길이 1로 나누어 구면으로 되돌린 점은 어디인가? (나)와 (다)의 두 점은 같은가? 걸음을 (0, 0.1, 0)(0,\ 0.1,\ 0)으로 줄이면 어떻게 되는가?

같이 풀기 세션 8

김민준 M01
김민준

(가)는 1+0.25≈1.118\sqrt{1 + 0.25} \approx 1.118이라 구면 밖으로 나갔어요. 그럼 (다)처럼 다시 1로 나누면 되잖아요. (0.894, 0.447, 0)(0.894,\ 0.447,\ 0)이요. 구면 위로 돌아왔으니 이게 곧 (나)의 점이죠. 지수 사상은 괜히 어렵게 한 거고요.

선생님 T01
선생님

(나)부터 직접 구해 봐요. 대원을 따라 길이 0.5만큼 가면 어디예요?

김민준 M06
김민준

ww에서 (0,1,0)(0, 1, 0) 쪽으로 대원을 따라 0.5 rad 가니까 (cos⁡0.5, sin⁡0.5, 0)=(0.878, 0.479, 0)(\cos 0.5,\ \sin 0.5,\ 0) = (0.878,\ 0.479,\ 0)이에요. 어, (다)랑 달라요. (다)는 arctan⁡0.5≈0.464\arctan 0.5 \approx 0.464 rad밖에 안 갔네요. 0.036 rad 모자라요.

이서연 S01
이서연

더하면 접선 쪽으로 곧게 나가서 구면에서 멀어지고, 나누면 그 점을 중심 쪽으로 끌어내리니까 원래 가려던 호보다 덜 간 자리에 떨어지는 거야.

선생님 T01
선생님

걸음을 0.1로 줄이면요?

김민준 M01
김민준

0.1−arctan⁡0.1≈0.000330.1 - \arctan 0.1 \approx 0.00033 rad요. 걸음을 5배 줄였더니 차이는 100배 넘게 줄었어요.

김민준 M07
김민준

아까 발사 속력 표랑 같네요. 작게 쏘면 평면에 그린 그림을 곡면에 거의 그대로 옮겨 붙일 수 있었잖아요. 걸음이 작으면 싸게 더하고 나누기만 해도 지수 사상과 거의 같은 데 떨어져요. 그래서 구현에서는 이렇게 바꿔 쓰는 거였구나.

선생님 T01
선생님

보나벨의 논문도 구면에서는 「바깥 공간에서 더한 뒤 구면으로 되돌리기」를 지수 사상 대신 쓰는 방법의 예로 들어요. 되돌리기(retraction)라고 불러요. 측지선이나 크리스토펠 기호를 구하지 않아도 되니 계산이 훨씬 가벼워요.