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

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

Anki 덱 옵션에 들어가면 FSRS라는 것이 보입니다. 이는 FSRS 알고리즘을 의미하며 복습 주기를 좀 더 효율적으로 만들어 줍니다. 현재는 이 알고리즘을 적용하기 위해선 직접 덱 옵션에서 설정을 켜고 최적화 버튼을 눌러주어야 합니다.

이번 팁에서는 FSRS가 무엇이고, 어떻게 설정하는지에 대해서 설명하겠습니다.

기존의 Anki 알고리즘 (SM-2)

Anki 프로그램에서 기본적으로 쓰이는 알고리즘은 SM-2의 변형입니다. SuperMemo라는 프로그램에서 1987년에 발표된 알고리즘으로 40년 가까이 된 오래된 알고리즘입니다. 사용자가 카드의 정답을 맞추거나 틀릴 때마다 일정한 규칙에 따라 숫자를 더하고 빼면서 복습 주기를 조정해줍니다.

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

문제는 이 방식이 내가 언제 잊어버리는지를 아예 추정하지 않는다는 데 있습니다. 정해진 규칙대로 곱할 뿐입니다. 그래서 자주 틀리는 카드는 매일 올라오고, 쉬운 카드는 필요 이상으로 자주 나옵니다. 이 알고리즘에 의하면 몇몇 카드는 효율적인 복습을 하기 어렵습니다.

FSRS란?

FSRS(Free Spaced Repetition Scheduler)는 비교적 최근에 나온 알고리즘이고, 예전엔 애드온을 깔거나 직접 코드를 복사하여 적용해야 했지만, 지금은 안키 자체에 들어 있습니다.

기존 알고리즘과의 명확한 차이점은 SM-2는 규칙이고, FSRS는 내 기록으로 만든 모델이라는 것입니다.

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

중요한 것은 이 계산에 쓰이는 숫자들이 모두의 평균이 아니라 내가 그동안 눌러온 답변 기록에서 뽑아낸다는 것입니다. 즉 같은 카드라도 사람마다 카드를 기억하는 수준이 다르기 때문에 사람마다 다른 숫자가 나타납니다.

FSRS 적용 방법

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

여기서 한 가지 주의할 점이 있습니다. 목표 기억률 위에 사전 설정과 현재 덱 탭이 있는데, 기본은 사전 설정 쪽입니다. 같은 사전 설정을 쓰는 덱이 여럿이면 한 번에 다 바뀌고, 사전 설정이 따로면 덱마다 켜줘야 합니다. 이 덱에만 다른 값을 주고 싶을 때 현재 덱 탭을 씁니다.

덱 옵션의 FSRS 항목 — FSRS 스위치, 사전 설정·현재 덱 탭, 목표 기억률 90%, FSRS 인자, 최적화 버튼

최적화 — 내 기록으로 맞추기

스위치를 켠 뒤 복습 기록이 어느 정도 쌓이면 최적화 버튼을 눌러줍니다. 이 최적화 버튼이라는 것이 개개인의 망각 곡선을 추정하는 단계입니다. 그러므로 어느 정도 복습 기록이 쌓여야 내가 얼마나 틀리는지 확인이 가능하고 최적화가 가능합니다. 누르고 나면 몇 번의 복습을 근거로 계산했는지가 버튼 아래에 뜨고, 기억력에 잘 맞춰졌는지 알려주는 안내창이 한 번 나타납니다.

이 버튼을 누른 다음 답변부터 FSRS가 계산한 간격으로 넘어갑니다. 이미 오늘 대기 중인 카드가 즉시 사라지거나 재배치되지는 않습니다.

보통 1,000개 카드를 학습한 후에 최적화 버튼을 누르는 것을 추천합니다. 기록이 적으면 최적화를 눌러도 기본값과 별 차이가 없습니다. 복습이 쌓인 뒤에 한 번 눌러주면 체감이 확실히 달라집니다. 그리고 한 번 하고 끝내는 게 아니라 한 달에 한 번 정도, 또는 누적 복습 수가 두 배가 될 때마다 다시 눌러주면 충분합니다.

최적화를 누른 뒤 — 버튼 아래에 사용된 복습 수가 뜨고 상태 확인 안내창이 나타난 화면

최적화 · FSRS 인자 · 시뮬레이터

추가적으로 FSRS에서 쓰이는 용어들을 설명드립니다.

최적화는 내 복습 기록 전체를 훑어서 내 망각 곡선을 추정하는 계산입니다. 버튼을 누르면 내가 지금까지 학습했던 기록들에 기반해서 망각 곡선을 추정합니다. 이 망각 곡선이 다음 카드를 언제 다시 보여줄지 판단하는 근거가 됩니다.

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

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

FSRS 적용 시 주의사항

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

이유는 두 가지입니다.

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

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

정리하면 이렇습니다. 못 맞췄으면 1, 맞췄으면 3. 보자마자 즉답이고 한동안 안 틀릴 게 확실할 때만 가끔 4를 누르고, 2는 거의 쓰지 않는 것을 추천합니다.

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

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

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

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

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