Не следуйте слепо кривой Эббингауза: ловушки алгоритмов обучения и альтернативы
На основе практического опыта анализируются три фатальных недостатка кривой забывания Эббингауза в реальных сценариях обучения, сравниваются алгоритмы Leitner, SM-2 и FSRS, предлагается структура принятия решений.
Почему я перестал слепо верить кривой Эббингауза
2 лет назад, когда я впервые создавал приложение для изучения слов, я без колебаний выбрал кривую забывания Эббингауза в качестве алгоритма повторения. Она есть в каждом учебнике, имеет четкую математическую формулу и выглядит наиболее «научной».
Через месяц после запуска удержание пользователей упало на 40%.
Виновата была не кривая, а моё неправильное применение. Оригинальные эксперименты Эббингауза использовали бессмысленные слоги, а я применял их к реальным словам — со смыслом, контекстом и корнями, которые запоминаются гораздо легче. Алгоритм продолжал напоминать о повторении по исходной кривой затухания, вызывая чрезмерное повторение и раздражение пользователей.
Три фатальных недостатка алгоритма Эббингауза
Недостаток 1: Фиксированные временные окна игнорируют индивидуальные различия
Кривая Эббингауза предполагает, что скорость забывания одинакова для всех людей и материалов. В реальности слово может быть новым для новичка и лишь подтверждением для продвинутого. Использование одних и тех же временных окон либо перегружает новичков, либо нагоняет скуку на продвинутых.
Пример сравнения:
| Тип пользователя | Рекомендуемые интервалы по Эббингаузу | Фактически необходимые интервалы |
|---|---|---|
| Новичок | 1д, 2д, 4д, 7д, 15д | 1д, 3д, 7д, 14д, 30д |
| Продвинутый | то же | 3д, 7д, 14д, 30д, 60д |
Фиксированные временные окна заставляют всех пользователей следовать одной и той же кривой забывания — неудовлетворительно для всех.
Недостаток 2: Отсутствие обработки «уже знаю»
Алгоритм Эббингауза чисто временной: напомнить в запланированное время. Он не учитывает, насколько хорошо пользователь знает материал.
Если пользователь правильно вспомнил элемент при первом повторении, SM-2 или Leitner удвоили бы интервал. Эббингауз — нет: он придерживается первоначального плана. Пользователя просят повторить то, что он уже знает, тратя время и терпение.
Недостаток 3: Отсутствие обратной связи по сложности
Реальные учебные материалы различаются по сложности. «Apple» и «ephemeral» — совершенно разные вещи. В формуле Эббингауза нет параметра сложности — все элементы обрабатываются одинаково.
Это означает, что пользователи тратят много времени на повторение простых слов, в то время как действительно сложные слова повторяются редко.
Альтернативы: Сравнение трёх основных алгоритмов
Система Leitner
Простейшая система интервальных повторений вручную. Пользователь готовит несколько коробок, каждая с разной частотой повторения. Правильные ответы перемещают карточку в коробку выше, неправильные — ниже.
Плюсы: Интуитивно понятно, не требует вычислений, подходит для бумажных карточек или простых приложений. Минусы: Фиксированное количество коробок, большие скачки интервалов, отсутствие индивидуальной адаптации.
SM-2 (SuperMemo 2)
Классический алгоритм Петра Возняка, вводящий оценку качества (0-5) для корректировки интервалов и сложности.
Плюсы: Адаптируется к индивидуальной успеваемости, интервалы экспоненциально растут при правильных ответах, проверен Anki и другими. Минусы: Субъективная оценка качества; разные пользователи оценивают по-разному; алгоритм чувствителен к колебаниям оценок.
**Пример псевдокода (TypeScript):**
```typescript
function calculateNextReview(
quality: number, // 0-5
repetitions: number,
previousInterval: number,
easinessFactor: number
) {
if (quality < 3) {
repetitions = 0;
return { interval: 1, ef: easinessFactor };
}
if (repetitions === 1) {
return { interval: 1, ef: easinessFactor };
} else if (repetitions === 2) {
return { interval: 6, ef: easinessFactor };
} else {
const interval = Math.round(previousInterval * easinessFactor);
return { interval, ef: easinessFactor };
}
}
### FSRS (Free Spaced Repetition Scheduler)
Более новый алгоритм, использующий модель машинного обучения для прогнозирования вероятности забывания на основе истории повторений пользователя, динамически корректируя интервалы.
**Плюсы:** Не требует оценки пользователем; автоматически изучает паттерны памяти; высокая точность.
**Минусы:** Сложная реализация; требует достаточного объёма исторических данных (обычно >100 повторений) для сходимости.
## Структура принятия решений при выборе алгоритма
Позже я построил простое дерево решений:
```text
1. **Нужно ли пользователю вручную отмечать уровень усвоения?**
- Да: Используйте Leitner (просто) или SM-2 (точно)
- Нет: Используйте FSRS (автоматически)
2. **Достаточен ли объём данных?**
- <100 элементов: Используйте SM-2 или Leitner
- ≥100 элементов: Рассмотрите FSRS
3. **Продукт — это инструмент или контент?**
- Инструмент (например, приложение для слов): Рекомендуется SM-2 + маркировка сложности
- Контент (например, чтение статей): Рекомендуется FSRS или настраиваемая стратегия интервалов
Практические советы по разработке
1. Не выгружайте все повторения сразу
Многие разработчики вычисляют все ожидающие повторения и отправляют их одним пакетом. Это вызывает когнитивную перегрузку. Правильный подход — показывать по 5-10 элементов за раз и загружать следующую партию только после завершения текущей.
2. Разрешите ручной пропуск
Ни один алгоритм не идеален. Предоставьте кнопку «пропустить/уже знаю» и записывайте это действие как отрицательный образец в алгоритме.
3. Отделите сложность от интервалов
Не смешивайте «сложность» и «интервал». Сложность — входной параметр, интервал — выходной. В SM-2 я рекомендую разделить сложность на два независимых фактора:
- Семантическая сложность (корень, частота)
- Историческая успеваемость пользователя (точность, время реакции)
4. Стратегия холодного старта
Для новых пользователей без истории используйте консервативный набор интервалов по умолчанию (например, 1д, 3д, 7д, 14д). Соберите данные за первые 10 повторений, затем переключитесь на основной алгоритм.
Итоговое суждение
Не существует серебряной пули для алгоритмов обучения. Кривая Эббингауза заслуживает уважения как теоретическая основа, но прямое её использование в качестве алгоритма продукта, скорее всего, приведёт к провалу.
Моя текущая практика:
- Для маленьких продуктов использую SM-2 (проверен более десяти лет в Anki)
- При достаточном объёме данных делаю тонкую настройку с помощью FSRS
- Всегда оставляю интерфейс для ручного вмешательства пользователя
Алгоритмы — это двигатель, продукт — автомобиль. Отличный двигатель ничего не значит, если поездка некомфортна.
PaxLee