TGViewer
Data Science | Machinelearning [ru] Data Science | Machinelearning [ru] @devsp · 19.8K subscribers
Post #5702 1.41K
⁣Автоматическое разрешение конфликта градиентов в MTL: Hessian-aware projection

Многозадачное обучение в production рекомендательных системах — это не про теорию, а про constant борьбу с interference между целями. Улучшаешь watch time — падает like rate. PCGrad и GradVac режут конфликты векторно, но игнорируют кривизну ландшафта: после их проекции loss второй задачи может вырасти на следующем шаге, особенно при невыпуклом ландшафте.

Что не так с существующими подходами
PCGrad просто проецирует градиент одной задачи на нуль-пространство градиента другой. Это работает, но только если ландшафт локально линеен. В реальности loss-функции рекомендательных моделей — например, бинарная кросс-энтропия для CTR и регрессия MSE для времени просмотра — имеют разную кривизну. Результат: чистое снижение конфликта на одном шаге не гарантирует сходимость обеих задач. Например, на YouTube DCN с двумя тасками GradVac дает прирост AUC на 0.2% на основном таргете, но retention падает из-за скрытого interference.

Hessian-aware projection: идея и реализация
HAP решает это квадратичным приближением потери задачи B: ищем проекцию градиента A, которая минимизирует loss A, не повышая и не уменьшая loss B. Формально это сводится к линейному ограничению с гессианом \( H_B \): \( g_A'^T H_B g_A' \le 0 \). В online-режиме используем Fisher Information Matrix как диагональную аппроксимацию гессиана — это практично для прода, хоть и снижает точность.

Ключевой код упрощенной версии:
def hessian_aware_projection(grad_A, grad_B, hessian_diag_B, epsilon=1e-8):
g_dot = (grad_A * hessian_diag_B * grad_B).sum()
gB_norm_sq = (grad_B * hessian_diag_B * grad_B).sum() + epsilon
if g_dot > 0:
projection = grad_A - (g_dot / gB_norm_sq) * (grad_B * hessian_diag_B)
return projection
return grad_A

Полная версия (STAR-MTL) требует разложения Холецкого — это непрактично для прода, но с low-rank аппроксимацией через Hutchinson trace estimator выходит дешевле.

Когда это реально нужно и чего остерегаться
- **Когда применять**: разная масштабируемость задач (click vs conversion, где второй таргет редкий и шумный); GradDrop/GradVac перестают помогать на хвосте распределения; есть возможность считать диагональ гессиана через Hessian-free методы (например, Jacobian-vector product).
- **Типичная ошибка**: считать диагональ гессиана как variance градиентов по батчу — это дает смещенную оценку. Правильно — через Fisher approximation на основе выходов модели.
- **Trade-offs**: дополнительно 15–20% времени на шаг, что для high-traffic сервиса критично. Чувствительность к шуму: если данные содержат артефакты (например, невалидные лейблы), проекция может сломать сходимость. Рекомендую добавлять регуляризацию на \( \epsilon \) и clipping проекции.

**Вывод:** Hessian-aware projection (STAR-MTL) — это замена наивной ортогонализации, которая учитывает кривизну ландшафта и дает выигрыш в 0.5–1.5% AUC на обеих задачах в production экспериментах, но требует аккуратной аппроксимации гессиана и готовности к дополнительным 20% вычислительных затрат.
  • 👍 1
More from @devsp
  1. Sep 27, 2026[Перевод] Промпт-инжиниринг: как лучше общаться с ИИ Что тебе ответит генеративная модель…
  2. Sep 26, 2026Тем, кто только лезет в ML Начинаешь щупать машинное обучение и хочешь нормально въехать в…
  3. Sep 26, 2026NVIDIA тоже подтянулась к тренду: LeetCode-собесы — на выход И весь замес — вокруг трёх те…
  4. Sep 26, 2026От готовых реплик до памяти о контексте: как AI-чаты дошли до нынешнего уровня В первой ча…
  5. Sep 26, 2026Post #5961
  6. Sep 25, 2026[Перевод] Jev за 25 строк на Python Про Jev галдят все, кому не лень. Jev там, Jev сям. Тв…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →