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

암기: 같은 입력에 같은 답이면 룩업 테이블이다

생성은 무작위여야 한다는 데까지 왔지만, 라벨을 넣은 MLP는 「3」을 몇 번 넣어도 같은 그림을 내놓았다. 이 MLP는 파라미터 204,304개짜리 신경망이지만, 입력이 라벨 열 가지뿐이니 평생 내놓을 수 있는 그림도 열 장뿐이다. 그 열 장을 표에 적어 두면 신경망을 지워도 같은 그림을 내놓는다. 같은 입력에 늘 같은 답을 내는 생성기는, 속이 무엇이든 입력의 가짓수만큼 줄이 있는 룩업 테이블과 같다. 데이터베이스에서 꺼내 주는 것과 다를 바가 없다.

그렇다면 무작위로 꺼내면 어떨까? 학습 그림이 이미 6,131장의 3을 갖고 있으니, 그 가운데 하나를 무작위로 골라 주면 그림은 진짜 3이고 부를 때마다 달라진다.

역사: 주사위로 미뉴에트를 짓는 표

무작위로 고른 조각을 이어 붙여 새 곡을 지은 사람이 있다. 베를린의 음악가 요한 필리프 키른베르거(Johann Philipp Kirnberger)는 1757년 『언제든 준비된 폴로네즈·미뉴에트 작곡가(Der allezeit fertige Polonoisen- und Menuettencomponist)』를 펴냈다. 제목대로, 작곡을 배우지 않은 사람도 주사위만 있으면 춤곡을 지어 낼 수 있게 한 책이다. 그는 미뉴에트의 마디 자리마다 후보 마디를 미리 지어 두고, 같은 자리의 후보끼리는 어느 것을 끼워도 앞뒤가 이어지게 했다. 쓰는 사람은 주사위 하나나 둘을 던지고, 나온 눈에 맞는 마디를 표에서 자리마다 하나씩 골라 이어 붙인다. 주사위 하나로 고르는 표에서는 자리마다 후보가 여섯이고, 미뉴에트에 실은 마디는 모두 96개다. 자리가 열여섯이니 주사위가 고를 수 있는 곡은 6¹⁶, 약 2조 8천억 가지다.

주사위 하나로 고르는 미뉴에트 표의 구조. 마디 자리(열) 열여섯마다 주사위 눈 1~6에 맞춘 후보 마디가 하나씩 있고, 자리마다 던진 눈(맨 아래)이 그 열의 마디 하나(초록)를 고른다. 칸 속 번호는 설명을 위해 차례로 붙인 것으로 키른베르거 표의 마디 번호가 아니다. (sources/teaching-generation/history_dice.py)
주사위 하나로 고르는 미뉴에트 표의 구조. 마디 자리(열) 열여섯마다 주사위 눈 1~6에 맞춘 후보 마디가 하나씩 있고, 자리마다 던진 눈(맨 아래)이 그 열의 마디 하나(초록)를 고른다. 칸 속 번호는 설명을 위해 차례로 붙인 것으로 키른베르거 표의 마디 번호가 아니다. (sources/teaching-generation/history_dice.py)

표 속 마디 하나하나는 이미 지어 둔 것이지만, 주사위가 고른 조합은 어느 악보에도 없던 곡이 된다. 학습 그림 한 장을 전부 무작위로 꺼내 주면 늘 이미 있는 그림이 나오지만, 키른베르거의 표는 조각을 무작위로 골라 이어 붙인다. 무작위를 통째에 쓰느냐 조각에 쓰느냐가 베끼기와 짓기를 갈랐다. 다만 곡이 몇조 가지여도 마디는 모두 표에 있던 96개 가운데서 나온다. 같은 방식으로 섀넌(Claude Shannon)은 1948년 책을 펴 가며 단어를 이어 붙여 영어처럼 보이는 글을 지었다.

김민준 M01
김민준

주사위로 표에서 마디를 고르는 거면 지금은 코드 열 줄이면 되겠는데요. 마디 96개를 배열에 넣고 난수로 고르면 끝이에요.

선생님 T02
선생님

고르는 일은 그렇죠. 키른베르거가 애쓴 것은 표를 채우는 일이었어요. 같은 자리 후보끼리는 어느 것을 끼워도 앞뒤가 이어져야 했잖아요. 이웃한 두 자리만 보면 이어 붙는 조합이 몇 가지예요?

김민준 M01
김민준

앞 자리 여섯에 뒷자리 여섯이니까 36가지요. 이음매가 열다섯 군데니까… 540쌍이네요. 그걸 다 손으로 맞춘 거예요?

이서연 S06
이서연

잠깐, 이음매 540쌍이 다 괜찮다고 곡 전체가 괜찮은지는 모르잖아요. 곡은 2조 8천억 가지인데, 다 들어 봤을 리는 없고요.

선생님 T01
선생님

하루에 천 곡씩 쳐 봐도 770만 년이 걸려요. 악보를 받아 대신 쳐 줄 기계가 없으니, 키른베르거는 마디를 지을 때 자기 머릿속의 화성 규칙으로 이음매를 맞춰 두는 수밖에 없었어요.

이서연 S01
이서연

섀넌은 책을 펴서 실제로 이어진 단어를 따라갔는데, 키른베르거한테는 그렇게 따라갈 데이터가 없었던 거네요. 무엇이 무엇 뒤에 자연스럽게 오는지가 그 사람 머릿속에만 있었고요.

김민준 M07
김민준

그런데 그렇게 몇조 곡을 뽑아도 마디는 다 표에 있던 96개잖아요. 그럼 주사위 미뉴에트는 새 곡이에요, 아니면 아주 큰 표에서 한 줄 찾아본 거예요?

찾아보기 생성기 넷

학습 그림을 그대로 써서 만들 수 있는 가장 단순한 생성기 둘을 평균 MLP 옆에 세워 보자. 학습 그림을 꺼내 주기만 하는 생성기가 어떤 점수를 받는지 알아야 다른 생성기의 점수를 읽을 수 있으므로, 가장 단순한 것부터 고른다. 「대표 그림 찾아보기」는 「3」을 받으면 학습 3 가운데 평균 그림에 가장 가까운 한 장을 늘 돌려준다. 「무작위 찾아보기」는 학습 3 6,131장 가운데 한 장을 무작위로 골라 돌려준다. 기준으로는 학습에 쓰지 않은 시험 그림의 3(실제로 새로 쓰인 3)을 함께 놓는다.

「3」으로 100번씩 불러 세 가지를 잰다. 서로 다른 그림이 몇 장 나왔나(다양성), 그림이 얼마나 3답게 선명한가(회색 칸 비율. 시험 그림은 6%대), 그리고 학습 그림을 얼마나 벗어났나(새로움)인데, 새로움은 내놓은 그림과 가장 가까운 학습 그림 사이의 거리로 잰다.

새로움(x^)=min⁡i=1,…,N∥x^−xi∥2\text{새로움}(\textcolor{#1b9e77}{\hat{x}}) = \min_{i = 1, \dots, \textcolor{#3c4bff}{N}} \lVert \textcolor{#1b9e77}{\hat{x}} - \textcolor{#1b9e77}{x}_i \rVert^2
x^생성기가 내놓은 그림 하나xii번째 학습 그림N학습 그림 수 (60,000)새로움가장 가까운 학습 그림까지의 784칸 제곱 거리. 0이면 학습 그림 그대로\begin{array}{ll} \textcolor{#1b9e77}{\hat{x}} & \text{생성기가 내놓은 그림 하나} \\ \textcolor{#1b9e77}{x}_i & \text{i번째 학습 그림} \\ \textcolor{#3c4bff}{N} & \text{학습 그림 수 (60,000)} \\ \text{새로움} & \text{가장 가까운 학습 그림까지의 784칸 제곱 거리. 0이면 학습 그림 그대로} \end{array}
생성기 100번 불러 나온 서로 다른 그림 새로움 (100번 평균) 회색 칸 (라벨 「3」)
평균 MLP 1 22.8 27.0%
대표 그림 찾아보기 1 0 7.1%
무작위 찾아보기 99 0 6.7%
시험 그림의 3 (기준) 100 24.3 6.4%
라벨 「3」을 여덟 번 넣어 받은 그림(왼쪽)과, 그 그림마다 60,000장 가운데 가장 가까운 학습 그림(오른쪽, 아래 숫자는 784칸 제곱 거리). 평균 MLP와 대표 그림 찾아보기는 여덟 번 모두 같은 그림이다. 무작위 찾아보기는 매번 다르지만 오른쪽에 똑같은 그림이 있다(거리 0). 맨 아래 시험 그림은 학습에 없던 3이라 가장 가까운 학습 그림과도 떨어져 있다. 그림 자료: MNIST(CC BY-SA 3.0).
라벨 「3」을 여덟 번 넣어 받은 그림(왼쪽)과, 그 그림마다 60,000장 가운데 가장 가까운 학습 그림(오른쪽, 아래 숫자는 784칸 제곱 거리). 평균 MLP와 대표 그림 찾아보기는 여덟 번 모두 같은 그림이다. 무작위 찾아보기는 매번 다르지만 오른쪽에 똑같은 그림이 있다(거리 0). 맨 아래 시험 그림은 학습에 없던 3이라 가장 가까운 학습 그림과도 떨어져 있다. 그림 자료: MNIST(CC BY-SA 3.0).

무작위 찾아보기는 다양하고 선명하지만, 내놓는 그림 하나하나가 학습 그림과 똑같아서 새로움이 0이다. 실제로 새로 쓰인 3은 그렇지 않다. 시험 그림의 3 1,010장은 가장 가까운 학습 그림에서도 평균 24.2, 가장 가까운 것도 9.2 떨어져 있고, 시험 그림 10,000장 가운데 학습 그림과 똑같은 것은 한 장도 없다. 평균 MLP는 거꾸로 새로움이 22.8로 기준과 비슷한데 회색 칸이 네 배이므로, 새로움 하나만 보면 흐린 평균 그림도 새 그림으로 통과한다.

이렇게 생성기가 학습 그림을 그대로, 또는 거의 그대로 다시 내놓는 것을 암기 (학습 그림을 그대로 꺼내 주기 / memorization)라 한다. 대표 그림 찾아보기와 무작위 찾아보기는 암기만 하는 생성기다. 늘 같은 것을 꺼내든 무작위로 꺼내든, 학습 데이터를 꺼내 주는 데 머물면 데이터베이스다. 우리가 바라는 생성기는 표의 맨 아래 줄처럼 다양하고, 선명하고, 새로워야 한다.

ML에서: 디퓨전 모델에서 학습 그림 꺼내기

큰 그림 생성 모델도 암기를 한다. 칼리니(Nicholas Carlini)와 동료들은 2023년, 글을 받아 그림을 그리는 Stable Diffusion v1.4 의 학습 데이터에서 가장 많이 겹쳐 실린 그림 수십만 장의 설명 글을 골라, 글마다 수백 장씩 모두 1억 장이 넘게 그렸다. 같은 글로 그린 그림들 가운데 서로 거의 같은 그림이 여럿 나오면 암기를 의심했고, 학습 그림과의 거리로 확인해 학습 그림을 거의 그대로 되살린 그림을 백 장 정도 찾아냈다. 다양성이 무너져 같은 글에 같은 그림이 거듭 나오는 것이 암기의 단서였다.

문제 7. 점심 메뉴 추천 앱

학교 식당 메뉴판에 메뉴가 30개 있다. 앱 A는 기분(좋음, 보통, 피곤, 우울, 신남) 가운데 하나를 받아 정해진 규칙대로 메뉴 하나를 추천한다. 앱 B는 기분과 상관없이 메뉴판에서 하나를 무작위로 고른다. (가) 앱 A가 평생 추천할 수 있는 메뉴는 많아야 몇 가지인가? (나) 앱 B를 30일 동안 하루 한 번 쓰면 서로 다른 메뉴를 평균 몇 가지 받는가? (다) 두 앱 가운데 메뉴판에 없는 새 메뉴를 추천할 수 있는 것은?

기분 다섯 가지를 받아 정해진 규칙으로 고르는 앱 A와 기분과 상관없이 무작위로 고르는 앱 B, 두 앱이 고르는 메뉴판(메뉴 30개)
기분 다섯 가지를 받아 정해진 규칙으로 고르는 앱 A와 기분과 상관없이 무작위로 고르는 앱 B, 두 앱이 고르는 메뉴판(메뉴 30개)
김민준 M01
김민준

(가)는 규칙이 아무리 복잡해도 기분 다섯 가지에 답이 하나씩이니까 다섯 가지요.

이서연 S01
이서연

(나)는 메뉴 하나가 30일 동안 한 번도 안 나올 확률이 (29/30)³⁰ = 0.36이니까, 30 × (1 − 0.36) = 19.2가지야.

김민준 M06
김민준

30번 썼는데 19가지밖에 안 돼? 겹치는 날이 그렇게 많아?

선생님 T01
선생님

30개에서 30번 뽑아 하나도 안 겹칠 확률은 대충 얼마쯤일까요?

이서연 S03
이서연

30!/30³⁰이니까… 계산해 보면 1조 분의 1쯤이에요. 겹치는 게 보통이네요.

선생님 T14
선생님

(다)는요?

김민준 M01
김민준

둘 다 못 해요. A는 정해진 다섯 개 안에서, B는 날마다 다르긴 해도 메뉴판 30개 안에서만 골라요.

이서연 S07
이서연

고르는 방법이 규칙이든 무작위든, 고르는 곳이 메뉴판이면 메뉴판 밖으로는 못 나가네.

문제 8. 무작위 찾아보기를 100번 부르면

무작위 찾아보기는 학습 그림의 3 6,131장 가운데 한 장을 고르게 뽑는다. (가) 100번 부를 때 같은 그림이 두 번 이상 나올 확률은? (나) 100번 불러 나오는 서로 다른 그림 수의 기댓값은? (다) 몇 번 부르면 겹칠 확률이 반을 넘는가? (라) 서로 다른 그림이 99장 나왔다면, 이 생성기가 새 그림을 99장 만든 것인가?

무작위 찾아보기를 100번 부르는 모습. 부를 때마다 학습 그림의 3 6,131장 모두에서 한 장을 고르게 뽑는다
무작위 찾아보기를 100번 부르는 모습. 부를 때마다 학습 그림의 3 6,131장 모두에서 한 장을 고르게 뽑는다
이서연 S01
이서연

100번 뽑는데 그림이 6,131장이니까, 겹칠 확률은 100 ÷ 6,131, 1.6%쯤 아닐까?

선생님 T01
선생님

그 100 ÷ 6,131은 무엇과 무엇이 겹칠 확률이에요?

이서연 S04
이서연

그림 한 장이 앞에서 뽑은 어느 한 장과… 아, 겹치는 건 뽑은 그림 두 장의 짝이에요. 100장이면 짝이 100 × 99 ÷ 2 = 4,950쌍이고, 짝마다 겹칠 확률이 1/6,131이면 겹치는 짝이 평균 0.81쌍이에요. 1.6%보다 훨씬 크겠어요.

김민준 M01
김민준

제대로 구하려면 겹치지 않을 확률을 곱하면 돼. 둘째는 6,130/6,131, 셋째는 6,129/6,131, … 백째까지 곱하면 0.444. 겹칠 확률은 0.556이야.

이서연 S07
이서연

절반이 넘네. 생일 문제구나. 몇십 명만 모여도 생일이 같은 사람이 나오는 거.

선생님 T01
선생님

(나)와 (다)는요?

김민준 M01
김민준

메뉴 문제처럼 하면 돼요. 그림 하나가 100번 동안 한 번도 안 나올 확률이 (1 − 1/6,131)¹⁰⁰이니까 6,131 × (1 − 그 값) = 99.2장이요. (다)는 돌려 보니 92번에서 0.497, 93번에서 0.504라 93번이에요.

선생님 T14
선생님

(라)는요?

김민준 M04
김민준

99장이 다 다르니까 새 그림을 99장 만든 거죠.

선생님 T01
선생님

그 99장 하나하나의 새로움, 가장 가까운 학습 그림까지의 거리는 얼마예요?

김민준 M06
김민준

학습 그림을 그대로 꺼냈으니 다 0이요. 서로는 달라도 하나하나는 학습 그림이네요.

이서연 S08
이서연

서로 다르다는 건 생성기가 내놓은 그림끼리 비교한 거고, 새롭다는 건 학습 그림과 비교한 거라 잣대가 다르구나.

김민준 M07
김민준

그래서 다양성과 새로움을 따로 재야 하는군요. 하나가 좋아도 다른 하나는 0일 수 있으니까.

문제 9. 두 3을 반반 섞으면

무작위 찾아보기를 고쳐, 학습 그림의 3을 두 장 무작위로 골라 칸마다 평균 낸 그림을 내놓게 했다. 100번 부르면 서로 다른 그림이 100장이고, 새로움(가장 가까운 학습 그림까지의 제곱 거리)의 평균은 23.4로 시험 그림 3의 24.3과 비슷하다. (가) 이 생성기는 암기를 벗어났는가? (나) 회색 칸(밝기 0.2~0.8) 비율이 시험 그림 3은 6.4%, 이 생성기는 18.8%다. 무엇을 뜻하는가? (다) 다양하고, 선명하고, 새로우려면 무작위는 무엇을 고르는 데 쓰여야 할까?

학습 그림의 3 두 장을 무작위로 골라 784칸마다 평균 내는 생성기와, 문제에 주어진 100번 부른 결과(서로 다른 그림 수, 새로움, 회색 칸)
학습 그림의 3 두 장을 무작위로 골라 784칸마다 평균 내는 생성기와, 문제에 주어진 100번 부른 결과(서로 다른 그림 수, 새로움, 회색 칸)
김민준 M02
김민준

됐네요! 다양하고 새로워요. 학습 그림이 아니니까 암기도 아니고요.

선생님 T01
선생님

평균 MLP의 새로움은 얼마였죠?

김민준 M04
김민준

22.8이요. 평균 MLP도 새로움은 시험 그림이랑 비슷했어요. 그런데 흐렸죠.

이서연 S01
이서연

(나)가 그 얘기야. 회색 칸이 세 배야. 획이 다른 자리에 있는 두 3을 겹치니 획이 두 겹으로 번져. 평균 MLP가 6,131장을 섞었다면 이건 두 장을 섞은 거고.

김민준 M06
김민준

사진 두 장을 반투명하게 겹치면 얼굴이 두 겹으로 보이는 거랑 같네. 어느 사진과도 다른 사진이긴 한데, 그렇게 생긴 사람은 없어.

선생님 T14
선생님

이 생성기에서 무작위는 무엇을 골랐어요?

이서연 S01
이서연

어느 학습 그림 두 장을 꺼낼지만요. 그림의 생김새는 꺼낸 그림을 섞는 정해진 규칙이 정했어요.

김민준 M08
김민준

그러니까 무작위가 「어느 학습 그림을 꺼낼까」를 고르면 데이터베이스나 그걸 섞은 것밖에 안 되고, 획의 자리나 기울기나 굵기 같은 생김새 자체를 골라야 하는군요.

선생님 T01
선생님

그 생김새를 고르는 무작위를 신경망 어디에 넣고, 그때 무엇을 정답으로 가르칠지가 남은 물음이에요.