Contents
Abstract
Generative Adversarial Networks (GANs), Variational Auto-Encoder (VAEs) 등과 같은 생성형 모델을 활용해서 추천 시스템을 구축하는 연구가 많이 제안되고 있다. 그러나, GANs, VAEs 등과 같은 생성형 모델은 노이즈를 주입해서 사용하기 때문에 노이즈로 인한 Bias가 존재할 수 있다. 이와 같은 문제를 해결한 Diffusion Model이 나왔고, 본 논문에서는 Diffusion Model을 활용한 Diffusion Recommener Model (DiffRec)을 제안한다. DiffRec은 노이즈를 완화해 사용자의 상호 작용을 효과적으로 반영할 수 있다. 추가적으로 Diffusion Model의 문제점인 많은 리소스가 요구되고 사용자 선호도의 시간에 따른 변화를 반영하기 위해 L-DiffRec, T-DiffRec을 제안한다. L-DiffRec은 item을 군집화한 후 Latent Space에서 Diffusion Process를 사용하고, T-DiffRec은 시간 정보를 활용하여 다시 가중치를 할당하는 역할을 수행한다.
Introduction
GAN 기반 모델은 Generator를 활용해서 사용자와 제품 간의 상호 작용 할 확률을 예측하고, Adversarial Training을 통해 최적화하한다. 그러나, Adversarial Training은 학습하는 것이 매우 불안정하기 때문에 성능을 보장할 수 없다. VAE 기반 모델은 Encoder를 활용해 Latent Factor의 분포를 근사하고, 사용자와 제품 간의 상호 작용의 Likelihood를 최대화하는 형태로 학습한다.
일반적으로 VAE 기법이 GAN 기반 기법에 비해 성능이 우수하지만, 다루기 쉬운 만큼 Representation 능력이 낮다. 즉, 학습은 잘 되지만, Heterogeneous 적인 사용자의 선호도를 제대로 파악하지 못하고, 복잡한 관계를 가지는 사후 분포 (Posterior Distribution)는 다루기 어렵다.
Diffusion Model (DMs)은 다루기 쉬운 Forward Process에서 입력 정보를 점진적으로 노이즈를 주입해 손상시키고, Reverse Reconstruction을 반복함으로써 기존 VAE 기법의 Trade-off (간단한 대신 복잡한 문제를 해결할 수 없는 문제) 를 완화시킨다.
추천 시스템의 목적 자체는 (c)와 같이 과거의 Interaction을 바탕으로 미래의 Interaction을 추천하는 것이기 때문에 DM 의 접근과 유사하다. 모델이 처음으로 예측한 False-Positive (FP), False-Negative (FN) 에서, 학습을 통해 예측 성능을 개선하는 방식으로 학습하는 것이다. FP는 실제 사용자가 구매했으나, 구매하지 않은 것으로 예측하는 것을 의미하고, FN는 실제 구매하지 않았으나 구매했다고 모델이 예측하는 것을 의미한다. 두 값의 손실을 줄이는 방식으로 학습하는 것이 바로 추천 시스템에서의 DM Process로 볼 수 있다.
본 연구에서는 DM Process를 활용하여 사용자의 제품에 대한 상호 작용 확률을 추론할 수 있는 Diffusion Recommender Model (DiffRec)을 제안한다. DiffRec은 Forward Process에서 Gaussian Noise를 주입시킴으로써 점진적으로 사용자의 과거 상호 작용을 오염시킨 후, Neural Network를 통해 손상된 상호 작용을 원래 값으로 복원한다. 그러나, 추천 시스템에서는 개인화된 추천이 필요하기 때문에 Image Domain에 사용하던 방법을 직접적으로 사용할 수 없다.
일단 사용자의 상호 작용 정보를 Noise로부터 손상되는 것을 방지해야 하기 때문에, Forward Process에서 추가되는 Noise의 스케일을 크게 감소시킨다(Section 3.4). 추가적으로, 추천을 위한 생성 모델을 구축하는 데 있어 중요한 1) 대규모 item 예측과 2) Temporal Modeling을 처리하기 위해 L-DiffRec, T-DiffRec을 제안한다. L-DiffRec은 추천 시스템에서는 대규모 사용자에 대해 모든 추천 제품을 구성해야하기 때문에 엄청난 메모리가 요구되는 것을 완화한 방법이며, T-DiffRec은 시간에 따른 사용자의 선호도를 반영하기 위한 방법을 나타낸다.
L-DiffRec은 제품을 그룹으로 먼저 군집화 한 후, 각 그룹에 대해서 VAE를 이용해 저차원 Latent Vector로 변환한 후 Diffusion Modeling을 수행한다 (d). 이처럼, 저차원 공간에 매핑시키면 대규모 데이터에 대해서도 처리하는 것이 가능하다 (Section 3.5, 4.3). T-DiffRec은 시간에 따라, 가충지를 Reweighting함으로써, 시간에 따른 정보를 고려할 수 있다 (Section 3.6, 4.4).
Preliminary
일단, 모델 구조에 대해서 다루기 전에, DM의 Forward Process와 Reverse Process 그리고 Optimization에 대해서 먼저 알아보자.
Forward Process는 입력으로 $x_0 ~ q(x_0)$이 주어지면, T Step 까지 점진적으로 Gaussian Noise를 주입시켜 $x_{1:T}$를 생성한다. 구체적으로 $x_{t-1} \rightarrow x_t = q(x_t|x_{t-1})$ $= \mathcal{N} (x_t;\sqrt{1-\beta_t} x_{t-1}, \beta_t \mathbf{I} )$가 되는 것이다. 이때 $\mathcal{N}$는 Gaussian Distribution을 의미하고, $\beta_t \in (0, 1)$을 가지고, Noise Scale을 조정하게 된다. 만약 $T \rightarrow \infty$이면, $x_T$는 Standard Gaussian Distribution으로 수렴된다.
Reverse Process는 Forward Process와는 달리 $x_t$ 시점에 추가된 Noise를 제거하면서 $x_{t-1}$를 복구하는 방식으로 학습하며, 복잡한 프로세스에서 아주 작은 변화를 포착하는 것을 목표로 한다. $x_t \rightarrow x_{t-1}$로 진행하며, $p_{\theta} (x_{t-1} | x_t) = \mathcal{N} (x_{t-1}; \mu_{\theta} (x_t, t), \Sigma_{\theta} (x_t, t))$로 표현할 수 있다. 이때, $\mu_{\theta} (x_t, t)$와 $\Sigma_{\theta} (x_t, t)$는 Gaussian Distribution의 평균과 표준편차를 의미한다.
Optimization는 Evidence Lower Bound (ELBO)의 Likelihood를 최대화하는 방식으로 학습하며 입력으로 $x_0$가 들어왔을 때 최적화 수식은 아래와 같다.
\[ \begin{equation} \begin{split} \log p(x_0) & = \log \inf p(x_{0:T}) d x_{1:T} \\ \\ & = \log \mathbb{E}_{q (x_{1:T}|x_0)} \left [ \frac{p(x_{0:T})}{q(x_{1:T} | x_0)} \right ] \\ \\ & \ge \mathbb{E}_{q(x_1|x_0)|} [\log p_{\theta} (x_0|x_1)] - D_{\text{KL}} (q(x_T|x_0) || p(x_T)) \\ \\ & - \Sigma^T_{t=2} \mathbb{E}_{q(x_t | x_0)} [ D_{\text{KL}} (q(x_{t-1} | x_t, x_0) || p_{\theta} (x_{t-1} | x_t))] \end{split} \end{equation} \]
$\mathbb{E}_{q(x_1|x_0)|} [\log p_{\theta} (x_0|x_1)]$는 Reconstruction Term을 의미하고, Negative Reconstruction Error를 나타낸다. $D_{\text{KL}} (q(x_T|x_0) || p(x_T))$는 Prior Matching Term을 의미하고, $x_0$와 $x_T$ 간의 분포 차이를 보는 Term인데 trainable Parameter가 없기 때문에 최적화에서 무시할 수 있다. $ - \Sigma^T_{t=2} \mathbb{E}_{q(x_t | x_0)} [ D_{\text{KL}} (q(x_{t-1} | x_t, x_0) || p_{\theta} (x_{t-1} | x_t))]$ 는 Denoising Matching Term을 의미하고, $p_{\theta}(x_{t-1}| x_t)$를 규제해서 상대적으로 알기 쉬운 $q(x_{t-1} | x_t, x_0)$에 맞춰 정렬한다.
Diffusion Recommender Model
Forward and Reverse Process
Figure 2에서 볼 수 있듯, DiffRec은 Forward Process와 Reverse Process로 구성된다. 먼저 Forward Process에서는 사용자 $u$와 제품 집합 $\mathcal{I}$이 주어졌을 때, $x_u = [x^1_u, x^2_u, \cdots, x^{|\mathcal{I}|}_u]$, $x^i_u$는 0 혹은 1의 값을 가진다. $x_0 = x_u$로 초기치를 설정하고, 아래와 같이 다음 시점의 상호작용을 예측한다.
\[ q(x_t |x_{t-1}) = \mathcal{N} (x_t; \sqrt{1-\beta_t} x_{t-1}, \beta_t \mathbf{I}) \]
$\beta_t \in (0, 1)$는 Gaussian noise scale을 각 시점별로 조절하는 변수를 의미한다. 이때 Reparametrization Trick과 Gaussian noise의 Additivity로 인해, $x_0$에 대한 값이 주어졌을 때 $x_t$를 예측하는 수식은 아래와 같다.
\[ q(x_t|x_0) = \mathcal{N}(x_t; \sqrt{\bar{\alpha}_t} x_0, (1-\bar{\alpha}_t) \mathbf{I}) \]
이때 $\alpha_t = 1-\beta_t$, $\bar{\alpha}_t = \prod^t_{t^{\prime}=1} \alpha_{t^{\prime}}$를 의미하고, $x_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1-\bar{\alpha}_t} \epsilon$, $\epsilon \sim \mathcal{N}(0, \mathbf{I})$ 으로 reparameterize 할 수 있다. 이때 $x_{1:T}$에 더해진 noise를 규제하기 위해 아래와 같이 $1-\bar{\alpha}_t$에 대해 선형적인 noise schedule을 고안했다.
\[ 1- \bar{\alpha}_t = s \cdot \left [ \alpha_{\text{min}} + \frac{t-1}{T-1} (\alpha_{\text{max}} - \alpha_{\text{min}}) \right ], \quad t \in \{ 1, ..., T \} \]
$s \in [0, 1]$를 통해 noise를 조절하고, $\alpha_{\text{min}} < \alpha_{\text{max}} \in (0, 1)$으로 noise의 upper bound와 lower bound를 설정했다.
다음으로, Reverse Process는 아래와 같이 정의해서 사용한다.
\[ p_{\theta} (x_{t-1} | x_t) = \mathcal{N}(x_{t-1}; \mu_{\theta} (x_t, t), \Sigma_{\theta} (x_t, t)) \]
$\mu_{\theta}(x_t, t)$와 $\Sigma_{\theta} (x_t, t)$는 각각, Gaussian Parameter와 Neural Networks의 출력을 의미한다.
DiffRec Training
$\theta$를 학습하기 위해 DiffRec은 ELBO를 최대화 하는 것을 목적으로 한다. 앞에서 설명한 목적함수에서 상수항을 뺀 Reconstruction term과 Denoising matching term을 최적화하는 것이다.
\[ \begin{equation} \begin{split} & \ge \mathbb{E}_{q(x_1|x_0)} [\log p_{\theta} (x_0|x_1)] \\ \\ & - \Sigma^T_{t=2} \mathbb{E}_{q(x_t|x_0)} [ D_{\text{KL}} (q(x_{t-1}|x_t, x_0) || p_{\theta} (x_{t-1} | x_t))] \end{split} \end{equation} \]
Denoising matching term $p_{\theta}(x_{t-1}|x_t)$ 다루기 쉬운 분포인 $p_{\theta} (x_{t-1}|x_t, x_0)$를 이용하여 추정하게 된다. 이때, Bayes rules이 적용되며, 이를 활용하면 $q(x_{t-1}|x_t, x_0)$는 아래와 같이 정리할 수 있다.
\[ q(x_{t-1} | x_t, x_0) \propto \mathcal{N} (x_{t-1} ; \tilde{\mu}(x_t, x_0, t), \sigma^2 (t) \mathbf{I} \]
\[ \begin{equation} \begin{split} & \tilde{\mu} (x_t, x_0, t) = \frac{ \sqrt{\alpha_t} (1 - \bar{\alpha}_{t-1})}{1-\bar{\alpha}_t} x_t + \frac{\sqrt{\bar{\alpha}_{t-1}} (1-\alpha_t)}{1-\bar{\alpha}_t)} x_0 \\ \\ & \sigma^2 (t) = \frac{(1-\alpha_t)(1-\bar{\alpha}_{t-1})}{1-\bar{\alpha}_t} \end{split} \end{equation} \]
그 후, Denoising matching term에 대한 Loss Function을 살펴보면 아래와 같이 정리할 수 있다.
\[ \mathcal{L}_t = \mathbb{E}_{q(x_t|x_0)} \left [ \frac{1}{2} \left ( \frac{\bar{\alpha}_{t-1}}{1-\bar{\alpha}_{t-1}} \right ) || \hat{x}_{\theta} (x_t, t) - x_0 ||^2_2 \right ] \]
요약하자면, 위 수식은 모델에 의해 예측된 결과인 $\hat{x}_{\theta} (x_t, t)$와 입력인 $x_0$의 차이를 통한 최적화 수식으로 볼 수 있다.
다음으로, Reconstruction term에 대한 Loss Function은 아래와 같이 정의할 수 있다.
\[ \mathcal{L}_1 = \mathbb{E}_{q (x_1|x_0)} [ || \hat{x}_{\theta} (x_1, 1) - x_0 ||^2_2 ] \]
위 두 수식 즉, $\mathcal{L}_1, \Sigma^T_{t=2} \mathcal{L}_t$에 대한 값을 최적화하는 것은 ELBO를 최대화하는 것이며, $\Sigma^T_{t=1} \mathcal{L}_t$를 최소화하는 것으로 볼 수 있다. 이를 정리하면 아래와 같이 정리할 수 있다.
\[ \mathcal{L} (x_0, \theta) = \mathbb{E}_{t \sim \mathcal{U}(1, T)} \mathcal{L}_t \]
이때 각 Loss의 최적화가 단계별로 다를 수 있기 때문에 본 논문에서는 Importance Sampling이라는 기법을 사용하였다. Importance Sampling은 $\mathcal{L}_t$의 손실 값이 큰 단계에 대한 학습을 강조하는 역할을 수행한다.
\[ \mathcal{L}^{\vartriangle}(x_0, \theta) = \mathbb{E}_{t \sim p_t} \left [ \frac{ \mathcal{L}_t }{p_t} \right ] \]
이때 $p_t \propto \sqrt{\mathbb{E} [ \mathcal{L}^2_t ]} / \sqrt{\Sigma^T_{t^{\prime}=1} \mathbb{E} [ \mathcal{L}^2_{t^{\prime}} ]}$는 Sampling Probability가 되며, $\Sigma^T_{t=1} p_t=1$가 된다.
DiffRec Inference
DiffRec의 Inference phase는 기존 DM과는 달리 먼저 $x_0$가 입력으로 주어지면 계속해서 노이즈를 주입하는 방식으로 $x_0 \rightarrow x_1 \rightarrow \cdots \rightarrow x_{T^{\prime}}$을 생성한다. 그런 다음, $\hat{x}_T = x_{T^{\prime}}$으로 정의하고, Reverse denoising을 수행한다. $\hat{x}_T \rightarrow \hat{x}_{T-1} \rightarrow \cdots \rightarrow \hat{x}_0$.
Latent Diffusion
본 연구에서는 기존의 DM (Diffusion Model) 과는 달리 Latent Diffusion, Temporal Diffusion을 사용한다고 언급했었다. 먼저, Latent Diffusion에 대해서 알아보자. Latent Diffusion은 Encoding, Latent Diffusion, Decoding, Training, Inference 단계로 구성되어 있다.
Encoding 단계는 제품 집합 $\mathcal{I}$이 주어지면, L-DiffRec에서 k-mean를 사용하여 C 카테고리 수 만큼 군집화를 수행한다. 그런 다음 사용자 상호작용 벡터 $x_0$를 클러스터링 C의 부분으로 나누어 $x_0 \rightarrow \{x^c_0\}^C_{c=1}$ 사용한다. 그 후, $\phi_c$에 의해 Parameterize 된 Variational Encoder (VAE)를 이용하여 Low-dimensional Vector $z_0$으로 변환한다. 이때 $z_0 = \mu + \sigma \odot \epsilon$ 이 된다. 이때 Encoder는 Variational distribution $q_{\phi_c} (z^c_0 | x^c_0) = \mathcal{N}(z^c_0; \mu_{\phi_c} (x^c_0), \sigma^2_{\phi_c} (x^c_0) \mathbf{I} )$에서 $\mu_{\phi_c}$와 $\sigma^2_{\phi_c}$를 예측한다.
그 다음으로 Latent Diffusion 단계에서는 Encoder 단계에서 계산된 값들을 각각 연결(Concateate)하여 $\mu$와 $\sigma$를 생성한다. 그 후에, $\mathcal{L}(z_0, \theta) = \mathbb{E}_{t \sim \mathcal{U}(1,T)} \mathcal{L}_t$ 를 기반으로 최적화 한다.
Decoding 단계에서는 $\{ \hat{z}^c_0 \}^C_{c=1}$ 값을 바탕으로 Decoding하고, MultiVAE와 유사하게 $p_{\psi_c}(\hat{x}^c_0|\hat{z}^c_0)$를 기반으로 $\hat{x}_0$를 예측한다. 이때, 기존 단계에서 생성된 $\hat{z}^c_0$를 클러스터링 별로 각각 모델링 해주어야 한다.
마지막 Training 단계는 MultiVAE 방식을 따라, 아래와 같이 최적화 한다.
\[ \mathcal{L}_v (x_0, \phi, \psi) = \Sigma^C_{c=1} [ \mathbb{E}_{q_{\phi_c}} (z^c_0 | x^c_0) [ \log p_{\psi_c} (x^c_0 | z^c_0) ] - \gamma \cdot D_{\text{KL}} (q_{\phi_c} (z^c_0 | x^c_0 ) || p(z^c_0)) ] \]
Inference 단계에서는 L-DiffRec은 처음으로 먼저 $x_0$를 분리하여 $\{x^c_0\}^C_{c=1}$로 만든다. 그런 다음, 각각의 $x^c_0$을 입력으로 사용하여 $\mu_{\phi_c}(x^c_0)$을 생성하고 출력된 값을 연결하여 $\{z^c_0\}^C_{c=1}$을 생성한다. 마지막으로, $\hat{z}_0$을 만들어 Decoder에 입력으로 사용하여 최종 $\hat{x}_0$를 만든다. 이때 $\hat{x_0}$는 Top-K Recommendation을 만들기 위한 값으로 이해하면 된다.
Temporal Diffusion
사용자의 선호도는 시간에 따라 변화하기 때문에, 시간적인 정보를 고려하는 것은 매우 중요하다. 최근에 발생한 사용자 상호작용이 현재 사용자의 선호도를 더 많이 고려할 수 있다고 가정하고, 시간에 따라 reweighting하는 방식을 사용하고자 한다. 이때 $w = [w_1, w_2, ..., w_M]$ 를 시간에 따른 가중치라고 한다면, $w_m = w_{\text{min}} + \frac{m-1}{M-1} (w_{\text{max}} = w_{\text{min}})$으로 설정하는 것이다. 이때, $w_{\text{min}} < w_{\text{max}} \in (0, 1]$으로 설정한다. 그런 후에 weight와 곱하여 $\bar{x}_0 = x_0 \odot \bar{w}, \quad \bar{w} \in \mathbb{R}^{|\mathcal{I}|}$를 계산하면 제품에 대해 reweighting 되는 것이다.
Experiments
본 연구에서는 실험 결과를 총 3단계로 나누어 해당 질문에 답하는 형태로 실험을 진행하였다. RQ 1) DiffRec이 다른 베이스라인 모델에 비해 성능이 우수한지, 그리고 DiffRec의 설계(Important Sampling, Reduce noise scale)가 성능에 어떤 영향을 주는가? RQ 2) L-DiffRec이 추천 성능과 Resource 측면에서 어떠한가? RQ 3) 학습 단계에서 Timestamp를 사용할 수 있는 경우 T-DiffRec이 기존의 Sequential Model에 비해 성능이 우수한가?
RQ 1) Analysis of DiffRec
성능은 Table 2에서 확인할 수 있듯, DiffRec의 성능이 다른 SoTA모델에 비해 최대 14.76% 높은 것을 확인할 수 있다. 추가적으로, 본 논문에서는 DiffRec의 Important Sampling과 Noise scale을 감소시키는 것이 모델 성능에 어떠한 영향을 미치는지 확인하는 실험을 추가로 진행하였다.
Important sampling에 대한 내용은 Figure 5(a)에서 확인할 수 있으며, $\mathcal{L}^{\triangle} (\cdot)$과 $\mathcal{L} (\cdot)$는 각각 Importance sampling과 Uniform sampling을 수행했을 때를 의미한다. Importance sampling을 사용했을 대 Recall과 NDCG의 성능이 더 높은 것을 확인할 수 있다. Figure 5에서 (b) 그림에서 $T^{\prime}$은 Inference Step을 의미하며, Inference step이 0인 경우에 가장 우수한 성능을 보이는 것을 확인할 수 있다. $T=0$에서 $T$로 가면서 성능이 저하되는 것은 Noise scale이 상대적으로 작아서 Top-K 제품 순위가 약간만 변경되었기 때문일 것으로 유추한다.
Figure 4는 Noise를 무작위로 주입했을 때의 성능을 비교분석한 것이며, Figure 4(a)는 train, validation set에 positive로 평가된 4점 이하의 False-Positive를 무작위로 주입시킨 결과는 나타내며, Figure 4(b)는 무작위로 non-interacted 제품에 대해 positive로 부여한 상태의 추천 성능을 비교한 것이다. 다른 모델에 비해 DiffRec이 상대적으로 Robust한 것을 확인할 수 있다. Table 3도 함께 확인하면 된다.
추가적으로 RQ 1)에서 Effects of noise scale $s$ and step $T$ (Figure 6)에 대한 실험과 $x_0$-ELBO, $\epsilon$-ELBO (Table 5)에 대한 실험을 진행하였다. 기존 DM 연구에서는 $\epsilon$을 사용하지만 본 논문에서는 추천 시스템에서 DM를 활용하기 위해 $x_0$를 사용한 근거를 확인할 수 있어서 좋은 실험 결과라고 생각한다.
RQ 2) Analysis of L-DiffRec
RQ 2)에서는 L-DiffRec의 효과에 대해서 성능을 비교한 것이다. Table 6 (Clean Training)과 Table 4 (Noisy Training), 그리고 Figure 7 (Effect of category number)의 결과에서 확인할 수 있다.
RQ 3) Analysis of T-DiffRec
마지막으로 T-DiffRec의 성능을 검증하기 위한 실험으로 (Table 7), 다른 SoTA Sequential recommendation model인 ACVAE와 비교할 때 어떤 성능 차이가 있는지에 대한 실험을 진행하였다. 실험 결과, 엄청 작은 메모리를 소모하며, 기존 연구와 비슷하거나 오히려 LT-DiffRec에서는 더 좋은 성능을 보이는 것 뿐만 아니라 메모리 역시 적게 소모되는 것을 확인할 수 있다.