라벨이 조건인 그림의 분포: 생성이 배워야 할 것
앞에서는 사진첩 200장을 동물(고양이·강아지)과 찍은 곳(실내·실외)으로 나눠 표를 만들었다. 묶음이 2 × 2 = 4개뿐이라 사진을 한 장씩 세어 넣으면 표가 채워졌는데, 이렇게 다루는 대상이 간단하면 표를 만들어 세어 볼 수 있지만 대상이 복잡해지면 표를 채울 수 없게 된다. 표의 한 축에 「찍은 곳」 대신 사진 그 자체를 놓아 보자. 가로세로 32픽셀짜리 작은 컬러 사진 한 장도 32 × 32 × 3 = 3,072개의 밝기로 적힌다. 칸마다 밝기를 바꿔 만들 수 있는 사진의 가짓수는 셀 엄두가 나지 않을 만큼 많아서, 사진을 축으로 놓은 표는 적을 수도 셀 수도 없다. 그래도 세로 막대는 그대로 쓸 수 있다. 막대 왼쪽에 사진을 놓느냐 오른쪽에 놓느냐에 따라 일이 얼마나 달라지는지가 이 절의 물음이다.
왜 특징 두 개짜리 평면인가
사진 한 장은 3,072차원 공간의 점이라 그릴 수 없다. 그래서 사진마다 숫자 두 개만 남겨 평면에 찍어 보자. 가로축은 귀 끝이 얼마나 뾰족한지, 세로축은 주둥이가 얼마나 긴지다. 고양이 사진은 귀가 뾰족하고 주둥이가 짧아 왼쪽 아래에, 강아지 사진은 오른쪽 위에 몰린다. 아래 위젯에서 고양이 사진과 강아지 사진이 퍼진 두 분포는 설명을 위해 정한 정규분포다(고양이 가운데 (−0.8, −0.6)·폭 0.55, 강아지 가운데 (0.9, 0.7)·폭 0.75). 실제 사진에서 잰 값은 아니지만, 점이 두 숫자짜리라 두 방향의 조건부 분포를 한 화면에 모두 그릴 수 있는 가장 작은 무대다.
같은 평면, 두 방향
평면의 한 점(사진 하나)을 고르면 그 사진이 고양이일지 강아지일지의 분포가 정해진다. 이 분포가 p(y ∣ x)이고, 값은 두 개뿐이다. 고양이 분포의 가운데 (−0.8, −0.6)에서는 (0.991, 0.009), 두 분포의 가운데 사이 (0, 0)에서는 (0.531, 0.469)다. 어느 점에서든 막대 두 개를 그리면 끝난다.
거꾸로 라벨 y = 고양이를 고르면 세로 막대 왼쪽의 묻는 것은 사진이다. p(x ∣ y = 고양이)는 평면 전체에 퍼진 분포 하나이고, 평면의 모든 점에 값이 하나씩 있다. 이 분포에서 점을 하나 뽑으면 고양이 사진 하나가 나오고, 다시 뽑으면 다른 고양이 사진이 나온다. 막대 두 개로는 적을 수 없다. p(x ∣ y = 고양이)를 「안다」는 것은 그 분포의 모양을 알고, 그 모양대로 점을 뽑을 수 있다는 뜻이다.
두 방향은 베이즈 정리로 이어져 있다. 아래 위젯의 p(y ∣ x)는 두 분포 p(x ∣ 고양이), p(x ∣ 강아지)의 높이(밀도)와 고양이 비율로 계산한 값이다.
거꾸로는 되지 않는다. p(y ∣ x)를 모든 점에서 알아도, 고양이 사진이 평면 어디에 얼마나 몰려 있는지는 나오지 않는다. 분류기는 두 분포 p(x ∣ 고양이)와 p(x ∣ 강아지)가 맞닿는 경계 근처만 잘 알면 되지만, p(x ∣ 고양이)에서 점을 뽑으려면 그 분포 전체를 알아야 한다.
위젯에서 고양이 비율을 0.5에서 0.1로 내리면 바탕의 경계가 고양이 쪽으로 밀리지만 두 분포 p(x ∣ 고양이), p(x ∣ 강아지)의 등고선은 움직이지 않는다. 라벨 비율은 p(y ∣ x)를 바꾸고 p(x ∣ y)는 건드리지 않는다.
라벨이 주어졌을 때 그 라벨의 그림을 하나 뽑아 내는 일을 조건부 생성 (조건에 맞는 그림 하나 뽑기 / conditional generation)이라 한다. 이 책이 지을 모델은 모두 이 일을 한다. 조건이 라벨일 때도, 글 한 줄일 때도, 참조 그림일 때도 막대 오른쪽에 놓이는 것이 바뀔 뿐이다.
ML에서: 같은 막대, 반대 자리
분류 모델 논문은 p(y ∣ x)를 적고, 그림 생성 모델 논문은 p(x ∣ y) 또는 글 조건 c 를 써서 p(x ∣ c)를 적는다. 둘은 내놓는 것부터 달라서, 분류 모델은 라벨마다 확률 하나씩, 짧은 막대 하나를 내면 할 일이 끝난다. 생성 모델은 그림 한 장의 밝기를 모두 내놓아야 하고, 그것도 부를 때마다 조건부 분포 p(x ∣ y)에서 새로 뽑은 그림 하나를 내놓아야 한다.
문제 10. 출석부 서명
30명이 듣는 수업에서 조교가 출석부의 서명만 보고 누구의 서명인지 맞히기도 하고, 반대로 학생 한 명의 이름을 듣고 그 학생의 서명을 흉내 내어 그리기도 한다. 서명은 가로세로 10칸 모눈에 칸마다 칠하거나 비우는 그림이라고 하자. (가) 「서명 → 이름」의 답이 될 수 있는 것은 몇 가지인가? (나) 「이름 → 서명」의 답이 될 수 있는 그림은 몇 가지인가? (다) 같은 학생이 매주 하는 서명은 매번 똑같은가?


(가)는 출석부에 이름이 30개니까 30가지. (나)는 칸 100개가 칠하거나 비우거나 둘 중 하나니까 2¹⁰⁰, 1.27 × 10³⁰가지야.

그럼 「이름 → 서명」을 잘한다는 건 그 10³⁰ 가지 가운데 무엇을 안다는 뜻일까요?

이름 하나를 넣으면 서명이 하나 나오는 함수를 안다는 거 아닐까요? 학생마다 자기 서명이 하나씩 있으니까요.

그런데 (다)를 봐. 나도 출석부에 서명할 때마다 모양이 좀 달라. 급할 땐 끝을 날려 쓰고.

민준 학생이 다섯 주 동안 한 서명을 모눈에 옮기면 몇 가지가 나올까요?

칸 몇 개씩은 다르겠죠. 그럼 다섯 가지쯤… 이름 하나에 서명 하나가 대응하지 않네요. 함수로 보면 안 되겠어요.

그 학생이 할 법한 서명들을 막대 형태로 적으면요?

p(서명 ∣ 이름)이요. 이름 하나에 10³⁰ 가지 위에 퍼진 분포가 하나 있고, 그 학생다운 서명 근처에 확률이 몰려 있어요. (가)의 p(이름 ∣ 서명)은 30칸짜리 막대고요.

같은 막대인데 왼쪽이 이름이면 30칸, 서명이면 10³⁰ 칸이네. 그래서 맞히기는 쉽고 흉내 내기는 어렵구나. 흉내 내는 쪽은 서명 하나가 아니라 그 사람 서명들이 퍼진 모양을 알아야 하니까.
문제 11. 확률이 0.02 인데 왜 작지 않나
위젯의 두 정규분포 p(x ∣ 고양이), p(x ∣ 강아지)를 쓴다. (가) 점 (0.3, 0.2)에서 p(x ∣ 고양이) = 0.0247, p(x ∣ 강아지) = 0.1645다. 두 값을 더해도 1이 안 된다. 계산이 틀렸는가? (나) 점 (−2.5, 2.0)에서 p(y = 강아지 ∣ x)는 0.972다. 이 점의 사진은 강아지 사진이라고 믿어도 되는가?

위젯의 「문제 11 불러오기」로 두 점의 값을 볼 수 있다.

(가)는 고양이일 확률이 2%, 강아지일 확률이 16%라는 거죠? 나머지 82%는 뭔지 모르겠지만요.

그 두 값은 세로 막대 왼쪽에 무엇을 놓고 잰 값이에요?

사진 x요. 아, 라벨의 확률이 아니라 사진 쪽 값이네요. 고양이 분포 p(x ∣ 고양이)가 이 점에서 얼마나 높은지요.

그러면 둘은 서로 다른 분포의 높이라서 더해 1이 될 이유가 없어. 1이 되는 건 한 분포를 평면 전체에 대해 다 더했을 때야.

평면의 점은 셀 수 없이 많은데, 그 「다 더하기」는 어떻게 해요?

하나씩은 못 더하니까… 평면을 작은 네모로 나눠서 높이 × 넓이를 더하는 수밖에 없겠네요.

그럼 0.0247 그 자체는 무엇이에요?

넓이를 곱해야 확률이 되니까 밀도요. 0.1 × 0.1 네모 하나에 고양이 분포에서 뽑은 점이 떨어질 확률이 0.0247 × 0.01, 0.00025쯤이고요.

(나)는요?

베이즈 정리로 낸 사후확률이 0.972니까, 강아지 사진이라고 믿어도 될 것 같아요.

그런데 실습 때 분류기에 자동차 사진을 넣어도 고양이 99%가 나오곤 했어. 숫자가 높다고 꼭 그 동물다운 사진은 아니던데.

점 (−2.5, 2.0)에서 두 분포의 높이를 재 볼까요? 꼭대기 높이의 몇 배쯤 돼요?

일단 거리부터 보면, 강아지 분포의 가운데 (0.9, 0.7)에서도, 고양이 분포의 가운데에서도 멀어요. p(x ∣ 강아지)의 높이가 꼭대기의 10만 분의 1도 안 되고 p(x ∣ 고양이)는 그보다 더 낮아요. 0.972는 「둘 다 거의 0인데 그중 강아지 쪽이 덜 작다」는 뜻이었네요.

p(y ∣ x)는 두 칸 합이 늘 1이니까, 사진이 얼마나 이상한지는 거기 안 나오는구나. 그건 p(x ∣ y) 쪽에만 있고.

정답이 없는 객관식 문제에서도 보기 하나는 꼭 골라야 하는 거랑 같네. 고른 보기가 정답에 가깝다는 뜻은 아니고.

두 점을 위젯에 찍어 p(y ∣ x)와 두 분포의 높이를 나란히 보세요.

문제 12. 사진 생성기는 표를 내놓을 수 없다
(가) 이미지넷 분류기는 사진 한 장에 숫자 몇 개를 내놓는가? (나) 가로세로 64픽셀 컬러, 칸마다 256단계 밝기인 사진의 가짓수는 몇 자리 수인가? (다) 「고양이」를 받아 p(x ∣ 고양이)를 전부, 곧 모든 사진에 확률 하나씩을 적은 표로 내놓는 생성기를 만들 수 있는가? 없다면 생성기는 무엇을 내놓아야 하는가?


(가)는 라벨 1,000개에 하나씩, 1,000개요. (나)는 칸이 64 × 64 × 3 = 12,288개고 칸마다 256가지니까 256^12,288. 자릿수는 12,288 × log₁₀ 256 에 1을 더하면 29,593자리예요.

우주의 원자 수가 80자리쯤이에요. (다)는요?

표는 절대 못 내놓죠. 그럼 생성기는… 분류기가 확률이 가장 높은 라벨 하나를 고르듯이, 확률이 가장 높은 사진 하나를 내놓으면 되지 않아요?

그럼 「고양이」를 몇 번 넣어도 똑같은 사진만 나오겠네. 문제 10의 서명에서는 같은 이름에도 서명이 여럿이었잖아.

그렇네. 가장 그럴듯한 하나만 내놓으면 분포가 아니라 점 하나야.

표도 못 내놓고 점 하나도 모자라면, 남는 방법은 뭘까요?

분포는 속에 두고… 부를 때마다 거기서 사진을 하나씩 뽑아 내놓으면요? 여러 번 부르면 뽑힌 사진들이 분포의 모양을 그려 줄 테고요.

위젯에서 「분포에서 24개 뽑기」를 누를 때마다 점이 다르게 찍힌 게 그거였네요. 게임 뽑기도 확률표를 보여 주지 않지만, 사람들이 수천 번 뽑은 기록을 모으면 확률표가 거의 그대로 드러나잖아요. 생성기는 부를 때마다 하나씩 뽑는 기계예요.