#수학노트
18편
- 가우시안 메커니즘 — 프라이버시를 사는 값차등 프라이버시 편에서 σ를 키우면 ε가 줄던 그 관계를 기초부터 쟀다. ε는 '한 사람이 바뀐 두 세계를 공격자가 구분할 수 있는 정도'이고, σ를 0.5에서 8로 키우니 공격자 정확도가 84.1%에서 52.5%로 떨어졌다. 그리고 예산은 쌓인다 — 1만 번 물으면 단순 합성으로 ε=500이지만 고급 합성으로는 49.6이다
- 평균의 분산 — 여럿을 모아도 줄지 않는 부분앙상블이 4개에서 멈추는 이유. n개를 평균내면 분산이 1/n로 준다는 말은 서로 무관할 때만 맞고, 상관 ρ가 있으면 ρσ²에서 멈춘다. 실측해 보니 ρ=0.6이면 64개를 모아도 분산이 0.606이었다. 분류 오차로 옮기면 그 멈추는 자리가 곧 '전원이 틀리는 문제'다
- 립시츠 상수 — 입력을 조금 밀면 출력이 얼마나 밀리나적대적 예제 편의 적대적 예제가 왜 당연한지. 같은 크기로 밀어도 방향에 따라 출력 변화가 다르고, 기울기 방향은 무작위 방향의 몇 배다. ε=0.8에서 무작위 섭동은 정확도를 91.0%로 두는데 기울기 방향은 19.2%로 무너뜨렸다. 그런데 층별 특이값을 곱한 상한은 8층에서 실제보다 1151배 느슨했다
- 리틀의 법칙 — 처리량과 지연은 따로 고를 수 없다추론 서빙 편의 '처리량을 올리면 지연이 는다'가 왜 피할 수 없는 거래인지. L = λW를 시뮬레이션으로 확인하고, 이용률이 0.5에서 0.98로 갈 때 체류 시간이 2.0에서 59.6으로 30배가 되는 것을 쟀다. 배치 추론에서는 너무 작아도 너무 커도 손해라 B=8에서 58.4ms로 최소였다
- 로짓과 오즈 — 확률을 더하기로 바꾸는 자리긴 꼬리 편에서 로짓에 log(사전확률)을 빼던 그 한 줄이 어디서 나오는가. 로짓 축에서는 데이터가 주는 몫과 사전확률이 주는 몫이 그냥 더해진다. 그래서 '임계값을 옮기는 것'과 '로짓에 상수를 더하는 것'은 같은 일이고, 재 보니 두 방법의 예측이 한 건도 다르지 않았다
- 거부 샘플링 — 싼 분포로 비싼 분포를 정확히 흉내내기스펙큘러티브 디코딩 편 스펙큘러티브 디코딩의 수락 판정 r < min(1, q/p) 가 왜 근사가 아니라 정확한가. 보정 없이 초안 모델에서 뽑으면 TV 0.199 만큼 분포가 틀어지지만, 수락-거부에 잔차 재샘플링을 붙이면 0.00094 로 떨어진다. 그리고 기대 수락률은 정확히 1 - TV(p,q) 였다
- UCB — 모르는 것에 이자를 붙인다강화학습 기초 편에서 ε-그리디가 전부 실패했고 몬테카를로 트리 탐색 편 MCTS는 UCB로 골랐다. 무엇이 다른가를 후회(regret)로 쟀다. ε-그리디는 후회가 직선으로 늘고 UCB는 눕는다 — 2만 수 뒤 331 대 61이었다. 다만 보너스 상수를 2.0으로 키우니 572로 ε-그리디보다 나빴다
- 지프의 법칙 — 긴 꼬리는 예외가 아니라 기본값이다이 블로그 글 118편을 세어 봤다. 어절 빈도는 로그-로그에서 직선(s=0.75)이고, 서로 다른 어절 17,921개 중 56%는 글 전체에서 딱 한 번 나온다. 같은 글을 음절로 쪼개면 종류가 1,035개로 줄고 꼬리도 마르지만, 길이가 2.5배가 된다 — 토크나이저의 불평등 편 토크나이저의 거래가 이것이다
- 엔트로피와 KL 발산 — 분포로 가르친다는 것우리가 매일 쓰는 교차엔트로피 손실은 사실 두 조각의 합이다 — 어쩔 수 없는 불확실성(엔트로피)과 내 분포가 틀린 만큼(KL). 실제로 1.2838 = 1.2668 + 0.0170로 딱 맞았다. 그리고 KL은 거리가 아니다. 순서를 바꾸니 1.2181이 1.5852가 됐다
- 표본 오차 — 몇 개를 재야 믿을 수 있나벤치마크 점수, A/B 테스트, 사용자 평가가 전부 같은 산수 위에 있다. 비율의 오차는 1/√n이라 정밀도를 2배로 하려면 표본이 4배 필요하고(실측 2.00배씩 줄었다), 똑같은 두 대상을 20번 비교하면 66.2%의 확률로 '우연한 유의미'가 나온다
- 고유값·고유벡터 — 반복 곱의 운명SSM 기억·그라디언트 소실·조건수의 공통 뿌리. 고유값은 행렬이 '크기만 바꾸는' 방향(고유벡터)의 배율이다. 행렬을 반복해서 곱하면 결과는 가장 큰 고유값 방향으로 쏠리고 크기는 λ^t로 변한다 — 재 보니 15번 곱에 정렬 0.58→1.0, 크기비가 최대 고유값 1.69에 수렴했다
- 부동소수점 — fp32·fp16·bf16의 범위와 정밀도혼합정밀도·양자화를 이해하려면 컴퓨터가 실수를 어떻게 담는지 알아야 한다. 같은 16비트라도 fp16은 좁고 정밀하고(최대 65,504) bf16은 fp32급으로 넓고 덜 정밀하다(최대 3.4e38). 70,000을 넣으면 fp16은 inf가 되고 bf16은 담았으며, 1e-8은 fp16에서 0이 됐다
- 정규분포 다루기 — 잡음의 덧셈과 재매개변수화확산 모델과 VAE가 서 있는 두 가지 사실. 정규분포끼리 더하면 표준편차가 아니라 분산이 더해지고(3+4=5), 그래서 400번 더한 잡음을 한 번에 계산할 수 있다. 그리고 난수를 밖에서 뽑아 식에 넣으면 기울기가 그대로 흐른다 — 같은 표본 수로 흔들림이 21배 작았다
- 고차원의 기하 — 무작위 벡터는 왜 거의 직교한가임베딩·벡터 검색·중첩이 전부 이 한 가지 사실에 기댄다. 차원이 커질수록 아무 두 벡터나 거의 직각이 된다 — 유사도의 폭이 1/√D로 줄어드는 것을 쟀다(D=2에서 0.706, D=2048에서 0.022). 그래서 64차원에 16,384개의 방향을 서로 겹치지 않게 욱여넣을 수 있다
- 야코비안 — 다변수 함수의 '기울기 행렬'딥러닝 곳곳에 나오는 야코비안을 한 장으로. 야코비안은 벡터를 벡터로 보내는 함수의 '모든 편미분을 모은 행렬'이자, 그 점에서 가장 좋은 선형근사다. 해석식·자동미분·유한차분 세 방법이 오차 1e-8로 일치했고, 합성함수의 야코비안이 정확히 '야코비안의 곱'임을 확인했다 — 이것이 역전파와 그라디언트 소실의 뿌리다
- 산술 강도와 메모리 대역폭 — 왜 GPU가 놀고 있나KV 캐시·플래시 어텐션에서 '메모리에 묶인다'는 말의 뜻. 연산량 대비 메모리 접근량이 산술 강도이고, 이게 낮으면 GPU가 계산이 아니라 데이터 읽기를 기다린다. 같은 GPU에서 행렬곱은 40 TFLOP/s를 냈지만 원소별 덧셈은 70 GFLOP/s에 그쳤다 — 577배 차이가 대역폭 병목이다
- 한 번에 풀기의 벽 — 층을 늘려도 안 되는 것순차적인 문제는 층을 더 쌓으면 풀리지 않을까 하고 재 봤더니 틀렸다. 1층에서 8층으로(파라미터 7배) 늘려도 길이 3짜리 순열 합성은 0.8%, 그러니까 무작위 그대로였다. 처음엔 조합이 너무 많아 못 외운 탓이라고 썼는데 그것도 틀렸다 — 조합 수의 8.9배를 학습시켜도 학습 손실이 ln(120)에서 내려오지 않았다. 학습 데이터조차 못 맞힌다, 즉 경사하강이 합성 규칙을 아예 못 찾는다
- 저계수 행렬과 SVD — 큰 행렬을 작게 쪼개기LoRA·압축·추천 곳곳에 나오는 '저계수'와 SVD를 한 장으로. SVD는 어떤 행렬이든 회전·스케일·회전으로 쪼개, 큰 특이값 몇 개가 행렬의 '에너지 대부분'을 담는다. 참 계수 5인 80×60 행렬에서 rank 5 근사가 상대오차 2%로 4800개 수를 700개로 줄였다