- BrainTools - https://www.braintools.ru -

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

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

Softmax – это функция, которая преобразует вектор чисел в вектор вероятностей, где сумма всех вероятностей равна 1.
Это позволяет интерпретировать выходные данные модели как вероятности принадлежности к разным классам.
🧠Математически [5] это выглядит так:
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) помогает “восстановить” важную информацию о разнице между классами, которая могла быть потеряна в процессе обучения [6]. Это особенно полезно, когда классы сильно отличаются друг от друга, и важно учитывать эти различия. [7]
Главная идея — добавлять специальные “штрафы” или “бонусы” к оценкам классов на основе их различий, помогая модели [8]лучше различать классы и точнее вычислять вероятности.

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

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