매개변수 공간의 풍경을 걷다

풀백: 저쪽의 자를 이쪽으로 끌어오기

앞 절에서 피셔 행렬은 좌표를 바꿀 때 Fθ=JTFφJF_\theta = J^T F_\varphi J로 바뀌었다. 그런데 θ\theta도 φ\varphi도 이름표일 뿐이고, 이름표는 거리를 모른다. 두 분포가 얼마나 구별하기 쉬운가는 분포 자체의 성질이다. 그렇다면 매개변수 공간의 자는 분포 공간의 자를 함수 θ↦pθ\theta \mapsto p_\theta를 거쳐 빌려 온 것이 아닐까? 문제는 이 함수가 되돌릴 수 없을 때가 많다는 것이다. 서로 다른 가중치가 똑같은 분포를 내는 신경망은 흔하다. 되돌릴 수 없는 함수를 따라서도 자를 빌려 올 수 있을까?

역사: 엘리 카르탕 (Élie Cartan, 1869–1951)

엘리 카르탕

엘리 카르탕은 프랑스 알프스 기슭의 마을 돌로미외에서 대장장이의 아들로 태어나, 장학금으로 파리 고등사범학교에 들어갔다. 1899년 논문에서 카르탕은 적분 기호 안의 dxdx, dydy를 계산용 표시가 아니라 그 자체로 계산할 수 있는 대상으로 다루는 방법을 내놓았다. 오늘날 미분형식이라 부르는 것이다. 미분형식은 어떤 매끄러운 함수를 따라서든, 그 함수가 되돌릴 수 없어도, 출발 공간 쪽으로 끌어올 수 있다. 좌표 바꾸기, 치환적분, 곡면 위의 적분이 이 한 가지 규칙으로 정리된다. 그의 글은 난해하기로 유명해서, 방법이 널리 이해된 것은 연구 경력의 후반에 이르러서였다고 전해진다.

풀백: 앞으로 보내 놓고 저쪽 자로 잰다

매끄러운 함수 f:M→N\textcolor{#3c7b8b}{f}: \textcolor{#0098c7}{M} \to \textcolor{#0098c7}{N}이 있고, 저쪽 N\textcolor{#0098c7}{N}에만 거리를 재는 자 g\textcolor{#d62728}{g}가 있다고 하자. 이쪽 M\textcolor{#0098c7}{M}에서 작은 변화 v\textcolor{#1f77b4}{v}가 얼마나 큰지 알고 싶다. 방법은 세 걸음이다.

  1. v\textcolor{#1f77b4}{v}를 f\textcolor{#3c7b8b}{f}로 저쪽에 보낸다. 야코비안 J\textcolor{#964079}{J}가 "이쪽을 조금 움직이면 저쪽이 얼마나 움직이는가"를 적은 번역표이므로, 보낸 결과는 Jv\textcolor{#964079}{J}\textcolor{#1f77b4}{v}다. 앞 절의 푸시포워드다.
  2. 저쪽 자 g\textcolor{#d62728}{g}로 잰다.
  3. 그 값을 v\textcolor{#1f77b4}{v}의 크기로 삼는다.

이 세 걸음을 한 덩어리로 묶어 이쪽의 자로 부른다. 자를 새로 만든 것이 아니라, 저쪽 자를 쓰는 절차에 이름을 붙인 것이다.

(f∗g)(u,v)=g(f∗u, f∗v),G=JT g J (\textcolor{#3c7b8b}{f}^*\textcolor{#d62728}{g})(\textcolor{#1f77b4}{u}, \textcolor{#1f77b4}{v}) = \textcolor{#d62728}{g}(\textcolor{#3c7b8b}{f}_*\textcolor{#1f77b4}{u},\ \textcolor{#3c7b8b}{f}_*\textcolor{#1f77b4}{v}), \qquad \textcolor{#d62728}{G} = \textcolor{#964079}{J}^T\,\textcolor{#d62728}{g}\,\textcolor{#964079}{J}
fM 의 점을 N 의 점으로 보내는 매끄러운 함수 (되돌릴 수 없어도 된다)f∗, f∗풀백 (「에프 위 별」, 자를 뒤로 끌어오기), 푸시포워드 (「에프 아래 별」, 화살표를 앞으로 보내기)u,vM 의 접선벡터 (이쪽의 작은 변화)gN 의 계량 (저쪽 자)G끌어온 계량 f∗g 의 성분 행렬 (이쪽 자)J야코비안 ∂(N 의 좌표)/∂(M 의 좌표) \begin{array}{ll} \textcolor{#3c7b8b}{f} & \textcolor{#0098c7}{M} \text{ 의 점을 } \textcolor{#0098c7}{N} \text{ 의 점으로 보내는 매끄러운 함수 (되돌릴 수 없어도 된다)} \\ \textcolor{#3c7b8b}{f}^*,\ \textcolor{#3c7b8b}{f}_* & \text{풀백 (「에프 위 별」, 자를 뒤로 끌어오기), 푸시포워드 (「에프 아래 별」, 화살표를 앞으로 보내기)} \\ \textcolor{#1f77b4}{u}, \textcolor{#1f77b4}{v} & \textcolor{#0098c7}{M} \text{ 의 접선벡터 (이쪽의 작은 변화)} \\ \textcolor{#d62728}{g} & \textcolor{#0098c7}{N} \text{ 의 계량 (저쪽 자)} \\ \textcolor{#d62728}{G} & \text{끌어온 계량 } \textcolor{#3c7b8b}{f}^*\textcolor{#d62728}{g} \text{ 의 성분 행렬 (이쪽 자)} \\ \textcolor{#964079}{J} & \text{야코비안 } \partial(\textcolor{#0098c7}{N} \text{ 의 좌표}) / \partial(\textcolor{#0098c7}{M} \text{ 의 좌표}) \end{array}

J\textcolor{#964079}{J}가 두 번 나오는 까닭은 자가 화살표를 두 개 받기 때문이다(내적처럼). 오른쪽 J\textcolor{#964079}{J}가 한 화살표를, 왼쪽 JT\textcolor{#964079}{J}^T가 다른 화살표를 번역한다. 앞 절 문제 6에서 바닥재의 「길이당 값」은 길이 배율로 한 번, 「넓이당 값」은 두 번 나눠야 했던 것이 이것이다. 벡터는 한 번, 계량은 두 번이다. 앞 절의 Fθ=JTFφJ\textcolor{#d62728}{F}_{\textcolor{#1b9e77}{\theta}} = \textcolor{#964079}{J}^T \textcolor{#d62728}{F}_{\textcolor{#1b9e77}{\varphi}} \textcolor{#964079}{J}도 좌표 바꾸기를 따라 피셔 계량을 끌어온 것이었다.

왜 방향이 반대인가. 이쪽의 두 점이 저쪽 한 곳으로 간다고 해 보자. 두 점에 적힌 값이 다르면 앞으로 밀 때 저쪽에 무엇을 적을지 정할 수 없지만, 뒤로 끌어올 때는 두 점이 저쪽 값을 똑같이 받아 오면 된다. 그래서 화살표는 앞으로, 자·눈금자·함수는 뒤로 가고, 풀백은 함수가 되돌릴 수 없어도 언제나 정의된다.

위: 함수 가 의 두 점(값 2와 5)을 의 한 점으로 보내면, 값을 앞으로 밀 때 그 자리에 무엇을 적을지 정할 수 없다. 아래: 거꾸로 의 값 7을 끌어오면 두 점이 모두 7을 받아 온다
위: 함수 ff가 MM의 두 점(값 2와 5)을 NN의 한 점으로 보내면, 값을 앞으로 밀 때 그 자리에 무엇을 적을지 정할 수 없다. 아래: 거꾸로 NN의 값 7을 끌어오면 두 점이 모두 7을 받아 온다

장난감 예제: 치환적분. 학부 1학년 때 배운 치환적분 ∫h(x) dx=∫h(f(t)) f′(t) dt\int \textcolor{#966b40}{h}(\textcolor{#1b9e77}{x})\,\textcolor{#a100c1}{dx} = \int \textcolor{#966b40}{h}(\textcolor{#3c7b8b}{f}(\textcolor{#1b9e77}{t}))\,\textcolor{#3c7b8b}{f}'(\textcolor{#1b9e77}{t})\,\textcolor{#a100c1}{dt}에서 "dx\textcolor{#a100c1}{dx}를 f′(t) dt\textcolor{#3c7b8b}{f}'(\textcolor{#1b9e77}{t})\,\textcolor{#a100c1}{dt}로 바꿔 쓴다"는 규칙이 바로 1-형식의 풀백 f∗dx=f′(t) dt\textcolor{#3c7b8b}{f}^*\textcolor{#a100c1}{dx} = \textcolor{#3c7b8b}{f}'(\textcolor{#1b9e77}{t})\,\textcolor{#a100c1}{dt}다. f′(t)\textcolor{#3c7b8b}{f}'(\textcolor{#1b9e77}{t})가 1×1 번역표다.

따라 계산해 보기 — 극좌표의 계량을 끌어와 구하기

극좌표 계량 dr2+r2dθ2d\textcolor{#1b9e77}{r}^2 + \textcolor{#1b9e77}{r}^2 d\textcolor{#1b9e77}{\theta}^2은 외워야 할 공식이 아니다. 평면의 자를 끌어오면 나온다. 다이얼은 반지름 r\textcolor{#1b9e77}{r}과 각도 θ\textcolor{#1b9e77}{\theta} 둘이고, 결과는 평면 위의 실제 위치다.

f(r,θ)=(rcos⁡θ, rsin⁡θ),g=dx2+dy2 \textcolor{#3c7b8b}{f}(\textcolor{#1b9e77}{r}, \textcolor{#1b9e77}{\theta}) = (\textcolor{#1b9e77}{r}\cos\textcolor{#1b9e77}{\theta},\ \textcolor{#1b9e77}{r}\sin\textcolor{#1b9e77}{\theta}), \qquad \textcolor{#d62728}{g} = \textcolor{#a100c1}{dx}^2 + \textcolor{#a100c1}{dy}^2
r,θ극좌표 (다이얼). 여기서 θ 는 매개변수가 아니라 각도f다이얼 설정을 평면 위 위치로 보내는 함수dx,dy평면의 좌표 1-형식 (가로⋅세로 변화를 읽는 눈금자)g평면의 보통 자 (유클리드 계량) \begin{array}{ll} \textcolor{#1b9e77}{r}, \textcolor{#1b9e77}{\theta} & \text{극좌표 (다이얼). 여기서 } \textcolor{#1b9e77}{\theta} \text{ 는 매개변수가 아니라 각도} \\ \textcolor{#3c7b8b}{f} & \text{다이얼 설정을 평면 위 위치로 보내는 함수} \\ \textcolor{#a100c1}{dx}, \textcolor{#a100c1}{dy} & \text{평면의 좌표 1-형식 (가로·세로 변화를 읽는 눈금자)} \\ \textcolor{#d62728}{g} & \text{평면의 보통 자 (유클리드 계량)} \end{array}

눈금자부터 끌어온다. x=rcos⁡θ\textcolor{#1b9e77}{x} = \textcolor{#1b9e77}{r}\cos\textcolor{#1b9e77}{\theta}를 미분하면 f∗dx=cos⁡θ dr−rsin⁡θ dθ\textcolor{#3c7b8b}{f}^*\textcolor{#a100c1}{dx} = \cos\textcolor{#1b9e77}{\theta}\,\textcolor{#a100c1}{dr} - \textcolor{#1b9e77}{r}\sin\textcolor{#1b9e77}{\theta}\,\textcolor{#a100c1}{d\theta}, 같은 방법으로 f∗dy=sin⁡θ dr+rcos⁡θ dθ\textcolor{#3c7b8b}{f}^*\textcolor{#a100c1}{dy} = \sin\textcolor{#1b9e77}{\theta}\,\textcolor{#a100c1}{dr} + \textcolor{#1b9e77}{r}\cos\textcolor{#1b9e77}{\theta}\,\textcolor{#a100c1}{d\theta}다.

제곱해서 더한다. 교차항 ∓2rsin⁡θcos⁡θ dr dθ\mp 2\textcolor{#1b9e77}{r}\sin\textcolor{#1b9e77}{\theta}\cos\textcolor{#1b9e77}{\theta}\,\textcolor{#a100c1}{dr}\,\textcolor{#a100c1}{d\theta}는 서로 지워지고 cos⁡2+sin⁡2=1\cos^2 + \sin^2 = 1이 남아 f∗g=dr2+r2 dθ2\textcolor{#3c7b8b}{f}^*\textcolor{#d62728}{g} = \textcolor{#a100c1}{dr}^2 + \textcolor{#1b9e77}{r}^2\,\textcolor{#a100c1}{d\theta}^2이다. 행렬로 쓰면 J=(cos⁡θ−rsin⁡θsin⁡θrcos⁡θ)\textcolor{#964079}{J} = \begin{pmatrix} \cos\textcolor{#1b9e77}{\theta} & -\textcolor{#1b9e77}{r}\sin\textcolor{#1b9e77}{\theta} \\ \sin\textcolor{#1b9e77}{\theta} & \textcolor{#1b9e77}{r}\cos\textcolor{#1b9e77}{\theta} \end{pmatrix}, g=I\textcolor{#d62728}{g} = I이고 G=JTJ=diag(1, r2)\textcolor{#d62728}{G} = \textcolor{#964079}{J}^T\textcolor{#964079}{J} = \mathrm{diag}(1,\ \textcolor{#1b9e77}{r}^2)로 같다.

숫자로 확인한다. 각도 다이얼을 0.01 라디안 돌리면, r=1\textcolor{#1b9e77}{r} = 1에서는 점이 0.01만큼, r=10\textcolor{#1b9e77}{r} = 10에서는 0.1만큼 움직인다. 번역표가 각도 방향에 r\textcolor{#1b9e77}{r}을 곱하기 때문이고, r2\textcolor{#1b9e77}{r}^2은 그 숫자의 제곱이다. 끌어온 자는 장소마다 다르다.

아래 위젯의 왼쪽은 다이얼 공간, 오른쪽은 결과 공간이다. 결과 공간의 작은 원(저쪽 자로 잰 길이 ϵ\textcolor{#b95b64}{\epsilon}인 변화들)을 번역표로 끌어오면 다이얼 공간에서는 찌그러진 타원이 된다. 극좌표에서 다이얼 점을 원점 쪽으로 끌어 타원이 각도 방향으로 길어지는 것을 확인해 보자. 「로짓 두 개 → 확률」 버튼에서 타원이 띠로 펴지는 까닭은 다음 절에서 다룬다.

ML에서: 피셔 행렬과 밀도도 끌어온 것이다

피셔 행렬. 결과가 유한 개인 분포 공간에는 매개변수와 상관없는 자 ∑a(dpa)2/pa\sum_a (d\textcolor{#2e8b3a}{p}_a)^2 / \textcolor{#2e8b3a}{p}_a가 있다. 확률로 나누는 것은 확률이 작은 칸일수록 같은 dpd\textcolor{#2e8b3a}{p}가 더 잘 구별되기 때문이다. 100일을 세면 강수확률 50%에서 52%로의 변화는 우연한 흔들림(5일)에 묻히지만, 1%에서 3%로의 변화는 흔들림(약 1일)의 두 배라 바로 드러난다. 이것을 모델 θ↦pθ\textcolor{#1b9e77}{\theta} \mapsto \textcolor{#2e8b3a}{p}_{\textcolor{#1b9e77}{\theta}}로 끌어오면 Fij=∑a1pa∂pa∂θi∂pa∂θj\textcolor{#d62728}{F}_{ij} = \sum_a \frac{1}{\textcolor{#2e8b3a}{p}_a}\frac{\partial \textcolor{#2e8b3a}{p}_a}{\partial\textcolor{#1b9e77}{\theta}^i}\frac{\partial \textcolor{#2e8b3a}{p}_a}{\partial\textcolor{#1b9e77}{\theta}^j}이고, ∂log⁡pa=∂pa/pa\partial \log \textcolor{#2e8b3a}{p}_a = \partial \textcolor{#2e8b3a}{p}_a / \textcolor{#2e8b3a}{p}_a를 넣으면 스코어의 공분산, 곧 피셔 정보행렬 그대로다. 자는 분포 공간에 있으니, 이름표를 바꾸면 번역표와 그래디언트가 함께 바뀌어 상쇄된다. 자연 경사가 좌표에 휘둘리지 않는 이유다.

밀도의 풀백. 밀도는 "부피당 확률"이라 함수처럼 합성만 해서는 안 된다. 영역이 두 배로 늘면 같은 확률이 두 배 넓은 곳에 퍼져 밀도는 절반이 되므로, 부피 배율인 행렬식을 함께 곱한다. 노멀라이징 플로의 log⁡px(x)=log⁡pz(z)+log⁡∣det⁡(∂z/∂x)∣\log \textcolor{#2e8b3a}{p}_x(\textcolor{#007a72}{x}) = \log \textcolor{#2e8b3a}{p}_z(\textcolor{#007a52}{z}) + \log\lvert\det(\partial \textcolor{#007a52}{z}/\partial \textcolor{#007a72}{x})\rvert가 이것이고, 치환적분의 f′(t)\textcolor{#3c7b8b}{f}'(\textcolor{#1b9e77}{t}) 자리에 행렬식이 온 것뿐이다. 계량은 화살표 두 개를 받아 J\textcolor{#964079}{J}가 두 번(JTgJ\textcolor{#964079}{J}^T\textcolor{#d62728}{g}\textcolor{#964079}{J}), 밀도는 부피 하나를 받아 행렬식이 한 번 붙는다. 둘 다 풀백이지만 계산은 다르다.

문제 9 — 과일 바구니의 크기를 영수증으로 재기

확인 사과는 한 개 1,000원, 배는 한 개 1,500원이다. 바구니(사과 개수, 배 개수)를 넣으면 영수증 금액이 나온다. 바구니 쪽에는 "얼마나 큰 변화인가"를 재는 자가 없고, 금액 쪽에는 있다(금액 차이). (1) 금액 쪽 자를 끌어와 바구니 변화의 크기로 삼을 때, 사과 3개를 더 넣고 배 2개를 빼는 변화의 크기는 얼마인가? (2) 거꾸로, 바구니마다 적힌 무게(사과 250g, 배 400g)를 금액 쪽으로 밀어 "금액마다 무게 하나"를 적을 수 있는가?

같이 풀기 세션 9

김민준 M01
김민준

(1)은 바구니가 (3,−2)(3, -2)만큼 변했으니까 크기는 9+4=13\sqrt{9 + 4} = \sqrt{13}, 약 3.6이요. 꽤 큰 변화네요.

선생님 T01
선생님

가게 주인은 영수증만 봐요. 주인에게 이 변화는 얼마짜리일까요? 세 걸음을 따라가 볼까요?

이서연 S01
이서연

먼저 앞으로 보내요. 금액 변화는 3×1000−2×1500=03 \times 1000 - 2 \times 1500 = 0원. 금액 쪽 자로 재면 0이니까, 끌어온 자로는 이 변화의 크기가 0이에요.

김민준 M08
김민준

바구니는 확 바뀌었는데 크기가 0이라고요? 아, 영수증만 보는 사람한테는 아무 일도 안 일어난 거구나.

이서연 S01
이서연

(2)는 안 돼요. 사과 3개짜리 바구니와 배 2개짜리 바구니가 둘 다 3,000원인데 무게는 750g과 800g이에요. 3,000원 자리에 뭘 적을지 정할 수 없어요.

선생님 T13
선생님

그래요. 끌어오기는 늘 되고, 밀어내기는 두 바구니가 같은 금액으로 갈 때 막혀요. 그리고 (1)의 "크기 0인 변화"를 기억해 두세요. 모양만 바꿔서 다시 나와요.

문제 10 — 구면의 계량을 3차원 공간에서 끌어오기

계산 반지름 R\textcolor{#0561ff}{R}인 구면을 (θ,ϕ)↦R(sin⁡θcos⁡ϕ, sin⁡θsin⁡ϕ, cos⁡θ)(\textcolor{#1b9e77}{\theta}, \textcolor{#1b9e77}{\phi}) \mapsto \textcolor{#0561ff}{R}(\sin\textcolor{#1b9e77}{\theta}\cos\textcolor{#1b9e77}{\phi},\ \sin\textcolor{#1b9e77}{\theta}\sin\textcolor{#1b9e77}{\phi},\ \cos\textcolor{#1b9e77}{\theta})로 3차원 공간에 놓는다(θ\textcolor{#1b9e77}{\theta}는 북극에서 잰 각, ϕ\textcolor{#1b9e77}{\phi}는 경도). 3차원 공간의 보통 자 dx2+dy2+dz2\textcolor{#a100c1}{dx}^2 + \textcolor{#a100c1}{dy}^2 + \textcolor{#a100c1}{dz}^2를 끌어와 구면의 계량 G\textcolor{#d62728}{G}를 구하라. 극에서 경도 방향의 길이는 어떻게 되는가?

같이 풀기 세션 10

이서연 S01
이서연

번역표 J\textcolor{#964079}{J}는 3×2야. 첫 칸은 θ\textcolor{#1b9e77}{\theta}로 미분한 R(cos⁡θcos⁡ϕ, cos⁡θsin⁡ϕ, −sin⁡θ)\textcolor{#0561ff}{R}(\cos\textcolor{#1b9e77}{\theta}\cos\textcolor{#1b9e77}{\phi},\ \cos\textcolor{#1b9e77}{\theta}\sin\textcolor{#1b9e77}{\phi},\ -\sin\textcolor{#1b9e77}{\theta}), 둘째 칸은 ϕ\textcolor{#1b9e77}{\phi}로 미분한 R(−sin⁡θsin⁡ϕ, sin⁡θcos⁡ϕ, 0)\textcolor{#0561ff}{R}(-\sin\textcolor{#1b9e77}{\theta}\sin\textcolor{#1b9e77}{\phi},\ \sin\textcolor{#1b9e77}{\theta}\cos\textcolor{#1b9e77}{\phi},\ 0). 3차원의 자는 단위행렬이니까 JJT\textcolor{#964079}{J}\textcolor{#964079}{J}^T를 계산하면… 3×3 행렬이 나오네.

선생님 T01
선생님

그 3×3 행렬은 어느 공간의 화살표를 재는 자일까요? 우리가 원하는 자는 어디에 생겨야 하죠?

이서연 S07
이서연

다이얼 쪽, (θ,ϕ)(\textcolor{#1b9e77}{\theta}, \textcolor{#1b9e77}{\phi}) 쪽이요. 그러면 2×2여야 하니까 JTJ\textcolor{#964079}{J}^T\textcolor{#964079}{J}가 맞아요. 순서를 거꾸로 곱했어요.

김민준 M01
김민준

그럼 칸끼리 내적하면 되네. 첫 칸 길이 제곱은 R2(cos⁡2θ+sin⁡2θ)=R2\textcolor{#0561ff}{R}^2(\cos^2\textcolor{#1b9e77}{\theta} + \sin^2\textcolor{#1b9e77}{\theta}) = \textcolor{#0561ff}{R}^2, 둘째 칸은 R2sin⁡2θ\textcolor{#0561ff}{R}^2\sin^2\textcolor{#1b9e77}{\theta}, 두 칸의 내적은 cos⁡ϕsin⁡ϕ\cos\textcolor{#1b9e77}{\phi}\sin\textcolor{#1b9e77}{\phi} 항이 지워져서 0. G=diag(R2, R2sin⁡2θ)\textcolor{#d62728}{G} = \mathrm{diag}(\textcolor{#0561ff}{R}^2,\ \textcolor{#0561ff}{R}^2\sin^2\textcolor{#1b9e77}{\theta})요.

이서연 S01
이서연

극에서는 sin⁡θ=0\sin\textcolor{#1b9e77}{\theta} = 0이라 경도 방향 길이가 0이야. 경도 다이얼을 아무리 돌려도 극점은 제자리니까. 여기도 번역표가 납작해지는 곳이네.

선생님 T14
선생님

맞아요. 구면 자체는 매끄러운데, 이 좌표로 놓는 함수가 극에서 납작해지는 거예요. 이런 곳은 다음 절에서 따로 봐요. 어쨌든 자를 식으로 외울 필요 없이, 바깥 공간의 평범한 자를 끌어오면 구면의 계량이 나와요.

이서연 S01
이서연

행렬 곱 순서는 결과가 어느 쪽에 살아야 하는지로 정하면 되겠어요. 선형대수 시간에 "크기부터 맞춰 보라"던 말이 이거였네요.