행렬 분해

행렬 분해는 간단한 임베딩 모델입니다. 피드백 행렬 A \(\in R^{m \times n}\)에서 \(m\) 는 사용자 수 (또는 쿼리)이고 \(n\) 는 항목 수이므로 모델은 다음을 학습합니다.

  • 사용자 임베딩 행렬 \(U \in \mathbb R^{m \times d}\)이며, 여기서 i 행은 사용자 i의 임베딩입니다.
  • 항목 임베딩 행렬 \(V \in \mathbb R^{n \times d}\), 여기서 j행은 항목 j에 대한 임베딩입니다.

반복되는 영화 예에 대한 행렬 분해를 표현하는 그림

곱이 피드백 행렬 A의 근사치가 되도록 임베딩이 \(U V^T\) 학습됩니다. \(U . V^T\) 의\((i, j)\) 항목은 사용자 및 항목 \(j\)의 임베디드 곱( \(A_{i, j}\))에 가까운 \(A_{i, j}\)내림 함수( \(A_{i, j}\))입니다.

목표 함수 선택

직관적인 목표 함수 중 하나는 제곱 거리입니다. 이렇게 하려면 관측된 모든 항목 쌍에 대한 제곱 오차의 합계를 최소화하세요.

\[\min_{U \in \mathbb R^{m \times d},\ V \in \mathbb R^{n \times d}} \sum_{(i, j) \in \text{obs}} (A_{ij} - \langle U_{i}, V_{j} \rangle)^2.\]

이 목표 함수에서는 관측된 쌍 (i, j)만 합산합니다. 즉, 피드백 행렬에서 0이 아닌 값을 더합니다. 그러나 값 중 하나만 합산하는 것은 좋지 않습니다. 모든 행렬의 행렬은 최소한의 손실을 얻고 효과적인 추천을 만들 수 없으며 일반화가 잘 되지 않는 모델을 생성합니다.

세 가지 행렬 그림: 관측된 행렬 분해, 가중치 분해, 단일 값 분해만 관찰함.

관찰되지 않은 값을 0으로 처리하고 행렬의 모든 항목을 합산할 수 있습니다. 이 값은 프로베니우스 거리와 \(A\) 가까운 \(U V^T\)거리의 제곱을 최소화하는 것입니다.

\[\min_{U \in \mathbb R^{m \times d},\ V \in \mathbb R^{n \times d}} \|A - U V^T\|_F^2.\]

이 2차 문제는 행렬의 단수 값 분해(SVD)를 통해 해결할 수 있습니다. 그러나 실제 애플리케이션에서는 행렬이 매우 희소할 수 있으므로 SVD는 좋은 솔루션이 아닙니다. \(A\) 예를 들어 YouTube의 모든 동영상을 특정 사용자가 시청한 모든 동영상과 비교할 수 있습니다. ( \(UV^T\) 입력 행렬에 대한 모델의 근사에 해당하는) 해결책은 0에 가까우므로 일반화 성능이 저하될 수 있습니다.

반대로 가중치가 적용된 행렬 분해는 목표를 다음 두 합계로 분해합니다.

  • 관측된 항목의 합계입니다.
  • 관찰되지 않은 항목의 합계 (0으로 처리됨)

\[\min_{U \in \mathbb R^{m \times d},\ V \in \mathbb R^{n \times d}} \sum_{(i, j) \in \text{obs}} (A_{ij} - \langle U_{i}, V_{j} \rangle)^2 + w_0 \sum_{(i, j) \not \in \text{obs}} (\langle U_i, V_j\rangle)^2.\]

여기서 \(w_0\) 는 목표가 둘 중 하나에 지배되지 않도록 두 용어에 가중치를 부여하는 초매개변수입니다. 이 초매개변수를 미세 조정하는 것은 매우 중요합니다.

\[\sum_{(i, j) \in \text{obs}} w_{i, j} (A_{i, j} - \langle U_i, V_j \rangle)^2 + w_0 \sum_{i, j \not \in \text{obs}} \langle U_i, V_j \rangle^2\]

여기서 \(w_{i, j}\) 은 쿼리 i와 항목 j의 빈도에 관한 함수입니다.

목표 함수 최소화

목표 함수를 최소화하기 위한 일반적인 알고리즘은 다음과 같습니다.

  • 확률적 경사하강법(SGD)은 손실 함수를 최소화하는 일반적인 방법입니다.

  • 가중 교대로 최소 제곱 (WALS)은 이 목표에 특화되어 있습니다.

목표는 두 행렬 U 및 V에서 각각 2차입니다. 하지만 문제는 함께 볼록하지 않습니다. WALS는 임베딩을 무작위로 초기화한 후 다음을 번갈아 교대하여 작동합니다.

  • \(U\) 수정 및 해결 \(V\)
  • \(V\) 수정 및 해결 \(U\)

각 단계는 (선형 시스템의 솔루션을 통해) 정확하게 해결할 수 있으며 배포할 수 있습니다. 이 단계는 손실을 줄이기 위해 각 단계가 보장되므로 수렴이 보장됩니다.

SGD vs. WALS

SGD와 WALS에는 장단점이 있습니다. 아래 정보를 검토하여 차이점을 비교해 보세요.

싱가포르 달러(SGD)

매우 유연합니다. 다른 손실 함수를 사용할 수 있습니다.

동시에 처리할 수 있습니다.

더 느림: 빠르게 수렴되지 않음

관찰되지 않은 항목을 처리하기가 더 어렵습니다 (음수 샘플링 또는 중력을 사용해야 함).

손실 제곱만 사용합니다.

동시에 처리할 수 있습니다.

SGD보다 빠르게 수렴합니다.

관찰되지 않은 항목을 더 쉽게 처리할 수 있습니다.