Citeon
측정·지표·방법론 투명

LLM 비결정성 — 같은 질문에 다른 답이 나오는 이유

김태오
김태오 · 그로스·퍼포먼스 리드
LLM 비결정성 — 같은 질문에 다른 답이 나오는 이유

같은 질문을 같은 AI에 던졌는데 답이 매번 다른 이유는, LLM이 '확률적으로 다음 단어를 뽑는 기계'인 데다, 그 확률을 계산하는 GPU 연산 자체가 미세하게 흔들리기 때문입니다. 그래서 "오늘 ChatGPT에 물어보니 우리 브랜드가 인용 안 됐어요"라는 한 번의 관찰은 사실 측정값이 아니라 노이즈 한 점에 가깝습니다. 이 글은 그로스·퍼포먼스 관점에서 이 비결정성(non-determinism)이 어디서 오는지, 왜 단일 측정으로 AI 가시성을 판단하면 안 되는지, 그리고 흔들리는 숫자에서 어떻게 '진짜 신호'를 뽑아내는지를 끝까지 해부합니다.

먼저, '비결정성'이 정확히 무슨 뜻인가

결정적(deterministic) 시스템은 입력이 같으면 출력이 항상 같습니다. 계산기에 2+2를 넣으면 언제나 4가 나오죠. 반면 비결정적(non-deterministic) 시스템은 입력이 같아도 출력이 달라질 수 있습니다. LLM은 후자입니다. 그리고 중요한 건, 이 흔들림이 '버그'가 아니라 모델이 작동하는 방식 그 자체에서 나온다는 점입니다.

그로스 담당자 입장에서 이게 왜 문제냐면, 우리가 추적하려는 지표 — "AI 답변에 우리 브랜드가 인용되는가" — 의 측정 대상 자체가 흔들리는 표적이기 때문입니다. 흔들리는 표적을 한 발 쏘고 "빗나갔다"고 결론 내리는 것만큼 위험한 의사결정은 없습니다.

흔들림의 진원지 1 — 샘플링: 주사위를 굴려 단어를 뽑는다

LLM은 문장을 만들 때 다음에 올 단어(토큰)마다 확률 분포를 계산합니다. 예를 들어 "한국의 수도는" 다음에 올 단어로 서울(0.92), 대한민국(0.03), 한반도(0.01)… 같은 확률표가 나옵니다. 여기서 어떤 단어를 고를지 결정하는 게 샘플링입니다.

이걸 통제하는 손잡이가 temperature입니다. 비유하자면 온도는 주사위의 둥글기입니다. 온도가 높으면 주사위가 잘 굴러서(확률이 평평해져서) 의외의 단어도 자주 나오고, 온도가 0이면 주사위가 거의 멈춰서(항상 1등 단어만 골라서) 매번 같은 답이 나올 것 같습니다. 그래서 흔히들 "temperature=0으로 두면 결정적이다"라고 믿습니다.

그런데 그게 사실이 아닙니다. 여기서부터가 핵심입니다.

흔들림의 진원지 2 — GPU 연산: 온도를 0으로 해도 흔들린다

temperature=0은 '항상 가장 확률 높은 단어를 고른다(greedy)'는 뜻입니다. 이론적으로는 결정적이어야 합니다. 하지만 실제로는 같은 입력에 같은 온도라도 결과가 흔들립니다. 왜일까요?

이유는 GPU가 부동소수점(floating point) 연산을 하는 방식에 있습니다. 수십억 개의 숫자를 더하고 곱할 때, GPU는 효율을 위해 연산을 여러 묶음(batch)으로 쪼개 병렬 처리합니다. 그런데 부동소수점 덧셈은 순서에 따라 미세하게 결과가 달라집니다((a+b)+c ≠ a+(b+c)가 컴퓨터에선 종종 참입니다). 같은 서버라도 그때그때 들어온 다른 사용자 요청과 함께 배치로 묶이면서 연산 순서가 바뀌고, 그 미세한 차이가 확률표의 1·2등 순위를 뒤집을 때가 있습니다. 1등과 2등의 확률이 0.501 vs 0.499처럼 아슬아슬하면, 소수점 끝자리의 흔들림만으로도 다른 단어가 선택되고, 그 단어가 이후 문장 전체를 다른 길로 끌고 갑니다. 작은 갈림길 하나가 전혀 다른 목적지를 만드는 셈입니다.

이 현상의 규모를 보여주는 실측이 있습니다. 한 분석에서는 약 2,350억 파라미터 규모의 모델에 똑같은 프롬프트를 1,000번 넣었더니 80가지나 되는 서로 다른 출력이 나왔습니다. 6개 모델로 480회를 돌린 실험(arXiv:2602.14349)도 같은 결론을 가리킵니다 — 온도를 0으로 못 박아도 LLM은 완전히 결정적이지 않다는 것입니다.

흔들림 원천비유통제 가능한가
샘플링(temperature)주사위의 둥글기부분적(0으로 낮춰도 0이 안 됨)
GPU 부동소수점·배치같은 길인데 갈림길 끝자리가 흔들림사용자가 통제 불가(서버 측)
모델 버전·라우팅같은 식당인데 주방장이 바뀜통제 불가(공급사가 조용히 교체)
검색(RAG) 단계의 변동도서관 사서가 매번 다른 책을 꺼내옴부분적

흔들림의 진원지 3 — RAG: 답을 만들기 전에 '검색'이 흔들린다

ChatGPT 검색, Perplexity, 구글 AI, 네이버 AI 브리핑 같은 'AI 검색'은 순수 LLM이 아니라 RAG(Retrieval-Augmented Generation) 구조입니다. 2020년 원전 논문(Lewis 등, arXiv:2005.11401)이 정의한 이 구조는 모델 머릿속에 든 지식(파라메트릭 메모리)과, 그때그때 외부에서 끌어온 문서(비파라메트릭 메모리)를 결합합니다. 흐름은 세 단계입니다.

  1. 검색(Retrieval) — 질문과 관련된 문서를 웹·색인에서 끌어온다
  2. 재정렬(Reranking) — 끌어온 후보들을 질문과 가장 잘 맞는 순서로 다시 줄 세운다
  3. 생성(Generation) — 상위 문서들을 근거로 답변을 작성하고 인용한다

비유하면 도서관입니다. 검색은 키워드 색인으로 책을 찾는 단계, 재정렬은 "이 질문엔 이 책이 제일 낫다"고 판단하는 사서, 생성은 그 책들을 읽고 요약해 주는 직원입니다. 문제는 이 세 단계 어디에서든 변동이 끼어들 수 있다는 것입니다. 웹은 실시간으로 바뀌고, 검색 인덱스도 갱신되고, 후보를 몇 개 가져올지(top-k)도 그때그때 다를 수 있습니다. 그러니 같은 질문이라도 '근거로 깔리는 문서 묶음' 자체가 매번 조금씩 달라지고, 그 위에서 생성되는 답변과 인용 목록도 따라 흔들립니다.

왜 검색 품질이 인용을 좌우하나 — 숫자로 보기

검색이 부실하면 우리 브랜드 문서가 애초에 후보에 못 들어가고, 후보에 못 들면 인용은 0입니다. 검색 품질이 얼마나 결과를 흔드는지는 공개 벤치마크로 가늠할 수 있습니다.

하이브리드 검색을 비유하면 키워드 색인(BM25)과 주제를 아는 사서(임베딩)를 함께 둔 도서관입니다. 색인만 있으면 단어는 정확히 맞춰도 의도를 놓치고, 사서만 있으면 큰 그림은 잡아도 고유명사·모델명을 놓칩니다. 둘을 합쳐야 recall이 올라가죠. 이 모든 단계가 확률적이고 갱신되는 대상이라, '검색의 흔들림'은 생성보다 먼저 일어나는 더 근본적인 비결정성입니다.

한 가지 더 — 'Lost in the Middle'

설령 우리 문서가 후보에 들어갔어도, 긴 맥락의 어디에 놓이느냐가 인용 여부를 바꿉니다. Liu 등(2023, arXiv:2307.03172)은 모델이 긴 입력의 중간에 있는 정보를 잘 잃어버리는 U자형 경향을 보고했습니다. 앞과 끝은 잘 보고, 가운데는 흘립니다. 재정렬에서 우리 문서가 7등에서 9등으로 한 칸만 밀려도 '중간'에 묻혀 인용에서 누락될 수 있다는 뜻입니다. 순위의 미세한 변동이 인용의 유무로 증폭되는 또 하나의 경로입니다.

그래서 '한 번 검색'은 측정이 아니라 노이즈 한 점이다

여기까지 오면 결론은 분명합니다. AI 가시성을 "오늘 한 번 물어봤더니"로 판단하는 건, 출렁이는 파도에서 물 높이를 딱 한 번 재고 "해수면은 이 높이"라고 적는 것과 같습니다. 그로스 관점에서 이건 측정 오류가 아니라 측정 설계의 실패입니다.

이 불확실성을 정량화하려는 연구도 나왔습니다. AI 가시성의 불확실성을 다룬 한 분석(arXiv:2603.08924)은 브랜드 인용 빈도가 멱법칙(power law)처럼 크게 출렁이며, 단일 측정으로는 신뢰할 수 없으니 다중 실행 + 부트스트랩 신뢰구간(confidence interval)을 권장합니다. 한마디로 "한 번 재지 말고 여러 번 재서 범위로 말하라"는 것입니다.

약한 보고 vs 강한 보고 — 실제 문장으로

같은 데이터를 다루더라도, 비결정성을 이해한 보고와 그렇지 않은 보고는 문장에서 갈립니다.

흔들리는 숫자에서 신호를 뽑는 5가지 원칙

비결정성은 없앨 수 없습니다. 우리가 할 수 있는 건 '여러 번 재서 평균과 범위로 말하는' 측정 설계입니다.

  1. 다중 실행 — 한 질문을 N회(예: 20~30회) 반복해 인용율을 비율로 집계한다. 단일 응답은 버린다.
  2. 신뢰구간으로 보고 — 점 추정치 대신 부트스트랩 신뢰구간(예: 95% CI)을 함께 낸다. 구간이 겹치면 '차이 없음'으로 본다.
  3. 엔진별 분리 — ChatGPT·Perplexity·Gemini·Claude를 합치지 않는다. 인용 패턴이 근본적으로 다르기 때문이다(아래).
  4. 질문 세트 고정·공개 — 어떤 질문으로 쟀는지가 결과를 좌우한다. 질문 세트를 바꾸면 비교가 깨진다.
  5. 추세는 여러 주차로 — 한 주의 변동은 노이즈일 확률이 높다. 신호는 여러 주의 일관된 방향에서만 읽는다.
# 인용율을 '한 점'이 아니라 '분포'로 측정하는 의사코드
hits = 0
N = 30
for i in range(N):
    answer = ask_engine("이 카테고리 추천 브랜드는?")  # 매번 흔들림
    if brand in answer.citations:
        hits += 1

rate = hits / N                      # 점 추정치
ci_low, ci_high = bootstrap_ci(hits, N)  # 신뢰구간
report(f"{rate:.0%} (95% CI {ci_low:.0%}~{ci_high:.0%})")
# 단일 실행(N=1)은 0% 또는 100%만 나온다 → 정보가 없다

엔진마다 답이 다른 건 '버그'가 아니라 '성향'이다

같은 질문을 ChatGPT와 Perplexity에 던지면 답도 인용 출처도 다릅니다. 이건 흔들림과는 또 다른 층위의 '구조적 차이'입니다. 대규모 인용 분석에 따르면 ChatGPT와 Perplexity의 인용 도메인 중복은 약 11%에 불과하고, 인용의 약 90%가 엔진마다 서로 다릅니다. ChatGPT는 위키백과를 약 47.9% 인용하는 반면, Perplexity는 Reddit을 약 46.7% 인용하는 식으로 성향 자체가 갈립니다.

엔진성향(요약)
ChatGPT위키백과·커뮤니티 출처를 선호
Perplexity실시간 웹·인라인 인용, Reddit 비중 높음
Gemini구글 색인·E-E-A-T 신호에 민감
Claude근거 약한 콘텐츠를 보수적으로 걸러냄(Citations API)
Grok실시간 웹·X 스트림 반영, 인용 정확도 편차 큼

그래서 엔진을 합산하면 메커니즘이 가려집니다. "전체 가시성 35%"는 ChatGPT에서 강한지, Perplexity에서 약한지를 숨깁니다. 처방이 달라지는 정보를 평균이 삼켜버리는 셈이죠. 측정은 엔진별로, 처방도 엔진별로 가야 합니다.

그럼 무엇을 '높일' 수 있나 — 콘텐츠가 흔들림을 이긴다

비결정성이 있다고 해서 손을 놓을 일은 아닙니다. 흔들리는 표적이라도, 평균적으로 더 자주 인용되게 만드는 방법은 연구로 검증돼 있습니다. GEO를 정의한 연구(Aggarwal 등, 2023, arXiv:2311.09735, KDD 2024)는 통계 수치 추가, 출처 인용, 직접 인용문(quote) 삽입이 특정 조건에서 생성엔진 가시성을 최대 약 40%까지 끌어올렸다고 보고합니다.

핵심은, 모델이 검색해 온 문서 중에서 '인용하기 쉬운 형태'로 쓰여 있어야 한다는 것입니다. 수치·출처·직접 인용은 RAG의 생성 단계에서 근거로 집어 쓰기 좋은 재료입니다. Lost in the Middle을 떠올리면, 핵심 주장은 문서 앞과 끝에 배치하는 게 유리합니다. 답변의 신뢰성을 재는 RAGAS의 faithfulness(답변 주장이 출처에서 추적되는 정도) 같은 지표가 실무에서 0.9 이상이면 안정, 0.7 미만이면 위험으로 다뤄지는 것도 같은 맥락 — 추적 가능한 근거가 인용을 부른다는 이야기입니다.

프롬프트 '검색량'을 파는 도구를 조심하라

비결정성과 짝을 이루는 또 하나의 함정이 '프롬프트 볼륨'입니다. "이 질문은 월 N만 번 검색됩니다" 같은 숫자를 내세우는 도구가 있는데, AI 프롬프트는 검색 엔진의 검색량처럼 실측이 불가능합니다. 대개 시장의 1% 미만 패널을 모델링한 추정치입니다. Conductor의 표현을 빌리면 "신뢰할 수 없는 검색량 데이터는 없는 것보다 나쁘다"입니다. 없으면 모른다고 인정하지만, 틀린 숫자는 잘못된 확신을 주기 때문이죠. 비결정성을 아는 그로스 담당자는 '정밀해 보이는 가짜 숫자'를 가장 경계합니다.

Citeon은 이 원리를 제품에 담았다

Citeon은 "한 번 물어봤더니" 식 측정을 거부합니다. 비결정성을 전제로 설계했기 때문입니다.

우리 브랜드가 AI 답변에서 지금 어디쯤 있는지, 한 점이 아니라 범위로 확인하고 싶다면 무료 진단(₩0)으로 시작하세요. URL 하나면 됩니다.

자주 묻는 질문(FAQ)

temperature를 0으로 고정하면 매번 같은 답이 나오지 않나요?

아니요. temperature=0은 '가장 확률 높은 단어를 고른다'는 의미일 뿐, 그 확률을 계산하는 GPU 부동소수점 연산과 배치 처리에서 미세한 변동이 생깁니다. 한 분석에서는 약 2,350억 파라미터 모델에 같은 프롬프트를 1,000번 넣었을 때 80가지 출력이 나왔습니다. 온도는 흔들림을 줄이지만 0으로 만들지는 못합니다.

그럼 AI 가시성은 측정 자체가 무의미한가요?

그렇지 않습니다. 무의미한 건 '단일 측정'입니다. 같은 질문을 여러 번(예: 20~30회) 반복해 인용율을 비율로 집계하고, 부트스트랩 신뢰구간으로 범위를 함께 보고하면 충분히 의사결정에 쓸 수 있는 신호가 됩니다. 한 연구도 인용 빈도가 멱법칙처럼 출렁이니 다중 실행과 신뢰구간을 권장합니다.

왜 ChatGPT와 Perplexity 결과를 합치면 안 되나요?

두 엔진은 인용 출처가 근본적으로 다릅니다. 도메인 중복이 약 11%에 불과하고 인용의 약 90%가 서로 다릅니다. ChatGPT는 위키백과(약 47.9%)를, Perplexity는 Reddit(약 46.7%)을 즐겨 인용하는 식입니다. 합산하면 '어느 엔진에서 강하고 약한지'가 평균에 묻혀, 처방이 달라지는 정보를 잃게 됩니다.

흔들리는데 콘텐츠를 고쳐서 인용을 높이는 게 가능한가요?

가능합니다. GEO 연구(KDD 2024)는 통계 수치·출처 인용·직접 인용문을 더하면 특정 조건에서 생성엔진 가시성이 최대 약 40%까지 올랐다고 보고합니다. 흔들림은 '평균'을 중심으로 일어나므로, 그 평균을 올리는 콘텐츠 설계가 통합니다. 핵심 주장은 문서 앞·끝에 배치하는 게 유리합니다(중간 정보가 잘 누락되는 U자형 경향 때문).

'프롬프트 검색량 N만 회' 같은 숫자는 믿어도 되나요?

주의해서 보세요. AI 프롬프트 볼륨은 검색 엔진의 검색량처럼 실측이 불가능하고, 대개 시장 1% 미만 패널을 모델링한 추정치입니다. 정밀해 보이는 숫자가 오히려 잘못된 확신을 줄 수 있습니다. 측정은 '우리가 실제로 N회 돌려 잰 인용율과 신뢰구간'처럼 재현 가능한 것에 기대는 편이 안전합니다.

참고자료

김태오
김태오 · 그로스·퍼포먼스 리드

AI 검색 유입을 전환·매출로 잇는 광고·어트리뷰션을 다룹니다. 숫자로 말하는 걸 좋아합니다.

내 사이트의 AI 검색 점수가 궁금하다면

30초 무료 진단으로 SEO·AEO·GEO 점수와 처방을 받아보세요.

무료 진단 시작
← 인사이트 목록으로