이 단원의 정리들은 모두 표본평균에 관한 것이었습니다. 그런데 표본평균은 통계에만 쓰이지 않습니다.
적분을 표본평균으로 바꿉니다. 왼쪽은 해석학의 문제이고 오른쪽은 통계의 문제인데, 둘이 같은 것이므로 이 단원의 도구를 그대로 쓸 수 있습니다.
| 단원의 정리 | 여기서 하는 일 |
|---|---|
| 142강 큰 수의 법칙 | 추정값이 참 적분값으로 갑니다 |
| 143강 중심극한정리 | 오차 막대를 붙여 줍니다 |
| 144강 표본분산 | 그 오차 막대를 표본에서 계산합니다 |
| 146강 호에프딩 | 유한한 에서 보장을 줍니다 |
그리고 이 방법에는 다른 어떤 수치적분도 갖지 못한 성질이 하나 있습니다.
가 어디에도 없습니다. 차원이 이든 이든 오차가 같은 속도로 줄어들며, 고차원 적분을 실제로 계산할 수 있는 거의 유일한 길입니다.
문제. 에서 를 적분합니다. 참값은 입니다.
(1) 같은 점 개수로 격자법과 몬테카를로의 상대오차를 재세요.
(2) 차원을 올리며 우열을 판정하세요.
(3) 두 방법의 오차가 과 에 어떻게 의존하는지 쓰세요.
생각의 실마리. 격자법은 각 축을 개로 쪼개므로 점이 개 필요합니다. 차원이 오르면 점이 폭발합니다.
풀이. (1)(2) 검산 결과입니다.
| 차원 | 점 개수 | 격자 상대오차 | 몬테카를로 상대오차 | 격자/MC |
|---|---|---|---|---|
| 4.1667\times10^ | 2.8204\times10^ | |||
| 8.3333\times10^ | 3.7279\times10^ | |||
| 2.5823\times10^ | 4.1333\times10^ | |||
| 5.7690\times10^ | 5.9842\times10^ | |||
| 3.6327\times10^ | 1.2454\times10^ |
에서는 격자가 만 배 정확합니다. 그런데 에서 비슷해지고 에서는 몬테카를로가 세 배 가까이 앞섭니다.
격자의 오차는 차원마다 나빠지는데 몬테카를로는 거의 그대로입니다. 오른쪽 열이 에서 로 네 배 남짓 커졌을 뿐이며, 그것도 피적분함수의 분산이 커졌기 때문입니다.
(3) 두 오차의 모양입니다.
이 문제에서 배우는 것: 몬테카를로 적분.
몬테카를로 추정량. 를 밀도 에서 독립으로 뽑으면
불편이고 분산이 입니다. 두 성질 모두 132강과 133강에서 이미 증명한 것이며, 새로 할 일이 없습니다.
| 방법 | 오차 | 에서 오차를 배 줄이려면 |
|---|---|---|
| 사다리꼴, 중점 | n^ | 점을 배 |
| 심프슨 | n^ | 점을 배 |
| 몬테카를로 | n^ | 점을 배 |
| 준몬테카를로 | 대략 n^ | 점을 배 |
셋째 줄만 가 없습니다. 이것이 차원의 저주를 피하는 유일한 구조적 이유이며, 베이즈 사후분포, 강화학습의 기대보상, 금융 파생상품 가격, 물리 시뮬레이션이 모두 이 방법에 기댑니다.
공짜는 아닙니다. 낮은 차원에서는 격자법이 압도적으로 좋습니다. 에서 몬테카를로를 쓰는 것은 낭비입니다.
넷째 줄의 준몬테카를로가 절충안입니다. 무작위 대신 저편차 수열을 쓰면 매끄러운 함수에서 에 가까운 속도를 얻지만, 오차 막대를 붙이기 어렵고 차원이 높으면 이점이 줄어듭니다.
바로 확인 1.
확인 1-1. 몬테카를로 추정량의 분산을 쓰세요.
답. 입니다.
확인 1-2. 격자법과 몬테카를로의 오차 차수를 쓰세요.
답. 와 입니다.
확인 1-3. 몬테카를로가 유리해지는 차원을 쓰세요.
답. 검산에서는 에서 비슷해지고 그 위에서 유리합니다.
문제. 를 몬테카를로로 추정합니다.
(1) 표준오차로 구간을 만들고 실제 포함률을 확인하세요.
(2) 호에프딩이 주는 반폭을 계산하세요.
(3) 두 반폭을 비교하고 언제 어느 것을 쓸지 쓰세요.
생각의 실마리. 추정값만 내놓으면 쓸 수 없습니다. 얼마나 믿을 수 있는지가 함께 나와야 계산을 언제 멈출지 정할 수 있습니다.
풀이. (1) 으로 번 시행한 결과입니다.
| 항목 | 값 |
|---|---|
| 참값 | |
| 추정 평균 | |
| 추정 표준편차 | |
| 구간 실제 포함률 |
**포함률이 **로 목표에 가깝습니다. 피적분함수가 조금 치우쳐 있어 포인트 낮습니다.
(2)(3) 두 반폭을 견줍니다. 의 값은 에 있으므로 입니다.
| 중심극한 반폭 | 호에프딩 반폭 | 호에프딩/중심극한 | |
|---|---|---|---|
| 10^ | |||
| 10^ | |||
| 10^ |
비가 으로 일정합니다. 둘 다 이므로 상수만 다릅니다.
이 문제에서 배우는 것: 추정값에는 반드시 오차가 붙습니다.
표준오차와 신뢰구간.
는 144강의 표본표준편차이며, 같은 표본에서 계산합니다.
추정값과 오차를 한 번의 계산으로 함께 얻습니다. 격자법에는 이런 것이 없으며, 오차를 알려면 점을 두 배로 늘려 다시 계산해 비교해야 합니다.
| 반폭 | 근거 | 성격 |
|---|---|---|
| 1.96\,s/\sqrt | 143강 중심극한정리 | 점근적이며 날카롭습니다 |
| (b-a)\sqrt | 146강 호에프딩 | 모든 에서 옳고 넓습니다 |
멈춤 규칙을 정할 수 있습니다. 원하는 정밀도 이 있으면 까지 돌립니다.
그런데 표본을 보며 멈추면 조심해야 합니다. 구간이 목표에 닿는 순간 멈추는 방식은 146강 심화 6의 순차 모니터링 문제와 같으며, 실제 포함률이 명목값보다 낮아집니다. 정직한 방법은 을 미리 정하거나 언제나 유효한 구간을 쓰는 것입니다.
바로 확인 2.
확인 2-1. 몬테카를로의 표준오차를 쓰세요.
답. 이며 는 표본표준편차입니다.
확인 2-2. 호에프딩 반폭을 쓰세요.
답. 입니다.
확인 2-3. 두 반폭의 비가 에 의존하는지 쓰세요.
답. 의존하지 않으며 둘 다 입니다.
문제. 표본을 늘리지 않고 정확도를 올릴 방법을 설계합니다.
(1) 를 단순 몬테카를로로 추정하고 문제점을 지적하세요.
(2) 중요도 표집을 설계하고 개선을 재세요.
(3) 원주율 추정에 대조변수를 붙이고 개선을 재세요.
생각의 실마리. 오차가 입니다. 을 키우는 것만이 길이 아니라 를 줄이는 길도 있습니다.
풀이. (1)(2) 검산 결과입니다. 참값은 입니다.
| 방법 | 추정값 | 상대 표준오차 | 참값 대비 상대오차 | 유효 배수 |
|---|---|---|---|---|
| 단순 MC | 2.7000\times10^ | |||
| 중요도 표집 | 3.1647\times10^ |
단순 몬테카를로는 만 개 중 개만 적중했습니다. 나머지 개는 정보를 하나도 주지 않았으며, 상대오차가 입니다.
중요도 표집은 같은 표본으로 유효 표본을 배로 만듭니다. 에서 뽑으면 거의 모든 표본이 관심 영역에 떨어집니다.
(3) 원주율 추정에 를 대조변수로 씁니다. 이 함수의 평균이 으로 알려져 있습니다.
| 항목 | 값 |
|---|---|
| 와 의 상관계수 | |
| 최적 계수 | |
| 원래 표준편차 | |
| 대조변수 적용 후 | |
| 분산 감소 | 배 |
표본을 배 늘린 것과 같은 효과를 계산 한 줄로 얻었습니다.
이 문제에서 배우는 것: 분산 감소 기법.
중요도 표집. 다른 밀도 에서 뽑고 가중치를 곱합니다.
를 에 비례하게 잡으면 분산이 최소가 되며, 이상적으로는 까지 내려갑니다. 실제로는 그 를 알 수 없으므로 비슷한 모양을 고릅니다.
대조변수. 평균 를 아는 를 골라 뺍니다.
분산이 배가 되므로 상관이 이면 배, 즉 배 감소입니다. 138강의 상관계수가 여기서 정확히 이 값을 예측합니다.
| 기법 | 무엇을 이용하는가 | 이득 |
|---|---|---|
| 중요도 표집 | 관심 영역을 아는 것 | 희귀 사건에서 수천 배 |
| 대조변수 | 상관 있는 기지의 양 | 배 |
| 대립변수 | 와 의 음의 상관 | 단조 함수에서 두 배 이상 |
| 층화 표집 | 영역별 분산 차이 | 층 내 분산만 남습니다 |
| 조건화 | 일부를 해석적으로 적분 | 전체 분산 법칙만큼 |
다섯째 줄이 137강 문제 4의 전체 분산 법칙입니다. 일부 변수를 해석적으로 적분해 없애면 만큼이 사라지며, 결코 손해가 아닙니다.
바로 확인 3.
확인 3-1. 중요도 표집의 항등식을 쓰세요.
답. 입니다.
확인 3-2. 대조변수의 최적 계수를 쓰세요.
답. 입니다.
확인 3-3. 대조변수의 분산 감소 배수를 쓰세요.
답. 배입니다.
문제. 원하는 분포에서 표본을 만드는 방법을 조사합니다.
(1) 기각법으로 밀도 에서 뽑고 수용률을 확인하세요.
(2) 차원을 올리며 수용률이 어떻게 변하는지 보세요.
(3) 어떤 방법을 언제 쓸지 설계하세요.
생각의 실마리. 139강 문제 3에서 균등난수로 정규난수를 만들었습니다. 모든 표집은 결국 균등난수에서 출발합니다.
풀이. (1) 제안은 균등분포이고 상한은 밀도의 최댓값 입니다.
| 항목 | 값 |
|---|---|
| 이론 수용률 | |
| 실제 수용률 | |
| 분포함수 최대 거리 |
**수용률이 정확히 **입니다. 제안 밀도에 곱한 상한의 역수이며, 넓이의 비로 바로 나옵니다.
(2) 에서 뽑아 단위 공 안에 드는 것만 남깁니다.
| 차원 | 이론 수용률 | 실제 수용률 | 필요한 시도 수 |
|---|---|---|---|
| 4.015\times10^ | |||
| (관측 안 됨) | 4.063\times10^ |
이면 만 번에 한 번 성공합니다. 만 개를 뽑았는데 하나도 들어오지 않았습니다.
(3) 차원이 조금만 높아도 기각법을 쓸 수 없습니다.
이 문제에서 배우는 것: 표집 방법의 설계.
| 방법 | 조건 | 비용 | 한계 |
|---|---|---|---|
| 역변환법 | 을 아는 것 | 난수 하나 | 역함수가 없으면 못 씁니다 |
| 기각법 | 인 | 평균 번 | 고차원에서 이 폭발합니다 |
| 변환법 | 관계식을 아는 것 | 상수 | 분포마다 따로 |
| 합성 | 혼합분포 | 두 단계 | 성분을 알아야 합니다 |
| MCMC | 밀도를 비례까지만 알면 됩니다 | 상관된 표본 | 수렴 진단이 필요합니다 |
둘째 줄의 이 정확히 표의 필요한 시도 수입니다. 제안분포가 목표분포와 조금만 달라도 고차원에서 이 지수적으로 커집니다.
왜 고차원에서 무너지는가. 두 분포가 각 축에서 조금씩만 달라도 그 차이가 번 곱해집니다.
146강 심화 5의 측도 집중이 여기서 나타납니다. 정육면체의 부피가 거의 전부 구석에 있고 내접구는 사실상 부피가 없으므로, 구석에서 뽑은 점이 구 안에 들어올 리가 없습니다.
다섯째 줄이 157강의 주제입니다. 마르코프 연쇄 몬테카를로는 독립 표본을 포기하는 대신 고차원에서도 작동하며, 정규화 상수를 몰라도 됩니다. 그 대가가 표본 사이의 상관이고, 141강 심화 3에서 본 유효 표본 크기를 다시 봐야 합니다.
바로 확인 4.
확인 4-1. 기각법의 수용률을 쓰세요.
답. 상한 의 역수인 입니다.
확인 4-2. 에서 단위 공의 수용률을 쓰세요.
답. 약 입니다.
확인 4-3. 고차원에서 쓰는 방법을 쓰세요.
답. 마르코프 연쇄 몬테카를로입니다.
문제. 중요도 표집으로 표준정규의 을 추정합니다.
(1) 제안분포의 폭을 바꿔 가며 추정값을 보세요.
(2) 유효 표본 크기를 함께 재세요.
(3) 언제 무너지는지 판정하세요.
생각의 실마리. 중요도 표집은 강력하지만 제안분포를 잘못 고르면 조용히 틀립니다. 가중치의 분산이 무한할 수 있습니다.
풀이. (1)(2) 으로 잰 결과입니다.
| 제안 표준편차 | 추정값 | 참값 과의 차이 | 유효 표본 크기 | 최대 가중치 비중 |
|---|---|---|---|---|
유효 표본 크기가 에서 으로 무너집니다. 만 개를 뽑았는데 개를 쓴 셈입니다.
(3) 아래에서 무너집니다. 가중치의 분산이 유한할 조건이 정확히 입니다.
의 추정값 는 참값에서 밖에 벗어나지 않아 아무 문제가 없어 보입니다. 그런데 최대 가중치 비중이 이미 로 의 배입니다.
유효 표본 크기가 과 사이에서 뒤집힌 것도 신호입니다. 에서 로 오히려 늘었는데, 유효 표본 크기 자체가 불안정해졌다는 뜻입니다.
이 문제에서 배우는 것: 진단 없이 믿지 않습니다.
유효 표본 크기. 가중치 에 대해
가중치가 모두 같으면 이고, 하나가 지배하면 에 가까워집니다.
| 진단 | 무엇을 보는가 | 위험 신호 |
|---|---|---|
| 유효 표본 크기 | 가중치의 균등함 | 의 몇 이하 |
| 최대 가중치 비중 | 한 점의 지배 | 를 넘습니다 |
| 가중치의 꼬리 | 파레토 꼬리 지수 | |
| 반복 실행의 흩어짐 | 추정의 재현성 | 이론 표준오차보다 큽니다 |
| 제안과 목표의 꼬리 | 가 보다 가벼운가 | 가벼우면 분산 무한 |
다섯째 줄이 원인이고 나머지가 증상입니다. 제안분포의 꼬리는 목표분포보다 두꺼워야 합니다.
가장 위험한 실패는 조용한 실패입니다. 추정값이 그럴듯하게 나오고 반복해도 비슷하면 틀린 줄 모릅니다.
넷째 줄이 가장 값싼 진단입니다. 다른 씨앗으로 몇 번 더 돌려 흩어짐이 이론 표준오차와 맞는지 보면 됩니다. 훨씬 크면 분산 추정 자체를 믿을 수 없습니다.
바로 확인 5.
확인 5-1. 유효 표본 크기의 식을 쓰세요.
답. 입니다.
확인 5-2. 가중치의 분산이 유한할 조건을 이 예에서 쓰세요.
답. 제안 표준편차가 보다 커야 합니다.
확인 5-3. 제안분포의 꼬리에 대한 원칙을 쓰세요.
답. 목표분포보다 두꺼워야 합니다.
| 개념 | 식 |
|---|---|
| 몬테카를로 추정량 | |
| 분산 | |
| 오차 차수 | , 차원과 무관 |
| 격자 오차 차수 | n^ |
| 표준오차 | s/\sqrt |
| 호에프딩 반폭 | (b-a)\sqrt |
| 중요도 표집 | |
| 대조변수 | , |
| 분산 감소 | 배 |
| 기각법 수용률 | |
| 유효 표본 크기 | (\sum w)^{2}/\sum w^ |
| 표집 방법 | 필요한 것 |
|---|---|
| 역변환법 | F^ |
| 기각법 | |
| 박스뮐러 | 균등난수 두 개 |
| 합성 | 혼합의 성분 |
| MCMC | 비례까지의 밀도 |
| 자주 하는 실수 | 바로잡기 |
|---|---|
| 낮은 차원에서 몬테카를로를 씁니다 | 격자가 훨씬 정확합니다 |
| 추정값만 보고합니다 | 표준오차를 반드시 함께 냅니다 |
| 구간이 목표에 닿으면 멈춥니다 | 포함률이 명목보다 낮아집니다 |
| 희귀 사건을 단순 MC로 셉니다 | 적중이 없으면 정보가 없습니다 |
| 제안분포를 목표보다 좁게 잡습니다 | 가중치 분산이 무한해집니다 |
| 유효 표본 크기를 보지 않습니다 | 조용히 틀립니다 |
| 고차원에서 기각법을 씁니다 | 수용률이 지수적으로 사라집니다 |
문제 6. 몬테카를로 추정량과 그 분산을 쓰세요.
답. 이며 분산은 입니다.
문제 7. 몬테카를로와 격자법의 오차 차수를 쓰세요.
답. 와 입니다.
문제 8. 몬테카를로가 고차원에서 유리한 이유를 쓰세요.
답. 오차에 차원이 들어가지 않기 때문입니다.
문제 9. 몬테카를로 추정에 오차 막대를 붙이는 두 방법을 쓰세요.
답. 중심극한정리로 , 호에프딩으로 입니다.
문제 10. 두 반폭의 비가 에 의존하는지 쓰세요.
답. 의존하지 않으며 이 예에서 배로 일정합니다.
문제 11. 단순 몬테카를로가 희귀 사건에서 실패하는 이유를 쓰세요.
답. 적중이 거의 없어 상대오차가 크기 때문이며 만 개에서 개였습니다.
문제 12. 중요도 표집의 항등식과 최적 제안분포를 쓰세요.
답. 이며 최적은 입니다.
문제 13. 대조변수의 최적 계수와 분산 감소를 쓰세요.
답. 이며 분산이 배가 됩니다.
문제 14. 원주율 예에서 대조변수의 분산 감소 배수를 쓰세요.
답. 배입니다.
문제 15. 기각법의 수용률과 그 의미를 쓰세요.
답. 이며 제안을 목표로 덮는 데 필요한 배율의 역수입니다.
문제 16. 에서 단위 공의 수용률과 그 함의를 쓰세요.
답. 약 이며 기각법을 쓸 수 없습니다.
문제 17. 유효 표본 크기의 식과 진단 기준을 쓰세요.
답. 이며 의 몇 이하면 위험합니다.
문제 18. 제안분포의 꼬리에 대한 원칙을 쓰세요.
답. 목표분포보다 두꺼워야 가중치의 분산이 유한합니다.
심화 1. 준몬테카를로와 저편차 수열을 정리하세요.
무작위성이 목적이 아니라 고르게 채우는 것이 목적입니다.
| 방법 | 오차 | 특징 |
|---|---|---|
| 몬테카를로 | 오차 막대가 나옵니다 | |
| 층화 격자 | 조금 나아집니다 | |
| 소볼, 할톤 수열 | 매끄러우면 훨씬 빠릅니다 | |
| 무작위화 준몬테카를로 | 위와 같고 오차 막대도 나옵니다 | 실무의 기본값 |
| 라틴 초입방 | 각 축을 층화 | 설계가 쉽습니다 |
셋째 줄의 가 함정입니다. 차원이 높으면 이 인자가 커서 실제로는 이 아주 커야 이점이 나타나며, 쯤에서 이점이 사라집니다.
넷째 줄이 절충입니다. 저편차 수열을 무작위로 이동시켜 여러 번 돌리면 편향 없이 오차 막대를 얻습니다. 정확도와 진단을 둘 다 갖는 유일한 길입니다.
심화 2. 분산 감소 기법을 언제 어떻게 고르는지 정리하세요.
| 상황 | 고를 기법 | 근거 |
|---|---|---|
| 희귀 사건 | 중요도 표집 | 관심 영역으로 표본을 옮깁니다 |
| 매끄럽고 단조 | 대립변수 | 와 가 음의 상관 |
| 상관 있는 기지의 양이 있음 | 대조변수 | 배 |
| 영역별로 분산이 다름 | 층화 표집 | 층 간 분산이 사라집니다 |
| 일부를 적분할 수 있음 | 라오-블랙웰화 | 전체 분산 법칙 |
| 여러 모수를 함께 | 공통 난수 | 차이의 분산이 줄어듭니다 |
다섯째 줄이 언제나 이깁니다. 137강 문제 4의 전체 분산 법칙에서 이므로 조건부 기댓값으로 바꾸면 분산이 결코 늘지 않습니다.
여섯째 줄이 실험 비교에서 중요합니다. 두 설정을 비교할 때 같은 난수를 쓰면 차이의 분산이 크게 줄어들며, A/B 시뮬레이션과 하이퍼파라미터 비교에서 표본을 몇 배 아낍니다.
기법은 겹쳐 쓸 수 있습니다. 중요도 표집 위에 대조변수를 얹고 층화까지 하면 곱으로 이득이 납니다.
심화 3. 몬테카를로의 편향과 분산을 나눠 보세요.
지금까지 다룬 추정량은 모두 불편이었습니다. 편향이 있는 경우가 실무에 많습니다.
| 상황 | 편향의 출처 | 대책 |
|---|---|---|
| 비율 추정량 | 분모도 추정 | 델타 방법, 잭나이프 |
| 자기 정규화 중요도 표집 | 가중치 합으로 나눔 | 편향, 대개 감수 |
| 확률미분방정식 이산화 | 시간 격자 | 격자를 촘촘히, 다층 방법 |
| 로그 우도의 추정 | 젠센 부등식 | 하한만 얻습니다 |
| 절단된 무한합 | 꼬리 절단 | 무작위 절단으로 불편화 |
둘째 줄이 문제 5의 설정입니다. 정규화 상수를 모를 때는 를 쓰는데 이것은 불편이 아닙니다. 편향이 이고 분산이 이라 대개 감수합니다.
넷째 줄이 변분추론의 뿌리입니다. 이므로 우도의 몬테카를로 추정에 로그를 씌우면 아래로 치우치며, 그 하한이 ELBO입니다.
셋째 줄의 다층 몬테카를로가 정교합니다. 거친 격자와 촘촘한 격자의 차이만 적은 표본으로 추정해 쌓으면, 같은 정확도를 훨씬 싸게 얻습니다.
심화 4. 난수 자체를 정리하세요.
몬테카를로는 균등난수에서 시작합니다. 그 난수가 진짜 무작위가 아닙니다.
| 항목 | 내용 |
|---|---|
| 의사난수 | 결정적 알고리즘이 만든 수열입니다 |
| 재현성 | 씨앗을 고정하면 같은 결과가 나옵니다 |
| 주기 | 메르센 트위스터 , PCG64 2^ |
| 병렬 | 스트림을 분리하지 않으면 겹칩니다 |
| 나쁜 생성기 | 저차원 격자 구조가 결과를 왜곡합니다 |
둘째 줄이 과학의 요구입니다. 이 강의의 검산도 씨앗을 고정했기에 같은 값이 재현됩니다.
넷째 줄이 실무에서 조용히 틀리는 자리입니다. 여러 프로세스가 같은 씨앗으로 시작하면 같은 표본을 반복해서 만들며, 표본이 배 늘어난 줄 알았는데 실제로는 그대로입니다. 갈래를 나누는 전용 기능을 써야 합니다.
다섯째 줄이 역사적 사고를 냈습니다. 오래된 선형 합동 생성기는 연속한 세 수가 소수의 평면 위에만 놓이는 구조가 있었고, 그 위에서 돌린 물리 시뮬레이션 결과가 틀렸습니다.
심화 5. 언제 몬테카를로를 쓰지 말아야 하는지 정리하세요.
| 상황 | 왜 곤란한가 | 대안 |
|---|---|---|
| 차원이 낮고 매끄러움 | 격자가 훨씬 정확합니다 | 가우스 구적 |
| 해석적 해가 있음 | 오차를 일부러 넣는 셈 | 공식 |
| 피적분함수의 분산이 무한 | 오차 막대가 없습니다 | 변환, 중요도 표집 |
| 목표 정확도가 10^ | 이 필요 | 결정적 방법 |
| 최악의 경우 보장이 필요 | 확률적 보장뿐 | 구간 산술 |
넷째 줄이 결정적입니다. 오차가 이므로 자릿수 하나에 배가 들며, 높은 정밀도를 요구하는 계산에는 맞지 않습니다.
셋째 줄이 문제 5와 이어집니다. 피적분함수가 특이점을 가지면 분산이 무한할 수 있으며, 이때는 변수변환으로 특이점을 없애거나 그쪽에 표본을 몰아야 합니다.
심화 6. 기계학습에서 몬테카를로가 쓰이는 자리를 정리하세요.
| 자리 | 무엇을 추정하는가 | 관련 강의 |
|---|---|---|
| 미니배치 기울기 | 전체 기울기 | 235강 |
| 변분추론의 ELBO | 기대 로그 우도 | 262강 |
| 재매개변수화 기법 | 기울기의 몬테카를로 | 262강 |
| 정책경사 | 기대 보상의 기울기 | 286강 |
| 드롭아웃 추론 | 예측 분포 | 245강 |
| 확산모형의 표집 | 역과정의 궤적 | 261강 |
| 대조학습의 음성 표본 | 분모의 정규화 상수 | 258강 |
| 언어모형의 표집 | 다음 토큰 분포 | 298강 |
| MCMC | 사후분포 | 157강 |
셋째 줄이 딥러닝을 확률모형으로 넓혔습니다. 의 에 대한 기울기를 그냥 추정하면 분산이 큰데, 으로 다시 쓰면 기댓값이 와 무관한 분포에 대한 것이 되어 기울기가 그대로 통과합니다. 139강의 변수변환이 여기서 학습을 가능하게 합니다.
일곱째 줄이 대규모 학습의 실용적 요령입니다. 소프트맥스 분모의 정규화 상수를 전부 계산할 수 없으므로 음성 표본 몇 개로 추정하며, 이것이 잡음 대조 추정입니다.
넷째 줄이 이 강의의 기법을 그대로 씁니다. 정책경사의 기준선이 대조변수이며, 분산을 줄여도 편향이 생기지 않는 것이 심화 2의 셋째 줄과 같은 이유입니다.
정답.
| 기호 | 읽는 법 | 뜻 |
|---|---|---|
| \hat{I}_ | 추정 적분값 | 표본평균입니다 |
| s/\sqrt | 표준오차 | 추정의 정밀도입니다 |
| 제안분포 | 실제로 뽑는 분포입니다 | |
| 중요도 가중치 | 목표와 제안의 비입니다 | |
| ESS | 유효 표본 크기 | 실제로 쓰인 표본 수입니다 |
| 기각법의 상한 | 수용률의 역수입니다 | |
| 대조변수 | control variate | 평균을 아는 상관된 양입니다 |
| 대립변수 | antithetic variate | 와 를 짝짓습니다 |
| 라오-블랙웰화 | Rao-Blackwellization | 조건부 기댓값으로 바꿉니다 |
| 준몬테카를로 | quasi-Monte Carlo | 저편차 수열을 씁니다 |
| 재매개변수화 | reparameterization | 기울기를 통과시키는 변환입니다 |
| 다층 몬테카를로 | multilevel Monte Carlo | 격자 차이를 쌓습니다 |
| 의사난수 | pseudorandom | 결정적으로 만든 난수입니다 |
여기서 05단원 표본과 극한이 끝납니다. 142강에서 표본평균이 참값으로 감을 보이고, 143강에서 그 오차의 모양을 얻고, 144강과 145강에서 정확한 표본분포를 세우고, 146강에서 유한 표본 보장을 얻고, 147강에서 그 전부를 계산 도구로 바꿨습니다.
다음은 148강부터 시작하는 06단원 추론입니다. 이 단원까지는 모수 와 을 안다고 가정하고 표본이 어떻게 흩어지는지 물었습니다. 06단원은 방향을 뒤집습니다.
148강이 좋은 추정량의 조건을 세우고, 149강의 최대우도추정이 S5의 최적화와 만나며, 150강의 최대사후추정이 125강의 베이즈 정리와 만납니다. 151강의 신뢰구간과 152강의 가설검정은 이 단원의 분포와 분포를 그대로 씁니다.
import numpy as np
rng = np.random.default_rng(20260815)
def gamma_half(k):
if k % 2 == 0:
r = 1.0
for j in range(1, k // 2):
r *= j
return r
r = np.sqrt(np.pi)
for j in range((k - 1) // 2):
r *= (0.5 + j)
return r
# --- 문제 1: 왜 무작위로 적분하는가 -------------------------------------
print(" [0,1]^d 에서 exp(x1+...+xd) 를 적분합니다. 참값은 (e-1)^d 입니다")
print(" 차원 d 점 개수 n 격자 상대오차 몬테카를로 상대오차 격자/MC")
for d, m in [(1, 10000), (2, 100), (3, 22), (5, 6), (8, 3)]:
n = m ** d
ex = (np.e - 1.0) ** d
s1 = float(np.mean(np.exp((np.arange(m) + 0.5) / m)))
gr = abs(s1 ** d - ex) / ex
errs = []
for _ in range(40):
u = rng.random((n, d))
errs.append(abs(float(np.exp(u.sum(1)).mean()) - ex) / ex)
mc = float(np.sqrt(np.mean(np.array(errs) ** 2)))
print(" %9d %13d %14.4e %18.4e %10.4f" % (d, n, gr, mc, gr / mc))
print(" 격자는 오차가 n^(-2/d) 이고 몬테카를로는 차원과 무관하게 n^(-1/2) 입니다")
print(" d = 5 에서 거의 같아지고 d = 8 에서는 무작위가 3 배 가까이 이깁니다")
# --- 문제 2: 오차 막대를 어떻게 붙이는가 --------------------------------
print(" 4/(1+x^2) 를 [0,1] 에서 적분해 원주율을 추정합니다")
pi_true = float(np.pi)
lo, hi = 2.0, 4.0
T, n2 = 3000, 10000
est = np.empty(T)
cov_t = 0
for i in range(T):
u = rng.random(n2)
g = 4.0 / (1.0 + u * u)
m_ = float(g.mean())
se = float(g.std(ddof=1)) / np.sqrt(n2)
est[i] = m_
if abs(m_ - pi_true) <= 1.959964 * se:
cov_t += 1
print(" 참값 %.10f, 추정 평균 %.10f, 추정 표준편차 %.10f"
% (pi_true, float(est.mean()), float(est.std(ddof=1))))
print(" 95%% 신뢰구간 실제 포함률 %.4f (시행 %d 회)" % (cov_t / T, T))
print(" n 중심극한 반폭 호에프딩 반폭 호에프딩/중심극한")
sd_g = float((4.0 / (1.0 + rng.random(2000000) ** 2)).std(ddof=1))
for n in [1000, 10000, 100000, 1000000]:
clt = 1.959964 * sd_g / np.sqrt(n)
hf = (hi - lo) * np.sqrt(np.log(2 / 0.05) / (2 * n))
print(" %9d %14.8f %14.8f %16.4f" % (n, clt, hf, hf / clt))
print(" 호에프딩이 더 넓지만 어떤 n 에서나 반드시 옳습니다. 146강의 거래입니다")
# --- 문제 3: 분산을 어떻게 줄이는가 -------------------------------------
print(" 희귀 사건 P(Z > 4) 를 두 방법으로 추정합니다")
xs = 4.0 + (np.arange(2000000) + 0.5) * (8.0 / 2000000)
p_true = float(np.sum(np.exp(-xs * xs / 2) / np.sqrt(2 * np.pi)) * (8.0 / 2000000))
n3 = 1000000
z = rng.normal(0, 1, n3)
p_mc = float((z > 4.0).mean())
y = rng.normal(4.0, 1.0, n3)
w = np.exp(-y * y / 2 + (y - 4.0) ** 2 / 2) * (y > 4.0)
p_is = float(w.mean())
print(" 참값 %.12e" % p_true)
print(" 단순 몬테카를로 %.12e (표본 %d 개 중 %d 개 적중)"
% (p_mc, n3, int((z > 4.0).sum())))
print(" 중요도 표집 %.12e" % p_is)
print(" 방법 상대 표준오차 참값 대비 상대오차 유효 배수")
se_mc = np.sqrt(p_true * (1 - p_true) / n3) / p_true
se_is = float(w.std(ddof=1)) / np.sqrt(n3) / p_true
print(" %-12s %14.6f %20.6f %12.1f"
% ("단순 MC", se_mc, abs(p_mc - p_true) / p_true, 1.0))
print(" %-12s %14.6f %20.6f %12.1f"
% ("중요도 표집", se_is, abs(p_is - p_true) / p_true, (se_mc / se_is) ** 2))
print(" 같은 표본으로 유효 표본 수가 수천 배가 됩니다")
print(" 원주율 추정에 대조변수를 붙여 봅니다. 4 - 2x 는 평균이 3 으로 알려져 있습니다")
u = rng.random(200000)
g = 4.0 / (1.0 + u * u)
h = 4.0 - 2.0 * u
c = float(np.cov(g, h)[0, 1] / np.var(h, ddof=1))
gc = g - c * (h - 3.0)
print(" 상관계수 %.6f, 최적 계수 c = %.6f" % (float(np.corrcoef(g, h)[0, 1]), c))
print(" 원래 표준편차 %.6f -> 대조변수 적용 후 %.6f (분산 %.2f 배 감소)"
% (float(g.std(ddof=1)), float(gc.std(ddof=1)),
float(g.var(ddof=1) / gc.var(ddof=1))))
# --- 문제 4: 어디에서 어떻게 뽑는가 -------------------------------------
print(" 기각법으로 밀도 6x(1-x) 에서 뽑습니다. 제안은 균등, 상한은 1.5 입니다")
n4 = 2000000
xu = rng.random(n4)
uu = rng.random(n4) * 1.5
acc = uu <= 6 * xu * (1 - xu)
samp = xu[acc]
grid = np.linspace(0, 1, 2001)
Ftrue = 3 * grid ** 2 - 2 * grid ** 3
ss = np.sort(samp)
Fn = np.searchsorted(ss, grid, side="right") / len(ss)
print(" 이론 수용률 %.6f, 실제 수용률 %.6f, 분포함수 최대 거리 %.6f"
% (1 / 1.5, float(acc.mean()), float(np.max(np.abs(Fn - Ftrue)))))
print(" 차원을 올리면 기각법이 어떻게 되는지 봅니다. 정육면체 안의 단위 공입니다")
print(" 차원 d 이론 수용률 실제 수용률 필요한 시도 수")
for d in [2, 3, 5, 10, 20]:
vol = np.pi ** (d / 2.0) / gamma_half(d + 2)
th = vol / 2.0 ** d
if d <= 10:
pts = rng.uniform(-1, 1, size=(400000, d))
emp = float(((pts ** 2).sum(1) <= 1.0).mean())
es = "%16.8f" % emp
else:
es = " 0 (관측 안 됨)"
print(" %9d %16.10f %s %16.3e" % (d, th, es, 1.0 / th))
print(" 차원이 20 이면 4000 만 번에 한 번꼴입니다. 기각법을 쓸 수 없습니다")
print(" 그래서 157강 마르코프 연쇄 몬테카를로가 필요합니다")
# --- 문제 5: 언제 믿을 수 없는가 ---------------------------------------
print(" 중요도 표집으로 표준정규의 E[X^4] = 3 을 추정합니다. 제안의 폭을 바꿉니다")
print(" 제안 표준편차 추정값 참값 3 과의 차이 유효 표본 크기 최대 가중치 비중")
n5 = 1000000
for sq in [1.5, 1.0, 0.8, 0.7, 0.6, 0.5, 0.4]:
xq = rng.normal(0, sq, n5)
lw = -xq * xq / 2 + xq * xq / (2 * sq * sq) + np.log(sq)
ww = np.exp(lw - lw.max())
estv = float(np.sum(ww * xq ** 4) / np.sum(ww))
ess = float(np.sum(ww) ** 2 / np.sum(ww * ww))
print(" %13.2f %14.6f %16.6f %16.1f %16.6f"
% (sq, estv, abs(estv - 3.0), ess, float(ww.max() / np.sum(ww))))
print(" 제안이 좁아질수록 유효 표본 크기가 무너집니다. 추정값은 그럴듯해 보입니다")
print(" 가중치의 분산은 제안 표준편차가 0.7071 이하이면 무한입니다")
print(" 유효 표본 크기를 보지 않으면 100 만 개를 뽑고도 몇 개를 쓴 셈이 됩니다")
# [0,1]^d 에서 exp(x1+...+xd) 를 적분합니다. 참값은 (e-1)^d 입니다
# 차원 d 점 개수 n 격자 상대오차 몬테카를로 상대오차 격자/MC
# 1 10000 4.1667e-10 2.8204e-03 0.0000
# 2 10000 8.3333e-06 3.7279e-03 0.0022
# 3 10648 2.5823e-04 4.1333e-03 0.0625
# 5 7776 5.7690e-03 5.9842e-03 0.9640
# 8 6561 3.6327e-02 1.2454e-02 2.9169
# 격자는 오차가 n^(-2/d) 이고 몬테카를로는 차원과 무관하게 n^(-1/2) 입니다
# d = 5 에서 거의 같아지고 d = 8 에서는 무작위가 3 배 가까이 이깁니다
# 4/(1+x^2) 를 [0,1] 에서 적분해 원주율을 추정합니다
# 참값 3.1415926536, 추정 평균 3.1415430040, 추정 표준편차 0.0065890962
# 95% 신뢰구간 실제 포함률 0.9460 (시행 3000 회)
# n 중심극한 반폭 호에프딩 반폭 호에프딩/중심극한
# 1000 0.03986584 0.08589388 2.1546
# 10000 0.01260668 0.02716203 2.1546
# 100000 0.00398658 0.00858939 2.1546
# 1000000 0.00126067 0.00271620 2.1546
# 호에프딩이 더 넓지만 어떤 n 에서나 반드시 옳습니다. 146강의 거래입니다
# 희귀 사건 P(Z > 4) 를 두 방법으로 추정합니다
# 참값 3.167124183276e-05
# 단순 몬테카를로 2.700000000000e-05 (표본 1000000 개 중 27 개 적중)
# 중요도 표집 3.164732046251e-05
# 방법 상대 표준오차 참값 대비 상대오차 유효 배수
# 단순 MC 0.177689 0.147492 1.0
# 중요도 표집 0.002122 0.000755 7014.0
# 같은 표본으로 유효 표본 수가 수천 배가 됩니다
# 원주율 추정에 대조변수를 붙여 봅니다. 4 - 2x 는 평균이 3 으로 알려져 있습니다
# 상관계수 0.993795, 최적 계수 c = 1.106750
# 원래 표준편차 0.642478 -> 대조변수 적용 후 0.071462 (분산 80.83 배 감소)
# 기각법으로 밀도 6x(1-x) 에서 뽑습니다. 제안은 균등, 상한은 1.5 입니다
# 이론 수용률 0.666667, 실제 수용률 0.666471, 분포함수 최대 거리 0.000636
# 차원을 올리면 기각법이 어떻게 되는지 봅니다. 정육면체 안의 단위 공입니다
# 차원 d 이론 수용률 실제 수용률 필요한 시도 수
# 2 0.7853981634 0.78504250 1.273e+00
# 3 0.5235987756 0.52241000 1.910e+00
# 5 0.1644934067 0.16505500 6.079e+00
# 10 0.0024903946 0.00243750 4.015e+02
# 20 0.0000000246 0 (관측 안 됨) 4.063e+07
# 차원이 20 이면 4000 만 번에 한 번꼴입니다. 기각법을 쓸 수 없습니다
# 그래서 157강 마르코프 연쇄 몬테카를로가 필요합니다
# 중요도 표집으로 표준정규의 E[X^4] = 3 을 추정합니다. 제안의 폭을 바꿉니다
# 제안 표준편차 추정값 참값 3 과의 차이 유효 표본 크기 최대 가중치 비중
# 1.50 3.002851 0.002851 831382.2 0.000002
# 1.00 3.000893 0.000893 1000000.0 0.000001
# 0.80 2.986539 0.013461 832639.5 0.000072
# 0.70 3.081038 0.081038 372922.1 0.000595
# 0.60 3.157179 0.157179 25024.2 0.005695
# 0.50 2.032339 0.967661 32341.8 0.002080
# 0.40 1.331611 1.668389 7995.7 0.006607
# 제안이 좁아질수록 유효 표본 크기가 무너집니다. 추정값은 그럴듯해 보입니다
# 가중치의 분산은 제안 표준편차가 0.7071 이하이면 무한입니다
# 유효 표본 크기를 보지 않으면 100 만 개를 뽑고도 몇 개를 쓴 셈이 됩니다