[БЕЗ_ЗВУКА] Сейчас мы понимаем, что из себя представляют матричные разложения и как можно их вычислять. Даже знаем уже целых два метода для этого, стохастический градиентный спуск и IRLS. Теперь стоит поговорить о том, как можно смотреть на эти задачи. Существуют уж как минимум два разных взгляда на задачи матричных разложений. Один взгляд — это получение некоторых новых признаков для объектов и для исходных признаков, а другой взгляд — это прогнозирование неизвестных значений матрицы. Итак, сначала мы поговорим про постановку задачи в рекомендациях, потому что именно к рекомендациям ближе всего такой взгляд на матричное разложение. Затем мы поговорим о том, как именно прогнозируются неизвестные значения в матрице, из каких соображений. Затем — об оптимизируемом функционале, затем — о таких вещах, как сдвиг и базовые предикторы, которые очень часто используются в рекомендациях и представляют собой некоторую специфику матричных разложений в случае задачи рекомендации. А также поговорим о регуляризации по базовым предикторам: поскольку мы введем какие-то новые параметры, регуляризацию нужно будет делать и по ним. Итак, в рекомендациях мы, как уже знаем, имеем матрицу пользователи / оценки. И в этой матрице стоят оценки, которые пользователи поставили тем объектам, которые видели. Ну, например, тем фильмам, которые они смотрели. В то же время какие-то значения неизвестны. Мы можем посмотреть на нашу задачу следующим образом: давайте будем считать, что в известных значениях матрицы мы пытаемся приблизить эти значения как скалярное произведение некоторого профиля пользователя на профиль объекта, ну, например к фильмам. И оптимизировать будем функционал, в котором суммы берем только по известным значениям матрицы, для того чтобы, взяв скалярное произведение профиля пользователя и профиля фильма, получить прогноз оценки, которую пользователь поставил бы фильму, если бы видел его, для тех элементов матрицы, которые нам неизвестны. В этой задаче мы можем добавить учет некоторых дополнительных факторов. Ну, например, если наша шкала оценки подразумевает, что есть некоторая средняя оценка (обозначим ее μ), от которой отталкиваются пользователи при оценивании фильмов, тогда правильнее будет приближать оценки xi-тое j-тое как μ плюс скалярное произведение u-того на v-тое, а μ тоже настраивать, исходя из оптимизационной задачи. Другое соображение: пользователи бывают разными не только в силу своих интересов, но и в силу строгости оценок, которые они ставят фильмам. И какие-то пользователи могут быть предрасположены ставить оценки повыше, какие-то пользователи предрасположены ставить оценки пониже. Поэтому мы можем добавить еще одно слагаемое, b u-тое i-тое. Это базовый предиктор i-того пользователя, который будет отражать предпочтения пользователя в среднем по оценкам, то есть какие оценки в среднем примерно он склонен ставить. Но при этом не стоит считать, что это честное среднее оценок, которые он поставит фильму, потому что не надо забывать, что у нас есть слагаемое μ и еще одно слагаемое, которое мы сейчас добавим, b v-тое j-тое, базовый предиктор по j-тому фильму. Это слагаемое выражает мысль, что каждый фильм тоже может быть в какой-то степени хорош или плох. То есть, если хотите, это слагаемое будет в каком-то смысле приближать рейтинг фильма самого по себе. И теперь слагаемое ui-тое умножить на vj-тое выражает именно взаимодействие интересов пользователя и особенности фильма, без влияния хорошести или плохости фильма, без влияния строгости пользователя и без учета средней оценки, которую пользователь ставит фильмам. Так как мы добавили какие-то новые параметры, уместно обсудить вопрос регуляризации. Добавлять регуляризаторы по новым параметрам тоже нужно. Ну, при этом новых параметров у нас значительно меньше, чем старых, потому что b u-тое i-тое — это просто число, то есть таких чисел у нас по количеству пользователей, и b v-тое j-тое — это тоже число, и таких чисел у нас по количеству фильмов. Ну и для них мы тоже можем добавить оптимизированный функционал l2 регуляризаторы, ну и лучше это все же сделать. Итак, подведем итог. Мы вспомнили постановку задачи в рекомендациях и, исходя из этой постановки, посмотрели на матричное разложение немного иначе. А именно, как на задачу прогнозирования значений в матрице, которых мы пока что не знаем, на основе тех значений, которые нам известны. При этом мы предполагаем, что есть какая-то простая модель, которая описывает оценки, которые ставят пользователи. В самом простом виде это было просто скалярное произведение профиля пользователя ui-того на профиль объекта vj-тое. В более сложной ситуации мы можем добавлять сдвиг и базовые предикторы по пользователям и по фильмам. Кроме того, если мы добавляем какие-то новые параметры, нужно не забыть добавить регуляризаторы, учитывающие эти новые параметры в оптимизационную задачу.