- Регистрация
- 23 Август 2023
- Сообщения
- 2 822
- Лучшие ответы
- 0
- Реакции
- 0
- Баллы
- 51
Offline

Привет, чемпионы! Алгоритм Recovering Difference Softmax (RDS) – это не просто очередной метод машинного обучения, а полноценный подход к оптимизации уведомлений и контента для повышения вовлеченности пользователей. Изначально разработанный командой исследователей Duolingo, этот алгоритм эффективно решает конкретные проблемы, возникающие при использовании стандартных алгоритмов многоруких бандитов в задачах, связанных с повторяющимися уведомлениями. RDS помогает увеличить активность пользователей и удержать их внимание к приложению или платформе.

Softmax обычно используется для мультиклассовой классификации, где важно определить вероятность принадлежности объекта к одному из нескольких классов Softmax function.
Что такое Softmax и зачем он нужен

Softmax – это функция, которая преобразует вектор чисел в вектор вероятностей, где сумма всех вероятностей равна 1.
Это позволяет интерпретировать выходные данные модели как вероятности принадлежности к разным классам.
🧠Математически это выглядит так:
1P(i) = exp(a_i) / ∑ exp(a_j)
Где:
P(i) – вероятность принадлежности к классу i.
a_i – оценка (score) для класса i, выданная моделью.
Суммирование происходит по всем классам j.
Пример: Представим, модель классифицирует изображения по классам: кошка, собака и птица, и дала следующие оценки: кошка (2.0), собака (1.0), птица (0.5). Softmax преобразует эти оценки в вероятности:
Класс | Оценка (aᵢ) | exp(aᵢ) | P(i) (вероятность) |
---|---|---|---|
Кошка | 2.0 | 7.39 | 0.665 |
Собака | 1.0 | 2.72 | 0.245 |
Птица | 0.5 | 1.65 | 0.149 |
Сумма | 1.000 |
Теперь модель уверена на 66.5%, что на изображении кошка.
Recovering Difference Softmax: В чём особенность?
Recovering Difference Softmax (RDS) помогает "восстановить" важную информацию о разнице между классами, которая могла быть потеряна в процессе обучения. Это особенно полезно, когда классы сильно отличаются друг от друга, и важно учитывать эти различия.
Главная идея — добавлять специальные "штрафы" или "бонусы" к оценкам классов на основе их различий, помогая модели лучше различать классы и точнее вычислять вероятности.

Где это применяется RDS?
Алгоритм RDS может использоваться в самых разных областях, где нужно делать выбор:
Рекомендательные системы: Выбор лучших товаров или услуг для пользователя.
Обработка естественного языка: Определение наиболее вероятного следующего слова в предложении.
Компьютерное зрение: Распознавание объектов на изображениях.
Сценарий | Использование Softmax | Использование Recovering Difference Softmax |
---|---|---|
Рекомендация фильмов | Предлагает несколько фильмов с примерно одинаковой вероятностью | Выбирает один фильм, который с наибольшей вероятностью понравится пользователю |
Определение следующего слова | Предлагает несколько возможных следующих слов | Выбирает наиболее вероятное следующее слово |
Распознавание объектов | Определяет несколько объектов на изображении с разными вероятностями | Определяет один объект на изображении с наибольшей вероятностью |
Пример из Duolingo: Duolingo использует RDS для оптимизации уведомлений, определяя лучшее время отправки уведомлений, чтобы пользователи не забросили учёбу. Алгоритм учитывает индивидуальные привычки пользователей (кто-то учится каждый день, кто-то раз в неделю) и “восстанавливает” мотивацию тех, кто давно не заходил в приложение.
Математическая Интерпретация RDS

Точная формула RDS может варьироваться в зависимости от реализации, но общая идея заключается в модификации оценок классов перед применением Softmax. Например, можно добавить компонент, учитывающий разницу между максимальной и остальными оценками:
RunCopy code1P(i) = exp(a_i + bonus_i) / ∑ exp(a_j + bonus_j)
1P(i) = exp(a_i + bonus_i) / ∑ exp(a_j + bonus_j)
Где bonus_i – это функция, которая зависит от разницы между классами.
Техническая реализация
import numpy as np
def recovering_difference_softmax(logits, alpha=1.0):
"""
Вычисляет Recovering Difference Softmax для заданных логитов.
:param logits: Входные логиты (numpy array), размерность (n_samples, n_classes)
:param alpha: Параметр, контролирующий степень различия
:return: Вероятности классов после применения RDS
"""
# Вычисляем стандартные вероятности softmax
exp_logits = np.exp(logits - np.max(logits, axis=1, keepdims=True))
softmax_probs = exp_logits / np.sum(exp_logits, axis=1, keepdims=True)
# Вычисляем среднее значение вероятностей для каждого класса
mean_probs = np.mean(softmax_probs, axis=0, keepdims=True)
# Вычисляем разницу между вероятностями и их средним значением
diff_probs = softmax_probs - mean_probs
# Применяем модификацию с параметром alpha
rds_probs = softmax_probs + alpha * diff_probs
# Нормализуем вероятности, чтобы их сумма была равна 1
rds_probs = rds_probs / np.sum(rds_probs, axis=1, keepdims=True)
return rds_probs
# Пример использования
logits = np.array([[2.0, 1.0, 0.1],
[1.0, 3.0, 0.2],
[0.5, 0.2, 2.0]])
rds_probs = recovering_difference_softmax(logits, alpha=0.5)
print("Вероятности после применения RDS:\n", rds_probs)
Пояснения:
Логиты: Это входные значения, которые подаются на softmax. Они представляют собой необработанные оценки для каждого класса.
Стандартный softmax: Вычисляется с помощью экспоненты логитов, нормализованных по сумме, чтобы получить вероятности.
Среднее значение вероятностей: Вычисляется среднее значение вероятностей для каждого класса по всем образцам.
Разница вероятностей: Вычисляется разница между вероятностями и их средним значением, чтобы учесть отклонения.
Модификация с параметром alpha: Параметр α контролирует степень, с которой учитываются различия. При α=0 RDS сводится к стандартному softmax.
Нормализация: После модификации вероятности нормализуются, чтобы их сумма для каждого образца была равна 1.

Также существуют и другие методы для решения задач классификации, например SVM (Support Vector Machine). SVM и Softmax часто дают схожие результаты, но Softmax позволяет получить вероятности классов, что может быть полезно во многих приложениях CS231n: Softmax классификатор - My deep learning.
Заключение
Recovering Difference Softmax — мощный инструмент для улучшения работы алгоритмов машинного обучения, особенно когда нужно делать чёткие выборы. Он помогает алгоритмам быть более уверенными в своих решениях и лучше справляться с задачами, где важна точность.
Особенно эффективен он в задачах, где важны время, новизна контента и персонализация. Если ты хочешь, чтобы твои пользователи были довольны и активны, RDS — это то, что тебе нужно!
📚Список источников
How I Re-Created Duolingo's Famous Notification Algorithm - Medium.
Duolingo - Wikipedia
softmax is not enough (for sharp out-of-distribution) - OpenReview
Apple Machine Learning Research at ICLR 2025
A Sleeping, Recovering Bandit Algorithm for Optimizing Recurring Notifications PDF
The Duolingo Score Tracks Your Learning Progress
Improving Routing in Sparse Mixture of Experts with Graph PDF
Recovering Neural Network Weights through Controlled Channels
NetFormer: An interpretable model for recovering dynamical
🔥 Ставьте лайк и пишите, какие темы разобрать дальше! Главное — пробуйте и экспериментируйте!
✔️ Присоединяйтесь к нашему Telegram-сообществу @datafeeling, где мы делимся новыми инструментами, кейсами, инсайтами и рассказываем, как всё это применимо к реальным задачам.