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는 그 평가를 사용해 카드당 두 개의 숫자를 갱신합니다.

  1. 간격(I) — 다음 복습까지의 일수
  2. 용이도 계수(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 공식은 각 평가에서 친숙한 숫자로 정리됩니다.

평가qEF 변화
Again0−0.80
Hard3−0.14
Good40.00
Easy5+0.10

EF는 최소 1.3으로 고정됩니다 — 잊어버림이 아무리 많아도 카드가 그보다 지수적으로 더 느리게 커지도록 두지 않습니다.

실제 예시

"간격 효과란 무엇인가?"라는 새 카드:

복습평가q이후 reps이후 EF이후 I다음 복습
1Good412.501일내일
2Good422.506일+6 d
3Easy532.6016일+16 d
4Hard342.4639일+39 d
5Again001.661일내일 (잊어버림)
6Good411.661일+1 d
7Good421.666일+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는 바닥이지 천장이 아닙니다. 우리는 세 가지 실용적인 조정을 합니다.

  1. Hard 평가 시 소프트 잊어버림. Hard를 세 번 연속 주면 다음 간격을 I_prev로 제한합니다 — 그래서 계속 씨름하게 되는 카드는 Good으로 바뀔 때까지 더 늘어나지 않습니다. 순수 SM-2라면 EF로 계속 곱해 카드를 점점 덜 노출시킬 것입니다.
  2. 거머리(leech) 탐지. 카드가 총 8회 잊어버리면 거머리로 태그하여 대시보드에 띄워 다시 작성할 수 있게 합니다. 나쁜 카드는 알고리즘 문제가 아니라 워크플로 문제입니다.
  3. 생성 시각으로부터의 결정론적 시딩. AI가 200장짜리 덱을 만들어 낼 때, 우리는 그것을 1일 차에 한꺼번에 쏟지 않습니다 — 카드 ID의 결정론적 해시를 사용해 초기 I = 1 복습들을 다음 5일에 걸쳐 분산시킵니다. 이로써 일일 복습 대기열이 평탄하게 유지됩니다.

그 외 모든 것 — EF 공식, 1/6일 램프, 1.3 바닥값, 잊어버림 의미 — 은 정확히 1987년 논문 그대로입니다.

왜 FSRS는 아닌가요?

FSRS는 복습 이력으로부터 사용자별 유지 곡선을 학습하는 더 최신의 스케줄러입니다. 복습이 ~1000회 쌓이고 나면 SM-2보다 측정 가능하게 더 낫습니다. 우리는 이를 선택형(opt-in) 스케줄러로 작업 중입니다 — 출시 소식은 업데이트에서 추적하세요.

더 읽을거리