AI 공부 기록 블로그

[논문 리뷰] Self-Attentive Sequential Recommendation 본문

논문 리뷰

[논문 리뷰] Self-Attentive Sequential Recommendation

dhgudxor 2021. 11. 22. 17:08

  본 논문은 2018년 'IEEE International Conference on Data Mining (ICDM)'에서 발표되었으며, 

추천시스템에 Sequential을 고려하기 위해 Self-Attention 방법의 사용을 제안하였습니다. 해당 방법을 통해 사용자의 마지막 행동을 통해 예측하는 Markov Chains(MCs)와 장기적 정보를 통해 예측하는 RNN의 균형을 이루었습니다. 

 

논문의 리뷰는 저의 주관적인 해석과 오역이 있을 수 있습니다. 이에 대해서 댓글 남겨주시면 감사하겠습니다 :) 


1. INTRODUCTION

  Sequential 추천시스템은 사용자의 행동에 대한 맥락을 고려하여 새로운 제품을 추천합니다. 하지만 사용자의 과거 행동들은 기하급수적으로 증가하기 때문에 맥락을 포착하는 데 어려움이 있습니다. 이전의 Sequential을 고려하기 위한 방법으로 MC와 RNN이 있습니다. 먼저 MC의 경우 사용자의 이전 행동만 가지도 다음의 행동을 예측하여, sparsity가 높은 환경에서는 예측을 잘하지만 복잡하거나 dense한 환경에서는 성능이 떨어집니다. RNN의 경우 hidden state를 활용하여 이전의 모든 행동을 고려해 다음 행동을 예측합니다. 좋은 성능을 나타내기 위해서는 dense가 높은  많은 양의 데이터가 요구됩니다. 

  Sequential을 고려하기 위해 MC와 RNN 이후에 등장한 Transformer는 어텐션 메커니즘인 'self-attention'을 사용하여 의미 있는 패턴을 효율적으로 발견할 수 있습니다. 아래의 그림은 저자가 제시한 Self Attentive Sequential 추천시스템의 학습 과정입니다. 각 시점에서 모델은 attention을 사용하여 모든 이전의 아이템을 고려하고 다음에 등장할 아이템을 예측합니다. Sequential 추천시스템에 self-attention을 사용함으로써 RNN의 특징과 MC의 특징을 모두 반영할 수 있는데, 이는 dense datasets, sparase datasets에서 실험을 통해 좋은 결과를 보였습니다. 또한 저자는 추가적인 실험을 통해 제안한 모델은 기존의 CNN/RNN 기반의 모델보다 빠름을 보였으며, Ablation study를 통해 제안 모델의 complexity와 scalability를 분석하고 attention weights를 시각화하였습니다.

< 그림 1 > SASRec의 학습 과정

2. RELATED WORK

  위에서 언급했듯이 Sequential 추천시스템은 시간적 패턴을 고려하기보단 최근 활동을 기반으로 사용자 행동의 순차성을 고려합니다. 이러한 순차성을 고려하기 위해 Attentions 메커니즘은 전체 또는 특정 영역의 입력값을 반영해 attention weight를 통해 그중 어떤 부분에 집중해야 하는지 나타냅니다. 인코더-디코더의 구조에서 디코더는 출력 단어를 예측하는 시점마다, 인코더에서의 전체 입력을 다시 한번 참고하게 됩니다. Transformer는 self-attention 방법을 사용하여 입력 토큰 간의 유사도를 계산하고 디코더의 예측을 결정하게 됩니다. 저자가 제시한 SASRec은 'Attention Is All You Need'에서 등장한 Transformer의 구조 <그림2> 와 거의 유사하기 때문에 이를 좀 더 집중해서 보도록 하겠습니다. 

< 그림 2 > Transformer 모델 구조

  그림의 Transformer 구조는 인코더-디코더 구조로 나누어져 있으며, (Query, Key, Value)를 입력으로 받아 Scaled dot-product와 Multi-head attention을 통해 입력들 간의 유사도를 계산하게 됩니다. 이때 Positional Encoding을 통해 입력의 순서를 기억할 수 있도록 하며, Residual connect를 통해 기존에 들어오는 입력의 정보는 유지하고 Layer normalization을 통해 계산된 입력값들에 대해 정규화를 진행합니다. 이후 Fully connected feed-forward network를 통과하고 softmax를 거쳐 가장 관련이 깊어 보이는 output 결괏값을 출력하게 됩니다. 

  입력의 유사도를 계산하는 방법으로 Scaled dot-product 방법을 사용하게 되는데 이때 모든 입력을 Query, Key, Value로 생성하여 계산에 사용됩니다. Query와 Key의 내적을 통해서 유사도를 구한 후 $\sqrt{d}$ (d = 차원의 크기)만큼 나누어 softmax의 결과가 한쪽으로 치우치지 않도록 합니다. Query와 Key 간의 유사도가 구해지면 Value의 값을 통해 최종적인 행렬 곱을 수행하게 됩니다. Scaled dot-product 그림에서 보이는 Mask의 경우 디코더 부분에서 활용되며 미래의 정보를 알 수 없기에 사용하게 됩니다. 이후 Multi-Head Attention을 통해 차원을 줄인 scaled dot-product를 여러 개로 나누어 각각의 시선에서 입력을 볼 수 있도록 병렬처리를 합니다. 이후 새로운 learnable 파라미터인 W를 통해서 Query, Key, Value 각각을 Projection 시키고 concat하여 선형 변환하도록 합니다. 

< 그림 3 > Scaled dot-product와 Multi-Head attention

 

< 수식 1 > Scaled dot-product와 Multi-Head attention

3. METHODOLOGY

  다음으로는 Transformer가 Sequential 추천시스템에 어떻게 적용되었는지 보도록 하겠습니다. 저자가 제안한 SASRec 추천 모델은 embedding layer, 여러 개의 self-attention blocks 그리고 prediction layer로 구성되어 있습니다. 먼저 embedding layer부터 살펴보면 학습 순서 ($S_1^{u}$ , $S_2^{u}$, ..., $S_{\left\vert S^u \right\vert -1}^{u}$)를 고정된 길이의 시퀀스로 $s = (s_1, s_2, ..., s_n)$ 변환합니다($S^u$는 사용자 한 명에 대한 구매 이력 기록). 이때 n은 모델이 다룰 수 있는 최대 길이를 나타내어, 시퀀스의 길이가 n보다 크면 잘라내어 최근 n개의 만큼만 모델이 고려할 수 있도록 합니다. 반대로 사용자에 대한 시퀀스의 길이가 n보다 작으면 길이가 n이 될 때까지 왼쪽으로 패딩을 적용합니다. 아이템 임베딩 매트릭스 $M \in \mathbb{R}^{\left| I \right|\times  d}$를 모델에 입력이 가능하도록 $E \in \mathbb{R}^{n \times  d}$로 변경하여  $E_i = M_{si}$ 의미를 가지도록 합니다(이때 d는 latent 벡터의 차원). 또한 self-attention 모델 같은 경우에는 recurrent나 convolutional 같은 모듈을 포함하고 있지 않기에 이전 아이템에 대한 위치 정보를 알 수 없습니다. 이에 따라 위치 정보를 기억하는 position embedding $P \in \mathbb{R}^{n \times d}$을 모델 학습에 넣었으며, 최종 input embedding은 아래와 같습니다.

< 수식 2 > input embedding

  다음으로 Self-Attention Block을 거치게 되는데 이는 위에서 언급한 transformer 구조와 거의 유사합니다. 임베딩 레이어에서 생성한 $\hat{E}$를 입력으로 받아 (Query, Key, Value)를 linear projection을 통해 3개의 행렬로 변환하고 attention layer에 공급합니다. 이때 Causality(인과관계) 측면에서 sequence의 특성으로 t + 1 번째 항목을 예측할 때, t 이전의 항목만 고려해야 합니다. 만약 t 이후의 항목들이 포함되어 있다면 해당 데이터들의 연결을 마스킹(Masking) 처리하여 이전의 항목들만 볼 수 있도록 합니다.

<수식 3 > item embeddings after self-attention layer

  또한 모델의 비선형성을 부여하고, 다른 latent 차원을 고려하기 위해 point-wise two-layer feed-forward network를 사용합니다. 이때 $S_i$와 $S_j$는 서로 상호작용이 없으며 ($i \neq j$), 이는 사용자들의 행동이 서로 영향을 주지 않음을 의미합니다.

< 수식 4 > Point-Wise Feed-Forward Network

  이후 self-attention blocks를 여러 개 쌓아 복잡한 item transitions를 학습하도록 합니다. 아래의 식에서 $b$는 self-attention blocks의 수를 나타냅니다.

< 수식 5 > Stacking Self-Attention Blocks

  network가 깊어질수록 1) 모델의 capacity가 증가하여 overfitting이 발생하고 2) vanishing gradients로 인해 학습 과정이 불안정해지며 3) 많은 파라미터로  많은 학습 시간이 요구됩니다. 이에 따라 입력에 대해 Layer Normalization을 적용하고, Dropout과  Residual Connections를 사용합니다. 

< 수식 6 > Layer Normalization, Dropout, Residual Connections 사용

  다음으로 Prediction Layer는 위의 b번만큼의 self-attention blocks를 통과한  후 다음에 오는 아이템을 예측하는데, Matrix Factorization 방법을 사용하여 아이템의 관련 점수($r_{i,t}$) 을 계산합니다. 이때 아이템 임베딩 매트릭스 $N$을 사용하는데, 모델의 사이즈와 오버피팅을 예방하고자 Shared Item Embedding 매트릭스 $M$을 사용합니다. Shared Item Embedding을 사용할 경우 sequential을 반영할 때 비대칭적인 item transitions를 반영할 수 없기에 서로 다른 아이템 임베딩을 사용해야 한다고 생각할 수 있습니다. (예를 들어 i라는 아이템은 주로 j번째 아이템 이후에 구매되었지만, 역은 성립하지 않음) 그러나 저자가 제안한 모델은  FFN을 통해 비선형 변환을 학습하여 문제가 되지 않으며, 실제로 Shared Item Embedding을 사용했을 때 모델의 성능이 향상하였습니다.

< 수식 7 > Shared IteEmbedding

  한편, 개인화된 추천시스템을 구성하기 위해 사용자의 이전 행동들을 임베딩값으로 만들어 $r_{u, i, t} = (U_u + F_t^{(b)})M_i^T$로 나타낼 수 있지만, 성능의 개선은 없었다고 합니다. 

  모델의 loss의 경우 사용자가 관심 있는 항목(postive sampling)과 관심 없는 항목(negative sampling)을 통해 binary cross entropy를 계산하고, Adam 옵티마이저를 사용하여 모델을 최적화합니다. 아래 loss의 식에서 좌측의 항은 postive samples과 우측 항은 negative samples를 의미합니다.

< 수식 8 > binary cross entropy loss

4. EXPERIMENTS

  이제 SASRec의 실험부분을 간단하게 보도록 하겠습니다. 저자는 총 4개의 데이터셋(Amazon Beauty, Amazon Games, Steam, MovieLens-1M)에서 실험을 진행하였습니다 (자세한 수치 확인은 논문 참고). 사용자가 가장 최근에 구매한 아이템 $S_{\left\vert S^u \right\vert}^{u}$은 test 데이터로 생성하고, 그 이전에 구매한 아이템$S_{\left\vert S^u \right\vert-1}^{u}$은 validation 데이터로 생성하였으며, 나머지 모든 데이터는 학습에 사용하였습니다. 

< 표 1 > 모델 성능 비교

  모델의 성능 비교 결과 저자가 제안한 SASRec 모델이 모든 데이터 셋에서 가장 우수한 성능을 보였으며, 특히 기존의 신경망 기반의 추천시스템(f-h)에서 좋은 성능 개선을 이루었습니다. 

  또한 아래의 그림은 Attention weights를 직접 시각화하여 데이터셋, Positional Embedding, Layer에 따라 Adaptive 하게 달라지는 Attention map을 나타냅니다. 먼저 (a)와 (c)를 비교해보면 sparse 했던 Beauty 데이터 셋에서는 최근 2~3개 아이템 정보를 기반으로 예측하는 것을 알 수 있고, 비교적 dense 했던 MovieLens 데이터 셋에서는 최근 정보를 더 많이 관측했음을 알 수 있습니다. 또한 positional Embedding의 효과를 알아보기 위해 (b)와 (c)를 비교해보면,  positional Embedding이 없는 (b)의 경우 attention map이 uniform 하게나타나 있는 것을 알 수 있습니다. 이는 순서에 대한 가중치가 없으면 학습이 안 됨을 의미합니다. 마지막으로 (c), (d)를 비교해보면 Layer의 수에 따라 학습의 정도가 다른 것을 알 수 있습니다. 먼저 (c)의 경우 input sequence에 대해 전체 아이템들의 관계를 학습하기 때문에 넓은 attention 분포를 확인할 수 있습니다. 반면 (d)의 경우 Layer1에서 이미 전체 정보를 받아왔기 때문에 Layer2에서는 최근 정보만을 주목하는 것을 알 수 있습니다. 이는 예측에 영향을 미치는 중요(세부) 정보는 최근 아이템임을 의미합니다. 이 밖에도 Ablation 분석, 학습 효율성 및 확장성, latent dimension에 따른 성능 변화 등이 논문의 실험 내용에 실려있지만, 이는 생략하도록 하겠습니다.

 

< 그림 4 > Attention Weights 시각화

 

Comments