통계 실험실 차트
넘스탯 로고
넘스탯
LEARN · SIMULATE · VERIFY

확률부터 LLM까지, 원리부터 제대로 배우는 자기주도 학습 플랫폼

로그인
학습 메뉴
도움말

텍스트 생성 실습

문자 단위 RNN 언어 모델 — "다음 글자 맞히기"가 글쓰기가 되는 과정을 브라우저 실제 학습으로

원하는 개념·랩·가이드를 검색해보세요

Ctrl K
딥러닝 실습실로RNN 상세 이론

무작위 글자 뭉치가 몇백 스텝 만에 단어를 만들기 시작하는 순간을 직접 목격합니다

언어 모델의 정체는 생각보다 단순합니다. "지금까지의 글을 보고, 다음에 올 글자 하나의 확률을 계산하는 함수"입니다. 이 실습에서는 몇 KB짜리 작은 말뭉치로 문자 단위 RNN을 브라우저에서 처음부터 학습시킵니다. 학습 초반의 완전한 무작위 출력이 철자 패턴을 거쳐 단어 꼴을 갖춰 가는 과정을 중간 샘플로 계속 확인할 수 있습니다. ChatGPT는 이보다 수십억 배 크고 구조도 다르지만, "다음 조각을 확률로 예측한다"는 뿌리는 이 작은 모델과 같습니다.
이 페이지에서 배우고 나면
  • 언어 모델을 "다음 문자의 확률분포를 출력하는 함수"로 정의하고, 손실 곡선과 중간 샘플을 근거로 이 정의를 설명할 수 있습니다.
  • 온도 슬라이더를 조작하기 전에 출력이 어떻게 달라질지 예측하고, 실제 생성 결과로 그 예측을 검증할 수 있습니다.
  • "AI가 언어를 이해해서 문장을 쓴다"는 통념에 대해, 학습 중간 샘플의 변화를 증거로 실제 일어나는 일(통계적 패턴 습득)과 구분해 설명할 수 있습니다.
예측 먼저 — 실험 전에 답을 정해 보세요
예측 → 실험 → 확인

정답을 몰라도 괜찮습니다 — 먼저 예측을 정해야 시뮬레이션 결과가 기억에 남습니다. 예측을 고른 뒤 아래 시뮬레이션으로 직접 확인하고, 그다음 결과를 열어 보세요.

1. 학습을 막 시작한 직후의 문자 단위 RNN이 생성하는 텍스트는 어떤 모습일까요?
2. 생성 온도(temperature)를 높이면 텍스트는 어떻게 될까요?
로그인하면 예측 기록이 계정에 저장됩니다

어느 기기에서든 이어서 학습하고, 오답 기반 복습 추천을 받을 수 있습니다.

카카오로 시작하기네이버로 시작하기구글로 시작하기
회원가입 절차 없음 — 닉네임만 저장하며, 이메일·연락처는 수집하지 않습니다.
1. 말뭉치(코퍼스) 선택
1,317자
문자 25종
무작위 예측 손실 = ln(25) ≈ 3.22
문자당 평균 등장 52.7회
이 실습을 위해 직접 작성한 사실 서술 문장들입니다 (저작권 문제 없음). 매 스텝은 "25지선다 다음 문자 맞히기"입니다 — 문자 종류가 많고 등장 횟수가 적을수록 같은 모델에게 더 어려운 과제가 됩니다.
the sun rises in the east and sets in the west. water is made of hydrogen and oxygen. the moon goes around the earth once a month. birds can fly and fish can swim in the sea. a triangle has three sides and three corners. the heart pumps blood around the body. plants need light and water to grow well
2. 학습 — 다음 문자 맞히기를 3,000번 연습

Elman RNN(tanh) · 은닉 64 · BPTT 25 · Adam(학습률 0.003) · 기울기 클리핑 ±5

3. 생성 실험 — 온도와 프롬프트
먼저 위에서 학습을 완료하면 활성화됩니다.
온도 T = 0.8
실측 요약 — 이 실습이 보여주는 것

문자 단위 Elman RNN(은닉 64)을 브라우저에서 3,000스텝 실제 학습(Adam 0.003, BPTT 25, 기울기 클리핑 ±5)시키며, 학습 전→300→750→1,500→3,000스텝의 생성 샘플 타임라인으로 무작위→철자→단어 꼴로 구조가 자라는 과정을 보는 실험입니다. 온도 슬라이더와 코퍼스 암기 구간 하이라이트, 다음 문자 top-5 확률 패널이 붙어 있습니다.

  • 코퍼스 실측: 영어 문장 모음은 1,317자·문자 25종(무작위 예측 손실 ln25 = 3.22), 한국 속담 모음은 701자·문자 213종(ln213 = 5.36) — 같은 은닉 64 모델인데 어휘 크기 때문에 파라미터가 7,385 vs 31,637개로 4.3배 차이 나고, 문자당 평균 등장은 52.7회 vs 3.3회로 한국어 쪽이 훨씬 어려운 과제다
  • 손실 곡선의 출발점이 무작위 기준선 ln(V)인 이유: 언어 모델 학습은 'V지선다 다음 문자 맞히기'의 평균 −log 확률을 낮추는 일이라, 아무것도 모르는 모델의 손실이 정확히 ln(V)다
  • 온도 T는 softmax(logit/T)로 추첨 분포만 다시 깎을 뿐 모델 지식은 그대로다 — 생성문에서 코퍼스에 8자 이상 그대로 존재하는 구간을 하이라이트해 '새 조합 vs 통째 암기' 비율을 실측하며, 손실이 낮아도 작은 코퍼스는 암기의 결과일 수 있다

바로잡는 오개념: "AI가 문장 전체를 계획해 놓고 쓴다"는 착각 — 모델에는 완성된 문장 계획이 없고 매 순간 다음 한 글자의 확률분포에서 추첨할 뿐이며, 철자·단어 같은 구조는 통계가 쌓이며 저절로 나타난다.

AI 튜터에게 물어보기
베타

— 정답 대신 힌트로 유도합니다. 지금 화면의 실험 상태를 알고 답해요.

예: “방금 결과가 이론과 다른데 왜죠?”, “이 값을 올렸는데 왜 반대로 변하죠?”

AI 답변은 부정확할 수 있습니다. 핵심 개념은 반드시 시뮬레이션 실측으로 확인하세요. 질문 0/5 · 하루 질문 한도가 있습니다
직접 해보기 — 실습 과제
  1. 탄생의 순간 관찰하기: 영어 말뭉치로 학습을 시작하고, 타임라인에서 학습 전 → 300 → 750 → 3,000스텝 샘플을 비교하세요. 완전 무작위 → 자주 쓰이는 글자 위주 → "the", "and" 같은 단어 꼴 순으로 변합니다. 철자법을 알려준 적이 없는데도 규칙처럼 보이는 것이 통계가 쌓이며 저절로 나타납니다 — "AI는 문법 규칙을 먼저 배운 뒤 쓴다"는 통념과 반대 순서입니다.
  2. 온도 다이얼의 정체: 학습 완료 후 온도를 0.2 → 1.0 → 2.0으로 바꾸며 같은 프롬프트로 각각 생성해 보세요. 바꾸기 전에 결과를 먼저 예측해 적어두면 더 좋습니다. 낮은 온도는 안전하지만 같은 문구를 반복하기 쉽고, 높은 온도는 철자 자체가 무너집니다. 온도는 "창의성"이 아니라 확률분포의 뾰족함을 조절하는 다이얼이며, 모델의 지식은 한 글자도 변하지 않습니다 (top-5 확률 막대가 뾰족해지고 평평해지는 것을 확인하세요).
  3. 문자 25종 vs 213종 — 난이도의 정체: 영어와 한국 속담을 각각 학습시키고 손실 곡선 두 개를 비교하세요. 시작점부터 다릅니다 — 무작위 예측의 손실이 ln(문자 종수)이기 때문입니다(차트의 점선). 난이도를 결정한 것은 언어의 우열이 아니라 선택지 수와 문자당 학습 기회입니다. 대형 모델의 한국어 성능 격차도 주로 데이터·토크나이저 문제로 논의됩니다.
  4. 암기인가, 일반화인가: 한국 속담 모델에서 "가는 말이"를 프롬프트로 생성해 보세요. 생성 결과에서 노란 강조(코퍼스에 8자 이상 그대로 존재)가 얼마나 되는지 보세요. 작은 말뭉치에서 손실이 아주 낮아진 모델은 사실상 암기 상태입니다 — 손실이 낮다고 항상 "더 잘 배운" 것이 아닙니다. 영어 모델과 강조 비율을 비교해 보세요.
  5. 미리 써 둔 문장은 없다: top-5 확률 패널을 보면서 같은 프롬프트로 생성을 여러 번 반복하세요. 매 글자마다 확률 추첨이 새로 일어나 중간부터 다른 길로 갈라집니다. 모델에게는 완성된 문장 계획이 없습니다 — ChatGPT의 답이 타자 치듯 흘러나오는 것은 연출이 아니라 실제 작동 방식(한 번에 한 토큰)입니다.
개념 정리
온도 샘플링

p_i = exp(z_i / T) / Σ_j exp(z_j / T)

T→0이면 가장 확률 높은 문자만 고르는 것(argmax)에 수렴하고, T=1이면 모델이 학습한 분포 그대로이며, T가 커질수록 균등분포에 가까워집니다. "높은 온도의 오류"란 모델이 낮은 확률을 준 문자가 더 자주 뽑힌다는 뜻입니다 — 모델 자체는 그대로이고 뽑는 방식만 바뀝니다. 아주 낮은 온도에서는 반복 루프에 빠지기 쉬워 "보수적 = 항상 좋음"도 아닙니다.

손실 = 놀라움의 크기

문자당 손실(교차 엔트로피)은 "정답 글자에 준 확률의 −log"입니다. 무작위로 찍으면 ln(문자 종수)이고, 정답에 확률 1을 주면 0입니다. 다만 작은 말뭉치에서 손실이 0에 가까워지는 것은 암기(과적합)의 신호일 수 있습니다 — 위 실습 과제 4에서 직접 확인했듯이, 낮은 손실이 곧 좋은 일반화는 아닙니다.

심화: 한글과 문자 단위 모델링

한글은 완성형 음절이 이론상 11,172개 가능하며, 이 실습의 속담 말뭉치에는 그중 213종이 등장합니다. 실제 한국어 문자 모델링에서는 음절을 자모(초성·중성·종성)로 분해해 기호 수를 수십 개 수준으로 줄이는 기법이 쓰입니다 — 같은 데이터로 선택지 수를 줄이면 학습이 쉬워지는 원리를 이 실습의 과제 3에서 이미 확인한 셈입니다. 현대 LLM들은 문자 대신 서브워드 토큰(BPE 등)을 사용해 이 균형을 잡습니다.

다음: RNN의 약점이 어텐션을 낳다

RNN은 문장을 한 줄로 읽으며 앞부분을 조금씩 잊습니다. 생성에서는 애교지만 번역에서는 치명적입니다 — 한국어 문장 끝의 동사를 잊으면 영어 문장을 시작조차 할 수 없으니까요. 다음 실습에서 모델이 이 문제를 "어텐션"으로 어떻게 푸는지 직접 확인하세요.

더 깊이 학습하기
  • Karpathy (2015): "The Unreasonable Effectiveness of Recurrent Neural Networks" — 문자 단위 RNN 텍스트 생성을 대중화한 블로그와 min-char-rnn 코드. 이 실습의 원형입니다.
  • Elman (1990), Cognitive Science: "Finding Structure in Time" — 이 실습이 쓰는 단순 순환 구조의 원류
  • Bengio, Ducharme, Vincent & Jauvin (2003), JMLR: "A Neural Probabilistic Language Model" — 신경망 언어 모델의 고전
  • Hochreiter & Schmidhuber (1997), Neural Computation: "Long Short-Term Memory" — 긴 의존성을 위한 게이트 구조 (이 실습의 다음 단계)