ai theory
Diffusion LLM의 학습 과정 및 작동 방식에 대하여
Junyoung Park · 2025-07-09 · 6 min
일반적인 LLM은 어떻게 동작할까?
LLM으로 유명한 일반적인 생성형 트랜스포머(GPT, Claude 등)는 오토레그레시브(autoregressive) 방식으로 학습을 진행하고, 추론도 진행하게 된다. 모델은 문장을 왼쪽에서 오른쪽으로, 한 번에 한 단어씩 생성하며 매 스텝마다 직전까지의 토큰을 조건으로 삼는다. 사람이 글을 순차적으로 쓰는 것과 어찌보면 동일하게 작동하는 것이다. 그렇다면 꼭 ‘한 번에 하나씩’이어야 할까?
Autoregressive Generation (오토레그레시브 생성)
오토레그레시브 생성에서는 다음의 토큰 (예측되는 토큰)이 이전 모든 토큰에 의존한다. 이미 쓴 단어만 볼 수 있는 상태에서 다음 단어를 고르는 것과 같다. 즉, 이후의 예측은 모두 이전의 예측을 전제로 수행하게 된다.
- 토큰 3은 1, 2에, 토큰 4는 1, 2, 3에 의존 …
- 완전히 순차적이므로 병렬화가 어려운 상황이다.
- 모델이 커질수록 토큰당 연산량(flops)이 늘어나 전체 응답 시간을 끌어올린다.
학습도 마찬가지다. 모델은 미래 토큰에 어텐션하지 못하도록 마스킹된 상태에서 다음 토큰을 예측하는 태스크를 수행한다. LLM의 학습 방식을 그림으로 표현하면 다음과 같다.
토크나이징
LLM은 다양한 형태의 입력(사용자의 요청)에 대해 완성된 글을 만들어내는 과정을 수행한다.
예컨대, 사용자가 위와 같은 요청을 전달했다면 LLM에 추론시키기 전, 이를 토크나이즈하는 과정이 필요하다. Tokenize란 다양한 형태의 언어(영어, 한국어, 독일어, 스페인어, 일본어, 중국어, …)로 구성된 문장을 만들어낼 수 있는 최소 단위의 토큰에 대한 숫자로 바꾸고, 이를 LLM 모델의 입력으로 사용하는 것이다.
그렇다면 이 ‘최소 단위’는 어떻게 정의할까?
가장 이상적인 방식의 토크나이징
물론 위에 나온 그림 예시와 같이 단어 단위로 하면 심플하겠지만, 세상에 존재하는 모든 단어를 하나의 숫자에 매핑하고자 하는 것은 너무나 헤비한 일이다.
애초에 단어의 기준을 공백 문자를 기준으로 잡는다고 하여도, 특정 단어에 대해서 표현 방식이 다양해질 수 있는 경우에는 최소 단위를 제대로 정하지 않으면 단어를 숫자로 표현하기 위해 너무 많은 데이터양이 요구될 수 있다.
그렇다고 해서 알파벳 단위 등 하나의 캐릭터 (char ) 단위로 분절하면 길이가 길어진다는 문제가 있다. 앞서 작성했던 글 중 Transformer가 가지는 최대의 단점 중 하나가 Context 길이가 너무 길어지면 연산량이 극심해진다는 부분이었다.
따라서 대부분의 LLM 구조에서는 BPE 방식을 사용하게 되고, 해당 방식은 UTF-8에서 빈번하게 등장하는 byte pair를 새로운 단어로 지정하는 방식으로 인코딩하게 된다. 해당 알고리즘에 대한 설명은 생략하도록 하겠고, 그냥
‘다양한 단어를 표현할 수 있는 최소 단위이면서 context length가 너무 길어지지 않게 할 수 있는 방식’이라고 이해하면 된다.
학습 과정 및 단어 예측
학습 과정은 ‘마스킹 (masking)’이라는 방식을 통해 병렬 처리가 가능하다. 오토레그레시브 생성 방식의 특성상, 이전 단어를 알아야 다음 단어를 예측하는 Causality(인과성)이 보장되어야 하기 때문에 추론 과정은 병렬화가 어려우나, 학습 단계에서는 단순히 이후 단어가 없는 것처럼 마스크를 씌우면 되기 때문이다.
예컨대 다음과 같은 문장이 있다고 가정하면,
Causality is an influence by which one event, process, state, or object (a cause) contributes to the production of another event, process, state, or object (an effect) where the cause is at least partly responsible for the effect, and the effect is at least partly dependent on the cause. The cause of something may also be described as the reason for the event or process.
학습하고자 하는 특정 토큰이 있으면 해당 토큰을 포함하여 뒤쪽을 모두 가리는 마스크를 준비하는 것이다. 우리가 어렸을 적 영어 단어를 외우기 위해 한글 뜻 부분을 손으로 가리면서 공부한 것과 같다. 예를 들어 첫 줄에 있는 단어인 ‘one event’ 뒤쪽의 단어인 ‘process’를 학습하고자 한다면,
Causality is an influence by which one event, [MASK] [MASK] [MASK] [MASK] [MASK] [MASK] [MASK] [MASK] [MASK] [MASK] [MASK] [MASK] [MASK] [MASK] [MASK] [MASK] [MASK] [MASK] [MASK] [MASK] [MASK] [MASK] [MASK] [MASK] [MASK] [MASK] [MASK] [MASK] [MASK] [MASK] [MASK] [MASK] [MASK] [MASK] [MASK] [MASK] [MASK] [MASK] [MASK] [MASK] [MASK] [MASK]
위와 같이 뒤쪽 단어들을 모두 참고할 수 없게 한 후 직후 단어를 예측하게끔 한다.
그런데, 이때 마스킹은 0, 1로 구성된 하나의 array 형태처럼 작동하므로, 동시에 여러 토큰을 예측하게끔 하고, 이 전체의 결과를 통합하여(평균내어) 학습을 진행하는 구조가 된다. 시퀀스 길이 , 토큰 집합 그리고 모델이 예측한 확률 와 각 정답에 해당되는 에 대해
위와 같이 cross entropy가 적용되어 분포를 맞추며 학습이 진행된다. 결국 LLM은 수없이 많이 보게되는 글을 학습하여 특정 단어 이후에 가장 그럴듯한 단어가 오게끔 학습을 수행한다.
텍스트 디퓨전은 어떻게 작동할까
Google은 I/O에서 최신 Gemini 제품군을 공개하면서 Gemini Diffusion 이라는 새 디퓨전 아키텍처 기반 모델도 함께 선보였다. 발표 자료에 따르면, 이 모델은 추론, 수학, 코딩 등 여러 지표에서 기존 SOTA 모델과 대등한 성능을 보인다.
사실 그동안 텍스트 생성 분야에서 디퓨전 모델은 ‘재미있는 연구’ 정도로만 여겨졌고, 실전 성능은 다른 아키텍처에 뒤처져 왔다. 기존의 LLM이 가지는 Autoregressive한 구조와는 다르게 디퓨전 방식은 다음에 올 토큰 단위로 예측하는 것이 아니라 완성되지 않은 문장이 모두 마스킹된 상태로 가정하고 모든 토큰을 한꺼번에 샘플링하는 방식을 사용한다. 따라서 이렇게 한 번에 여러 토큰을 예측하는 과정이 그럴듯한 결과를 낼 수 있을지 명확하지 않았기 때문이다. (과연 언어 생성에 최적화된 샘플링 구조일 것인지 알 수 없다)
Text Diffusion
이미지 디퓨전은 무작위 노이즈에서 출발해 여러 스텝에 걸쳐 노이즈를 제거(denoise)하면서 이미지를 복원한다. 텍스트 디퓨전은 이미지와는 다르게 픽셀 대신 토큰을 ‘denoise’한다.
- 문장을
[MASK]토큰으로 가득 채운다 (텍스트판 노이즈). - 여러 스텝에 걸쳐 마스크를 점차 실제 토큰으로 교체해 간다.
Google은 구체적인 학습 절차와 아키텍처를 공개하지 않았지만, LLaDA 같은 최근 논문을 통해 대략적인 방식을 짐작할 수 있다.
이들은 언어 모델의 핵심은 오토레그레시브 특성이 아니라 ‘다음 단어 분포’를 정확히 모델링하는 능력이다. 그렇다면 문단의 임의 위치에 있는 단어도 예측할 수 있어야 하며, 나머지 빈칸도 채울 수 있어야 한다.
Diffusion Pretraining
한 번에 한 단어만 생성하지 않을 것이므로, 시퀀스 전체를 입력으로 받아 시퀀스 전체를 출력으로 내놓는 seq-to-seq 트랜스포머를 학습한다.
- 출력층은 모든 위치의 토큰을 예측하지만 손실(loss)은 오로지 마스크된 위치만 계산.
- BERT의 Masked 모델링과 거의 동일하다고 볼 수 있다.
- 추후 지도 미세조정(SFT) 시에는 프롬프트 부분은 그대로 두고, 응답 부분만 마스크 처리해 학습.
Diffusion Inference
지금까지는 평범한 seq-to-seq처럼 보이지만, 한 번에 전체 응답을 예측하면 성능이 떨어진다는 연구가 많다. 여기서 이를 해결하기 위한 수단으로 디퓨전이 등장한다.
- 전부 마스크된 상태에서 시작.
- 모델로 모든 위치를 예측.
- Random 또는 Confidence 등으로 일부 토큰만 확정하고, 그 비율은 time step에 따라 조절한 뒤 나머지는 다시 마스크.
- 다시 추론 → 2~3 단계를 스텝 만큼 반복.
해당 과정을 거치게 되면, 초반에는 약 90% 정도를 다시 마스크하게 되고, 후반에는 약 10% 정도를 다시 마스크해서 추론하게 된다. 이때 한 스텝에 2개 이상의 토큰을 확정하고, 총 스텝 수 를 오토레그레시브 길이보다 작게 잡으면 추론 속도를 크게 단축할 수 있다. 즉, 예측 부분을 전체 마스킹 → 2. 예측 → 3. 재마스크 → 루프 (반복)
결론 및 개인적인 견해
정말 주류가 될 것인가
Google은 앞으로 프런티어 모델의 주류가 디퓨전이 될 것이라 전망한다.
- 속도가 빠르다: LLM이 에이전트·코드 생성처럼 루프형 워크플로에 쓰일수록 속도 이점이 절실해진다.
- GPU 자원 절감: 빠른 추론은 time-on-chip을 줄여 칩 수요를 낮춘다.
그러나 기존의 알고리즘을 사용할 수 없다는 큰 단점
다만 디퓨전이 오토레그레시브만큼 강력한 언어 모델링을 구현할 수 있을지는 아직 직관이 없다. Chain-of-Thought처럼 이전 논리를 순차적으로 따라야 하는 기존의 LLM 알고리즘을 전혀 사용할 수 없기 때문이다. LLM에서 context engineering과 prompt engineering이 주된 흐름으로 성장한 대표적인 이유가 Autoregressive process에 있었는데, 만약 디퓨전 모델이 주가 된다면 지금 딥시크 형태의 추론 모델은 구현이 어려울 것으로 보인다.
그리고 사실 명확하게 따지자면 이미지 diffusion 모델에서 정의한 학습법과 전혀 다르기 때문에 Diffusion model이라기보단 Autoregressive process를 병렬적으로 진행하되 step을 두어 답변을 개선하는 방식으로 기존의 한계를 해결하려한 것이다.