Что такое интервальные повторения

Освоение любого предмета построено на фундаменте знания: фактов, эвристик или тактик решения задач. Если предметная область — часть вашей повседневной работы, то вы, вероятно, осваиваете её многократно повторяющимся пересечением с этими знаниями. Но если вы учите что-то в свободное время, например, как я, изучая японский, то добиться того же уровня практики сложно.

То же самое относится и к предметам в школе или вузе: нескольких часов в неделю в классе или домашний заданий редко хватает для наработки крепкой базы знаний, особенно в таких предметах с большим объёмом фактов, как история или медицина. Под этим углом можно рассматривать даже ту часть своей жизни, которую мы не считаем связанной с обучением: не казались ли все эти подкасты и статьи с Hacker News полезнее, если бы мы могли вечно помнить полученную из них информацию?

Системы интервального повторения (spaced repetition) — один из самых проработанных решений этой проблемы. Это компьютерные программы, которые, по сути, показывают флеш-карточки с подсказками, на основе которых нужно вспомнить информацию, написанную на обратной стороне карточки. Вот пример из моей личной коллекции:

Своё название эти программы получили благодаря тому, что разбивают показ одной той же карточки на интервалы в зависимости от того, насколько высоко вы сами оцените свой ответ. Увеличение интервалов после правильных ответов предотвращает накопление ежедневных просмотров карточек. Благодаря этому вы, например, можете изучать по десять новых слов незнакомого вам языка (3650 в год!), тратя на это всего по двадцать минут.

(Если я вас ещё не убедил, то при наличии свободного времени рекомендую прочитать пост Майкла Нильсена Augmenting Long-term Memory.)

Совершенствование алгоритма составления повторов

Всё изложенное выше хорошо известно. Меньше известно то, что оставшаяся незамеченной революция за последнюю пару лет существенно улучшила системы интервального повторения, благодаря чему они стали намного эффективнее и при этом менее раздражающими. Их волшебным ингредиентом стал новый алгоритм планирования FSRS, разработанный Джарретом Йе.

Чтобы понять, как усовершенствовались эти системы, давайте сначала разберёмся, как они работали раньше. Грубо говоря, пользователю демонстрировалась карточка спустя день после её создания. Если он отвечал правильно, то её повторно показывали через 6 дней. Если он отвечал правильно во второй раз, то следующий показ планировался ещё спустя 15 дней. При трёхкратном правильном ответе она отображалась через 37,5 дня. В общем случае, после 6-дневного интервала происходило экспоненциальное снижение частоты повторов, по умолчанию равное 6 × 2,5правильные ответы + 1. Как мы видим, если отвечать на карточку правильно, это может привести к накоплению большой базы знаний даже при малом количестве ежедневных просмотров!

Но что, если пользователь отвечает неправильно? Тогда происходит сброс до первого дня! Пользователь увидит карточку на следующий день, потом через 6 дней после этого, и так далее. (Однако неправильный ответ на карточку также изменяет её «коэффициент ослабления», то есть основание степени, по умолчанию равное 2,5.) Это может быть достаточно раздражающим процессом, потому что карточка будет попеременно скакать между длинными и короткими интервалами.

Если сделать шаг назад, то можно осознать, что эта система планирования (названная «SuperMemo-2») достаточно произвольная. Откуда взялось правило 1, 6, 2,5правильные ответы + 1 и сброса к исходному при неправильном ответе? Оказывается, система была разработана студентом колледжа в 1987 году на основании его собственного опыта. Разве нельзя придумать что-то более совершенное?

Вернёмся к теории, лежащей в основе интервального повторения: мы стараемся победить «кривую забывания», проверяя себя на материале «непосредственно перед тем, как почти забыли его». Крайне маловероятно. что кривая забывания для всех возможных видов знаний одинакова: вряд ли я буду близок к забыванию спустя 1 день, потом ещё спустя 6 дней, затем 15 и так далее при изучении любой информации. Разумеется, мы можем внести какие-то изменения в коэффициент ослабления, но всё равно крайне маловероятно. что идеальный график повторения — это экспоненциальная кривая, даже если основание будет немного меняться в зависимости от обратной связи.

An illustration of the forgetting curve as a graph, with retention on the y-axis and time on the x-axis. You learn something on day 0, and your retention decays over time according to the forgetting curve, but reviewing it periodically spikes the retention back upward.
Одна из множества иллюстраций кривой забывания. Конкретно эта взята из лекции на osmosis.org.

Главное открытие алгоритма FSRS — конкретизация цели (проверка «непосредственно перед тем, как мы забудем») в виде задачи прогнозирования: когда вероятность вспоминания карточки падает до 90%? А с такими задачами прогнозирования превосходно справляются системы машинного обучения.

Любопытные факты о работе FSRS

Изложенное выше открытие о возможности применения машинного обучения для поиска подходящих интервалов вместо произвольной формулы — это фундамент FSRS. На самом деле, чтобы пользоваться преимуществами алгоритма, нам не нужно знать, как это работает. Но мне кажется, эти подробности очень любопытны, поэтому приведу некоторые из них.

FSRS называется «трёхкомпонентной» моделью, потому что она использует машинное обучение для аппроксимации кривых трёх основных функций:

  • Сложности — присваиваемого каждой карточке числа от 1 до 10, приблизительно отражающего её сложность

  • Стабильности — длительности падения со 100-процентной вероятности вспоминания карточки до 90-процентной

  • Извлекаемости — вероятности вспомнить карточку спустя определённое количество дней

Для каждой карточки алгоритм вычисляет по разным формулам значения функций. Например, кривая извлекаемости со временем преобразовалась из экспоненциальной с постоянным основанием в степенную с постоянной степенью, чтобы лучше соответствовать наблюдаемым данным.

Аппроксимация кривых выполняется на основе 21 параметра. Изначально эти параметры имеют значения, полученных для аппроксимации кривых из десятков тысяч проверок, ранее проведённых пользователями. Но наилучшие результаты обнаруживаются, если пропустить через оптимизатор FSRS собственные проверки пользователя; он изменит параметры для аппроксимации личных функций сложности/стабильности/извлекаемости. (На этом этапе подгонки параметров и применяется машинное обучение: значения параметров находятся при помощи методик, о которых вы могли слышать, например, при помощи метода максимального правдоподобия и стохастического градиентного спуска.)

Хотя базовый алгоритм FSRS занимается прогнозированием трёх функций, пользователей должен волновать лишь график повторения карточек. Для этого FSRS позволяет выбрать показатель удержания в памяти, по умолчанию равный 90%, и использовать эти три функции для вычисления следующего показа карточки после того, как пользователь проверил себя и оценил карточку.

Но при желании можно и изменить требуемый показатель удержания. А поскольку у FSRS есть подробные модели удержания информации в памяти, благодаря своим функциям сложности/стабильности/извлекаемости он может симулировать нагрузку пользователя для любого указанного показателя. Мейнтейнеры проекта рекомендуют устанавливать показатель удержания так, чтобы минимизировать соотношение времени обучения к знаниям.

Это может очень существенно влиять на обучение: ниже показаны две симуляции моей личной словарной колоды японских слов. Оранжевая линия — это используемый по умолчанию показатель удержания 90%, а синяя — показатель 70%, рекомендованный мне FSRS для минимизации соотношения усилий к полученным знаниям. Симуляция выполнялась в течение 365 дней с добавлением по 10 новых карточек в день, если у меня было меньше 200 проверок. Как мы видим, показатель 70% существенно снизил количество проверок в день и потраченное время, в то же время существенно повысив количество запомненных карточек (потому что он не упёрся в ограничение на 200 карточек, после которого новые карточки не добавляются).

A graph with the orange line (90% target retention) quickly reaching 200, occasionally dropping below it for a day or two but always coming back, whereas the blue line (70% target retention) slowly trends up from around 60 at the start to 130 by the end.
Проверок в день
A graph with the orange line (90% target retention) oscillating around 24 minutes, whereas the blue line (70% target retention) slowly trends up from around 13 minutes at the start to 23 minutes by the end.
Время, потраченное за день
A graph with the orange line (90% target retention) growing in a logarithmic fashion from 1639 cards memorized to 2602 cards memorized, whereas the blue line (70% target retention) trends more linearly from 1639 to 4476.
Количество запомненных карточек

(Учтите, что показатель 90%, используемый при вычислении функции стабильности, не эквивалентен показателю удержания. Он просто используется для прогнозирования формы кривой забывания. В исходной научной статье использовалась концепция «период полураспада», то есть время, за которое карточка достигает вероятности вспоминания 50%, потому что она более академична.)

FSRS на практике

Если вы хотите использовать FSRS вместо других алгоритмов, которые он обогнал по показателям, то нужно выбрать поддерживающее его ПО. В самом популярном ПО для интервального повторения Anki алгоритм FSRS появился с версии 23.10, выпущенной в ноябре 2023 года. К сожалению, он по-прежнему не используется по умолчанию, поэтому его необходимо включать и оптимизировать его параметры для каждой созданной вами колоды карточек.

Кстати, довольно любопытна история попадания FSRS в Anki. Создатель FSRS, в то время бывший старшекурсником, написал о своём новом алгоритме пост в сабреддите Anki. Один из комментирующих призвал его реализовать алгоритм в ПО, а не просто публиковать статью. Сначала он реализовал его в виде аддона Anki, но рост популярности алгоритма убедил разработчиков Anki встроить его в ядро кода!

Субъективно FSRS кажется мне огромным апгрейдом по качеству проверок в сравнении с предыдущим алгоритмом на основе SuperMemo-2 в Anki. Нагрузка при обучении гораздо меньше. Чувство отчаяния при неправильном ответе на карточку существенно снижается, потому что это не сбрасывает мой прогресс до первого дня. Благодаря более качественному статистическому моделированию FSRS я с гораздо большей уверенностью могу считать, что карточки, которые Anki считает изученными, действительно останутся в моём мозге.

Преимущества FSRS особенно очевидны при изучении японского, если сравнить их с «алгоритмами», используемыми двумя популярными сервисами, работающими по системе подписки. WaniKani — сайт изучения кандзи/словаря и Bunpro — сайт изучения грамматики применяют чрезвычайно неудобные алгоритмы, они даже хуже, чем правило 1, 6, 2,5правильные ответы + 1 из SuperMemo-2. В них выбраны другие внутренние паттерны, похоже не основанные ни на чём:

  • WaniKani: 4 часа, 8 часов, 1 день, 2 дней, 7 дней, 14 дней, 1 месяц, 4 месяца, больше никогда

  • Bunpro: 4 часа, 8 часов, 1 день, 2 дня, 4 дня, 8 дней, 2 недели, 1 месяц, 2 месяца, 4 месяца, 6 месяцев, больше никогда

Эти интервалы не меняются ни для пользователей, ни для карточек: у них даже нет настраиваемого коэффициента сложности наподобие основания 2,5. А мысль о том, что пользователь в буквальном смысле не увидит больше карточку после последнего интервала, пугает, потому что он постоянно будет терять знания.

Но это даже не самое плохое: хуже всего в алгоритмах этих сайтов то, что ошибка при проверке карточки опускает её на один или два этапа на лесенке интервалов, а не выполняет сброс до первого интервала, как в SuperMemo-2, и не прогнозирует следующий наилучший интервал при помощи машинного обучения, как в FSRS. Это сильно мешает удержанию, впустую тратит кучу времени пользователя и в целом превращает посещение этих сайтов в ежедневный ритуал испытывания вины о забытом вместо радости от того, что ты запомнил. Я писал об этом на форумах Bunpro, когда из-за разочарования решил перейти на Anki.

Судя по моему опыту, Anki — лучший. Пользователи жалуются, что его UI создавался не дизайнерами, а программистами, и на то, что нужно находить или создавать собственные колоды, а не пользоваться готовыми. Эти претензии справедливы, но разработка Anki поддерживается людьми, которым действительно важна эффективность обучения. Для него часто выходят обновления, совершенствующие его в достижении этой цели. И он достаточно гибок для того, чтобы позволить вам двигаться по своему пути приобретения знаний на любом этапе. Если вы потратите время на его освоение, то заложите фундамент, который в буквальном смысле прослужит вам всю жизнь.

Дополнительные ресурсы

Если вам нужна дополнительная информация об этой сфере, то вот несколько ссылок:

  • Для понимания ценности интервального повторения в целом:

    • В Augmenting Long-term Memory рассказывается о том, как автор использует Anki, чтобы «пользоваться памятью» во всех сферах своей жизни.

    • В Spaced repetition memory system есть ссылки на множество размышлений и ресурсов по этой теме.

  • Другие истории об интервальном повторении

    • В Abridged history of spaced repetition представлено краткое описание эволюции алгоритмов интервального повторения; в основном это нужно для того, чтобы подчеркнуть огромную пропасть между SuperMemo-2 и FSRS.

    • How did I publish a paper in ACMKDD as an undergraduate? — это рассказ Джаретта о том, как его заинтересовала эта сфера и как он начал публиковаться.

    • The History of FSRS for Anki — это история Джаретта о том, как FSRS появился в Anki, и как его интеграция эволюционировала со временем.

  • Подробности о работе FSRS:

    • В Spaced repetition algorithm: a three-day journey from novice to expert ещё подробнее рассказывается о кривой забывания и о других моделях для создания хорошего алгоритма интервального повторения.

    • В алгоритме представлены все подробности алгоритма FSRS и его развития. (Лучше всего читать снизу вверх.)

    • Техническое описание FSRS более понятно излагает устройство алгоритма FSRS.

    • В механизме оптимизации объясняется процесс обучения параметров FSRS более подробно, чем просто «здесь используется машинное обучение».

    • В The optimal retention рассматривается баланс между приобретением знаний и нагрузкой.

    • В Clarifications about FSRS-5, short-term memory and learning steps подробно говорится о том, как FSRS можно использовать для кратковременной зубрёжки, несмотря на то, что его структура рассчитана на долгосрочную память.

    • A Stochastic Shortest Path Algorithm for Optimizing Spaced Repetition Scheduling — это исходная научная статья, с которой всё и началось. Хотя сам алгоритм после её выпуска дополнялся, в ней есть все плюсы академических статей, например, сравнение с предыдущими работами и красивые числа.

  • В open-spaced-repetition/awesome-fsrs есть список реализаций FSRS на множестве языков программирования, а также список использующего FSRS ПО для работы с флеш-карточками и ведения заметок.

  • В open-spaced-repetition/srs-benchmark приведены бенчмарки FSRS в сравнении со множеством систем, в том числе и SuperMemo-2, предыдущими версиями FSRS, алгоритмом Duolingo и другими. (Любопытно, что стабильно выигрывает у FSRS только нейросеть LSTM, созданная на основе алгоритма Reptile OpenAI. Интересно было бы узнать о нём побольше.)

Комментарии (16)


  1. PicaPica
    12.06.2025 06:23

    он может симулировать нагрузку >>> он может рассчитать (или оценить) нагрузку
    ниже показаны две симуляции >>> ниже показаны два расчёта
    Симуляция выполнялась в течение 365 дней >>> расчёт по модели выполнялся для 365 дней

    В русском языке симуляция -- это создание ложного впечатления, представления о чём-либо; притворство, а речь идёт о моделировании и расчёте с использованием математической модели

    На место "мейнтейнеров" хорошо ложится слово "разработчики" (ну или "специалисты, поддерживающие программный продукт").


    1. BadNickname
      12.06.2025 06:23

      Я не знаю что хуже - наличие на Хабре оголтелых поборников за чистоту русского языка - единственного из славянских языков, наверное, который от массовых заимствований добился того что родные способы словообразования в нём не звучат, то, что комментарии этих поборников тут заплюсованы, или то, что эти поборники предлагают заменить заимствованое слово "симуляция" на словосочетание с не менее заимствованым словом "модель".


      1. octoMax
        12.06.2025 06:23

         все зависит от того, какая оценка по русскому языку у того, кто не доволен такими комментариями и на сколько он или она может отличать "одевать" и "надевать" или "ложить" от "класть". Что касается предложенных правок, то они направленны на уточнение терминологии, неверное использование которой может ввести читателя в заблуждение. Нагрузка действительно "моделируется", а не "симулируется" (что сильно меняет смысл фразы). А "мейнтейнеров" - ну так такого слова нет в русском языке. Я не филолог и не знаю, где ставить ударение в слове "творог", но согласен, что более внимательное отношение к тексту на хабре не помешало бы 99% пишущих.


        1. BadNickname
          12.06.2025 06:23

          ну так такого слова нет в русском языке.

          Жопа есть, а слова нет? Мистика.

          Или у вас есть какое-то другое слово, кроме "мейнтейнеров" которое бы обозначало разработчика open-source продукта, выполняющего работу по поддержке основного репозитория, принятия политических решений и ревью и приёма пул-реквестов?

          Нагрузка действительно "моделируется", а не "симулируется" (что сильно меняет смысл фразы).

          Это вам в словаре Даля так написали? Потому что я в довольно большом объёме текстов видел именно симуляцию, например, распределения напряжений...


        1. Andy_U
          12.06.2025 06:23

          Нагрузка действительно "моделируется", а не "симулируется"

          Если в поиске Google набрать первым словом "modeling", то первой подсказкой будет "modeling and simulation". Хотя, это, может быть, конкретно мне предлагают, но сочетание очень часто употребимое. Всякие department/division так любят называют. Сам в таком работаю.


      1. ogukuu
        12.06.2025 06:23

        Это обычная школота)

        школьные знания (неполные, а других в школе и нет) + "Эффект Даннинга — Крюгера" = поборник чистоты русского языка


  1. anonymous
    12.06.2025 06:23


  1. DmitriiMikhailov
    12.06.2025 06:23

    После переезда в США я учил английский по самой нелогичной методике - нашел словарь A1-C2, читал по 500 слов за раз, а потом пытался их вспомнить при чтении и аудировании. В принципе это сработало, сейчас словарный запас у меня около 6000. Теперь практикую через самописное приложение. Без разницы как вы учите слова, главное долго и терпеливо долбить.


  1. anonymous
    12.06.2025 06:23


  1. radioxoma
    12.06.2025 06:23

    разработка Anki поддерживается людьми

    Мне казалось там один яблочник со всеми вытекающими.


    1. clackx
      12.06.2025 06:23

      Это во-первых коммент 14го года, а во-вторых про линукс-версию. Ну и к тому же на лоре, где комментаторы, скажем так, бывают довольно злы. А теперь давайте посмотрим количество контрибьюторов Анки на гитхабе https://github.com/ankitects/anki/graphs/contributors


      1. radioxoma
        12.06.2025 06:23

        Насколько я помню, dae единолично разрабатывает платную версию для iOS, тем и живёт. Версия для дексктопа opensource. Версию для Android делали другие люди.

        Коммент 14 года храню в памяти до сих пор. Появилась папка ~/Documents/Anki (ага, в русской локали), но аффтар решил, что пользователи линупса неопытные, не знают про dot files, а значит не смогут делать бекапы (серьёзно, так и написал в ответ на issue). И стандарт XDG нужно игнорировать. Какая забота, на фоне периодических удалений неактивных аккаунтов.


  1. Swillwo
    12.06.2025 06:23

    У меня никогда ничего, с помощью интервального повторения, не получалось запомнить - информация просто не откладывается в долгосрочную память, точнее откладывается, но словно как "для экзамена", т.е когда я использую приложение то все легко запоминается и вспоминается, но вне приложения все вылетает из головы, 90% информации не вспоминается.


    1. akod67
      12.06.2025 06:23

      Год мучал сына Анькой с карточками английского, пока не пришёл к тем же выводам. Просто голые слова без контекста - это ни о чём. Что-то он запомнил конечно, особенно если в игрушках мелькает, а вот редкие слова - забываются быстро. Возможно надо не слова, а фразы или предложения учить, но я пока перегорел.


      1. Swillwo
        12.06.2025 06:23

        Я пытался учить и голые слова, и в контексте, брал готовые колоды, и составлял их сам по книге которую читал, также пробовал добавлять аудио - ничего не помогает. Причем это касается не только языка, пробовал учить флаги и ещё какую-то подобную информацию - итог такой же как с языком. В общем интервальное повторение - способ, видимо, очень эффективный, но не для меня :D


    1. radioxoma
      12.06.2025 06:23

      А интервал для показа карточки "1.5 года" в приложении - не долгосрочная память? В настройках есть коэффициенты, позволяющие не так быстро растить интервал повторения. Мне пришлось делать несколько групп исходя из исходной сложности карточек (бессмысленности и новизны информации в них).