Итак, сейчас мы понимаем, что матричные разложения — очень полезная вещь, мы можем их использовать, использовать их уж как минимум в рекомендациях в анализе текстов. И пора бы уже понять, а как мы можем их делать, как нам вычислять профили объектов uᵢ и профили старых признаков vⱼ. В этом видео мы рассмотрим два метода, которые позволяют это делать. Сначала мы вспомним постановку задачи. Затем мы поговорим про градиентный спуск и поймем, что здесь неизбежно придется перейти к стохастическому градиентному спуску, ну и выпишем формулы обновления значений uᵢ и vⱼ. А затем рассмотрим метод, который позволяет решать задачу несколько быстрее, — ALS. После этого мы поговорим о регуляризации, которая в этой задаче очень важна. И все это вместе даст нам возможность обучать профили uᵢ и vⱼ. Итак, постановка задачи у нас достаточно простая. Нам нужно минимизировать функционал (давайте будем пока что рассматривать случай нормы Фробениуса), и в этом функционале у нас рассматривается отклонение xᵢⱼ от скалярного произведения uᵢ и vⱼ. Функционал достаточно прост, поэтому для него мы можем выписать градиент, ну например, по uᵢ. В силу линейности градиента градиент от суммы будет равен сумме градиентов. Здесь у нас возникнет двойка, которую мы можем опустить в дальнейшем (все равно у нас будет некоторый шаг градиента, который возникнет как константа перед антиградиентом). Ну и в конечном счете мы получаем достаточно простую формулу для обновления uᵢ на каждой итерации градиентного спуска. Аналогичную формулу мы получаем для vⱼ. Обратите внимание: в этой формуле есть достаточно большая сумма, то есть сумма большого количества слагаемых. Матрицы, на которых мы используем этот метод, могут быть очень велики. И конечно, считать такую сумму на каждой итерации — не очень интересная затея. Именно поэтому нам неизбежно потребуется метод стохастического градиентного спуска, то есть мы будем брать некоторые случайные слагаемые на каждом шаге и использовать только их. С одной стороны, такой алгоритм очень просто реализовать, и он довольно прост для понимания. И понятно, что, скорее всего, он будет сходиться даже без каких-то дополнительных выкладок. Это почти ясно, почти очевидно. Но в то же время понятно, что сходиться он будет очень медленно. И совершенно неясно, как нам выбирать шаг в градиентном спуске. Если мы возьмем константный шаг, так вообще получится очень медленная сходимость. В этом месте нам может помочь другой метод — ALS. ALS — это сокращение от alternating least squares, и идея этого метода заключается в следующем: в точке оптимума, то есть там, где функционал будет принимать минимальное значение, производные функционала по uᵢ и по vⱼ должны быть равны нулю. Тогда давайте действовать следующим образом: на одной итерации мы вычисляем производную по uᵢ, приравниваем ее к нулю и находим новое значение uᵢ. На другой итерации мы вычисляем производную по vⱼ, приравниваем к нулю ее и находим новое значение vⱼ. И продолжаем делать так до тех пор, пока значения uᵢ и vⱼ не будут стабилизироваться. Можно выписать явно шаги в ALS, увидеть, что у нас получаются достаточно простые выражения и, сделав несложные преобразования, получить задачу в виде задачи решения системы линейных уравнений. Понятно, как такие задачи решать, и понятно, что отсюда мы уже можем выражать uᵢ и vⱼ на каждой итерации. В итоге мы получаем алгоритм, который вы видите на слайде. При этом в этой задаче очень важно, что задача имеет много разных решений. То есть в принципе задача поставлена не совсем корректно. В то же время мы хотим получать некоторые адекватные решения. И в таких случаях, как обычно, мы будем делать регуляризацию, то есть мы добавим некоторые штрафы за большие значения параметров, которые здесь возникают, то есть uᵢ и vⱼ, ну, например, с помощью L2-регуляризаторов. Удивительно, но добавление регуляризаторов очень сильно сказывается на качестве в этой задаче. Казалось бы, совсем маленькая добавка в функционале, но такое значение. Подведем итог. Мы с вами еще раз вспомнили постановку задачи в матричных разложениях по норме Фробениуса. Далее мы обсудили метод градиентного спуска применительно к этой задаче и перешли к методу стохастического градиентного спуска. Затем обсудили ALS и важность регуляризации в этой задаче.