Что означает «кэшировать остатки» в алгоритме оптимизации?

#c #machine-learning #optimization #svd

Вопрос:

Я читаю это о вызове Netflix (2006). В какой-то момент он говорит:

Для повышения эффективности кэшируйте остатки (все 100 миллионов из них), чтобы при обучении функции 72 вам не приходилось ждать, пока функция predictRating() пересчитает вклад предыдущих 71 функций. Для этого вам понадобится 2 гигабайта оперативной памяти, компилятор C и хорошие навыки программирования.

Что значит кэшировать остатки? Как вы можете избежать повторного вычисления всех остатков при изменении значения параметров?

Ответ №1:

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

Итак, предположим, что мы вычисляем сумму трех факторных чисел. Каждое факториальное число вычисляется по формуле F(x) = x * F(x-1) или F(0) = 1. Поэтому, если бы вам нужно было найти F(7) F(3) F(9), F(7) кэшировал бы F(7) через F(0), а F(3) ничего не вычислял бы, будучи просмотренным из предыдущих кэшированных значений. Аналогично, F(9) будет вычисляться из F(8), также вычисляемого из F(7), который не будет вычислен, будучи просмотренным из кэша.

Остатки-это любая часть вычисления, используемая в процессе получения окончательного ответа.