Разреженное SVD разложение

SVD разложение:

∀
R
∈

R

M
×
N

{\displaystyle \forall R\in \mathbb {R} ^{M\times N}}

 может быть представлена как произведение трёх матриц

P
Σ

V

T

{\displaystyle P\Sigma V^{T}}

, где

U
∈

R

M
×
P

,
V
∈

R

P
×
N

,
Σ
∈

R

P
×
P

U

T

# U

V

T

# V
I
,
# Σ
d
i
a
g
{

σ

1

,
…
,

σ

P

}
,
# P
r
a
n
k
R

{\displaystyle U\in \mathbb {R} ^{M\times P},V\in \mathbb {R} ^{P\times N},\Sigma \in \mathbb {R} ^{P\times P}U^{T}U=V^{T}V=I,\Sigma =diag\{\sigma \_{1},\dots ,\sigma \_{P}\},P=rankR}

.

Если

σ

1

≥

σ

2

≥
⋯
≥

σ

P

{\displaystyle \sigma \_{1}\geq \sigma \_{2}\geq \dots \geq \sigma \_{P}}

, то данное разложение определено однозначно. В таком случае, если взять первые K столбцов матриц U и V, и первые K сингулярных чисел

σ

1

,
…
,

σ

K

{\displaystyle \sigma \_{1},\dots ,\sigma \_{K}}

, то получится матрица R', минимизирующая норму Фробениуса, по всем матрицам ранга не больше, чем K:

R
′

=
a
r
g
m
i

n

r
a
n
k
A
≤
K

‖
R
−
A

‖

F

{\displaystyle R'=argmin\_{rankA\leq K}\|R-A\|\_{F}}

.

В таком случае строки матрицы U можно воспринимать как отношение пользователя к каждой из K скрытых тем (в оригинале стоит слово topic). Строки матрицы V как степень соответствия фильма одной из K скрытых тем. Сингулярные числа

σ

1

,
…
,

σ

K

{\displaystyle \sigma \_{1},\dots ,\sigma \_{K}}

: важность каждой из тем.

Теперь, если у нас появляется новый пользователь с "большим" вектором оценок

r
u

{\displaystyle r\_u}

, то его K-мерный вектор отношений к темам будет вычисляться следующим образом:

p

u

=
a
r
g
m
i

n

p

‖

r

u

−
V
p
# ‖

V

T

r

u

{\displaystyle p\_{u}=argmin\_{p}\|r\_{u}-Vp\|=V^{T}r\_{u}}

 (В справедливости данного формулы можно убедиться, подставив итоговый результат и вспомнив про ортогональность V). Обратный процесс:

r

u

=
V

p

u

{\displaystyle r\_{u}=Vp\_{u}}

.

Основной недостаток данного подхода: итоговый результат зависит как от указанных оценок, так и от тех, которые мы не знаем (их обычно принимают равными 0). Нам хочется придумать модель, которая обучалась бы только на известных оценках.

Напомним, что в SVD разложении минимизировалась норма Фробениуса:

‖
R
−
P

Q

T

‖

F

→

min

P
,
Q

;
# P
[

p

1

p

2

…

p

K

]

T

,
# Q
[

q

1

q

2

…

q

K

]

. Предсказание

R
′

=
P
Q
.

{\displaystyle R'=PQ.}

.

Идея: минимизировать только те кусочки нормы Фробениуса
, где оценка пользователя определена:

∑

(
u
,
i
)
:
∃

r

u
,
i

(

r

u
,
i

−

r

u

¯

−

r

i

¯

−

p

u

T

q

)

2

⏟

ϵ

u
,
i

{\displaystyle \sum \_{(u,i):\exists r\_{u,i}}{\underbrace {(r\_{u,i}-{\bar {r\_{u}}}-{\bar {r\_{i}}}-p\_{u}^{T}q)^{2}} \_{\epsilon \_{u,i}}}}

.

Для решения данной проблемы воспользуемся методом SGD: будем случайно выбирать пару (u, i).

p

u

←

p

u

η

ϵ

u
,
i

q

i

,

{\displaystyle p\_{u}\leftarrow p\_{u}+\eta \epsilon \_{u,i}q\_{i},}

q

i

←

q

i

η

ϵ

u
,
i

p

U

{\displaystyle q\_{i}\leftarrow q\_{i}+\eta \epsilon \_{u,i}p\_{U}}

.

Преимущества данного подхода:

Нет неопределённости;

Легко добавить регуляризацию:

ϵ

u
,
i

2

λ
‖

p

u

‖

2

μ
‖

q

i

‖

2

→

p
,
q

;

Можно учесть неотрицательность компонент p и q, воспользовавшись методом проекций градиента;

Достаточно быстр.