150강에서 사후분포를 세우고 격자로 계산했습니다. 차원이 하나였기 때문에 가능한 일이었습니다.
분모의 적분이 문제입니다. 켤레가 아니면 닫힌 식이 없고, 모수가 열 개만 되어도 격자가 감당하지 못합니다.
147강 문제 4에서 다른 길도 막혔습니다. 기각법의 수용률이 에서 이라 독립 표본을 뽑을 수 없었습니다.
155강 문제 5가 이미 답을 보여 주었습니다. 목표분포 를 정해 놓고 상세균형을 만족하는 전이를 만들면, 그 연쇄가 저절로 로 갑니다.
| 이 강의가 푸는 것 | 어디서 막혔던 문제인가 |
|---|---|
| 정규화 상수를 모름 | 150강의 사후분포 |
| 고차원 표집 | 147강 문제 4 |
| 조건부분포만 아는 경우 | 137강의 조건부 구조 |
| 오차 막대 | 155강 문제 4의 유효 표본 크기 |
대가는 표본 사이의 상관입니다. 155강에서 잰 적분 자기상관 시간이 여기서 실무의 핵심 지표가 됩니다.
문제. 에서 표본을 뽑습니다.
(1) 메트로폴리스로 사슬을 돌리세요.
(2) 평균과 분산을 참값과 견주세요.
(3) 분위수까지 맞는지 확인하세요.
생각의 실마리. 155강 문제 5의 메트로폴리스를 연속 상태로 옮깁니다. 수용 판정에 비 만 쓰므로 정규화 상수가 약분됩니다.
풀이. (1)(2) 격자로 구한 참값이 평균 , 분산 입니다.
| 항목 | 값 |
|---|---|
| 수용률 | |
| 표본 평균 | |
| 표본 분산 |
(3) 분위수까지 견줍니다.
| 분위수 | MCMC 표본 | 격자 참값 | 차이 |
|---|---|---|---|
분포 전체가 맞습니다. 평균과 분산만이 아니라 꼬리까지 재현합니다.
이 문제에서 배우는 것: 메트로폴리스-헤이스팅스.
알고리즘. 현재 에서 제안 를 뽑고 다음 확률로 수용합니다.
기각하면 에 머뭅니다.
대칭 제안이면 가 약분되어 가 됩니다. 155강 문제 5의 메트로폴리스이며, 검산이 그것을 씁니다.
| 성질 | 이유 |
|---|---|
| 정규화 상수 불필요 | 비만 씁니다 |
| 상세균형 성립 | 155강 문제 5의 계산 |
| 비주기성 | 기각이 자기 전이입니다 |
| 기약성 | 제안이 모든 곳에 닿으면 됩니다 |
| 로그로 계산 | 149강 문제 2의 아래넘침 회피 |
다섯째 줄이 실무의 필수입니다. 가 우도의 곱이면 아주 작은 수가 되므로 언제나 로 비교합니다.
버리는 구간이 필요합니다. 초기값이 목표분포와 멀면 처음 얼마 동안은 표본이 아닙니다.
검산에서 앞의 를 버렸습니다. 얼마나 버릴지는 문제 4의 진단으로 정합니다.
150강에서 격자로 우회한 문제가 이제 풀립니다. 사후분포가 에 비례하므로 분모를 계산하지 않고도 그 비를 쓸 수 있습니다.
바로 확인 1.
확인 1-1. 메트로폴리스-헤이스팅스의 수용확률을 쓰세요.
답. 입니다.
확인 1-2. 정규화 상수가 필요 없는 이유를 쓰세요.
답. 비만 쓰므로 약분되기 때문입니다.
확인 1-3. 기각이 알고리즘에 주는 성질을 쓰세요.
답. 자기 전이가 되어 비주기성을 줍니다.
문제. 차원 표준정규를 목표로 제안 폭을 바꿉니다.
(1) 수용률과 자기상관 시간을 재세요.
(2) 유효 표본 크기가 최대가 되는 폭을 찾으세요.
(3) 이론이 권하는 값과 견주세요.
생각의 실마리. 폭이 작으면 거의 다 수용되지만 조금씩만 움직입니다. 폭이 크면 멀리 제안하지만 대부분 기각됩니다. 가운데에 최적이 있습니다.
풀이. (1)(2) 검산 결과입니다.
| 제안 폭 | 수용률 | 자기상관 시간 | 유효 표본 크기 | 비율 |
|---|---|---|---|---|
폭 에서 유효 표본이 개로 최대입니다. 가장 나쁜 의 아홉 배이고 의 배입니다.
마지막 줄은 한 번도 움직이지 않았습니다. 만 걸음을 걷고 표본 하나를 얻은 셈입니다.
(3) 이론과 견줍니다.
| 항목 | 값 |
|---|---|
| 최적 폭 (검산) | |
| 이론 2.38/\sqrt | |
| 그때의 수용률 | |
| 이론 목표 수용률 |
이론과 정확히 맞습니다.
이 문제에서 배우는 것: 조율의 원리.
최적 스케일링. 고차원 무작위 걸음 메트로폴리스에서 제안 표준편차를 로 잡으면 수용률이 가 되고 효율이 최대가 됩니다.
로 나누는 것이 핵심입니다. 차원이 오르면 제안을 더 작게 해야 하며, 그만큼 사슬이 느려집니다.
| 폭 | 수용률 | 문제 |
|---|---|---|
| 너무 작음 | 에 가까움 | 조금씩만 움직여 상관이 큽니다 |
| 적당함 | 근처 | 효율이 최대입니다 |
| 너무 큼 | 에 가까움 | 제자리에 머뭅니다 |
수용률만 보고 좋아하면 안 됩니다. 가 수용된 첫 줄이 가장 나쁜 축에 듭니다. 수용률이 높다는 것은 거의 움직이지 않았다는 뜻일 수 있습니다.
판단 기준은 유효 표본 크기입니다. 155강 문제 4의 로 나눈 값이며, 그것만이 실제로 얻은 정보의 양입니다.
155강 문제 3의 스펙트럼 간격이 이것의 이론적 배경입니다. 폭이 나쁘면 가 에 가까워지고 혼합 시간이 길어집니다.
바로 확인 2.
확인 2-1. 최적 제안 폭을 쓰세요.
답. 입니다.
확인 2-2. 목표 수용률을 쓰세요.
답. 약 입니다.
확인 2-3. 수용률이 높은 것이 언제나 좋은지 쓰세요.
답. 아니며 거의 움직이지 않았다는 뜻일 수 있습니다.
문제. 이변량 정규에서 깁스 샘플링을 돌립니다.
(1) 조건부분포를 쓰세요.
(2) 상관에 따라 자기상관 시간이 어떻게 변하는지 재세요.
(3) 이론과 견주세요.
생각의 실마리. 140강 문제 4에서 다변량 정규의 조건부분포를 이미 구했습니다. ****입니다.
풀이. (1)(2)(3) 검산 결과입니다.
| 상관 | 표본 상관 | 자기상관 시간 | 유효 표본 | 이론 \rho^ |
|---|---|---|---|---|
**이면 자기상관 시간이 정확히 **입니다. 좌표가 독립이라 깁스가 곧 독립 표집입니다.
**에서 **이며 이론값 과 맞습니다.
이 문제에서 배우는 것: 깁스 샘플링.
깁스 샘플링. 좌표를 하나씩 골라 나머지를 고정한 조건부분포에서 뽑습니다.
언제나 수용됩니다. 메트로폴리스-헤이스팅스의 특수한 경우로 볼 수 있으며, **제안이 조건부분포이면 수용확률이 정확히 **입니다.
| 항목 | 메트로폴리스 | 깁스 |
|---|---|---|
| 필요한 것 | 비 | 조건부분포 |
| 조율 | 제안 폭 | 없습니다 |
| 수용률 | 목표 | 언제나 |
| 약점 | 폭 조율이 어렵습니다 | 좌표 상관에 약합니다 |
| 좌표 갱신 | 한꺼번에 가능 | 하나씩입니다 |
둘째 줄이 깁스의 매력입니다. 조율할 것이 없어 자동으로 돌아갑니다.
약점은 좌표 상관입니다. 좌표축 방향으로만 움직이므로 상관이 크면 좁은 골짜기를 지그재그로 기어갑니다.
대처법이 몇 가지 있습니다.
| 방법 | 내용 |
|---|---|
| 블록 갱신 | 상관된 좌표를 묶어 함께 뽑습니다 |
| 재모수화 | 좌표를 회전해 상관을 없앱니다 |
| 보조변수 | 잠재변수를 넣어 조건부를 단순화합니다 |
| 붕괴 | 일부를 해석적으로 적분합니다 |
넷째 줄이 147강 심화 2의 라오-블랙웰화입니다. 적분할 수 있는 것을 적분하면 분산이 줄어듭니다.
깁스가 자연스러운 자리가 많습니다. 150강의 계층모형, 213강의 확률그래프모형, 223강의 혼합모형에서 조건부분포가 켤레라 닫힌 식으로 나옵니다.
바로 확인 3.
확인 3-1. 깁스 샘플링의 갱신 규칙을 쓰세요.
답. 나머지를 고정한 조건부분포에서 좌표를 하나씩 뽑습니다.
확인 3-2. 깁스의 수용률을 쓰세요.
답. 언제나 입니다.
확인 3-3. 깁스의 약점을 쓰세요.
답. 좌표가 강하게 상관되면 느려집니다.
문제. 봉우리 두 개인 목표에서 사슬을 돌립니다.
(1) 제안 폭과 사슬 길이를 바꿔 가며 사슬별 평균을 보세요.
(2) R-hat을 계산하세요.
(3) 어느 경우를 믿을 수 있는지 판정하세요.
생각의 실마리. 목표가 이라 **참 평균이 **입니다. 봉우리 사이가 멀어 넘기 어렵습니다.
풀이. (1)(2) 네 사슬을 에서 시작한 결과입니다.
| 제안 폭 | 사슬 길이 | 사슬별 평균 | R-hat | 전체 평균 |
|---|---|---|---|---|
첫 줄이 최악입니다. 세 번째 사슬은 에 갇혀 있고 네 번째는 에 갇혀 서로 반대 답을 냅니다. 전체 평균이 으로 참값 에서 멉니다.
둘째 줄도 아직 위험합니다. 길이를 열 배로 늘렸는데 R-hat이 이고 전체 평균이 입니다.
셋째와 넷째 줄이 좋습니다. 폭을 으로 키워 봉우리를 넘을 수 있게 하니 R-hat이 이 되었습니다.
(3) R-hat이 에 가까운 경우만 믿을 수 있습니다.
이 문제에서 배우는 것: 수렴 진단.
R-hat. 사슬 사이 분산 와 사슬 안 분산 를 견줍니다.
모든 사슬이 같은 곳을 보면 가 작아져 에 가까워집니다.
서로 다른 곳에서 출발한 여러 사슬이 필수입니다. 한 사슬만 보면 첫 줄의 세 번째 사슬처럼 완벽하게 수렴한 것처럼 보입니다.
| 진단 | 무엇을 보는가 | 위험 신호 |
|---|---|---|
| R-hat | 사슬 사이 일치 | 을 넘음 |
| 유효 표본 크기 | 실제 정보량 | 사슬당 미만 |
| 궤적 그림 | 눈으로 확인 | 추세나 갇힘 |
| 자기상관 그림 | 상관의 감쇠 | 천천히 줄어듦 |
| 발산 진단 | 기하학적 문제 | 해밀토니안 방법에서 |
**둘째 줄이 155강 문제 4의 **입니다. 사슬을 아무리 길게 돌려도 유효 표본이 적으면 정보가 없습니다.
수렴하지 않았음은 보일 수 있지만 수렴했음은 증명할 수 없습니다. 진단은 모두 필요조건일 뿐입니다.
149강 문제 4의 다봉 우도가 여기서 다시 나옵니다. 최적화에서 국소 최대에 갇히는 문제와 표집에서 한 봉우리에 갇히는 문제가 같은 구조이며, 대처도 같습니다. 여러 곳에서 시작합니다.
바로 확인 4.
확인 4-1. R-hat이 무엇을 견주는지 쓰세요.
답. 사슬 사이 분산과 사슬 안 분산입니다.
확인 4-2. 여러 사슬이 필요한 이유를 쓰세요.
답. 한 사슬만 보면 갇힌 것을 알 수 없기 때문입니다.
확인 4-3. 진단으로 증명할 수 있는 것과 없는 것을 쓰세요.
답. 수렴하지 않았음은 보이지만 수렴했음은 증명할 수 없습니다.
문제. 차원 목표에서 두 제안을 견줍니다.
(1) 무작위 걸음 제안의 유효 표본 크기를 재세요.
(2) 기울기를 쓰는 랑주뱅 제안과 비교하세요.
(3) 차이가 어디에서 오는지 쓰세요.
생각의 실마리. 무작위 걸음은 어디로 갈지 전혀 모릅니다. 밀도가 낮은 쪽으로도 똑같이 제안하므로 대부분 기각됩니다.
풀이. (1)(2) 검산 결과입니다.
| 방법 | 걸음 | 수용률 | 자기상관 시간 | 유효 표본 |
|---|---|---|---|---|
| 무작위 걸음 | ||||
| 랑주뱅 |
랑주뱅이 배입니다. 수용률도 로 훨씬 높습니다.
(3) 기울기가 밀도가 높은 쪽을 가리키기 때문입니다.
이 문제에서 배우는 것: 기울기를 쓰는 제안.
메트로폴리스 조정 랑주뱅. 제안에 기울기를 넣습니다.
제안이 대칭이 아니므로 수용확률에 를 넣습니다.
156강 심화 6의 랑주뱅 확산을 이산화한 것입니다. 그 확산의 정상분포가 정확히 이며, 이산화 오차를 수용 판정이 고쳐 줍니다.
| 방법 | 쓰는 정보 | 차원 의존 |
|---|---|---|
| 무작위 걸음 | 의 비 | |
| 랑주뱅 | 기울기 | d^ |
| 해밀토니안 | 기울기와 운동량 | d^ |
| 깁스 | 조건부분포 | 문제마다 다릅니다 |
셋째 줄이 오늘날의 표준입니다. 위치에 운동량을 붙여 물리계처럼 굴리면 멀리까지 이동하면서도 수용률이 높습니다.
| 목표 수용률 | 방법 |
|---|---|
| 무작위 걸음 | |
| 랑주뱅 | |
| 해밀토니안 |
세 값이 모두 이론으로 유도됩니다. 최적 스케일링 이론의 결과이며, 검산의 랑주뱅 수용률 은 걸음을 조금 작게 잡은 것입니다.
기울기를 쓸 수 있으면 언제나 쓰는 것이 낫습니다. 그리고 자동미분이 있으면 기울기가 공짜이므로, 현대의 확률 프로그래밍 도구는 기본으로 해밀토니안 방법을 씁니다.
261강의 확산모형이 같은 재료를 씁니다. 점수함수 를 학습해 역방향 확산을 돌리는 것이며, 이 강의의 랑주뱅과 뿌리가 같습니다.
바로 확인 5.
확인 5-1. 랑주뱅 제안의 식을 쓰세요.
답. 입니다.
확인 5-2. 제안이 비대칭일 때 수용확률에 무엇을 넣는지 쓰세요.
답. 를 곱합니다.
확인 5-3. 세 방법의 목표 수용률을 쓰세요.
답. , , 입니다.
| 개념 | 식 |
|---|---|
| 메트로폴리스-헤이스팅스 | |
| 대칭 제안 | |
| 최적 폭 | 2.38\sigma/\sqrt |
| 목표 수용률 | 무작위 걸음 |
| 깁스 갱신 | |
| 깁스의 자기상관 | 이변량 정규에서 |
| R-hat | |
| 랑주뱅 제안 | |
| 유효 표본 크기 |
| 제안 폭 | 수용률 | 유효 표본 |
|---|---|---|
| 방법 | 필요한 것 | 조율 |
|---|---|---|
| 메트로폴리스 | 비 | 제안 폭 |
| 깁스 | 조건부분포 | 없습니다 |
| 랑주뱅 | 기울기 | 걸음 크기 |
| 해밀토니안 | 기울기와 운동량 | 걸음과 궤적 길이 |
| 자주 하는 실수 | 바로잡기 |
|---|---|
| 수용률이 높으면 좋다고 봅니다 | 거의 안 움직인 것일 수 있습니다 |
| 한 사슬만 돌립니다 | 갇힌 것을 알 수 없습니다 |
| 궤적이 안정되면 수렴이라 봅니다 | R-hat과 유효 표본을 봅니다 |
| 자기상관을 무시하고 오차를 냅니다 | 유효 표본 크기로 보정합니다 |
| 표본을 솎아 냅니다 | 정보를 버립니다 |
| 정규화 상수를 계산하려 합니다 | 필요 없습니다 |
| 기울기가 있는데 무작위 걸음을 씁니다 | 랑주뱅이나 해밀토니안을 씁니다 |
문제 6. 메트로폴리스-헤이스팅스의 수용확률을 쓰세요.
답. 입니다.
문제 7. 정규화 상수가 필요 없는 이유를 쓰세요.
답. 비만 쓰므로 약분되기 때문입니다.
문제 8. 기각이 알고리즘에 주는 성질을 쓰세요.
답. 자기 전이가 되어 비주기성을 줍니다.
문제 9. 최적 제안 폭과 목표 수용률을 쓰세요.
답. 이며 수용률 입니다.
문제 10. 수용률이 높은 것이 언제나 좋은지 쓰세요.
답. 아니며 거의 움직이지 않았다는 뜻일 수 있습니다.
문제 11. 판단 기준으로 무엇을 보는지 쓰세요.
답. 유효 표본 크기입니다.
문제 12. 깁스 샘플링의 갱신 규칙과 수용률을 쓰세요.
답. 조건부분포에서 좌표를 하나씩 뽑으며 수용률이 언제나 입니다.
문제 13. 깁스의 약점과 대처법을 쓰세요.
답. 좌표 상관에 약하며 블록 갱신이나 재모수화로 대처합니다.
문제 14. 이변량 정규에서 깁스의 자기상관 시간을 쓰세요.
답. 입니다.
문제 15. R-hat이 무엇을 견주는지 쓰세요.
답. 사슬 사이 분산과 사슬 안 분산입니다.
문제 16. 검산에서 폭 의 짧은 사슬의 R-hat을 쓰세요.
답. 입니다.
문제 17. 랑주뱅 제안의 식과 비대칭 보정을 쓰세요.
답. 이며 를 곱합니다.
문제 18. 세 방법의 차원 의존과 목표 수용률을 쓰세요.
답. , , 이며 수용률은 , , 입니다.
심화 1. 해밀토니안 몬테카를로를 정리하세요.
위치 에 운동량 를 붙여 물리계를 만듭니다.
| 단계 | 내용 |
|---|---|
| 운동량 표집 | |
| 도약 적분 | 해밀턴 방정식을 수치로 풉니다 |
| 수용 판정 | 에너지 보존 오차를 보정합니다 |
| 부호 반전 | 가역성을 만듭니다 |
**에너지가 보존되면 수용률이 **입니다. 실제로는 이산화 오차가 있어 조금 떨어지며, 그 오차를 메트로폴리스 판정이 정확히 고칩니다.
멀리 가면서도 수용률이 높습니다. 무작위 걸음이 으로 퍼지는 데 비해 해밀토니안은 궤적을 따라 직선적으로 이동합니다.
자동 조율이 어려운 것이 약점이었는데, 궤적이 되돌아오는 순간 멈추는 방법이 그것을 해결했습니다. 오늘날 확률 프로그래밍의 기본 알고리즘입니다.
심화 2. MCMC의 여러 갈래를 정리하세요.
| 방법 | 특징 |
|---|---|
| 무작위 걸음 메트로폴리스 | 가장 단순하고 어디에나 적용됩니다 |
| 깁스 | 조건부가 켤레일 때 편합니다 |
| 메트로폴리스 안에 깁스 | 일부만 조건부로 뽑습니다 |
| 랑주뱅 | 기울기를 씁니다 |
| 해밀토니안 | 궤적을 굴립니다 |
| 슬라이스 | 보조변수로 폭을 자동 조율 |
| 병렬 템퍼링 | 여러 온도의 사슬을 교환 |
| 순차 몬테카를로 | 입자를 여러 개 굴립니다 |
일곱째 줄이 문제 4의 다봉 문제를 정면으로 다룹니다. 높은 온도의 사슬은 봉우리를 쉽게 넘고, 그 사슬과 낮은 온도 사슬을 주기적으로 교환해 갇힘을 깨뜨립니다.
여섯째 줄이 조율 없이 작동합니다. 깁스처럼 조율할 것이 없으면서 조건부분포도 필요 없습니다.
여덟째 줄이 시계열과 상태공간 모형의 표준입니다. 414강의 은닉 마르코프 모형에서 필터링에 쓰입니다.
심화 3. 수렴 진단을 더 정리하세요.
| 도구 | 무엇을 보는가 |
|---|---|
| R-hat | 사슬 사이 일치 |
| 순위 정규화 R-hat | 꼬리가 두꺼워도 작동 |
| 유효 표본 크기 | 실제 정보량 |
| 몬테카를로 표준오차 | 추정의 정밀도 |
| 궤적 그림 | 추세와 갇힘 |
| 사후예측 검사 | 모형 자체의 적합 |
| 발산 진단 | 곡률이 심한 영역 |
넷째 줄이 보고의 필수 항목입니다. 추정값 옆에 몬테카를로 표준오차를 함께 내면 얼마나 더 돌려야 하는지 알 수 있습니다.
여섯째 줄이 다른 층위입니다. 사슬이 잘 섞였어도 모형이 자료를 설명하지 못할 수 있으며, 149강 문제 5의 모형 오설정이 그것입니다.
일곱째 줄이 해밀토니안 방법의 강점입니다. 궤적이 발산하면 그 지점의 기하가 문제라는 신호이며, 다른 방법에는 이런 경보가 없습니다. 계층모형에서 자주 나오고 재모수화로 고칩니다.
심화 4. 베이즈 계산의 대안을 정리하세요.
| 방법 | 성격 | 관련 강의 |
|---|---|---|
| 격자 | 정확하지만 저차원만 | 150강 |
| 라플라스 근사 | 정규로 근사 | 150강 심화 3 |
| MCMC | 점근적으로 정확, 느립니다 | 157강 |
| 변분추론 | 빠르지만 근사 | 262강 |
| 기댓값 전파 | 국소 근사 | 213강 |
| 순차 몬테카를로 | 순차 자료에 적합 | 414강 |
| 근사 베이즈 계산 | 우도를 쓸 수 없을 때 | 시뮬레이션 기반 |
셋째와 넷째 줄이 실무의 두 선택입니다. MCMC는 오래 돌리면 정확하지만 느리고, 변분추론은 빠르지만 사후분포의 폭을 과소평가하는 경향이 있습니다.
일곱째 줄이 흥미롭습니다. 우도를 계산할 수 없어도 모형에서 자료를 생성할 수만 있으면 추론이 가능하며, 요약통계량의 거리로 수용을 판정합니다.
둘째 줄이 값싼 첫 시도입니다. MAP를 찾고 헤세 행렬로 정규 근사를 만들면 되며, 149강의 점근 정규성이 그 근거입니다.
심화 5. MCMC가 실패하는 자리를 정리하세요.
| 상황 | 증상 | 대처 |
|---|---|---|
| 다봉 분포 | 한 봉우리에 갇힙니다 | 병렬 템퍼링, 여러 초기값 |
| 강한 상관 | 지그재그로 기어갑니다 | 재모수화, 해밀토니안 |
| 곡률이 심한 기하 | 발산이 잦습니다 | 비중심 재모수화 |
| 매우 고차원 | 혼합이 느립니다 | 기울기 기반 방법 |
| 이산과 연속 혼합 | 기울기가 없습니다 | 주변화, 특수 제안 |
| 꼬리가 무거움 | 유효 표본이 불안정 | 순위 기반 진단 |
| 라벨 바꾸기 | 사후가 대칭으로 다봉 | 순서 제약 |
셋째 줄이 계층모형의 고질병입니다. 집단 분산이 작으면 깔때기 모양의 기하가 되어 사슬이 목으로 들어가지 못하며, 모수를 곱셈 꼴로 다시 쓰면 해결됩니다.
일곱째 줄이 149강 심화 3과 같습니다. 혼합모형에서 성분의 순서를 바꿔도 같은 분포이므로 사후가 대칭으로 여러 봉우리를 갖고, R-hat이 영원히 이 되지 않습니다.
첫째 줄이 문제 4에서 본 것이며 가장 위험합니다. 한 사슬만 보면 완벽해 보입니다.
심화 6. 기계학습에서 MCMC가 쓰이는 자리를 정리하세요.
| 자리 | 무엇을 뽑는가 | 관련 강의 |
|---|---|---|
| 베이즈 추론 | 사후분포 | 150강 |
| 계층모형 | 집단별 모수 | 150강 심화 2 |
| 확률그래프모형 | 은닉 변수 | 213강 |
| 볼츠만 머신 | 에너지 기반 분포 | 213강 |
| 잠재 디리클레 할당 | 주제 배정 | 258강 |
| 베이즈 신경망 | 가중치의 사후 | 245강 |
| 확산모형의 표집 | 역과정의 궤적 | 261강 |
| 강화학습의 톰슨 표집 | 모수의 사후 | 278강 |
넷째 줄이 대조발산의 배경입니다. 정상분포의 기댓값이 필요한데 수렴을 기다릴 수 없으므로 몇 걸음만 돌린 사슬로 근사하며, 155강 심화 6에서 본 타협입니다.
여섯째 줄이 규모의 문제를 만납니다. 가중치가 수백만 개면 MCMC가 감당하지 못하므로, 확률경사 랑주뱅처럼 미니배치 기울기를 쓰는 변형이 필요합니다. 236강의 확률경사하강과 이 강의의 랑주뱅이 만나는 자리입니다.
일곱째 줄이 이 단원의 도착점입니다. 확산모형의 표집이 156강의 확률미분방정식을 역방향으로 푸는 것이며, 점수함수를 학습해 그 표류로 쓰는 구조가 이 강의의 랑주뱅과 정확히 같습니다.
정답.
| 기호 | 읽는 법 | 뜻 |
|---|---|---|
| 목표분포 | 정규화하지 않아도 됩니다 | |
| 제안분포 | 다음 후보를 만듭니다 | |
| 수용확률 | 제안을 받아들일 확률입니다 | |
| MCMC | Markov chain Monte Carlo | 연쇄로 표본을 뽑습니다 |
| 메트로폴리스-헤이스팅스 | Metropolis-Hastings | 일반형 수용 규칙입니다 |
| 깁스 샘플링 | Gibbs sampling | 조건부분포에서 뽑습니다 |
| 버리는 구간 | burn-in | 초기 표본을 버립니다 |
| R-hat | potential scale reduction | 사슬 사이 일치를 잽니다 |
| 유효 표본 크기 | effective sample size | 입니다 |
| 랑주뱅 | MALA | 기울기를 쓰는 제안입니다 |
| 해밀토니안 | HMC | 운동량을 붙여 궤적을 굴립니다 |
| 병렬 템퍼링 | parallel tempering | 여러 온도의 사슬을 교환합니다 |
| 최적 스케일링 | optimal scaling | 수용률 의 근거입니다 |
여기서 07단원 확률과정이 끝나고 S6 확률과 통계 전체가 끝납니다.
121강에서 표본공간과 사건을 세우고, 02단원에서 확률을 수직선 위로 옮기고, 03단원에서 분포를 요약하고, 04단원에서 변수 사이의 관계를 다루고, 05단원에서 표본을 늘려 극한을 보고, 06단원에서 방향을 뒤집어 자료로 모수를 맞히고, 07단원에서 시간을 넣어 독립을 버렸습니다.
다음은 관문 4입니다. 121강부터 157강까지를 스스로 점검하고, 통과하면 158강부터 시작하는 S7 데이터 분석의 기초로 넘어갑니다.
그리고 이 과목의 도구가 그때부터 계속 쓰입니다. 149강의 최대우도가 204강 손실함수의 유도로, 150강의 사전분포가 211강 정규화로, 152강의 다중 검정이 212강 모델 선택으로, 157강의 MCMC가 213강과 262강으로 이어집니다.
import numpy as np
rng = np.random.default_rng(20260825)
def act(x, K=200):
x = x - x.mean()
v = float((x * x).mean())
if v <= 0.0:
return float(len(x)) # 사슬이 한 번도 움직이지 않은 경우입니다
s = 0.0
for k in range(1, K):
r = float((x[:-k] * x[k:]).mean()) / v
if r <= 0.05:
break
s += r
return 1 + 2 * s
# --- 문제 1: 정규화 상수를 모르는 분포에서 뽑기 -------------------------
print(" 목표는 x^2 exp(-2x) 에 비례하는 분포입니다. 정규화 상수는 쓰지 않습니다")
gx = (np.arange(1, 400000) + 0.5) * (20.0 / 400000)
dens = gx ** 2 * np.exp(-2 * gx)
w = dens / dens.sum()
cw = np.cumsum(w)
tm = float(np.sum(gx * w))
tv = float(np.sum((gx - tm) ** 2 * w))
print(" 격자로 구한 참 평균 %.6f (이론 1.5), 참 분산 %.6f (이론 0.75)" % (tm, tv))
N1 = 400000
x = 1.0
xs = np.empty(N1)
acc = 0
prop = rng.normal(0, 1.2, N1)
uu = rng.random(N1)
def lp(v):
return -np.inf if v <= 0 else 2 * np.log(v) - 2 * v
lx = lp(x)
for t in range(N1):
y = x + prop[t]
ly = lp(y)
if np.log(uu[t]) < ly - lx:
x, lx = y, ly
acc += 1
xs[t] = x
b = N1 // 10
zz = xs[b:]
print(" 수용률 %.6f, 표본 평균 %.6f, 표본 분산 %.6f" % (acc / N1, float(zz.mean()), float(zz.var())))
print(" 분위수 MCMC 표본 격자 참값 차이")
for q in [0.1, 0.25, 0.5, 0.75, 0.9, 0.99]:
a = float(np.quantile(zz, q))
bq = float(gx[np.searchsorted(cw, q)])
print(" %13.2f %14.6f %14.6f %10.6f" % (q, a, bq, abs(a - bq)))
print(" 수용 판정에 비 pi(y)/pi(x) 만 쓰므로 정규화 상수가 약분됩니다")
print(" 150강에서 계산할 수 없던 사후분포를 이 방법으로 다룰 수 있습니다")
# --- 문제 2: 제안의 폭을 어떻게 정하는가 --------------------------------
print(" 10 차원 표준정규를 목표로 제안 폭을 바꿔 가며 봅니다")
d, N2 = 10, 200000
print(" 제안 폭 수용률 자기상관 시간 유효 표본 크기 비율")
best = None
for s in [0.1, 0.3, 0.75, 1.5, 3.0, 10.0]:
xv = np.zeros(d)
lxv = -0.5 * float(xv @ xv)
keep = np.empty(N2)
a2 = 0
Z = rng.normal(0, s, size=(N2, d))
U = rng.random(N2)
for t in range(N2):
yv = xv + Z[t]
lyv = -0.5 * float(yv @ yv)
if np.log(U[t]) < lyv - lxv:
xv, lxv = yv, lyv
a2 += 1
keep[t] = xv[0]
tau = act(keep[N2 // 10:])
ess = (N2 - N2 // 10) / tau
if best is None or ess > best[1]:
best = (s, ess)
print(" %13.2f %10.6f %16.4f %16.0f %8.4f"
% (s, a2 / N2, tau, ess, ess / (N2 - N2 // 10)))
print(" 가장 좋은 폭은 %.2f 이고 그때 유효 표본이 %.0f 개입니다" % (best[0], best[1]))
print(" 이론이 권하는 폭은 2.38/sqrt(d) = %.4f 이고 수용률 목표는 0.234 입니다"
% (2.38 / np.sqrt(d)))
print(" 폭이 작으면 거의 다 수용되지만 조금씩만 움직여 느립니다")
print(" 폭이 크면 대부분 기각되어 제자리에 머뭅니다. 가운데에 최적이 있습니다")
# --- 문제 3: 조건부분포만 알면 되는가 -----------------------------------
print(" 이변량 정규에서 깁스 샘플링을 돌립니다. 조건부분포만 씁니다")
print(" 140강 문제 4 에서 조건부가 N(rho*y, 1-rho^2) 임을 이미 구했습니다")
N3 = 300000
print(" 상관 rho 표본 상관 x 의 자기상관 시간 유효 표본 이론 rho^2")
for rho in [0.0, 0.5, 0.9, 0.99]:
sd = np.sqrt(1 - rho * rho)
xx = np.zeros(N3)
yy = 0.0
e1 = rng.normal(0, sd, N3)
e2 = rng.normal(0, sd, N3)
xv = 0.0
for t in range(N3):
xv = rho * yy + e1[t]
yy = rho * xv + e2[t]
xx[t] = xv
ta = act(xx[N3 // 10:])
print(" %13.2f %12.6f %20.4f %12.0f %12.6f"
% (rho, rho, ta, (N3 - N3 // 10) / ta, rho * rho))
print(" 깁스는 수용과 기각이 없습니다. 언제나 움직이므로 조율할 것이 없습니다")
print(" 대신 좌표가 강하게 상관되면 지그재그로 기어가며 느려집니다")
print(" 자기상관 시간이 대략 (1+rho^2)/(1-rho^2) 로 커집니다")
for rho in [0.9, 0.99]:
print(" rho = %.2f 에서 이론 %.4f" % (rho, (1 + rho ** 2) / (1 - rho ** 2)))
# --- 문제 4: 언제 믿을 수 있는가 ----------------------------------------
print(" 봉우리 두 개인 목표에서 짧은 사슬이 무엇을 놓치는지 봅니다")
print(" 목표는 0.5 N(-4,1) + 0.5 N(4,1) 이고 참 평균은 0 입니다")
def lp2(v):
return np.logaddexp(-0.5 * (v + 4) ** 2, -0.5 * (v - 4) ** 2)
def run_mh(x0, n, s):
x = x0
lx = lp2(x)
out = np.empty(n)
Zp = rng.normal(0, s, n)
Up = rng.random(n)
for t in range(n):
y = x + Zp[t]
ly = lp2(y)
if np.log(Up[t]) < ly - lx:
x, lx = y, ly
out[t] = x
return out
def rhat(ch):
m, n = ch.shape
W = float(np.mean(ch.var(axis=1, ddof=1)))
B = n * float(ch.mean(axis=1).var(ddof=1))
V = (n - 1) / n * W + B / n
return float(np.sqrt(V / W))
print(" 제안 폭 사슬 길이 사슬별 평균 R-hat 전체 평균")
for s, n in [(0.5, 20000), (0.5, 200000), (3.0, 20000), (3.0, 200000)]:
ch = np.array([run_mh(x0, n, s) for x0 in [-4.0, -4.0, 4.0, 4.0]])
ch = ch[:, n // 2:]
mm = ch.mean(axis=1)
print(" %13.1f %10d (%7.3f %7.3f %7.3f %7.3f) %10.4f %10.4f"
% (s, n, mm[0], mm[1], mm[2], mm[3], rhat(ch), float(ch.mean())))
print(" 제안 폭이 0.5 이면 봉우리를 못 넘어 사슬마다 다른 답을 냅니다")
print(" 한 사슬만 보면 완벽하게 수렴한 것처럼 보입니다. 이것이 가장 위험한 실패입니다")
print(" R-hat 이 1 에서 멀면 사슬들이 아직 같은 곳을 보고 있지 않다는 뜻입니다")
# --- 문제 5: 더 나은 제안을 만들 수 있는가 ------------------------------
print(" 기울기를 쓰는 랑주뱅 제안과 무작위 걸음 제안을 견줍니다")
d5, N5 = 50, 60000
sc = np.linspace(1.0, 3.0, d5)
def lp5(v):
return -0.5 * float(np.sum((v / sc) ** 2))
def gr5(v):
return -v / (sc ** 2)
res = {}
for name in ["무작위 걸음", "랑주뱅"]:
xv = np.zeros(d5)
lxv = lp5(xv)
keep = np.empty(N5)
a5 = 0
st = 2.38 / np.sqrt(d5) if name == "무작위 걸음" else 0.45
U = rng.random(N5)
for t in range(N5):
if name == "무작위 걸음":
yv = xv + st * rng.normal(0, 1, d5)
lyv = lp5(yv)
log_r = lyv - lxv
else:
g = gr5(xv)
yv = xv + 0.5 * st * st * g + st * rng.normal(0, 1, d5)
gy = gr5(yv)
lyv = lp5(yv)
fwd = -np.sum((yv - xv - 0.5 * st * st * g) ** 2) / (2 * st * st)
bwd = -np.sum((xv - yv - 0.5 * st * st * gy) ** 2) / (2 * st * st)
log_r = lyv - lxv + bwd - fwd
if np.log(U[t]) < log_r:
xv, lxv = yv, lyv
a5 += 1
keep[t] = xv[d5 - 1]
tau = act(keep[N5 // 5:])
ess = (N5 - N5 // 5) / tau
res[name] = ess
print(" %-12s 걸음 %.4f, 수용률 %.4f, 자기상관 시간 %.2f, 유효 표본 %.0f"
% (name, st, a5 / N5, tau, ess))
print(" 랑주뱅이 무작위 걸음의 %.2f 배입니다" % (res["랑주뱅"] / res["무작위 걸음"]))
print(" 기울기가 밀도가 높은 쪽을 가리키므로 제안이 헛되지 않습니다")
print(" 156강 심화 6 의 랑주뱅 확산을 이산화하고 수용 판정을 붙인 것입니다")
print(" 기울기를 쓸 수 있으면 언제나 쓰는 것이 낫습니다. 261강 확산모형과 같은 재료입니다")
# 목표는 x^2 exp(-2x) 에 비례하는 분포입니다. 정규화 상수는 쓰지 않습니다
# 격자로 구한 참 평균 1.500000 (이론 1.5), 참 분산 0.750000 (이론 0.75)
# 수용률 0.569623, 표본 평균 1.501602, 표본 분산 0.749955
# 분위수 MCMC 표본 격자 참값 차이
# 0.10 0.552855 0.551025 0.001830
# 0.25 0.863416 0.863625 0.000209
# 0.50 1.339376 1.337025 0.002351
# 0.75 1.965298 1.960225 0.005073
# 0.90 2.658930 2.661175 0.002245
# 0.99 4.218082 4.202975 0.015107
# 수용 판정에 비 pi(y)/pi(x) 만 쓰므로 정규화 상수가 약분됩니다
# 150강에서 계산할 수 없던 사후분포를 이 방법으로 다룰 수 있습니다
# 10 차원 표준정규를 목표로 제안 폭을 바꿔 가며 봅니다
# 제안 폭 수용률 자기상관 시간 유효 표본 크기 비율
# 0.10 0.877295 266.1078 676 0.0038
# 0.30 0.645420 68.1503 2641 0.0147
# 0.75 0.263670 29.3207 6139 0.0341
# 1.50 0.040105 78.1395 2304 0.0128
# 3.00 0.000285 368.8844 488 0.0027
# 10.00 0.000000 180000.0000 1 0.0000
# 가장 좋은 폭은 0.75 이고 그때 유효 표본이 6139 개입니다
# 이론이 권하는 폭은 2.38/sqrt(d) = 0.7526 이고 수용률 목표는 0.234 입니다
# 폭이 작으면 거의 다 수용되지만 조금씩만 움직여 느립니다
# 폭이 크면 대부분 기각되어 제자리에 머뭅니다. 가운데에 최적이 있습니다
# 이변량 정규에서 깁스 샘플링을 돌립니다. 조건부분포만 씁니다
# 140강 문제 4 에서 조건부가 N(rho*y, 1-rho^2) 임을 이미 구했습니다
# 상관 rho 표본 상관 x 의 자기상관 시간 유효 표본 이론 rho^2
# 0.00 0.000000 1.0000 270000 0.000000
# 0.50 0.500000 1.6237 166288 0.250000
# 0.90 0.900000 8.9506 30166 0.810000
# 0.99 0.990000 95.1648 2837 0.980100
# 깁스는 수용과 기각이 없습니다. 언제나 움직이므로 조율할 것이 없습니다
# 대신 좌표가 강하게 상관되면 지그재그로 기어가며 느려집니다
# 자기상관 시간이 대략 (1+rho^2)/(1-rho^2) 로 커집니다
# rho = 0.90 에서 이론 9.5263
# rho = 0.99 에서 이론 99.5025
# 봉우리 두 개인 목표에서 짧은 사슬이 무엇을 놓치는지 봅니다
# 목표는 0.5 N(-4,1) + 0.5 N(4,1) 이고 참 평균은 0 입니다
# 제안 폭 사슬 길이 사슬별 평균 R-hat 전체 평균
# 0.5 20000 ( -2.544 -0.646 -3.978 3.946) 1.6273 -0.8056
# 0.5 200000 ( 3.695 -0.188 1.788 -0.525) 1.1411 1.1927
# 3.0 20000 ( 0.301 -0.289 -0.282 -0.462) 1.0032 -0.1829
# 3.0 200000 ( -0.035 -0.224 -0.062 0.039) 1.0004 -0.0703
# 제안 폭이 0.5 이면 봉우리를 못 넘어 사슬마다 다른 답을 냅니다
# 한 사슬만 보면 완벽하게 수렴한 것처럼 보입니다. 이것이 가장 위험한 실패입니다
# R-hat 이 1 에서 멀면 사슬들이 아직 같은 곳을 보고 있지 않다는 뜻입니다
# 기울기를 쓰는 랑주뱅 제안과 무작위 걸음 제안을 견줍니다
# 무작위 걸음 걸음 0.3366, 수용률 0.4954, 자기상관 시간 302.62, 유효 표본 159
# 랑주뱅 걸음 0.4500, 수용률 0.9792, 자기상관 시간 141.79, 유효 표본 339
# 랑주뱅이 무작위 걸음의 2.13 배입니다
# 기울기가 밀도가 높은 쪽을 가리키므로 제안이 헛되지 않습니다
# 156강 심화 6 의 랑주뱅 확산을 이산화하고 수용 판정을 붙인 것입니다
# 기울기를 쓸 수 있으면 언제나 쓰는 것이 낫습니다. 261강 확산모형과 같은 재료입니다