Gorio Tech Blog search

PinnerSage(Multi-modal user embedding framework for recommendations at pinterest) 요약 설명

|

이번 글에서는 PinnerSage 논문의 핵심 포인트만 간추려서 기술합니다.

본 논문은 multi-embedding based user representation scheme에 대한 내용을 담고 있습니다.

논문에서는 기존 연구에서 한계점으로 다음 내용들을 언급합니다.

user-item을 같은 공간에 임베딩했을 때 item은 보통 1가지 종류를 갖는데 반해(예: 영화), 고 품질의 user embedding은 user의 다양한 취미, 스타일, 흥미를 반영해야 한다는 어려움이 있습니다. 이를 보완하기 위해 복수의 user embedding을 만들 수는 있지만 여러 한계점이 존재합니다.

user, item을 jointly 학습하게 되었을 때, user가 interact 했던 item 들은 자연스럽게 가까운 거리를 갖게 되는데, 예를 들어 어떤 user가 신발, 미술작품, SF를 좋아한다고 해서 이들 item이 가까운 거리를 갖는 것은 상식적으로 말이 되지 않습니다.

embedding을 1개로 제한한 상황에서 (single embedding) 이들을 merge했을 때 이상한 결과가 도출될 가능성이 존재합니다. 예를 들어 신발, 미술작품, SF를 merge하면 이와 전혀 상관없는 item이 등장할 수 있는 것입니다. 이는 single embedding이 item의 여러 측면을 표현하지 못함을 의미합니다.

PinnerSage는 다음과 같은 과정을 거치게 됩니다.

  • item embedding은 미리 다른 모델에 의해 학습되어 fixed됨. 본 논문에서는 graph 기반의 PinSage가 이에 해당됨
  • user가 반응한 과거 90일 치의 item 목록을 가져와서 clustering을 실시함. 이 때 clustering은 Ward(계층적 군집화)으로 이루어짐
  • 각 item이 cluster에 배정되었으면 cluster를 대표하는 representation을 medoid를 통해 설정함
  • 모든 cluster에 대해 추론하는 것은 불가능하기 때문에 cluster importance score를 계산하여 3개의 cluster를 추출함. 이 score는 frequency와 recency를 반영하며 두 factor의 균형을 조절할 수 있는 hyperparameter가 존재함
  • 추출된 3개의 representation이 곧 user embedding에 해당하며 ANN을 통해 수 많은 item embedding 사이의 유사도를 계산하여 가장 적합한 item을 user 별로 추천하게 됨

논문에서는 AB Test를 통해 single embedding을 사용하는 것에 비해 유의미한 개선이 있었음을 증명하였습니다. 그리고 논문 후반부에 언급되는 추천 시스템 구조는 꽤 도움이 많이 되는 정보를 담고 있는데, 그 중에서도 daily batch inference와 lightweight online inference를 분리하여 진행한 것이 실질적으로 운영에 큰 도움이 되었을 것으로 판단합니다.

본 논문은 굉장히 많은 item embedding 사이의 유사도를 계산해야 하고, single item embedding이 충분한 표현력을 갖지 못한다고 판단될 때 실질적으로 활용 가능성이 매우 높은 방안을 제시했다는 점에서 굉장히 인상적이었습니다.

Comment  Read more

DropoutNet(Addressing Cold Start in Recommender Systems) 요약 설명

|

이번 글에서는 DropoutNet 논문의 핵심 포인트만 메모해 둡니다.

  • 논문 링크

  • cold start 문제를 좀 더 잘 풀기 위해 dropout 구조를 활용함
  • denosing autoencoder에서 영감을 받았다고 하며, 무작위로 user 혹은 item의 content feature를 0으로 masking하여 학습함
  • 위 방법 자체를 dropout 구조라고 명명하며, cold start 문제를 더 잘 풀기 위해 objective function에 항을 추가하는 이전의 여러 방법보다 간단한 방법이라고 함
  • 학습/예측을 위한 추천 모델 자체에는 특별한 부분은 없음
Comment  Read more

Linformer(Self-Attention with Linear Complexity) 요약 설명

|

이번 글에서는 Linformer 논문의 핵심 포인트만 간추려서 기술합니다.

논문에서는 self-attention이 O(n^2)의 time & space complexity를 갖기 때문에 seq가 길수록 bottleneck의 원인이 된다고 지적합니다.

경험적으로 그리고 수식적으로 증명해보면, attention matrix는 low-rank matrix로 분해할 수 있다고 설명합니다. k « seq_len인 k의 size를 갖는 matrix E를 K, V에 곱함으로써 이를 구현할 수 있습니다. (seq_len, d) -> (seq_len, k)

실험 결과를 보면 Linformer는 대체적으로 standard Transformer와 비견할 만한 성능을 보입니다.

요약해보면, sequence의 길이가 꽤 길거나 하는 등의 이유로 training speed를 향상시키면서도 model의 representational capacity를 유지하고 싶을 때, 특별한 제약 조건이 없다면 충분히 시도해 볼 수 있는 방법이라고 판단됩니다. 물론 실제로 데이터에 적용해보기 전까지는 이에 대한 효과를 장담하기는 어렵습니다.

Comment  Read more

Fastformer(Additive Attention Can Be All You Need) 요약 설명

|

이번 글에서는 Fastformer 논문에 대해 간략히 다뤄 보겠습니다.

본 논문은 self-attention의 pairwise interaction 모델링 구조가 굳이 필요한 것인가에 대해 의문을 제시하고 중첩된 additive attention 메커니즘을 통해 충분히 경쟁력 있는 모델을 구현할 수 있다고 주장합니다.

논문 도입부에 나온 줄 글만 봤을 때는 복잡한 과정을 거치는 것으로 생각이 들 수 있지만 실제로는 매우 쉬운 연산의 연속입니다.

중요 아이디어는 다음과 같습니다.

  • 모든 query X key 에 대해 interaction을 계산할 필요가 없다.
  • global query vector와 global key vector를 만든 후 이를 value vector 들과 다시 결합하면 충분하다.
  • global query 및 key vector는 각 query 혹은 key vector 들의 가중합으로 이루어진다.

global query vector는 아래와 같이 구합니다.

[\mathbf{q} = \Sigma_{i=1}^N \alpha_i \mathbf{q}_i]

[\alpha_i = \frac{exp(\mathbf{w}q^t / \sqrt{d})}{\Sigma{j=1}^N exp(\mathbf{w}_q^T \mathbf{q}_j / \sqrt{d})}]

그런데 이는 사실 상 self-attention 메커니즘을 구현한 것과 다름 없습니다. 같은 방식으로 global key vector도 구하고 최종적으로 value vector들과 곱합니다. 마지막 output vector를 만들기 이전에 query vector 값들을 다시 더합니다. 이는 일종의 residual connection 역할을 하는 것으로 보이는데 이러한 구조가 만들어진 것에 대한 논리적 설명이 없는 부분은 매우 아쉽습니다.

일단 연산의 구조로 보았을 때 Vanilla Transformer보다 속도는 빠를 가능성이 높다고 추론해 볼 수 있습니다. 논문에서 제시한 실험 결과도 이를 뒷받침합니다. 그리도 만약 token 사이의 순서가 아주 중요하지 않고 일종의 global context가 중요한 역할을 수행하는, 예를 들어 classificaion task에서는 이러한 구조가 더 적합할 수도 있겠다는 판단이 듭니다. 물론 실제 실험을 진행해봐야 아는 부분이겠지만 구현 자체가 까다로운 알고리즘이 아니기 때문에 하나의 옵션으로 고려할 수 있을 것으로 보입니다.

다만 global vector를 생성하는 부분 외에는 특별히 논리적/수식적 근거를 제시하지 않았다는 점과 Fastformer가 잘 통하는 종류의 실험들을 선별한 것이 아닌가 하는 의문이 든다는 점은 아쉬운 부분이라고 할 수 있겠습니다.

Comment  Read more

Synthesizer(Rethinking self-attention for transformer models) 요약 설명

|

앞으로 Paper Review 카테고리에는 논문들을 비교적 짧고 가볍게 요약하여 정리하는 글들을 올려보고자 합니다.

첫 타자는 Synthesizer라는 논문입니다.

본 논문은 dot-product based self-attention이 정말 필요한가?에 대한 물음을 던지고 대안을 제시한 논문입니다. 논문에서 dot product self-attention은 sequence 내에서 single token이 다른 token과의 관계에서 갖는 상대적인 중요성을 결정하는 역할을 수행한다고 설명하며 (당연히 맞는 이야기) 이러한 역할은 논문에서 제시하는 구조로도 충분히 달성할 수 있음을 여러 종류의 실험을 통해 증명하고자 노력합니다. token과 token 사이의 interaction을 굳이 고려하지 않고도 fully global attention weight를 통해 충분히 주요 정보를 포착할 수 있다고 이야기 합니다.

굉장히 흥미로운 아이디어이지만 그 구조가 설명에 있어 아쉬운 부분이 많습니다. 일단 논문에서는 크게 2가지 구조를 제안합니다. Dense SynthesizerRandom Synthesizer가 바로 그것입니다.

[Y_{h, l} = softmax(B_{h, l}) G_{h, l}(X_{h, l})]

대단히 복잡한 식이 아닙니다. 사실 $G$ 함수는 linear transformation 역할을 수행하며 기존의 dot-product attention matrix를 단지 $B$ 라는 parameter matrix로 대체하는 것일 뿐입니다. 이 $B$ 를 계산하기 위해 input token에 의존적으로 학습된다면 이를 Dense Synthesizer라고 하며 어떠한 input token에도 영향 받지 않는 attention weight를 구성한다면 이를 Random Synthesizer라고 합니다. 이 때 이 행렬은 trainable 할 수도 있고, 그저 고정된 상수 값일 수도 있습니다. 논문에서는 행렬을 factorize 한 버전 역시 제시합니다.

자세한 설명은 글 상단에 있는 youtube 영상을 참고하기를 추천합니다. 실험 부분에 대해 자세히 설명하고 있고, 본 논문의 한계점에 대해 명확하게 설명하고 있습니다.

간단히 이 부분에 대해 언급하면 아래와 같습니다.

  • 사실상 synthesizer는 self-attention layer를 feed-forward layer로 치환한 것과 다름 없음
  • 언어 구조가 비슷한 언어 간의 번역 task는 이러한 구조가 잘 기능할 가능성이 높은 task이기 때문에 논문에서 제시하는 구조가 과대 평가되었을 가능성이 높음
  • 아이디어 자체는 좋지만 실질적으로 어떻게 self-attention layer를 대체할 수 있는지 그 장점이 명확하지 않음. 결국 dot-product self-atttention과 mix 한 것이 성능이 가장 좋다고 나옴
Comment  Read more