149강의 최대우도추정은 자료만 봅니다. 동전을 세 번 던져 세 번 다 앞면이 나오면 이라고 답합니다.
그런데 우리는 그 답을 믿지 않습니다. 동전이 대체로 공정하다는 것을 알고 있기 때문입니다. 그 지식을 계산에 넣을 방법이 필요합니다.
125강의 베이즈 정리입니다. 그때는 사건에 썼지만 여기서는 모수에 씁니다. 모수를 확률변수로 보는 순간 사전 지식을 분포로 적을 수 있습니다.
149강의 목적함수에 한 항이 더 붙었을 뿐입니다. 그리고 그 한 항이 놀라운 것을 설명합니다.
| 사전분포 | 더해지는 항 | 이름 |
|---|---|---|
| 정규 | -\lambda\lVert\boldsymbol\beta\rVert^ | 릿지 |
| 라플라스 | -\lambda\lVert\boldsymbol\beta\rVert_ | 라소 |
| 균등 | 최대우도 |
116강에서 손으로 붙였던 정규화 항의 정체가 사전분포입니다. 왜 하필 제곱합인지, 왜 절댓값이 계수를 으로 만드는지가 이 강의에서 밝혀집니다.
문제. 동전을 번 던져 번 앞면이 나왔습니다.
(1) 세 가지 사전분포로 사후분포를 구하세요.
(2) 최대사후추정값과 사후평균을 공식과 견주세요.
(3) 자료를 늘리면 사전의 영향이 어떻게 되는지 보세요.
생각의 실마리. 베르누이 우도가 입니다. 사전분포도 같은 꼴로 잡으면 곱이 다시 같은 꼴이 됩니다.
풀이. (1)(2) 검산 결과입니다.
| 사전 | 격자 MAP | 공식 MAP | 격자 사후평균 | 공식 사후평균 |
|---|---|---|---|---|
**최대우도추정값이 **입니다. 균등 사전인 에서 MAP가 정확히 그 값이며, 사전이 평평하면 최대사후추정이 최대우도추정과 같습니다.
은 추정값을 에서 으로 끌어갑니다. 이 사전은 평균이 이므로 "앞면이 잘 나온다"고 강하게 믿는 것입니다.
(3) 자료를 늘려 봅니다. 참 입니다.
| MAP | MAP | 최대우도 | 사전의 몫 | |
|---|---|---|---|---|
| 10^ |
**마지막 열이 **입니다. 잘못된 사전이 에서는 결과를 지배하지만 에서는 의 몫만 갖습니다.
이 문제에서 배우는 것: 사후분포.
베이즈 갱신. 사후는 우도와 사전의 곱에 비례합니다.
분모 는 와 무관한 정규화 상수이므로 최대점을 찾을 때는 무시할 수 있습니다.
베타-이항 켤레. 사전이 이면 사후가 입니다.
| 요약값 | 식 |
|---|---|
| MAP | |
| 사후평균 | |
| 사전의 유효 표본 크기 |
셋째 줄이 핵심 해석입니다. 는 앞면 번, 뒷면 번을 미리 본 것과 같습니다. 이면 관측 개의 무게를 갖습니다.
MAP와 사후평균이 다릅니다. MAP는 과 을 더하고 사후평균은 와 를 더합니다. 사후분포가 치우쳐 있으면 봉우리와 무게중심이 다르기 때문입니다.
바로 확인 1.
확인 1-1. 사후분포가 무엇에 비례하는지 쓰세요.
답. 우도와 사전분포의 곱입니다.
확인 1-2. 베타-이항 켤레에서 사후분포를 쓰세요.
답. 입니다.
확인 1-3. 의 유효 표본 크기를 쓰세요.
답. 입니다.
문제. 정규 사전과 정규 우도를 결합합니다.
(1) 사후평균을 격자로 구해 공식과 견주세요.
(2) 사후표준편차도 확인하세요.
(3) 이 커질 때 무엇이 일어나는지 쓰세요.
생각의 실마리. 두 정규의 지수는 모두 이차식입니다. 이차식을 더하면 다시 이차식이므로 사후도 정규가 됩니다.
풀이. (1)(2)(3) , , , 입니다.
| 격자 사후평균 | 공식 사후평균 | 격자 사후표준편차 | 공식 | |
|---|---|---|---|---|
사후평균이 에서 쪽으로 옮겨 갑니다. 에서 사전 쪽 이고 에서 표본평균 에 거의 닿습니다.
이 문제에서 배우는 것: 켤레와 정밀도 가중.
정규-정규 켤레. 사전 과 우도 의 표본 개이면
정밀도가 더해집니다. 분산의 역수를 정밀도라 하며, 사전의 정밀도와 자료의 정밀도가 그냥 합쳐집니다.
사후평균은 정밀도로 가중한 평균입니다. 더 정확한 쪽에 더 큰 무게가 갑니다.
| 켤레쌍 | 우도 | 사전 | 사후 |
|---|---|---|---|
| 베타-이항 | 베르누이 | \text | \text |
| 정규-정규 | 정규(평균) | 정규 | 정규 |
| 감마-포아송 | 포아송 | 감마 | 감마 |
| 감마-지수 | 지수 | 감마 | 감마 |
| 역감마-정규 | 정규(분산) | 역감마 | 역감마 |
| 디리클레-다항 | 다항 | 디리클레 | 디리클레 |
켤레가 있으면 적분을 하지 않아도 됩니다. 사후분포의 정규화 상수를 알고 있으므로 평균과 구간을 공식으로 씁니다.
켤레가 없으면 어떻게 하는가. 격자로 계산하거나 157강의 MCMC로 표본을 뽑거나 262강의 변분추론으로 근사합니다.
차원이 낮으면 격자가 가장 정확합니다. 이 강의의 검산이 전부 격자이며, 147강 문제 1에서 본 대로 낮은 차원에서는 격자가 몬테카를로를 압도합니다.
여섯째 줄이 언어모형과 만납니다. 디리클레-다항 켤레가 단어 빈도 평활화의 근거이며, 더하기 평활화가 사전의 사후평균입니다.
바로 확인 2.
확인 2-1. 정규-정규에서 사후 정밀도를 쓰세요.
답. 입니다.
확인 2-2. 사후평균의 해석을 쓰세요.
답. 사전평균과 표본평균을 정밀도로 가중한 평균입니다.
확인 2-3. 켤레사전분포의 이점을 쓰세요.
답. 사후분포가 같은 족에 남아 공식으로 쓸 수 있습니다.
문제. 선형회귀에서 계수에 사전분포를 놓습니다.
(1) 정규 사전의 MAP를 격자로 찾아 릿지 해와 견주세요.
(2) 사전의 폭을 바꿔 가며 확인하세요.
(3) 라플라스 사전이면 무엇이 되는지 보세요.
생각의 실마리. 로그를 취하면 곱이 합이 됩니다. 정규 사전의 로그가 계수의 제곱합이고 라플라스 사전의 로그가 절댓값의 합입니다.
풀이. (1)(2) , 입니다.
| \lambda=\sigma^{2}/\tau^ | MAP 해 | 릿지 해 | 최대 차이 | |
|---|---|---|---|---|
| 9.5\times10^ | ||||
| 4.76\times10^ | ||||
| 2.37\times10^ | ||||
| 3.84\times10^ |
차이가 격자 간격 안쪽입니다. 참값이 인데 사전이 좁아질수록 계수가 쪽으로 줄어듭니다.
(3) 직교 설계에서 라플라스 사전을 확인합니다.
| 격자 MAP | 연성 문턱값 공식 | ||
|---|---|---|---|
**셋째 줄과 다섯째 줄이 정확히 **입니다. 이면 계수가 완전히 사라집니다.
이 문제에서 배우는 것: 정규화의 베이즈 해석.
최대사후추정. 로그를 취하면 목적함수가 둘로 나뉩니다.
| 사전분포 | 벌점 | 결과 | |
|---|---|---|---|
| 릿지, 계수를 줄입니다 | |||
| 라플라스 | 라소, 계수를 으로 만듭니다 | ||
| 균등 | 상수 | 없습니다 | 최대우도 |
| 스파이크-슬랩 | 혼합 | 에 가깝습니다 | 변수 선택 |
****이므로 사전을 좁게 믿을수록 벌점이 강해집니다. 정규화 강도를 고르는 일이 사전 지식의 세기를 정하는 일입니다.
왜 은 정확히 을 만드는가. 절댓값은 에서 뾰족합니다. 그 꺾인 점이 최적해를 붙잡아 둡니다.
연성 문턱값 연산자이며, 라플라스 밀도가 에서 미분되지 않는다는 사실이 그대로 나타난 것입니다. 정규 사전은 에서 매끄러워 계수를 줄이기만 하고 없애지는 못합니다.
148강 심화 4의 스타인 추정량이 여기서 설명됩니다. 계수를 원점으로 줄이는 것이 이득인 이유가 암묵적으로 근처라는 사전을 쓰고 있기 때문입니다.
바로 확인 3.
확인 3-1. 최대사후추정의 목적함수를 쓰세요.
답. 로그 우도와 로그 사전의 합입니다.
확인 3-2. 정규 사전과 라플라스 사전이 주는 벌점을 쓰세요.
답. 와 입니다.
확인 3-3. 릿지의 정규화 강도를 사전분포로 쓰세요.
답. 입니다.
문제. 참 인데 을 믿습니다.
(1) 에 따른 사후평균과 편향을 재세요.
(2) 유효 표본 크기로 그 값을 예측하세요.
(3) 무정보 사전 세 가지를 견주세요.
생각의 실마리. 사전이 틀리면 결과도 틀립니다. 문제는 얼마나 오래 틀린 채로 남느냐입니다.
풀이. (1)(2) 사전평균이 입니다.
| 사후평균 수치 | 유효표본 의 예측식 | 최대우도 | 편향 | |
|---|---|---|---|---|
예측식 과 정확히 같습니다. 사전이 관측 개의 무게를 갖는다는 해석이 수치로 확인됩니다.
편향이 에서 로 줄어듭니다. 잘못된 사전도 자료가 충분하면 씻겨 나갑니다.
(3) 무정보 사전을 견줍니다. , 입니다.
| 사전 | MAP | 사후평균 | 사후중앙값 |
|---|---|---|---|
| 균등 | |||
| 제프리스 | |||
| 하다니 |
**최대우도추정값이 **인데 세 사전이 부터 까지 흩어집니다.
이 문제에서 배우는 것: 사전은 공짜가 아닙니다.
사전의 영향력은 유효 표본 크기로 잽니다. 자료가 그보다 훨씬 많으면 무시할 수 있고 비슷하면 결과를 지배합니다.
| 사전 | 밀도 | 성격 |
|---|---|---|
| 균등 | 모수공간에서 평평합니다 | |
| 제프리스 | 재모수화에 불변입니다 | |
| 하다니 | 비고유이며 척도에서 평평합니다 | |
| 약한 정보 | 극단값을 살짝 눌러 줍니다 |
둘째 줄이 이론적으로 매력적입니다. 제프리스 사전은 로 정의되며, 어떤 좌표로 재모수화해도 같은 사전이 됩니다. 148강의 피셔 정보가 여기서 사전을 만듭니다.
"평평하면 무정보"가 아닙니다. 에서 평평한 사전은 에서 평평하지 않으며, 어느 좌표에서 평평할지를 고르는 일 자체가 정보입니다.
비고유 사전에 주의합니다. 하다니 사전은 적분이 발산해 확률분포가 아니며, 자료에 따라 사후분포도 정의되지 않을 수 있습니다.
이면 하다니 사후가 존재하지 않습니다. 실무에서는 약한 정보 사전을 쓰는 것이 안전하며, 나 이 무난합니다.
바로 확인 4.
확인 4-1. 사전의 영향력을 재는 양을 쓰세요.
답. 유효 표본 크기 입니다.
확인 4-2. 제프리스 사전의 정의와 성질을 쓰세요.
답. 이며 재모수화에 불변입니다.
확인 4-3. 비고유 사전의 위험을 쓰세요.
답. 사후분포가 정의되지 않을 수 있습니다.
문제. 사후분포 을 조사합니다.
(1) 의 MAP와 로짓의 MAP를 각각 구하세요.
(2) 사후평균, 사후중앙값과 견주세요.
(3) 신용구간을 두 방식으로 구하세요.
생각의 실마리. 149강에서 최대우도추정은 불변이었습니다. 최대사후추정도 그렇겠습니까.
풀이. (1)(2) 검산 결과입니다.
| 요약값 | 값 | 공식 |
|---|---|---|
| 자체의 MAP | ||
| 로짓의 MAP를 되돌린 값 | ||
| 사후평균 | ||
| 사후중앙값 |
두 MAP가 다릅니다. 로 재면 이고 로 재서 되돌리면 입니다.
이유가 139강의 야코비입니다. 변수변환을 하면 밀도에 가 곱해지고, 그 인자가 봉우리 위치를 옮깁니다. 평균과 적분은 영향을 받지 않지만 최댓값은 받습니다.
(3) 구간입니다.
| 구간 | 범위 | 폭 |
|---|---|---|
| 동일꼬리 신용구간 | ||
| 최고사후밀도 구간 |
최고사후밀도 구간이 더 좁습니다. 사후분포가 오른쪽으로 치우쳐 있어 왼쪽을 더 가져오는 것이 이득입니다.
이 문제에서 배우는 것: 사후분포 전체가 답입니다.
최대사후추정은 재모수화에 불변이 아닙니다. 149강의 최대우도추정과 결정적으로 다른 점입니다.
| 요약값 | 단조변환에 불변인가 |
|---|---|
| MAP | 아닙니다 |
| 사후평균 | 아닙니다 |
| 사후중앙값 | 그렇습니다 |
| 신용구간의 끝점 | 그렇습니다 |
셋째와 넷째 줄이 분위수의 성질입니다. 단조함수는 순서를 보존하므로 분위수가 그대로 옮겨 갑니다.
신용구간과 신뢰구간은 다릅니다.
| 구분 | 신용구간 | 신뢰구간 |
|---|---|---|
| 무엇이 확률변수인가 | 모수 | 구간 |
| 읽는 법 | 가 이 구간에 있을 확률이 | 반복하면 가 참값을 덮습니다 |
| 사전이 필요한가 | 필요합니다 | 필요 없습니다 |
| 계산 | 사후분포의 분위수 | 표본분포의 분위수 |
둘째 줄의 차이가 크게 오해됩니다. 신뢰구간을 "참값이 여기 있을 확률 "로 읽는 것은 빈도주의 안에서는 틀린 문장이며, 그 해석을 원하면 신용구간을 써야 합니다. 151강에서 이 구분을 정면으로 다룹니다.
점추정 하나를 보고하는 것이 정보를 버리는 일입니다. 사후분포는 불확실성 전체를 담고 있으며, MAP만 뽑으면 그 대부분을 버립니다. 특히 사후분포가 다봉이거나 넓으면 점추정이 오해를 부릅니다.
바로 확인 5.
확인 5-1. MAP가 재모수화에 불변인지 쓰세요.
답. 아니며 야코비가 봉우리를 옮깁니다.
확인 5-2. 단조변환에 불변인 요약값을 쓰세요.
답. 사후중앙값과 분위수입니다.
확인 5-3. 신용구간과 신뢰구간의 차이를 쓰세요.
답. 신용구간은 모수를, 신뢰구간은 구간을 확률변수로 봅니다.
| 개념 | 식 |
|---|---|
| 베이즈 갱신 | |
| 최대사후추정 | |
| 베타-이항 | 사후 |
| 베타 MAP | |
| 베타 사후평균 | |
| 정규-정규 정밀도 | 1/\tau^{2}+n/\sigma^ |
| 정규-정규 평균 | 정밀도 가중평균 |
| 릿지의 사전 | , \lambda=\sigma^{2}/\tau^ |
| 라소의 사전 | 라플라스 |
| 연성 문턱값 | |
| 제프리스 사전 | p(\theta)\propto\sqrt |
| 켤레쌍 | 우도 | 사전 |
|---|---|---|
| 베타-이항 | 베르누이 | \text |
| 정규-정규 | 정규 평균 | 정규 |
| 감마-포아송 | 포아송 | 감마 |
| 역감마-정규 | 정규 분산 | 역감마 |
| 디리클레-다항 | 다항 | 디리클레 |
| 요약값 | 단조변환 불변 |
|---|---|
| MAP | 아닙니다 |
| 사후평균 | 아닙니다 |
| 사후중앙값 | 그렇습니다 |
| 신용구간 끝점 | 그렇습니다 |
| 자주 하는 실수 | 바로잡기 |
|---|---|
| 사전을 아무렇게나 고릅니다 | 유효 표본 크기를 확인합니다 |
| "평평하면 무정보"라 봅니다 | 좌표를 바꾸면 평평하지 않습니다 |
| 비고유 사전을 그냥 씁니다 | 사후가 없을 수 있습니다 |
| MAP가 불변이라 봅니다 | 야코비가 봉우리를 옮깁니다 |
| 신뢰구간을 확률로 읽습니다 | 그 해석은 신용구간의 것입니다 |
| 점추정만 보고합니다 | 사후분포 전체가 답입니다 |
문제 6. 베이즈 갱신 식을 쓰세요.
답. 사후는 우도와 사전의 곱에 비례합니다.
문제 7. 최대사후추정의 목적함수를 쓰세요.
답. 로그 우도와 로그 사전의 합을 최대화합니다.
문제 8. 베타-이항 켤레의 사후분포와 두 요약값을 쓰세요.
답. 이며 MAP가 , 사후평균이 입니다.
문제 9. 의 유효 표본 크기와 그 해석을 쓰세요.
답. 이며 앞면 번 뒷면 번을 미리 본 것과 같습니다.
문제 10. 균등 사전에서 MAP가 무엇이 되는지 쓰세요.
답. 최대우도추정값과 같아집니다.
문제 11. 정규-정규 켤레의 사후 정밀도와 평균을 쓰세요.
답. 이며 평균은 정밀도 가중평균입니다.
문제 12. 릿지에 대응하는 사전과 정규화 강도를 쓰세요.
답. 이며 입니다.
문제 13. 라소에 대응하는 사전과 그 결과를 쓰세요.
답. 라플라스이며 계수를 정확히 으로 만듭니다.
문제 14. 연성 문턱값 공식을 쓰세요.
답. 입니다.
문제 15. 잘못된 사전의 편향이 에 따라 어떻게 되는지 쓰세요.
답. 이 커지면 씻겨 나가며 검산에서 에서 로 줄었습니다.
문제 16. 제프리스 사전의 정의와 장점을 쓰세요.
답. 이며 재모수화에 불변입니다.
문제 17. MAP가 재모수화에 불변이 아닌 이유를 쓰세요.
답. 변수변환의 야코비가 밀도에 곱해져 봉우리를 옮기기 때문입니다.
문제 18. 신용구간과 신뢰구간의 차이를 쓰세요.
답. 신용구간은 모수를 확률변수로 보고 신뢰구간은 구간을 확률변수로 봅니다.
심화 1. 지수족과 켤레사전분포의 구조를 정리하세요.
켤레가 우연히 생기는 것이 아닙니다.
지수족. 밀도를 다음 꼴로 쓸 수 있는 족입니다.
가 충분통계량이며, 148강 문제 5의 인수분해 정리가 여기서 자동으로 성립합니다.
| 분포 | 자연모수 | 충분통계량 |
|---|---|---|
| 베르누이 | \log\frac{p} | |
| 포아송 | ||
| 정규(평균) | \mu/\sigma^ | |
| 지수 | ||
| 감마 |
지수족에는 언제나 켤레사전분포가 있습니다. 사전을 꼴로 잡으면 곱이 같은 꼴로 남으며, 가 유효 표본 크기이고 가 가상 관측의 충분통계량입니다.
가 로그 분배함수이며 미분하면 적률이 나옵니다. 이고 이며, 134강의 누율생성함수와 같은 구조입니다.
심화 2. 사전분포를 실제로 어떻게 고르는지 정리하세요.
| 방법 | 내용 | 주의 |
|---|---|---|
| 전문가 지식 | 도출한 값을 분포로 적습니다 | 과신하기 쉽습니다 |
| 과거 자료 | 이전 연구의 사후를 사전으로 | 모집단이 같아야 합니다 |
| 약한 정보 | 극단값만 배제 | 실무의 기본값입니다 |
| 무정보 | 제프리스, 기준사전 | 고차원에서 문제가 생깁니다 |
| 경험적 베이즈 | 자료로 사전을 추정 | 불확실성을 과소평가합니다 |
| 계층모형 | 사전에 다시 사전을 | 정보를 빌려 씁니다 |
다섯째 줄이 148강 심화 4의 스타인 추정량과 이어집니다. 여러 집단의 평균을 함께 추정할 때 자료로 사전의 분산을 추정하면 자동으로 축소가 일어나며, 그것이 스타인 추정량과 거의 같습니다.
여섯째 줄이 실무에서 강력합니다. 병원별 수술 성공률처럼 집단마다 표본이 적을 때, 각 집단이 다른 집단의 정보를 빌려 씁니다. 표본이 적은 집단일수록 전체 평균 쪽으로 더 많이 당겨집니다.
넷째 줄이 고차원에서 무너집니다. 각 좌표에 평평한 사전을 놓으면 고차원에서 그 결합사전이 전혀 평평하지 않으며, 146강 심화 5의 측도 집중이 그 이유입니다.
심화 3. 최대사후추정과 완전한 베이즈 추론의 차이를 정리하세요.
MAP는 사후분포의 한 점일 뿐입니다.
| 방법 | 답 | 계산 비용 |
|---|---|---|
| 최대사후추정 | 점 하나 | 최적화 한 번 |
| 라플라스 근사 | 정규 근사 | 최적화 + 헤세 |
| 변분추론 | 근사 분포 | 최적화 반복 |
| MCMC | 표본 집합 | 비쌉니다 |
| 정확한 사후 | 닫힌 식 | 켤레일 때만 |
둘째 줄이 값싸고 유용합니다. MAP 주변에서 로그 사후를 이차 근사하면 이 되며, 140강 심화의 라플라스 근사가 이것입니다.
MAP의 함정이 고차원에서 커집니다. 사후분포의 질량이 봉우리에 있지 않고 얇은 껍질에 있으므로, 최빈값이 전형적인 값이 아닙니다. 146강 심화 5의 측도 집중이 여기서도 나타납니다.
예측에서도 차이가 납니다. MAP 하나로 예측하면 모수의 불확실성이 사라지지만, 사후분포 전체로 평균하면 예측 구간이 정직하게 넓어집니다.
심화 4. 빈도주의와 베이즈의 관계를 정리하세요.
| 항목 | 빈도주의 | 베이즈 |
|---|---|---|
| 모수 | 고정된 미지수 | 확률변수 |
| 확률의 뜻 | 반복 실험의 빈도 | 믿음의 정도 |
| 구간 | 신뢰구간 | 신용구간 |
| 사전 | 없습니다 | 필요합니다 |
| 큰 표본 | 두 결과가 가까워집니다 | 두 결과가 가까워집니다 |
다섯째 줄이 실무의 화해점입니다. 베른슈타인-폰 미제스 정리에 따르면 정규 조건 아래에서 사후분포가 으로 수렴하며, 사전의 영향이 사라집니다.
그러므로 큰 표본에서는 신용구간과 신뢰구간이 거의 같습니다. 차이가 나는 것은 표본이 적을 때, 모수가 많을 때, 사전이 강할 때입니다.
작은 표본에서 베이즈가 유리한 자리가 있습니다. 149강 심화 5의 완전 분리에서 최대우도추정이 발산했는데, 약한 사전을 넣으면 유한한 답이 나옵니다.
반대로 사전이 결과를 좌우하면 위험합니다. 문제 4에서 본 대로 이 유효 표본 크기와 비슷하면 결론이 사전에 달려 있으며, 민감도 분석이 필수입니다.
심화 5. 사전분포를 잘못 써서 생기는 문제를 정리하세요.
| 문제 | 증상 | 대처 |
|---|---|---|
| 과도한 확신 | 자료를 무시합니다 | 유효 표본 크기 확인 |
| 비고유 사전 | 사후가 정의되지 않습니다 | 약한 정보 사전 |
| 좌표 의존 | 재모수화하면 답이 바뀝니다 | 제프리스 사전 |
| 경계 배제 | 참값에 사전 확률 | 지지구간을 넓게 |
| 사전과 자료의 충돌 | 사후가 둘 사이 어디에도 없음 | 모형을 의심합니다 |
| 사전을 자료로 고름 | 같은 자료를 두 번 씁니다 | 계층모형을 씁니다 |
넷째 줄이 치명적입니다. 사전이 을 준 곳은 사후도 이므로, 아무리 자료가 말해도 그 값은 나올 수 없습니다. 지지구간을 좁게 잡는 것이 가장 강한 사전입니다.
다섯째 줄이 좋은 진단입니다. 사전예측분포가 실제 자료와 크게 어긋나면 사전이나 모형이 잘못된 것이며, 자료를 보기 전에 사전예측을 뽑아 보는 것이 표준 절차입니다.
여섯째 줄이 조용히 낙관을 낳습니다. 자료로 사전을 정하고 같은 자료로 추론하면 불확실성이 과소평가되며, 146강 문제 4의 다중 비교와 같은 종류의 문제입니다.
심화 6. 기계학습에서 베이즈가 쓰이는 자리를 정리하세요.
| 자리 | 무엇이 사전인가 | 관련 강의 |
|---|---|---|
| 가중치 감쇠 | 가중치의 정규 사전 | 211강 |
| 라소와 희소성 | 라플라스 사전 | 211강 |
| 드롭아웃 | 근사 베이즈 추론 | 245강 |
| 가우스 과정 | 함수 공간의 사전 | 213강 |
| 나이브 베이즈 | 라플라스 평활화 | 204강 |
| 베이즈 최적화 | 대리모형의 사후 | 216강 |
| 톰슨 표집 | 사후에서 뽑아 행동 선택 | 278강 |
| 변분자동부호기 | 잠재변수의 사전 | 262강 |
| 확산모형 | 잡음 수준의 사전 | 261강 |
첫째 줄이 가장 널리 쓰입니다. 딥러닝의 가중치 감쇠가 정규 사전의 최대사후추정이며, 손으로 붙인 하이퍼파라미터가 사실은 믿음의 세기입니다.
넷째 줄이 함수에 사전을 놓습니다. 모수가 아니라 함수 자체에 분포를 주는 것이며, 140강의 다변량 정규를 무한 차원으로 확장한 것입니다.
일곱째 줄이 우아합니다. 밴딧에서 각 팔의 사후분포에서 한 번 뽑아 가장 큰 것을 고르면, 탐색과 활용이 자동으로 균형을 잡습니다. 146강 심화 6의 UCB와 다른 접근인데 성능이 비슷하거나 낫습니다.
다섯째 줄이 문제 4와 직결됩니다. 단어 빈도가 인 항목에 확률 을 주면 곱이 전부 이 되므로, 사전을 넣어 더하기 평활화를 합니다.
정답.
| 기호 | 읽는 법 | 뜻 |
|---|---|---|
| 사전분포 | 자료를 보기 전의 믿음입니다 | |
| 사후분포 | 자료를 본 뒤의 믿음입니다 | |
| MAP | maximum a posteriori | 사후분포의 최빈값입니다 |
| 켤레사전분포 | conjugate prior | 사후가 같은 족에 남습니다 |
| 유효 표본 크기 | effective sample size | 사전이 갖는 관측의 무게입니다 |
| 정밀도 | precision | 분산의 역수입니다 |
| 제프리스 사전 | Jeffreys prior | 에 비례합니다 |
| 비고유 사전 | improper prior | 적분이 발산합니다 |
| 신용구간 | credible interval | 모수에 대한 확률 구간입니다 |
| 최고사후밀도 | highest posterior density | 가장 좁은 신용구간입니다 |
| 연성 문턱값 | soft thresholding | 라소의 해입니다 |
| 지수족 | exponential family | 켤레가 존재하는 족입니다 |
| 경험적 베이즈 | empirical Bayes | 자료로 사전을 추정합니다 |
| 계층모형 | hierarchical model | 사전에 다시 사전을 놓습니다 |
| 베른슈타인-폰 미제스 | Bernstein-von Mises | 사후가 정규로 수렴합니다 |
다음은 151강 신뢰구간입니다. 이 강의가 신용구간을 만들었고, 151강이 사전분포 없이 같은 일을 하는 방법을 다룹니다.
145강의 분포가 그대로 쓰입니다. 그리고 143강의 델타 방법과 147강의 부트스트랩이 정규성도 켤레도 없는 상황을 메웁니다.
문제 5에서 미뤄 둔 해석의 차이를 151강이 정면으로 다룹니다. "참값이 이 구간에 있을 확률 "라는 문장이 왜 빈도주의에서 틀린지, 그럼에도 왜 실무에서 그렇게 읽히는지를 밝힙니다.
import numpy as np
rng = np.random.default_rng(20260818)
gp = (np.arange(1, 200000) / 200000.0) # 0 과 1 사이 격자입니다
def post_beta(a, b, t, n):
lg = (a + t - 1) * np.log(gp) + (b + n - t - 1) * np.log(1 - gp)
w = np.exp(lg - lg.max())
w = w / w.sum()
m = float(np.sum(gp * w))
c = np.cumsum(w)
return float(gp[np.argmax(w)]), m, float(gp[np.searchsorted(c, 0.5)]), w
# --- 문제 1: 사전 지식을 어떻게 넣는가 ----------------------------------
print(" 동전 20 번 중 6 번 앞면입니다. 세 가지 사전분포로 사후분포를 봅니다")
n1, t1 = 20, 6
print(" 사전 Beta(a,b) 격자 MAP 공식 MAP 격자 사후평균 공식 사후평균")
for a, b in [(1, 1), (2, 2), (30, 3)]:
mp, mn, md, _ = post_beta(a, b, t1, n1)
fm = (a + t1 - 1) / (a + b + n1 - 2.0)
fe = (a + t1) / (a + b + n1 + 0.0)
print(" Beta(%2d,%2d) %10.6f %10.6f %13.6f %13.6f" % (a, b, mp, fm, mn, fe))
print(" 최대우도추정값 t/n = %.6f" % (t1 / n1))
print(" 균등 사전이면 MAP 가 최대우도추정값과 정확히 같습니다")
print(" 치우친 사전 Beta(30,3) 은 추정값을 0.3 에서 0.7 쪽으로 크게 끌어갑니다")
print(" 자료를 늘리면 어떻게 되는지 봅니다. 참 p = 0.3 입니다")
print(" n Beta(1,1) MAP Beta(30,3) MAP 최대우도 사전의 몫")
for n in [5, 20, 100, 1000, 10000]:
t = int(round(0.3 * n))
m1 = post_beta(1, 1, t, n)[0]
m2 = post_beta(30, 3, t, n)[0]
print(" %9d %12.6f %14.6f %12.6f %12.6f"
% (n, m1, m2, t / n, 33.0 / (33.0 + n)))
print(" 사전의 몫이 33/(33+n) 입니다. Beta(30,3) 은 표본 33 개와 같은 무게입니다")
# --- 문제 2: 사후분포가 왜 계산되는가 -----------------------------------
print(" 정규 사전과 정규 우도를 결합합니다. 사후도 정규입니다")
sg, tau, mu0 = 2.0, 1.0, 0.0
print(" n xbar 격자 사후평균 공식 사후평균 격자 사후표준편차 공식")
gm = -6.0 + np.arange(1, 240000) * 5e-5
for n in [1, 4, 16, 64, 256]:
xb = 3.0
lg = -(gm - mu0) ** 2 / (2 * tau ** 2) - n * (gm - xb) ** 2 / (2 * sg ** 2)
w = np.exp(lg - lg.max())
w = w / w.sum()
gmean = float(np.sum(gm * w))
gsd = float(np.sqrt(np.sum((gm - gmean) ** 2 * w)))
prec = 1 / tau ** 2 + n / sg ** 2
fmean = (mu0 / tau ** 2 + n * xb / sg ** 2) / prec
print(" %9d %8.4f %14.6f %14.6f %18.6f %10.6f"
% (n, xb, gmean, fmean, gsd, 1 / np.sqrt(prec)))
print(" 사후평균은 사전평균과 표본평균을 정밀도로 가중한 평균입니다")
print(" 정밀도가 더해집니다. 1/tau^2 + n/sigma^2 이며 자료가 늘수록 사전이 묻힙니다")
# --- 문제 3: 사전분포가 정규화 항이 된다 --------------------------------
print(" 선형회귀에서 정규 사전이 무엇이 되는지 봅니다")
nr, pr_ = 40, 3
Xd = rng.normal(0, 1, size=(nr, pr_))
beta_true = np.array([1.5, -0.8, 0.4])
yd = Xd @ beta_true + rng.normal(0, 1.0, nr)
XtX, Xty = Xd.T @ Xd, Xd.T @ yd
print(" tau (사전 표준편차) lambda = sigma^2/tau^2 MAP 해 릿지 해 최대 차이")
for tau2 in [10.0, 1.0, 0.3, 0.1]:
lam = 1.0 / tau2 ** 2
ridge = np.linalg.solve(XtX + lam * np.eye(pr_), Xty)
g = np.linspace(-3, 3, 6001)
bb = ridge.copy()
for _ in range(60):
for j in range(pr_):
cand = np.tile(bb, (len(g), 1))
cand[:, j] = g
obj = -np.sum((yd[:, None] - Xd @ cand.T) ** 2, axis=0) / 2 - lam * np.sum(cand ** 2, axis=1) / 2
bb[j] = g[np.argmax(obj)]
print(" %8.2f %12.6f [%7.4f %7.4f %7.4f] [%7.4f %7.4f %7.4f] %10.6f"
% (tau2, lam, bb[0], bb[1], bb[2], ridge[0], ridge[1], ridge[2],
float(np.max(np.abs(bb - ridge)))))
print(" 격자 탐색으로 찾은 MAP 가 릿지 닫힌 해와 격자 간격 안에서 같습니다")
print(" 정규 사전의 로그가 계수 제곱합이므로 L2 벌점이 됩니다")
print(" 라플라스 사전이면 L1 이 됩니다. 직교 설계에서 연성 문턱값이 나옵니다")
print(" z lambda 격자 MAP 연성 문턱값 공식")
gb = -5.0 + np.arange(1, 200000) * 5e-5
for z, lam in [(2.0, 0.5), (2.0, 1.5), (0.3, 0.5), (-1.2, 0.5), (-1.2, 2.0)]:
ob = -(gb - z) ** 2 / 2 - lam * np.abs(gb)
st = np.sign(z) * max(abs(z) - lam, 0.0) + 0.0
print(" %8.1f %10.1f %13.6f %18.6f" % (z, lam, gb[np.argmax(ob)], st))
print(" 절댓값 사전은 작은 계수를 정확히 0 으로 만듭니다. 211강 라소입니다")
# --- 문제 4: 사전분포를 잘못 고르면 -------------------------------------
print(" 참 p = 0.3 인데 Beta(30,3) 을 믿습니다. 사전평균은 %.6f 입니다" % (30 / 33.0))
print(" n 사후평균 수치 사전 유효표본 33 의 예측식 최대우도 편향")
for n in [5, 20, 100, 1000]:
t = int(round(0.3 * n))
_, mn, _, _ = post_beta(30, 3, t, n)
pred = (30.0 + t) / (33.0 + n)
print(" %9d %13.6f %26.6f %12.6f %10.6f"
% (n, mn, pred, t / n, mn - 0.3))
print(" 사전은 관측 33 개와 같은 무게라 n 이 작으면 결과를 지배합니다")
print(" n 이 1000 이면 편향이 0.02 아래로 내려갑니다. 자료가 사전을 이깁니다")
print(" 무정보 사전 세 가지를 견줍니다. n = 4, t = 1 입니다")
n4, t4 = 4, 1
print(" 사전 MAP 사후평균 사후중앙값")
for name, a, b in [("Beta(1,1) 균등", 1, 1), ("Beta(0.5,0.5) 제프리스", 0.5, 0.5),
("Beta(0,0) 하다니", 1e-6, 1e-6)]:
mp, mn, md, _ = post_beta(a, b, t4, n4)
print(" %-24s %10.6f %10.6f %10.6f" % (name, mp, mn, md))
print(" 최대우도추정값 %.6f" % (t4 / n4))
print(" 자료가 적으면 어떤 무정보 사전을 쓰는지가 결과를 바꿉니다")
# --- 문제 5: 점추정 하나로 충분한가 -------------------------------------
print(" 사후분포에서 MAP 가 재모수화에 불변인지 확인합니다")
a5, b5 = 3.0, 7.0
lg = (a5 - 1) * np.log(gp) + (b5 - 1) * np.log(1 - gp)
w = np.exp(lg - lg.max())
w = w / w.sum()
map_p = float(gp[np.argmax(w)])
mean_p = float(np.sum(gp * w))
med_p = float(gp[np.searchsorted(np.cumsum(w), 0.5)])
lgf = lg + np.log(gp) + np.log(1 - gp)
wf = np.exp(lgf - lgf.max())
map_f = float(gp[np.argmax(wf)])
print(" 사후분포 Beta(%.0f, %.0f) 입니다" % (a5, b5))
print(" p 자체의 MAP %.6f (공식 (a-1)/(a+b-2) = %.6f)"
% (map_p, (a5 - 1) / (a5 + b5 - 2)))
print(" 로짓의 MAP 를 p 로 되돌린 값 %.6f (공식 (a-1+1)/(a+b-2+2) = %.6f)"
% (map_f, a5 / (a5 + b5)))
print(" 사후평균 %.6f, 사후중앙값 %.6f" % (mean_p, med_p))
print(" MAP 는 재모수화에 불변이 아닙니다. 149강 최대우도추정과 다른 점입니다")
print(" 야코비가 붙어 봉우리 위치가 옮겨지기 때문입니다. 중앙값은 단조변환에 불변입니다")
print(" 점추정 하나 대신 구간을 보고합니다. 95% 신용구간을 구합니다")
c = np.cumsum(w)
lo = float(gp[np.searchsorted(c, 0.025)])
hi = float(gp[np.searchsorted(c, 0.975)])
print(" 동일꼬리 신용구간 [%.6f, %.6f], 폭 %.6f" % (lo, hi, hi - lo))
srt = np.argsort(-w)
cs = np.cumsum(w[srt])
sel = gp[srt[:int(np.searchsorted(cs, 0.95)) + 1]]
print(" 최고사후밀도 구간 [%.6f, %.6f], 폭 %.6f"
% (float(sel.min()), float(sel.max()), float(sel.max() - sel.min())))
print(" 최고사후밀도 구간이 더 좁습니다. 치우친 사후분포에서 차이가 납니다")
print(" 구간은 확률로 직접 읽습니다. 151강 신뢰구간과 해석이 다릅니다")
# 동전 20 번 중 6 번 앞면입니다. 세 가지 사전분포로 사후분포를 봅니다
# 사전 Beta(a,b) 격자 MAP 공식 MAP 격자 사후평균 공식 사후평균
# Beta( 1, 1) 0.300000 0.300000 0.318182 0.318182
# Beta( 2, 2) 0.318180 0.318182 0.333333 0.333333
# Beta(30, 3) 0.686275 0.686275 0.679245 0.679245
# 최대우도추정값 t/n = 0.300000
# 균등 사전이면 MAP 가 최대우도추정값과 정확히 같습니다
# 치우친 사전 Beta(30,3) 은 추정값을 0.3 에서 0.7 쪽으로 크게 끌어갑니다
# 자료를 늘리면 어떻게 되는지 봅니다. 참 p = 0.3 입니다
# n Beta(1,1) MAP Beta(30,3) MAP 최대우도 사전의 몫
# 5 0.400000 0.861110 0.400000 0.868421
# 20 0.300000 0.686275 0.300000 0.622642
# 100 0.300000 0.450380 0.300000 0.248120
# 1000 0.300000 0.319110 0.300000 0.031946
# 10000 0.300000 0.301965 0.300000 0.003289
# 사전의 몫이 33/(33+n) 입니다. Beta(30,3) 은 표본 33 개와 같은 무게입니다
# 정규 사전과 정규 우도를 결합합니다. 사후도 정규입니다
# n xbar 격자 사후평균 공식 사후평균 격자 사후표준편차 공식
# 1 3.0000 0.600000 0.600000 0.894427 0.894427
# 4 3.0000 1.500000 1.500000 0.707107 0.707107
# 16 3.0000 2.400000 2.400000 0.447214 0.447214
# 64 3.0000 2.823529 2.823529 0.242536 0.242536
# 256 3.0000 2.953846 2.953846 0.124035 0.124035
# 사후평균은 사전평균과 표본평균을 정밀도로 가중한 평균입니다
# 정밀도가 더해집니다. 1/tau^2 + n/sigma^2 이며 자료가 늘수록 사전이 묻힙니다
# 선형회귀에서 정규 사전이 무엇이 되는지 봅니다
# tau (사전 표준편차) lambda = sigma^2/tau^2 MAP 해 릿지 해 최대 차이
# 10.00 0.010000 [ 1.5270 -0.6990 0.4300] [ 1.5270 -0.6990 0.4301] 0.000095
# 1.00 1.000000 [ 1.4850 -0.6750 0.4210] [ 1.4845 -0.6747 0.4210] 0.000476
# 0.30 11.111111 [ 1.1560 -0.4970 0.3480] [ 1.1562 -0.4971 0.3478] 0.000237
# 0.10 100.000000 [ 0.3930 -0.1470 0.1420] [ 0.3928 -0.1474 0.1423] 0.000384
# 격자 탐색으로 찾은 MAP 가 릿지 닫힌 해와 격자 간격 안에서 같습니다
# 정규 사전의 로그가 계수 제곱합이므로 L2 벌점이 됩니다
# 라플라스 사전이면 L1 이 됩니다. 직교 설계에서 연성 문턱값이 나옵니다
# z lambda 격자 MAP 연성 문턱값 공식
# 2.0 0.5 1.500000 1.500000
# 2.0 1.5 0.500000 0.500000
# 0.3 0.5 0.000000 0.000000
# -1.2 0.5 -0.700000 -0.700000
# -1.2 2.0 0.000000 0.000000
# 절댓값 사전은 작은 계수를 정확히 0 으로 만듭니다. 211강 라소입니다
# 참 p = 0.3 인데 Beta(30,3) 을 믿습니다. 사전평균은 0.909091 입니다
# n 사후평균 수치 사전 유효표본 33 의 예측식 최대우도 편향
# 5 0.842105 0.842105 0.400000 0.542105
# 20 0.679245 0.679245 0.300000 0.379245
# 100 0.451128 0.451128 0.300000 0.151128
# 1000 0.319458 0.319458 0.300000 0.019458
# 사전은 관측 33 개와 같은 무게라 n 이 작으면 결과를 지배합니다
# n 이 1000 이면 편향이 0.02 아래로 내려갑니다. 자료가 사전을 이깁니다
# 무정보 사전 세 가지를 견줍니다. n = 4, t = 1 입니다
# 사전 MAP 사후평균 사후중앙값
# Beta(1,1) 균등 0.250000 0.333333 0.313810
# Beta(0.5,0.5) 제프리스 0.166665 0.300000 0.271805
# Beta(0,0) 하다니 0.000005 0.250002 0.206300
# 최대우도추정값 0.250000
# 자료가 적으면 어떤 무정보 사전을 쓰는지가 결과를 바꿉니다
# 사후분포에서 MAP 가 재모수화에 불변인지 확인합니다
# 사후분포 Beta(3, 7) 입니다
# p 자체의 MAP 0.250000 (공식 (a-1)/(a+b-2) = 0.250000)
# 로짓의 MAP 를 p 로 되돌린 값 0.300000 (공식 (a-1+1)/(a+b-2+2) = 0.300000)
# 사후평균 0.300000, 사후중앙값 0.286235
# MAP 는 재모수화에 불변이 아닙니다. 149강 최대우도추정과 다른 점입니다
# 야코비가 붙어 봉우리 위치가 옮겨지기 때문입니다. 중앙값은 단조변환에 불변입니다
# 점추정 하나 대신 구간을 보고합니다. 95% 신용구간을 구합니다
# 동일꼬리 신용구간 [0.074855, 0.600095], 폭 0.525240
# 최고사후밀도 구간 [0.054240, 0.567630], 폭 0.513390
# 최고사후밀도 구간이 더 좁습니다. 치우친 사후분포에서 차이가 납니다
# 구간은 확률로 직접 읽습니다. 151강 신뢰구간과 해석이 다릅니다