- 논문 링크(274회 인용)
Summary
- matrix factorization부터 시작된 추천시스템 연구는 dot product을 mlp layer로 바꾸는 방향으로 진행되었다.
- 기본 아이디어는 다소 간단한 연산인 dot product에 비해서 non-linear 관계를 모델링할 수 있는 mlp layer가 나은 선택지가 될 수 있다는 것이다.
- 본 논문에서는 dot product 대신, mlp layer을 사용했을 때 발생하는 여러 문제에 대해 논의한다. 이는 서비스에 추천 시스템을 적용하고자할 때 발생하는 실용적인 문제를 포함한다.
- 게다가 하이퍼파라미터 튜닝만 적절히 한다면 neural mf에 준하는 성능을 mf에서도 얻을 수 있음을 실험을 통해 보여준다. 이를 통해 추천 시스템 문제에서 mf가 효과적인 default option이 될 수 있음을 보인다.
Motivation
- 추천 시스템은 유저에게 정확한 추천을 해주는 것도 중요하지만, 서비스에 적용될 때 빠르게 inference을 하는 것도 중요하다.
- neural mf는 mf에 비해 비선형 관계를 모델링할 수 있겠으나 neural network에서 inference을 태워야하므로 빠르게 추론하는데 한계가 있다.
- mf가 neural mf에 비해 속도면에서 이득을 취할 수 있으나 정확도 측면에서 손해를 얻을 수 있다는게 중론이었고 neural mf도 유사한 논의를 전개했다.
- 본 논문에서는 neural mf의 실험 세팅과 유사한 환경에서 실험을 진행해보고 mf을 학습할 때 파라미터 튜닝을 더 세심하게 진행한다.
- neural mf 논문 내용을 반박함으로써 mf가 추천 시스템 분야에서 기본 알고리즘으로 효과적일 수 있음을 보인다.
Approach
Definitions
유저 임베딩과 아이템 임베딩을 사용하여 유저와 아이템간의 점수를 계산하는 함수를 similarity function이라고 하는데, 크게 dot product와 mlp을 사용한 유사도 함수가 있다.
- 본 논문은 함수 $\phi: \mathbb{R}^d \times \mathbb{R}^d \rightarrow \mathbb{R}$을 연구한다. 즉, d차원 벡터 두개를 입력으로 하여 하나의 scalar을 뱉어내는 함수에 관심이 있다.
- 유저, 아이템 벡터는 각각 d차원이다: $\mathbf{p} \in \mathbb{R}^d, \mathbf{q} \in \mathbb{R}^d$
- 유저, 아이템 벡터는 행렬분해의 결과일 수도 있고 neural network의 학습 결과일 수도 있다.
두 임베딩 벡터의 dot product는 아래와 같이 정의된다.
neural mf 논문에서는 dot product로 두 임베딩 벡터의 점수를 내는 부분을 neural network로 학습하는 것으로 대체한다. $l$개의 layer을 쌓는 mlp을 생각해보면, $\phi$는 아래와 같이 표현할 수 있다.
유저 벡터와 아이템 벡터가 하나의 벡터로 concatenate 되어서 입력값으로 들어간다.
neural mf 논문에서는 한 단계 더 나아가서, $\phi^{MLP}, \phi^{dot}$을 합치는 것을 제안한다. 이때, dot product을 좀 더 일반적인 행렬 분해로 아래와 같이 나타낸다.
여기서 weight가 one vector이고 $\sigma$가 identity function이라면 mf와 동일한 형태가 된다.
Revisiting NCF Experiments
Experimental setup
- moveilens 1m 데이터와 pinterest 데이터를 binarize하여 사용한다.
- 테스트 데이터는 유저별로 가장 마지막에 소비한 아이템을 masking한다. 훈련 데이터는 그 이전의 모든 데이터를 사용한다.
- withheld 테스트 아이템을 포함하여 101개의 아이템을 추천한다.
- 만약 상위 10개 아이템에 테스트 아이템이 포함되어 있다면 1, 그렇지 않다면 0으로 정의하여 hit ratio (i.e., recall)을 계산한다.
- 상위 10개 아이템 중에서 ndcg을 계산한다. r을 테스트 아이템의 순위라고 할 때, $1/\log (r+1)$로 정의한다.
Models, loss and training algorithm
- 세개의 모델을 비교한다: $\phi^{MLP}, \phi^{NeuMF}, \phi^{dot}$
- 행렬 분해는 l2 regularization을 추가한 logistic loss을 사용한다. 파라미터 업데이트는 sgd을 negative sampling과 함께 진행한다.
- embedding dimension을 다양하게 하여 실험을 진행한다.
Results
- 여기서 neural mf 관련한 방법의 결과는 본 논문의 저자가 코드를 돌려서 얻은 것이 아니라 neural mf 논문에 있는 결과 값을 그대로 가져온 것이다.
- mf vs mlp: 모든 차원에 대해 mf의 성능이 mlp보다 낫다.
- mf vs neumf: 모든 차원에 대해 mf의 성능이 neumf보다 낫다.
- mf vs pretrained neumf: 일부 차원에 대해 mf와 비슷한 성능을 보이기도 했으나, 대부분의 경우에 mf가 더 좋은 성능을 보인다.
- mlp 단일 모델이든, ensemble 모델이든, mf가 더 좋은 성능을 보임을 실험으로 알 수 있다.
Further comparison
- neural mf 논문에서 보고된 실험 결과가 cherry-picked 되었다는 연구 결과가 있다. 즉, 선택된 테스트 데이터에 대해서 가장 좋은 성능을 내는 이터레이션에 대한 metric이 보고되었다는 것이다.
- 반면에, 본 논문의 mf는 validation set에 대한 stopping iteration까지 hyperparameters로 포함하기 때문에 cherry-picked 되지 않았다.
Learning a dot product with MLP is hard
mlp는 입력값과 출력값의 관계를 approximation하는 universe function으로 여겨진다. 하지만 분명히 trade off가 있는 법. mlp 계열의 모형은 더 많은 파라미터와 데이터가 있어야 정확한 모형이 만들어진다. rnn이나 cnn 같은 구조를 왜 mlp가 approximation하지 못하는지에 대해 조금만 생각해보면, mlp가 가지는 한계를 알 수 있을 것이다. 다만, dot product와 같은 단순한 구조조차도 mlp가 잘 근사하지 못하는 것일까? 이를 실험을 통해 알아보고자 한다.
Experimental setup
- 하나의 training 데이터와 두개의 test 데이터를 생성한다.
- 임베딩 $\mathbf{p}, \mathbf{q}$을 정규분포 $\mathcal{N}(0, \sigma^2_{label})$에서 추출하고 true label을 $y(\mathbf{p}, \mathbf{q}) = <\mathbf{p}, \mathbf{q}> + \epsilon$으로 정의한다. 여기서 $\epsilon \sim \mathcal{N}(0, \sigma^2_{emb} I)$이다.
- 이렇게 세팅하고 M개의 유저 임베팅과 N개의 아이템 임베딩을 뽑는다. 그리고 100M개의 user-item 조합을 랜덤으로 뽑고 여기서 90%,10%을 각각 training/test 데이터로 정한다.
- 두번째 테스트 데이터는 fresh 임베딩 데이터로, $\mathcal{N}(0, \sigma^2_{emb} I)$에서 추출한다.
- training 데이터에 대해 mlp을 학습한다. 네트워크 아키텍쳐는 ncf paper을 따라간다.
- metric은 mlp가 예측한 유사도와 true 유사도간의 rmse로 계산한다.
- 이때 모든 예측값을 0으로 했을 때의 trivial rmse도 함께 비교한다.
- 또한 dot product model와 true 유사도간의 rmse도 계산한다.
- mlp의 rmse와 dot product의 rmse 간의 차이를 보고한다.
- 중요한 것은 실험에서 hyperparameter인 $\sigma^2_{label}, \sigma^2_{emb}$을 정하는 것이다.
- 핵심은 mlp의 rmse와 dot product의 rmse 간의 차이가 어느정도 될 때, 어떤 해석을 할 수 있느냐이다.
- 이를 위해 넷플릭스, movielens을 사용한 이전 연구 결과를 이용한다.
- 예를 들어, 넷플릭스 데이터는 rmse가 0.8712에서 0.8616까지 가는데 1년이 걸렸다. 0.01점을 내리는데 1년이 걸린 것이다.
- 또한 movielens 데이터는 rmse가 0.7815에서 0.7634까지 가는데 4년이 걸렸다.
- 이 차이에 대한 감을 가지기 위해 각 데이터에서 나온 rmse을 사용하여 hyperparameter을 정했다. (자세한 과정은 논문 참조)
- training 데이터가 많고 wide해질 수록, rmse의 차이가 줄어드는 것을 알 수 있다.
- 하지만 이때 필요한 데이터의 수는 지수적으로 증가함을 알 수 있다. rmse의 차이가 지수적인 형태를 띄기 때문이다.
- 게다가, 차원이 높아질수록 mlp가 dot product 구조를 학습하기 어려운 것을 확인할 수 있다. 유의미한 차이인 0.01 수평선에서 상당히 멀리 떨어져 있기 때문이다.
- 결론적으로 mlp가 universial approximator로 알려져있으나, dot product와 같은 단순한 구조도 잘 학습하지 못함을 실험적으로 알 수 있다.
Conclusion
- 본 논문에서 사용한 mf는 wmf와는 또 다른 형태로, y label을 0과 1의 binary로 보고 cross entropy loss을 학습시킨다. 또한 bias term도 추가한다.
- 구글에서 발표한 논문이고 코드도 공개되어 있으니.. 이 형태의 mf가 wmf와 어떤 차이점을 지니는지 한번 살펴봐야겠다.
- 논문 내용 자체는 상당히 흥미롭다. ncf paper의 실험 결과를 그대로 가져다 쓰면서 mf을 세심하게 튜닝하여 neural mf보다 더 나은 성능을 보인게 인상적이다.
- 앞으로 실험할 때, 이 페이퍼에서 나온 mf 학습 과정을 따라가면 그래도 괜찮은 mf 성능을 얻을 수 있지 않을까 싶다.
댓글