← 갤러리
언어 모델

다음 단어를 맞히는 기계

휴대전화 자판은 다음 낱말을 짐작해 줍니다. 그 짐작을 아주 잘하게 만들면 무엇이 될까요? 1913년 마르코프가 시 한 편의 글자를 센 일에서 오늘의 큰 언어 모델⁠(language model)⁠까지, 밑바닥에는 확률의 곱셈 규칙⁠(chain rule of probability)⁠과 로그 하나가 있습니다.

이 글의 처럼 점선이 그어진 숫자는 좌우로 끌 수 있고(키보드 ←/→도 됩니다), 색이 칠해진 같은 말은 눌러서 바꿀 수 있습니다. 밑줄 친 말에 마우스를 올리면 그림에서 그 부분이 빛납니다. 그림 속의 점과 화살표는 대부분 끌어서 옮길 수 있고, 표의 칸에 마우스를 올리면 그 칸의 뜻이 나옵니다. 휴대폰에서는 마우스를 올리는 대신 누르면 됩니다.

휴대전화에서 "오늘 저녁에는"까지 치면 자판 위에 "집에", "비가", "뭐" 같은 낱말이 뜹니다. 자판은 다음에 올 낱말을 짐작하고, 그럴듯한 순서로 늘어놓습니다. 짐작을 수로 적으면 낱말마다 붙은 확률⁠(probability)⁠이 됩니다. "집에"는 0.35, "비가"는 0.20, "우주로"는 0.002 하는 식입니다. 이렇게 가능한 낱말마다 확률을 매긴 목록(모두 더하면 1)을 확률 분포라고 합니다. 앞의 글을 받아 다음 낱말의 확률 분포를 내놓는 장치를 언어 모델이라고 부릅니다.

다음 낱말만 맞히는 일이 대단해 보이지는 않습니다. 그런데 문장 전체의 확률은 다음 낱말의 확률들로 정확히 쪼개집니다. 작은 예로 봅시다. 어떤 글 모음에서 문장의 40%가 '나는'으로 시작하고, '나는'으로 시작한 문장 가운데 절반이 이어서 '밥을'이라고 합시다. 그러면 '나는 밥을'로 시작하는 문장은 전체의 0.4 × 0.5 = 0.2, 곧 20%입니다. '나는 밥을' 다음에 '먹는다'가 올 비율이 2/3이면 '나는 밥을 먹는다'로 시작하는 문장은 0.2 × 2/3 ≈ 0.13입니다. 앞에서부터 '지금까지가 주어졌을 때 다음 낱말의 확률'을 차례로 곱하면 그렇게 시작하는 글의 확률이 나오고, 문장이 끝났다는 표시까지 하나의 낱말로 쳐서 곱하면 문장 전체의 확률이 됩니다.

이것을 기호로 적으려면 두 가지 표기가 필요합니다. P(A)P(A)는 'A가 일어날 확률', P(B∣A)P(B \mid A)는 'A가 일어났을 때 B가 일어날 확률'이고 세로줄은 '~가 주어졌을 때'라고 읽습니다. 위의 예에서 P(밥을∣나는)=0.5P(\text{밥을} \mid \text{나는}) = 0.5입니다. 낱말이 w1,w2,…,wnw_1, w_2, \dots, w_n으로 이어진 글(w₁은 첫째 낱말, wₙ은 n째 낱말)이라면

P(w1,w2,…,wn)=P(w1) P(w2∣w1) P(w3∣w1,w2)⋯P(wn∣w1,…,wn−1)P(w_1, w_2, \dots, w_n) = P(w_1)\, P(w_2 \mid w_1)\, P(w_3 \mid w_1, w_2) \cdots P(w_n \mid w_1, \dots, w_{n-1})

입니다. 이것은 어림이 아닙니다. 조건부 확률⁠(conditional probability)⁠의 정의 P(A,B)=P(A) P(B∣A)P(A, B) = P(A)\,P(B \mid A)('A와 B가 함께 일어날 확률은 A의 확률에 A가 일어났을 때 B의 확률을 곱한 것', 위의 0.4 × 0.5 = 0.2)를 되풀이해 적용한 항등식이고, 확률의 곱셈 규칙 또는 연쇄 규칙이라고 부릅니다. 그러니 앞의 글이 무엇이든 다음 낱말의 확률을 정확히 아는 기계는 모든 글의 확률을 정확히 아는 기계와 같습니다. 어려움은 식이 아니라, 끝없이 많은 '앞의 글'마다 그 확률을 어떻게 알아내느냐에 있습니다.

이 글의 질문은 이것입니다. 다음 낱말을 맞히는 일만으로 무엇을 할 수 있고, 무엇은 할 수 없는가? 「말을 세는 기계」는 언어를 규칙으로 볼지 확률로 볼지를 둘러싼 2,400년의 논쟁을 따라갔습니다. 이 글은 그 가운데 '세는 쪽'의 길을 끝까지 따라가며, 부품을 하나씩 손으로 다시 만듭니다. 세기, 놀람을 재는 자, 0을 메우는 법, 낱말의 좌표, 어텐션⁠(attention)⁠, 위치, 토큰⁠(token)⁠, 규모, 주사위 굴리기, 사람의 선호. 그다음 챗GPT 이후의 몇 해가 이 부품들을 어디로 가져갔는지 보고, 마지막 절에서는 이 수학이 설명하는 것과 설명하지 못하는 것을 나누어 봅니다.

1 · 1913년 페테르부르크세어서 맞히기: 마르코프의 가정

'앞의 글'은 끝없이 다양해서, 모든 앞의 글마다 다음 낱말의 확률을 따로 알 수는 없습니다. 이 절의 물음은 가장 단순한 해결책이 무엇이고 그것이 무엇을 잃느냐입니다. 답은 '앞의 한두 낱말만 보고, 세어서 비율을 낸다'입니다.

1913년 1월 상트페테르부르크의 과학 아카데미에서 확률론자 안드레이 마르코프는 푸시킨의 운문 소설 『예브게니 오네긴』의 첫 글자 2만 개를 모음과 자음으로 나눈 결과를 발표했습니다. 모음의 비율은 0.432였습니다. 그런데 바로 앞 글자가 모음이면 다음 글자가 모음일 확률은 0.128로 떨어지고, 앞 글자가 자음이면 0.663으로 올랐습니다. 다음 글자의 확률은 앞 글자에 달려 있습니다. 이 셈이 나온 논쟁의 사정은 「말을 세는 기계」 5절에 있습니다.

마르코프가 쓴 모형은 한 가지를 과감하게 버립니다. 다음 글자는 바로 앞 글자에만 달려 있고, 그보다 앞의 것은 잊어도 된다고 봅니다. 다음 상태의 확률이 지금 상태에만 달린 이런 과정이 마르코프 연쇄⁠(Markov chain)⁠입니다. 앞의 곱셈 규칙에서 긴 조건을 짧은 조건으로 바꾸는 것이니, 여기서 처음으로 어림이 들어옵니다.

P(wi∣w1,…,wi−1)  ≈  P(wi∣wi−1)P(w_i \mid w_1, \dots, w_{i-1}) \;\approx\; P(w_i \mid w_{i-1})

≈는 '거의 같다'는 기호입니다. 말로 읽으면 "i째 낱말의 확률을 따질 때, 앞의 낱말을 모두 보는 대신 바로 앞 낱말 하나만 보아도 거의 같다"고 가정하는 것입니다. 물론 실제 글에서는 멀리 있는 낱말도 중요하니, 이 가정은 틀린 줄 알면서 쓰는 단순화입니다.

앞 낱말 하나를 보는 모형을 바이그램('둘씩 묶음'이라는 뜻), 앞 낱말 n−1n-1개를 보는 모형을 n-그램⁠(n-gram)⁠ 언어 모델이라고 합니다. 확률은 세어서 정합니다. '나는' 뒤에 온 낱말이 모두 4번이고 그 가운데 '밥을'이 2번이면 P(밥을∣나는)=2/4P(\text{밥을} \mid \text{나는}) = 2/4입니다. 아래 표는 짧은 문장 열 개(나는 밥을 먹는다, 나는 물을 마신다, 나는 책을 읽는다, 나는 밥을 좋아한다, 너는 밥을 먹는다, 너는 책을 좋아한다, 너는 책을 읽는다, 고양이는 생선을 먹는다, 고양이는 물을 마신다, 고양이는 생선을 좋아한다)에서 센 낱말 쌍입니다. 문장의 처음과 끝도 낱말처럼 셉니다.

줄은 앞 낱말, 칸은 다음 낱말입니다. 칸의 수는 그 쌍이 나온 횟수이고, 색이 짙을수록 그 줄 안에서의 비율(조건부 확률)이 큽니다. 노란 테두리는 지금 문장이 지나는 칸이고, 그 가운데 한 번도 나오지 않은 칸은 빨간 테두리로 표시합니다. 칸에 마우스를 올리면 확률을 계산해 보여 줍니다.

문장 를 골라 보거나 ↻ 문장 뽑기를 눌러 모델이 문장을 지어내게 해 보세요. 지어내기는 ⟨시작⟩ 줄에서 비율대로 낱말 하나를 뽑고, 뽑힌 낱말의 줄로 가서 또 뽑기를 ⟨끝⟩이 나올 때까지 되풀이하는 것입니다.

문장
확률

이 작은 표에 언어 모델의 두 얼굴이 다 들어 있습니다. 하나는 일반화입니다. 이 모델이 만들 수 있는 문장은 모두 12가지인데, 그 가운데 10가지는 배운 문장이고 2가지('너는 밥을 좋아한다', '나는 책을 좋아한다')는 한 번도 본 적 없는 문장입니다. 조각을 이어 붙여 새 문장을 만든 것입니다. 다른 하나는 0의 문제입니다. '고양이는 밥을 먹는다'는 멀쩡한 문장이지만 '고양이는' 다음에 '밥을'이 온 적이 없어서 확률이 정확히 0입니다. 곱셈의 한 인수가 0이면 나머지가 아무리 커도 곱은 0입니다. 3절에서 이 0이 왜 치명적인지, 어떻게 메우는지를 봅니다.

세어서 나눈 비율은 아무렇게나 고른 추정이 아닙니다. 이 비율은 학습 문장 열 개가 나올 확률, 곧 가능도⁠(likelihood)⁠를 가장 크게 만드는 값입니다. '나는' 줄로 확인해 봅시다. 학습 문장에서 '나는' 뒤에 '밥을'이 2번, '물을'과 '책을'이 1번씩 왔습니다. 세어서 나눈 비율 (0.5, 0.25, 0.25)을 쓰면 이 네 번의 관찰이 나올 확률은 0.5×0.5×0.25×0.25≈0.01560.5 \times 0.5 \times 0.25 \times 0.25 \approx 0.0156입니다. 조금 다른 (0.4, 0.3, 0.3)을 쓰면 0.4×0.4×0.3×0.3=0.01440.4 \times 0.4 \times 0.3 \times 0.3 = 0.0144로 더 작습니다. 어떤 다른 비율을 넣어도 0.0156보다 커지지 않습니다.

일반적인 증명 보기

한 줄에서 다음 낱말 jj가 cjc_j번 나왔다고 합시다. 관찰 전체의 확률은 pjp_j를 cjc_j번씩 곱한 것이고, 로그를 취하면(로그는 곱을 합으로 바꾸고, 큰 수에 더 큰 값을 주니 가장 큰 곳이 그대로입니다) ∑jcjlog⁡pj\sum_j c_j \log p_j가 됩니다. 이것을 확률의 합이 1이라는 조건 ∑jpj=1\sum_j p_j = 1 아래 가장 크게 하는 문제이고, 조건이 있는 최대화 문제를 푸는 라그랑주 승수법으로 풀면 pj=cj/∑kckp_j = c_j / \sum_k c_k, 곧 세어서 나눈 비율이 나옵니다.

이 '가능도를 가장 크게'라는 원리는 오늘의 큰 언어 모델을 훈련하는 원리와 똑같습니다. 달라진 것은 확률을 표에 적어 두느냐, 계산하는 함수⁠(function)⁠로 두느냐입니다.

정리하면, n-그램 모델은 '다음 낱말은 바로 앞의 몇 낱말에만 달려 있다'고 가정하고, 그 조건부 확률을 학습 글에서 세어 나눈 비율로 정합니다. 이 비율은 학습 글의 가능도를 가장 크게 하는 값이고, 조각을 이어 새 문장을 만들 수 있지만, 본 적 없는 쌍에는 확률 0을 줍니다.

2 · 1948–1951년 머리힐놀람을 재는 자: 섀넌의 추측 게임

두 언어 모델 가운데 어느 쪽이 더 나은지 어떻게 잴까요? 이 절의 답은 '모델이 실제로 나온 글자에 얼마나 놀랐는가'를 재는 것입니다. 그 자가 이 글 전체를 꿰는 양, 교차 엔트로피⁠(cross-entropy)⁠가 됩니다.

35년 뒤 벨 연구소의 클로드 섀넌은 마르코프의 셈을 통신 공학으로 가져왔습니다. 1948년 「통신의 수학적 이론」에서 그는 앞의 글자 몇 개로 다음 글자를 뽑는 기계가 차수(보는 앞 글자의 수)를 올릴수록 영어를 닮아 가는 것을 보였고(「말을 세는 기계」 5절), 무엇보다 불확실성을 재는 자를 만들었습니다.

확률 pp인 일이 일어났을 때의 놀람을 −log⁡2p-\log_2 p비트로 잽니다. log⁡2\log_2는 '2를 몇 번 곱해야 그 수가 되는가'를 묻는 로그이니, −log⁡2p-\log_2 p는 '2를 몇 번 곱해야 1/p가 되는가'입니다. 확률이 1/2인 일은 2를 한 번 곱하면 2이니 1비트, 1/8인 일은 23=82^3 = 8이니 3비트, 확실한 일(p = 1)은 0비트입니다. 비트는 '예/아니오' 질문 하나로 얻는 정보의 양입니다. 확률 1/8인 일은 여덟 가지 가운데 하나를 가려내는 것이고, 예/아니오 질문 세 번이면 여덟 가지를 절반씩 좁혀 가려낼 수 있으니 3비트입니다. 드문 일일수록 크게 놀랍니다. 놀람을 확률로 가중 평균⁠(mean)⁠한 것, 곧 각 경우의 놀람에 그 확률을 곱해 모두 더한 것이 엔트로피⁠(entropy)⁠입니다.

H(p)=−∑xp(x) log⁡2p(x)H(p) = -\sum_x p(x)\,\log_2 p(x)

식의 ∑x\sum_x('시그마 엑스')는 일어날 수 있는 모든 경우 x에 대해 뒤의 값을 더하라는 기호이고, p(x)p(x)는 경우 x의 확률입니다. 그러니 식은 '경우마다 (확률) × (놀람)을 구해 모두 더하라'를 적은 것입니다. 공정한 동전이면 앞과 뒤가 각각 1/2이라 H=12×1+12×1=1H = \tfrac12 \times 1 + \tfrac12 \times 1 = 1비트입니다. 앞이 0.9, 뒤가 0.1인 찌그러진 동전이면 앞의 놀람은 −log⁡20.9≈0.152-\log_2 0.9 \approx 0.152비트, 뒤의 놀람은 −log⁡20.1≈3.32-\log_2 0.1 \approx 3.32비트이니, 엔트로피는 0.9×0.152+0.1×3.32≈0.470.9 \times 0.152 + 0.1 \times 3.32 \approx 0.47비트로 줄어듭니다. 대개 앞이 나오니 평균적으로 덜 놀라는 것입니다. 엔트로피는 결과가 얼마나 짐작하기 어려운지를 잽니다.

1951년 논문 「인쇄된 영어의 예측과 엔트로피」에서 섀넌은 사람을 예측 기계로 썼습니다. 글의 앞부분을 보여 주고 다음 글자를 맞힐 때까지 부르게 한 뒤, 몇 번 만에 맞혔는지를 적었습니다. 글자 26개와 빈칸을 합한 27개 기호에서 아무렇게나 찍으면 한 글자에 log⁡227≈4.75\log_2 27 \approx 4.75비트가 드는데, 앞의 글을 길게 본 사람은 대부분 첫 번째나 두 번째 추측에 맞혔습니다. 섀넌은 이 기록에서 영어 한 글자의 엔트로피가 대략 0.6비트와 1.3비트 사이라고 어림했습니다.

섀넌은 여기서 한 걸음 더 나갔습니다. 글 대신 '추측 횟수의 줄'(그는 이것을 줄인 글이라고 불렀습니다)만 보내도, 받는 쪽에 똑같이 추측하는 쌍둥이가 있다면 원래 글을 되살릴 수 있습니다. 쌍둥이는 자기 추측을 차례로 대 보다가 받은 횟수째의 추측을 적으면 됩니다. 줄인 글은 대부분 1이라 아주 짧게 부호화할 수 있습니다. 잘 맞히는 것과 짧게 적는 것은 같은 일입니다. 아래에서는 같은 게임을 사람 대신 작은 모델이 합니다. 모델이 아는 것은 『이상한 나라의 앨리스』 첫머리 약 1,600글자에서 센 글자의 이음뿐입니다.

문장은 , 모델이 보는 앞 글자 수는 입니다. 한 글자씩 넘기며 모델이 어떤 순서로 추측하는지 보세요.

위 줄은 드러난 글자, 아래 줄은 모델이 그 글자를 몇 번째 추측에서 맞혔는지입니다(섀넌의 '줄인 글'). 칸의 색은 놀람의 크기로, 초록은 쉽게 맞힌 글자, 분홍은 크게 놀란 글자입니다. 막대는 다음 글자에 대한 모델의 확률을 큰 것부터 늘어놓은 것이고, 노란 막대가 정답입니다. 모델은 보지 못한 조합에도 작은 확률을 주도록 짧은 문맥의 확률을 섞어 씁니다(3절).

지금까지 드러난 글자의 평균 놀람은 한 글자에 비트이고, 문장 전체로는 비트입니다. 첫 추측에 맞힌 글자는 개이고, 줄인 글 전체는 입니다. 앞 글자 수를 바꾸면 문장 전체의 평균 놀람이 (비트)로 달라집니다.

'본 적 있는 문장'에서는 앞 글자를 많이 볼수록 놀람이 줄어, 넷을 보면 한 글자에 0.84비트까지 내려갑니다. 사람의 기록과 비슷해 보이지만 속은 전혀 다릅니다. 모델은 이 문장을 외웠을 뿐입니다. '처음 보는 문장'으로 바꾸면 앞 글자 둘을 볼 때 2.63비트로 가장 낮고, 셋과 넷에서는 오히려 2.73비트, 2.88비트로 나빠집니다. 1,600글자로는 긴 문맥의 비율을 믿을 만하게 셀 수 없기 때문입니다. 섀넌의 예문 "there is no reverse on a motorcycle"은 앨리스에 나오지 않는 낱말이 많아 어떤 차수에서도 4비트 가까이 듭니다. 사람이 1비트 안팎으로 맞히는 까닭은 세상과 영어를 알기 때문이고, 그 차이가 언어 모델이 70년 동안 메워 온 틈입니다.

이제 이 글 전체를 꿰는 양을 정의할 수 있습니다. 모델이 매긴 확률을 qq라 하고, 글 w1,…,wnw_1, \dots, w_n의 각 자리에서 실제로 나온 것에 모델이 준 확률로 놀람을 잽니다. 그 평균이 교차 엔트로피입니다. 예를 들어 세 자리에서 모델이 실제로 나온 글자에 1/2, 1/4, 1/2을 주었다면, 놀람은 1, 2, 1비트이고 교차 엔트로피는 그 평균 4/3 ≈ 1.33비트입니다. 식으로 쓰면 다음과 같습니다.

L(q)=−1n∑i=1nlog⁡2q(wi∣w1,…,wi−1)L(q) = -\frac{1}{n} \sum_{i=1}^{n} \log_2 q(w_i \mid w_1, \dots, w_{i-1})

로그에는 곱을 합으로 바꾸는 성질(log⁡(ab)=log⁡a+log⁡b\log(ab) = \log a + \log b)이 있습니다. 그래서 곱셈 규칙과 합치면 이 값은 −1nlog⁡2q(w1,…,wn)-\frac1n \log_2 q(w_1, \dots, w_n), 곧 글 전체에 모델이 준 확률의 로그를 글자 수로 나눈 것과 같습니다. 위의 예라면 글 전체의 확률 12×14×12=116\tfrac12 \times \tfrac14 \times \tfrac12 = \tfrac1{16}의 놀람 4비트를 3으로 나눈 것입니다. 그래서 교차 엔트로피를 줄이는 것과 가능도를 키우는 것은 같은 일입니다.

이제 모델의 확률 q와 실제 언어를 구별해 봅시다. 사람들이 실제로 쓰는 글이 어떤 확률 분포 pp에서 나온다고 보고, 이것을 참 분포라고 부릅니다. 우리는 p를 모르고, 모델의 q로 흉내 낼 뿐입니다. 글이 길어질수록 위의 평균 놀람은 기댓값⁠(expected value)⁠ H(p,q)=−∑xp(x)log⁡2q(x)H(p, q) = -\sum_x p(x) \log_2 q(x)에 다가갑니다. 기댓값은 '아주 많이 되풀이했을 때의 평균'이라는 뜻입니다. 식을 읽으면, 실제로는 p의 비율로 나오는 결과 x마다 모델의 놀람 −log⁡2q(x)-\log_2 q(x)를 매기고 평균을 낸 것입니다(길게 이어지는 글에서 평균이 이 값에 다가가려면 글을 내는 과정에 몇 가지 가정이 필요합니다). 이 값은 다시 둘로 나뉩니다.

H(p,q)=H(p)+DKL(p ∥ q),DKL(p ∥ q)=∑xp(x)log⁡2p(x)q(x)  ≥  0H(p, q) = H(p) + D_{\mathrm{KL}}(p \,\|\, q), \qquad D_{\mathrm{KL}}(p \,\|\, q) = \sum_x p(x) \log_2 \frac{p(x)}{q(x)} \;\ge\; 0

DKL(p ∥ q)D_{\mathrm{KL}}(p \,\|\, q)는 'p에 대한 q의 KL 발산⁠(KL divergence)⁠'이라고 읽습니다. 등식은 로그의 성질 log⁡(p/q)=log⁡p−log⁡q\log(p/q) = \log p - \log q로 확인됩니다. KL 발산을 풀면 ∑xp(x)log⁡2p(x)−∑xp(x)log⁡2q(x)\sum_x p(x)\log_2 p(x) - \sum_x p(x)\log_2 q(x)이고, 여기에 H(p)=−∑xp(x)log⁡2p(x)H(p) = -\sum_x p(x)\log_2 p(x)를 더하면 첫 합이 지워져 교차 엔트로피만 남습니다.

동전으로 두 항을 확인해 봅시다. 실제로는 공정한 동전(p = 1/2, 1/2)인데 모델이 앞 0.9, 뒤 0.1이라고 믿는다면, 교차 엔트로피는 12×0.152+12×3.32≈1.74\tfrac12 \times 0.152 + \tfrac12 \times 3.32 \approx 1.74비트입니다. 동전 자체의 엔트로피 1비트에 잘못 믿은 값 0.74비트가 더해진 것입니다. 일반적으로도 그렇습니다. 앞의 항 H(p)H(p)는 언어 자체의 불확실성이라 모델이 어쩔 수 없고, 뒤의 항 KL 발산은 모델이 참 분포에서 벗어난 만큼의 손해이며 q=pq = p일 때만 0입니다.

KL 발산은 0보다 작아지지 않으므로, 교차 엔트로피는 언어의 엔트로피보다 작아질 수 없습니다. 그래서 교차 엔트로피를 줄이는 훈련은 참 분포에 다가가는 훈련입니다. 오늘의 큰 언어 모델이 줄이는 손실이 정확히 이 양입니다. 다만 보통은 밑이 2인 로그 대신 밑이 ee(약 2.718)인 자연로그⁠(natural logarithm)⁠를 써서, 단위가 비트가 아니라 '내트⁠(nat)⁠'입니다. 1내트는 약 1.44비트입니다.

잘 맞히는 것과 짧게 적는 것이 같다는 섀넌의 쌍둥이 이야기는 정리가 되었습니다. 산술 부호화⁠(arithmetic coding)⁠는 확률이 큰 기호일수록 짧은 부호를 쓰도록, 글 전체를 0과 1 사이의 작은 구간 하나로 적는 방법입니다. 모델이 매긴 확률로 산술 부호화를 하면, 글 전체의 부호 길이는 −log⁡2q(w1,…,wn)-\log_2 q(w_1, \dots, w_n)비트와 2비트 이내로 차이 납니다. 교차 엔트로피가 낮은 모델은 곧 좋은 압축기이고, 원천 부호화 정리⁠(source coding theorem)⁠는 어떤 압축기도 참 엔트로피 밑으로 내려갈 수 없다고 말합니다. 압축의 쪽에서 본 이야기는 「짧게 보내기」에 있습니다.

정리하면, 놀람은 −log⁡2p-\log_2 p이고, 모델이 실제로 나온 글자에 느낀 놀람의 평균이 교차 엔트로피입니다. 교차 엔트로피는 언어 자체의 엔트로피에 모델의 잘못 믿은 몫(KL 발산)을 더한 것이라, 이것을 줄이는 훈련은 참 분포에 다가가는 훈련이고, 동시에 글을 짧게 적는 법을 배우는 일입니다.

섀넌이 영어 글자의 치우침에 매달린 데에는 전쟁도 한몫했습니다. 그는 2차 세계대전 동안 벨 연구소에서 암호를 연구했고, 1945년의 기밀 보고서에서 글의 여분, 곧 다음 글자를 짐작하게 해 주는 치우침이 암호를 푸는 실마리가 된다는 것을 따졌습니다. 이 보고서는 1949년 「비밀 체계의 통신 이론」으로 공개되었습니다. 글자의 빈도를 세어 암호를 푸는 오래된 방법은 「나머지로 지키는 비밀」에 있습니다.

3 · 1970–90년대 요크타운하이츠퍼플렉시티⁠(perplexity)⁠와 0의 문제

이 절의 물음은 둘입니다. 교차 엔트로피를 사람이 느끼기 쉬운 수로 바꾸면 무엇이 되는가? 그리고 1절에서 본 확률 0, 곧 한 번도 본 적 없는 조합을 어떻게 메우는가?

섀넌의 자가 공학의 도구가 된 곳은 뉴욕주 요크타운하이츠의 IBM 연구소였습니다. 1972년 IBM에 온 프레더릭 옐리네크의 팀은 음성 인식을 확률 문제로 다시 적었습니다. 들린 소리가 주어졌을 때 가장 그럴듯한 문장을 찾되, 그 그럴듯함의 절반을 언어 모델에 맡겼습니다. '인식'과 '인삭'처럼 소리가 비슷한 후보가 있을 때, 어느 쪽이 말이 되는지는 앞의 낱말들이 알려 주기⁠(period)⁠ 때문입니다.

모델을 비교하려면 점수가 필요했습니다. 1977년 무렵 옐리네크, 로버트 머서, 랄리트 발, 제임스 베이커는 검사용 글에서 잰 교차 엔트로피 LL(비트)로 2를 거듭제곱한 값 2L2^L을 쓰자고 했고, 이것을 퍼플렉시티(perplexity)라고 불렀습니다.

PP=2L=q(w1,…,wn)−1/n\mathrm{PP} = 2^{L} = q(w_1, \dots, w_n)^{-1/n}

퍼플렉시티는 '모델이 한 자리마다 평균적으로 몇 개 가운데서 망설이는가'로 읽습니다. 교차 엔트로피가 1비트이면 퍼플렉시티는 21=22^1 = 2로, 매번 동전을 던져 둘 중 하나를 고르는 만큼 망설인다는 뜻입니다. 3비트면 23=82^3 = 8, 곧 여덟 개 가운데서 고르는 만큼입니다. 27개 기호를 고르게 찍는 모델의 퍼플렉시티는 정확히 27이고, 매번 정답에 확률 1을 주는 모델은 1입니다. 식의 오른쪽 끝, 글 전체의 확률을 −1/n-1/n제곱한 꼴은 같은 값을 다르게 적은 것입니다. 2절의 세 자리 예로 확인하면, 교차 엔트로피가 4/3비트이니 퍼플렉시티는 24/3≈2.522^{4/3} \approx 2.52입니다. 글 전체의 확률 1/16을 거꾸로 뒤집은 16의 세제곱근(세 번 곱해 16이 되는 수)도 약 2.52입니다. 한 자리마다 평균 2.52개 가운데서 망설인 셈입니다. 주의할 점이 하나 있습니다. 퍼플렉시티는 무엇을 한 자리로 세느냐에 달려 있어서, 글자 단위 모델과 낱말 단위 모델의 퍼플렉시티는 바로 비교할 수 없습니다. 7절의 토큰에서 이 문제가 다시 나옵니다.

퍼플렉시티에는 까다로운 성질이 있습니다. 검사 글의 한 자리에서라도 모델이 정답에 확률 0을 주면, 곱 전체가 0이 되어 퍼플렉시티가 무한대가 됩니다. 1절의 '고양이는 밥을'이 바로 그런 자리입니다. 셈을 믿되 전부 믿지는 않아야 합니다. 가장 오래된 처방은 모든 칸에 가짜 횟수 kk를 더하는 것입니다.

q(c∣앞)=횟수(앞,c)+k횟수(앞)+27kq(c \mid \text{앞}) = \frac{\text{횟수}(\text{앞}, c) + k}{\text{횟수}(\text{앞}) + 27k}

분자는 '그 앞 다음에 c가 온 횟수'에 k를 더한 것이고, 분모는 '그 앞이 나온 횟수'에 기호 27개 몫의 가짜 횟수 27k를 더한 것입니다. 그래서 한 줄의 확률을 모두 더하면 여전히 1입니다. 예를 들어 어떤 앞 글자가 10번 나왔는데 그 뒤에 'z'가 온 적이 없다면, k = 1일 때 'z'의 확률은 0이 아니라 (0+1)/(10+27)=1/37(0 + 1)/(10 + 27) = 1/37입니다. 대신 자주 본 글자의 확률은 그만큼 조금씩 줄어듭니다.

k=1k = 1이면 라플라스의 계승 규칙⁠(rule of succession)⁠과 같은 꼴입니다. 1814년 『확률에 관한 철학적 시론』에서 그는, 해가 nn일 연속으로 떴다면 내일도 뜰 확률을 (n+1)/(n+2)(n+1)/(n+2)로 어림했습니다. 결과가 '뜬다, 안 뜬다' 둘뿐이니, 뜬 횟수 n에 1을, 전체 횟수 n에 2를 더한 것으로 위의 식과 같은 꼴입니다. 한 번도 보지 않았으면(n = 0) 1/2, 세 번 보았으면 4/5입니다. 모든 확률을 똑같이 그럴듯하다고 본 사전 믿음에서 베이즈 정리⁠(Bayes' theorem)⁠로 얻는 값입니다.

앨리스 첫머리의 앞 80%로 모델을 세우고, 나머지 20%(“in another moment down went alice…”)를 검사 글로 삼아 kk를 바꾸어 봅시다. 모델이 보는 문맥은 이고, log⁡10k=\log_{10} k = , 곧 k=k = 입니다.

가로축은 더하는 가짜 횟수 k(로그 눈금), 세로축은 퍼플렉시티입니다. 파랑은 모델을 세운 학습 글, 분홍은 모델이 보지 못한 검사 글에서 잰 값이고, 속 빈 분홍 원이 검사 퍼플렉시티가 가장 낮은 곳입니다. 노란 점을 좌우로 끌 수 있습니다.

지금 학습 글의 퍼플렉시티는 , 검사 글의 퍼플렉시티는 입니다. 검사 글이 가장 덜 혼란스러운 것은 입니다.

검사 글에는 학습 글에서 한 번도 이어진 적 없는 조합이 있습니다. 그래서 k=0k = 0이면 검사 퍼플렉시티는 무한대이고, 그림의 왼쪽 끝(k=0.001k = 0.001)에서도 바이그램은 13.05나 됩니다. 학습 글의 곡선은 kk가 커질수록 계속 오릅니다. 가짜 횟수는 본 것을 흐리게 할 뿐이니까요. 검사 글의 곡선은 한 번 내려갔다가 다시 오르는 골짜기입니다. 바이그램은 k≈0.18k \approx 0.18에서 10.80, 트라이그램은 k≈0.07k \approx 0.07에서 8.24로, 문맥을 길게 본 쪽이 더 좋습니다. 그런데 k=1k = 1로 두면 트라이그램(12.35)이 바이그램(11.68)보다 나쁩니다. 문맥이 길수록 칸이 많고 칸마다 횟수가 적어서, 가짜 횟수가 진짜 횟수를 더 크게 덮기 때문입니다.

이 골짜기는 과적합⁠(overfitting)⁠의 그림과 같습니다. 학습 글을 잘 맞히는 것과 새 글을 잘 맞히는 것은 다르고, 그 사이를 잇는 손잡이가 정규화입니다. 한 가지 정직하게 밝혀 둘 것이 있습니다. 여기서는 검사 글을 보며 kk를 골랐습니다. 제대로 하려면 손잡이를 고르는 데 쓸 글을 따로 떼어 두고, 검사 글은 마지막에 한 번만 써야 합니다. 그래야 검사 점수가 정말 '처음 보는 글'의 점수가 됩니다(교차 검증⁠, cross-validation⁠).

더 나은 처방은 전쟁 중의 암호 해독에서 나왔습니다. 블레츨리 파크에서 에니그마⁠(Enigma)⁠ 암호를 풀던 튜링은 '다음에 나올 것이 한 번도 본 적 없는 종류일 확률'을 어림할 방법이 필요했습니다. 그의 조수였던 통계학자 어빙 존 굿이 1953년 발표한 답은 간단합니다. NN번 관찰한 가운데 딱 한 번 나온 종류가 N1N_1가지라면, 다음 관찰이 새 종류일 확률은 약 N1/NN_1 / N입니다. 한 번만 본 것이 많다는 것은 아직 못 본 것도 많다는 증거라는 뜻입니다. 예를 들어 새를 100마리 관찰했는데 딱 한 번만 본 종이 10종이라면, 다음 새가 처음 보는 종일 확률은 약 10/100 = 0.1입니다. 반대로 한 번만 본 종이 하나도 없다면, 이미 거의 모든 종을 보았다고 짐작할 수 있습니다. 이 굿–튜링 추정⁠(Good–Turing estimation)⁠은 11절에서 환각⁠(hallucination)⁠을 설명할 때 다시 나옵니다.

그 뒤로 처방은 더 정교해졌습니다. 1987년 IBM의 슬라바 카츠는 긴 문맥의 횟수가 모자라면 짧은 문맥으로 물러서는 방법을 내놓았습니다. 예를 들어 '고양이는 밥을' 다음을 한 번도 본 적 없다면, 앞의 '고양이는'을 버리고 '밥을' 다음에 무엇이 왔는지의 비율을 빌려 씁니다. 1995년 라인하르트 크네저와 헤르만 나이는 '여러 문맥 뒤에 두루 나오는 낱말'을 따로 세는 방법을 내놓았습니다. 영어의 'Francisco'는 자주 나오지만 거의 언제나 'San' 뒤에만 나오니, 처음 보는 문맥 뒤에 올 낱말로는 낮은 확률을 주는 것이 맞습니다. 그래서 물러설 때는 낱말의 빈도 대신 '몇 가지 서로 다른 문맥 뒤에 나왔는가'를 셉니다.

1998년 하버드의 스탠리 첸과 조슈아 굿맨의 비교 연구에서 이 크네저–나이 방식이 가장 좋은 축에 들었습니다. 2절의 그림에서 쓴 '짧은 문맥의 확률 섞기'도 같은 계열의 생각입니다.

정리하면, 퍼플렉시티는 교차 엔트로피를 '평균 몇 개 가운데서 망설이는가'로 바꾼 수이고, 한 자리라도 확률 0을 주면 무한대가 됩니다. 가짜 횟수를 더하거나 짧은 문맥으로 물러서는 방법이 그 0을 메우며, 얼마나 메울지는 학습에 쓰지 않은 글로 골라야 합니다.

이 도구들로 IBM 팀은 1990년 무렵 통계⁠(statistics)⁠ 기계 번역⁠(machine translation)⁠ 캉디드를 만들었습니다. 생각은 이렇습니다. 프랑스어 문장을, 원래는 영어였던 문장이 잡음 섞인 통로를 지나며 일그러진 것으로 봅니다. 잡음 섞인 통로는 전화선처럼 보낸 것을 조금씩 바꾸어 전하는 길을 말합니다. 그러면 번역은 받은 프랑스어에서 가장 그럴듯한 영어 원문을 거꾸로 짐작하는 일이 되고, 그 짐작에 베이즈 정리를 씁니다. 원문이 영어로서 얼마나 그럴듯한지는 언어 모델이 맡습니다(「말을 세는 기계」 7절).

남는 어려움은 원문과 번역문의 낱말이 어떻게 짝지어지는지, 곧 정렬을 아무도 적어 주지 않는다는 것입니다. 1993년 논문의 번역 모형들은 정렬을 직접 보이지 않는 숨은 변수로 두고 EM 알고리즘으로 추정했습니다. EM 알고리즘은 '지금의 모델로 짝을 어림하기'와 '어림한 짝으로 모델을 다시 세기'를 번갈아 되풀이하는 방법입니다. 이 정렬은 5절에서 '어텐션'이라는 새 옷을 입고 돌아옵니다.

옐리네크의 팀이 택한 확률의 길은 당시의 주류와 달랐습니다. 1971년 미국 국방부의 고등 연구 계획국(ARPA)은 5년짜리 음성 이해 연구 계획을 시작했습니다. 낱말 1,000개 규모의 이어진 말을 알아듣는 체계가 목표였고, 카네기 멜런 대학, 스탠퍼드 연구소, BBN 같은 곳이 지원을 받았습니다. 여러 팀이 소리, 문법, 뜻에 관한 전문가의 규칙을 층층이 쌓아 올리는 쪽을 택했습니다. 1976년 목표에 가장 가까이 간 것은 카네기 멜런의 하피였습니다. 하피는 허락된 문장을 모두 하나의 커다란 유한 상태 그물(낱말을 점으로, 이어질 수 있는 낱말 쌍을 화살표로 둔 길 그림)로 미리 펼쳐 두고, 그물 위에서 그럴듯한 길 몇 개만 남기며 찾는 빔 탐색⁠(beam search)⁠을 썼습니다. 모든 길을 다 따라가는 대신 걸음마다 점수가 좋은 몇 개만 들고 가는 방법입니다. 규칙을 쌓아 추론하는 쪽보다 그물 위에서 길을 찾는 쪽이 앞선 셈입니다. 이 길 찾기는 「같은 계산, 다른 덧셈」 6절의 비터비 알고리즘⁠(Viterbi algorithm)⁠과 같은 격자 계산입니다. 옐리네크의 팀은 한 걸음 더 나가, 그물의 확률까지 사람이 정하지 않고 자료에서 세어 채웠습니다. 이 길이 어디까지 갔는지 보여 주는 일화도 있습니다. 1993년 IBM 팀의 피터 브라운과 로버트 머서는 헤지펀드 르네상스 테크놀로지로 옮겨 갔습니다. 말의 확률을 세던 기술이 시장의 확률을 세는 데로 간 것입니다.

라플라스가 해돋이를 예로 든 데에는 철학의 물음이 걸려 있었습니다. 1748년 데이비드 흄은 『인간 지성에 관한 탐구』에서, 해가 내일 뜨지 않는다는 말도 뜬다는 말만큼 모순 없이 생각할 수 있다고 썼습니다. 지금까지 늘 떴다는 경험만으로는 내일을 논리적으로 보증할 수 없다는 것, 곧 귀납의 문제입니다(「배우는 기계」 7절). 계승 규칙은 이 물음에 수로 답하려는 시도로 읽혀 왔습니다. 그러나 반론도 분명합니다. 그 수는 '모든 확률이 똑같이 그럴듯하다'는 사전 믿음을 먼저 받아들여야 나오니, 귀납을 정당화했다기보다 가정 하나로 옮겨 놓았다는 것입니다. 라플라스 자신도 낮과 계절을 다스리는 원리를 아는 사람에게는 그 확률이 훨씬 크다고 덧붙였습니다. 이 절의 가짜 횟수 kk도 같은 종류의 사전 믿음이고, 앞의 그림은 그 믿음의 세기를 학습에 쓰지 않은 글로 고르는 법을 보여 주었습니다.

세는 전통의 20세기. 페테르부르크의 마르코프에서 벨 연구소의 섀넌, 블레츨리 파크의 튜링과 굿, IBM의 옐리네크로 이어지는 수학 줄(파랑)을 보세요. 과학 줄(청록)의 통계 번역이 이 도구들을 모아 씁니다.

4 · 2003년 몬트리올낱말에 좌표를 주다

세는 모형에게 '고양이'와 '강아지'는 아무 관계 없는 두 기호입니다. 이 절의 물음은 이것입니다. 비슷한 낱말끼리 배운 것을 나누어 쓰게 하려면 낱말을 어떻게 나타내야 할까? 답은 낱말마다 좌표, 곧 수 몇 개의 묶음을 주는 것입니다.

세는 모형은 끝내 한 가지 벽을 넘지 못했습니다. 어휘가 10만 낱말이면 앞 두 낱말의 조합만 10만 × 10만 = 100억 가지이고, 그 뒤에 올 낱말까지 곱한 트라이그램(셋씩 묶음) 표의 칸은 101510^{15}개(1 뒤에 0이 15개)입니다. 인터넷의 글을 다 모아도 대부분의 칸은 비어 있습니다. 차원의 저주⁠(curse of dimensionality)⁠입니다. 게다가 세는 모형에게 '고양이'와 '강아지'는 번호가 다른 두 기호일 뿐이라, '고양이가 잔다'를 백 번 보아도 '강아지가 잔다'에 대해서는 아무것도 배우지 못합니다.

2003년 몬트리올 대학의 요슈아 벤지오와 동료 세 사람은 「신경망⁠(neural network)⁠ 확률 언어 모델」에서 다른 길을 냈습니다. 첫 판은 2000년 학회에서 발표되었습니다. 낱말마다 수십 개의 수로 된 벡터(수의 묶음, 곧 여러 차원 공간의 좌표)를 두고, 신경망이 앞 낱말들의 벡터⁠(vector)⁠를 받아 다음 낱말의 확률을 계산하게 한 것입니다.

벡터도 신경망의 가중치(계산에 쓰는 조절 가능한 수들)와 함께, 교차 엔트로피를 줄이는 방향으로 경사 하강법⁠(gradient descent)⁠과 역전파⁠(backpropagation)⁠로 배웁니다. 경사 하강법은 '모든 수를 각각 조금 움직였을 때 손실이 어느 쪽으로 얼마나 변하는가'를 계산해, 손실이 줄어드는 쪽으로 조금씩 옮기기를 되풀이하는 방법입니다. 산에서 눈을 감고 발밑의 기울기⁠(slope)⁠만 느끼며 내려가는 것과 같습니다. 수마다 손실이 변하는 비율을 모은 것을 '기울기'라고 부르는데, 기울기는 손실이 가장 빨리 커지는 쪽을 가리키니 그 반대쪽으로 움직입니다. 역전파는 수가 수백만 개여도 그 기울기를 한 번에 효율적으로 계산하는 방법입니다.

이렇게 훈련하면 비슷한 문맥에 나오는 낱말은 비슷한 벡터로 자리 잡고, 그러면 한 낱말에 대해 배운 것이 비슷한 낱말로 번집니다. 논문은 이것을 '분산 표현⁠(distributed representation)⁠으로 차원의 저주와 싸운다'고 적었습니다. 낱말을 벡터로 나타내는 이 방법이 단어 임베딩⁠(word embedding)⁠입니다.

원리를 평면에서 봅시다. 주어 다섯(고양이가, 강아지가, 아이가, 학생이, 아기가)과 동사 넷(잔다, 먹는다, 짖는다, 읽는다)에 각각 2차원 벡터를 줍니다. 주어 ss 다음에 동사 vv가 올 확률은 두 벡터의 내적⁠(dot product)⁠으로 점수를 매기고 소프트맥스⁠(softmax)⁠로 확률로 바꿉니다.

P(v∣s)=ees⋅ov∑uees⋅ouP(v \mid s) = \frac{e^{\mathbf e_s \cdot \mathbf o_v}}{\sum_{u} e^{\mathbf e_s \cdot \mathbf o_u}}

식에서 es\mathbf e_s는 주어 s의 벡터(그림의 점), ov\mathbf o_v는 동사 v의 벡터(그림의 화살표)이고, 가운데 점은 내적, 곧 두 벡터의 같은 자리끼리 곱해 더한 값입니다. 분모의 Σ는 모든 동사 u에 대해 더한다는 뜻입니다. 소프트맥스는 점수를 지수함수⁠(exponential function)⁠로 양수로 만든 뒤 합이 1이 되게 나눕니다. 예를 들어 세 동사의 점수가 2, 1, 0이면 e2≈7.39e^2 \approx 7.39, e1≈2.72e^1 \approx 2.72, e0=1e^0 = 1이고 합이 약 11.11이니, 확률은 약 0.67, 0.24, 0.09입니다. 점수가 1 높으면 확률이 약 2.7배가 됩니다. 점이 어떤 화살표 쪽으로 멀리 나갈수록 그 동사와의 내적(점수)이 커집니다. 학습 자료는 짧은 문장 21개입니다. 고양이는 자거나(3) 먹고(2), 강아지는 짖거나(3) 먹고(2), 아이는 자고(2) 먹고(2) 읽고(1), 학생은 주로 읽고(3) 가끔 자고 먹으며(1, 1), 아기는 딱 한 번 '아기가 잔다'로만 나옵니다.

낱말의 좌표 (점은 주어, 화살표는 동사)
고른 주어 다음에 올 동사의 확률
왼쪽: 점과 화살표를 모두 끌 수 있고, 점을 누르면 오른쪽에 그 주어의 확률이 나옵니다. 오른쪽: 파란 막대가 모델의 확률, 회색 막대가 학습 자료에서 센 비율입니다.

처음 좌표는 아무렇게나 놓은 것입니다. ▶ 경사 하강 300걸음을 눌러 보세요(↺ 아무렇게나 다시 놓기). 주어 ‘’ 다음에 올 동사에 모델이 주는 확률은 입니다(주어는 눌러서 바꿀 수 있습니다). 학습 자료의 평균 놀람은 한 문장에 비트입니다. 어떤 모델도 이 자료에서는 비트 밑으로 내려갈 수 없습니다(각 주어의 비율을 그대로 외운 모델의 값입니다).

학습이 끝나면 점들이 자리를 잡습니다. '잔다'가 흔한 '고양이가', '아이가', '아기가'는 서로 가까운 곳에 모이고, '강아지가'는 '짖는다' 화살표 쪽으로, '학생이'는 '읽는다' 쪽으로 갑니다. 이제 두 수를 보세요. 모델은 '아기가 먹는다'에 , '강아지가 잔다'에 의 확률을 줍니다. 둘 다 한 번도 본 적 없는 문장이라 세는 모형이라면 0입니다. 아기는 딱 한 번 잔 것밖에 안 보였지만, 자는 쪽에 선 낱말들이 대개 먹기도 하니 먹는다에도 확률이 번진 것입니다. 이제 '강아지가'를 끌어 '고양이가' 위에 포개 보세요. 강아지가 자는 것에 큰 확률을 주게 되지만, 학습 자료의 놀람은 커집니다. 자료는 강아지가 짖는다고 말하기 때문입니다.

왜 이렇게 자리를 잡을까요? 경사 하강이 점을 미는 방향은 한 줄로 적힙니다. 주어 ss의 한 문장에서 손실(여기서는 자연로그로 잰 놀람)의 기울기를 점 es\mathbf e_s에 대해 구하면 ∑v(P(v∣s)−yv) ov\sum_v (P(v \mid s) - y_v)\, \mathbf o_v입니다. 여기서 yvy_v는 실제로 나온 동사이면 1, 아니면 0입니다. 경사 하강은 이 기울기의 반대쪽으로 점을 옮깁니다.

숫자로 읽어 봅시다. '고양이가 잔다'라는 문장 하나를 보았고, 모델이 지금 '잔다'에 0.5, '먹는다'에 0.3, 나머지 둘에 0.1씩 준다고 합시다. 괄호 안의 값은 '잔다'가 0.5 − 1 = −0.5, '먹는다'가 0.3 − 0 = 0.3, 나머지가 0.1씩입니다. 반대쪽으로 옮기니, 점은 '잔다' 화살표 쪽으로 0.5의 세기로 당겨지고 '먹는다' 쪽에서는 0.3, 나머지 쪽에서는 0.1의 세기로 밀려납니다. 곧 한 걸음은 실제로 나온 동사의 화살표 쪽으로 점을 당기고, 모델이 예상했던 동사들의 화살표에서는 예상한 만큼 밀어냅니다. 여러 문장에 걸쳐 모델의 예상이 자료의 비율과 맞으면 당김과 밂이 상쇄되어 멈춥니다.

이 그림은 2차원(벡터 하나에 수 두 개)이라 주어 다섯을 다 따로 표현할 여유가 없고, 그 모자람이 오히려 비슷한 낱말끼리 자리를 나누게 만듭니다. 실제 모델은 수백–수천 차원을 쓰지만, 낱말 수와 문맥 수에 비하면 여전히 좁습니다. 좁은 곳에 많은 것을 담으려면 공통점을 찾아야 하고, 그것이 곧 일반화입니다.

2013년 구글의 토마시 미콜로프와 동료들은 이 생각을 아주 빠르게 만든 word2vec을 내놓았습니다. 낱말의 벡터로 그 둘레 낱말을 맞히게 하되, 어휘 전체에 대한 소프트맥스 대신 '진짜 이웃과 아무렇게나 뽑은 가짜 이웃 가리기'로 계산을 줄였습니다. 300차원쯤의 벡터에서 '왕 − 남자 + 여자'에 가장 가까운 벡터가 '여왕'이라는 예가 유명해졌습니다. 다만 이 결과는 입력한 낱말들을 후보에서 빼고 얻은 것이고, 벡터에는 말뭉치⁠(corpus)⁠의 편견까지 새겨집니다. 이 두 이야기는 「까마귀와 택시」 8절에 있습니다. 가까움은 보통 코사인 유사도⁠(cosine similarity)⁠로 잽니다.

이 벡터가 무엇을 배우는지에도 깔끔한 답이 나왔습니다. 2014년 오메르 레비와 요아브 골드버그는, 가짜 이웃을 kk개씩 쓰는 word2vec이 (차원이 충분하다는 가정 아래) 낱말 ww와 이웃 cc의 점별 상호정보량⁠(pointwise mutual information)⁠

PMI(w,c)=log⁡P(w,c)P(w) P(c)\mathrm{PMI}(w, c) = \log \frac{P(w, c)}{P(w)\,P(c)}

에서 log⁡k\log k를 뺀 값을 두 벡터의 내적으로 맞추는 것과 같다는 것을 보였습니다. PMI는 두 낱말이 우연히 따로 나올 때보다 몇 배 더 자주 함께 나오는지를 로그로 잰 것입니다. 우연이라면 함께 나올 확률이 P(w) P(c)P(w)\,P(c)일 텐데 실제로는 그 두 배라면 PMI는 log 2이고, 딱 우연만큼이면 log 1 = 0입니다.

낱말을 줄에, 이웃 낱말을 칸에 두고 칸마다 PMI를 적은 커다란 표를 떠올려 봅시다. word2vec은 이 표의 모든 칸을 작은 벡터 두 개의 내적으로 맞추려 하는 셈입니다. 큰 표를 몇 개의 중요한 방향으로 요약하는 선형대수⁠(linear algebra)⁠의 방법이 특잇값 분해⁠(singular value decomposition)⁠이고, 큰 표를 작은 벡터들의 내적으로 맞추는 일은 이 방법이 가장 잘하는 일입니다. 낱말의 뜻을 둘레 낱말로 안다는 해리스와 퍼스의 분포 가설(「말을 세는 기계」 4절)이 표를 요약하는 계산, 곧 행렬⁠(matrix)⁠ 분해가 된 것입니다.

정리하면, 낱말에 벡터를 주고 확률을 벡터의 내적과 소프트맥스로 계산하면, 비슷한 문맥에 나오는 낱말이 비슷한 자리에 모여 한 낱말에 대해 배운 것이 이웃 낱말로 번집니다. 그래서 본 적 없는 조합에도 0이 아닌, 그럴듯한 확률을 줄 수 있습니다.

비슷한 생각은 앞서 1986년 제프리 힌턴의 분산 표현 연구와, 1990년 제프리 엘먼이 순환 신경망⁠(recurrent neural network)⁠에게 다음 낱말을 맞히게 한 실험에도 있었습니다. 신경망 밖에서도 같은 무렵 비슷한 생각이 나왔습니다. 정보 검색에는 같은 것을 사람마다 다른 낱말로 부른다는 오랜 골칫거리가 있었습니다. 벨코어(벨 커뮤니케이션스 연구소)의 스콧 디어웨스터, 수전 듀메이 등은 문서마다 낱말이 몇 번 나왔는지 적은 큰 표를 특잇값 분해로 수백 차원으로 줄여, 같은 낱말을 쓰지 않았어도 뜻이 가까운 문서를 찾게 했습니다. 앞에서 본 대로 큰 표를 몇 개의 중요한 방향으로 요약한 것입니다. 벨코어는 1984년 AT&T가 쪼개질 때 벨 연구소에서 갈라져 나온 곳입니다. 1990년에 나온 이 잠재 의미 분석⁠(latent semantic analysis)⁠이 낱말과 문서에 좌표를 준 이른 예입니다.

5 · 2014–2017년멀리 있는 낱말에 주목하기: 어텐션과 트랜스포머⁠(transformer)⁠

"민수는 지영에게 꽃을 주었고 그녀는 웃었다"에서 '그녀는'이 누구인지 알려면 세 낱말 앞의 '지영에게'를 보아야 합니다. 이 절의 물음은 모델이 멀리 떨어진 낱말을 어떻게 볼 수 있게 되었느냐이고, 답이 트랜스포머의 핵심인 어텐션입니다.

벤지오의 모델도 앞 낱말 몇 개만 보았습니다. 문장 전체를 보려면 문장을 읽어 가며 기억을 이어 가는 신경망이 필요합니다. 순환 신경망은 낱말 하나를 읽을 때마다 기억 벡터를 고쳐 쓰고, 그 기억으로 다음 낱말을 맞힙니다. 문제는 학습이었습니다. 멀리 떨어진 두 낱말 사이의 관계를 배우려면 기울기가 그 사이의 모든 걸음을 거꾸로 지나야 하는데, 연쇄법칙⁠(chain rule)⁠에 따라 걸음마다 야코비 행렬(한 걸음 동안 기억이 얼마나 늘거나 주는지를 담은 변화율의 표)이 한 번씩 곱해집니다. 크기가 1보다 작은 수를 수십 번 곱하면 0으로 사라지고, 1보다 큰 수를 곱하면 폭발합니다. 0.9를 50번 곱하면 약 0.005이고, 1.1을 50번 곱하면 약 117입니다. 1991년 제프 호흐라이터의 졸업 논문과 1994년 벤지오 등의 논문이 이 문제를 분석했고, 1997년 호흐라이터와 위르겐 슈미트후버의 LSTM은 기억을 곱하기 대신 더하기로 이어 가는 칸을 두어 이 문제를 크게 누그러뜨렸습니다.

2014년 구글의 일리야 수츠케버, 오리올 비니알스, 꾸옥 레는 LSTM 둘로 번역기를 만들었습니다. 하나가 원문을 끝까지 읽어 벡터 하나로 줄이면, 다른 하나가 그 벡터에서 번역문을 한 낱말씩 만들어 냅니다. 잘 작동했지만 병목이 있었습니다. 문장이 아무리 길어도 모든 것을 같은 길이의 벡터 하나에 담아야 했습니다. 조경현 등이 그해 이런 번역기를 분석해 보니, 문장이 길수록 번역이 눈에 띄게 나빠졌습니다.

같은 해 몬트리올의 드미트리 바다나우, 조경현, 벤지오는 병목을 없앴습니다. 번역문의 낱말을 하나 만들 때마다 원문의 모든 낱말에 점수를 매기고, 소프트맥스로 가중치⁠(weight)⁠를 만들어 원문 낱말들의 벡터를 가중 평균하게 한 것입니다. 모델은 지금 만들 낱말에 필요한 원문 낱말에 '주목'하는 법을 스스로 배웠습니다. 번역문과 원문의 가중치를 표로 그리면 3절의 IBM 모형이 숨은 변수로 두었던 정렬이 나타납니다. 딱딱한 짝짓기가 부드럽고 미분⁠(differentiation)⁠할 수 있는 가중치가 되어 신경망 안으로 들어온 것입니다. 이것이 어텐션(주의)입니다.

2017년 6월 구글의 아시시 바스와니 등 여덟 명은 「필요한 것은 어텐션뿐」에서 순환을 아예 버렸습니다. 문장의 모든 낱말이 각자 세 벡터를 만듭니다. 무엇을 찾는지 묻는 질문 q\mathbf q, 무엇을 담고 있는지 알리는 열쇠 k\mathbf k, 건네줄 내용인 값 v\mathbf v입니다. 낱말 ii는 모든 낱말 jj의 열쇠와 자기 질문의 내적으로 점수를 매기고, 소프트맥스로 가중치를 만들어 값들을 평균합니다. 도서관에서 찾는 주제(질문)를 책등의 제목(열쇠)과 견주어 맞는 책일수록 그 내용(값)을 많이 읽어 오는 것과 비슷합니다.

숫자로 한 번 해 봅시다. 질문이 (1, 0)이고 낱말 둘의 열쇠가 (1, 0)과 (0, 1)이면 점수는 내적 1과 0입니다. 소프트맥스를 거치면 e1/(e1+e0)≈0.73e^1/(e^1 + e^0) \approx 0.73과 0.27이고, 출력은 첫 낱말의 값 73%와 둘째 낱말의 값 27%를 섞은 벡터입니다. 모든 낱말의 벡터를 줄지어 쌓은 행렬(수를 가로세로로 늘어놓은 표)로 쓰면 이 계산 전체가 한 줄입니다.

Attention(Q,K,V)=softmax ⁣(QK⊤d)V\mathrm{Attention}(Q, K, V) = \mathrm{softmax}\!\left(\frac{QK^{\top}}{\sqrt{d}}\right) V

Q, K, V는 모든 낱말의 질문, 열쇠, 값을 한 줄에 하나씩 쌓은 행렬이고, K⊤K^{\top}('K 전치')는 K의 줄과 칸을 맞바꾼 것입니다. d는 질문과 열쇠 벡터의 성분 개수이며, d\sqrt d로 나누는 까닭은 아래에서 봅니다. 행렬의 곱⁠(matrix multiplication)⁠ QK⊤QK^{\top} 한 번에 모든 낱말 쌍의 점수가 나오니, 멀리 떨어진 짝도 한 걸음에 닿고 계산을 그래픽 칩에서 한꺼번에 처리할 수 있습니다. 다음 낱말을 맞히는 모델에서는 한 가지 규칙을 더합니다. 낱말은 자기보다 뒤에 오는 낱말을 볼 수 없게 가립니다. 답을 미리 보면 맞히기가 의미 없어지기 때문입니다. 아래 그림에서 질문 화살표를 끌어 보세요. 낱말마다 손으로 놓은 2차원 열쇠가 있고, 지금 질문하는 낱말은 ‘’입니다(표의 줄을 눌러도 바뀝니다).

질문과 열쇠 (점의 크기 = 어텐션 가중치)
어텐션 가중치 표 (줄마다 합이 1)
왼쪽: 노란 화살표가 고른 낱말의 질문 q이고, 청록 점이 낱말들의 열쇠 k입니다. 분홍 점은 열쇠들을 가중치로 평균한 출력입니다(이 그림에서는 값 v를 열쇠와 같게 두었습니다). 오른쪽: 줄은 질문하는 낱말, 칸은 주목받는 낱말입니다. 빈 칸은 뒤에 오는 낱말이라 가려진 곳입니다.

처음 설정에서 '그녀는'은 '지영에게'에 0.86의 가중치를 줍니다. 지금 고른 낱말의 질문은 의 비율로 가중치를 나누고, 가장 크게 주목하는 낱말은 입니다. '그녀는'의 질문 화살표를 '민수는' 쪽으로 돌리면 가중치가 그쪽으로 옮겨 가고, 출력도 따라갑니다. 방향은 그대로 두고 화살표를 길게 늘이면(지금 길이 ) 점수의 차이가 커져 가중치가 한 낱말로 몰리고, 짧게 줄이면 고르게 퍼집니다. ↺ 질문 되돌리기

식의 d\sqrt d는 이 '길이' 효과를 다스리는 장치입니다. 성분이 많을수록 내적은 더 많은 곱을 더한 것이라 크게 흩어집니다. 정확히 따져 봅시다. 분산⁠(variance)⁠은 값이 평균에서 흩어진 정도를 재는 양으로, 표준편차⁠(standard deviation)⁠의 제곱입니다. 질문과 열쇠의 dd개 성분이 서로 독립(한 성분의 값이 다른 성분에 대해 아무것도 알려 주지 않음)이고 평균 0, 분산 1이라면, 내적 q⋅k=∑i=1dqiki\mathbf q \cdot \mathbf k = \sum_{i=1}^{d} q_i k_i는 평균 0, 분산 dd입니다. 곱 qikiq_i k_i의 분산이 E[qi2] E[ki2]=1E[q_i^2]\,E[k_i^2] = 1(E[·]는 평균, 곧 기댓값)이고 독립⁠(independence)⁠인 것들의 분산은 더해지기 때문입니다. 원 논문의 d=64d = 64이면 분산이 64, 표준편차가 64=8\sqrt{64} = 8이라, 점수들이 흔히 −8에서 8 사이로 흩어집니다. 앞의 숫자 예에서 점수 차이 1이 0.73 대 0.27을 만들었으니, 차이가 8이면 e8≈3000e^8 \approx 3000배라 소프트맥스가 거의 한 낱말에 1을 몰아주고 나머지의 기울기는 거의 0이 됩니다. d\sqrt d로 나누면 분산이 다시 1이 됩니다. 9절에서 보겠지만 이것은 소프트맥스의 '온도'를 d\sqrt d로 두는 것과 같습니다.

트랜스포머의 나머지는 이 어텐션을 겹겹이 쌓는 장치들입니다. 서로 다른 질문·열쇠·값을 쓰는 어텐션 여러 개를 나란히 두고(각각을 '어텐션 머리'라고 부르며, 원 논문은 8개), 그 뒤에 낱말마다 따로 작동하는 작은 신경망을 붙이고, 각 층의 입력을 출력에 더해 넘기는 지름길을 둡니다. 어텐션에는 낱말의 순서라는 개념이 없어서, 위치마다 정해진 무늬의 벡터를 낱말 벡터에 더해 순서를 알려 줍니다(6절). 원 논문의 기본 모델은 이런 층을 6개 쌓았고, 큰 모델은 그래픽 카드 8장으로 3.5일 동안 훈련해 당시 영어–독일어 번역의 최고 기록을 냈습니다. 대가도 있습니다. 모든 쌍을 보니 문장 길이가 nn이면 계산이 n2n^2에 비례합니다(점근 표기법⁠, asymptotic notation⁠).

한 가지 조심할 점이 있습니다. 이 그림의 벡터는 사람이 '그녀는'이 '지영에게'를 보도록 손으로 놓은 것입니다. 실제 모델의 질문과 열쇠는 수백 차원이고 다음 토큰 맞히기로 배운 것이라, 어떤 어텐션이 무슨 일을 하는지 사람이 읽을 수 있는 경우는 일부입니다. 어텐션 가중치가 크다고 해서 그 낱말이 답의 '이유'라는 보장도 없다는 연구가 있습니다. 어텐션은 트랜스포머가 정보를 옮기는 통로이지, 그 자체로 설명은 아닙니다.

정리하면, 어텐션은 낱말마다 질문을 내어 모든 낱말의 열쇠와 내적으로 견주고, 소프트맥스로 만든 가중치로 값들을 섞어 가져오는 계산입니다. 멀리 있는 낱말도 한 걸음에 닿고, 모든 쌍을 행렬의 곱 한 번으로 계산할 수 있으며, 그 대가로 계산량이 길이의 제곱으로 늡니다.

6 · 2017–2025년어디에 있는지 알려 주기: 위치 인코딩⁠(positional encoding)⁠

이 절의 물음은 이것입니다. 어텐션은 토큰이 문장의 몇 번째에 있는지를 어떻게 알까? 답은 '스스로는 모른다, 그러니 따로 알려 주어야 한다'이고, 그 알려 주는 방법이 지난 몇 년 동안 어떻게 바뀌었는지가 이 절의 이야기입니다.

5절의 어텐션에는 이상한 성질이 하나 있습니다. "3 빼기 5"와 "5 빼기 3"은 같은 토큰 세 개로 되어 있지만 답이 다릅니다. 그런데 어텐션이 하는 일은 질문과 열쇠의 내적으로 점수를 매기고 값들을 가중 평균하는 것뿐입니다. '3'이라는 토큰의 결과를 생각해 봅시다. '3'의 질문으로 '3', '빼기', '5' 세 토큰의 열쇠에 점수를 매기고 값을 섞습니다. 두 문장 모두 세 토큰의 벡터가 똑같으니 점수도 섞는 값도 똑같고, 더하는 차례만 다릅니다. 더하기는 차례를 가리지 않으니 '3'의 결과는 두 문장에서 같습니다.

그래서 뒤를 가리는 규칙이 없다면, 토큰의 순서를 섞어도 각 토큰이 받는 결과는 그대로이고 자리만 함께 섞입니다. 식으로 쓰면, 토큰 벡터를 줄지어 쌓은 행렬 XX의 줄을 순열⁠(permutation)⁠ 행렬 PP(줄의 순서를 바꾸는 행렬)로 섞을 때 Attention(PX)=P Attention(X)\mathrm{Attention}(PX) = P\,\mathrm{Attention}(X)입니다. 왼쪽은 '먼저 섞고 어텐션을 계산한 것', 오른쪽은 '어텐션을 계산한 뒤 결과를 같은 방식으로 섞은 것'이고, 둘이 같다는 말입니다. 그러니 누가 어디에 있는지는 따로 알려 주어야 합니다. 그 방법이 위치 인코딩이고, 트랜스포머의 부품 가운데 지난 몇 년 동안 가장 여러 번 바뀐 것이기도 합니다.

2017년 원 논문은 위치마다 정해진 벡터를 토큰 벡터에 더했습니다. 그 벡터를 이해하려면 사인(sin)과 코사인(cos)이 필요합니다. 반지름 1인 원의 중심에서 오른쪽을 가리키던 바늘을 시곗바늘과 반대 방향으로 각도 a만큼 돌렸다고 합시다. 바늘 끝의 가로 좌표가 cos⁡a\cos a, 세로 좌표가 sin⁡a\sin a입니다. 돌리지 않았으면 끝이 (1, 0)이니 cos 0 = 1, sin 0 = 0이고, 직각만큼 돌렸으면 끝이 (0, 1)입니다. 각도는 흔히 라디안⁠(radian)⁠으로 잽니다. 라디안은 한 바퀴를 2π≈6.282\pi \approx 6.28로 재는 단위로, 1라디안은 약 57도입니다.

원 논문은 벡터의 성분을 둘씩 짝지었습니다. 위치가 pos\mathrm{pos}일 때 ii번째 짝(i = 0, 1, 2, …)에 넣는 두 값은 이렇습니다. d는 벡터의 성분 개수입니다.

PE(pos,2i)=sin⁡ ⁣(pos100002i/d),PE(pos,2i+1)=cos⁡ ⁣(pos100002i/d)\mathrm{PE}(\mathrm{pos}, 2i) = \sin\!\left(\frac{\mathrm{pos}}{10000^{2i/d}}\right), \qquad \mathrm{PE}(\mathrm{pos}, 2i+1) = \cos\!\left(\frac{\mathrm{pos}}{10000^{2i/d}}\right)

두 식은 같은 각도 pos/100002i/d\mathrm{pos}/10000^{2i/d}의 sin과 cos입니다. 그러니 한 짝의 두 값은 반지름 1인 원 위의 한 점, 곧 시곗바늘 끝입니다. 분모 100002i/d10000^{2i/d}('10000의 2i/d 제곱')는 짝마다 바늘이 도는 빠르기를 정합니다. 작은 예로 d = 4이면 짝이 둘입니다. 첫 짝(i = 0)의 분모는 100000=110000^0 = 1이라 위치가 한 칸 늘 때마다 바늘이 1라디안씩 돌고, 6칸 남짓에 한 바퀴를 돕니다. 둘째 짝(i = 1)의 분모는 100002/4=10010000^{2/4} = 100이라 한 칸에 0.01라디안씩, 628칸 남짓에 한 바퀴를 돕니다. 위치 3이라면 첫 바늘은 3라디안, 둘째 바늘은 0.03라디안 돈 자리에 있습니다. 실제 d는 수백이라 짝이 수백 개이고, 뒤로 갈수록 느려져 마지막 짝은 수만 칸이 지나야 한 바퀴를 돕니다. 빠르기가 다른 바늘들의 각도를 함께 보면 위치가 하나로 정해집니다. 초침, 분침, 시침을 함께 보면 시각이 정해지는 것과 같습니다.

저자들은 위치마다 벡터를 따로 배우게 해 보아도 결과가 거의 같았다고 적었습니다. 그래도 사인파⁠(sinusoid)⁠를 고른 까닭으로 두 가지를 들었습니다. 하나는 학습 때보다 긴 문장에도 쓸 수 있으리라는 기대입니다. 사인파는 어떤 위치에서든 계산할 수 있기 때문입니다. 다른 하나는 거리입니다. 시곗바늘 그림에서 보면, 위치 pos+k\mathrm{pos}+k의 바늘은 위치 pos\mathrm{pos}의 바늘에서 k칸 몫의 각도만큼 더 돈 것입니다. 다시 말해 위치 pos+k의 벡터는 위치 pos의 벡터를 짝마다 정해진 각도만큼 돌린 것이고, 그 돌리기는 pos와 상관없이 k에만 달립니다(이것을 식으로 확인하는 것이 덧셈정리⁠(addition formula)⁠이고, 돌리기를 행렬로 적은 것이 회전 행렬⁠(rotation matrix)⁠입니다). 그래서 모델이 '몇 칸 떨어졌는가'를 배우기 쉬우리라고 보았습니다. 이 두 기대, 곧 긴 글로 늘여 쓰기와 거리 배우기가 다음 몇 년의 이야기를 이끕니다.

이듬해의 GPT와 BERT는 더 단순한 길을 갔습니다. 위치 0, 1, 2, …마다 벡터를 하나씩 두고 다른 가중치처럼 배우게 한 것입니다. 잘 작동했지만 끝이 분명했습니다. BERT는 512칸, GPT-2는 1,024칸까지만 벡터가 있어서, 그보다 긴 글은 넣을 수조차 없습니다.

다른 쪽에서는 '절대 위치가 아니라 거리가 중요하다'는 생각이 자랐습니다. 절대 위치는 '문장의 7번째'처럼 처음부터 센 자리이고, 거리는 '두 토큰이 3칸 떨어져 있다'처럼 두 토큰 사이의 차이입니다. "나는 밥을 먹는다"가 문장 맨 앞에 있든 백 번째 토큰부터 있든, '밥을'과 '먹는다'의 관계는 같습니다. 2018년 구글의 피터 쇼, 야코프 우스코라이트, 바스와니는 두 토큰의 거리마다 배우는 벡터를 어텐션 점수에 넣었습니다. 기계 번역의 품질은 흔히 BLEU 점수로 잽니다. 기계의 번역이 사람의 번역과 낱말 묶음을 얼마나 겹치게 쓰는지로 매기는 0–100점의 점수입니다. 영어–독일어 번역에서 이 점수가 절대 위치를 쓸 때보다 1.3 높았다고 보고했습니다.

2019년 구글의 T5는 이 생각을 더 단순하게 다듬었습니다. 거리를 구간 32개로 나누되, 가까운 거리는 하나하나 따로 두고, 먼 거리는 멀어질수록 구간의 폭이 일정한 비율로 넓어지게 묶었습니다(로그 간격). 그리고 어텐션 머리마다 구간별로 배운 수 하나를 점수에 더하기만 했습니다.

2021년 중국 선전의 인공지능 회사 주이 테크놀로지의 쑤젠린과 동료들은 두 생각을 하나로 묶었습니다. 위치를 더하는 대신, 질문과 열쇠를 위치에 비례하는 각도만큼 돌립니다. 한 짝의 두 성분을 평면의 점, 곧 원점에서 나가는 화살표로 봅니다. 한 칸에 도는 각도를 θ('세타')라 하고, 위치 mm의 질문은 mθm\theta만큼, 위치 nn의 열쇠는 nθn\theta만큼 돌립니다. 그러면 점수는 두 위치의 차 n−mn - m에만 달립니다.

왜 그런지는 각도만 따라가면 보입니다. 두 화살표의 내적은 두 길이와 사이 각도로 정해지고(길이 × 길이 × 사이 각도의 cos), 돌리기는 길이를 바꾸지 않습니다. 그러니 사이 각도만 보면 됩니다. θ = 10도라고 하고, 돌리기 전 질문이 20도, 열쇠가 50도 방향이라 합시다. 사이 각도는 30도입니다. 질문이 위치 2, 열쇠가 위치 5에 있으면 질문은 20 + 20 = 40도, 열쇠는 50 + 50 = 100도가 되어 사이 각도는 60도입니다. 둘을 모두 세 칸 뒤로 옮겨 위치 5와 8에 두면 질문은 70도, 열쇠는 130도로, 사이 각도는 여전히 60도입니다. 사이 각도는 언제나 '처음의 30도 + (n − m) × 10도'이고, 여기에 m과 n은 차 n − m으로만 들어갑니다.

같은 내용을 행렬로 적으면 이렇습니다.

(Rmθ q)⋅(Rnθ k)=q⊤Rmθ⊤Rnθ k=q⊤R(n−m)θ k(R_{m\theta}\,\mathbf q)\cdot(R_{n\theta}\,\mathbf k) = \mathbf q^{\top} R_{m\theta}^{\top} R_{n\theta}\, \mathbf k = \mathbf q^{\top} R_{(n-m)\theta}\, \mathbf k

식의 RαR_{\alpha}는 평면의 점을 원점 둘레로 각도 α('알파')만큼 돌리는 회전 행렬이고, RαqR_{\alpha}\mathbf q는 '화살표 q를 α만큼 돌린 것'입니다. 위 첨자 ⊤('전치')가 붙은 Rα⊤R_{\alpha}^{\top}는 그 회전⁠(rotation)⁠을 되돌리는 행렬입니다. q⊤Mk\mathbf q^{\top} M \mathbf k는 'q와, k에 M을 곱한 것의 내적'을 적는 방법입니다. 가운데 등호는 이렇게 읽습니다. '돌린 질문과 돌린 열쇠의 내적'은 '질문을 되돌려 놓고, 그만큼 열쇠도 되돌려 놓은 뒤 잰 내적'과 같습니다. 마지막 등호는, 열쇠를 nθ 돌렸다가 mθ 되돌리면 결국 (n − m)θ 돌린 것이라는 뜻입니다. 기호로는 회전을 되돌리는 것이 반대로 도는 것이라 Rα⊤=R−αR_{\alpha}^{\top} = R_{-\alpha}이고, 두 회전을 이으면 각도가 더해져 R−αRβ=Rβ−αR_{-\alpha}R_{\beta} = R_{\beta-\alpha}이기 때문입니다.

복소수⁠(complex number)⁠로 보는 더 짧은 설명

복소수로 보면 더 짧습니다. 짝을 복소수 qq로 보면 돌리기는 eimθe^{im\theta}를 곱하는 것이고(복소수의 곱셈, 오일러 공식⁠(Euler's formula)⁠), 평면 벡터로서의 내적은 Re(q kˉ)\mathrm{Re}(q\,\bar k)(Re는 실수⁠(real number)⁠ 부분, 윗줄은 켤레 복소수⁠(complex conjugate)⁠)이니 점수는 Re(qeimθ keinθ‾)=Re(qkˉ ei(m−n)θ)\mathrm{Re}\big(q e^{im\theta}\,\overline{k e^{in\theta}}\big) = \mathrm{Re}\big(q\bar k\, e^{i(m-n)\theta}\big)입니다.

실제 모델은 질문과 열쇠의 성분을 둘씩 짝지어 d/2d/2개의 짝을 모두 돌립니다. i번째 짝이 한 칸에 도는 각도는 사인파와 같은 θi=10000−2i/d\theta_i = 10000^{-2i/d}, 곧 1/100002i/d1/10000^{2i/d}라디안이고, 점수는 짝마다의 점수를 더한 것입니다. 짝마다 점수가 거리에만 달리니, 그 합도 거리에만 달립니다. 이 회전 위치 임베딩(RoPE)은 메타의 LLaMA(2023)를 비롯해, 오늘날 가중치가 공개된 모델 대부분이 쓰는 방식이 되었습니다.

아래 그림은 짝 하나를 평면에 그린 것입니다. 할 일은 두 가지입니다. '둘 다 한 칸 뒤로'를 눌러 거리는 그대로 두고 두 위치를 함께 옮기며 점수가 변하는지 보고, 오른쪽 표에서 왼쪽 위–오른쪽 아래로 뻗은 대각선(거리가 같은 칸들)의 색을 보세요. 질문의 위치 m=m = , 열쇠의 위치 n=n = , 위치를 넣는 방식은 , 짝은 입니다. → 둘 다 한 칸 뒤로 ↺ q, k 되돌리기

한 짝의 평면 (굵은 화살표의 내적 = 점수)
모든 위치 쌍의 점수
왼쪽: 흐린 화살표는 위치를 넣기 전의 질문 q와 열쇠 k이고(끌어서 바꿀 수 있습니다), 굵은 화살표는 위치를 넣은 뒤의 것입니다. '돌리기'에서는 호가 돌린 각도를, '더하기'에서는 보라 화살표가 더한 위치 벡터를 보여 줍니다(원래는 위치 벡터를 토큰 벡터에 더한 뒤 행렬을 곱하지만, 여기서는 그 행렬을 생략했습니다). 오른쪽: 줄은 질문의 위치 m, 칸은 열쇠의 위치 n이고, 노랑은 양의 점수, 파랑은 음의 점수입니다. 흰검은 테두리가 지금 칸, 분홍 테두리는 거리 n − m이 같은 칸들입니다. 칸을 누르면 그 두 위치를 고릅니다.

지금 점수는 , 거리는 n−m=n - m = 이고, 분홍 테두리의 . 처음 설정(m = 6, n = 2, 중간 쌍)에서 '둘 다 한 칸 뒤로'를 일곱 번 누르면 (13, 9)에 닿는데, 돌리기에서는 점수가 내내 0.50입니다. 질문과 열쇠가 함께 돌 뿐 사이의 각도는 그대로이기 때문입니다. 그래서 오른쪽 표는 대각선을 따라 색이 한결같은 줄무늬가 됩니다. '더하기'로 바꾸면 같은 거리인데도 (6, 2)에서 0.97, (13, 9)에서 0.69로 다르고 줄무늬가 흐트러집니다. 더하기의 점수를 풀어 쓰면 (q+pm)⋅(k+pn)=q⋅k+q⋅pn+pm⋅k+pm⋅pn(\mathbf q + \mathbf p_m)\cdot(\mathbf k + \mathbf p_n) = \mathbf q\cdot\mathbf k + \mathbf q\cdot\mathbf p_n + \mathbf p_m\cdot\mathbf k + \mathbf p_m\cdot\mathbf p_n입니다(p는 위치 벡터). 마지막 항 pm⋅pn\mathbf p_m\cdot\mathbf p_n은 원 위의 두 점, 곧 길이 1인 두 바늘의 내적이라 사이 각도의 cos이니 pm⋅pn=cos⁡((n−m)θ)\mathbf p_m\cdot\mathbf p_n = \cos\big((n-m)\theta\big)이고, 거리에만 달립니다. 그러나 가운데 두 항은 '질문과 n번 자리의 바늘', 'm번 자리의 바늘과 열쇠'의 내적이라 절대 위치에 달립니다. 2017년의 사인파도 거리 정보를 담고는 있었지만, 모델이 그것을 골라 쓰도록 배워야 했던 것입니다.

이제 '느린 쌍'을 골라 보세요. 한 칸에 0.1라디안씩이면 한 바퀴에 칸이 드는데 표는 16칸뿐이라, 표 전체에서 각도가 1.5라디안까지밖에 가지 않습니다. 실제 모델에도 이런 짝이 있습니다. 어텐션 머리 하나의 차원이 128인 LLaMA에서 가장 느린 짝은 한 바퀴에 약 5만 4,000칸이 드는데, 처음 LLaMA가 훈련한 글의 길이는 2,048토큰이었습니다. 64짝 가운데 23짝은 훈련 중에 한 바퀴를 다 돌아 보지 못한 셈입니다. 이 짝들이 글이 길어질 때 문제를 일으킵니다.

2021년 8월 워싱턴 대학의 오피르 프레스, 노아 스미스와 페이스북 AI 연구소의 마이크 루이스는 다른 길을 냈습니다. 위치 벡터를 아예 쓰지 않고, 어텐션 점수에서 거리에 비례하는 벌점을 뺍니다.

점수ij=qi⋅kj−sh (i−j),j≤i\text{점수}_{ij} = \mathbf q_i \cdot \mathbf k_j - s_h\,(i - j), \qquad j \le i

말로 읽으면, i번째 토큰이 자기보다 앞(또는 자기 자리)의 j번째 토큰을 볼 때, 둘의 거리 i − j에 기울기 shs_h를 곱한 만큼 점수를 깎는다는 것입니다. 예를 들어 기울기가 1/2이고 거리가 10이면 점수에서 5를 빼니, 소프트맥스를 거친 몫은 e−5≈0.0067e^{-5} \approx 0.0067배로 줄어듭니다. 기울기 shs_h는 어텐션 머리(나란히 둔 어텐션 하나하나)마다 달리, 머리가 8개면 1/2,1/4,…,1/2561/2, 1/4, \dots, 1/256으로 정해 둡니다. 기울기가 1/2인 머리는 서너 칸만 멀어져도 몫이 크게 줄어 가까운 토큰만 보고, 1/256인 머리는 수백 칸 떨어진 토큰도 봅니다.

저자들은 이 ALiBi로 매개변수⁠(parameter)⁠ 13억 개의 모델을 1,024토큰 길이로 훈련했습니다. 이 모델은 2,048토큰 길이의 글에서, 처음부터 2,048토큰으로 훈련한 사인파 모델과 같은 퍼플렉시티를 냈고, 훈련은 11% 빠르고 메모리는 11% 덜 들었다고 보고했습니다(2022년 학회 발표). 2022년의 공개 모델 BLOOM이 이 방식을 썼습니다.

늘여 쓸 수 있는 이유는 간단합니다. 처음 보는 거리라 해도 모델에게 들어오는 것은 새로운 종류의 입력이 아니라 '더 큰 벌점'일 뿐이고, 벌점이 크면 그 토큰의 가중치가 작아질 뿐입니다. 같은 이유가 한계이기도 합니다. 소프트맥스가 합으로 나누기 전의 몫 e점수e^{\text{점수}}에 e−sh(i−j)e^{-s_h (i-j)}가 곱해지므로, 먼 토큰의 몫은 가까운 토큰에 견주어 거리에 따라 지수적으로 작아집니다. 그래서 각 머리는 기울기가 정하는 폭의 부드러운 창 안을 주로 봅니다.

위치 정보를 아예 넣지 않으면 어떻게 될까요? 그런 모델(NoPE)도 순서를 배웁니다. 이 절의 첫 문단에서 어텐션이 순서를 모른다고 한 것은 뒤를 가리지 않을 때의 이야기입니다. 다음 토큰을 맞히는 모델은 뒤를 가리므로, 위치 mm의 토큰은 자기를 포함해 앞의 m+1m+1개만 봅니다. 볼 수 있는 토큰의 개수가 위치마다 다르다는 것이 단서가 됩니다. 예를 들어 글의 맨 앞에는 늘 '시작' 표시 토큰이 있고, 그 값에만 1이 적힌 성분이 있다고 합시다. 볼 수 있는 모든 토큰에 고르게 가중치를 주면 위치 m의 결과에서 그 성분은 1/(m+1)1/(m+1)이 됩니다. 위치 0에서는 1, 위치 1에서는 1/2, 위치 9에서는 1/10입니다. 이 수에서 위치를 거꾸로 읽어 낼 수 있습니다.

실험도 이 추론을 뒷받침했습니다. 2022년 아디 하비브 등은 위치 인코딩 없이 훈련한 언어 모델도 위치 인코딩을 쓴 모델과 견줄 만하다고 보고했습니다. 2023년 아미르호세인 카젬네자드 등은 작은 모델의 실험에서 NoPE가 학습 때보다 긴 입력에 가장 잘 일반화되었고 ALiBi와 RoPE는 그리 잘 늘어나지 않았다고 보고했습니다. 큰 모델에서도 그런지는 정해지지 않았습니다. 2025년 메타의 Llama 4는 네 층 가운데 세 층은 RoPE를 쓰고 한 층은 위치 인코딩 없이 두는 식으로 둘을 섞었습니다.

2023년에는 '이미 훈련한 모델에게 더 긴 글을 읽히는 법'이 급한 문제가 되었습니다. RoPE 모델에 훈련 때보다 먼 위치를 넣으면, 앞에서 본 느린 짝들이 한 번도 본 적 없는 각도에 들어가 성능이 무너집니다. 그해 6월 메타의 천서우위안 등은 늘이는 대신 줄이는 위치 보간⁠(position interpolation)⁠을 내놓았습니다. 길이 LL로 훈련한 모델에 길이 L′L'의 글을 넣을 때 위치 mm를 mL/L′mL/L'로 바꾸어, 모든 각도를 훈련 때 본 범위 안에 두는 것입니다. 예를 들어 2,048토큰으로 훈련한 모델에 8,192토큰을 넣으면 위치 8,000은 2,000으로 바뀝니다. 위치가 소수(예: 0.25, 0.5)가 되어도 각도는 계산할 수 있으니 문제가 없습니다. 1,000걸음 이내의 짧은 추가 훈련으로 LLaMA의 창을 2,048에서 최대 32,768토큰까지 넓혔다고 보고했습니다. 여기서 '창'은 모델이 한 번에 읽을 수 있는 토큰의 수입니다.

같은 달 인터넷 게시판 레딧에서는 'bloc97'이라는 이름의 사용자가 그 약점을 짚었습니다. 모든 짝을 똑같이 줄이면 빠른 짝까지 느려집니다. 위의 예처럼 네 배로 줄이면, 한 칸에 1라디안 돌던 바늘이 0.25라디안만 돌아서 이웃한 토큰끼리의 각도 차이가 작아지고, 모델이 바로 옆 토큰과 두 칸 옆 토큰을 가려내기 어려워집니다. 그가 올린 방법(NTK-aware 스케일링)은 RoPE의 밑, 곧 빠르기 θi=10000−2i/d\theta_i = 10000^{-2i/d}의 10000을 키웁니다. 첫 짝(i = 0)은 지수가 0이라 밑이 무엇이든 θ0=1\theta_0 = 1로 그대로이고, 마지막 짝은 지수가 거의 −1이라 밑을 네 배로 키우면 빠르기가 거의 4분의 1로 줄어듭니다. 그래서 빠른 짝은 거의 그대로 두고 느린 짝만 크게 줄입니다.

이 생각은 곧 다듬어졌습니다. 8월의 YaRN(보웬 펑 등)은 짝의 빠르기에 따라 줄이는 정도를 나누고 어텐션의 온도까지 고쳐, 앞선 방법들보다 토큰은 10분의 1, 훈련 걸음은 2.5분의 1만 쓰고도 창을 늘렸다고 보고했습니다. 밑을 키우는 생각은 결국 훈련 단계로 들어갔습니다. 2024년 메타의 Llama 3는 처음부터 밑을 50만으로 키워 훈련했고, 그해 7월의 Llama 3.1은 128,000토큰의 창을 내세웠습니다.

여기서 조심할 것이 있습니다. 긴 글을 넣을 수 있는 것과 긴 글을 잘 쓰는 것은 다릅니다. 2023년 스탠퍼드의 넬슨 류 등은 여러 모델이 필요한 정보가 입력의 처음이나 끝에 있을 때 가장 잘하고, 가운데 있을 때는 눈에 띄게 못한다고 보고했습니다. 창의 크기는 넣을 수 있는 길이일 뿐이고, 그 창을 얼마나 잘 쓰는지는 따로 재야 하는 양입니다. 긴 글을 어텐션 대신 순환처럼 길이에 비례하는 계산으로 읽으려는 다른 갈래는 상태 공간 모형⁠(state space model)⁠에 있습니다.

정리하면, 어텐션은 그 자체로 순서를 모르니 위치를 따로 알려 주어야 합니다. 위치 벡터를 더하던 방식에서, 질문과 열쇠를 위치만큼 돌려 점수가 두 토큰의 거리에만 달리게 하는 RoPE로 옮겨 왔고, 훈련 때보다 긴 글을 읽히는 문제는 돌리는 각도를 줄이거나 나누어 조정하는 방법들로 다루어 왔습니다.

7 · 1994년과 2015년낱말도 글자도 아닌 조각: 토큰

지금까지 '낱말'이라고 불러 온 단위를 따져 볼 때입니다. 이 절의 물음은 모델이 글을 어떤 크기의 조각으로 잘라 읽어야 하느냐입니다. 낱말을 단위로 삼으면 어휘가 끝이 없습니다. 사람 이름, 새로 생긴 말, 오타가 끝없이 나오고, 지프의 법칙⁠(Zipf's law)⁠대로 대부분의 낱말은 아주 드뭅니다. 한국어는 '먹었겠더라고요'처럼 어간에 어미가 줄줄이 붙어 어절⁠(eojeol)⁠의 가짓수가 폭발합니다. 반대로 글자를 단위로 삼으면 어휘는 작지만 문장이 몇 배로 길어지고, 5절에서 본 대로 어텐션의 계산은 길이의 제곱으로 늘어납니다. 그 중간이 낱말 조각, 곧 토큰입니다.

조각을 만드는 가장 널리 쓰이는 방법은 원래 파일을 줄이는 압축법이었습니다. 1994년 필립 게이지는 『C 유저스 저널』에 간단한 압축법을 실었습니다. 파일에서 가장 자주 이웃한 바이트(컴퓨터가 글자를 적는 기본 단위로, 0부터 255까지의 수 하나) 쌍을 찾아, 파일에 쓰이지 않은 바이트 하나로 바꾸기를 되풀이하는 것입니다. 예를 들어 'aaabdaaabac'에서 가장 흔한 쌍 'aa'를 'Z'로 바꾸면 'ZabdZabac'이 되고, 이제 두 번씩 나오는 쌍 가운데 'ab'를 'Y'로 바꾸면 'ZYdZYac'이 됩니다. 11글자가 7글자로 줄었습니다(바꾼 규칙표도 함께 보내야 하지만요). 이것이 바이트 쌍 부호화(BPE)입니다.

2015년 에든버러 대학의 리코 젠리히, 배리 해도, 알렉산드라 버치는 이것을 번역의 어휘를 만드는 데 썼습니다(2016년 학회 발표). 글자에서 시작해 가장 흔한 이웃 쌍을 하나의 토큰으로 합치기를 정한 횟수만큼 되풀이하면, 흔한 낱말은 통째로 한 토큰이 되고 드문 낱말은 조각들로 쪼개집니다. 처음 보는 낱말도 조각의 이음으로 적을 수 있으니 '모르는 낱말'이 사라집니다.

비슷한 생각은 그보다 앞서 한국어와 일본어에서 쓰였습니다. 2012년 구글의 마이크 슈스터와 나카지마 가이스케는 일본어와 한국어 음성 검색을 만들다가 어휘를 어떻게 정할지라는 문제에 부딪혔습니다. 일본어는 띄어쓰기가 없고, 한국어는 어절의 가짓수가 끝없이 불어나기 때문입니다. 그들이 내놓은 워드피스⁠(WordPiece)⁠는 글자에서 시작해, 합쳤을 때 학습 글의 가능도를 가장 많이 올리는 조각부터 어휘에 더합니다. 가장 흔한 쌍 대신 가능도를 기준으로 삼는다는 점만 BPE와 다르고, 2018년의 BERT(8절)가 이 방식을 썼습니다.

낱말 모음은 입니다. 영어 쪽은 젠리히 등이 논문에 실은 예(low 5번, lower 2번, newest 6번, widest 3번)입니다. 한 단계씩 넘겨 보세요.

왼쪽: 낱말마다 지금의 토큰 분할입니다. 노란 칸이 방금 합친 토큰, 청록 칸이 두 글자 이상으로 된 토큰입니다. 오른쪽: 낱말의 빈도까지 셈한 이웃 쌍의 횟수, 큰 것부터 여섯 개입니다. 맨 위(노란 테두리)가 다음에 합칠 쌍입니다.

영어에서는 첫 세 번의 합치기가 'e s', 'es t', 'est _'이고, 열 번 뒤에는 어휘가 11개에서 21개로 늘고 전체 토큰 수는 95개에서 28개로 줄어듭니다. 아무도 가르쳐 주지 않았는데 최상급 어미 'est_'와 낱말 'low'가 토큰이 되었습니다. 한국어에서는 '학생', '학교', '선생', '선생님'이 차례로 생긴 뒤, 다섯 번째부터는 '학생이', '학교에'처럼 명사와 조사가 한 토큰으로 붙습니다. BPE는 형태소(뜻을 가진 가장 작은 말의 단위)를 모릅니다. 자주 붙어 다니면 붙일 뿐입니다. 또 BPE는 욕심쟁이 알고리즘⁠(greedy algorithm)⁠, 곧 멀리 내다보지 않고 매번 그 순간 가장 좋아 보이는 선택을 하는 방법이라, 지금 가장 흔한 쌍만 보고 합칠 뿐 전체로 가장 짧은 분할을 보장하지는 않습니다.

압축과의 인연을 짚어 봅시다. 허프만 부호⁠(Huffman coding)⁠는 흔한 기호에 짧은 부호를 주고, 렘펠–지브 압축⁠(Lempel–Ziv compression)⁠은 되풀이되는 조각을 사전에 올리며, BPE는 흔한 조각을 기호 하나로 만듭니다. 셋 다 빈도를 짧음으로 바꾸는 방법입니다. 2019년 GPT-2는 글자 대신 바이트에서 시작하는 BPE로 어휘 50,257개를 만들었습니다. 바이트에서 시작하면 어떤 글이든 적을 수 있습니다. 하지만 한글 음절 하나는 글자를 바이트로 적는 국제 표준인 UTF-8에서 3바이트라서(영어 알파벳은 1바이트) 영어 위주의 글로 만든 어휘에서는 한국어 문장이 영어 문장보다 훨씬 많은 토큰으로 쪼개집니다. 2023년의 한 연구는 같은 내용을 담은 글의 토큰 수가 언어에 따라 여러 배 차이 난다고 보고했습니다. 토큰 수는 계산 비용이고 모델이 한 번에 읽을 수 있는 길이이니, 이 차이는 곧 언어 사이의 불공평입니다. 3절에서 말한 대로 토큰 하나당 퍼플렉시티는 토큰을 만드는 방법에 따라 달라지므로, 서로 다른 토큰을 쓰는 모델은 글자나 바이트 하나당 비트로 비교해야 합니다.

정리하면, 토큰은 낱말과 글자 사이의 조각이고, BPE는 가장 흔한 이웃 쌍을 합치기를 되풀이해 그 조각들을 자료에서 만듭니다. 흔한 것은 통째로, 드문 것은 조각으로 적으니 어휘가 유한하면서도 어떤 글이든 적을 수 있지만, 어휘를 만든 글에 어떤 언어가 많았느냐에 따라 언어마다 토큰 수가 달라집니다.

8 · 2018–2022년크게 만들면 어떻게 되는가: 규모의 법칙⁠(scaling laws)⁠

모델을 키우고 글을 더 많이 읽히면 얼마나 좋아질까요? 그리고 정해진 계산 예산이 있을 때 모델의 크기와 읽힐 글의 양을 어떻게 나누어야 할까요? 이 절은 이 두 물음에 대한 측정 결과를 보고, 그 결과가 무엇을 말하고 무엇은 말하지 않는지를 가립니다.

트랜스포머가 나오자 한 가지 계획이 분명해졌습니다. 사람이 답을 달아 준 자료는 적지만 글은 많습니다. 다음 토큰 맞히기는 글만 있으면 답이 저절로 붙어 있는 과제입니다. 2018년 6월 오픈AI의 앨릭 래드퍼드 등은 GPT를 내놓았습니다. 트랜스포머(매개변수, 곧 훈련으로 정하는 가중치 1억 1,700만 개)를 책 수천 권으로 다음 토큰 맞히기부터 훈련한 뒤, 여러 과제에 조금씩 맞추어 쓰는 방식입니다. 10월에는 구글의 제이컵 데블린 등이 가린 낱말을 앞뒤 문맥으로 맞히게 한 BERT를 내놓았습니다. 2019년 2월의 GPT-2(15억 개)는 오용이 걱정된다며 작은 모델부터 몇 달에 걸쳐 공개되었습니다. 2020년 5월 GPT-3(1,750억 개)를 발표한 논문은 가중치를 고치지 않고 입력에 예를 몇 개 보여 주기만 해도 새 과제를 흉내 내는 '맥락 속 학습⁠(in-context learning)⁠'을 보고했습니다.

크기를 키우면 얼마나 좋아질까요? 2020년 1월 오픈AI의 재러드 캐플런 등은 크기가 다른 모델들을 훈련해, 검사 글의 손실이 매개변수 수 NN, 토큰 수 DD, 계산량 CC(훈련에 쓴 곱셈과 덧셈의 총 횟수) 각각의 거듭제곱을 따라 여러 자릿수에 걸쳐 곧게 줄어든다고 보고했습니다. 예를 들어 다른 것이 모자라지 않을 때 L∝N−0.076L \propto N^{-0.076}이었습니다. ∝는 '~에 비례한다'는 기호이고, N−0.076N^{-0.076}은 N의 −0.076제곱, 곧 N이 커질수록 아주 천천히 줄어드는 수입니다. 매개변수를 두 배로 늘리면 손실이 2−0.076≈0.9492^{-0.076} \approx 0.949배, 다시 말해 5%쯤 줄어든다는 뜻입니다. 열 배로 늘리면 10−0.076≈0.8410^{-0.076} \approx 0.84배입니다. 이 꼴의 특징은 N이 얼마에서 시작하든 '열 배로 늘리면 0.84배'가 똑같다는 것입니다. 1억 개에서 10억 개로 가도, 100억 개에서 1,000억 개로 가도 손실은 같은 비율로 줄어듭니다. 그래서 가로축과 세로축을 모두 로그 눈금(1, 10, 100, …이 같은 간격으로 놓이는 눈금)으로 그리면, 같은 간격마다 같은 만큼 내려가는 곧은 선이 됩니다. 로그로 적으면 log⁡L=−0.076log⁡N+(상수)\log L = -0.076 \log N + (\text{상수})이니 기울기가 −0.076인 직선입니다. 이렇게 한 양이 다른 양의 거듭제곱에 비례하는 관계를 거듭제곱 법칙⁠(power law)⁠이라고 합니다. 이 규모의 법칙을 근거로 그들은 계산량이 늘면 토큰보다 매개변수를 훨씬 빨리 늘리라고 권했습니다.

2022년 3월 딥마인드의 조던 호프만 등은 매개변수 7,000만–160억 개의 모델 400여 개를 토큰 50억–5,000억 개로 훈련해 이 권고를 고쳤습니다. 같은 계산량이면 매개변수와 토큰을 같은 비율로 늘려야 하고, 대략 매개변수 하나에 토큰 20개가 알맞다는 것입니다. 증거는 친칠라였습니다. 매개변수 700억 개를 토큰 1.4조 개로 훈련한 친칠라는, 거의 같은 계산량을 매개변수 2,800억 개와 토큰 3,000억 개에 쓴 자기들의 고퍼를 여러 평가에서 앞섰습니다. 그들은 세 가지 방법으로 최적점을 추정했는데, 셋째 방법은 손실 전체를 한 식으로 맞추는 것이었습니다.

계산량, 매개변수, 토큰 사이에는 간단한 어림이 있습니다. 훈련 계산량은 트랜스포머에서 대략 C≈6NDC \approx 6ND FLOP입니다. 토큰 하나를 지날 때 매개변수 하나마다 앞으로 가는 계산에 곱셈과 덧셈 한 번씩, 역전파에 그 두 배쯤이 들기 때문입니다. 여기서 FLOP은 컴퓨터가 소수점이 있는 수(부동소수점⁠(floating point)⁠ 수)로 하는 곱셈이나 덧셈 한 번을 1로 센 계산 횟수입니다. 어텐션의 n2n^2 계산은 뺀 어림입니다. 친칠라라면 6×(7×1010)×(1.4×1012)≈5.9×10236 \times (7 \times 10^{10}) \times (1.4 \times 10^{12}) \approx 5.9 \times 10^{23}입니다.

셋째 방법이 맞춘 식은 아래와 같습니다. 말로 읽으면 "손실 = 줄일 수 없는 바닥 E + 모델이 작아서 생기는 몫 + 글이 적어서 생기는 몫"입니다. 둘째 항 A/NαA/N^{\alpha}('A 나누기 N의 알파 제곱')는 매개변수 N이 커질수록, 셋째 항 B/DβB/D^{\beta}('B 나누기 D의 베타 제곱')는 토큰 D가 많아질수록 거듭제곱으로 줄어듭니다. E, A, B, α, β는 측정한 손실에 가장 잘 맞도록 정한 수입니다. 2022년 논문의 값으로 친칠라(N = 700억, D = 1.4조)를 넣으면 E = 1.69, 둘째 항은 약 0.08, 셋째 항은 약 0.16이라 손실은 약 1.94입니다(단위는 토큰 하나당 내트). 이 설정에서는 글이 모자라서 생기는 몫이 모델이 작아서 생기는 몫의 두 배쯤입니다.

식은 입니다. 계산량을 10x10^x FLOP로 두고 x=x = (곧 ), 매개변수를 10y10^y개로 두고 y=y = 입니다. 계산량이 정해져 있으니 토큰 수는 D=C/6ND = C / 6N으로 따라 정해집니다. 친칠라의 설정 이 계산량의 최적점으로

가로축은 매개변수 수(로그 눈금), 세로축은 식이 주는 손실(토큰 하나당 내트)입니다. 보라색 곡선 하나하나는 계산량이 같은 모델들이고(아래 숫자가 계산량), 굵은 곡선이 지금의 계산량입니다. 초록 점선은 계산량마다 가장 낮은 점을 이은 선, 분홍 점은 친칠라와 고퍼입니다. 노란 점을 끌어 크기를 바꿀 수 있습니다.

지금 설정은 매개변수 , 토큰 (매개변수 하나에 토큰 개)이고, 식이 주는 손실은 입니다. 이 계산량에서 가장 낮은 손실은 입니다. 같은 계산량의 곡선이 골짜기 모양인 까닭은 식의 두 항이 서로 당기기 때문입니다. 모델이 작으면 A/NαA/N^{\alpha}가 크고, 모델이 크면 같은 계산량에 토큰이 모자라 B/DβB/D^{\beta}가 큽니다.

처음 설정은 친칠라의 계산량(약 5.9×10235.9 \times 10^{23} FLOP)에 고퍼의 크기입니다. 지금 고른 식(처음에는 2022년 논문의 식)으로 보면 친칠라의 손실은 , 고퍼는 입니다. 그런데 같은 식이 말하는 이 계산량의 최적 크기는 입니다. 2022년 식으로는 약 325억 개, 매개변수 하나에 토큰 93개로, 논문의 결론인 '700억 개와 토큰 20개'와 맞지 않습니다. 실제로 논문의 셋째 방법은 다른 두 방법보다 작은 모델을 권했습니다. 2024년 에포크⁠(epoch)⁠ AI의 타메이 베시로글루 등은 논문의 그림에서 자료를 되살려 같은 식을 다시 맞추었고, 원래 추정값이 자료와 어긋난다고 보고했습니다. 식을 '2024년에 다시 맞춘 식'으로 바꾸어 보세요. 최적점이 약 730억 개, 매개변수 하나에 토큰 18개쯤으로 옮겨 가 친칠라와 거의 겹칩니다.

이 일화가 보여 주는 것은 규모의 법칙이 정리가 아니라 측정이라는 점입니다. 무엇을 잰 것인지를 정확히 말하면 이렇습니다. 특정한 자료 모음에서 뽑은 검사 글의 다음 토큰 손실을, 특정한 구조와 훈련 방법으로, 잰 범위 안에서 곡선으로 맞춘 것입니다. 잰 범위 밖으로 늘여 쓰는 것은 예측이지 보장이 아니고, 맞추는 방법에 따라 지수가 달라집니다. 식의 상수 EE는 모델을 한없이 키워도 남는 손실로, 2절의 '언어 자체의 엔트로피'로 읽고 싶어지지만 곡선을 늘여서 얻은 값일 뿐 잰 값이 아닙니다. 또 손실이 매끄럽게 준다고 해서 모델이 할 수 있는 일이 매끄럽게 느는 것은 아닙니다. 2022년의 한 연구는 어떤 능력이 일정한 크기에서 갑자기 '나타난다'고 보고했지만, 2023년 스탠퍼드의 라일런 섀퍼 등은 그런 급변의 상당 부분이 맞으면 1, 틀리면 0처럼 끊어지는 채점 방식에서 생긴다고 반론했습니다. 매끄러운 척도로 다시 채점하면 많은 경우 곡선이 매끄러워졌습니다.

정리하면, 잰 범위 안에서 손실은 매개변수, 토큰, 계산량의 거듭제곱을 따라 곧게 줄고, 계산량이 정해져 있으면 모델 크기와 토큰 수를 비슷한 비율로 늘리는 것이 좋다는 것이 친칠라 이후의 측정입니다. 그러나 이것은 곡선을 맞춘 측정이지 증명된 법칙이 아닙니다.

캐플런 등의 논문보다 열 달쯤 앞선 2019년 3월, 강화 학습⁠(reinforcement learning)⁠ 연구자 리처드 서턴은 짧은 글 「쓰라린 교훈」에서 70년의 인공지능 연구를 돌아보았습니다. 사람의 지식을 정교하게 넣은 방법들은 결국, 계산이 늘수록 함께 좋아지는 일반적인 방법인 탐색과 학습에 밀려 왔다는 것입니다. 체스와 바둑, 컴퓨터 시각, 그리고 3절에서 본 1970년대 음성 인식의 역사가 그의 예였습니다. 규모의 법칙은 이 관찰에 숫자를 붙이려는 시도로 읽혔습니다. 다만 서턴의 글은 역사를 해석한 것이지 증명이 아니고, 그 교훈이 어디까지 통하는지는 이 절에서 보았듯 여전히 측정의 문제입니다.

신경망 언어 모델의 40년. 토론토와 몬트리올, 뮌헨에서 시작한 생각이 마운틴뷰와 샌프란시스코, 런던의 연구소에서 커집니다. 수학 줄(파랑)에 어텐션, 트랜스포머, 규모의 법칙, 사람의 선호가 차례로 놓입니다.

9 · 확률에서 문장으로온도, 그리고 사람의 선호

이 절의 물음은 둘입니다. 확률 분포에서 실제 문장을 어떻게 뽑아내는가? 그리고 글을 이어 쓰기만 하던 모델을 어떻게 질문에 답하는 조수로 바꾸는가? 두 답은 같은 수학, 지수로 분포를 기울이는 일로 만납니다.

모델이 내놓는 것은 다음 토큰의 확률 분포입니다. 글을 쓰려면 그 분포에서 하나를 골라야 하고, 고른 토큰을 붙여 다시 다음 분포를 얻는 일을 되풀이합니다. 고르는 방법을 디코딩이라고 합니다. 가장 확률이 높은 것만 고르는 탐욕 디코딩(7절의 욕심쟁이 알고리즘과 같은 생각), 그럴듯한 문장 후보를 몇 개씩 들고 가며 전체 확률이 가장 높은 문장을 찾는 빔 탐색, 그리고 확률대로 뽑는 표본⁠(sample)⁠ 추출이 있습니다. 2019년 워싱턴 대학의 아리 홀츠먼 등은 전체 확률이 가장 높은 글을 찾을수록 오히려 단조롭고 같은 구절을 되풀이하는 글이 나온다는 것을 보였습니다. 사람이 쓴 글은 가장 확률 높은 글이 아닙니다. 그래서 대개 뽑되, 뽑는 분포를 손질합니다.

가장 흔한 손잡이가 온도 TT입니다. 모델의 마지막 점수(로짓⁠, logit⁠) ziz_i를 소프트맥스에 넣기 전에 TT로 나눕니다.

두 토큰의 점수가 2와 1이라고 합시다. T = 1이면 5절의 계산대로 확률은 약 0.73과 0.27입니다. T = 0.5이면 점수가 4와 2가 되어 차이가 벌어지고, 확률은 e4/(e4+e2)≈0.88e^4/(e^4 + e^2) \approx 0.88과 0.12가 됩니다. T = 2이면 점수가 1과 0.5로 좁혀져 확률은 약 0.62와 0.38입니다. 온도를 낮추면 앞선 토큰에 확률이 더 몰리고, 높이면 고르게 퍼집니다.

이 꼴은 물리학에도 있습니다. 수많은 분자의 움직임을 확률로 다루는 통계역학⁠(statistical mechanics)⁠에서, 온도 TT의 기체 분자가 어떤 상태에 있을 확률도 같은 꼴로 정해집니다. 에너지가 낮은 상태일수록 확률이 크니, 점수 자리에 '음의 에너지'가 들어간 셈입니다. 이것을 볼츠만 분포⁠(Boltzmann distribution)⁠ 또는 깁스 분포라고 부릅니다.

이 분포는 우연히 고른 꼴이 아닙니다. 4절의 점수 2, 1, 0으로 확인해 봅시다. T = 1이면 확률은 약 0.67, 0.24, 0.09이고, 점수의 평균은 2×0.67+1×0.24+0×0.09≈1.582 \times 0.67 + 1 \times 0.24 + 0 \times 0.09 \approx 1.58, 엔트로피는 약 1.20비트입니다. 평균 점수가 똑같이 1.58인 다른 분포, 예를 들어 (0.58, 0.42, 0)은 엔트로피가 약 0.98비트로 더 작습니다. 일반적으로도 평균 점수가 정해졌을 때 엔트로피가 가장 큰 분포, 곧 최대 엔트로피⁠(maximum entropy)⁠ 분포가 바로 소프트맥스의 꼴입니다. '평균 점수는 이만큼이어야 한다'는 조건 말고는 아무것도 더 가정하지 않는 분포라는 뜻입니다.

온도 말고 흔히 쓰는 손잡이가 하나 더 있습니다. top-p는 확률이 큰 것부터 더해 합이 pp에 이를 때까지의 토큰만 남기고 나머지를 버린 뒤, 남은 것의 합이 1이 되게 다시 나누는 방법으로, 홀츠먼 등이 제안한 핵 샘플링입니다. 예를 들어 확률이 0.5, 0.3, 0.15, 0.05이고 p = 0.9이면, 0.5 + 0.3 = 0.8은 아직 0.9에 못 미치고 0.15까지 더하면 0.95이니 앞의 셋만 남습니다. 남은 셋을 0.95로 나누면 약 0.53, 0.32, 0.16입니다. 드문 낱말의 긴 꼬리를 잘라 엉뚱한 낱말이 뽑히는 일을 막는 것입니다. 아래 그림에서 온도()와 top-p()를 바꾸어 보며, 막대가 한쪽으로 몰리는지 고르게 퍼지는지, 회색으로 잘리는 낱말이 몇 개인지 보세요.

“오늘 저녁에는 ___” 다음에 올 낱말 열 개의 확률입니다. 점수는 손으로 정한 것입니다. 회색 막대는 top-p에서 잘려 뽑히지 않는 낱말이고, 점선은 열 개를 똑같이 고를 때의 확률 0.1입니다.

'집에'의 확률은 , 분포의 엔트로피는 비트이고, top-p가 남기는 낱말은 개입니다. ↻ 12번 뽑기

T=1T = 1이면 모델의 분포 그대로이고('집에' 0.35, 엔트로피 2.60비트), T=0.5T = 0.5면 '집에'가 0.60으로 커지고 엔트로피는 1.75비트로 줍니다. T→0T \to 0이면 가장 큰 점수에 확률이 모두 몰려 탐욕 디코딩⁠(greedy decoding)⁠이 되고, T→∞T \to \infty면 모든 낱말이 똑같아져 엔트로피가 최대인 log⁡210≈3.32\log_2 10 \approx 3.32비트로 다가갑니다. 온도를 낮추면 안전하지만 뻔한 글이, 높이면 다양하지만 엉뚱한 글이 나옵니다. 5절의 d\sqrt d는 어텐션 안에서 온도를 d\sqrt d로 둔 것입니다.

그런데 다음 토큰을 잘 맞히는 모델은 아직 쓸모 있는 조수가 아닙니다. 인터넷의 글을 흉내 내도록 훈련된 모델에게 "프랑스의 수도는 어디인가요?"라고 쓰면, 퀴즈 문제집의 한 쪽처럼 "독일의 수도는? 이탈리아의 수도는?"을 이어 쓰는 것이 오히려 그럴듯한 이어 쓰기일 수 있습니다. 글을 이어 쓰는 기계를 지시를 따르는 기계로 바꾸는 작업이 필요했습니다.

사람의 선호에서 보상을 배우는 길은 2017년 오픈AI와 딥마인드의 폴 크리스티아노 등의 연구가 열었습니다. 보상을 식으로 적기 어려운 행동, 이를테면 모의 로봇이 공중제비를 넘는 동작을 가르치려고, 로봇의 짧은 동영상 두 개를 보여 주고 사람이 더 나은 쪽을 고르게 했습니다. 그 고른 기록으로 보상을 추정하고, 추정한 보상으로 로봇을 훈련했습니다. 여기서 보상은 '얼마나 잘했는가'를 나타내는 점수이고, 보상이 커지도록 행동을 고쳐 가는 훈련이 강화 학습입니다. 2019–2020년 오픈AI는 같은 방법으로 언어 모델의 이어 쓰기와 요약을 다듬었습니다.

2022년 3월 롱 오우양 등은 인스트럭트GPT에서 이것을 지시 따르기 전반으로 넓혔고, 세 단계를 썼습니다. 첫째, 사람이 쓴 모범 답으로 모델을 조금 더 훈련합니다. 둘째, 한 질문에 모델이 낸 답 여러 개에 사람이 순위를 매기고, 그 기록으로 답에 점수 rr를 주는 보상 모델⁠(reward model)⁠을 훈련합니다. 보상 모델은 답을 받아 수 하나를 내놓는 또 하나의 신경망입니다. 셋째, 그 점수가 높아지도록 언어 모델을 고칩니다(아래에서 봅니다).

둘째 단계에서 사람의 순위를 점수로 바꾸는 확률 모형은 1952년 랠프 브래들리와 밀턴 테리가 짝 비교⁠(paired comparison)⁠를 분석하려고 낸 것으로, 답 A가 B보다 선호될 확률을

P(A≻B)=erAerA+erB=σ(rA−rB),σ(x)=11+e−xP(A \succ B) = \frac{e^{r_A}}{e^{r_A} + e^{r_B}} = \sigma(r_A - r_B), \qquad \sigma(x) = \frac{1}{1 + e^{-x}}

로 둡니다. A≻BA \succ B는 'A가 B보다 선호된다'로 읽고, σ('시그마')는 어떤 수든 0과 1 사이의 확률로 바꾸는 S자 모양의 함수입니다. 가운데 등호는 분자와 분모를 모두 erAe^{r_A}로 나누면 나옵니다. 분모가 1+erB−rA1 + e^{r_B - r_A}가 되기 때문입니다. 그러니 선호될 확률은 두 점수의 차이에만 달립니다. 점수의 차이를 입력으로 하는 로지스틱 회귀⁠(logistic regression)⁠입니다. 예를 들어 답 A의 점수가 2, B가 1이면 A가 선호될 확률은 σ(1)≈0.73\sigma(1) \approx 0.73이고, 두 점수가 같으면 σ(0)=0.5\sigma(0) = 0.5로 반반입니다. 보상 모델은 사람이 실제로 고른 쪽에 이 확률이 높게 나오도록 점수를 배웁니다.

셋째 단계에서는 보상을 키우되 원래 모델 πref\pi_{\mathrm{ref}}('파이 레프', 기준 모델)에서 멀어지는 만큼 벌점을 매겨, 강화 학습으로 모델 π\pi를 고칩니다. π(y)는 모델이 답 y를 낼 확률입니다.

max⁡π  Ey∼π[r(y)]−β DKL(π ∥ πref)⟹π∗(y)=πref(y) er(y)/βZ\max_{\pi}\; \mathbb E_{y \sim \pi}\big[r(y)\big] - \beta\, D_{\mathrm{KL}}(\pi \,\|\, \pi_{\mathrm{ref}}) \quad\Longrightarrow\quad \pi^{*}(y) = \frac{\pi_{\mathrm{ref}}(y)\, e^{r(y)/\beta}}{Z}

기호부터 읽어 봅시다. max⁡π\max_{\pi}는 '모델 π를 이리저리 바꾸어 가며 뒤의 값을 가장 크게 하라', Ey∼π[r(y)]\mathbb E_{y \sim \pi}[r(y)]는 '모델 π에서 답 y를 뽑을 때 받는 보상의 평균'입니다. 그러니 왼쪽을 말로 읽으면 "모델이 뽑는 답이 받는 보상의 평균에서, 기준 모델과 달라진 정도(KL 발산)에 β('베타')를 곱한 벌점을 뺀 값을 가장 크게 하라"입니다. β는 벌점의 세기입니다. 벌점을 두는 까닭은, 보상만 쫓으면 모델이 원래의 말하는 능력을 버리고 보상 모델의 허점을 파고들 수 있기 때문입니다(아래 그림에서 봅니다).

⟹ 오른쪽은 모델이 어떤 분포든 나타낼 수 있다고 할 때의 최적해 π∗\pi^{*}('파이 스타')이고, ZZ는 모든 답의 확률을 더해 1이 되도록 맞추는 수입니다. 기준 모델의 확률에 보상의 지수 er(y)/βe^{r(y)/\beta}를 곱하니, 보상이 높은 답일수록 확률이 커집니다. 작은 예로, 기준 모델이 두 답에 0.5씩을 주고 보상이 1과 0, β = 1이라면 곱한 값은 0.5e≈1.360.5e \approx 1.36과 0.5이고, 합 1.86으로 나누면 약 0.73과 0.27입니다. β = 0.5로 벌점을 약하게 하면 0.5e2≈3.690.5e^2 \approx 3.69와 0.5라 약 0.88과 0.12로 더 기웁니다.

왜 이것이 최적해인가

목표를 π*와의 KL 발산으로 다시 적으면 됩니다. KL 발산의 정의 DKL(π ∥ πref)=∑yπ(y)log⁡(π(y)/πref(y))D_{\mathrm{KL}}(\pi \,\|\, \pi_{\mathrm{ref}}) = \sum_y \pi(y) \log (\pi(y)/\pi_{\mathrm{ref}}(y))로 벌점을 풀어 쓰고, 보상의 평균 ∑yπ(y) r(y)\sum_y \pi(y)\, r(y)와 한 합으로 묶으면 목표는 ∑yπ(y) [ r(y)−βlog⁡(π(y)/πref(y)) ]\sum_y \pi(y)\,[\,r(y) - \beta \log (\pi(y)/\pi_{\mathrm{ref}}(y))\,]입니다.

대괄호 안의 r(y)r(y)를 βlog⁡er(y)/β\beta \log e^{r(y)/\beta}로 적습니다(로그와 지수는 서로를 되돌리니 같은 값입니다). 그러면 대괄호 안의 두 항이 모두 'β × 로그'가 되고, 로그의 빼기는 나누기의 로그이므로 하나로 합쳐 −βlog⁡(π(y)/(πref(y)er(y)/β))-\beta \log \big(\pi(y) / (\pi_{\mathrm{ref}}(y) e^{r(y)/\beta})\big)가 됩니다. π*의 정의에 따라 분모 πref(y) er(y)/β\pi_{\mathrm{ref}}(y)\, e^{r(y)/\beta}는 Z π∗(y)Z\,\pi^{*}(y)이니

J(π)=−β∑yπ(y)log⁡π(y)Z π∗(y)=−β∑yπ(y)log⁡π(y)π∗(y)+βlog⁡Z∑yπ(y)J(\pi) = -\beta \sum_y \pi(y) \log \frac{\pi(y)}{Z\,\pi^{*}(y)} = -\beta \sum_y \pi(y) \log \frac{\pi(y)}{\pi^{*}(y)} + \beta \log Z \sum_y \pi(y)

입니다(J(π)는 목표의 값). 둘째 등호에서는 log⁡(a/(Zb))=log⁡(a/b)−log⁡Z\log(a/(Zb)) = \log(a/b) - \log Z를 썼습니다. ∑yπ(y)=1\sum_y \pi(y) = 1이니 목표는 βlog⁡Z−β DKL(π ∥ π∗)\beta \log Z - \beta\, D_{\mathrm{KL}}(\pi \,\|\, \pi^{*})입니다. βlog⁡Z\beta \log Z는 π와 상관없는 수이고, KL 발산은 0 이상이며 π=π∗\pi = \pi^{*}일 때만 0입니다. 그러니 목표가 가장 커지는 것은 π=π∗\pi = \pi^{*}일 때뿐입니다.

온도의 식과 같은 꼴입니다. 사람의 선호로 배운 보상이 원래 모델의 분포를 지수적으로 기울이고, β\beta가 그 온도입니다. 실제 훈련은 이 해를 직접 계산하지 않습니다. PPO라는 강화 학습 방법으로 모델을 한 번에 조금씩만 고치며 이 해에 다가갈 뿐입니다. 2023년 스탠퍼드의 라파엘 라파일로프 등은 이 식을 거꾸로 써서 강화 학습 없이 선호 자료로 곧장 모델을 고치는 DPO를 내놓았습니다(10절). 이 과정 전체를 인간 피드백 강화 학습(RLHF)이라고 부릅니다.

아래 그림은 한 질문에 대한 답 다섯 개로 이 기울이기를 합니다. 원래 모델의 확률과 보상 모델의 점수는 손으로 정한 것이고, 다섯째 답은 보상 모델이 아첨을 좋게 보는 결함이 있어 가장 높은 점수를 받았다고 가정했습니다. 지금은 β=\beta = 입니다. 이 값을 바꾸고, 노란 점을 끌어 점수를 바꾸어 보세요. ↺ 점수 되돌리기

질문 "프랑스의 수도는 어디인가요?"에 대한 답 다섯 개. 회색 막대는 원래 모델의 확률, 파란 막대는 π* ∝ π_ref · e^(r/β)로 기울인 확률입니다. 오른쪽 노란 점이 보상 모델의 점수입니다.

원래 모델에서 보상의 평균은 이고, 기울인 뒤에는 , 원래 모델과의 KL 발산은 비트입니다. 가장 확률이 큰 답은 입니다. β\beta를 줄이면 보상은 오르지만 확률이 점수가 가장 높은 답 하나로 몰리고, 그 답은 아첨하는 답입니다. β=0.1\beta = 0.1이면 그 답이 0.99를 차지합니다. 보상 모델은 사람의 선호를 흉내 낸 근사일 뿐이라, 그것을 너무 세게 쫓으면 근사의 결함까지 쫓게 됩니다. 2022년 오픈AI의 레오 가오 등은 대리 보상을 최적화⁠(optimization)⁠할수록 진짜 선호로 잰 점수가 처음에는 오르다가 결국 떨어지는 것을 측정했습니다. 재는 수가 목표가 되면 좋은 척도이기를 그친다는 굿하트의 법칙⁠(Goodhart's law)⁠의 한 모습입니다.

반대로 β\beta를 키우면 원래 모델 곁에 머물러 안전하지만, 질문을 이어 쓰는 셋째 답도 그만큼 남습니다. β는 '보상 모델을 얼마나 믿을 것인가'를 정하는 손잡이이고, 너무 작아도 너무 커도 나쁩니다. 굿하트의 법칙이라는 이름은 경제학자 찰스 굿하트가 1975년 영국의 통화 정책을 두고 한 관찰에서 왔습니다. 그 사정과, 지표가 목표가 될 때 무엇이 어긋나는지의 수학은 「재는 순간 바뀐다」 8절에 있습니다.

인스트럭트GPT의 결과는 이 방법의 힘을 보여 주었습니다. 사람 평가자들은 매개변수 13억 개짜리 인스트럭트GPT가 낸 답을 100배 이상 큰 GPT-3(1,750억 개)의 답보다 더 자주 골랐습니다. 2022년 11월 30일 같은 방법으로 다듬은 대화 모델 챗GPT가 공개되었습니다. 다음 토큰을 맞히는 기계는 이제 매일 수많은 사람과 이야기하는 기계가 되었습니다.

정리하면, 온도는 모델의 점수를 T로 나누어 분포를 뾰족하게 하거나 펴는 손잡이이고, RLHF의 최적해는 기준 모델의 분포를 보상의 지수로 기울인 것입니다. 둘 다 볼츠만–깁스 분포의 꼴이며, β가 작을수록 보상 모델을 세게 쫓아 그 결함까지 쫓게 됩니다.

보상 모델이 쓰는 브래들리–테리 모형⁠(Bradley–Terry model)⁠은 1929년 체르멜로가 체스 대회 성적으로 선수의 실력을 매기려고 먼저 내놓은 것이기도 합니다. 체스의 엘로 점수도 두 선수의 점수 차이로 이길 확률을 정한다는 같은 생각입니다. 헝가리 태생의 미국 물리학자 아르파드 엘로가 만든 이 점수는 1960년 미국 체스 연맹이, 1970년 국제 체스 연맹이 받아들였습니다. 체르멜로가 1912년 체스를 두고 증명한 또 하나의 정리는 「이기는 쪽이 존재한다」 1절에 있습니다.

10 · 2023–2026년RLHF 이후: 선호, 공개, 전문가, 도구, 그리고 생각하는 시간

챗GPT가 나온 뒤 몇 해 동안 언어 모델은 이 글의 어느 시기보다 빠르게 바뀌었습니다. 모델의 이름과 점수는 몇 달마다 바뀌니, 이 절은 제품의 목록 대신 앞 절들의 수학이 어디로 이어졌는지를 따라갑니다. 날짜별 목록은 언어 모델의 발전사에 있습니다. 한 가지를 미리 구별해 둡니다. 심사를 거쳤거나 다른 사람이 되풀이해 확인할 수 있는 결과, 회사의 발표, 그리고 특정 시험의 점수는 무게가 다릅니다. 아래에서는 되도록 어느 쪽인지 밝히겠습니다.

이 절은 굵은 제목의 갈래로 나뉘고, 갈래마다 앞 절의 어떤 수학이 이어지는지 먼저 밝힙니다. 순서는 선호를 배우는 더 간단한 방법(9절), 누구나 받아 쓸 수 있게 된 모델, 계산을 아끼는 구조(8절), 더 긴 글과 더 싼 계산(6절, 9절), 도구를 쓰는 모델, 그리고 답하기 전에 생각을 적는 모델입니다.

트랜스포머 이후의 10년. 위치 인코딩이 마운틴뷰에서 선전을 거쳐 파리와 멘로파크로 가고, 사람의 선호를 쓰는 방법이 샌프란시스코에서 스탠퍼드로, 생각의 사슬⁠(chain of thought)⁠이 마운틴뷰에서 샌프란시스코와 항저우로 이어집니다.

강화 학습 없이 선호 배우기. 9절의 RLHF는 보상 모델을 따로 훈련하고, 그다음 강화 학습으로 언어 모델을 고치는 두 단계였습니다. 둘 다 까다롭습니다. 강화 학습은 답을 계속 뽑아 보며 조금씩 고쳐야 하고 설정에 민감합니다. 이 갈래의 물음은 사람이 고른 쌍의 기록에서 언어 모델을 곧장 고칠 수는 없느냐입니다.

열쇠는 9절의 최적해 π∗∝πref er/β\pi^{*} \propto \pi_{\mathrm{ref}}\, e^{r/\beta}(∝는 '비례한다', 정확히는 합이 1이 되게 Z로 나눈 것)를 거꾸로 읽는 것입니다. 이 식은 '보상 r이 주어지면 가장 좋은 모델이 정해진다'고 말하지만, 거꾸로 '모델이 정해지면 그 모델을 최적으로 만드는 보상이 정해진다'고도 읽힙니다. 양쪽에 로그를 취하면 log⁡π∗(y)=log⁡πref(y)+r(y)/β−log⁡Z\log \pi^{*}(y) = \log \pi_{\mathrm{ref}}(y) + r(y)/\beta - \log Z이고, 양쪽에 β를 곱해 보상에 대해 정리하면 r(y)=βlog⁡π∗(y)πref(y)+βlog⁡Zr(y) = \beta \log \frac{\pi^{*}(y)}{\pi_{\mathrm{ref}}(y)} + \beta \log Z입니다. 보상이 '최적 모델이 기준 모델보다 그 답을 얼마나 더 좋아하는가'로 적힌 것입니다. 이것을 브래들리–테리 식 P(A≻B)=σ(rA−rB)P(A \succ B) = \sigma(r_A - r_B)에 넣으면, 두 답에 공통인 βlog⁡Z\beta\log Z는 빼기에서 사라집니다. DPO는 여기서 π* 자리에 지금 훈련하는 모델 π를 놓습니다. 곧 '모델 π가 어떤 보상의 최적해'라고 보고, 그 보상을 모델의 확률로 적는 것입니다.

P(A≻B)=σ ⁣(βlog⁡π(A)πref(A)−βlog⁡π(B)πref(B))P(A \succ B) = \sigma\!\left(\beta \log \frac{\pi(A)}{\pi_{\mathrm{ref}}(A)} - \beta \log \frac{\pi(B)}{\pi_{\mathrm{ref}}(B)}\right)

말로 읽으면, 모델이 기준 모델보다 답 A를 얼마나 더 좋아하게 되었는지(확률의 비의 로그)에서 답 B를 얼마나 더 좋아하게 되었는지를 뺀 값이 클수록, A가 선호될 확률이 크다는 식입니다. 숫자로 보면, β = 1이고 모델이 기준 모델보다 A의 확률을 두 배로 올리고 B의 확률을 절반으로 내렸다면 괄호 안은 log⁡2−log⁡12=log⁡4\log 2 - \log \tfrac12 = \log 4이고, σ(log⁡4)=1/(1+14)=0.8\sigma(\log 4) = 1/(1 + \tfrac14) = 0.8입니다. 아직 아무것도 바꾸지 않았다면 두 비가 모두 1이라 σ(0)=0.5\sigma(0) = 0.5입니다.

보상 r이 식에서 사라지고 모델의 확률만 남았습니다. 그러니 보상 모델도 강화 학습도 없이, 사람이 A를 고른 쌍마다 이 확률이 커지도록 모델 π\pi 자체를 로지스틱 회귀처럼 훈련하면 됩니다. 사람이 고른 답의 확률은 기준보다 올리고, 버린 답의 확률은 내리는 방향입니다. 2023년 5월 스탠퍼드의 라파일로프 등이 낸 이 DPO는 논문 제목대로 '언어 모델이 사실은 보상 모델'이라는 관찰입니다. 두 방법이 같은 답에 이른다는 것은 모델이 어떤 분포든 나타낼 수 있고 같은 선호 자료를 쓴다는 가정 아래의 이야기입니다. 식이 같으니 결과도 같으리라 생각하기 쉽지만, 실제 모델은 어떤 분포든 나타낼 수 있는 것도 아니고 훈련이 최적해에 닿는 것도 아니어서, 실제로 어느 쪽이 나은지는 과제와 조정에 따라 결과가 엇갈립니다.

그보다 조금 앞선 2022년 12월, 앤트로픽의 바이윈타오 등은 사람 대신 AI가 답을 비교하게 하는 헌법적 AI⁠(Constitutional AI)⁠를 내놓았습니다. 선호 자료의 병목은 사람이 답을 하나하나 읽고 고르는 데 드는 시간과 비용입니다. 이 방법에서는 먼저 모델이 글로 적힌 원칙 목록('헌법')에 비추어 자기 답을 비판하고 고치게 하고, 고친 답으로 모델을 더 훈련합니다. 그다음 AI 모델이 원칙에 따라 두 답 가운데 하나를 고르고, 그렇게 모은 선호로 보상 모델을 만듭니다(AI 피드백 강화 학습, RLAIF). 사람의 판단이 사라진 것은 아닙니다. 판단이 답 하나하나에서, 원칙을 쓰는 사람에게로 옮겨 간 것입니다.

공개 가중치⁠(open weights)⁠. 2023년 2월 메타는 매개변수 70억–650억 개의 LLaMA를 연구자들에게 내놓으며, 공개된 자료만으로 훈련했고 130억 개 모델이 대부분의 평가에서 GPT-3(1,750억 개)를 앞선다고 보고했습니다. 8절의 친칠라 계산을 쓰는 쪽에서 다시 본 셈입니다. 친칠라의 최적점은 '훈련 계산량이 정해졌을 때 손실이 가장 낮은 크기'였고, 훈련이 끝난 뒤의 비용은 셈에 넣지 않았습니다. 그런데 훈련한 모델로 답을 만들 때도 토큰 하나마다 대략 매개변수 수의 두 배만큼 계산이 들고(앞으로 가는 계산의 곱셈과 덧셈), 수많은 사람이 오래 쓰면 이 비용이 훈련 비용보다 훨씬 커집니다. 그렇다면 훈련에서 조금 손해를 보더라도, 알맞은 크기보다 작은 모델을 더 많은 토큰으로 오래 훈련하는 편이 낫습니다.

그 뒤 메타의 Llama 2(2023년 7월)와 Llama 3(2024년), 프랑스의 미스트랄, 중국 알리바바의 Qwen과 항저우의 딥시크가 가중치를 내려받을 수 있는 모델을 잇달아 냈습니다. 2025년 8월에는 오픈AI도 GPT-2 이후 처음으로 가중치를 공개한 언어 모델 gpt-oss를 냈습니다. '공개 가중치'는 '오픈 소스'와 같은 말이 아닙니다. 대개 훈련 자료와 훈련 코드는 공개되지 않고, 쓰임을 제한하는 사용 허가가 붙기도 합니다. 그래도 가중치가 공개되자 누구나 모델 속을 들여다보고, 줄이고, 고쳐 쓸 수 있게 되었습니다. 이 절에 나오는 여러 연구가 그 위에서 이루어졌습니다.

전문가 혼합⁠(mixture of experts)⁠. 8절의 계산량 C≈6NDC \approx 6ND에서 NN은 토큰 하나를 처리할 때 실제로 쓰는 매개변수의 수입니다. 그렇다면 매개변수는 많이 두되 토큰마다 일부만 쓰면 어떨까요? 전문가 혼합(MoE)은 층 안의 작은 신경망 하나를 '전문가' 여럿으로 바꾸고, 라우터⁠(router)⁠라는 작은 신경망이 토큰마다 전문가들에게 점수를 매겨 가장 높은 kk개를 골라 그 출력만 섞습니다. 아래 식에서 Ei(x)E_i(\mathbf x)는 i번 전문가의 출력, gi(x)g_i(\mathbf x)는 그 출력에 줄 무게, Topk\mathrm{Top}_k는 점수가 가장 높은 k개의 모임입니다.

y=∑i∈Topk(x)gi(x) Ei(x),gi(x)=고른 전문가들의 점수에 대한 소프트맥스\mathbf y = \sum_{i \in \mathrm{Top}_k(\mathbf x)} g_i(\mathbf x)\, E_i(\mathbf x), \qquad g_i(\mathbf x) = \text{고른 전문가들의 점수에 대한 소프트맥스}

숫자로 따라가 봅시다. 전문가가 8개이고 k = 2라고 합시다. 한 토큰에 대해 라우터가 8개 전문가에게 점수를 매겼더니 3번이 2.0, 6번이 1.0으로 가장 높았습니다. 나머지 여섯 전문가는 이 토큰에 대해 아예 계산하지 않습니다. 두 점수에 소프트맥스를 하면 5절의 예처럼 무게는 약 0.73과 0.27이고, 출력은 0.73 E3(x)+0.27 E6(x)0.73\,E_3(\mathbf x) + 0.27\,E_6(\mathbf x)입니다. 다음 토큰에서는 다른 두 전문가가 뽑힐 수 있습니다. 매개변수는 전문가 8개분이 있지만, 토큰 하나의 계산은 2개분만 듭니다.

생각 자체는 1991년 로버트 제이컵스, 마이클 조던, 스티븐 놀런, 힌턴의 논문으로 거슬러 가고, 2017년 구글의 노엄 샤지어 등이 이것을 큰 언어 모델에 썼습니다. 2023년 12월 미스트랄의 Mixtral은 층마다 전문가 8개 가운데 2개를 골라, 매개변수는 약 470억 개인데 토큰 하나에는 약 130억 개만 씁니다. 2024년 12월 딥시크는 DeepSeek-V3가 매개변수 6,710억 개 가운데 토큰마다 370억 개를 쓰고, 토큰 14.8조 개로 훈련하는 데 H800 칩 278.8만 시간이 들었다고 보고했습니다.

어려움은 쏠림입니다. 처음에 조금 잘하는 전문가가 토큰을 더 받고, 그래서 더 잘하게 되고, 그래서 또 더 받습니다. 그러면 나머지 전문가는 놀고, 매개변수를 많이 둔 보람이 사라집니다. 이를 막으려고 흔히 벌점을 둡니다. 전문가 ii가 실제로 받은 토큰의 비율을 fif_i, 라우터가 전문가 i에게 준 확률의 평균을 PiP_i라 하고, ∑ifiPi\sum_i f_i P_i에 전문가 수를 곱한 값을 손실에 더합니다. 전문가가 8개일 때 확인해 봅시다. 모든 토큰이 한 전문가에게 몰리고 라우터도 그 전문가에게 확률 1을 준다면 합은 1 × 1 = 1이고, 8을 곱해 벌점은 8입니다. 토큰이 고르게 나뉘어 모든 fif_i와 PiP_i가 1/8이면 합은 8×18×18=188 \times \tfrac18 \times \tfrac18 = \tfrac18이고, 8을 곱해 벌점은 1입니다. 토큰이 고르게 나뉠수록 작아지도록 고안된 양입니다. DeepSeek-V3는 주로 다른 방식을 썼습니다. 전문가마다 고를 때만 점수에 더하는 치우침 값을 두고, 토큰을 너무 많이 받은 전문가는 그 값을 조금 줄이고 너무 적게 받은 전문가는 조금 늘립니다(아주 작은 보조 벌점은 남겨 두었습니다).

전문가 혼합은 계산을 아끼지 메모리를 아끼지는 않습니다. 쓰지 않는 전문가도 모두 메모리에 올려 두어야 합니다. 이름과 달리, 전문가가 사람이 알아볼 만한 주제로 나뉜다는 보장도 없습니다.

DeepSeek-V3를 훈련한 H800 칩에는 국가 사이의 사정이 얽혀 있습니다. 2022년 10월 미국은 계산 성능과 칩 사이의 통신 속도⁠(velocity)⁠가 일정 기준을 넘는 칩의 중국 수출을 막았고, 엔비디아는 통신 속도를 초당 900GB(H100)에서 400GB로 낮춘 중국용 H800을 내놓았습니다. 이 칩도 2023년 10월의 추가 규제로 수출이 막혔습니다. 이런 규제가 딥시크가 계산 효율을 짜내는 쪽으로 알고리즘을 다듬어 온 배경으로 흔히 꼽힙니다. 다만 초당 400GB도 최첨단 모델을 훈련하기에는 충분했다는 분석도 있습니다.

더 긴 글, 글 아닌 것, 더 싼 계산. 창은 2023년 초의 수천 토큰에서 2024년 2월 구글 제미나이 1.5의 100만 토큰(연구용 시험으로는 1,000만 토큰)까지 넓어졌습니다. 2026년 4월 24일 딥시크가 공개 가중치의 미리보기로 내놓은 V4도 100만 토큰 창을 내세웠습니다. 회사의 발표로는 큰 쪽인 V4-Pro가 매개변수 1.6조 개 가운데 토큰마다 490억 개만 쓰는 전문가 혼합 모델이고, 최상위 비공개 모델들과 견줄 만하다고 합니다. 그 바탕에 6절의 위치 방법들과 계산을 줄이는 공학이 있습니다. 2023년 3월의 GPT-4는 그림을 입력으로 받는 능력을 선보였습니다. 그림을 작은 조각으로 잘라 조각마다 벡터로 바꾸면 그림도 토큰의 줄이 되니, 같은 다음 토큰 기계가 그림과 소리를 함께 다룰 수 있습니다.

쓰는 비용을 줄이는 방법 가운데는 수학적으로 깔끔한 것이 있습니다. 큰 모델은 토큰을 하나씩 차례로 만들어야 해서 느립니다. 그런데 이미 적힌 토큰 여러 개를 검사하는 일은 5절에서 본 대로 한꺼번에 할 수 있습니다. 추측 디코딩(2022–23년, 구글의 야니브 레비아탄 등과 딥마인드의 찰리 천 등)은 이 차이를 씁니다. 작은 모델이 토큰 몇 개를 빠르게 먼저 적고, 큰 모델이 한꺼번에 검사하게 합니다. 물음은 '작은 모델이 적은 것을 받아들이면서도 큰 모델이 혼자 쓴 것과 똑같은 글을 얻을 수 있는가'입니다. 작은 모델이 확률 q(x)q(x)로 낸 토큰을 큰 모델의 확률 p(x)p(x)에 비추어 min⁡(1,p(x)/q(x))\min\big(1, p(x)/q(x)\big)의 확률로 받아들이고, 거절하면 max⁡(0,p−q)\max(0, p - q)를 합이 1이 되게 나눈 분포에서 다시 뽑습니다. 예를 들어 작은 모델은 어떤 토큰에 0.6을, 큰 모델은 0.3을 준다면 그 토큰은 절반의 확률로만 받아들입니다. 작은 모델이 그 토큰을 큰 모델보다 두 배 자주 내니, 절반만 받아 주면 딱 맞습니다. 거꾸로 큰 모델이 더 높은 확률을 주는 토큰은 늘 받아들이고, 모자라는 몫은 거절된 뒤 다시 뽑을 때 채웁니다. 그러면 결과는 큰 모델이 혼자 뽑은 것과 정확히 같은 분포를 따릅니다.

토큰이 '가'와 '나' 둘뿐인 경우로 확인해 봅시다. 작은 모델은 q = (0.6, 0.4), 큰 모델은 p = (0.3, 0.7)을 준다고 합시다. 작은 모델이 '가'를 낼 확률은 0.6이고 그 가운데 절반(0.3/0.6)만 받아들이니, 받아들여진 '가'는 0.6 × 0.5 = 0.3입니다. '나'는 큰 모델이 더 좋아하니 늘 받아들여 0.4입니다. 거절되는 경우는 '가'를 냈다가 퇴짜 맞는 0.3입니다. 거절되면 max⁡(0,p−q)=(0,0.3)\max(0, p-q) = (0, 0.3)을 합 0.3으로 나눈 (0, 1)에서 다시 뽑으니 반드시 '나'가 나옵니다. 모두 합하면 '가'는 0.3, '나'는 0.4 + 0.3 = 0.7로, 큰 모델의 p와 정확히 같습니다.

일반적인 경우 보기

작은 모델이 xx를 내고 그것이 받아들여질 확률은 q(x)×min⁡(1,p(x)/q(x))=min⁡(q(x),p(x))q(x) \times \min\big(1, p(x)/q(x)\big) = \min\big(q(x), p(x)\big), 줄여 min⁡(p,q)\min(p, q)입니다. 그러니 거절될 확률은 ∑x(q(x)−min⁡(q(x),p(x)))=∑xmax⁡(0,q(x)−p(x))\sum_x \big(q(x) - \min(q(x), p(x))\big) = \sum_x \max\big(0, q(x) - p(x)\big)입니다. p와 q는 모두 합이 1이라, q가 p보다 큰 곳의 초과분의 합은 p가 q보다 큰 곳의 초과분의 합 ∑xmax⁡(0,p(x)−q(x))\sum_x \max(0, p(x) - q(x))과 같습니다. 그래서 거절된 뒤 다시 뽑아 xx가 나올 확률은 (거절 확률) × max⁡(0,p(x)−q(x))/∑x′max⁡(0,p(x′)−q(x′))\max(0, p(x)-q(x)) / \sum_{x'} \max(0, p(x')-q(x'))인데, 앞의 두 합이 같아 상쇄되고 max⁡(0,p−q)\max(0, p-q)만 남습니다. 앞에서 적은 대로 거절될 때 다시 뽑는 분포가 max⁡(0,p−q)\max(0, p-q)를 합이 1이 되게 나눈 것이기 때문입니다. 둘을 더하면 min⁡(p,q)+max⁡(0,p−q)=p(x)\min(p, q) + \max(0, p - q) = p(x)입니다.

큰 모델의 출력 분포를 작은 모델이 흉내 내게 훈련하는 증류(2015년 힌턴 등)에는 9절의 온도가 쓰입니다. 온도를 높여 분포를 펴면 '틀린 답들 사이의 비율'까지 작은 모델에게 전해집니다. 예를 들어 '고양이' 그림에서 큰 모델이 '호랑이'에 0.01, '자동차'에 0.0001을 준다면, 정답만 배우는 작은 모델은 이 차이를 볼 수 없지만, 온도를 높여 두 값이 눈에 띄게 커진 분포를 흉내 내면 '고양이는 자동차보다 호랑이를 닮았다'는 것까지 배웁니다. 가중치 하나를 16비트 대신 4비트쯤으로 적는 양자화⁠(quantization)⁠도 널리 쓰입니다. 16개의 0과 1로 적던 수를 4개로 적으니 메모리가 4분의 1로 주는 대신, 수를 적을 수 있는 값이 24=162^4 = 16가지뿐이라 조금 거칠어집니다.

도구와 에이전트⁠(agent)⁠. 언어 모델이 내놓는 것은 글뿐입니다. 그런데 그 글이 '계산기(37 × 49)'처럼 약속된 꼴이면, 바깥 프로그램이 그것을 실행해 결과를 글 속에 붙여 넣고 모델이 이어 쓰게 할 수 있습니다. 2022년 10월 프린스턴과 구글의 야오순위 등은 생각을 적고, 행동을 적고, 관찰을 읽는 일을 번갈아 하는 ReAct를 내놓았습니다. 2023년 2월에는 메타의 티모 시크 등이 툴포머를 내놓았습니다. 계산기·검색·번역·달력을 언제 부를지 모델이 스스로 배우게 한 것입니다. 모델은 37 × 49를 계산하는 법을 몰라도 '계산기를 부를 때'를 알면 1,813을 얻습니다.

모델이 모르는 사실을 문서에서 찾아 붙여 주는 검색 증강 생성(2020년)은 4절의 낱말 벡터처럼 질문과 문서를 벡터로 바꾸어, 내적이나 코사인 유사도가 큰 문서부터 찾아 입력에 붙입니다. 환각을 줄여 주지만 없애지는 못합니다. 찾아 온 문서가 틀릴 수도 있고, 모델이 문서와 다르게 말할 수도 있기 때문입니다.

2024년 11월 앤트로픽은 모델과 도구를 잇는 공개 규약 MCP를 내놓았고, 이듬해 여러 회사가 이를 받아들였습니다. 도구를 부르고, 결과를 보고, 다시 계획하는 고리를 여러 번 도는 체계를 에이전트라고 부릅니다. 연구 단체 METR은 2025년 3월, 에이전트가 절반의 확률로 끝내는 과제의 길이(숙련자가 걸리는 시간으로 잰 것)가 2019–2025년에 대략 7개월마다 두 배가 되었다고 보고했습니다. 7개월마다 두 배라면 2년(24개월)에 약 3.4번 두 배가 되니 23.4≈112^{3.4} \approx 11배입니다. 같은 보고는 2024년 이후의 모델만 보면 두 배가 되는 기간이 그보다 짧아 보인다고도 적었습니다. 이것도 8절의 규모의 법칙처럼 측정입니다. 과제를 어떻게 고르느냐에 따라 기울기가 달라지고, 아주 긴 과제는 사람의 기준 시간이 대부분 어림값이라는 점을 METR 스스로 밝혀 두었습니다.

생각의 사슬. 2022년 1월 구글의 제이슨 웨이 등은 문제와 함께 풀이 과정을 적은 예 여덟 개를 보여 주기만 해도, 매개변수 5,400억 개의 PaLM이 초등 수학 문장제 모음(GSM8K)에서 그때까지의 최고 기록을 냈다고 보고했습니다. 이것을 생각의 사슬(chain of thought) 프롬프트라고 부릅니다. 왜 도움이 될까요? 트랜스포머가 토큰 하나를 낼 때 거치는 계산의 단계 수는 층의 수로 정해져 있습니다. 앞 단계의 결과를 받아 다음 단계를 잇는 일을 층 수보다 길게 할 수는 없다는 뜻입니다. 중간 과정을 토큰으로 적으면, 적는 토큰마다 그 층들을 한 번씩 더 지나고 그 결과를 다음 계산의 입력으로 쓸 수 있습니다. 공책이 생기는 셈입니다. 2024년 윌리엄 메릴과 아시시 사바르왈은 중간 토큰을 입력 길이에 비례하는 만큼 쓰게 하면, 중간 토큰 없이는 표현할 수 없는 계산까지 트랜스포머가 표현할 수 있음을 증명했습니다. 예를 들어 긴 입력을 한 글자씩 읽으며 상태를 차례로 바꾸어 가는 계산(유한 오토마톤⁠(finite automaton)⁠을 따라가는 계산)이 그렇습니다. 다만 '중간 토큰 없이는 할 수 없다'는 쪽은, 층 수가 정해진 병렬 계산으로는 이런 차례차례 계산을 모두 흉내 낼 수 없다는 복잡도 이론의 가정에 기댑니다. 널리 믿어지지만 증명되지는 않은 가정입니다. 표현할 수 있다는 것이 그렇게 배운다는 뜻은 아니지만, 생각을 적는 것이 계산을 늘린다는 직관에는 수학적 뿌리가 있습니다.

같은 팀의 왕쉐즈 등은 2022년 3월 한 걸음 더 나갔습니다. 그들이 내놓은 자기 일관성⁠(self-consistency)⁠은 온도를 0보다 크게 두고 풀이를 여러 번 뽑은 뒤, 마지막 답만 모아 가장 많이 나온 답을 고르는 방법입니다. GSM8K에서 정답률이 17.9%포인트(정답률의 퍼센트 값 자체가 17.9만큼) 올랐다고 보고했습니다. 왜 통할까요? 맞는 풀이들은 길이 달라도 같은 답에 모이고, 틀린 풀이들은 저마다 다른 답으로 흩어지는 경향이 있기 때문입니다. 아래 그림의 모형으로 따져 봅시다. 한 번 뽑을 때 정답이 나올 확률은 p=p = , 특정한 그럴듯한 오답 하나가 나올 확률은 w=w = 이고, 나머지 의 확률로는 매번 서로 다른 오답이 나온다고 둡니다. 뽑는 횟수는 k=k = 입니다.

가로축은 뽑는 횟수 k, 세로축은 확률입니다. 파란 곡선은 k개 답의 다수결(가장 많이 나온 답, 동점이면 제비뽑기)이 정답일 확률로, 이 모형에서 정확히 계산한 값입니다. 청록 점선은 k개 가운데 정답이 하나라도 있을 확률, 회색 점선은 한 번 뽑을 때의 정답률 p입니다. 노란 점을 좌우로 끌 수 있습니다.

지금 다수결의 정답률은 , 정답이 하나라도 섞여 있을 확률은 입니다. ↻ 한 번 해 보기

처음 설정(p = 0.4, w = 0.25)에서 다수결의 정답률은 k = 5에서 0.609, k = 41에서 0.885로 오릅니다. 한 번 뽑으면 열에 넷만 맞는데도 그렇습니다. 이유는 큰 수의 법칙, 곧 여러 번 되풀이할수록 실제로 나온 비율이 확률에 다가간다는 사실입니다. k = 100이면 정답은 대략 40번, 그럴듯한 오답은 대략 25번 나오고, 나머지 35번은 저마다 다른 오답이라 하나하나가 한 번씩밖에 나오지 않습니다. 그러니 40표를 받은 정답이 이깁니다. k가 커질수록 이 어림이 더 정확해지니, p > w이면 정답이 이길 확률이 1로 갑니다.

그런데 w를 p보다 크게 하면(예를 들어 p = 0.3, w = 0.45) 곡선은 k = 5 무렵 0.33에서 꺾여 내려가 k = 41에서 0.13이 됩니다. 같은 셈으로, 이번에는 그럴듯한 오답이 정답보다 많은 표를 받기 때문입니다. 모델이 한쪽으로 치우쳐 틀리면, 많이 뽑을수록 그 틀린 답을 더 굳게 고릅니다. 흔히 많이 뽑을수록 늘 좋아진다고 생각하지만, 다수결은 우연한 실수를 지우지, 체계적인 실수를 지우지는 못합니다.

청록 점선은 다른 이야기를 합니다. k개 가운데 정답이 하나라도 있을 확률은 '모두 틀릴 확률'을 1에서 뺀 1−(1−p)k1 - (1-p)^k입니다. p = 0.4, k = 5이면 모두 틀릴 확률이 0.65≈0.080.6^5 \approx 0.08이니 약 0.92입니다. 이 값은 p가 0보다 크기만 하면 1로 갑니다. 그러나 이것을 실제로 얻으려면 여럿 가운데 정답을 알아보는 검사기가 있어야 합니다.

답이 두 가지뿐일 때 다수결이 정답에 다가간다는 같은 사실을 1785년 콩도르세가 배심원 정리⁠(jury theorem)⁠로 적었습니다. 그는 같은 책에서, 후보가 셋 이상이면 다수결의 선호가 가위바위보처럼 돌고 돌 수 있다는 역설도 적었습니다. 다수결이 언제 믿을 만하고 언제 무너지는지는 「불가능의 증명」 8절에 있습니다.

과정을 채점할까, 답을 채점할까. 그런 검사기는 어떻게 훈련할까요? 2023년 5월 오픈AI의 헌터 라이트먼 등은 마지막 답만 채점하는 대신, 사람이 풀이의 단계마다 옳고 그름을 표시한 80만 개의 표시(PRM800K)로 과정 보상 모델⁠(process reward model)⁠, 곧 풀이의 각 단계에 점수를 주는 보상 모델을 훈련했습니다. 답만 보는 채점은 우연히 답이 맞은 엉터리 풀이에도 만점을 주지만, 단계를 보는 채점은 어느 줄에서 틀렸는지를 짚을 수 있습니다. 그리고 경시 수학 문제 모음(MATH)의 대표 부분 집합⁠(set)⁠에서 78%를 풀어, 답만 채점한 쪽보다 낫다고 보고했습니다. 다른 길은 사람이 아니라 규칙이 채점하는 것입니다. 수학 문제의 마지막 답이나 프로그램의 시험 통과처럼 맞고 틀림을 기계적으로 확인할 수 있는 곳에서는, 그 확인 결과를 곧장 보상으로 쓸 수 있습니다. 이것을 검증 가능한 보상⁠(verifiable reward)⁠의 강화 학습(RLVR)이라고 부릅니다. 여기서는 9절의 굿하트의 법칙이 덜 무섭습니다. 흉내 낸 보상 모델이 아니라 실제 정답과 비교하기 때문입니다. 물론 확인할 수 있는 영역에서만 그렇습니다.

추론 모델. 2024년 9월 12일 오픈AI는 o1을 내놓았습니다. 강화 학습으로, 답하기 전에 긴 생각의 사슬을 쓰도록 훈련한 모델입니다. 오픈AI는 성능이 훈련 때의 강화 학습 계산과 답할 때 생각하는 계산 두 가지 모두에 따라 꾸준히 오른다고 보고했습니다. 2024년 미국 수학 경시(AIME)에서는 한 번 풀기로 평균 74%, 64번 뽑아 다수결로 83%, 1,000번 뽑아 학습한 채점기로 고르면 93%를 맞혔다고 밝혔습니다. 회사의 발표였고, 훈련 방법의 세부와 생각의 사슬 자체는 공개하지 않았습니다.

2025년 1월 항저우의 딥시크는 DeepSeek-R1의 가중치와 방법을 공개했습니다. 출발점은 DeepSeek-V3의 바탕 모델, 곧 다음 토큰 맞히기로만 훈련하고 사람의 선호로는 아직 다듬지 않은 모델이었습니다. 여기에 사람이 쓴 풀이를 전혀 보여 주지 않고, 두 가지만 규칙으로 채점해 강화 학습을 했습니다. 마지막 답이 맞았는가, 그리고 생각을 <think>…</think> 같은 정해진 표시(태그) 사이에 적었는가입니다(R1-Zero). 보고에 따르면 AIME 2024에서 한 번 풀기의 정답률이 15.6%에서 71.0%로, 64번 다수결로는 86.7%로 올랐습니다. 훈련이 진행될수록 답이 길어지며 "잠깐, 다시 보자" 같은 되돌아보기가 저절로 나타났다고도 합니다. 읽기 어렵고 여러 언어가 뒤섞이는 문제는 사람이 쓴 풀이 조금으로 먼저 훈련해 누그러뜨렸습니다(R1). 이 논문은 2025년 9월 『네이처』에 심사를 거쳐 실렸고, 부록에는 R1의 강화 학습에 약 29만 4,000달러가 들었다고 적혀 있습니다. 바탕 모델을 만드는 데 든 약 600만 달러는 여기에 들어 있지 않습니다.

R1이 쓴 강화 학습 방법 GRPO(2024년 2월, 딥시크의 샤오즈훙 등)는 분산과 표준화⁠(standardization)⁠ 한 줄로 요약됩니다. 질문 하나에 답을 GG개 뽑아 각각 보상 r1,…,rGr_1, \dots, r_G를 받으면, 답 ii의 '이점'을

Ai=ri−mean(r1,…,rG)std(r1,…,rG)A_i = \frac{r_i - \mathrm{mean}(r_1, \dots, r_G)}{\mathrm{std}(r_1, \dots, r_G)}

로 매깁니다. mean은 평균, std는 표준편차(값들이 평균에서 흩어진 정도)입니다. 곧 보상에서 G개 답의 평균을 빼고 표준편차로 나눈 것이고, '같은 질문의 다른 답들보다 얼마나 나았는가'를 잰 값입니다. 예를 들어 네 답의 보상이 1, 0, 0, 1(맞으면 1, 틀리면 0)이면 평균 0.5, 표준편차 0.5(개수로 나누어 잰 값)라서 이점은 (1 − 0.5)/0.5 = +1, (0 − 0.5)/0.5 = −1, −1, +1입니다. 네 답 가운데 하나만 맞았다면 평균 0.25, 표준편차 약 0.43이라 맞은 답의 이점은 약 +1.73, 틀린 답은 약 −0.58입니다. 드물게 맞힌 답일수록 크게 칭찬받습니다.

이점이 양수인 답의 토큰들은 확률을 올리고 음수인 답의 토큰들은 내립니다. 9절처럼 기준 모델에서 너무 멀어지지 않게 KL 벌점을 두고, 한 번에 너무 크게 바뀌지 않게 '새 확률 ÷ 고치기 전 확률'이라는 비를 일정한 범위(예를 들어 0.8배에서 1.2배 사이)로 자릅니다. 같은 질문에서 뽑은 다른 답들이 곧 비교의 기준이니, 기존 방법(PPO)처럼 기준값을 예측하는 신경망을 모델만 한 크기로 따로 둘 필요가 없습니다. 이 식은 한계도 알려 줍니다. 네 답이 모두 맞거나 모두 틀리면 표준편차가 0이고, 이점도 모두 0이 됩니다(실제로는 0으로 나누지 않게 작은 수를 더합니다). 모델이 한 번도 풀지 못하는 문제에서는 배울 것이 없다는 뜻이고, 앞 그림으로 말하면 청록 점선이 0 근처에 붙어 있는 문제입니다.

생각하는 시간이라는 새 축. 8절의 규모의 법칙은 훈련에 쓰는 계산에 관한 것이었습니다. 추론 모델은 답할 때 쓰는 계산이라는 두 번째 축을 열었습니다. 2024년 8월 버클리와 구글 딥마인드의 찰리 스넬 등은 수학 문제에서 답할 때의 계산을 문제의 난이도에 맞추어 나누면, 여럿 뽑아 가장 좋은 것을 고르는 단순한 방법보다 4배 넘게 효율적이라고 보고했습니다. 또 계산량을 맞춘 비교에서, 작은 모델이 어느 정도는 풀 수 있는 문제라면 그 모델이 14배 큰 모델을 앞설 수 있다고 했습니다. 정리하면, 이제 모델을 좋게 하는 길은 '더 크게 훈련하기'와 '답할 때 더 오래 생각하게 하기' 두 가지이고, 둘 사이에서 계산을 어떻게 나눌지가 새 물음이 되었습니다.

그 뒤로 추론은 따로 떨어진 모델이 아니라 기본 기능이 되어 갔습니다. 2025년 8월의 GPT-5는 빠른 모델과 생각하는 모델을 라우터로 묶었습니다. 2025년 7월 국제 수학 올림피아드(IMO)에서는 구글 딥마인드의 제미나이 딥 싱크가 여섯 문제 가운데 다섯 문제를 자연어 증명으로 풀어 42점 만점에 35점(금메달 기준)을 받았고, 이 점수는 대회 측의 채점으로 확인되었습니다. 오픈AI도 실험 모델로 같은 점수를 냈다고 발표했는데, 이쪽은 전직 메달리스트 세 사람에게 채점을 맡긴 자체 평가였습니다.

열린 질문. 이 몇 해의 결과 가운데 많은 것이 아직 다투어지고 있습니다. 자세한 것은 추론 모델 페이지에 있습니다.

정리하면, 이 몇 해의 변화 가운데 많은 것은 앞 절의 수학을 새로 읽은 것입니다. DPO는 9절의 기울이기 식을 거꾸로 읽었고, 전문가 혼합은 8절의 계산량 셈에서 N이 '토큰마다 실제로 쓰는 매개변수'라는 점을 이용했으며, 추론 모델은 9절의 뽑기와 이 절의 다수결, 그리고 기계로 확인할 수 있는 보상 위에 섰습니다.

다음 절의 질문은 이 몇 해가 지난 뒤에도 그대로 남습니다. 훈련 목표에 '참'이 직접 들어오는 곳은 검증 가능한 보상이 닿는 곳, 곧 답을 기계적으로 확인할 수 있는 좁은 영역뿐입니다. 그 밖에서는 여전히 글의 분포와 사람(또는 AI)의 선호를 닮는 것이 목표입니다.

11 · 수학이 말해 주는 것그리고 말해 주지 않는 것

이 절의 물음은 이것입니다. 훈련 목표만 정확히 읽으면, 언어 모델에게 무엇을 기대할 수 있고 무엇은 기대할 수 없는가? 답은 세 가지로 나뉩니다. 목표에는 '참'이 없고, 배우는 것은 본 방향의 확률이며, 왜 이렇게 잘 되는지는 아직 다 설명되지 않았습니다.

여기까지 온 수학을 한 줄로 줄이면 이렇습니다. 언어 모델은 교차 엔트로피를 줄이도록, 곧 학습 글의 분포에 KL 발산으로 다가가도록 훈련되고(2절), 그다음 사람의 선호로 조금 기울여집니다(9절). 10절의 검증 가능한 보상은 여기에 '기계로 확인할 수 있는 정답'이라는 좁은 항을 하나 더할 뿐입니다.

첫째, 목표 어디에도 '참'이라는 말이 없습니다. 교차 엔트로피가 재는 것은 글의 분포와의 거리입니다. 학습 글이 틀린 말을 담고 있으면 그 말을 잘 맞히는 것이 목표에 맞습니다. 더 근본적으로, 학습 글이 답을 정해 주지 않는 질문에도 모델은 어떤 분포를 내놓아야 하고, 그 분포에서 뽑힌 답은 그럴듯한 모양을 하고 있습니다. 그럴듯하지만 사실이 아닌 답을 흔히 환각이라고 부릅니다. 흔히 환각을 버그처럼 고치면 사라질 결함으로 생각하지만, 아래의 결과는 적어도 일부가 목표 자체에서 나온다는 것을 보여 줍니다.

2023년에 공개되어 이듬해 발표된 논문에서 애덤 토만 칼라이와 산토시 벰팔라는 이것을 정리로 만들었습니다. 먼저 필요한 개념이 보정입니다. 보정되어 있다는 것은 모델이 매긴 확률이 실제 빈도와 맞는다는 뜻입니다. 일기 예보에 견주면, 비 올 확률 30%라고 한 날들 가운데 실제로 30%쯤 비가 오는 것입니다(논문은 이 조건을 글의 분포에 맞게 고쳐 정의합니다).

이제 어떤 사람의 생일처럼 규칙으로 짐작할 수 없는 사실들을 생각합니다. 정리는 이렇습니다. 모델이 보정되어 있다면, 그런 사실에 대해 모델이 지어낸 말을 하는 비율은 학습 글에 딱 한 번 나온 사실의 비율쯤보다 작을 수 없습니다(정확히는 그 비율에서 보정의 오차와 작은 항을 뺀 값보다 작을 수 없습니다). 숫자로 읽으면, 학습 글에서 생일을 말한 문장 가운데 20%가 학습 글 전체에 딱 한 번만 나온 생일에 관한 것이라면, 보정된 모델이 생일에 관해 말할 때 지어낸 말의 비율도 대략 20% 가까이는 된다는 것입니다.

왜 그럴까요? 3절의 굿–튜링 추정이 여기 있습니다. 새를 관찰하는 예에서, 한 번만 본 종의 비율은 '다음 새가 처음 보는 종일 확률'의 어림이었습니다. 마찬가지로 한 번만 나온 생일의 문장이 20%라는 것은, 세상에서 생일을 말하는 글 가운데 약 20%는 모델이 한 번도 본 적 없는 생일에 관한 것이라는 어림입니다. 보정된 모델은 그 몫에도 약 20%의 확률을 나누어 주어야 합니다. 그런데 본 적 없는 사람의 생일은 맞힐 길이 없으니, 그 몫에서 나온 말은 대부분 지어낸 말입니다. 이것은 가정이 붙은 하한⁠(lower bound)⁠이지 모든 오류의 설명은 아닙니다.

모르면 모른다고 답하도록 훈련하면 이 비율을 줄일 수 있지만, 그 대가로 보정이 깨지거나 답을 거절하는 일이 늘어납니다. 그런데 모델은 왜 모를 때 모른다고 하지 않을까요? 2025년 칼라이 등은 채점 방식을 지적했습니다. 맞으면 1점, 틀리거나 모른다고 하면 0점을 주는 흔한 채점에서는, 모르는 사람의 생일을 찍어서 맞힐 확률이 1/365뿐이어도 평균 점수가 1/365이니 '모른다'의 0점보다 낫습니다. 이런 채점은 모델에게 모를 때도 찍으라고 가르칩니다.

둘째, 모델이 배우는 것은 본 방향의 조건부 확률입니다. 2023년 루카스 베르글룬트 등은 "A는 B이다" 꼴의 문장으로만 훈련한 모델이 "B는 무엇인가?"에는 A라고 답하지 못하는 경우가 많다는 것을 보고했습니다. 예를 들어 지어낸 문장 '김아무개는 『푸른 달』의 작가이다'를 여러 번 읽힌 모델은 '김아무개는 무엇을 썼나?'에는 답해도, '『푸른 달』의 작가는 누구인가?'에는 답하지 못하기 쉽다는 것입니다. P(B∣A)P(B \mid A)를 잘 아는 것과 P(A∣B)P(A \mid B)를 잘 아는 것은 다른 일이고, 둘을 잇는 것은 베이즈 정리이지 훈련 목표가 아닙니다. 사람에게는 당연해 보이는 '뒤집기'도 자료에 없으면 배우지 못할 수 있다는 뜻입니다.

셋째, 수학이 아직 설명하지 못하는 것이 많습니다. 흔히 인용되는 결과부터 봅시다. 보편 근사 정리(1989년 조지 시벤코, 1991년 쿠르트 호르니크)입니다. 신경망의 뉴런 하나는 입력들에 가중치를 곱해 더한 뒤, 활성화 함수⁠(activation function)⁠라는 정해진 함수에 통과시킵니다. 9절의 S자 함수 σ(시그모이드⁠, sigmoid⁠)가 그런 함수의 예입니다. 입력과 출력 사이에 뉴런들이 한 줄로 늘어선 층을 은닉층이라고 부릅니다. 정리에 따르면, 은닉층이 하나뿐인 신경망도 시그모이드 같은 알맞은 활성화 함수를 쓰고 뉴런을 충분히 많이 두면, 유계인 닫힌 영역(경계까지 포함하고 한없이 뻗지 않는 영역, 예를 들어 테두리까지 포함한 정사각형) 위의 연속함수(끊어진 데 없이 이어진 함수)를 원하는 만큼 가깝게 흉내 낼 수 있습니다.

그러나 이것은 그런 가중치가 있다는 말이지, 유한한 자료에서 확률적 경사 하강법(자료를 조금씩 뽑아 가며 하는 경사 하강법)으로 그것을 찾을 수 있다는 말이 아닙니다. 필요한 뉴런이 얼마나 많은지도 말해 주지 않습니다. 매개변수가 자료보다 훨씬 많은데도 왜 외우기만 하지 않고 새 글을 잘 맞히는지, 왜 입력에 예를 보여 주기만 해도 새 과제를 흉내 내는지, 8절의 규모의 법칙은 왜 거듭제곱 꼴인지를 두고 부분적인 설명과 모형은 있지만 완결된 이론은 없습니다.

이 모델이 말을 '이해'하는지는 수학의 질문이라기보다 이해라는 말을 어떻게 정할지의 질문이고, 그 논쟁은 「말을 세는 기계」 8절과 「기계가 풀 수 없는 문제」 8절에 있습니다. 2021년 에밀리 벤더, 팀닛 게브루 등은 이런 모델을 뜻을 모른 채 말의 형태를 이어 붙이는 '확률적 앵무새'라고 부르며 자료의 편향과 비용을 경고했습니다.

그래도 분명한 것이 있습니다. 섀넌의 쌍둥이는 여전히 옳습니다. 2절에서 본 대로, 모델이 매긴 확률로 산술 부호화를 하면 글 전체를 교차 엔트로피만큼의 비트로 적을 수 있습니다. 언어 모델은 학습 글을 짧게 적는 법, 곧 압축하는 법을 배운 기계입니다.

다만 모델 자체를 적는 길이까지 셈에 넣으면 말이 달라집니다. 받는 쪽에도 같은 모델, 곧 '쌍둥이'가 있어야 풀 수 있기 때문입니다. 2023년 딥마인드의 그레구아르 델레탕 등은 매개변수 700억 개의 친칠라가 위키백과 10억 바이트(약 1GB)를 원래 크기의 8.3%, 곧 약 0.083GB로 줄이지만, 매개변수를 적는 약 140GB를 더하면 원래의 140배쯤이 된다는 것을 함께 보고했습니다. 짧은 설명을 좋은 설명으로 보는 오컴의 면도날⁠(Occam's razor)⁠이 어떻게 비트의 셈이 되었는지, 그 셈에서 이 숫자를 어떻게 읽어야 하는지는 「압축하는 것이 이해하는 것이다」 8절에 있습니다. 잘 압축하려면 글 속의 규칙성을 찾아야 하고, 글 속에는 문법과 사실과 추론의 흔적이 모두 규칙성으로 들어 있습니다. 모델이 그것들을 얼마나, 어떤 방식으로 담고 있는지는 지금도 활발한 연구 주제입니다. 다만 모델이 잘 맞힌다는 것과 모델이 옳다는 것은 서로 다른 말이고, 이 글의 수학은 그 둘을 구별하게 해 줍니다.

정리하면, 훈련 목표가 약속하는 것은 '학습 글처럼 말하기'와 '선호되는 쪽으로 기울기'입니다. 참을 말하는 것은 목표 밖에 있어서, 보정된 모델도 본 적 없는 사실에서는 지어낸 말을 하고, 본 방향의 확률만 배운 모델은 뒤집힌 질문에 약할 수 있습니다. 왜 이렇게 잘 일반화하는지는 아직 열린 문제입니다.

12 · 이어지는 길다음 낱말이 닿는 곳

다음 낱말을 맞히는 기계는 이 사이트의 거의 모든 분야를 지나갑니다.

요약. 글의 확률은 곱셈 규칙으로 다음 낱말의 조건부 확률들의 곱으로 정확히 쪼개지고, 언어 모델은 그 조건부 확률을 추정합니다. n-그램은 문맥을 앞의 몇 낱말로 자르고 세어서 추정하며, 신경망은 낱말을 벡터로 두고 어텐션으로 긴 문맥을 봅니다. 어느 쪽이든 훈련은 실제로 나온 토큰에 준 확률의 로그 평균을 키우는 일, 곧 교차 엔트로피를 줄이는 일입니다.

L=−1n∑i=1nlog⁡2q(wi∣w<i)=H(p)+DKL(p ∥ q)  (긴 글에서),PP=2LL = -\frac1n \sum_{i=1}^{n} \log_2 q(w_i \mid w_{\lt i}) = H(p) + D_{\mathrm{KL}}(p \,\|\, q) \;(\text{긴 글에서}), \qquad \mathrm{PP} = 2^{L} Attention(Q,K,V)=softmax ⁣(QK⊤d)V,π∗∝πref er/β\mathrm{Attention}(Q, K, V) = \mathrm{softmax}\!\left(\frac{QK^{\top}}{\sqrt d}\right)V, \qquad \pi^{*} \propto \pi_{\mathrm{ref}}\, e^{r/\beta} (Rmθq)⋅(Rnθk)=q⊤R(n−m)θ k,Ai=ri−mean(r)std(r)(R_{m\theta}\mathbf q)\cdot(R_{n\theta}\mathbf k) = \mathbf q^{\top}R_{(n-m)\theta}\,\mathbf k, \qquad A_i = \frac{r_i - \mathrm{mean}(r)}{\mathrm{std}(r)}

잘 맞히는 것은 잘 압축하는 것이고, 크기와 자료를 키우면 손실은 측정된 범위에서 거듭제곱을 따라 줄어듭니다. 위치는 질문과 열쇠를 돌려서 알려 주면 점수가 거리에만 달리고, 답을 확인할 수 있는 문제에서는 여러 번 뽑은 답들의 상대적 성적으로 모델을 더 훈련할 수 있습니다. 그러나 목표는 여전히 대부분 글의 분포와 선호를 닮는 것이지 참을 말하는 것이 아니며, 그 차이가 환각의 뿌리입니다.