
DiffusionGemma의 「생성 도중의 흔들림」으로 개념의 모순을 측정하기
요약
DiffusionGemma의 디노이징 과정에서 발생하는 토큰의 변화(argmax flip)를 통해 개념 간의 모순을 측정하는 실험적 방법론을 소개합니다. 개념 간의 관계가 충돌할 때 발생하는 '불안정성(instability)'을 수치화하여 모델의 내부 추론 과정을 분석합니다.
핵심 포인트
- DiffusionGemma의 병렬 디노이징 과정 중 토큰의 최유력 후보 변화를 측정
- 개념 간 관계의 모순을 'instability' 스코어로 정의
- argmax flip 횟수를 활용하여 디노이징 단계별 토큰 안정성 분석
- 특정 개념 앵커 사이의 구간을 설정하여 관계의 불안정성을 정량화
무엇을 시도했는가
DiffusionGemma는 일반적인 자기회귀형 (Autoregressive) LLM처럼 왼쪽에서부터 한 토큰씩 문장을 늘려가는 것이 아니라, 일단 랜덤한 토큰으로 채워진 캔버스를 여러 단계에 걸쳐 병렬로 디노이즈 (Denoise) 해나간다.
Google의 개발자용 기사에서는 이 방식을 "256개 토큰의 캔버스를 병렬로 refine 하는 것"으로 설명하고 있다.
이번에 하고 싶었던 것은 최종 출력된 문장만을 보는 것이 아니다.
오히려 문장이 굳어져 가는 도중에 "어디가 흔들리는가"를 보는 것이다.
만약 입력된 개념 간의 관계에 모순이 있다면, 모델은 그 부분을 설명하는 도중에 길을 잃기 쉬운 것이 아닐까? 그렇게 생각하여 개념 간의 instability (불안정성)를 측정하는 작은 실험 앱을 만들었다.
이 기사에서는 주문, 재고, 사람이라는 3가지 개념을 고정하고, "재고와 주문의 관계가 자연스러운 이벤트"와 "재고와 주문이 충돌하는 이벤트"를 비교한다.
리포지토리
준비 중🙇♂️ (근시일 내 수정 예정, 기사 하단에 기재된 X를 통해 알림 예정)
원리
구현한 앱은 「개념 배양 접시」라는 작은 검증기다.
사용자가 개념을 배치하면, 개념별 앵커 (Anchor) 단어를 고정하면서 DiffusionGemma에게 개념 간의 관계 설명을 생성하게 한다. 이때 디노이즈 과정 중에 각 토큰 위치의 최유력 후보, 즉 argmax가 얼마나 변했는지를 기록한다.
instability 의 정의
이 기사에서 사용하는 instability는 최종 출력의 좋고 나쁨이 아니라, DiffusionGemma의 디노이즈 과정에서 개념 간의 관계 설명이 얼마나 안정되기 어려웠는가를 나타내는 실험용 스코어이다.
DiffusionGemma는 왼쪽부터 순서대로 문장을 생성하는 것이 아니라, 랜덤한 토큰으로 채워진 캔버스를 여러 단계에 걸쳐 디노이즈 해나간다. 따라서 최종적으로 비슷한 문장이 나왔더라도, 도중에는 빨리 안정되는 부분과 마지막까지 후보가 흔들리기 쉬운 부분이 있다.
이번 구현에서는 이 "흔들림"을 argmax flip 횟수로 계산했다.
각 디노이즈 단계에서 캔버스 상의 각 위치에 대해 가장 확률이 높은 토큰을 취한다.
argmax[t, i] = 단계 t에서 위치 i에서 가장 확률이 높은 토큰
그리고 이전 단계에서 그 최유력 후보가 바뀌었다면, 해당 위치의 flip_count를 1 증가시킨다.
flip_count[i] += 1 if argmax[t, i] != argmax[t-1, i]
단, 주문, 재고, 사람과 같은 개념 앵커는 고정되어 있다. 앵커 위치는 디노이즈 중에 움직이지 않으므로 flip_count 대상에서 제외한다.
다음으로 특정 개념 쌍에 대응하는 구간만을 본다. 예를 들어 캔버스 상에서 재고와 주문이 나란히 배치된 샘플에서는, 그 두 앵커 사이에 있는 토큰 열을 재고와 주문의 관계 설명 영역으로 취급한다.
그 구간의 flip_count를 평균낸 것이 해당 샘플에서의 개념 쌍의 흔들림이 된다.
segment_instability(A, B)
= mean over i between anchor(A) and anchor(B) (
flip_count[i]
...
동일한 개념 쌍은 12개의 샘플 속에서 순서를 셔플하며 여러 번 관측된다. 마지막으로 그 세그먼트 평균들을 다시 평균낸다.
instability(A, B)
= mean over observed segments of pair(A, B) (
segment_instability(A, B)
...
즉, 이 기사의 instability는 0~1 사이의 확률이나 비율이 아니다. 값이 1.46이라면, "그 개념 쌍 사이의 각 토큰 위치에서 디노이즈 중에 최유력 후보가 평균 1.46회 정도 바뀌었다"는 의미에 가깝다.
참고로 구현 시 최종 엔트로피 (Entropy)도 기록하고 있지만, 이 기사에서 비교하는 instability는 엔트로피, 확정 지연, 재노이즈 양을 정규화하여 섞은 지표가 아니다. 주로 사용하고 있는 것은 개념 간 세그먼트에서의 argmax 변경 횟수이다.
중요한 점은 이 값이 모순 그 자체를 직접 측정하는 것은 아니다라는 점이다.
instability
이 값이 높다는 것은 모델이 해당 관계 설명을 생성하는 과정에서 토큰 후보를 안정화하는 데 상대적으로 어려움을 겪었다는 의미에 가깝다. 그 원인은 개념 간의 모순일 수도 있고, 희귀한 표현, 복잡한 조건, 숫자를 포함한 제약, 또는 프롬프트의 어휘 편향(vocabulary bias)일 수도 있다.
따라서 이 글에서는 instability를 「모순 판정 스코어」로서가 아니라, 개념 관계의 어느 부분에 조정 부하(adjustment load)가 걸려 있는지를 확인하기 위한 센서로 취급한다.
이번 측정에서는 특히 재고와 주문 사이의 에지(edge)에 주목했다.
예를 들어 「통상적으로 상품이 입고된다」는 무해한 이벤트로 취급하고, 「재고가 90개밖에 없는데 120개의 주문이 확정된다」는 모순 이벤트로 취급한다.
검증 조건
| 항목 | 내용 |
|---|---|
| 모델 | google/diffusiongemma-26B-A4B-it |
| ... |
결과
결론부터 말하자면, 모순 이벤트에서는 재고와 주문 관계에 대한 instability가 상승했다.
무해 이벤트군의 평균은 1.1584, 모순 이벤트군의 평균은 1.4683이었다. Mann-Whitney U 검정의 근사치로는 p = 1.29e-08이었다.

그림 1: 모순 이벤트군의 instability는 무해 이벤트군보다 높은 쪽으로 치우쳐 있다.
| 군 | n | 평균 instability | 중앙값 | 최소 | 최대 |
|---|---|---|---|---|---|
| 무해 이벤트 | 50 | 1.1584 | 1.1335 | 0.667 | 1.567 |
| 모순 이벤트 | 50 | 1.4683 | 1.4545 | 1.019 | 1.963 |
이벤트 단위로 보면, 특히 「동일한 재고에 대해 여러 담당자가 동시에 할당을 수행한다」거나 「실재고보다 많은 수량을 예약 주문으로 확정한다」와 같이 재고 수와 주문 확정이 충돌하는 케이스에서 instability가 높게 나타났다.

그림 2: 이벤트별 평균 instability. 상위에는 재고 제약과 주문 처리가 충돌하는 이벤트들이 나열된다.
앵커(Anchor)는 깨지지 않았다
이러한 종류의 관측에서는 모델이 단순히 지정된 개념을 잊어버리는 것이라면 의미가 없다.
이에 앵커 보존(anchor preservation)을 100개 샘플로 확인한 결과, 보존율은 100/100이었다. 적어도 이번 설정에서는 고정된 개념을 유지한 채 흔들림(fluctuation)을 측정할 수 있었다.
프롬프트 의존성이 상당히 높다
한편, (디노이즈(denoise)에 의해) 추출·생성되는 명사 집합은 프롬프트 템플릿의 영향을 강하게 받았다.
5종류의 도입문으로 비교한 상위 명사의 평균 Jaccard 유사도는 0.327이었다. 즉, 「어떤 단어가 나왔는가」를 그대로 읽기보다는, 「동일한 측정 조건에서 얼마나 흔들림이 증감했는가」를 읽는 것이 더 견고하다.

그림 3: 템플릿 간 상위 명사 Jaccard 유사도. 어휘의 표면은 상당히 흔들린다.
속도에 대하여
이번 로컬 실험에서는 POST /api/seed 1회에 약 145초가 소요되었다.
12개 샘플을 추출하여 평균 23.81 스텝 정도의 디노이즈를 수행하므로 실험 도구로서는 작동하지만, 인터랙티브한 도구로서는 아직 무겁다.
다만 이는 DiffusionGemma 자체가 느리다기보다는 이번 구현 경로의 문제가 크다.
Google 공식 개발자 문서에서는 vLLM 팀과 협력하여 DiffusionGemma를 vLLM에 구현했다고 설명하고 있다. CUDA / Triton / vLLM을 전제로 고처리량(high throughput)을 목표로 하는 설계다.
Hugging Face의 모델 카드에서도 vLLM, SGLang, Transformers, MLX 등의 이용 경로가 안내되어 있다.
이 글의 수치는 Mac의 PyTorch MPS 상에서 자체 샘플러를 돌려 관측한 값이며, 공식이 상정하는 vLLM이나 GPU 서버 상의 벤치마크가 아니다. 속도를 논하려면 다음에는 MLX 버전 또는 vLLM 버전에서 동일한 측정을 재실행할 필요가 있다.
이 결과로부터 알 수 있는 것
이번에 말할 수 있는 것은, DiffusionGemma의 디노이즈 과정은 「개념 관계의 조정 부하」를 관찰하기 위한 신호가 될 수 있다는 점이다.
적어도 재고와 주문 관계에서는 모순된 이벤트가 유의미하게 높은 instability를 나타냈다.
반대로, 아직 말할 수 없는 부분도 명확하다.
이 instability
은 「모순 그 자체」를 직접 측정하고 있는 것은 아니다. 까다롭지만 모순되지 않은 문장, 드물지만 성립하는 업무 이벤트, 프롬프트에 포함된 어휘의 편향성으로 인해 높아질 수도 있다.
따라서, 이것은 판정기라기보다는 개념 관계의 어느 부분을 자세히 살펴봐야 하는지를 나타내는 센서로서 다루는 것이 좋아 보인다.
다음에 할 일
| 과제 | 다음 검증 |
|---|---|
| 속도 | MLX 버전 또는 vLLM 버전으로 동일한 실험을 재실행한다 |
| ... |
요약
DiffusionGemma는 「빠른 문장 생성 모델」로 소개되는 경우가 많지만, 이번에는 다른 관점에서 접근했다.
생성 도중에 문장이 굳어가는 과정을 관찰하면, 모델이 개념 간의 관계를 어디에서 조정하고 있는지가 보인다.
작은 실험이긴 하지만, 모순 이벤트일수록 재고 (inventory)
와 주문 (order)
의 관계가 흔들렸다.
이는 LLM을 「답을 내는 기계」로서뿐만 아니라, 「의미가 안정될 때까지의 과정을 관찰하는 장치」로서 사용할 수 있는 가능성을 보여준다.
참고
- DiffusionGemma: The Developer Guide - Google Developers Blog
- google/diffusiongemma-26B-A4B-it - Hugging Face
- DiffusionGemma: The First Diffusion LLM Natively Supported in vLLM - vLLM Blog
- Generate DiffusionGemma output with Hugging Face Transformers - Google AI for Developers
부록
이 기사는 Fable군과 함께 생각한 내용으로, 원래는 조금 더 깊게 파고들고 싶었으나
Fable군을 더 이상 사용할 수 없게 되었기 때문에 일단 현재 상황은 GPT-5.5와 함께 정리했습니다.
말하자면 Fable군 추도 기사입니다.
X(트위터) 하고 있습니다
Discussion

AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기