

확률부터 LLM까지, 원리부터 제대로 배우는 자기주도 학습 플랫폼
할루시네이션(환각)은 언어모델이 사실이 아니거나 주어진 근거로 뒷받침되지 않는 내용을, 사실인 것처럼 유창하게 생성하는 현상이다. 모델이 사실을 조회하는 것이 아니라 Loading...처럼 다음 토큰을 확률적으로 고르기 때문에 발생한다.
이 내용은 넘스탯의 근거 없는 답이 무너지는 장면에서 직접 실험으로 확인할 수 있습니다.
각 단계를 클릭하면 해당 학습 내용을 볼 수 있습니다
학습 진도 (완료한 단계)
0%
LLM에게 없는 논문의 제목을 물어보면, 모른다고 하지 않고 아주 그럴듯한 제목과 저자와 연도를 만들어 냅니다. 이것을 할루시네이션(환각)이라고 부릅니다. 왜 이런 일이 생길까요? 답은 의외로 단순합니다. LLM은 사실을 어딘가에서 찾아보고 대답하는 프로그램이 아니기 때문입니다. LLM이 하는 일은 딱 하나입니다 — 지금까지의 문장을 보고, 다음에 올 확률이 가장 높은 단어(토큰)를 고르는 것. 이 과정을 수천 번 반복하면 글이 됩니다. 이 절차 어디에도 "이게 사실이 맞나?"를 확인하는 단계가 없습니다. 구조에 없는 기능은 아무리 잘 만들어도 저절로 생기지 않습니다.
말뭉치에 딱 두 문장만 있다고 해봅시다 (넘스탯 LLM 강의 8장 실습 예제). 문장 1: 세종대왕은 / 한글을 / 만들었어요 문장 2: 에디슨은 / 전구를 / 발명했어요 이 말뭉치로 "앞 단어 하나를 보고 다음 단어를 맞히는" 아주 작은 언어모델을 만듭니다. 세어 보면 이어짐은 네 가지뿐입니다. 세종대왕은 → 한글을 (1회) 한글을 → 만들었어요 (1회) 에디슨은 → 전구를 (1회) 전구를 → 발명했어요 (1회) 이제 사용자가 이렇게 입력합니다. "세종대왕은 전구를 ___" 모델은 바로 앞 단어 "전구를"을 보고 다음 단어를 고릅니다. 말뭉치에서 "전구를" 다음에 온 단어는 "발명했어요" 하나뿐이므로 P(발명했어요 | 전구를) = 1/1 = 1.0 (100%) 모델의 출력: "세종대왕은 전구를 발명했어요." 이 문장은 말뭉치에 한 번도 등장한 적이 없고, 사실도 아닙니다. 그런데 모델은 100% 확신으로 이 문장을 만들었습니다. 거짓말을 한 것이 아니라, 배운 규칙을 정확히 따랐을 뿐입니다. 할루시네이션은 고장이 아니라 이 구조의 정상 동작입니다.
정답: 모델이 계산하는 것은 바로 앞 문맥에서 다음 단어가 나올 확률뿐이기 때문입니다. "세종대왕이 전구를 발명했는가"라는 사실 질문을 던지는 단계 자체가 절차에 없습니다. 모델에게는 "전구를 → 발명했어요"라는 강한 이어짐만 보입니다.
정답: 그러려면 모델이 자기가 모른다는 사실을 알아야 하는데, 확률 계산에는 "모름" 상태가 없습니다. 후보 단어들 중 확률이 가장 높은 것은 언제나 존재하고, 그 확률이 낮더라도 모델은 그것을 출력합니다. 요즘 모델이 가끔 "확실하지 않다"고 말하는 것은 사람이 그렇게 답하도록 따로 학습시킨 결과이지, 계산 과정에서 저절로 나오는 것이 아닙니다.
정답: 버그가 아니라 설계상 따라오는 성질입니다. 다음 토큰 예측이라는 목표를 잘 달성할수록 그럴듯한 문장을 잘 만들게 되고, 그럴듯함에는 사실과 사실이 아닌 것이 함께 들어 있습니다. 그래서 성능이 좋아져도 완전히 사라지지 않습니다.