2를 몇 번 곱해야 1,024가 될까?
답은 10. 그 10이 다. 로그는 거듭제곱의 역함수 — 결과에서 지수를 꺼낸다. 자연에 등장하는 큰 수는 거의 다 지수에서 자란다. 세포는 두 배가 되고, 이자는 복리로 쌓이고, 별빛은 로 흐려지고, 소리는 열두 자릿수에 걸쳐 변한다. 우리가 보는 결과 (세포 1,024개, 100배로 불어난 돈, 진도 7.2)는 자연이 쓰는 매개변수가 아니다. 지수 (몇 번 두 배 됐나, 몇 년 굴렸나)가 매개변수다. 로그는 그 지수를 꺼내주는 함수다. 익숙한 특수한 경우가 이미 하나 있다 — 인 건 0이 6개여서다. 일상의 자릿수란 곧 10을 밑으로 한 지수. 자릿수를 다른 밑으로 일반화하면 로그가 된다. 그리고 지수는 밑이 곱해질 때 더해지므로, 로그는 곱셈을 덧셈으로 바꾼다: . 이 페이지의 나머지는 모두 이 한 줄에서 따라 나온다.
로그 = 지수가 몇이냐. 나머지 — , 계산자, 로그우도, 자릿수 추정 — 는 따름정리.
- 정의
거듭제곱의 역함수. — 곱이 합이 된다. 모듈에 식은 이 하나뿐.
- 적용
어떤 양이 지수에서 자라났을 때 — 복리, 반감기, 데시벨, 지진 규모, 시퀀스 확률. 자연이 쓰는 변수가 몇 번 곱했는가이고, 그 횟수를 결과에서 되찾고 싶을 때.
- 한계
인수가 0 이하면 실수 로그는 정의되지 않는다. 밑이 1이면 어떤 지수든 결과가 1이라 역함수가 무너진다. 가장 흔한 학생 실수는 합에 로그를 씌우는 것이다: . 항등식 아래엔 반드시 곱이 있어야 한다.
모든 일을 하는 항등식
로그를 정의하는 줄은 단 하나다: . 밑은 뭐든 좋다. 규칙은 같다. (밑은 분야가 정해준다: 는 공학·고등학교에서는
import math
# every log law from one identity:
math.log10(2 * 50) # ≈ math.log10(2) + math.log10(50)
math.log10(2 ** 10) # ≈ 10 * math.log10(2)
math.log10(1) # 0.0같은 트릭, 다섯 곳
지수에서 자라는 양은 여기저기 흩어져 있다 — 시간에 따라 자라는 것 (
- 복리. 100만원을 연 7%로 굴리면 두 배가 되는 데 몇 년? → .
()은 이 식을 작은 r에서 어림한 것.72의 법칙 - 탄소-14 연대 측정. 탄소-14는 생물이 죽으면 반감기 5,730년으로 줄어든다. 25%만 남았다면: → . 33%, 17%처럼 어중간한 비율은 로그 식 한 줄이 아니면 닫히지 않는다.
- 데시벨. . 일상 대화 60 dB, 록 콘서트 110 dB → 음향 강도는 차이. 귀에는 그렇게 들리지 않는다. 귀가 강도를 로그 스케일로 듣기 때문 — 데시벨은 그 압축을 그대로 단위로 옮긴 것이다.
- 지진 규모. . 2011 도호쿠 (M 9.0) vs 평범한 큰 지진 (M 7.0): . 규모 2 차이가 에너지 1,000배. 자연 지진 에너지는 19자릿수에 걸쳐 있어, 리히터의 로그 압축이 없으면 비교 자체가 안 된다.
- 비트와 이진 탐색. 1,024쪽 사전을 매번 반으로 자르면 번이면 단어에 닿는다. 32비트 정수는 가지를 담고, 거꾸로 N개를 식별하려면 비트가 필요하다. 카드 한 벌을 섞으면
의 정보 — 예/아니오 질문 226개면 그 한 번의 셔플이 정확히 특정된다.52!
다섯 문제, 모양은 하나: 자연이 만든 식은 지수꼴, 양변에 로그, 지수가 답으로 떨어진다. § 1의 항등식 — 곱셈을 덧셈으로 — 이 매번 그 일을 한다.
네이피어와 계산자 (×→+ 의 화신)
1614년, 존 네이피어가 첫 로그 표를 펴냈다. 일식을 예측하려고 9자리 수를 손으로 곱하다 속이 타들어 가던 천문학자들의 시대였다. 표를 펴서 와 를 찾고, 둘을 더하고, 그 합이 로그값인 수를 다시 찾기만 하면 — 곱셈 한 번 없이 가 나왔다. 300년 뒤, 모든 엔지니어가
언더플로우 — 그리고 로그 공간이 모델을 살리는 이유
는 약 까지만 표현한다. 확률 을 마흔 번 곱하면 그
선 아래로 떨어지고 — 결과는 조용히 0으로 반올림된다. 예외도, 경고도 없다. 거기에 매달려 있던 모든
가 만들어진 이유다. 로그 공간에 머물면 곱은 합이 되고, float는 더는 거짓말을 하지 않는다.
import numpy as np
# Naive: multiply 40 probabilities. Underflows in float32.
p = np.float32(0.1)
np.prod([p] * 40) # → 0.0 (silent death)
# Log-space: add 40 log-probabilities. Survives.
np.sum(np.log([p] * 40)) # → -92.10 (well-defined)이게 어디에 나타나나 — 같은 항등식, 두 필러
로그는 덧셈의 질문에 곱셈이 답하게 해주는 도구다. 무언가가 곱으로 쌓이는 모든 분야 — 그런 분야가 많다 — 는 결국 “몇 번?”, “얼마나 큰가?”, “얼마나 확신하나?”를 덧셈의 모양으로 묻게 된다. 그 다리가 로그다.
finance : 이율은 곱으로 합쳐진다 — 로그가 그것을 더하기로 만든다
(목표까지 햇수, CAGR, 연속 복리).
ml : 독립적인 가능도는 곱으로 합쳐진다 — 로그가 그것을 더하기로
만들고, *음의* 로그가 그것을 손실로 만든다.이 모듈을 실제로 쓰는 다섯 곳이 있다. 모두 § 1의 한 항등식에 기댄다 —
- 비트코인 피자는 복리 성장의 역연산 — 는 로그를 씌우지 않으면
t에 대해 풀 수 없다. . CAGR은 같은 항등식을r에 대해 푼 것. 세 미지수, 한 식, 로그 모양의 답 셋. - 현재가치는 이산 복리 에서 연속 형식 로 건너가는 다리를 놓는다 — 이산 식에 로그를 씌우면 극한에서 로 정리된다. 연속 복리는 별개의 연산이 아니라, 이산 연산을 로그로 들여다본 것뿐.
- 자신 있게 틀리기는 손실 를 만든다. 훈련 예제 여러 개의 가능도는 서로 곱해진다 — 로그가 그 곱을 합으로 바꾸고, 음의 부호가 “더 자신만만한 오답일수록 더 큰 손실”로 만든다.
- TF-IDF는 희귀성을 비트로 잰다 — . 로그가 “세 배 더 드물다”를 “1 비트 더 놀라운”으로 바꿔준다. 비트로 잰 다른 양 (비밀번호 강도, 영문자 엔트로피) 과도 곧장 비교할 수 있다.
- 모델 캘리브레이션은 검증 셋의 로그 손실을 최소화해 온도
T를 맞춘다. 로짓 함수 는 캘리브레이션 곡선을 애초에 선형으로 펴주는 기저 변환. 한 작업 흐름 안에서 로그가 두 가지 역할로 등장한다.
다섯 문제, 두 필러, 항등식은 하나 — × → + 의 치환. § 3 네이피어의 계산자와 똑같은 기계가 오늘은 log_softmax와 캘리브레이션 옵티마이저 안에서 돌고 있다.
log(a·b) = log(a) + log(b). 모듈 전체. 나머지 — 자릿수 규칙,
위젯에서 a = 4로 두자. a·b가 정확히 100에 떨어지게 하려면 b는? 계산하지 말고 로그 축에서 읽어라.
계산기 없이, 만 사용해서 **log₁₀(2,000,000)**을 구하라.
50토큰 시퀀스를 평가한다. 각 토큰의 확률은 ~0.05. 코드가 계산해야 할 식과 피해야 할 식을 각각 써라. 사용.
위젯에서, log(b) − log(a)의 거리가 log(1)부터 log(10)까지의 거리와 같도록 두 핸들을 두면, 위치와 상관없이 b/a는 항상 얼마인가?
두 확률 p, q가 있다. 단, 와 만 안다 (p, q 자체는 언더플로우). 의 수치적으로 안정한 식을 유도하라. (
주니어가 말한다: “