성분 vθ는 화살표 v에서 숫자 하나를 뽑아낸 것인데, 학습에서도 화살표에서 숫자 하나를 뽑는 일을 늘 한다. 파라미터를 어느 방향으로 움직일지 정하면, 그 방향으로 손실이 얼마나 빨리 변하는지를 숫자 하나로 잰다. 화살표를 넣고 숫자를 받는 일이 이렇게 거듭된다면, “화살표를 넣으면 숫자가 나오는 장치” 자체를 하나의 대상으로 다룰 수는 없을까?
구면 위 개미(구면 밖으로 나가지 않고 구면 위만 기어가는 관찰자)를 다시 보자. 적도 위 점 (θ,ϕ)=(π/2,0)에서 개미의 속도는 v=−∂θ+∂ϕ, 바깥에서 보면 (0,1,1)이었다. 이 화살표를 받아 "이 방향으로 가면 높이 z=cosθ가 얼마나 빨리 변하는가"를 돌려주는 장치를 생각하자. 이 장치를 dz라 적는다(dz는 d와 z의 곱이 아니라 한 덩어리 이름이다. d는 미분(differential)의 머리글자로, "z의 변화율을 재는 장치"라고 읽는다). 화살표 v를 dz에 넣으면 1이 나오는데, 바깥에서 본 화살표의 높이 성분이 1이니 맞는 값이다. 구면좌표 (θ,ϕ)로도 확인할 수 있다. z=cosθ는 θ가 1 늘 때 −sinθ, 적도에서는 −1만큼 변하고, v의 θ 성분이 −1이니 (−1)×(−1)=1이다.
dz 같은 장치는 화살표를 넣으면 숫자 하나가 나오고, 화살표를 두 배로 하면 숫자도 두 배가 된다. 가장 단순한 것은 성분을 그대로 읽는 장치다. dθ는 화살표의 θ 성분을 읽어 v에서 −1을 내고, dϕ는 ϕ 성분을 읽어 1을 낸다. 일반 좌표 (x1,…,xn)에서도 dxi는 i번째 성분을 읽으므로, 기저 화살표 ∂j를 넣으면 i=j일 때만 1이 나온다.
여접벡터 (눈금자 / Cotangent Vector): 한 점의 화살표를 받아 숫자 하나를 내고, 화살표를 두 배로 하면 숫자도 두 배가 되는 장치. 한 점의 여접벡터를 모두 모은 공간이 여접공간(측정의 방 / Cotangent Space) Tp∗M이다. 접선벡터를 모은 공간이 접선공간이라면, 여접벡터를 모은 공간이 여접공간이다. Tp∗M도 곱셈이 아니라 한 덩어리 이름이다. 접선공간 TpM에 별표를 붙인 것으로, 별표는 접선공간의 화살표를 받아 숫자를 내는 여접벡터들의 공간이라는 표시다. "매니폴드 M의 점 p에 붙은 여접공간"이라고 읽는다.
여접벡터를 그림으로 그리면 등고선 묶음이고, 화살표를 대어 몇 줄을 가로지르는지 센 것이 여접벡터가 내는 숫자다. 등고선을 두 배로 촘촘하게 그리면 같은 화살표가 두 배로 많은 줄을 넘는다.
여접벡터는 등고선 묶음. (가) 등고선 값이 1씩 커지는 여접벡터 df에 화살표 v를 대면 두 줄을 넘어 2가 나온다. (나) 등고선이 두 배로 촘촘한 여접벡터 2df에는 같은 v가 네 줄을 넘어 4가 나온다
점마다 여접벡터를 하나씩 매끄럽게 배정한 것은 1-형식이라 부른다(여접벡터의 지도). 위의 dz처럼 함수 하나의 변화율을 재는 df가 가장 흔한 예다.
ML에서: 그래디언트는 접선벡터가 아니라 여접벡터
그래디언트(gradient)는 흔히 가장 가파른 방향의 벡터로 배운다. 그런데 손실 L의 미분 dL은 방향 v를 받아 "그 방향으로 가면 손실이 얼마나 변하는가"를 돌려주는 여접벡터다: dL(v)=∂θi∂Lvi. PyTorch가 .grad에 담아 주는 숫자 묶음 ∂L/∂θi는 여접벡터 dL의 성분 dL(∂i)이다.
여접벡터의 성분은 접선벡터의 성분과 반대로 변한다. 표준편차 σ 대신 s=logσ로 좌표를 바꾸면 ∂L/∂s=σ∂L/∂σ라서, σ=0.01에서 그래디언트 성분은 100분의 1로 줄어든다. 같은 자리에서 화살표 성분은 s˙=σ˙/σ라 100배 커진다. 그런데 경사하강법의 한 스텝 θ←θ−η∂L/∂θ(η는 에타, 스텝 크기를 정하는 학습률)는 여접벡터인 그래디언트의 성분을 접선벡터인 스텝의 성분에 그대로 더한다. 성분이 서로 반대로 변하는 둘을 이렇게 섞으면 무슨 일이 생길까? 아래 문제 12에서 직접 계산해 보자.
문제 10: 오르막 안내판
확인 등산로 안내판에 「이 구간은 1 km 갈 때마다 50 m 오른다」고 적혀 있다. (가) 0.2 km를 걸으면 몇 m 오르는가? (나) 거리를 m로 적으면, 걸은 거리를 나타내는 숫자와 「거리 한 단위마다 오르는 높이」를 나타내는 숫자는 각각 얼마가 되는가? (다) 두 숫자는 각각 몇 배가 됐는가?
문제 10의 그림. 「1 km 갈 때마다 50 m 오른다」는 안내판과 그 구간의 오르막, 물음의 자리 0.2 km
같이 풀기 세션 10
김민준
(가)는 0.2×50=10 m요. (나)는 km를 m로 바꾸면 숫자에 1000을 곱하니까 걸은 거리는 200, 오르는 높이도 50×1000=50,000이요.
선생님
그 두 숫자로 (가)를 다시 계산하면요?
김민준
200×50,000이면 1,000만 m… 에베레스트보다 천 배 넘게 높네요. 오르는 높이 쪽은 1000으로 나눠야 해요. 1 m마다 0.05 m, 그러면 200×0.05=10 m로 맞아요.
이서연
걸은 거리의 숫자는 1000배, 「한 단위마다 오르는 높이」는 1000분의 1. 둘을 곱한 오르는 높이만 변하지 않아. 재는 단위가 작아지면 걸은 거리의 숫자는 커지고, 한 단위마다 재는 숫자는 작아져.
문제 11: 여접벡터 dθ를 동쪽 화살표에 대면
계산 평면의 점 (x,y)=(1,1)에서 극좌표 (r,θ)의 여접벡터(1-형식) dr, dθ를 dx, dy로 적어라(dθ=adx+bdy 꼴). 그리고 동쪽을 가리키는 화살표 ∂x를 넣어 dr(∂x), dθ(∂x)를 구하라.
문제 11의 그림. 평면의 점 (1, 1)에서 동쪽을 가리키는 화살표 ∂x와, 그 둘레의 r 등고선(원)과 θ 등고선(원점에서 뻗는 반직선)
같이 풀기 세션 11
이서연
계산할 것도 없지 않아? 여접벡터 dθ는 θ 성분만 읽고 ∂x는 x 방향이니까 dθ(∂x)=0이야. dxi(∂j)=δji 식에서 i=j면 0이었잖아.
김민준
나는 식으로 해 볼게. x=rcosθ, y=rsinθ에서 dθ=∂θ∂xdx+∂θ∂ydy=−rsinθdx+rcosθdy, 이 점에서 −dx+dy야. ∂x를 넣으면 −1이지.
선생님
답이 0과 −1로 갈렸네요. 여접벡터 dθ에 θ 방향 화살표 ∂θ를 넣으면 무엇이 나와야 하죠? 이 점에서 ∂θ는 (−1,1)이에요.
김민준
1이 나와야죠. 제 식에 넣으면 −(−1)+1=2… 틀렸네요. 옛 좌표를 새 좌표로 미분한 걸 썼어요. θ를 x, y로 미분해야 하니까 dθ=−r2ydx+r2xdy=−21dx+21dy. 이러면 ∂θ를 넣어 21+21=1이 맞고, ∂x를 넣으면 −21예요.
이서연
0이 아니네요. 제가 쓴 δji는 같은 좌표계의 여접벡터와 접선벡터끼리의 약속이었어요. ∂x는 (x,y) 좌표계의 화살표라, dθ가 읽으면 0이 아니에요.