본문 바로가기
인공지능/추천 시스템

[논문리뷰] NCF, 2017

by judy@ 2023. 8. 10.

이 글은 2017 발표된 Neural Collaborative Filtering 논문을 리뷰한 글입니다. 논문 구현이 궁금하다면 논문 구현 포스팅을 참고하시길 바랍니다.

목차

    💡 Paper Information.                                                                                

     

    📍 Summary.                                                                                             

    • 당시 추천 추천 시스템에서 DNN은 보조적인 정보를 모델링하는 역할만 하고, 협업 필터링에는 내적에 의거한 matrix factorization을 주로 사용
    • 내적을 신경망 구조로 대체한 Neural network-based Collaborative Filtering, 줄여서 NCF framework를 제시
    • NCF는 내적을 일반화한 1) GMF, MLP 구조로 대체한 2) MLP, 두 모델을 앙상블한 3) NeuMF 모델을 포함
    • 당시 2 종류의 데이터셋(movielens 1M, Amazon Beauty)에 대해 SOTA를 달성함

     

    🔧 Methods.                                                                                              

    1. 이전 연구의 한계

    1) Learning from Implicit Data

    • 상호작용하지 않은 아이템에 대한 score를 추정하는 것이 핵심 문제
    • eplicit 데이터가 풍부한 경우 pointwise loss를 사용하여 true, pred의 squared error 를 최소화하는 회귀 방식을 따름
    • implicit 데이터의 경우, 주로 관찰되지 않은 엔트리를 샘플링하여 negative 두며, pairwise learning을 활용하여 관찰된 엔트리가 관찰되지 않은 엔트리에 비해 상위에 랭크되도록 하는 것을 목표로 함. 그래서 두 값의 차이를 줄이기보다는 두 값의 margin을 최대화함.
    • NCF는 pointwise와 pairwise learning를 모두 지원함

    2) Matrix Factorization

    $$ \hat y_{ui} = f(u, i|p_u, q_i) = p^T_u q_i = \sum^K_{k=1} p_{uk}q_{ik} $$

    • 수학적으로는 위와 같이 정의할 수 있음
    • matrix factorization은 유저와 아이템을 같은 latent space에 매핑하고, pu와 qi를 내적하여 score를 추정하는 방법임
    • 즉, 두 다른 유형의 개체는 같은 공간에 표현되어야 하며, 내적은 결국 두 벡터의 선형 변환을 통해 score를 나타내는 것과 같음
    • 유저와 아이템을 같은 공간에 매핑하므로, 아래 그림처럼 특정 관계는 제한된 공간 내에서 표현하기 어려운 문제가 발생함
    • 이러한 단점은 latent space의 dimension을 키우는 방식으로 어느 정도 해소할 수 있음. 하지만, 일반적인 추천 환경은 매우 sparse하므로, 너무 큰 dimension은 overfitting을 야기함. 이 부분은 MF의 한계임.
    • 새로이 제시하는 NCF는 이러한 MF의 단점을 해소할 수 있음

    MF의 한계


    2. NCF

    NCF는 일반적인 프레임워크로, MF의 일반화, MLP, 두 모델을 앙상블한 새로운 neural matrix factorization 모델을 지원함

    1) general framework

    neural collaborative filtering framework

    • $v^U_u$와 $v^I_i$는 입력 특징으로, 여기서는 user와 item를 원핫 벡터로 표현하여 사용하지만, 일반적인 특징 표현을 사용하는 등의 방식으로 얼마든지 커스텀 가능
    • 입력 층의 바로 위는 임베딩 층으로, fully connected 되어 희소한 표현을 dense 벡터로 투영해줌. 이 임베딩들은 latent factor model의 latent vector로 해석될 수 있음.
    • 임베딩층의 데이터는 다층 신경 구조로 입력되며, neural collaborative filtering layer라고 부르기로 한 이 층은 latent vector를 prediction score로 매핑해줌
    • 각 층은 인터렉션을 캡처할 수 있는 어떠한 형태로도 커스터마이즈될 수 있으며, 기본적으로 target과 prediction의 pointwise loss를 최소화하는 방향으로 학습한다. 단, BPR에서 사용한 pairwise loss로도 얼마든지 변경 가능하다.

    NCF의 예측 모델은 아래와 같이 쓸 수 있다.

    $$ yˆu_i =f(P^Tv^U_u, Q^Tv^I_i|P, Q, Θ_f) $$

    • P(M,K)와 Q(N,K)는 latent factor matrix, Θf는 인터렉션 함수인 f의 모수 의미

    f가 multi-layer neural network일 때 아래와 같이 정의할 수 있음

    $$ f(P^Tv^U_u, Q^Tv^I_i) = φ_{out}(φ_X(...φ_2(φ_1(P^T v^U_u, Q^Tv^I_i ))...)) $$

    • 이 때, φout과 φx는 각각 output layer와 x번째 CF 층의 레이어를 의미

    NCF의 학습

    • 모델의 파라미터를 학습하기 위한 기존 pointwise 방식에는, 회귀의 square loss가 있음
    • observations가 가우시안 분포에서 생성된다는 가정에 의해 squared loss는 설명될 수 있음. 그런데, implicit feedback은 0 또는 1의 값을 가지므로 이 가정에 부합하지 않음. 마지막 층의 활성화 함수로 로지스틱 함수와 같은 확률적 함수를 사용하여 결과 값을 제한해야 함. 위 세팅에 따르면 우도 함수를 아래와 같이 정의할 수 있음.
    • $$ p(Y,Y−|P,Q,Θ_f)= \prod_{(u,i) \in y} \hat y_{ui} \prod_{(u,i) \in y^-} (1−\hat y_{ui}) $$
    • negative log를 씌우면, binary cross-entropy loss (log loss)와 같아지며, SGD를 사용하여 최적화함.
    • 매 iter 마다 observed data의 개수만큼 unobserved interaction을 uniform하게 샘플링하는데, 이 부분은 인기 있는 아이템에 치중되게 하면 더 잘 될 수도 있음. 다음 과제로 남겨둠

     

    2) Generalized Matrix Factorization (GMF)

    • MF는 NCF의 special case로 해석될 수 있다. MF는 임베딩간의 내적이므로, 위 프레임워크에서 neural CF layer의 매핑 함수를 내적으로 정의하면 NCF를 통해 MF를 나타낼 수 있게 된다.
    • $$ \hat y_{ui} = a_{out}(h^T(p_u ⊙ q_i)) $$
    • 위 정의에서 a_out는 활성화 함수, hT는 가중치인데, 이를 identity, 1 로 세팅하게 되면 NCF를 통해 MF를 복원할 수 있게 된다
    • NCF에서는 a_out으로 sigmoid를 사용하고, log loss를 통해 hT를 업데이트하는 방식으로 MF를 일반화하여, Generalized Matrix Factorization 모델을 제시

     

    3) Multi-layer Perceptron (MLP)

    • Matrix Factorization에서 임베딩간 elementwise product 연산으로는 유저와 아이템의 인터렉션을 캡처하는 데에 한계가 있음
    • 이를 개선하기 위하여, 상호작용을 캡처하기 위해 여러 층의 히든 레이어를 쌓는 방식을 제안함

    • 위 수식 처럼 먼저 임베딩을 concat한 뒤, 가중합과 활성화 함수로 이루어진 dense layer를 여러 개 통과시키고, 마지막 결과에 시그모이드를 적용하여 최종 출력을 냄
    • 위에서 W, hT와 b는 각각 가중치와 편향으로 학습되는 파라미터이다. 이 때, 활성화 함수로는 sigmoid, tanh, relu 를 사용할 수 있는데, 시그모이드는 gradient vanishing 문제가 있고, tanh는 시그모이드의 확장이라 조금 개선되지만 여전히 문제가 있어서 relu를 씀
    • 모델의 구조는 아래층은 넓고 위로 올라갈수록 좁아지는 tower pattern를 사용하며, halving(반씩 줄어드는) 구조로 구성함.

     

    4) Fusion of GMF and MLP

    • GMF는 두 임베딩을 선형 결합하여 결과를 내고, MLP는 비선형 결합의 연속으로 결과를 낸 것인데, 복잡한 유저-아이템 상호작용을 캡처할 수 있는 모델을 학습하기 위해 두 모델을 앙상블함
    • 일반적으로 임베딩을 공유하는 방식(Neural Tensor Network, NTN)으로도 적용이 가능하나, 이러한 경우 임베딩의 값이 제한되게 되어 각각의 모듈이 다른 임베딩 레이어를 사용하게 구성함. 각각의 브렌치에서 얻은 결과를 concat하는 방식으로 fusion을 시도함. 그리고 이 구조를 NeuMF라 칭함

    neural matrix factorization model

    NeuMF의 Pre-training

    • Fusion한 모델은 non convexity한 objective function을 가져 로컬 미니마에 빠지기 쉬움. 이름 방지하기 위하여 각각의 모듈을 사전학습하는 방식을 사용함. 사전학습 시에는 adam을, 이후 학습에서는 vanilla sgd를 사용함.
    • 마지막 레이어에서 concat할 때, α라는 두 결과가 trade_off 관계로 반영되게하는 하이퍼파라미터를 둠

     

    📊 Experiments.                                                                                     

    • NCF가 implicit CF 방법에서 sota를 달성하는지
    • 추천 태스크에서 log loss가 먹히는지
    • 은닉 층이 깊어질수록 학습이 더 잘되는지

    1. Experiments Settings

    1) Data Sets

    사용한 데이터셋 정보

     

    1. MovieLens 1M
      • 협업 필터링 알고리즘을 평가하는데에 널리 사용되는 데이터
      • 최소 20개의 평점을 가지는 유저에 대한 1M 평점 데이터
      • explicit feedback 데이터인 평점을 0, 1의 implicit 데이터로 바꿈. 평점을 매겼는지 안매겼는지의 문제로 바꿈
    2. Pinterest
      • 콘텐츠 기반 이미지 추천의 평가하는 implicit 데이터
      • 원 데이터는 매우 희소하여, 최소 20개의 interaction을 가지는 유저에 대해서만 필터링함
      • 인터렉션은 각 유저가 자신의 보드로 핀했는지 여부를 나타냄 

     

    2) Evaluation

    • leave-one-out
      • 최신 인터렉션을 테스트 데이터로 하고, 나머지 데이터를 학습에 사용함
      • 모든 아이템에 대해서는 time-consuming, 사용자와 상호작용하지 않은 100개의 아이템을 무작위 샘플링하는 일반적인 전략 사용
      • 관련 포스팅
    • metrics
      • HR@10 (Hit Rate)
      • NDCG@10 (Normalized Discounted Cumulative Gain)
    • Baselines
      • ItemPop, ItemKNN, BPR, eALS
    • Parameter Settings
      • keras, open code
      • initialized weights with a Gaussian distribution (mean:0, stddev: 0.01)
      • batches: [128, 256, 512, 1024]
      • learning rate: [0.0001, 0.0005, 0.001, 0.005]
      • predictive factors (마지막 히든 레이어 유닛 수): [8, 16, 32, 64] #너무커지면 오버피팅
      • MLP hidden layers: factor가 8일 때는 32 → 16 → 8, embedding 16
      • NeuMF: a: 0.6

    2. Performance Comparison

     

     

    • NeuMF가 가장 위에 있음. 모든 경우에서 가장 성능이 좋음
    • predictive factors의 수가 클수록 성능이 대체로 좋아지는데, 너무 커지면 오버피팅되어 오히려 떨어짐

    3. pre-training 여부에 따른 성능 차이

    • pre-training을 하면 성능이 0.01 정도씩 차이남. 솔직히 큰 차이는 아님
    • 대체로 pre-training 한 쪽이 더 나음

    4. 학습 곡선

    • 무비렌즈, factor = 8일 때, GMF < MLP < NeuMF 순으로 loss가 작고, 성능이 좋음.
    • multi-layer를 포함하는 모델에서는 너무 많이 반복 학습하면 성능이 떨어짐 (오버피팅)

    5. Negative 개수에 따른 성능 차이

    • BPR의 경우 pairwise라서 1pos, 1neg 이지만, NCF에서는 pointwise라서 얼마든지 조절 가능
    • pairwise 보다는 pointwise가 성능이 더 좋은 것을 알 수 있음. 3-6개가 적절한 샘플링 비율임
    • pinterest 보면 7개 이상되면 오히려 쭉쭉 떨어지는데, 이는 negative sample이 너무 aggressive하게 반영되어서 발생하는 문제일 듯

    6. Is Deep Learning Helpful?

    • MLP-0 는 임베딩 → 예측이 바로 연결된 구조인데, 성능이 매우 좋지 않음. 심지어는 개인화되지 않은 모델인 ItemPOP에 비해서도 성능이 떨어짐. 즉 simple concat은 interaction capture를 잘 못함
    • 층은 깊어질수록 더 성능이 좋아지는 것을 확인함

     

    🧐 Thoughts                                                                                              

    • NCF는 추천 프레임워크이며, 여기서는 MF를 일반화한 GMF, MLP, 두 모델을 앙상블한 NeuMF의 세 종류의 인스턴스 예를 보여줌
    • 비교 차트를 통해, 선형성을 캡처하는 GMF와 비선형성을 캡처하는 MLP는 어느 하나가 더 우월하다고 말하기는 어려움. 다만 두 모델을 앙상블한 NeuMF 모델은 두 모델에 비해 약간 높은 성능을 보임. user-item interaction을 캡처할 때 비선형성 뿐만 아니라 선형성을 함께 고려하는 것이 의미가 있음을 파악함.
    • 이 모델의 경우는 ID 자체를 임베딩하는 방식임. 이러한 경우, CF의 cold-start 문제와는 별개로 학습에 포함되지 않은 신규 유저, 아이템에 대하여 추론이 불가능한 문제가 있음. 이와 같은 문제는 ID를 feature로 대체하는 방식으로 어느 정도 해소가 가능함. NCF cold-start problem stackoverflow 참고
    반응형