생성을 가르치는 법: 분류기를 뒤집으면

내재적 확률성: 라벨을 알아도 남는 분산

라벨을 넣은 MLP는 3들의 평균을 그렸고, 실제 3 그림들과의 제곱 거리는 평균 45.0이 남았다. 학습한 모델이 기대에 못 미치면 흔히 「더 크게, 더 오래」를 떠올리는데, 이 45.0도 그렇게 하면 줄어들까? 답하려면 남은 오차가 어디서 오는지부터 봐야 한다. MLP의 출력은 이미 평균 그림이었으니, 남은 오차는 3들이 평균 그림에서 떨어진 정도이고, 3들끼리 얼마나 다른지를 나타낸다.

같은 3, 6,131가지

왼쪽: MNIST 학습 그림 가운데 라벨이 「3」인 6,131장에서 무작위로 고른 24장. 가운데: 6,131장의 픽셀 평균. 오른쪽: 칸마다 6,131장의 밝기가 흩어진 정도(표준편차, 진할수록 큼). 표준편차가 큰 칸은 획이 지나가는 띠 전체에 퍼져 있다. 그림 자료: MNIST(CC BY-SA 3.0).
왼쪽: MNIST 학습 그림 가운데 라벨이 「3」인 6,131장에서 무작위로 고른 24장. 가운데: 6,131장의 픽셀 평균. 오른쪽: 칸마다 6,131장의 밝기가 흩어진 정도(표준편차, 진할수록 큼). 표준편차가 큰 칸은 획이 지나가는 띠 전체에 퍼져 있다. 그림 자료: MNIST(CC BY-SA 3.0).

학습 그림에서 3을 두 장 무작위로 골라 784칸의 제곱 거리를 재면 평균 89.9다. 한편 3들의 평균 그림과 5들의 평균 그림 사이는 9.7, 3과 8의 평균 그림 사이는 13.2다. 아무 3 두 장이 「평균 3」과 「평균 5」보다 아홉 배쯤 멀다. 위 그림 오른쪽의 표준편차 지도를 보면 3들끼리의 차이는 어느 한 칸에 몰리지 않고 획이 지나가는 띠 전체에 퍼져 있다. 사람마다 획의 자리, 기울기, 굵기, 고리의 크기가 다르기 때문이다.

라벨 사이 분산과 라벨 안 분산

학습 그림 60,000장이 얼마나 흩어져 있는지를 재려고, 그림마다 전체 평균 그림과의 제곱 거리를 재서 평균 내면 52.73이다(784칸의 분산을 모두 더한 값, 분산 합). 라벨을 알면 전체 평균 대신 그 라벨의 평균 그림에서 재면 되고, 그러면 41.80이 남는다. 라벨이 줄여 준 분산 합은 10.93으로 전체의 21%뿐인데, 이 분해를 식으로 적으면 이렇다.

E∥x−E[x]∥2=E∥E[x∣y]−E[x]∥2+E∥x−E[x∣y]∥2\mathbb{E}\lVert \textcolor{#1b9e77}{x} - \mathbb{E}[\textcolor{#1b9e77}{x}] \rVert^2 = \mathbb{E}\big\lVert \mathbb{E}[\textcolor{#1b9e77}{x} \mid \textcolor{#0093b8}{y}] - \mathbb{E}[\textcolor{#1b9e77}{x}] \big\rVert^2 + \mathbb{E}\big\lVert \textcolor{#1b9e77}{x} - \mathbb{E}[\textcolor{#1b9e77}{x} \mid \textcolor{#0093b8}{y}] \big\rVert^2
x학습 그림 하나 (784칸)y그 그림의 라벨 (0 9)E[x]학습 그림 전체의 평균 그림E[x∣y]라벨이 y인 그림들의 평균 그림 (조건부 평균)왼쪽전체 분산 합: 52.73오른쪽 첫째 항라벨 사이 분산 (라벨마다의 평균 그림끼리의 분산): 10.93오른쪽 둘째 항라벨 안 분산 (라벨을 알아도 남는 분산): 41.80\begin{array}{ll} \textcolor{#1b9e77}{x} & \text{학습 그림 하나 (784칸)} \\ \textcolor{#0093b8}{y} & \text{그 그림의 라벨 (0~9)} \\ \mathbb{E}[\textcolor{#1b9e77}{x}] & \text{학습 그림 전체의 평균 그림} \\ \mathbb{E}[\textcolor{#1b9e77}{x} \mid \textcolor{#0093b8}{y}] & \text{라벨이 } y \text{인 그림들의 평균 그림 (조건부 평균)} \\ \text{왼쪽} & \text{전체 분산 합: } 52.73 \\ \text{오른쪽 첫째 항} & \text{라벨 사이 분산 (라벨마다의 평균 그림끼리의 분산): } 10.93 \\ \text{오른쪽 둘째 항} & \text{라벨 안 분산 (라벨을 알아도 남는 분산): } 41.80 \end{array}

라벨 사이 분산과 라벨 안 분산이 그냥 더해지는 것은, 라벨마다의 평균 그림에서 벗어난 차이 x − E[x ∣ y]가 그 라벨 안에서 평균 0이라 서로 곱한 항이 사라지기 때문이다.

라벨 안 분산 41.80은 신경망 없이 데이터만으로 계산한 값이다. 그런데 라벨을 넣은 MLP의 학습 손실(그림 한 장의 784칸 제곱 오차 합의 평균)이 41.86이다. 신경망이 배운 끝이 데이터만 보고 계산한 라벨 안 분산과 거의 같다.

반대 방향은 딴판이다. 같은 MNIST에서 분류기는 시험 그림의 94.8%에 0.9가 넘는 확률을 주고, 시험 그림의 크로스 엔트로피는 0.077 nat이다(nat은 자연로그로 잰 정보의 단위. 0이면 정답을 확률 1로 맞힌 것). 그림을 보면 라벨은 거의 정해지지만, 라벨을 보면 그림은 거의 정해지지 않는다.

이렇게 조건을 알아도 답에 남는 흩어짐, 모델이 아니라 데이터 자체에 들어 있는 흩어짐을 내재적 확률성 (데이터에 원래 들어 있는 흩어짐 / aleatoric uncertainty)이라 한다. 라벨 하나로는 분산 합의 79%가 정해지지 않고, 그림을 내놓으려면 생성기가 이 라벨 안 분산을 어떻게든 채워야 한다. 라벨 안에는 그 79%를 정할 정보가 없으니, 채우는 방법은 3들이 흩어진 모양대로 하나를 골라 내는 뽑기뿐이다. 생성이 본래 무작위일 수밖에 없는 것은 이 때문이다.

ML에서: 모델을 키워도 남는 손실

언어 모델에서도 모델을 키워도 줄지 않는 손실이 숫자로 잡혔다. 호프만(Jordan Hoffmann)과 동료들은 2022년, 언어 모델의 손실을 「모델을 키우면 줄어드는 항」, 「학습 데이터를 늘리면 줄어드는 항」, 그리고 둘 다 줄이지 못하는 상수 항의 합으로 맞췄다. 상수 항은 토큰 하나에 1.69 nat이었고, 논문은 이 항을 「자연 글의 엔트로피」에 해당한다고 적었다. 앞 문맥을 다 알아도 다음 낱말이 하나로 정해지지 않아 남는 손실이다.

문제 4. 두 반의 시험 점수

1반과 2반은 학생 수가 같다. 수학 시험 평균은 1반 70점, 2반 80점이고, 반 안에서 점수의 표준편차는 두 반 모두 10점이다. (가) 학생 한 명의 점수를 전교 평균 하나로 맞히면 제곱 오차의 평균은 얼마인가? (나) 몇 반인지 듣고 그 반의 평균으로 맞히면? (다) 학생 수를 두 배로 늘리면 (나)의 값이 줄어드는가?

학생 수가 같은 두 반의 수학 점수(평균 70점과 80점, 반 안 표준편차 10점)
학생 수가 같은 두 반의 수학 점수(평균 70점과 80점, 반 안 표준편차 10점)
이서연 S01
이서연

전교 평균은 75점이고, 반 안 표준편차가 10점이니까 (가)는 10² = 100이에요.

선생님 T01
선생님

2반 학생 하나를 75점으로 맞히면, 그 학생은 어디서부터 빗나가요?

김민준 M02
김민준

2반 평균이 80점이니까 거기서부터 벌써 5점 빗나가고 시작해요. 1반 학생도 반대쪽으로 5점이고요.

이서연 S04
이서연

아, 표준편차 10점은 반 평균에서 잰 거였네요. 전교 평균에서 재면 반 평균이 5점씩 벗어난 것도 더해야 해요. 100 + 5² = 125.

김민준 M01
김민준

(나)는 반 평균으로 맞히니까 반 사이 분산 25가 빠지고 100이 남아. 반을 알려 줘서 줄어든 건 125 가운데 25, 20%야.

선생님 T14
선생님

(다)는요?

김민준 M04
김민준

학생이 많아지면 평균이 더 정확해지니까 100도 줄지 않을까요?

선생님 T01
선생님

1반 학생을 두 배로 늘려도 반 평균은 70점, 반 안 표준편차는 10점 그대로라고 해 봐요. 1반 학생 한 명을 70점으로 맞히면 얼마나 빗나가요?

김민준 M06
김민준

제곱 오차로 평균 10² = 100이요. 학생 수는 계산에 안 들어가네요. 남은 100은 같은 반 학생끼리 점수가 다른 정도라서, 몇 반인지만 들어서는 줄일 수가 없구나.

이서연 S07
이서연

MNIST에서 라벨이 분산 합을 21%만 줄인 거랑 같은 구조야. 반이 라벨, 점수가 그림이고. 라벨을 알아도 41.80이 남은 것처럼 반을 알아도 100이 남아.

문제 5. 라벨 안 분산의 양 끝

학습 그림 x와 라벨 y의 분산 합을 「라벨 사이 분산」과 「라벨 안 분산」으로 나눈다. (가) 학습 그림의 3 6,131장이 모두 한 장의 복사본이었다면 3의 라벨 안 분산은 얼마인가? 그때 「3」을 받아 그림을 내놓는 일은 어떤 일이 되는가? (나) 라벨을 그림과 상관없이 무작위로 붙였다면 라벨 사이 분산과 라벨 안 분산은 각각 얼마쯤이 되는가? (다) 실제 MNIST에서 라벨 안 분산이 가장 작은 숫자는 1(22.5), 가장 큰 숫자는 2(50.8)다. 왜 그럴까?

분산 합을 나누는 두 거리의 도식. 전체 평균 그림에서 라벨마다의 평균 그림까지(라벨 사이), 라벨마다의 평균 그림에서 학습 그림 하나까지(라벨 안). 784칸을 2차원으로 줄여 그린 것
분산 합을 나누는 두 거리의 도식. 전체 평균 그림에서 라벨마다의 평균 그림까지(라벨 사이), 라벨마다의 평균 그림에서 학습 그림 하나까지(라벨 안). 784칸을 2차원으로 줄여 그린 것
이서연 S01
이서연

(가)는 모든 3이 평균 그림과 똑같으니까 0이야.

선생님 T01
선생님

그럼 그 3을 내놓는 생성기는 무엇을 하면 돼요?

김민준 M02
김민준

그 한 장을 꺼내 주면 끝이죠. 뽑을 것도 없어요. 생성이라기보다 복사네요.

선생님 T01
선생님

(나)는요?

김민준 M04
김민준

라벨이 엉망이면 라벨 사이 분산이 더 커지지 않을까요? 라벨끼리 평균이 더 들쭉날쭉해질 것 같은데요.

선생님 T14
선생님

라벨을 아무렇게나 붙이면, 「3」 라벨이 붙은 그림들 속에는 어떤 숫자들이 들어 있을까요?

김민준 M06
김민준

0부터 9까지가 고루 섞여 있겠네요. 그럼 「3」 라벨의 평균 그림은 전체 평균 그림이랑 거의 같아지고… 다른 라벨도 다 그래요. 라벨 사이 분산은 오히려 0 가까이로 가요.

이서연 S01
이서연

그러면 라벨 안 분산이 전체 52.73을 거의 다 가져가겠다. 라벨이 아무것도 알려 주지 않으니까.

선생님 T01
선생님

실제 MNIST의 21%는 (가)와 (나)의 두 극단 사이 어디쯤이에요?

이서연 S01
이서연

라벨 사이 분산이 0인 끝에 훨씬 가까워요. 라벨이 정해 주는 건 일부고, 그림의 생김새 대부분은 라벨 밖에 있어요.

선생님 T01
선생님

(다)는요?

김민준 M01
김민준

1은 막대 하나라 사람마다 다르게 쓸 거리가 별로 없어요. 2는 아래에 고리를 넣는 사람도 있고 꺾는 사람도 있고요.

이서연 S07
이서연

그러면 라벨 안 분산이 라벨마다 다르구나. 생성기는 1을 그릴 때보다 2를 그릴 때 골라야 할 것이 두 배쯤 많은 거네.

선생님 T01
선생님

두 분산이 그냥 더해지던 건 왜였죠?

이서연 S01
이서연

라벨마다의 평균에서 벗어난 차이가 그 라벨 안에서 평균 0이라 곱한 항이 사라지니까요. 선형대수에서 직교하는 두 성분의 길이 제곱을 그냥 더하는 피타고라스 정리랑 같아요.

문제 6. 신경망을 아홉 배로 키우면

라벨을 넣고 그림을 받는 MLP를 10 → 256 → 784(파라미터 204,304개)에서 10 → 1024 → 1024 → 784(1,864,464개)로 키우고, 학습 그림 전체를 10번이 아니라 30번 돌렸다. 작은 MLP의 학습 손실은 41.86이었다. (가) 큰 MLP의 학습 손실은 얼마나 내려갈 것 같은가? (나) 실제로는 1번 돌린 뒤 42.12, 5번 41.95, 10번 41.87, 30번 41.83이었다. 무엇을 뜻하는가? (다) 「3」을 넣은 출력과 3들의 평균 그림 사이 제곱 거리는 작은 MLP가 0.09, 큰 MLP가 0.042다. 큰 MLP는 무엇을 더 잘하게 되었나?

작은 MLP(10 → 256 → 784)와 큰 MLP(10 → 1024 → 1024 → 784)의 구조, 큰 MLP를 학습하며 잰 학습 손실(1·5·10·30번 돌린 뒤)과 작은 MLP의 학습 손실 41.86
작은 MLP(10 → 256 → 784)와 큰 MLP(10 → 1024 → 1024 → 784)의 구조, 큰 MLP를 학습하며 잰 학습 손실(1·5·10·30번 돌린 뒤)과 작은 MLP의 학습 손실 41.86
김민준 M01
김민준

파라미터가 아홉 배니까 꽤 내려가겠죠. 30 밑으로는 갈 것 같은데요.

선생님 T01
선생님

(나)의 숫자를 데이터만으로 계산한 라벨 안 분산 41.80 옆에 놓아 봐요.

김민준 M04
김민준

41.83이면 41.80에서 0.03 위예요. 서른 번을 돌려도 거기 붙어서 안 내려가네요.

이서연 S01
이서연

41.80은 라벨만 받는 함수라면 무엇이든 넘을 수 없는 하한이야. 제곱 오차를 가장 작게 하는 답이 조건부 평균이었고, 조건부 평균에서 잰 오차가 바로 41.80이니까.

선생님 T14
선생님

그럼 큰 MLP가 키운 덩치는 어디에 쓰였을까요? (다)를 봐요.

김민준 M07
김민준

평균 그림에 더 바짝 붙었어요. 0.09가 0.042로요. 평균을 더 정확히 그리는 데만 쓰였네요. 흐린 건 그대로고요.

선생님 T01
선생님

모델이 덜 배워서 생긴 오차는 모델을 키우고 데이터를 늘리면 줄어요. 데이터에 원래 있는 분산은 줄지 않아요. 큰 MLP는 덜 배워서 생긴 오차를 거의 0으로 만들었고, 남은 41.8은 거의 다 데이터에 원래 있는 분산이에요.

이서연 S08
이서연

그럼 생성기가 할 일은 이 41.8을 줄이는 게 아니라, 라벨 안 분산을 그대로 그려 내는 거네요. 손실 하나만 내려다보고 있으면 그게 안 보이고요.

김민준 M01
김민준

보드게임에서 실력이 늘면 수를 잘못 두는 일은 줄어도, 주사위 눈은 못 맞히는 거랑 같네요. 실력으로 줄일 수 있는 실수와 처음부터 주사위에서 오는 운이 따로 있어요.