본문 바로가기
추천시스템

딥러닝과 추천시스템

by 볼록티 2021. 3. 18.
728x90
반응형

 

  딥러닝은 여러개의 은닉층을 쌓아 놓은 다층 신경망 구조라고 개략적으로 볼 수 있다. 여기서 추천시스템에 딥러닝을 적용하려면 다소 까다롭게 느껴진다. 왜냐하면 rating matrix를 자주 보지도 않았을 뿐더러 더군다나 null 값이 상당히 많이 존재하기 때문이다. 그리고 기존의 우리가 딥러닝 input 으로 넣어주는 값은 대게 M x N 이라는 case by fearuse 형태의 독립변수 행렬이었고, loss 값 계산을 위해서는 M x 1 이라는 종속변수 벡터를 사용했기 때문이다. 

 

 그래서 추천시스템에서는 앞서 스터디 했던 MF 알고리즘에서 본 것 처럼 user x latent factor, item x latent factor 두 행렬을 input으로 넣는 작업으로 시작한다. 이 방법만 있는 것은 아니다.! 그리고 먼저 하는 것은 hidden layer 가 없는 구조를 표현해보기 위한 작업이다. 학습하고 그런 부분이 아니다! 

 

 아래의 그림을 보면 앞서 말했던 MF 알고리즘으로 얻을 수 있었던 P, Q^T 행렬을 볼 수 있다. 여기서 위의 두 행렬은 각각 user, item에 대한 latent feature 로 구성된 행렬이라는 것을 알 수 있다.

 

 Input layer를 먼저 살펴보자. input layer를 보면 one-hot encoding으로 representation된 것을 볼 수 있다. input이 두개처럼 들어가는 것을 볼 수 있는데, 이것은 각각 user에 대한 것, item에 대한 것이다. 각각 그래서 n차원, m차원으로 표현된다. input layer에 들어가는 입력은 아래의 One-hot Representation 표에 나타난 것처럼 user는 n x n, item은 m x m의 형태로 들어가게 된다. 그리고 대각 원소만 1을 주고 나머지는 0인 행렬로 되어 있는데, 여기서 One-hot Representation 이 n x n, m x m 과 같이 행과 열이 같은 차원을 갖는 이유는 예를 들면, 사용자의 경우 One-hot Encoding의 목적이 각 사용자를 구분하는 것이기 때문이다. 그래서 feature를 일종의 더미변수처럼 사용해서 사용자 한명당 하나의 feature만 1의 값을 갖고, 역으로 한 feature는 한 명의 user에만 1의 값을 갖도록 한다. 

 Embedding Layer 라고 되어 있는 부분은 MF를 통해 얻은 latent factor(k)에 해당한다. 즉 사용자에 대해서 k개, 그리고 아이템에 대해서 k개의 노드를 갖는 layer이다. 각 노드는 하나의 latent factor를 나타낸다. 사용자 input의 모든 feature에서 사용자 Embedding Layer의 모든 node는 연결되어 있는 fully connected 형태이다. 즉 여기서는 n x k 개만큼의 화살표가 있다고 생각하면 된다. 아이템 역시 사용자와 동일하게 구성되어 있다. 아래의 그림에는 한 사용자, 한 아이템에 대해서만 $p_{2}, q+{m-1}$ 와 같이 표시한 것이다. 

 모든 화살표가 그려진 것을 상상해보면, 각 각의 n x k 개의 화살표가 P 행렬의 원소들이고, m x k 개의 화살표들이 Q^T 행렬의 원소들이라고 보면 된다. input이 one-hot encoding 이기 때문에 한명에 사용자에 대해 각각 latent factor 개수만큼 k 씩 연결이 활성화된다는 의미이다.

 Element-wise Product Layer와 같은 경우는 Embedding Layer의 두 벡터의 dot product 연산을 위한 layer이다. 쉽게 말해 P x Q^T 연산에 해당된다. 아래와 같이 주황색 선을 따라 계산하게 되면 P x Q^T 행렬의 원소값이 나오게 된다. 만약 학습이 진행된다면 prediction layer의 scalar output인 $\hat{y}_{ui}$ 는 실제 P x Q^T 행렬의 해당 원소값 $r_{ui}$와 오차를 비교하게 된다.

Neural Network with MF

 

One-hot Representation For input

 위에서 빠진 것이 bias(평가경향) 이다. 그래서 아래의 식에서 처럼 사용자, 아이템의 평가경향을 식에 추가해 주어야한다. 앞서 P, Q^T를 신경망으로 나타낸 것처럼 나타내는데, 사용자와 아이템에 대하여 각각 하나의 노드를 가지는 layer를 하나씩 추가해준다. 추가된 것의 결과는 dot product한 결과값에 더해주면 된다.

 MF 를 활용한 예측 값 계산식을 보면 아래와 같다. 여기서 $b$는 전체 평균이고, 데이터가 처음에 주어지면 하나로 정해지는 값이다. 그리고 $bu_{i}$는 해당 사용자의 평균에서 전체평균을 뺀 값이다. $du_{i}$는 전체 평균을 제거한 후 아이템 $j$의 평가 경향(아이템 $j$의 평균과 전체 평균의 차이)라고 생각하면 된다. 빠진 $b$ 의 경우는 단순이 스칼라 값이 하나 있는 것이라 신경망 투입전에 미리 빼주고 나중에 예측치에다가 더해주는 식으로 하는것이 훨씬 간단하여 그렇게 한다.

$\hat{r}_{ij} = b + bu_{i} + bd_{i} + \Sigma_{k=1}^{K}p_{ik}q_{ki}$

 

 

 

 신경망에 어떻게 구겨넣는지 구성에 대해서 살펴보았다. 이제 본격적으로 추천시스템에 딥러닝을 어떻게 적용시킬지 살펴보도록 하자. 먼저 앞서 보았던 P, Q^T 행렬과 같이 사용자와 아이템의 특성을 나타낼 수 있는 embedding 데이터가 필요하다. 그렇게 사용자와 아이템을 embedding 해서 입력으로 넣으면 아이템 간의 특성을 학습해서 예측값을 생성해낼 수 있다.

 추천시스템에 딥러닝을 적용한다는 것은 신경망 구조와 hidden layer가 생긴 것 말고는 별다른 차이가 없다. 일반적으로 딥러닝은 hidden layer이 다수 존재해서 다양한 패턴을 학습할 수 있는 것이 장점이기 때문에 딥러닝을 추천에 적용할 때 hidden layer는 필수다. 그 구현한 구조가 아래의 그림과 같다.

 가장 아래에 위치한 것이 우리가 one-hot encoding을 해서 넣었던 input layer 가 되겠고, 이를 Embedding Layer에 로 연결시켜서 아래와 같이 User Latent Vector, Item Latent Vector 를 만든다. 그리고 이제 이 둘을 합쳐서 만든 첫번 째 층이 Layer1이 된다. 이 층은 User Latent Vector, Item Latent Vector 둘을 인공신경망에서 사용되는 concatenate를 사용해서 앞뒤로 그대로 붙이는 것이다.

 첫번째 층을 완성하게 되면 적절히 층을 쌓아나가면 된다. 그리고 맨 위에는 output 으로써 예측 평점이 놓이게 된다.

 

 

 

 

 

 

 

 

 

 

 

 

ref) Xue, H. J., Dai, X., Zhang, J., Huang, S., & Chen, J. (2017, August). Deep Matrix Factorization Models for Recommender Systems. In IJCAI (Vol. 17, pp. 3203-3209).

728x90
반응형

댓글