1장 AI는 데이터를 어떻게 이해할까: 특징량화의 원리
지금까지는 "토크나이저를 쓴다"는 걸 거의 당연한 전제로 진행해 왔는데, 솔직히 한번쯤 이런 생각이 들 수 있습니다.
"서브워드 토크나이징, 이거 진짜 필수일까?"
이전에 말했듯이, 텍스트를 바이트 단위나 문자 단위로만 잘라서 쓰면 입력 시퀀스가 길어지는 건 맞습니다. 그건 분명한 단점입니다. 하지만 반대로, 서브워드 단위를 쓰려면,
토크아니저 알고리즘을 따로 도입해야 하고,
그걸 또 학습까지 시켜야 하고,
즉 시스템이 더 복잡해집니다.
만약, "입력이 길어져서 계산 비용만 늘어날 뿐, 성능은 그대로"라면, 차라리 토크나이저를 없애버리고 전체 파이프라인을 단순하게 만들고 싶어질 수도 있습니다. 경험적으로는 텍스트를 바이트/문자단위로만 쪼개서 모델을 학습하면 성능이 안좋다는게 잘 알려져 있기 때문에, 실무에서는 서브워드를 쓰는 쪽으로 굳어져 있습니다. 하지만,
"이게 정말 일반적으로도 항상 그런가?"
라는 의문은 충분히 자연스럽습니다.
이 의문을 다루고 있는 논문이 있어서, 이번에는 그 가운데 일부 결과만 골라서 읽어봤습니다.
이 논문은 여기서 다루는 다른 논문들처럼 "생성형 AI 이해의 확고한 토대"급으로 자주 참조되는 건 아니지만, 이 질문에 답을 가까이에서 건드리는 논문이라서 포함했습니다.
내용이 여기서는 난도가 좀 높은 편이라서 어렵게 느겨진다면 결과만 파악하고 전개는 건너뛰어도 됩니다.
논문에서는 교사없는 사전학습에서 널리 쓰이는 다음 토큰 예측(next token prediction)문제에 대해
토크나이저를 수학적으로 정식화하고
그 수리적 성질을 분석한다.
먼저 정의(정식화)부터 시작합니다.
입력 문자 집합을 A라고 하고, 그 원소들로 만들 수 있는 모든 길이의 문자열 집합을
라고 합시다.
모델링 대상이 되는 데이터는
을 따르는 생성과정에서 나오는 것이라 가정합니다.
즉, 임의의 문자열이 주어졌을 때, 그 문자열이 생성될 확률을 평가할 수 있다고 보는 것입니다. 이때, 토크나이저 T는 다음과 같은 4-튜플로 정의됩니다.
여기서,
- Dict: 어휘 (vocabulary)
- DS(Data Structure): 어휘에 관한 추가 정보. 예) BPE의 경우, 각 토큰이 더 짧은 토큰쌍으로부터 결정적으로 구성된다는 정보등이 포함됨
문자열을 토큰 시퀀스로 인코딩하는 함수
토큰 시퀀스를 다시 문자열로 디코딩하는 함수
그리고 가정으로,
은 항상 항등함수(identity)라고 둡니다. 즉, 인코딩 후 디코딩하면 원래 문자열이 그대로 복원된다고 가정합니다.
이제 어떤 데이터 생성 과정에서 샘플링된 길이 m의 문자열 s에 대해 크로스 엔트로피 손실을 최소화하는 문제를 생각합니다. 토큰화된 토큰 시퀀스의 공동 분포(joint distribution)를 모델링하고 이를,
라고 쓰기로 합니다.
이는,
문자열을 토큰 시퀀스로 어떻게 나누는지(토크나이저)와
그 토큰 시퀀스가 어떻게 생성되는지(언어모델)
를 합쳐 표현한 것입니다.
예를 들어 Q가 서브워드 유니그램 언어 모델이라면, 각 토큰은 학습 데이터에서 등장한 빈도에 기반한 확률로 생성됩니다. 우리가 최소화하고 싶은 크로스 엔트로피 손실은,
데이터 생성 과정은 실제 자연어 데이터의 복잡한 생성 과정보다는, 이론적으로 다루기 쉽게 단순화해서 문자 단위의 k차 Markov 과정으로 봅니다. 문자 집합을 A = {0, 1}로 두고, 0과 1의 나열로 텍스트가 표현되는 부호화된 세계를 생각합니다.
이건 컴퓨터의 이진 표현과 비슷합니다. 특정한 0/1 비트열에 특정한 의미를 붙이면 임의의 텍스트를 표현할 수 있습니다. 경험적으로 아래 그림처럼 단순한 k차 Markov 과정에 기반한 데이터를 Transformer 디코디 기반 모델로 학습시키면, 데이터 자체는 분명 Markov과정임에도 모델은 마치 유니그램 언어 모델처럼 행동하는 흥미로운 현상이 알려져 있습니다.
좀 더 구체적으로는 나중에 설명하는 in-context learning을 사용했을 때, {0, 1}로 구성된 임의의 문자열이 주어지면, 모델이 그 문자열 안에서 관찰되는 0의 경험적 비율만을 보고 다음 문자를 0으로 예측하는 쪽으로 수렴하는 현상이 관찰됩니다. 즉, 간단화된 설정이긴 하지만 원 논문은 이 현상을 전제로 이후의 분석을 이어갑니다.
이제 Dict에 대한 유니그램 언어 모델의 집합을 Q1-gram이라 정의합니다.
Q∈Q1-gram은, 토큰 시퀀스 (t1,t2,…,tj)에 대해, 자연수 집합 N 위의 측도 Q#와 어휘 Dict 위의 측도 Qtok를 이용해 다음과 같이 쓸 수 있습니다.
이는
길이가 j인 토큰 시퀀스를 생성할 확률 Q#(j)와 그 시퀀스의 각 토큰을 생성할 확률들의 곱
으로 전체 확률을 표현한 것입니다. 이런 형태의 Q들을 모든 집합이 Q1-gram입니다.
이제 도구는 다 모였으니, Transformer 디코더형 모델이 보이는 "유니그램 언어 모델적" 행동이 어떤 결과를 가져오는지 보기 위해, 유니그램 언어 모델과 제한없는 최적 모델이 달성하는 크로스 엔트로피의 관계를 살펴봅시다. 다음 정리가 알려져 있습니다.
문자에 대해 정상분포(stationary distribution) π를 갖는 에르고딕(ergoidic) 데이터소스를 생각해 봅시다. 제한이 없는 최적 최대우도 모델이 달성하는 크로스 엔트로피 손실은 참 분포 P를 이용하면
로 쓸 수 있습니다.
반면에, 문자 단위 유니그램 언어 모델 Q의 경우, 다음과 같이 아래에서 제어됩니다.
여기까지가 정리의 내용입니다.
이 정리를 활용하면, 앞에서의 Markov 과정에서 p = q = 1 - ϵ 인 경우, 다음 성질이 나옵니다.
최적 모델의 경우,
한편, 대칭성에 의해 π = {1/2, 1/2}가 되므로, 유니그램 언어 모델은
를 갖습니다.
이 둘의 비를 보면,
는 ϵ → 0 또는 ϵ → 1에서 1이 됩니다. 즉, 유니그램 언어 모델은 최적 모델에 비해 손실이 더 크다는 것을 보여줍니다.
이제 이 정리를 증명합니다.
먼저 제한 없는 최적 최대우도 모델의 크로스 엔트로피 손실 표현을 유도합니다.
제한없이 이상적인 상황을 가정하면,
처럼, 인코더 유무와 상관없이 모델링된 공동 분포를 진짜 문자열 생성 확률과 동일하게 둘 수 있습니다. 이때,
이게 크로스 엔트로피 손실의 최솟값입니다. 이는 임의의 분포 Q에 대해 다음이 성립하기 때문입니다.
따라서 식 12가 증명됩니다.
다음으로 문자 단위 유니그램 언어 모델 Q∈Q1-gram에 대한 크로스 엔트로피 손실은 다음과 같이 쓸 수 있습니다.
이로서 식 13이 증명됩니다.
이제 이 정리와 Transformer 디코더형 모델의 행동 사이 관계를 봅시다.
논문에서 제시한 실험 결과(아래 그림)를 보면,
토크나이저 없이 문자 단위로 학습하면, Transformer 디코더형 모델은 문자에 대한 유니그램 언어 모델을 학습하게 되고, 손실은 유니그램 언어 모델이 달성 가능한 크로스 엔트로피 수준까지밖에 내려가지 않습니다.
반면 토크나이저를 사용(여러 문자를 묶어 토큰을 구성)하면, 최적 크로스 엔트로피에 더 가까운 수준까지 손실을 줄일 수 있습니다.
이 행동은 앞서 정리에서 본 유니그램 언어 모델 vs 최적 모델 관계와 대응됩니다.
그렇다면 왜 토크나이저를 쓰면 최적 모델에 가까운 행동을 하게 되는가?
단위를 문자에서 토큰으로 바꾼다고 해서 Transformer 디코더형 모델이 갑자기 '유니그램 언어 모델을 학습하는 습성'을 버린다고 보기는 어렵습니다. 실제로 아래 그림을 보면 토큰 단위로 학습된 Transformer 디코더형 모델이 다음 토큰의 예측 확률을 출력할 때,
어떤 토큰 ID에 주목해서 보면,
시퀀스 상 위치가 바뀌어도 예측 확률이 거의 변하지 않고
"어디에 나오든 항상 비슷한 확률"을 보입니다.
이는 토큰 단위 유니그램 언어 모델의 전형적인 특징입니다.
요약하면,
Transformer 디코더형 모델은 본질적으로 유니그램 언어 모델을 학습하는데, 그 "유니그램 단위"가
"문자인지"
"토큰(서브워드)인지에 따라 성능이 크게 달라진다"
이 차이를 명확히 보기 위해, 논문에서는 매우 단순한 토크나이저를 도입해 분석을 이어갑니다.
단순한 토크나이저의 예로, 길이 r인 모든 가능한 부분 문자열을 어휘로 갖는 토크나이저를 생각해 봅시다.
심볼집합이 {0, 1} 하나뿐이니, 어휘크기는 d=2r가 됩니다. 어떤 문자열에 대한 토큰화는 간단합니다.
문자열을 길이 r짜리 부분 문자열들로 쭉 잘라서 그 부분 문자열을 어휘 ID에 매핑하면 됩니다.
기호가 복잡해지니, 관계를 아래 그림으로 정리한 것입니다.
토큰 위에서 얻어지는 확률 과정은 본래 문자 기반 Markov 과정을 "길이 r만큼 묶은 것"에 불과하므로 여전히 Markov성질을 가집니다. 다만 상태공간 크기가 2r로 커집니다.
토큰에 대한 유니그램 언어 모델 Q의 크로스 엔트로피 손실은 다음과 같이 쓸 수 있습니다.
여기서 Q#(|enc(s)|)에서 오는 효과는 측도를 Q# = Unif([m])처럼 두면, 문자열 길이 m → ∞ 극한에서 토큰 길이당 기여가 limm→∞ log(m)/m = 0이 되므로 생략합니다.
임의의 토큰 t에 대해, 문자열 s에 대응하는 Markov과정의 정상확률을 이용해
와 같이 잡습니다.
이를 바탕으로 중요한 결론은 크로스 엔트로피 손실을 엔트로피와 어휘 크기로 표현할 수 있다는 것입니다.
여기서 마지막 단계에서는
d = 2r이므로 log2 d=r임을 사용했습니다. 이 식을 보면, d = 2 즉 r = 1인 문자 단위 분할의 경우, 앞의 정리식(식13)에서 나온 하한을 다시 얻는다는 것을 확인할 수 있습니다.
연습문제17: 식17의 전개과정에서 중간에 생략된 계산들을 직접 채워넣고 전개가 올바른지 확인합니다.
이건 어디까지나 토이모델이지만, 여기서 얻는 시사는 꽤 흥미롭습니다.
d → ∞ (즉, 어휘크기를 무한대로 키우는 극한)를 생각하면, 크로스 엔트로피 손실은 제한 없는 최적 모델이 달성하는 엔트로피 H(P)에 수렴합니다.
즉, Transformer 디코더형 모델이 "실상 유니그램 언어 모델만 학습한다 해도" 어휘라는 개념이 존재하면 이상적인 크로스 엔트로피에 더 가까이 갈 수 있습니다.
매우 단순화된 이론적 세팅이긴 하지만 이 결과는 다음을 강하게 시사합니다.
문자 단위 이상으로 묶어 주는 토크나이저의 존재는 생성형 AI 모델의 성능을 끌어올리는데 본질적으로 중요합니다.
여기서 맨 앞에서 던지 질문,
"토크나이저는 정말 필요한가?"
에 대한 답은, (여기서 다루는 문제 설정에서 이상적인 크로스 엔트로피를 달성한다라는 관점에서는)
"예, 필요하다"쪽에 가깝습니다.
물론 d → ∞ 극한에서는 이상적인 크로스 엔트로피를 달성하지만, 수렴 속도가 log 스케일이기 때문에 실제로는 엄청나게 큰 어휘 크기가 필요합니다.
논문에서는 여기서 한 걸음 더 나아가 현실적인 토크나이저 후보로 LZW나 BPE를 고려하며 논의를 이어가지만, 우리 입장에서 핵심 포인트는 이미 나왔습니다.
"토크나이저가 근본적으로 왜 필요한가"에 대한 이론적인 한 조각의 답
그래서 이 강좌에서는 더 깊게 들어가지는 않습니다.
연습문제18: 여기서 얻은 결과는 여러 가정 위에 서 있습니다. 각 가정을 다시 훑어본 뒤, 현실 세계에서는 이 과정들이 깨질 수 있는 구체적인 사례를 들어보라.
©2024-2025 MDRULES.dev, Hand-crafted & made with Jaewoo Kim.
AI 에이전트 개발, 컨텍스트 엔지니어링 교육 컨설팅, 바이브코딩 강의 문의: https://bit.ly/4kjk5OB