Anki FSRS 알고리즘 적용하는 방법

Anki FSRS 알고리즘 적용하는 방법

안키를 몇 달 쓰다 보면 이상한 순간이 옵니다. 분명히 확실하게 외운 단어인데 사흘 뒤에 또 나오고, 반대로 매번 헷갈리던 카드는 3주 뒤에나 다시 등장합니다. 저는 일본어 덱을 돌리면서 이게 제가 카드를 잘못 만들어서 생긴 문제라고 오래 생각했습니다. 카드를 쪼개보고, 예문을 바꿔보고, 덱을 다시 만들기도 했습니다.

원인은 카드가 아니라 복습 날짜를 정하는 계산식 쪽이었습니다. 안키에는 이 계산식이 두 개 들어 있고, 기본값은 아직 오래된 쪽입니다.

지금 돌아가는 건 40년 가까이 된 방식입니다

안키의 기본 스케줄러는 SM-2의 변형입니다. SuperMemo라는 프로그램에서 1987년에 발표된 알고리즘이니 40년 가까이 된 설계입니다. 개인 컴퓨터에 메모리가 몇백 KB 있던 시절에 나온 물건이라, 그때로서는 이 정도가 현실적인 최선이었습니다.

SM-2는 카드마다 이지 팩터라는 숫자 하나를 들고 다닙니다. 맞히면 지금 간격에 그 숫자를 곱해서 다음 날짜를 잡고, 틀리면 간격을 리셋하고 팩터를 깎습니다. 곱셈 한 번이 전부입니다.

문제는 이 방식이 내가 언제 잊어버리는지를 아예 추정하지 않는다는 데 있습니다. 정해진 규칙대로 곱할 뿐입니다. 그래서 자주 틀리는 카드는 팩터가 바닥까지 깎여 매일 올라오고, 쉬운 카드는 필요 이상으로 자주 나옵니다. 하루 복습량이 이유 없이 불어나는 느낌의 상당 부분이 여기서 옵니다.

FSRS는 무엇이 다른가

FSRS(Free Spaced Repetition Scheduler)는 최근에 나온 스케줄러이고, 지금은 안키 자체에 들어 있습니다. 애드온을 따로 깔 필요가 없습니다.

차이를 한 줄로 줄이면 이렇습니다. SM-2는 규칙이고, FSRS는 내 기록으로 만든 모델입니다.

FSRS는 카드 하나하나에 대해 난이도, 기억이 얼마나 오래 버티는지, 지금 떠올릴 확률이 얼마인지를 계산합니다. 그리고 "이 카드를 오늘 보여주면 기억하고 있을 확률이 몇 퍼센트인가"를 기준으로 날짜를 잡습니다. 기본 목표는 90%입니다. 복습일에 열 장 중 아홉 장은 맞히도록 간격을 설계하는 셈입니다.

이 계산에 쓰이는 숫자들은 남의 평균이 아니라 내가 그동안 눌러온 답변 기록에서 뽑아냅니다. 같은 카드라도 사람마다 다른 날짜가 나옵니다.

적용하는 방법 — 실제로는 3분입니다

덱 이름 옆 톱니바퀴를 눌러 옵션으로 들어간 뒤 FSRS 스위치를 켜면 됩니다. 목표 기억률은 일단 기본값 90% 그대로 두세요.

여기서 한 가지 주의할 점이 있습니다. 이 설정은 덱이 아니라 프리셋 단위로 적용됩니다. 여러 덱이 같은 프리셋을 쓰고 있다면 한 번에 다 바뀌고, 프리셋이 따로면 덱마다 켜줘야 합니다.

스위치를 켠 뒤 복습 기록이 어느 정도 쌓이면 최적화 버튼을 눌러줍니다. 그다음 답변부터 FSRS가 계산한 간격으로 넘어갑니다. 이미 오늘 대기 중인 카드가 즉시 사라지거나 재배치되지는 않으니 놀라지 않으셔도 됩니다.

"어느 정도"가 얼마인지 궁금하실 텐데, 기록이 적으면 최적화를 눌러도 기본값과 별 차이가 없습니다. 수백 번쯤 복습이 쌓인 뒤에 한 번 눌러주면 체감이 확실히 달라집니다. 그리고 한 번 하고 끝내는 게 아니라 한 달에 한 번 정도, 또는 누적 복습 수가 두 배가 될 때마다 다시 눌러주면 충분합니다.

최적화 · 파라미터 · 시뮬레이터

화면에 낯선 말이 세 개 보이는데, 하는 일은 단순합니다.

최적화는 내 복습 기록 전체를 훑어서 내 망각 곡선을 추정하는 계산입니다. 버튼을 누르는 순간 학습이 한 번 돌아간다고 보면 됩니다.

파라미터는 그 추정 결과를 숫자 배열로 적어둔 것입니다. 최적화의 산출물이자 실제 날짜 계산에 들어가는 입력값입니다. 여기서 중요한 주의사항이 하나 있습니다. 남의 파라미터를 복사해 붙여넣거나 손으로 고치지 마세요. 이 숫자는 다른 사람의 기억이 아니라 내 기억을 적어둔 값이라, 남의 것을 가져오면 의미가 없습니다.

시뮬레이터는 지금 설정으로 계속 갔을 때 앞으로 하루에 몇 장, 몇 분이 나올지 미리 그려보는 기능입니다. 목표 기억률을 올릴지 말지 고민될 때 여기서 먼저 확인하면 됩니다. 기억률을 90%에서 95%로 올리면 복습량이 눈에 띄게 늘고, 그 위로는 급격히 늘어납니다. 숫자만 보고 올렸다가 하루 복습량에 놀라는 경우가 많으니 시뮬레이터로 먼저 보시는 편이 안전합니다.

가장 중요한 주의사항 — 버튼은 1과 3만

기존 방식에 익숙하면 1(다시), 2(어려움), 3(좋음), 4(쉬움)을 골고루 씁니다. 그런데 FSRS에서는 사실상 1과 3만 쓰는 쪽이 더 정확합니다.

이유는 두 가지입니다.

첫째, FSRS는 2번(어려움)을 "성공했지만 힘들었다"로 해석합니다. 못 떠올렸는데 "완전히 모르진 않았으니까" 하는 마음으로 2를 누르면, FSRS는 그걸 성공으로 집계합니다. 이런 기록이 쌓이면 간격이 실제 기억보다 길어집니다. 못 떠올렸으면 무조건 1입니다.

둘째, 대부분의 사람은 2와 4의 기준을 일관되게 유지하지 못합니다. 같은 카드라도 컨디션이 좋은 날은 4, 피곤한 날은 2를 누르게 됩니다. 기준이 흔들리는 평가는 모델 입장에서 그냥 잡음입니다. 그래서 모른다와 안다로 단순하게 나누는 편이 결과적으로 더 정확한 파라미터를 만듭니다.

정리하면 이렇습니다. 못 떠올렸으면 1, 떠올렸으면 3. 보자마자 즉답이고 한동안 안 틀릴 게 확실할 때만 가끔 4. 2는 거의 쓰지 않습니다.

한 가지 덧붙이면, 버튼 습관을 바꾼 직후에는 예전 기록과 기준이 섞여 있습니다. 바꾸고 나서 몇백 개쯤 더 복습한 뒤에 최적화를 한 번 더 돌려주세요.

판단이 흐릿하면 알고리즘도 흐려집니다

FSRS는 언제 보여줄지를 정합니다. 카드가 화면에 떴을 때 0.5초 안에 "안다"와 "모른다"가 갈리는지는 카드 서식이 정합니다.

글자가 작아서 눈을 찌푸리거나, 야간 모드에서 글자색이 배경에 묻히거나, 앞면에 정보가 너무 많아 어디를 봐야 할지 헷갈리면 판단이 늦어집니다. 그렇게 애매하게 누른 1과 3이 그대로 학습 데이터가 됩니다. 알고리즘을 최신으로 바꿔놓고 입력을 흐리게 넣는 셈입니다.

폰트 크기, 줄간격, 야간 모드 색상 정도만 정리해도 판단 속도는 눈에 띄게 달라집니다. 코드를 직접 만지지 않고 바꾸고 싶다면 ankieditor에서 미리보기를 보면서 조정한 뒤 코드를 복사해 붙여넣으면 됩니다. Anki 야간 모드(다크 모드)에서 보이는 색 지정하는 법Anki 줄간격 조절하는 방법도 함께 보세요.

오늘 할 일 정리

  1. 덱 옵션에서 FSRS 스위치를 켠다 — 덱이 아니라 프리셋 단위인 것에 주의
  2. 목표 기억률 90%는 그대로 두고, 복습 기록이 쌓이면 최적화를 누른다
  3. 오늘부터 버튼은 1과 3만 쓴다
  4. 한 달 뒤 최적화를 한 번 더 누른다