본문 바로가기

Data Science/추천시스템과 NLP

[추천시스템] 딥러닝과 추천시스템, Neural CF(Collaborative Filtering)

반응형

이번 포스팅에서는 추천시스템의 협업 필터링에 딥러닝을 적용한 모델인 Neural Collaborative Filtering인 이른바 Neural CF에 대해 배워보려고 한다. 해당 포스팅을 이해하는 데 있어서 추천 시스템의 협업 필터링에 대한 이해가 필요할 수 있어 협업 필터링에 대한 포스팅은 여기를 참고하자.

 

추천시스템에 뉴런을 적용한다?


1. 추천시스템에 딥러닝이 등장한 이유

딥러닝이 등장한 이유는 어떻게 보면 항상 당연한 이유로부터 출발하는 듯하다. 바로 주어진 데이터가 선형의 관계로 설명될 수 없을 때이다. 즉, 선형회귀, 의사결정나무 같은 선형 함수로 구현되는 머신러닝 모델들로 풀 수 없는 문제는 그동안 분야를 불문하고 모두 딥러닝이 적용되어 왔다. 왜냐하면 딥러닝이 주어진 데이터의 비선형 관계를 파악할 수 있었기 때문이었다.

 

추천시스템도 동일한 상황이다. 주어진 User, Item 데이터가 선형 함수로만은 데이터간의 관계를 설명할 수 없게 되었다. 기존에 배웠던 협업필터링 추천 시스템은 선형 함수를 기반으로 구현된 모델이었다. 이제 비선형 관계도 파악하기 위해 고안된 딥러닝의 뉴럴 네트워크를 적용시킨 Neural CF에 대해 알아보자!

2. Neural CF

Neural CF에 대해 텍스트로 설명하기 이전에 Neural CF 모델의 큰 구조를 살펴보고 구성요소를 하나씩 뜯어보면서 살펴보기로 하자.

 

Neural CF의 기본적인 구조

2-1. input Layer, Embedding Layer

인풋 레이어를 먼저 살펴보자. 인풋으로 들어가는 데이터는 User 벡터, item 벡터 각각 두개인데, 특이한 점은 둘 다 모두 One-hot 벡터 형태로 변환해주었다는 것이다. 모두들 알다시피 One-hot 벡터는 0이 매우 많기 때문에 Sparse한 벡터가 된다. 그래서 Neural CF는 이 Sparse한 벡터를 일종의 Embedding 벡터인 Latent 벡터로 줄여준다. 추측하건데 Latent 벡터로 축소할 때는 SVD, PCA 등 여러가지 차원 축소기법을 적용하면 될 것이다. 그리고 차원을 축소한 User의 Latent 벡터, item의 Latent 벡터 두 개를 붙여서(concatenate) 본격적인 뉴럴 네트워크의 입력으로 넣어준다.

2-2. Neural CF Layer

그동안 배워왔던 딥러닝 그 중에서도 FNN(Feed-forward Neural Network)처럼 여러개의 층을 구성으로 하는 뉴럴 네트워크이다. 중간에 선형 또는 비선형 활성함수를 사용할지는 사용자의 선택에 따라 달라질 것이다.

2-3. Output Layer

Neural CF Layer를 거쳐서 나온 최종 결과값에 sigmoid 비선형 활성함수를 적용해 결과값은 0과 1사이의 값인 확률값으로 변환해준다. 그리고 이 확률값이 0.5보다 크면 1, 작으면 0으로 다시 변환해준다.(로지스틱 회귀처럼!) 그리고 마지막으로 $y_{ui}$ 값으로 정답을 모델에 제공해주며 지도학습을 수행한다.(딥러닝은 지도학습인 점을 잊지말자)

 

그런데 궁금한 점이 생겼다. 모델 구조도 알긴 알겠는데 왜 본질적으로 해결하려는 문제가 이진분류 문제일까? 그것은 바로 Neural CF 모델이 User-Item 간의 상호작용(인터렉션)이 있었는지 없었는지를 분류하는 문제를 해결하기 위해 고안되었기 때문이다. 즉, User-item 간의 상호작용인 일종의 implicit Feedback 데이터를 활용하는 것이 바로 Neural CF이다.

3. Generalized MF(Matrix Factorization)

갑자기 Generalized MF라는 용어가 등장했다. 이 Generalized MF는 Neural CF의 특별한 케이스라고 볼 수 있다. 특별한 케이스라는 것은 무엇을 의미할까? 이를 이해하기 위해서 위에서 소개한 Neural CF 구조에서 Neural CF Layer 내부의 수식을 약간 살펴볼 필요가 있다. Neural CF Layer도 일반적인 딥러닝 FNN 구조와 마찬가지로 $y = ax+b$ 에 활성함수를 씌워주고 그 결과값을 다시 다음 Layer의 인풋으로 넣어주고 활성함수를 씌워주고... 이 과정의 반복이다. 마치 아래 그림처럼 말이다.

 

 

위 그림이 일반적인 FNN의 Layer 구조라고 한다면, Neural CF는 위 $x$에 User, Item 벡터를 concatenate 한 벡터를 넣어주면 된다. 그래서 Neural CF Layer의 수식을 일반화하면 다음과 같아진다.

 

 

위 수식에서 $h^T$가 값이 모두 동일한 Uniform vector이고 활성함수가 $\delta$(시그모이드)가 아닌 선형 함수라고 한다면 우리가 이전에 배웠던 협업 필터링(CF) 종류 중 잠재 요인 기반인 Matrix Factorization 모델과 동일하게 된다. 그래서 이름이 Generalized MF가 Neural CF의 특이한 케이스라고 한다. Generalized MF를 일반화한 수식은 다음과 같아진다.

 

Generalized MF

4. MLP MF

MLP MF(Multi-Layer Perceptron Matrix Factorization)는 위에서 배운 Generalized MF에서 Layer를 여러개 추가하고 각 Layer 마다 비선형함수를 적용했을 때이다. 그림으로 표현하면 다음과 같아진다.

 

MLP MF의 구조

5. Generalized MF + MLP MF

이번엔 Generalized MF 와 MLP MF를 결합한 Neural CF 모델이다. 결국 딥러닝 앙상블 모델이라고도 할 수 있겠다. 이번에도 모델의 구조를 살펴보자. 

 

Generalized MF + MLP MF의 결합 모델 구조

 

특이한 점은 Generalized MF의 Output과 MLP MF의 Output을 concatenate 해서 다시 Neural CF의 인풋으로 넣어주어 모델링하고 최종 결과값을 내뱉는 구조로 이루어진다. 이렇게 두 개를 결합하는 이유는 Generalized MF가 User, Item 간의 선형적 관계를 파악하고 MLP MF가 User, Item 간의 비선형적 관계를 파악하도록 해서 동시에 두 마리 토끼(?)를 잡으려는 의도이다. 


다음 포스팅에서는 딥러닝을 활용한 또 다른 추천시스템인 Factorization Machines에 대해 알아보자.

 

반응형