조건부 확률분포: p(a∣b) 와 p(b∣a)

주변확률: 한쪽을 모두 더해 지우기

사진첩 표의 오른쪽 끝 칸과 맨 아래 줄에는 「합」이 적혀 있었다. 고양이 줄의 합 90과 실내 칸의 합 116은 조건부 확률의 분모로 썼지만, 두 합이 무엇을 센 값인지는 따로 묻지 않았다. 표가 손에 있으면 합은 더하기만 하면 나온다. 그런데 친구가 표는 보여 주지 않고 「고양이 사진은 80%가, 강아지 사진은 40%가 실내에서 찍혔어」라는 말만 전해 주었다면, 사진첩 전체에서 실내 사진은 몇 %일까? 80과 40의 가운데인 60%라고 답하고 싶어진다.

표의 가장자리에 적은 합

200장을 동물과 찍은 곳으로 나눠 센 표를 다시 적는다.

실내 실외 합
고양이 72 18 90
강아지 44 66 110
합 116 84 200

실내 칸의 합 116은 실내에서 찍은 고양이 72장과 강아지 44장을 더한 수다. 실내 사진을 세면서 동물은 가리지 않았으니, 116 ÷ 200 = 0.58은 동물을 묻지 않고 잰 실내 사진의 비율이다. 같은 방법으로 고양이 줄의 합에서 90 ÷ 200 = 0.45, 강아지 줄의 합에서 110 ÷ 200 = 0.55가 나온다. 이렇게 결합 확률을 한 변수(여기서는 동물)의 모든 값에 걸쳐 더해 그 변수를 지우고 남은 확률을 주변확률 (다른 쪽을 모두 더해 지운 확률 / marginal probability)이라 하고, 남은 쪽의 모든 값에 걸쳐 모은 것을 주변 분포라 한다. 「주변」은 표의 가장자리(margin)를 가리킨다. 줄 합과 칸 합을 표의 가장자리에 적어 왔기 때문에 붙은 이름이다.

친구가 전해 준 두 숫자로 돌아가자. 실내 고양이 72장은 고양이 90장의 80%이니 72 = 0.80 × 90이고, 양쪽을 200으로 나누면 p(고양이, 실내) = p(실내 ∣ 고양이) × p(고양이) = 0.80 × 0.45 = 0.36이다. 강아지 쪽은 0.40 × 0.55 = 0.22다. 결합 확률은 조건부 확률에 조건의 주변확률을 곱한 값이고, 그 곱을 조건(동물)의 모든 값에 걸쳐 더하면 0.36 + 0.22 = 0.58, 표에서 센 실내 비율이 돌아온다.

p(a)=∑bp(a,b)=∑bp(a∣b) p(b)\textcolor{#c2408a}{p}(\textcolor{#008787}{a}) = \sum_{\textcolor{#874b0f}{b}} \textcolor{#c2408a}{p}(\textcolor{#008787}{a}, \textcolor{#874b0f}{b}) = \sum_{\textcolor{#874b0f}{b}} \textcolor{#c2408a}{p}(\textcolor{#008787}{a} \mid \textcolor{#874b0f}{b})\, \textcolor{#c2408a}{p}(\textcolor{#874b0f}{b})
a남기는 쪽. 사진첩에서는 찍은 곳b더해서 지우는 쪽. 사진첩에서는 동물p(a,b)결합 확률 (표의 한 칸 ÷ 전체)p(a∣b) p(b)같은 결합 확률을 조건부 확률 × 조건의 주변확률로 쪼갠 것. 0.80×0.45=0.36∑b시그마. b의 모든 값에 걸쳐 더한다p(a)주변확률. 실내면 0.36+0.22=0.58\begin{array}{ll} \textcolor{#008787}{a} & \text{남기는 쪽. 사진첩에서는 찍은 곳} \\ \textcolor{#874b0f}{b} & \text{더해서 지우는 쪽. 사진첩에서는 동물} \\ \textcolor{#c2408a}{p}(\textcolor{#008787}{a}, \textcolor{#874b0f}{b}) & \text{결합 확률 (표의 한 칸 ÷ 전체)} \\ \textcolor{#c2408a}{p}(\textcolor{#008787}{a} \mid \textcolor{#874b0f}{b})\, \textcolor{#c2408a}{p}(\textcolor{#874b0f}{b}) & \text{같은 결합 확률을 조건부 확률 × 조건의 주변확률로 쪼갠 것. } 0.80 \times 0.45 = 0.36 \\ \sum_{\textcolor{#874b0f}{b}} & \text{시그마. } \textcolor{#874b0f}{b} \text{의 모든 값에 걸쳐 더한다} \\ \textcolor{#c2408a}{p}(\textcolor{#008787}{a}) & \text{주변확률. 실내면 } 0.36 + 0.22 = 0.58 \end{array}

식의 Σ(시그마)는 아래 적힌 변수의 모든 값에 걸쳐 더하라는 기호다. 60%가 빗나간 이유도 둘째 식에 보인다. 80과 40의 가운데를 고르는 계산은 고양이와 강아지에 무게를 반씩 주는데, 둘째 식에서 조건부 확률에 곱하는 무게는 조건의 주변확률 p(b)다. 이 사진첩에는 강아지가 110장으로 더 많아서 무게가 0.45 대 0.55이고, 실내 비율이 낮은 강아지(40%) 쪽으로 더 기운다. 그래서 0.58은 0.60보다 조금 낮다.

더하기에서 적분으로

동물은 값이 둘뿐이라 두 칸을 더하면 끝났다. 키나 몸무게, 사진의 밝기처럼 실수 값을 갖는 변수는 값이 끝없이 많아서 하나씩 더할 수 없다. 두 실수 x, z가 다음 순서로 정해진다고 하자. 먼저 z를 평균 0, 표준편차 1인 정규분포에서 뽑고, 그다음 x를 z 둘레에서 표준편차 0.5로 뽑는다. z 둘레에서 x를 뽑는 장난감을 고른 것은 결합 밀도를 p(x, z) = p(x ∣ z) p(z)로 바로 적을 수 있고, x 쪽만 남긴 분포의 정답(평균 0, 분산 1 + 0.5² = 1.25인 정규분포)도 알려져 있어서, 칸으로 나눠 더한 값을 정답과 비교할 수 있기 때문이다.

결합 밀도는 (x, z) 평면 위에 비스듬히 누운 언덕 모양의 곡면이다. x = 1에서 z를 지우려면, 표에서 실내 칸을 세로로 따라 내려가며 더했듯이 x = 1인 세로 줄을 따라 곡면의 높이를 모두 더해야 한다. z를 하나씩 더할 수는 없으니 −4부터 4까지를 같은 폭의 칸으로 나누고, 칸마다 「높이 × 칸 폭」을 더해 보자.

칸 폭 칸 수 높이 × 칸 폭의 합
2 5 0.098
1 9 0.242
0.5 17 0.2392
0.1 81 0.2392

칸 폭이 2일 때는 칸이 너무 넓어 단면의 봉우리 모양을 잡지 못하고 크게 모자라며, 폭을 줄일수록 정답 0.2392로 다가간다. 칸 폭을 0으로 줄여 가며 더한 값의 극한이 해석학에서 배우는 적분이다. 동물 방향으로 칸을 더해 동물을 지운 일과, z 방향으로 곡면을 적분해 z를 지운 일은 같은 연산이다. 지우려는 변수의 방향으로 결합 확률을 모두 쌓는데, 값이 띄엄띄엄이면 더하기, 연속이면 적분이 된다. 이렇게 한 변수를 더하거나 적분해서 지우는 연산을 주변화(marginalization)라 부른다.

p(x)=∫p(x,z) dz=∫p(x∣z) p(z) dz\textcolor{#c2408a}{p}(\textcolor{#1b9e77}{x}) = \int \textcolor{#c2408a}{p}(\textcolor{#1b9e77}{x}, \textcolor{#8c564b}{z})\, d\textcolor{#8c564b}{z} = \int \textcolor{#c2408a}{p}(\textcolor{#1b9e77}{x} \mid \textcolor{#8c564b}{z})\, \textcolor{#c2408a}{p}(\textcolor{#8c564b}{z})\, d\textcolor{#8c564b}{z}
x남기는 연속 변수z적분해서 지우는 연속 변수p(x,z)결합 밀도: 평면 위 곡면의 높이dzz 방향 칸의 폭. 0으로 줄여 간다∫인테그럴. 칸마다 높이 × 폭을 z의 모든 값에 걸쳐 더한 값의 극한p(x)x의 주변 분포(밀도). x=1이면 0.2392\begin{array}{ll} \textcolor{#1b9e77}{x} & \text{남기는 연속 변수} \\ \textcolor{#8c564b}{z} & \text{적분해서 지우는 연속 변수} \\ \textcolor{#c2408a}{p}(\textcolor{#1b9e77}{x}, \textcolor{#8c564b}{z}) & \text{결합 밀도: 평면 위 곡면의 높이} \\ d\textcolor{#8c564b}{z} & \textcolor{#8c564b}{z} \text{ 방향 칸의 폭. 0으로 줄여 간다} \\ \int & \text{인테그럴. 칸마다 높이 × 폭을 } \textcolor{#8c564b}{z} \text{의 모든 값에 걸쳐 더한 값의 극한} \\ \textcolor{#c2408a}{p}(\textcolor{#1b9e77}{x}) & \textcolor{#1b9e77}{x} \text{의 주변 분포(밀도). } \textcolor{#1b9e77}{x} = 1 \text{이면 } 0.2392 \end{array}
주변화를 두 형태로 나란히 놓은 그림. 왼쪽: 사진첩의 결합 확률 네 칸에서 실내 칸 0.36과 0.22를 동물 방향(세로)으로 더하면 아래 가장자리에 p(실내) = 0.58. 오른쪽: 결합 밀도 p(x, z)의 곡면을 위에서 본 색 지도(진할수록 높다). x = 1의 세로 띠를 z 방향으로 적분한 단면 p(1, z)의 넓이 0.239(오른쪽 작은 그림)가 아래 가장자리 곡선 p(x)의 x = 1 높이가 된다(sources/conditional-prob/figs.py)
주변화를 두 형태로 나란히 놓은 그림. 왼쪽: 사진첩의 결합 확률 네 칸에서 실내 칸 0.36과 0.22를 동물 방향(세로)으로 더하면 아래 가장자리에 p(실내) = 0.58. 오른쪽: 결합 밀도 p(x, z)의 곡면을 위에서 본 색 지도(진할수록 높다). x = 1의 세로 띠를 z 방향으로 적분한 단면 p(1, z)의 넓이 0.239(오른쪽 작은 그림)가 아래 가장자리 곡선 p(x)의 x = 1 높이가 된다(sources/conditional-prob/figs.py)

두 그림은 같은 자리에 같은 것을 둔다. 표의 칸이 곡면의 한 점, 실내 칸의 세로 줄이 x = 1의 세로 띠, 아래 가장자리의 합 칸이 아래 가장자리의 곡선 p(x)에 대응한다. 식의 ∫(인테그럴)은 라이프니츠가 합(라틴어 summa)의 첫 글자 S를 길게 늘여 쓴 기호로, Σ처럼 더한다는 뜻에 더하는 칸이 끝없이 좁아졌다는 뜻을 얹었다. 곡면 아래 부피 전체가 1이므로, z로 먼저 적분하고 x로 다시 적분하면 곡선 p(x) 아래 넓이도 1이 된다. 해석학에서 이중적분을 한 변수씩 차례로 계산할 때 안쪽 적분을 끝낸 결과가 주변 분포다.

ML에서: 보이지 않는 변수를 적분으로 지우기

앞의 장난감은 z를 먼저 뽑고 그 둘레에서 x를 뽑았다. 그림을 만드는 생성 모델 가운데에도 같은 순서를 따르는 것이 많다. 정규분포에서 숫자 몇 개 z를 뽑아 신경망에 넣으면, 신경망이 그 숫자들로부터 그림 x를 그린다. z는 그림의 모양을 정하는 값이지만, 학습 데이터에 있는 것은 그림뿐이고 그림마다 z가 얼마였는지는 적혀 있지 않다. 데이터에 보이지 않는 이런 숨은 변수를 잠재 변수라 부른다.

모델이 실제 그림 x에 매기는 확률(연속이면 밀도) p(x)가 높을수록 모델은 데이터를 잘 흉내 낸다. 그래서 학습은 데이터의 그림마다 p(x)를 키우는 일로 적을 수 있다. 그런데 신경망이 바로 알려 주는 것은 z를 정해 두었을 때의 p(x ∣ z)뿐이다. 바라는 p(x)는 위의 적분처럼 z의 모든 값에 걸쳐 p(x ∣ z) p(z)를 더해야 얻는다. 장난감의 z는 숫자 하나라 칸 17개로 넉넉했다. 실제 모델의 z는 숫자가 여러 개라 적분이 숫자 개수만큼 여러 겹이 되고, 그림 한 장의 p(x)조차 칸을 나눠 직접 셀 수 없게 된다.

문제 4. 버스 두 노선의 지각

버스로 통학하는 학생 300명 가운데 240명은 A 노선, 60명은 B 노선을 탄다. 비가 많이 온 어느 월요일 아침, A 노선 학생의 5%와 B 노선 학생의 30%가 1교시에 지각했다. (가) 그날 버스 통학생 전체에서 지각한 학생의 비율은? (나) 학생회 게시판에 「A 노선 5%, B 노선 30%였으니 버스 통학생 지각률은 둘의 평균인 17.5%」라는 글이 올라왔다. 맞는가?

버스 통학생 300명. 너비가 노선마다의 학생 수(A 노선 240명, B 노선 60명), 칠한 높이가 그 노선 학생 가운데 지각한 비율(5%, 30%)(sources/conditional-prob/problems_figs.py)
버스 통학생 300명. 너비가 노선마다의 학생 수(A 노선 240명, B 노선 60명), 칠한 높이가 그 노선 학생 가운데 지각한 비율(5%, 30%)(sources/conditional-prob/problems_figs.py)
김민준 M01
김민준

(가)는 사람 수로 세면 되겠다. A 노선 240명의 5%가 12명, B 노선 60명의 30%가 18명. 지각한 학생이 30명이니까 300명 가운데 10%야.

이서연 S01
이서연

(나)의 17.5%는 10%보다 꽤 크네. 게시판 글은 5와 30을 더해서 2로 나눴어.

선생님 T14
선생님

2로 나누면 두 노선에 무게를 얼마씩 준 거예요?

이서연 S03
이서연

반씩이요. 실제 학생 수로는 240 대 60이라 무게가 0.8 대 0.2예요. 0.8 × 5% + 0.2 × 30% = 4% + 6% = 10%. 민준이가 사람 수로 센 값이랑 같아요.

선생님 T01
선생님

그럼 게시판 글이 맞는 날도 있을까요?

김민준 M02
김민준

두 노선 학생 수가 같으면 무게가 0.5씩이니까 0.5 × 5% + 0.5 × 30% = 17.5%. 학생 수가 반반일 때만 평균이 맞아요.

이서연 S07
이서연

노선마다의 지각률은 조건부 확률 p(지각 ∣ 노선)이고 학생 수 비율이 p(노선)이야. 전체 지각률은 p(지각 ∣ 노선)을 p(노선)으로 무게 매겨 더한 주변확률이고. 지각률이 높은 B 노선에 학생이 적으니까 전체 지각률이 5% 가까이로 끌려 내려온 거야.

문제 5. 줄 합과 칸 합만 남은 표

두 값을 갖는 a(a₁, a₂)와 b(b₁, b₂)의 결합 확률이 p(a₁, b₁) = 0.30, p(a₁, b₂) = 0.10, p(a₂, b₁) = 0.15, p(a₂, b₂) = 0.45 이다(문제 2의 표). (가) 주변 분포 p(a)와 p(b)를 구하라. (나) 네 칸을 잃어버리고 p(a)와 p(b)만 남았다. 네 칸을 되살릴 수 있는가?

네 칸은 물음표이고 줄 합 p(a) = (0.40, 0.60)과 칸 합 p(b) = (0.45, 0.55)만 남은 표(sources/conditional-prob/problems_figs.py)
네 칸은 물음표이고 줄 합 p(a) = (0.40, 0.60)과 칸 합 p(b) = (0.45, 0.55)만 남은 표(sources/conditional-prob/problems_figs.py)
이서연 S01
이서연

(가)는 줄과 칸을 더하면 돼. p(a) = (0.30 + 0.10, 0.15 + 0.45) = (0.40, 0.60), p(b) = (0.30 + 0.15, 0.10 + 0.45) = (0.45, 0.55).

선생님 T01
선생님

(나)는요?

이서연 S04
이서연

모르는 칸이 넷이고, 줄 합 둘과 칸 합 둘로 식도 넷이에요. 미지수 넷에 식이 넷이니까 풀릴 것 같아요.

김민준 M02
김민준

숫자로 풀어 볼게. 왼쪽 위 칸을 t로 두면, 줄 a₁의 합에서 오른쪽 위는 0.40 − t, 칸 b₁의 합에서 왼쪽 아래는 0.45 − t, 줄 a₂의 합에서 오른쪽 아래는 0.60 − (0.45 − t) = 0.15 + t. 마지막 칸 b₂의 합은 (0.40 − t) + (0.15 + t) = 0.55인데… 어, t가 지워져 버리네.

선생님 T14
선생님

넷째 식이 t를 정해 주지 못했네요. 칸 b₂의 합은 앞의 세 식과 다른 말을 하고 있었을까요?

이서연 S06
이서연

잠깐, 줄 합 둘을 더해도 1이고 칸 합 둘을 더해도 1이에요. 둘 다 네 칸 전체의 합이니까요. 그럼 줄 합 둘과 칸 합 하나를 알면 남은 칸 합은 1에서 빼서 나와요. 식이 넷처럼 보였는데 서로 다른 말을 하는 식은 셋뿐이었어요.

김민준 M01
김민준

그럼 t는 아무 값이나 되는 거야? t = 0.18을 넣으면 (0.18, 0.22, 0.27, 0.33)이고, 줄 합 0.40, 0.60과 칸 합 0.45, 0.55가 처음 표와 똑같이 나와.

이서연 S03
이서연

아무 값은 아니야. 칸은 음수가 될 수 없으니까 0.40 − t ≥ 0, 0.45 − t ≥ 0, t ≥ 0. 그러면 t는 0부터 0.40까지야. 처음 표는 t = 0.30이었고.

선생님 T01
선생님

민준 학생이 고른 0.18은 어디서 나온 값이에요?

김민준 M07
김민준

음, 0.40 × 0.45 = 0.18이네요. a₁ 줄의 합에 b₁ 칸의 합을 곱한 값이에요.

이서연 S01
이서연

다른 칸도 그런지 보자. 0.40 × 0.55 = 0.22, 0.60 × 0.45 = 0.27, 0.60 × 0.55 = 0.33. 네 칸이 다 칸마다 p(a) p(b)를 곱한 값이야.

김민준 M08
김민준

가계부도 그렇겠다. 1월·2월 지출 합과 식비·교통비 합만 남아 있으면 1월 식비는 정할 수 없어. 달마다의 합이 줄 합, 항목마다의 합이 칸 합이고.

선생님 T13
선생님

0.18짜리 표는 a와 b가 서로 상관없이 나올 때의 표예요. t가 0.30이면 a₁이 b₁과 그보다 자주 함께 나오고요. 한쪽을 더해 지우면 두 변수가 어떻게 함께 움직였는지도 같이 지워져요. 네 칸을 되살리려면 칸 하나, 또는 문제 2처럼 조건부 분포 p(a ∣ b)가 더 있어야 해요.

문제 6. 굵기를 모르는 손글씨 생성기

손글씨 숫자 생성기가 먼저 획 굵기 z를 가늘게·보통·굵게 가운데 하나로 확률 p(z) = (0.2, 0.5, 0.3)에 따라 뽑고, 그 굵기로 숫자 그림을 그린다. 시험 그림 한 장 x를 굵기마다 이 생성기가 그려 낼 확률은 p(x ∣ z) = (0.001, 0.004, 0.020)이고, 시험 그림에는 굵기가 적혀 있지 않다. (가) 생성기가 이 그림을 그려 낼 확률 p(x)는? (나) 굵기 하나 대신 숫자 20개짜리 z를 쓰고 숫자마다 칸을 10개로만 나눠 더한다면, 그림 한 장의 p(x)를 구하려고 더할 항은 몇 개인가?

획 굵기 z 세 가지(가늘게 0.2, 보통 0.5, 굵게 0.3)와, 굵기마다 시험 그림 x를 그려 낼 확률 p(x ∣ z)(0.001, 0.004, 0.020). 시험 그림에는 굵기가 적혀 있지 않다(sources/conditional-prob/problems_figs.py)
획 굵기 z 세 가지(가늘게 0.2, 보통 0.5, 굵게 0.3)와, 굵기마다 시험 그림 x를 그려 낼 확률 p(x ∣ z)(0.001, 0.004, 0.020). 시험 그림에는 굵기가 적혀 있지 않다(sources/conditional-prob/problems_figs.py)
김민준 M04
김민준

굵기가 안 적혀 있으면 가장 흔한 「보통」으로 놓으면 되겠다. 절반이 보통이니까. 그럼 p(x) = 0.004.

선생님 T01
선생님

이 그림이 보통 굵기로 그려졌다는 건 어떻게 알아요?

김민준 M06
김민준

음, 모르죠. 굵게가 뽑혀서 그려진 그림일 수도 있고요.

이서연 S01
이서연

세 굵기가 다 이 그림에 이르는 길이니까, 길마다 그 굵기가 뽑힐 확률을 곱해서 다 더해야 할 것 같아.

김민준 M01
김민준

가늘게 0.2 × 0.001 = 0.0002, 보통 0.5 × 0.004 = 0.002, 굵게 0.3 × 0.020 = 0.006. 다 더하면 0.0082. 처음 답 0.004의 두 배쯤이네.

선생님 T14
선생님

세 항 가운데 어느 항이 가장 커요?

김민준 M07
김민준

굵게 항이요. 0.006이면 0.0082의 73%예요. 가장 흔한 굵기는 보통인데, 이 그림은 거의 굵게 쪽에서 왔네요. 흔한 z 하나만 보면 그림을 실제로 만든 z를 놓칠 수 있어요.

선생님 T01
선생님

(나)는요?

이서연 S03
이서연

숫자 하나에 칸 10개면, 숫자 둘이면 10 × 10 = 100칸이고 숫자 20개면 10²⁰칸이에요. 칸마다 생성기를 한 번 돌려 p(x ∣ z)를 재야 하니까 항도 10²⁰개요.

김민준 M09
김민준

한 번 돌리는 데 1밀리초라고 쳐도 10¹⁷초, 30억 년이 넘어. 그림 한 장의 p(x)를 구하는 데만.

이서연 S07
이서연

칸을 숫자마다 10개로 나눈 것도 거칠어. 위의 장난감에서는 숫자 하나짜리 z를 칸 폭 2로 나눴더니 0.098이 나와서 정답 0.2392를 크게 빗나갔잖아.

선생님 T13
선생님

생성 모델이 키우고 싶은 p(x)는 z를 적분으로 지워야 나와요. z가 길어지면 그 적분을 칸으로 나눠 셀 수가 없어요.