LLM 추론 실패 유형 종합 분석: 체계적 분류와 원인 탐구
Large Language Model Reasoning Failures
TL;DR Highlight
GPT-4도 어린이보다 못하는 추론 실패 패턴을 체계적으로 정리한 첫 번째 종합 서베이.
Who Should Read
LLM 기반 에이전트나 챗봇을 개발하면서 모델이 왜 이상한 답변을 내놓는지 이해하고 싶은 AI 개발자. 프롬프트 엔지니어링이나 멀티에이전트 시스템 설계 시 신뢰성 문제를 겪고 있는 팀에게 특히 유용하다.
Core Mechanics
- 추론 실패를 비형식(직관/사회적), 형식(논리/수학), 체화(물리/공간) 3가지 유형과 근본적 실패·도메인 한계·견고성 문제 3가지 축으로 분류하는 2축 프레임워크 제시
- GPT-4조차 어린이가 쉽게 통과하는 Theory of Mind 과제를 실패하고, 문제 문구를 살짝만 바꿔도 성능이 크게 떨어짐
- 'A는 B다'로 학습해도 'B는 A다'를 추론 못하는 Reversal Curse가 GPT 계열 모델 전반에서 광범위하게 발생 — BERT 계열은 해당 없음
- 글자 세기나 긴 곱셈 같은 단순 카운팅·산술에서 체계적으로 실패하며, 이는 아키텍처(토크나이저, 위치 인코딩)의 근본 한계에서 비롯됨
- 프롬프트 순서, 앵커 숫자, 프레이밍 방식에 따라 동일한 내용도 다르게 답하는 인지 편향이 모든 모델에 내재되어 있으며, RLHF가 이를 오히려 증폭시킬 수 있음
- 멀티에이전트 시스템에서 장기 계획 유지 실패, 에이전트 간 정렬 불일치, 잘못된 검증/종료 판단이 반복적으로 발생하며 오류가 cascading됨
Evidence
- Tower of Hanoi 퍼즐에서 복잡도가 증가하면 o1, o3-mini 같은 최신 대형 추론 모델(LRM)도 '정확도 붕괴(accuracy collapse)' 경험
- GPT-4가 고전적 False Belief 과제에서 95% 확률로 틀린 답 선택 — 7~10세 어린이 수준 이하
- MWP(수학 서술형 문제)에 무관한 맥락 정보(예: 아버지 나이 조건)를 추가하면 올바르게 풀던 문제를 틀리는 견고성 실패 확인
- 같은 내용을 'Person B가 A보다 더 많이 쓰나요?' vs 'Person B가 A보다 더 적게 쓰나요?'로 물으면 동일한 사실에도 프레이밍에 따라 다른 답 반환
How to Apply
- 중요한 로직 검증 시 동일 내용을 순서·표현 방식을 바꿔 2~3회 반복 질문하고 일관성을 체크하라 — 결과가 다르면 framing effect나 order bias가 있다는 신호
- 멀티에이전트 시스템 설계 시 role specification을 명확히 하고, 에이전트 간 cross-verification 단계와 명시적 종료 조건을 반드시 추가하라 — 없으면 오류가 cascading됨
- 카운팅·수치 계산이 필요한 경우 LLM에 직접 맡기지 말고 코드 실행기나 계산기를 tool로 연동하라 — 이는 아키텍처 한계로 프롬프트로 해결 불가
Code Example
# Reversal Curse & Framing Effect 간단 테스트
# LLM이 양방향 추론과 표현 불변성을 갖는지 확인
def test_reversal_curse(ask_fn):
"""모델이 A→B 사실에서 B→A를 추론할 수 있는지 확인"""
fact = "우리 서비스의 CEO는 김철수입니다."
forward_q = "우리 서비스의 CEO는 누구입니까?"
reverse_q = "김철수는 어느 서비스의 CEO입니까?"
forward_ans = ask_fn(f"{fact}\n{forward_q}")
reverse_ans = ask_fn(reverse_q) # 사실 없이 역방향만
print(f"정방향: {forward_ans}") # 잘 답함
print(f"역방향: {reverse_ans}") # 모르거나 틀릴 가능성 높음
def test_framing_effect(ask_fn):
"""같은 내용을 다르게 표현했을 때 일관된 답을 하는지 확인"""
context = "A팀: 3h+2h+4h=9h 작업, B팀: 5h+1h+3h=9h 작업"
q1 = f"{context}\nB팀이 A팀보다 총 작업 시간이 더 많습니까?"
q2 = f"{context}\nB팀이 A팀보다 총 작업 시간이 더 적습니까?"
ans1 = ask_fn(q1) # "더 많다"고 답하면 framing에 끌린 것
ans2 = ask_fn(q2) # "더 적다"고 답하면 동일 문제
# 두 답이 논리적으로 모순이면 framing effect 존재
print(f"더 많나요: {ans1}")
print(f"더 적나요: {ans2}")
# 앵커 편향 테스트
def test_anchoring(ask_fn):
anchored = "이 API 호출이 초당 10,000회 이상 발생할까요? 예상치는?"
neutral = "이 API의 예상 초당 호출 횟수는?"
print(ask_fn(anchored)) # 10,000 근처로 편향될 가능성
print(ask_fn(neutral))Terminology
Related Resources
Original Abstract (Expand)
Large Language Models (LLMs) have exhibited remarkable reasoning capabilities, achieving impressive results across a wide range of tasks. Despite these advances, significant reasoning failures persist, occurring even in seemingly simple scenarios. To systematically understand and address these shortcomings, we present the first comprehensive survey dedicated to reasoning failures in LLMs. We introduce a novel categorization framework that distinguishes reasoning into embodied and non-embodied types, with the latter further subdivided into informal (intuitive) and formal (logical) reasoning. In parallel, we classify reasoning failures along a complementary axis into three types: fundamental failures intrinsic to LLM architectures that broadly affect downstream tasks; application-specific limitations that manifest in particular domains; and robustness issues characterized by inconsistent performance across minor variations. For each reasoning failure, we provide a clear definition, analyze existing studies, explore root causes, and present mitigation strategies. By unifying fragmented research efforts, our survey provides a structured perspective on systemic weaknesses in LLM reasoning, offering valuable insights and guiding future research towards building stronger, more reliable, and robust reasoning capabilities. We additionally release a comprehensive collection of research works on LLM reasoning failures, as a GitHub repository at https://github.com/Peiyang-Song/Awesome-LLM-Reasoning-Failures, to provide an easy entry point to this area.