LLM의 학습과 텍스트 생성 원리
출처: https://www.youtube.com/watch?v=HnvitMTkXro · 3Blue1Brown 한국어 · 7:54 · 2025-04-24
요지
- 대규모 언어 모델(LLM)은 주어진 텍스트를 바탕으로 다음에 올 토큰의 확률 분포를 계산하는 수학적 함수다.
- 대화형 AI는 대화 내용을 입력받고, 다음 토큰을 선택해 입력에 덧붙이는 과정을 반복하면서 답변을 생성한다.
- 사전 훈련은 실제 텍스트의 다음 토큰을 더 잘 예측하도록 수많은 파라미터를 조정하는 과정이며, 이후 사람의 피드백 등을 활용해 응답 방식을 다듬는다.
- 트랜스포머는 어텐션과 피드포워드 연산을 여러 층에서 수행해 문맥을 반영한 벡터를 만들고, 이를 다음 토큰의 확률 분포로 변환한다.
- 자연스러운 문장을 생성하는 능력과 내용의 정확성은 구분해야 하며, 특정 출력을 낸 이유를 파라미터 수준에서 설명하는 일도 어렵다.
개요
영상은 절반이 찢어진 영화 대본을 완성하는 비유로 LLM을 설명한다. 사람의 질문만 남은 대본에 다음 단어를 예측하는 기계를 적용하면, 한 단어씩 이어 붙여 AI의 대사를 만들 수 있다. 대화형 AI 역시 지금까지의 대화를 바탕으로 이어질 텍스트를 반복적으로 생성한다.
이 교안은 그 과정에 필요한 확률 분포, 파라미터 학습, 사전 훈련과 후속 학습, 트랜스포머의 내부 연산을 연결한다. 영상은 이해를 돕기 위해 주로 ‘단어’라고 표현하지만, 실제 처리 단위는 토큰이다. 아래의 토큰 설명과 코드, 활용 지침은 영상의 원리를 이해하기 위한 보충 설명이다.
배경 / 사전 지식
토큰은 모델이 텍스트를 처리하는 단위다. 하나의 단어가 하나의 토큰일 수도 있지만, 단어의 일부나 문장부호가 별도 토큰이 되기도 한다. 따라서 ‘다음 단어 예측’은 입문용 표현이며, 정확하게는 ‘다음 토큰 예측’이다.
확률 분포는 가능한 후보마다 확률을 배정한 것이다. 예를 들어 ‘오늘 하늘에서’ 뒤에 올 후보로 ‘눈이’, ‘비가’, ‘새가’가 있다면, 모델은 하나를 곧바로 확정하는 대신 각 후보의 가능성을 수치로 계산한다. 모든 후보의 확률을 합하면 1이 된다.
벡터는 여러 숫자를 순서대로 묶은 것이다. 모델은 텍스트를 숫자 벡터로 바꾸어 계산한다. 벡터의 개별 숫자 하나가 사람이 알아볼 수 있는 의미 하나에 대응한다고 생각할 필요는 없다. 여러 값의 조합이 학습된 표현을 이룬다.
파라미터 또는 가중치는 모델이 계산에 사용하는 조정 가능한 값이다. 학습은 이 값을 바꾸는 과정이고, 일반적인 응답 생성은 학습된 값을 사용해 계산하는 과정이다. 대화에 새 문장이 추가되는 것과 모델의 가중치가 다시 학습되는 것은 서로 다른 일이다.
핵심 개념
다음 토큰 예측과 자동 회귀 생성
LLM이 계산하는 대상은 다음과 같이 표현할 수 있다.
P(다음 토큰 | 지금까지의 토큰)
세로줄 뒤의 내용은 예측의 조건이다. 사용자의 질문뿐 아니라 앞선 대화와 이미 생성한 답변도 다음 토큰 예측의 조건이 된다. 선택한 토큰을 입력 끝에 붙이고 다시 예측하는 방식을 자동 회귀 생성이라고 한다.
확률 계산과 샘플링
모델이 확률을 계산하는 단계와 그 확률에서 토큰을 선택하는 단계는 구분된다. 항상 가장 확률이 높은 후보를 고를 수도 있고, 확률에 따라 무작위로 후보를 뽑을 수도 있다. 후자를 샘플링이라고 한다.
영상에서 같은 입력에도 다른 답변이 나올 수 있다고 설명하는 핵심 이유는 샘플링이다. 고정된 모델 계산을 전제해도 선택 과정에 무작위성이 있으면 생성 결과가 달라진다. 다만 무작위성을 높인다고 정확성이나 유용성이 함께 높아지는 것은 아니다.
사전 훈련과 파라미터 조정
사전 훈련에서는 방대한 텍스트를 이용해 다음 토큰을 예측하도록 모델을 학습한다. 정답 토큰에 낮은 확률을 부여했다면 예측 오차가 커지고, 정답 토큰에 높은 확률을 부여했다면 오차가 작아진다.
역전파는 각 파라미터가 오차에 얼마나 영향을 주는지 나타내는 기울기를 계산한다. 최적화 알고리즘은 이 기울기를 이용해 파라미터를 조금씩 갱신한다. 영상은 이를 수많은 다이얼을 조정하는 것에 비유한다. 학습의 목표는 훈련 문장뿐 아니라 처음 보는 문장에서도 유용한 예측을 하는 것이다.
사람의 피드백을 활용한 후속 학습
다음 토큰을 잘 예측하는 모델이 곧바로 좋은 어시스턴트가 되는 것은 아니다. 질문에 답하고, 지시를 따르며, 사람이 선호하는 응답을 생성하도록 추가 학습이 필요하다.
영상은 이 과정을 RLHF, 즉 사람의 피드백을 이용한 강화 학습을 중심으로 소개한다. 사람이 응답을 고치거나 더 좋은 응답을 선택해 학습에 필요한 신호를 제공한다는 설명이다. 보충하면, 수정된 모범 답변을 따라 학습하는 지도 미세 조정과 선호 피드백을 활용하는 RLHF는 구분되는 방법이며, 사람의 피드백을 쓰는 모든 학습이 RLHF인 것은 아니다.
트랜스포머: 어텐션과 피드포워드
트랜스포머는 토큰을 숫자 벡터로 표현하고, 어텐션과 피드포워드 연산을 여러 층에서 반복한다.
어텐션은 각 위치의 표현을 계산할 때 다른 위치의 정보를 얼마나 반영할지 정하는 연산이다. 영상의 ‘눈’ 예시처럼 ‘눈이 내린다’와 ‘보는 눈이 많다’에서 같은 글자가 다른 의미로 해석되는 데 문맥이 중요하다. 어텐션은 이런 문맥 정보를 표현에 반영하게 한다.
피드포워드 네트워크는 각 위치의 벡터에 학습된 비선형 변환을 적용한다. 어텐션이 위치 사이의 정보를 조합한다면, 피드포워드는 조합된 표현을 더 가공한다. 두 연산을 여러 층에 걸쳐 반복하면서 다음 토큰 예측에 유용한 표현을 만든다.
작동 원리
- 훈련용 텍스트를 토큰으로 바꾼다. 텍스트를 토큰 ID의 나열로 변환하고, 앞부분으로 다음 토큰을 예측하는 학습 문제를 구성한다. 영상은 마지막 단어를 가리는 예시를 들지만, 실제 학습에서는 여러 위치의 다음 토큰 예측을 함께 계산할 수 있다.
- 토큰을 벡터로 표현한다. 토큰 ID를 임베딩 벡터로 바꾸고 순서 정보를 반영한다. 단어의 종류뿐 아니라 문장 안의 위치도 계산에 필요하기 때문이다.
- 문맥을 반영한다. 어텐션과 피드포워드 연산을 반복한다. 다음 토큰을 생성하는 인과적 언어 모델은 해당 위치에서 미래의 정답 토큰을 볼 수 없도록 어텐션을 제한한다.
- 확률 분포를 만든다. 마지막 위치의 표현을 어휘의 각 토큰에 대한 점수로 바꾸고, 소프트맥스 같은 연산으로 확률 분포를 계산한다.
- 훈련에서는 정답과 비교한다. 정답 토큰에 부여한 확률로 손실을 계산하고, 역전파와 최적화 알고리즘을 통해 파라미터를 갱신한다. 이 과정을 많은 데이터에 반복한다.
- 후속 학습으로 응답 방식을 조정한다. 모범 응답이나 사람의 선호 피드백 등을 이용해 어시스턴트로서의 행동을 다듬는다.
- 사용할 때는 토큰을 선택해 이어 붙인다. 대화 내용을 입력으로 넣고 다음 토큰을 선택한다. 선택한 토큰까지 포함해 다음 예측을 반복하며, 종료 토큰이나 길이 제한 등의 조건에 도달하면 멈춘다.
영상이 강조하는 병렬 처리는 특히 훈련을 이해하는 데 중요하다. 정답 텍스트가 이미 주어진 훈련에서는 미래 토큰을 가린 상태로 여러 위치의 계산을 병렬화할 수 있다. 반면 일반적인 자동 회귀 생성에서는 방금 선택한 토큰이 다음 단계의 입력이 되므로 생성 단계 사이에 순차적 의존성이 남는다. GPU는 병렬 수치 연산을 빠르게 수행해 이러한 대규모 계산을 지원한다.
코드 예시
아래는 Python 표준 라이브러리만 사용하는 실행 가능한 예시다. 학습된 LLM 대신 사람이 정한 작은 확률표를 사용해 ‘확률 계산 → 토큰 선택 → 입력에 추가’라는 생성 반복을 보여준다. 코드에서 공백 단위 문자열을 토큰처럼 취급하는 것은 설명을 위한 단순화다.
import random
END = '<END>'
# 앞선 문맥에 따른 다음 토큰의 확률을 사람이 지정한다.
TABLE = {
('오늘',): {'눈이': 0.6, '비가': 0.4},
('오늘', '눈이'): {'내립니다.': 0.8, '쌓입니다.': 0.2},
('오늘', '비가'): {'내립니다.': 1.0},
}
def next_distribution(tokens):
return TABLE.get(tuple(tokens), {END: 1.0})
def generate(prompt, sample=True, seed=0, max_new_tokens=10):
rng = random.Random(seed)
tokens = prompt.split()
for _ in range(max_new_tokens):
probabilities = next_distribution(tokens)
if sample:
token = rng.choices(
list(probabilities),
weights=list(probabilities.values()),
k=1,
)[0]
else:
token = max(probabilities, key=probabilities.get)
if token == END:
break
tokens.append(token)
return ' '.join(tokens)
print('최댓값 선택:', generate('오늘', sample=False))
for seed in range(3):
print(f'샘플링 seed={seed}:', generate('오늘', seed=seed))
next_distribution은 모델의 확률 계산을 대신한다. rng.choices는 확률에 따라 토큰을 선택하고, tokens.append는 선택 결과를 다음 예측의 조건에 포함한다. 최댓값 선택은 이 표에서 항상 ‘오늘 눈이 내립니다.’를 만든다. 샘플링은 난수 시드에 따라 다른 경로를 선택할 수 있으며, 같은 시드를 사용하면 이 예시에서는 같은 결과를 재현한다.
실제 LLM은 문장별 확률표를 직접 저장하는 대신, 학습된 파라미터와 트랜스포머 연산으로 확률을 계산한다. 이 코드는 학습이나 어텐션을 구현한 것이 아니라 생성 반복과 샘플링의 역할을 분리해 보여주는 예시다.
함정·실수
- 단어와 토큰을 동일하게 생각한다. 단어 하나가 여러 토큰으로 나뉠 수 있다. 입력 길이나 생성 길이를 해석할 때는 해당 모델의 토큰화 방식을 기준으로 생각한다.
- 트랜스포머가 답변 전체를 한 번에 생성한다고 생각한다. 훈련 중 여러 위치를 병렬 계산하는 것과 자동 회귀 생성은 다르다. 병렬 연산이 가능해도 다음 토큰 생성 단계에는 앞선 선택 결과가 필요하다.
- 가장 확률이 높은 토큰을 고르면 답이 사실이라고 생각한다. 높은 확률은 해당 문맥에서 이어지기 그럴듯하다는 뜻이다. 사실 여부가 중요한 내용은 원문이나 별도 검증 수단으로 확인한다.
- 대화를 이어 가는 것을 가중치 학습으로 생각한다. 대화 문맥이 늘어나면 응답은 바뀔 수 있지만, 일반적인 추론 과정에서 그것이 곧 파라미터 갱신을 뜻하지는 않는다.
- 사람이 관여하는 후속 학습을 모두 RLHF라고 부른다. 모범 답변을 학습하는 방식과 선호에 기반한 강화 학습을 구분하면 학습 절차를 더 정확하게 이해할 수 있다.
- 영상의 규모 비유를 모든 모델의 고정된 수치로 받아들인다. 사람이 데이터를 읽는 데 걸리는 시간이나 단일 기계의 훈련 시간은 규모를 전달하는 비유다. 실제 비용과 시간은 모델, 데이터, 연산 장치와 계산 가정에 따라 달라진다.
베스트 프랙티스
다음은 영상의 원리를 실제 학습과 활용에 연결한 보충 지침이다.
- 설명을 세 단계로 나눈다. ‘모델이 확률을 계산한다’, ‘선택 규칙이 토큰을 고른다’, ‘고른 토큰을 입력에 추가한다’를 구분하면 응답의 다양성과 생성 과정을 이해하기 쉽다.
- 필요한 문맥을 명확히 제공한다. 질문에 필요한 배경, 용어의 의미, 원하는 출력 형식을 함께 제시한다. 다음 토큰의 확률이 입력 문맥에 의존한다는 원리와 연결된다.
- 학습과 추론을 분리해 생각한다. 모델의 행동을 바꾸고 싶을 때 먼저 입력 문맥의 문제인지, 생성 설정의 문제인지, 가중치 학습이 필요한 문제인지 구분한다.
- 목적에 맞게 생성의 다양성을 조절한다. 반복 가능한 형식이 중요하면 무작위성을 줄이는 설정을 검토하고, 아이디어 탐색에는 여러 샘플을 비교한다. 어느 설정도 사실성을 보장하지는 않는다.
- 작은 실험으로 원리를 확인한다. 위 코드에서 확률과 시드를 바꾸어 결과를 비교한다. 같은 분포에서도 선택 방식에 따라 결과가 달라지는지 확인한 뒤, 임베딩과 어텐션으로 학습 범위를 넓힌다.
- 매끄러운 설명과 검증된 내용을 구분한다. 숫자, 인용, 실행 가능한 코드처럼 확인할 수 있는 결과는 출처 대조나 실행으로 점검한다.
참고
- 원본 3Blue1Brown 채널의 딥러닝 시리즈: 영상 말미에 트랜스포머와 어텐션을 더 자세히 배우기 위한 자료로 언급한다. 제공된 자막에는 개별 영상 제목과 URL이 없다.
- 3Blue1Brown 한국어 채널의 후속 번역 영상: 같은 주제의 추가 학습 경로로 안내한다. 구체적인 목록은 자막에 없다.
- 뮌헨의 TNG에서 진행한 관련 강연: 영어로 된 심화 자료로 언급한다. 제공된 자막에는 강연 제목과 링크가 없다.
- 2017년 구글 연구팀의 트랜스포머 발표: 모델 구조의 전환점으로 소개한다. 자막에는 논문 제목이나 서지 정보가 명시되어 있지 않다.