← к модулям

NeuMF — Neural CF

Те же эмбеддинги, что у MF, но итоговый балл считает нейросеть (GMF + MLP), а не дот-произведение. Главное здесь — честный урок: сложнее ≠ лучше.

    Карта эмбеддингов (GMF): топ-400 фильмов

    Точки — фильмы в пространстве GMF-эмбеддингов, спроецированные в 2D (PCA), цвет — основной жанр. Эмбеддинги учатся, но, как видно по метрикам, сама по себе нейросеть поверх них не даёт выигрыша над простыми моделями.

    обучение и проекция эмбеддингов…

    Теория простым языком

    NeuMF (Neural Collaborative Filtering) берёт те же user/item-эмбеддинги, что и MF, но скор считает нейросеть, а не скалярное произведение. Идея: дот- произведение — это лишь один способ «сложить» совпадение векторов, а MLP мог бы выучить связь сложнее. Заодно это наш стенд для важного урока: сложнее ≠ автоматически лучше.

    Две ветки: GMF и MLP

    У каждого пользователя и фильма — по два эмбеддинга (для каждой ветки). Их обрабатывают двумя путями, потом склеивают.

    GMF (обобщённая MF)поэлементное произведение векторов пользователя и фильма puGqiGp^{G}_u \odot q^{G}_i. Это «MF, но без финального суммирования» — вектор, который дальше взвесит выходной слой (обычная MF = частный случай).
    MLP-веткавекторы пользователя и фильма склеивают в один и пропускают через несколько полносвязных слоёв с ReLU. Сеть может выучить нелинейную «совместимость», которую дот-произведение выразить не может.

    Выходы обеих веток конкатенируют и подают в финальный линейный слой → один балл. Так модель совмещает «линейное» (GMF) и «нелинейное» (MLP) совпадение.

    Почему нейросеть ≠ автоматически лучше
    БылоMF считала совпадение фиксированным скалярным произведением.
    ПроблемаДот-произведение — лишь один способ «сложить» векторы; казалось, MLP выучит связь богаче.
    ИдеяЗаменить скор на нейросеть (GMF + MLP), обучать на неявном фидбеке.
    Стало лучшеГибкость: сеть может выразить нелинейную совместимость.
    Осталось слабымНа наших данных NeuMF ≈ baseline и не даёт выигрыша над аккуратно настроенной MF. Это совпадает с известной критикой NCF-бенчмарков (Rendle и др., 2020: при честно настроенных baseline более сложная нейросеть не гарантирует прирост). Честный урок: сложнее не значит лучше.
    ДальшеНейросети реально выигрывают на масштабе и фичах — two-tower retrieval и feature-rich ranking.

    Как обучается

    Как и implicit-ALS/BPR, NeuMF учится на неявном фидбеке: позитив — фильм, с которым было взаимодействие; негатив — случайный невзаимодействованный (сэмплим несколько на каждый позитив). Цель — бинарная классификация «было/не было», лосс — кросс-энтропия.

    BCE (binary cross-entropy)лосс для задачи «да/нет»: толкает предсказанную вероятность y^ui\hat{y}_{ui} к 1 на позитивах и к 0 на сэмплированных негативах.
    Псевдокод
    для каждого позитива (u, i) и нескольких случайных негативов (u, j):
        gmf = pG[u] ⊙ qG[i]                 # поэлементное произведение
        h   = MLP( concat(pM[u], qM[i]) )    # несколько слоёв + ReLU
        ŷ   = σ( w · concat(gmf, h) )        # вероятность «понравится»
        loss = BCE(ŷ, метка 1/0)             # обновляем веса градиентом
    
    score(u, i) = w · concat(gmf, h)         # для рекомендаций (порядок)
    Формула: GMF + MLP + BCE

    GMF-ветка — поэлементное произведение эмбеддингов:

    ϕuiGMF=puGqiG\phi^{GMF}_{ui} = p^{G}_u \odot q^{G}_i

    MLP-ветка — склейка эмбеддингов через слои с нелинейностью:

    ϕuiMLP=aL ⁣(WLa1(W1[puM;qiM]+b1))\phi^{MLP}_{ui} = a_L\!\big(W_L \cdots a_1(W_1 [\,p^{M}_u ; q^{M}_i\,] + b_1)\big)

    Финальный балл — линейный слой над конкатенацией веток:

    y^ui=σ(h[ϕuiGMF;ϕuiMLP])\hat{y}_{ui} = \sigma\big(h^\top [\,\phi^{GMF}_{ui} ; \phi^{MLP}_{ui}\,]\big)

    Обучение — BCE по позитивам и сэмплированным негативам:

    L= ⁣ ⁣(u,i)PNyuilny^ui+(1yui)ln(1y^ui)\mathcal{L} = -\!\!\sum_{(u,i)\in\mathcal{P}\cup\mathcal{N}} y_{ui}\ln\hat{y}_{ui} + (1-y_{ui})\ln(1-\hat{y}_{ui})

    Для ранжирования сигмоида не нужна (монотонна) — сравниваем логиты h[ϕGMF;ϕMLP]h^\top[\phi^{GMF};\phi^{MLP}].

    Главный урок: нейросеть ≠ автоматически лучше

    Казалось бы, MLP мощнее дот-произведения — значит, должно быть точнее? Проверим на наших данных (NDCG@10, порог «понравилось»):

    Пример. item-CF 0.041 > BPR 0.032 > NeuMF 0.029 ≈ popularity 0.029 > MF 0.024. NeuMF, при всей сложности, садится ровно на уровень baseline и проигрывает простому BPR и item-CF.

    Это не случайность нашего датасета. Знаменитая работа Rendle et al. 2020 («Neural Collaborative Filtering vs. Matrix Factorization Revisited») показала: аккуратно настроенный дот-продукт MF обходит NeuMF из оригинальной статьи. Мораль: сложная модель оправдана только если измеримо бьёт простые baseline на твоих данных — а часто не бьёт. На маленьких данных её ещё и легче переобучить.

    Сильные стороны

    • Гибкость: MLP может выучить нелинейные взаимодействия, недоступные дот-произведению.
    • Единый каркас: GMF и MLP — частные случаи, легко расширять (фичи, контекст).
    • Хорошая учебная точка для нейросетевых рекомендаций.

    Слабые стороны

    • На наших данных не бьёт простые baseline (popularity/BPR/item-CF) — классический «neural ≠ лучше».
    • Дороже и медленнее MF; больше гиперпараметров (слои, негативы, lr).
    • Легко переобучить на маленьком датасете; холодный старт остаётся.

    ⚠️ Что может пойти не так

    • Сравнивай с сильным baseline: хорошо настроенный MF/BPR часто не уступает NeuMF (Rendle 2020). Без честного сравнения легко обмануться «потому что нейросеть».
    • Negative sampling важен: сколько негативов на позитив и как их брать — сильно влияет на качество.
    • Переобучение: на маленьких данных сложная сеть запоминает train; нужны регуляризация и ранняя остановка.
    • Цена сложности: больше параметров и времени обучения ради сомнительного выигрыша — в проде это реальный trade-off.

    🧠 Проверь себя: Чем NeuMF принципиально отличается от обычной MF?

    Где встречается в жизни

    NCF/NeuMF — популярная отправная точка нейросетевых рекомендаций и частый бенчмарк. Но именно вокруг него развернулась дискуссия «нейросети против простых baseline», которую важно знать: умение честно сравнить с настроенной MF ценится выше, чем «взял модель посложнее».