SmartRecall에서 SM-2가 작동하는 방식
SM-2 간격 반복 알고리즘의 실제 예시 — 초기 간격, 용이도 계수 갱신, 잊어버림(lapse), 그리고 SmartRecall이 이를 구현하는 방법.
4월 29, 2026
SmartRecall에서 SM-2가 작동하는 방식
SM-2는 피오트르 보즈니악이 1987년 SuperMemo 논문에서 발표한 간격 반복 알고리즘입니다. Anki와 Mnemosyne의 기반 알고리즘이기도 합니다. 이 페이지는 SmartRecall이 그것을 정확히 어떻게 구현하는지 — 모든 상수, 모든 전이 — 를 실제 예시와 함께 기록합니다.
60초 요약
매 복습이 끝난 뒤, 여러분은 회상이 어떻게 느껴졌는지 평가합니다.
- Again (0) — 실패, 회상하지 못함
- Hard (3) — 회상했지만 상당한 노력이 필요함
- Good (4) — 보통의 노력으로 회상함
- Easy (5) — 손쉬운 회상
SM-2는 그 평가를 사용해 카드당 두 개의 숫자를 갱신합니다.
- 간격(
I) — 다음 복습까지의 일수 - 용이도 계수(
EF) — 간격이 얼마나 빠르게 커지는지를 제어하는 곱셈 계수
평가가 높을수록 → EF가 커지고 → 간격이 빠르게 늘어납니다. 평가가 낮을수록 → EF가 작아지고 → 간격이 촘촘해집니다. 실패는 간격을 재설정하지만 EF는 살짝 낮출 뿐입니다.
SmartRecall이 사용하는 정확한 규칙
Initial values for a new card:
I = 0 (will be set on first review)
EF = 2.5
reps = 0 (consecutive successful reviews)
On review with quality q (0–5):
if q < 3: // lapse
reps = 0
I = 1 // back to 1 day
// EF still updates below
else: // success
if reps == 0: I = 1
elif reps == 1: I = 6
else: I = round(I_prev * EF)
reps = reps + 1
EF = max(1.3, EF + (0.1 - (5 - q) * (0.08 + (5 - q) * 0.02)))EF 공식은 각 평가에서 친숙한 숫자로 정리됩니다.
| 평가 | q | EF 변화 |
|---|---|---|
| Again | 0 | −0.80 |
| Hard | 3 | −0.14 |
| Good | 4 | 0.00 |
| Easy | 5 | +0.10 |
EF는 최소 1.3으로 고정됩니다 — 잊어버림이 아무리 많아도 카드가 그보다 지수적으로 더 느리게 커지도록 두지 않습니다.
실제 예시
"간격 효과란 무엇인가?"라는 새 카드:
| 복습 | 평가 | q | 이후 reps | 이후 EF | 이후 I | 다음 복습 |
|---|---|---|---|---|---|---|
| 1 | Good | 4 | 1 | 2.50 | 1일 | 내일 |
| 2 | Good | 4 | 2 | 2.50 | 6일 | +6 d |
| 3 | Easy | 5 | 3 | 2.60 | 16일 | +16 d |
| 4 | Hard | 3 | 4 | 2.46 | 39일 | +39 d |
| 5 | Again | 0 | 0 | 1.66 | 1일 | 내일 (잊어버림) |
| 6 | Good | 4 | 1 | 1.66 | 1일 | +1 d |
| 7 | Good | 4 | 2 | 1.66 | 6일 | +6 d |
몇 가지 주목할 점:
- 처음 두 간격(1일 → 6일)은 곱셈이 아니라 고정입니다. SM-2는 갓 만든 카드가 높은
EF때문에 곧바로 30일까지 날아가 버리지 않도록 이 값을 하드코딩합니다. - 복습 4 이후 간격은
round(16 * EF) = round(16 * 2.46) = 39입니다. - 복습 5는 잊어버림입니다 —
reps가 0으로 재설정되고I가 1로 재설정되지만,EF는 0.80만 떨어집니다(2.5로 되돌아가지 않음). 카드는 "지웠다"가 아니라 "상처 입은" 상태입니다. - 잊어버림 이후 일정은 1 → 6 램프를 반복하지 않습니다. 복습 6이 성공이었기 때문에 복습 6 이후에는
reps = 1에서 이어집니다.
SmartRecall이 바꾸는 것
SM-2는 바닥이지 천장이 아닙니다. 우리는 세 가지 실용적인 조정을 합니다.
- Hard 평가 시 소프트 잊어버림. Hard를 세 번 연속 주면 다음 간격을
I_prev로 제한합니다 — 그래서 계속 씨름하게 되는 카드는 Good으로 바뀔 때까지 더 늘어나지 않습니다. 순수 SM-2라면EF로 계속 곱해 카드를 점점 덜 노출시킬 것입니다. - 거머리(leech) 탐지. 카드가 총 8회 잊어버리면 거머리로 태그하여 대시보드에 띄워 다시 작성할 수 있게 합니다. 나쁜 카드는 알고리즘 문제가 아니라 워크플로 문제입니다.
- 생성 시각으로부터의 결정론적 시딩. AI가 200장짜리 덱을 만들어 낼 때, 우리는 그것을 1일 차에 한꺼번에 쏟지 않습니다 — 카드 ID의 결정론적 해시를 사용해 초기
I = 1복습들을 다음 5일에 걸쳐 분산시킵니다. 이로써 일일 복습 대기열이 평탄하게 유지됩니다.
그 외 모든 것 — EF 공식, 1/6일 램프, 1.3 바닥값, 잊어버림 의미 — 은 정확히 1987년 논문 그대로입니다.
왜 FSRS는 아닌가요?
FSRS는 복습 이력으로부터 사용자별 유지 곡선을 학습하는 더 최신의 스케줄러입니다. 복습이 ~1000회 쌓이고 나면 SM-2보다 측정 가능하게 더 낫습니다. 우리는 이를 선택형(opt-in) 스케줄러로 작업 중입니다 — 출시 소식은 업데이트에서 추적하세요.
더 읽을거리
- Wozniak, P. (1990). Optimization of learning. 원본 SM-2 명세.
- Cepeda, N. J., et al. (2006). Distributed practice in verbal recall tasks: A review and quantitative synthesis. Psychological Bulletin. 317개 실험에 걸친 간격 효과 메타분석.
- Karpicke, J. D., & Roediger, H. L. (2008). The critical importance of retrieval for learning. Science. SM-2가 암묵적으로 의존하는 시험 효과 논문.
