Как стать автором
Обновить
16.19

Как алгоритм Recovering Difference Softmax (RDS) делает рекомендации и уведомления точнее и эффективнее

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров230

Привет, чемпионы! Алгоритм 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

Сценарий

Использование 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)

Пояснения:

  1. Логиты: Это входные значения, которые подаются на softmax. Они представляют собой необработанные оценки для каждого класса.

  2. Стандартный softmax: Вычисляется с помощью экспоненты логитов, нормализованных по сумме, чтобы получить вероятности.

  3. Среднее значение вероятностей: Вычисляется среднее значение вероятностей для каждого класса по всем образцам.

  4. Разница вероятностей: Вычисляется разница между вероятностями и их средним значением, чтобы учесть отклонения.

  5. Модификация с параметром alpha: Параметр α контролирует степень, с которой учитываются различия. При α=0 RDS сводится к стандартному softmax.

  6. Нормализация: После модификации вероятности нормализуются, чтобы их сумма для каждого образца была равна 1.

Альтернативы Softmax

Также существуют и другие методы для решения задач классификации, например SVM (Support Vector Machine). SVM и Softmax часто дают схожие результаты, но Softmax позволяет получить вероятности классов, что может быть полезно во многих приложениях CS231n: Softmax классификатор - My deep learning.

Заключение

Recovering Difference Softmax — мощный инструмент для улучшения работы алгоритмов машинного обучения, особенно когда нужно делать чёткие выборы. Он помогает алгоритмам быть более уверенными в своих решениях и лучше справляться с задачами, где важна точность.

Особенно эффективен он в задачах, где важны время, новизна контента и персонализация. Если ты хочешь, чтобы твои пользователи были довольны и активны, RDS — это то, что тебе нужно!

📚Список источников

🔥 Ставьте лайк и пишите, какие темы разобрать дальше! Главное — пробуйте и экспериментируйте!


✔️ Присоединяйтесь к нашему Telegram-сообществу @datafeeling, где мы делимся новыми инструментами, кейсами, инсайтами и рассказываем, как всё это применимо к реальным задачам.

Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
0
Комментарии0

Публикации

Информация

Сайт
t.me
Дата регистрации
Дата основания
Численность
2–10 человек
Местоположение
Россия