에피사이클: 돌아가는 화살표로 그림 그리기

오일러 공식: 일정한 속도로 도는 화살표

길이 1인 복소수를 곱하면 화살표가 돈다는 것을 보았다. 이제 펜 끝을 시간에 따라 움직여 보자. 원 위를 일정한 속도로 도는 펜이라면 시각 t에 이른 각도는 t에 비례하고, 각도 φ(파이)를 돈 화살표는 cos φ + i sin φ였다. 그런데 이 화살표가 「곱하기」로 만들어졌다는 것을 떠올리면, 아주 작은 돌리기를 수없이 거듭 곱해서 이 화살표에 닿을 수 있을까 하는 물음이 생긴다. 닿는다면 작은 돌리기를 끝없이 거듭한 결과는 어떤 식으로 적힐까?

역사: 그림보다 먼저 나온 식

작은 돌리기를 거듭 곱한 끝을 적는 식은 화살표 그림보다 먼저 나왔다. 영국의 코츠(Roger Cotes)는 1714년 왕립학회지에 실은 『로그 측정』에서 원호의 길이와 로그 사이의 관계를 적었는데, 지금 말로 고치면 오일러 공식의 로그 꼴이다(i의 자리가 한쪽 어긋나 있었다). 오일러(Leonhard Euler)는 1748년 『무한 해석 입문』 1권에서 지금의 꼴을 적었다. 그는 아주 작은 호를 무한히 큰 수만큼 거듭하는 생각으로, 코사인 더하기 i × 사인을 지수 하나로 적는 식에 닿았다. 그때는 평면의 화살표 그림이 없었고, 베셀이 곱하기를 「방향각을 더하기」로 그린 것은 그로부터 50년쯤 뒤다. 오일러의 식이 먼저 맞았고, 오일러 공식이 왜 맞는지 눈으로 보여 주는 화살표 그림은 나중에 왔다. 허수 단위를 i라는 글자로 적는 것도 오일러가 시작했다. 1777년 학술원에 내고 1794년에 실린 글에서 「앞으로 √−1 을 글자 i 로 적겠다」고 밝혔다.

반 바퀴를 n번에 나눠 돌리기

1에 1 + 0.01i를 곱하면 1 + 0.01i가 되어, 화살표 끝이 지금 방향에 수직으로 0.01만큼 밀렸다. 각도로는 거의 0.01라디안(약 0.57°)을 돈 것이고, 길이는 √(1 + 0.01²) = 1.00005로 거의 늘지 않았다. 작은 수 a에 대해 1 + ia를 곱하는 일은 「거의 a라디안만큼 돌리기」다.

그러면 반 바퀴 φ = π(180°)를 n번에 나눠, 한 번에 1 + iπ/n씩 곱해 보자. n번 곱한 결과 (1 + iπ/n)ⁿ은 아래와 같다.

나눈 횟수 n 끝점 길이 각도 −1 까지의 거리
1 1.000 + 3.142i 3.297 72.3° 3.724
2 −1.467 + 3.142i 3.467 115.0° 3.176
4 −2.321 + 1.204i 2.614 152.6° 1.787
10 −1.593 + 0.156i 1.601 174.4° 0.614
100 −1.051 + 0.001i 1.051 179.9° 0.051
1000 −1.005 + 0.000i 1.005 180.0° 0.005

한 번에 크게 돌리면 수직으로 밀린 만큼 길이가 늘어 원 밖으로 벗어난다. 잘게 나눌수록 한 번 곱할 때의 길이 배율 √(1 + (π/n)²)이 1에 가까워지고(n = 100이면 1.00049), 끝점은 반 바퀴 돈 자리 −1에 다가간다. n = 1000이면 −1과의 거리가 0.005다.

반 바퀴(φ = π)를 n번의 작은 돌리기 1 + iπ/n 으로 나누어 거듭 곱한 꺾은선. 점선은 길이 1인 원이다. 잘게 나눌수록 꺾은선이 원에 붙고 끝점이 −1 에 다가간다(s2_euler.py, figs.py)
반 바퀴(φ = π)를 n번의 작은 돌리기 1 + iπ/n 으로 나누어 거듭 곱한 꺾은선. 점선은 길이 1인 원이다. 잘게 나눌수록 꺾은선이 원에 붙고 끝점이 −1 에 다가간다(s2_euler.py, figs.py)

(1 + x/n)ⁿ에서 n을 끝없이 키운 값을 eˣ(e = 2.718…)로 적는다. 그러니 각도 φ를 잘게 나눠 돌린 끝은 eiφ로 적는 것이 자연스럽고, 그 자리는 길이 1인 원 위에서 각도가 φ인 점이다.

eiφ=lim⁡n→∞(1+iφn)n=cos⁡φ+isin⁡φe^{i\textcolor{#ff1eff}{\varphi}} = \lim_{\textcolor{#3c4bff}{n}\to\infty}\Big(1 + \frac{i\textcolor{#ff1eff}{\varphi}}{\textcolor{#3c4bff}{n}}\Big)^{\textcolor{#3c4bff}{n}} = \cos\textcolor{#ff1eff}{\varphi} + i\sin\textcolor{#ff1eff}{\varphi}
φ파이: 돌린 각도 (라디안. π 가 180°)n돌리기를 나눈 횟수e자연로그의 밑 2.718…\begin{array}{ll} \textcolor{#ff1eff}{\varphi} & \text{파이: 돌린 각도 (라디안. } \pi \text{ 가 180°)} \\ \textcolor{#3c4bff}{n} & \text{돌리기를 나눈 횟수} \\ e & \text{자연로그의 밑 } 2.718\ldots \end{array}

작은 돌리기를 끝없이 거듭한 극한과 원 위의 점을 잇는 등식 eiφ = cos φ + i sin φ 를 오일러 공식 (원 위의 점을 지수 하나로 / Euler’s formula)이라 한다. φ = π를 넣으면 eiπ = −1, 위 표의 끝점이 다가가던 값이다.

이제 시각 t에 따라 일정한 속도로 도는 화살표를 적을 수 있는데, 시각 t에 각도 kt만큼 돈 화살표다.

eikt=cos⁡kt+isin⁡kte^{i\textcolor{#0078e1}{k}\textcolor{#a67a63}{t}} = \cos \textcolor{#0078e1}{k}\textcolor{#a67a63}{t} + i\sin \textcolor{#0078e1}{k}\textcolor{#a67a63}{t}
t시각k주파수: 시간 2π 동안 도는 바퀴 수 (음수면 시계 방향)\begin{array}{ll} \textcolor{#a67a63}{t} & \text{시각} \\ \textcolor{#0078e1}{k} & \text{주파수: 시간 } 2\pi \text{ 동안 도는 바퀴 수 (음수면 시계 방향)} \end{array}

k = 1이면 시간 2π 동안 시계 반대 방향으로 한 바퀴, k = 2면 두 바퀴, k = −1이면 시계 방향으로 한 바퀴다. 이렇게 한 바퀴(시간 2π) 동안 화살표가 도는 횟수 k를 화살표의 주파수 (한 바퀴 동안 도는 횟수 / frequency)라 부른다. 물결이 정해진 시간 동안 몇 번 되풀이되는가를 나타내는 주파수와 같은 것이다. 곱셈 규칙 「각도는 더해진다」는 지수의 규칙 eia eib = ei(a+b)과 같은 말이 된다.

직접 움직여 보기작은 돌리기를 n번새 창에서 열기 ↗

ML에서: 사인 위치 벡터의 성분 쌍은 도는 화살표다

트랜스포머를 처음 내놓은 논문(바스와니 외, 2017)은 자리 번호 m을 벡터로 펴서 토큰 벡터에 더했다. 펴는 법은 성분을 둘씩 묶어 한 묶음에 sin(mω)와 cos(mω)를 넣는 것이고, 묶음마다 주파수 ω(오메가, 자리 하나에 도는 각도)가 등비수열로 다르다. 한 묶음의 두 성분 (cos mω, sin mω)는 오일러 공식으로 보면 eimω의 실수 부분과 허수 부분이다. 시각 t 대신 자리 번호 m가, 주파수 k 대신 ω가 들어간 도는 화살표로, 자리가 한 칸 뒤로 갈 때마다 각도 ω씩 도는 화살표의 끝을 적어 넣은 것이다. 묶음마다 주파수가 왜 그렇게 다른지는 아래 문제 6에서 따진다.

문제 4. 연 100% 이자를 나눠 붙이기

은행이 연 이자 100%를 준다. 100만 원을 맡겼을 때, (가) 1년 뒤 한 번에 이자를 붙이면 얼마인가? (나) 반년마다 50%씩 두 번, 다달이 100/12 %씩 열두 번, 날마다 365번 나눠 붙이면 각각 얼마인가? (다) 나누는 횟수를 끝없이 늘리면 얼마에 다가가는가?

김민준 M01
김민준

(가)는 200만 원이요. (나)는 나눠 붙이는 횟수만큼 이자가 쪼개지니까 결국 다 200만 원 아니에요?

선생님 T01
선생님

반년마다 붙이면, 두 번째 반년의 이자는 얼마에 붙죠?

김민준 M04
김민준

아, 첫 이자 50만 원이 붙은 150만 원에 50%가 붙으니까 225만 원이네요. 이자에도 이자가 붙어요.

선생님 T01
선생님

그럼 다달이 붙이면요?

김민준 M01
김민준

다달이면 (1 + 1/12)¹² = 2.613배라 261.3만 원, 날마다는 2.7146배요.

이서연 S01
이서연

늘리는 폭이 점점 줄어드네. 시간마다 나누면 2.7181배고. (다)는 e = 2.7183배, 271.8만 원 근처로 모여.

선생님 T02
선생님

반 바퀴를 n번에 나눠 돌리던 계산이랑 비교해 볼래요?

이서연 S02
이서연

써 놓고 보니 둘 다 (1 + 작은 수/n)n 꼴이에요. 모양이 똑같네요.

선생님 T01
선생님

그럼 둘은 어디가 다르죠?

이서연 S01
이서연

작은 수요. 이자는 작은 수가 실수 1이라 화살표가 늘어나기만 하고, 돌리기는 작은 수가 iπ라 수직으로 밀려서 돌기만 해요.

김민준 M03
김민준

그래서 하나는 e가 나오고 하나는 −1이 나온 거야?

이서연 S08
이서연

응. 같은 극한이 한쪽에서는 e, 한쪽에서는 eiπ = −1이 된 거야.

김민준 M11
김민준

장학금 이자를 복리로 준다는 공지를 보고 그게 왜 더 이득인지 몰랐는데, 이자에 이자가 붙는 거였어요.

문제 5. 덧셈 정리를 곱셈으로

(가) eiπ/2 와 e2πi 는 각각 어떤 수인가? (나) eia eib = ei(a+b) 의 양쪽을 cos 와 sin 으로 풀어, cos(a + b) 와 sin(a + b) 를 a, b 의 cos, sin 으로 적어라. a = 30°, b = 45° 로 숫자를 확인하라. (다) 각도 φ = π/2 를 n = 10, 100, 1000 번에 나눠 돌린 (1 + iφ/n)n 의 길이는 얼마인가? (위젯 2의 「문제 5 불러오기」로 확인해 보자.)

김민준 M01
김민준

(가)는 90° 돈 것이라 i, 360° 돈 것이라 1이요.

이서연 S01
이서연

(나)는 왼쪽을 곱하면 (cos a + i sin a)(cos b + i sin b) = cos a cos b − sin a sin b + i(sin a cos b + cos a sin b)야. 오른쪽은 cos(a + b) + i sin(a + b)니까 실수 부분끼리, 허수 부분끼리 같아야 해.

김민준 M06
김민준

고등학교 때 외우던 덧셈 정리가 그냥 나왔어요. 숫자로 하면 0.866 × 0.707 − 0.5 × 0.707 = 0.2588이고 cos 75° = 0.2588, sin 쪽도 0.9659로 같아요.

선생님 T01
선생님

(다)는요? 끝점이 i에 가까워지는 건 보이죠. 길이만 봐요.

김민준 M01
김민준

10번이면 1.1296, 100번이면 1.0124, 1000번이면 1.0012요. 나눌수록 1로 가요.

이서연 S06
이서연

그런데 1000번이어도 1보다 조금 커. 한 번 곱할 때 길이가 얼마나 늘지?

김민준 M01
김민준

1 + iφ/n의 길이니까 √(1 + (φ/n)²)배지.

이서연 S01
이서연

그럼 n번 곱하면 (1 + φ²/n²)n/2이야. 지수는 n/2로 커지는데 안의 φ²/n²은 n²으로 작아지네. 작아지는 쪽이 더 빠르니까 n이 커질수록 1로 가는 거구나.

선생님 T13
선생님

그래요. 그래서 한 번에 크게 돌릴 때는 길이가 늘지만, 끝없이 잘게 나눈 극한에서는 길이 1인 원 위에 정확하게 머물러요. 곱셈 규칙과 지수 규칙이 같다는 것도 확인했고요.

이서연 S11
이서연

덧셈 정리를 증명할 때 그림에 삼각형을 겹쳐 그리던 게 화살표 두 번 돌리기였어.

문제 6. 화살표 넷의 주파수

머리 하나의 성분이 8개인 모델이 사인 위치 벡터를 쓴다. 성분 8개는 묶음 넷이고, 묶음 j(j = 0, 1, 2, 3)는 자리 하나에 ωj = 10000−2j/8 라디안씩 돈다. (가) 묶음마다의 ω 와, 한 바퀴를 도는 데 드는 자리 수 2π/ω 를 구하라. (나) 글이 4096토큰일 때 묶음마다 몇 바퀴를 도는가? (다) 밑수 10000 을 100 으로 바꾸면 가장 느린 묶음은 어떻게 되는가? 밑수를 왜 크게 잡았는지 말하라.

김민준 M01
김민준

(가)는 ω가 1, 0.1, 0.01, 0.001이고, 한 바퀴에 6.3, 62.8, 628.3, 6283.2자리요. (나)는 4096 × ω ÷ 2π니까 651.9, 65.2, 6.52, 0.65바퀴요. 빠른 묶음이 많이 도니까 정보도 제일 많겠네요.

선생님 T01
선생님

가장 빠른 묶음만 보고 자리 3과 자리 3 + 6.3 × 100 근처를 가를 수 있어요?

김민준 M04
김민준

한 바퀴가 6.3자리라 630자리 떨어지면 거의 같은 각도로 돌아와 있겠네요. 빠른 묶음은 바로 옆자리끼리는 잘 가르는데, 멀리 떨어진 자리는 못 가르겠어요.

이서연 S01
이서연

그래서 느린 묶음이 필요한 거야. 가장 느린 묶음은 4096자리 동안 0.65바퀴만 돌아. 한 바퀴를 다 돌지 않으니까 글 안의 어느 두 자리도 이 묶음에서는 같은 각도가 되지 않아.

선생님 T02
선생님

(다)는요?

이서연 S01
이서연

밑수가 100이면 ω가 1, 0.316, 0.1, 0.0316이에요. 가장 느린 묶음도 198.7자리마다 한 바퀴네요.

선생님 T01
선생님

4096토큰짜리 글이면요?

이서연 S08
이서연

20.61바퀴요. 아, 그러면 199자리쯤 떨어진 두 자리를 가장 느린 묶음으로도 못 가르겠네요.

김민준 M01
김민준

그럼 밑수를 크게 잡은 건 그걸 막으려고?

이서연 S01
이서연

응. 밑수를 크게 잡으면 가장 느린 화살표가 글 하나를 다 지나도록 한 바퀴를 못 돌게 할 수 있어.

김민준 M08
김민준

시계에 초침만 있으면 지금이 몇 시인지 모르고, 시침까지 있어야 하루 안에서 하나로 정해지는 거네요.