- PVSM.RU - https://www.pvsm.ru -

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

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

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 (RDS) помогает "восстановить" важную информацию о разнице между классами, которая могла быть потеряна в процессе обучения. Это особенно полезно, когда классы сильно отличаются друг от друга, и важно учитывать эти различия. [4]
Главная идея — добавлять специальные "штрафы" или "бонусы" к оценкам классов на основе их различий, помогая модели [5]лучше различать классы и точнее вычислять вероятности.

Алгоритм RDS может использоваться в самых разных областях, где нужно делать выбор:
Рекомендательные системы: Выбор лучших товаров [6]или услуг для пользователя.
Обработка естественного языка: Определение наиболее вероятного следующего слова в предложении.
Компьютерное зрение: Распознавание объектов на изображениях [7].
|
Сценарий |
Использование Softmax |
Использование Recovering Difference Softmax |
|---|---|---|
|
Рекомендация фильмов |
Предлагает несколько фильмов с примерно одинаковой вероятностью |
Выбирает один фильм, который с наибольшей вероятностью понравится пользователю |
|
Определение следующего слова |
Предлагает несколько возможных следующих слов |
Выбирает наиболее вероятное следующее слово |
|
Распознавание объектов |
Определяет несколько объектов на изображении с разными вероятностями |
Определяет один объект на изображении с наибольшей вероятностью |
Пример из Duolingo [2]: Duolingo использует 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. [4]
softmax is not enough (for sharp out-of-distribution) - OpenReview [9]
A Sleeping, Recovering Bandit Algorithm for Optimizing Recurring Notifications PDF [11]
Improving Routing in Sparse Mixture of Experts with Graph PDF [13]
Recovering Neural Network Weights through Controlled Channels [14]
NetFormer: An interpretable model for recovering dynamical [15]
🔥 Ставьте лайк и пишите, какие темы разобрать дальше! Главное — пробуйте и экспериментируйте!
✔️ Присоединяйтесь к нашему Telegram-сообществу @datafeeling [16], где мы делимся новыми инструментами, кейсами, инсайтами и рассказываем, как всё это применимо к реальным задачам.
Автор: Aleron75
Источник [17]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/rds/420656
Ссылки в тексте:
[1] метод машинного обучения: https://t.me/datafeeling/1281
[2] Duolingo: https://habr.com/ru/companies/datafeel/articles/907412/
[3] Softmax function: https://en.wikipedia.org/wiki/Softmax_function
[4] важно учитывать эти различия. : https://medium.com/@jakemazurkiewicz6/how-i-re-created-duolingos-famous-notification-algorithm-00fce580b84e
[5] модели : https://t.me/datafeeling/1254
[6] Выбор лучших товаров : https://t.me/datafeeling/1293
[7] Распознавание объектов на изображениях: https://t.me/tech_hipster/1182
[8] Duolingo - Wikipedia: https://en.wikipedia.org/wiki/Duolingo
[9] softmax is not enough (for sharp out-of-distribution) - OpenReview: https://openreview.net/forum?id=wMj6PgKVuJ
[10] Apple Machine Learning Research at ICLR 2025: https://machinelearning.apple.com/research/iclr-2025
[11] A Sleeping, Recovering Bandit Algorithm for Optimizing Recurring Notifications PDF: https://dl.acm.org/doi/pdf/10.1145/3394486.3403351
[12] The Duolingo Score Tracks Your Learning Progress: https://blog.duolingo.com/duolingo-score/
[13] Improving Routing in Sparse Mixture of Experts with Graph PDF: https://arxiv.org/pdf/2505.00792
[14] Recovering Neural Network Weights through Controlled Channels: https://arxiv.org/html/2503.19142v1
[15] NetFormer: An interpretable model for recovering dynamical: https://openreview.net/forum?id=bcTjW5kS4W
[16] @datafeeling: https://t.me/+w0V_HEhKSkIyMTYy
[17] Источник: https://habr.com/ru/companies/datafeel/articles/908770/?utm_campaign=908770&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.