앞으로 에이전트는 생각을 굳이 말로 하지 않아도 될 수 있다.

대신 안에서 계산을 끝내고, 필요할 때만 사람에게 설명을 내보이는 쪽으로 가고 있다. Microsoft Research·ETH Zürich·KRAFTON의 세 저자가 2026년 6월에 올린 이 논문은, 3B 모델에서 그게 실제로 되는 걸 처음으로 보였다.

지금 우리가 보는 CoT는 사실 사람이 읽으라고 출력하는 텍스트다

Claude Code나 Codex, Gemini CLI, OpenAI Agent를 써본 사람이라면 “생각하는 중…” 아래로 흘러가는 문장을 본 적이 있다. Chain-of-Thought(CoT)라 부르는 이 중간 서술이 정답률을 크게 올린다. 다들 안다. 대신 대가가 있다.

모델 입장에서는 문장을 만들 필요가 없다. 토큰을 하나씩 순차적으로 디코딩하느라 응답이 느려지고, 어차피 다음 계산으로 소비될 뿐인 중간 단계를 매번 문법에 맞는 자연어로 뽑아 낸다. CoT의 정확도 이득은 진짜지만, “사람이 읽는 문장” 부분은 부수 효과에 가깝다.

그래서 “생각을 언어로 뽑지 말고, 모델의 내부 상태에서 그냥 계산하자"는 아이디어가 나왔다. 이걸 latent reasoning이라 부른다. 문제는, 이 방법이 GPT-2 정도의 작은 모델에서는 CoT와 비등한데, 1B를 넘어가는 순간 오히려 밀리고 그 격차가 모델이 커질수록 더 벌어졌다는 것이다. 큰 모델일수록 오히려 내부 사고가 통하지 않았다. 그래서 그동안은 실제 프론티어 에이전트에 이 아이디어가 들어가지 못했다.

이 논문 LOTUS는 그 격차를 3B에서 처음으로 좁혔다.

Figure 1 — LOTUS는 백본이 커져도 명시적 CoT의 정확도 상한을 따라간다

Figure 1. 기존 latent 방법(Coconut·CODI·SIM-CoT·KaVa)은 모델이 커질수록 명시적 CoT와의 격차가 벌어진다. LOTUS(빨강)만 상한선을 따라간다. 동시에 생각 단계 지연은 $2.5\times$~$6.9\times$ 줄인다.

LOTUS의 핵심 아이디어 — 같은 층을 여러 번 돌린다

배경 하나. 지금까지의 GPT 계열은 층(layer)이 계속 이어지는 구조다. 아래 층의 출력이 위 층의 입력이 되며 한 방향으로 흘러간다. 층을 더 넣으려면 파라미터가 더 필요하다.

Looped Transformer는 다르다. 같은 층을 여러 번 돌린다. 파라미터를 늘리지 않고 같은 무게를 재사용해서 계산을 깊게 한다. 그래서 생각을 여러 번 다듬기에 잘 맞는다. 최근 이 방식이 십억 파라미터 급 사전학습에서도 통한다는 연구가 나왔고, LOTUS는 여기에 얹어서 latent 추론에 적용했다.

구조는 두 부분이다.

  1. 질문 뒤에 “혼잣말 자리(latent block)“를 K개 붙인다. 각 자리는 CoT 한 단계를 담을 빈 토큰들이다. GSM8K는 대부분 6단계 이내라 K=6.
  2. 모델을 이 자리들 위에서 R번 반복 순회한다. 반복할 때마다 내부 상태가 조금씩 다듬어진다.

여기까지가 구조인데, 이것만으로는 잘 안 된다. 관건은 이 내부 상태를 무엇으로 훈련시키는가다.

핵심: 각 자리의 내부 상태를 그대로 원래 모델의 출력 헤드(LM head)에 통과시켜, 실제 CoT 토큰과 비교한다. 모델이 최종 답을 만들 때 쓰는 것과 똑같은 헤드로 지도한다. 그것도 K개 자리 전체를 병렬로.

한 줄로 요약하면 — 모델 안에 혼잣말용 토큰 자리를 만들어 두고, 그 자리에서 CoT를 출력하도록 훈련시킨다. 답을 뽑는 그 헤드로 곧장.

이 논문의 아름다움은 한 겹이 더 있다. 훈련이 끝나면 그 혼잣말은 실제로 뽑지 않는다. 훈련 때만 “각 자리에서 CoT 한 단어씩 출력해 봐"라는 정답 신호를 주고, 실전 추론에서는 그 자리들을 LM head로 뽑지 않고 답을 만들 때 참조하는 조건으로만 넘긴다. 즉 훈련 때는 혼잣말을 시키고, 실전에서는 혼잣말을 굳이 안 하도록 만든 셈이다. 그러면서도 latent가 어휘 공간에 남아 있어, 필요하면 언제든 텍스트로 뽑아 볼 수 있다. 훈련 채널이 곧 관측 채널이 된다.

Figure 2 — R번 순회한 뒤 내부 상태를 LM head로 gold CoT에 병렬 매칭한다

Figure 2. 위: 백본을 R번 반복하고 마지막 상태를 CoT 토큰과 매칭. 아래: 그 내부 상태를 조건으로 답을 예측.

“…” 100개 붙이던 그 계보의 진화형

사실 이 아이디어의 뿌리는 두 해 전에 이미 나와 있었다. 언어 모델 프롬프트에 무의미해 보이는 pause 토큰이나 “…“을 잔뜩 붙여 두면, 모델이 그 자리에서 추가로 계산할 시간을 벌어 정답률이 올라간다는 관찰이 있었다. Goyal 2024의 Think Before You Speak: Training Language Models With Pause Tokens, 그리고 Pfau 2024의 Let’s Think Dot by Dot이 대표적이다. “생각용 빈 자리를 미리 만들어 둔다"는 발상 자체가 여기서 왔다.

LOTUS의 padded latent prefix는 그 자리를 학습 가능한 임베딩으로 바꾸고, looped Transformer로 여러 번 다듬고, gold CoT로 지도한 진화형이다. “…을 100개 붙였더니 모델이 조용히 더 생각하더라"라는 관찰이, “그 자리에 실제로 CoT를 심어 훈련시키자"까지 온 것이다.

왜 이게 다른가

기존 방법(Coconut·CODI·SIM-CoT)은 내부 상태를 여전히 하나씩 자기회귀적으로 만들었고, 지도 신호는 교사 모델의 hidden state distillation이나 KV 캐시 압축 같은 간접 target에 의존했다. LOTUS는 두 가지를 동시에 뒤집는다. 병렬로 계산하고, 명시적 CoT와 같은 target에 맞춘다.

수식으로 쓰면 두 개의 손실이 있다. $\mathcal{L}_{\text{step}}$은 각 자리에 gold CoT 토큰을 병렬로 매칭하고, $\mathcal{L}_{\text{ans}}$은 최종 답을 예측한다. 저자들도 궁금했다 — 위치별 독립 지도가 왜 학습을 무너뜨리지 않는가. 답은, loss가 아니라 loop이 위치 간 의존성을 담아내기 때문이다. Loss는 “각 자리에 올바른 토큰이 앉게 하는” 역할($\mathcal{L}_{\text{step}}$)과 “그 자리 조합이 실제로 답을 만들 수 있는가"의 역할($\mathcal{L}_{\text{ans}}$)로 갈리고, 하나라도 빼면 성능이 무너진다.

결과 — 정확도는 CoT급, 지연은 최대 6.9배 감소

Llama-3.2-3B-Instruct 백본에서 GSM8K 정확도는 명시적 CoT의 1점 이내(70.0% vs 71.0%). 이전에는 어떤 latent 방법도 3B에서 이 격차를 좁히지 못했다.

Out-of-domain 평균(GSM-Hard·MultiArith·SVAMP)에서는 오히려 앞섰다. 즉 훈련 도메인에서 배운 것을 다른 문제로 옮길 때 CoT보다 무너지지 않는다.

속도에서는 격차가 더 크다. H100 단일 GPU, 배치 1 기준으로 생각 단계 지연은:

방법수식 CoT 지연자연어 CoT 지연
명시적 CoT328 ms963.6 ms
SIM-CoT156 ms
LOTUS133 ms140.8 ms
CODI (정확도 밀림)88 ms

CoT가 자연어로 길어질수록 격차가 더 벌어진다. 수식 단계에서 $2.5\times$, 자연어 문장 단계에서 $6.9\times$. 명시적 CoT는 자연어를 만들 때마다 토큰을 다 뽑아야 하지만, LOTUS는 어차피 안에서 계산하므로 CoT가 길어도 R=6번의 병렬 스텝만 밟는다.

가장 아름다운 지점 — 내부 상태가 사실 CoT였다

내가 가장 눈여겨본 것은 정확도·지연이 아니다.

내부 상태를 그대로 원래 모델의 LM head에 통과시켰더니 gold CoT의 중간 계산 단계가 그대로 복원됐다. Top-1 정확도 70.9%, 즉 자리마다 원래 나올 CoT 토큰 그 자체가 최상위 후보로 잡힌다.

더 놀라운 것은 그다음이다. 훈련 데이터에 없는 다른 유효한 풀이 경로도 내부 상태에 함께 담긴다. 답이 108로 같은데 중간 계산이 다른 두 풀이가 있을 때, 훈련에는 한쪽만 썼는데도 다른 풀이의 중간 숫자(24, 18)가 Top-5에 64% 확률로 잡혔다.

이 결과가 말하는 건, 내부 상태가 사람이 읽을 수 없는 벡터가 아니라 원래 언어 모델의 어휘 공간 위에 사는 확률 분포라는 것이다. 즉 내부 사고는 discrete CoT와 같은 공간에서 일어나되, 단 하나의 문장이 아니라 여러 유효한 풀이를 동시에 지지하는 이산 분포로 존재한다. 문장으로 뽑으면 하나만 나오지만, 안에서는 그물처럼 걸려 있다.

이건 latent CoT의 매력이 효율만이 아니라는 신호다. 하나의 내부 상태가 여러 정답 경로를 동시에 담을 수 있고, 최종 답을 뽑는 순간에만 그중 하나로 붕괴한다. 어쩌면 이게 앞으로 에이전트의 “생각"이라는 개념 자체가 다시 그려질지도 모른다.

Figure 3 — LOTUS-aux 변종 (auxiliary decoder를 통한 지도)

Figure 3. 논문은 auxiliary decoder를 통한 지도 라우팅(LOTUS-aux)도 함께 실험한다. 3B에서는 LOTUS와 동등하지만 작은 모델에서 무너져, 결국 LM head 직접 지도가 규모 전반에 강건하다는 결론에 이른다.

그래서 에이전트에게 왜 중요한가

이 논문이 에이전트 실무에 던지는 함의

  • 긴 CoT를 화면에 뽑지 않아도 정확도를 유지한다. 자연어 CoT가 길어질수록 격차가 벌어진다($6.9\times$).
  • 내부 추론 비용이 줄어든다. 같은 모델을 여러 번 돌리므로 파라미터는 안 늘고 계산 깊이만 늘어난다.
  • 응답 속도가 빨라진다. 사용자가 “생각 중” 스피너를 덜 보게 된다.
  • 사람에게는 최종 설명만 보여줘도 된다. 필요할 때만 내부 상태를 텍스트로 풀어내면 된다.
  • 여러 에이전트가 내부 상태를 그대로 주고받는 실험도 자연스레 이어진다. 텍스트로 직렬화하지 않고 내부 표현을 공유하면 대역폭·손실이 크게 줄 수 있다.
  • 하지만 대가는 있다. CoT가 사라지면 사람이 모델의 실수를 중간에 잡아내기 어려워진다. 관측과 정렬 쪽에 새 숙제가 생긴다.

앞으로 뭐가 달라질까

지금의 AI는 대체로 이렇게 움직인다.

생각 → 말 → 다시 생각 → 다시 말

LOTUS가 지향하는 방향은 이렇다.

생각 → 생각 → 생각 → 마지막에만 말하기

앞으로는 추론 속도가 빨라질 뿐 아니라, 우리가 보는 CoT가 점점 줄어들지도 모른다. 지금 Claude Code가 보여주는 “Thinking…” 아래의 긴 서술이, 어느 시점부터는 요약 한 줄만 남고 실제 사고는 모델 안에서 병렬로 압축되는 세계.

그 세계에서 남는 질문은 성능이 아니라 관측이다. 모델이 무슨 생각을 하는지 사람이 어떻게 확인할 것인가. 다행히 LOTUS는 이 질문에 대한 첫 답도 함께 갖고 있다. 필요하면 언제든 내부 상태를 LM head에 통과시켜 “생각을 텍스트로 뽑아낼 수 있다.” 다만 항상 뽑을 필요가 없을 뿐이다.

에이전트가 언젠가 “말수 적은 프로"가 되는 날이 온다면, 그날의 뿌리 중 하나가 이 논문일 것이다.

한계

  • 수학 벤치마크에만 검증됐다. 코드·자연어 이해·다중 홉 QA 같은 다른 도메인은 열린 문제다.
  • 블록 수·폭·깊이가 고정 하이퍼파라미터다. 난이도에 따라 자동으로 조절되지 않는다.
  • 관측 도구가 아직 없다. 내부 사고가 사라지는 방향은 정렬 관점에서 별도 연구가 필요하다.

출처

Ying Fan, Anej Svete, Kangwook Lee. Bridging the Gap Between Latent and Explicit Reasoning with Looped Transformers. arXiv:2606.31779 (v2, 2026-07-13).