Объяснение работы совместной фильтрации в рекомендательных системах.

В предыдущем блоге мы обсуждали, как, если у нас есть n функций, таких как x(1), x(2), …, x(n) известно для каждого фильма, то как мы можем построить модель, которая будет предсказывать рейтинги фильмов.

Однако в действительности доступ к такой информации зачастую отсутствует.
Следовательно, мы должны иметь возможность настроить нашу модель таким образом, чтобы она по-прежнему могла предсказывать рейтинги фильмов.

Вот где вступает в действие совместная фильтрация.

📌 Совместная фильтрация – это алгоритм рекомендаций, который учитывает сходство между разными пользователями при рекомендации элемента другому пользователю.

В этом блоге мы модифицируем наш существующий алгоритм рекомендации функций для каждого элемента таким образом, чтобы он мог получать информацию о функциях уже из данных.

⚠️ Обратите внимание, что знание основ математического анализа и линейной алгебры является обязательным условием для этой статьи. Вы можете освежить свои знания по математике здесь.

🔄 Резюме — рекомендации по функциям для каждого элемента

Напомним, что для рекомендаций по характеристикам товара у нас была следующая функция стоимости, которую мы минимизировали, чтобы найти параметры w(1), b(1), w(2), b(2), w(3), b(3), …, w (n_u), b(n_u) для всех n_u пользователей.

🎯 Нашей целью было найти параметрыw(1), b(1), w(2) , b(2), w(3), b(3), …, w (n_u) , b(n_u) для всех n_u пользователей, так что эта функция стоимости минимальна. В данном случае у нас был доступ к функциям x(1), x(2), …, x(n).

⚠️ Что происходит, когда у нас нет доступа к функциям x(1), x(2), …, x(n)?

Формулировка — совместная фильтрация

Допустим, у нас есть следующая матрица, отображающая пользовательские оценки для каждого фильма для 4 пользователей — Алисы, Боба, Кэрол и Дейва. и их оценки по шкале 0–5. Знак ?обозначает, что пользователь не оценил фильм.

Допустим, у нас также есть функции x(1) и x(2), описывающие содержание фильмов, которым присвоен рейтинг. Однако эта информация нам недоступна. Следовательно, мы обозначаем его как ?.

Ссылаясь на рекомендательную систему по характеристикам элементов из предыдущего блога, прогнозируемый рейтинг для movie_i для любого user_j может быть обобщается из приведенного выше уравнения следующим образом:

Предположим, что у нас есть значения b(j) равные нулю для простоты. Тогда приведенное выше уравнение сводится к:

Давайте также предположим, что у нас есть значения w(j), доступные нам из волшебного источника, и для приведенной выше матрицы пользовательских элементов они равны следующему:

Так как у нас также есть рейтинги (здесь f(x)), объединенные уравнениями 1, 2 и таблицей 1, мы можем написать следующее для movie_1:

Следовательно, зная значения w(1),w(2), w(3) и w(4 ) и их соответствующие рейтинги, мы смогли угадать значения матрицы признаков x(1).

📌 Обратите внимание, что это было возможно только потому, что у нас были рейтинги 3 других пользователей для одного и того же фильма, и поэтому это невозможно в случае линейной регрессии.

Функция стоимости — совместная фильтрация

Мы используем аналогичный подход к рекомендательной системе для отдельных элементов. Учитывая значения w(1), b(1), w(2), b(2), w(3), b(3), …, w (n_u), b(n_u) для всех n_u пользователей мы определяем регуляризованную функцию стоимости J(x_i), чтобы узнать значения x_i.

Мы использовали среднеквадратичную ошибку (MSE) для потери, аналогично рекомендательной системе для отдельных элементов. Функцию потерь можно математически сформулировать следующим образом:

Точно так же, расширяя приведенные выше функции стоимости, чтобы узнать больше функций x(1), x(2), x(3), …,x(n_m), мы суммируем их из i=1 до n_m,гдеn_mколичество фильмов, как показано ниже:

⚠️ Но как нам оценить значения параметров w и b в уравнении 4?

Помните, что мы использовали уравнение 1 для оценки параметров w и b в рекомендательной системе для отдельных элементов.

Объединяя уравнение 7 и уравнение 1 вместе, мы получаем следующую функцию стоимости J(w,b,x), которую можно минимизировать , чтобы узнать параметры w, b и x.

Теперь, когда у нас есть готовая функция стоимости J(w,b,x), следующим шагом будет минимизация J для изучения параметров w. , b и x.

Оптимизация функции стоимости с использованием градиентного спуска

Подобно логистической регрессии/линейной регрессии, мы также используем здесь градиентный спуск.

Если вы следили за моим предыдущим блогом о логистической регрессии, то вы можете пропустить резюме и сразу перейтик основет гематическая формула для совместной фильтрации⬇️ объяснена ниже.😉

Интуиция

Интуиция, стоящая за градиентным спуском, заключается в том, чтобы итеративно найти точку, в которой функция стоимости минимальна.

📌 Градиентный спуск жадно выбирает направление наискорейшего спуска как можно быстрее вниз, пока не сойдется к глобальным минимумам.

Здесь направление означает, как следует изменить параметры модели, чтобы еще больше уменьшить функцию стоимости, а сходимость указывает на то, что значения параметров модели больше не изменяются существенно.

Алгоритм

  • В этом алгоритме мы инициализируем параметры (здесь w, b и x) как любые значения (либо 0, либо случайные).
  • Мы пытаемся скорректировать (обновить) значения каждого параметра, чтобы функция стоимости J уменьшилась.
  • Мы вычисляем новые значения путем вычисления разницы между старыми значениями параметров и α (альфа), умноженной на частную производную от J(w,b,x) относительно соответствующего параметра.

  • Скорость обучения, обозначаемая как α (альфа), представляет собой гиперпараметр, который необходимо настраивать во время обучения наших моделей.
    Он показывает, насколько быстро алгоритм должен двигаться вниз по склону.
    Для больших значенийαградиентный спуск будет делать большие шаги, и аналогично для меньших значений α он будет делать меньшие шаги .

⚡⚡ Выбор правильной скорости обучения часто может быть проблемой.
С одной стороны, слишком маленькое значение альфы может привести к длительному процессу обучения, который может застрять.
С другой стороны, слишком большое значение может привести к нежелательному расхождению, когда функция потерь полностью пропускает точку минимума и продолжает колебаться.

  • Алгоритм останавливается, когда значения w, b и x больше не изменяются существенно.
    Это затем говорят, что достигнута точка схождения.

Модификация для совместной фильтрации

  • Математически градиентный спуск для совместной фильтрации можно выразить следующим образом:

Это означает, что нам нужно знать наклон функции при текущих настройках параметров, чтобы мы могли предпринять эти шаги наискорейшего спуска и знать, в каком направлении нужно двигаться, чтобы снижаться по функции стоимости J(w, b, x).

Заключение

После того, как мы нашли параметры w, b и x, мы можем оценить оценки, которые пользователи могут поставить соответствующим фильмам. .

Поскольку этот алгоритм использует рейтинги, данные другими пользователями тому же продукту, для оценки вероятности рейтинга пользователя, он известен как совместная фильтрация.

Несмотря на то, что это очень популярный алгоритм, широко используемый в отрасли, он имеет свои плюсы и минусы. В следующем блоге этой серии обсуждаются преимущества и недостатки совместной фильтрации.

Эта серия блогов основана на обозначениях и теории, изложенных в специализации Coursera Machine Learning от DeepLearning.ai.

Если вам понравилась статья, подпишитесь, чтобы получать мои последние статьи.
Чтобы связаться со мной, свяжитесь со мной в LinkedIn или через ashmibanerjee.com.