spotify에서 발표한 논문으로, 웹에서 얻을 수 있는 데이터들은 대부분 직접 rating된 값이 아닌 암묵적인 값으로, 이런 케이스를 위한 Collaborating Filtering 방법의 수요가 높아지고 있다. 그 방법으로 Logistic MF를 소개한다.
Problem Setup and Notation
Collaborating Filtering의 목표는 유저의 과거 행동을 통하여 미래에 어떻게 행동할 것인지 예측하기 위함이다.
암묵적인 피드백(Implicit feedback)은 클릭수, 페이지 뷰수, 미디어 재생 횟수 등이 포함되는데, 모두 non-negative한 값을 가진다.
- $U=(u_1,...,u_n)$: $n$명의 user
- $I=(i_1,...,i_m)$: $m$개의 item
- $R=(r_{ui})_{n\times m}$: user-item 관측값 행렬
- $r_{ui}$는 유저 $u$와 아이템 $i$의 상호작용 횟수로서 정수일 필요는 없으며 음이 아닌 실수
$r_{ui}$가 0일 때에는 상호작용이 없었다는 것인데 그렇다고 해서 유저 $u$가 아이템 $i$를 선호하지 않는다고 단정 지을 수는 없다.
Logistic MF
관측값 행렬 $R$을 2개의 더 낮은 차원의 행렬인 $X_{n×f}$, $Y_{m×f}$으로 분해하여 접근한다. ($f$는 latent vector의 차원)
$X$의 행 $x$는 유저의 취향을 나타내는 latent factor vector
$Y^T$의 열 $y$는 아이템의 스타일 등 특징을 나타내는 latent factor vector
$\beta_u$, $\beta_i$는 각각 유저와 아이템의 편차를 보정하기 위함이다.
$l_{u,i}$를 유저 $u$가 아이템 $i$와 상호작용하는 이벤트라고 하고, 이를 확률로 나타내면 아래와 같다.
$$p(l_{ui} | x_u, y_i , β_i , β_j ) = \dfrac{exp(x_iy_i^T + β_u + β_i)}{ 1 + exp(x_uy_i^T + β_u + β_i)}$$
주어진 식에서 $r_{ui}$가 0이 아닌 값들은 positive feedback, 0인 값들은 negative feedback이라고 하자.
이때 confidence $c$에 대해 $c = αr_{ui}$라 정의한다.
$α$는 tuning parameter로서 증가하면 positive feedback, 감소하면 negetive feedback에 가중치를 부여한다.
영향력 있는 소수의 유저에 의해 결정되지 않게 하기 위하여 로그를 취하면 아래와 같다.
$$c = 1 + α log(1 + r_{ui}/\epsilon)$$
$R$의 모든 엔트리들이 독립이라는 가정을 했으므로 likelihood 는 아래와 같이 도출된다.
추가로 오버피팅 되는 것을 피하기 위해 $x_u$와 $y_i$에 사전확률을 각각 아래와 같이 정의한다.
$$p(X|\sigma^2)=\prod_u \mathcal{N}(x_u|0,\sigma^2_uI)$$
$$p(Y|\sigma^2)=\prod_i \mathcal{N}(y_i|0,\sigma^2_uI)$$
posterior에 로그를 취하고 상수는 $\lambda$로 대체하면 아래와 같은 식을 얻는다.
$$\mathrm{log}p(X,Y,\beta|R) = \sum_{u,i}\alpha r_{ui}(x_uy_i^T +\beta_u+\beta_i)-(1-\alpha r_{ui})\mathrm{log}(1+\mathrm{exp}(x_uy_i^T+\beta_u+\beta_i)-\frac{\lambda}{2}||x_u||^2-\frac{\lambda}{2}||y_i||^2$$
이제 위의 식을 최대화할 수 있는 $X, Y, \beta$를 찾는다.
그 방법으로 alternating gradient ascent 방식을 소개한다. 각각의 iteration에서 $x_u$와 $\beta_u$를 고정하고 값을 업데이트하고 그 다음에는 $y_i$와 $\beta_i$를 고정하고 값을 업데이트 하는 방식이다. 식으로 표현하면 아래와 같다.
이 과정은 유저 수와 아이템 수에 선형적인데, 그 수가 커지면서 한계에 도달하는 경우 negative sample을 샘플링해서 $\alpha$를 감소시켜서 해결할 수 있다. 혹은 AdaGrad 알고리즘을 활용할 수 있다.
원문: web.stanford.edu/~rezab/nips2014workshop/submits/logmat.pdf
'개발 > Machine Learning' 카테고리의 다른 글
Matrix Factorization (0) | 2021.11.21 |
---|