Overall Performance Comparision
BERT4Rec 모델과 Baseline들을 모두 비교한 결과표를 보면,
인기순으로 정렬한 단순한 베이스라인인 POP는 모든 데이터셋에서 가장 안좋은 결과를 보였다.
Sequential Model인 GRU, FPMC(MF+Markov Chain)은 matrix연산 기반의 BPR-MF와 NCF의 결과를 상회했다.
해당 결과는 행렬 기반의 풀이보다 유저의 행동 흐름을 고려한 모델이 더 효과적임을 보여준다.
Sequential Model 중에서도 Caser가 FPMC보다 훨씬 좋은 성능을 보여줬는데,
두 모델 모두 Markov Chain을 사용했지만, Caser는 직전 시점을 포괄하는 더 이전 시점의 아이템들을
동시에 고려한 high-order Markov chain을 사용했다.
<Markov Chain>
: 현재 시점의 결과는 지난 시점의 결과에 종속된다는 개념에서 나온 이론
ex) 치킨을 구매(t-1)하면, 맥주도 구매(t)할 것이다.
<High order Markov Chain>
: 직전 시점이 아닌 더 이전 시점의 사건까지 확률에 반영하는 고차원의 Markov Chain
ex) A상품 -> B상품 -> C상품 --> D상품 조회
하지만 Caser도 GRU와 SASRec같은 모델에 비해 성능이 잘 나오지 않았다.(Sparsity 문제로)
특히 Self-attention의 강력함을 SASRec이 보여주었는데 GRU 기반의 모델들보다 좋은 결과를 보여주었다.
그리고 당연히 BERT4Rec이 앞서 나온 모든 모델의 기록을 깨며 "우리 것이 최고다"라는 것을 보여줬다.
양방향 학습과 Cloze Task가 정말로 BERT의 성능 개선에 기여했을까?
저자들은 이 질문에 대한 답을 하기 위해, Cloze Task때 마스크를 1개로 설정하여 SASRec과의 차이점을 양방향 학습 으로만 설정하여 실험했다.
실험 결과, 1개의 마스크 토큰으로도 SASRec보다 높은 성능을 보여주었다며 양방향 학습의 효과를 입증했다.
그리고 기존 방식대로 한 마지막 행의 기록에서는 1개의 마스크 토큰으로 학습한 것보다 더 높은 성능을 보여주며
Cloze Task의 훈련 방법론에도 적절한 근거를 보충하였다.
그럼 양방향 학습은 뭐가 잘나서 성능이 좋은걸까?
한마디로 정리하면 self-attention이 조금 더 최근 행동을 반영한다.
(a)에서는 masked token에 대해 왼쪽(시퀀스의 초반)부터 어텐션이 이루어졌고, (b)에서는 masked token에 대해 오른쪽(시퀀스의 후반) 중심으로 어텐션이 이루어졌다.
Layer2인 (c)와 (d)는 masked token을 제외한 가장 최근의 아이템끼리의 어텐션이 높다는 것을 알 수 있다. 이는 타겟 아이템에 대하여 가장 최근 아이템에 더 중점을 두고 예측을 하겠다는 말이다.
Impact of Hidden Dimensionality 'd'
각 파라미터별 영향력을 측정하기 위해 다른 파라미터를 고정시키고 실험 파라미터만 움직이며 실험을 했다.
hiddden dimension의 변화(16~256)와 NDCG와 HR을 기준으로 각 데이터셋에 대한 추이를 보면,
거의 모든 모델이 dimension과 비례하며 성능이 올라가고 있다.
그런데 Beauty와 Steam같은 dataset의 경우 dimension이 64보다 더 커지면 성능이 줄어들기도 한다(sparse하기때문)
-> dimension이 쓸데없이 커질수록 과한 학습때문에 Overfitting을 조심해야한다.
Caser의 경우 데이터셋에 따라 순위가 급격하게 바뀌는 등의 불안정한 모습을 보여준다(왜일까?)
특히 BERT4Rec 모델이 모든 모델의 성능을 상회하는 모습을 보여준다.
결론은 64차원의 hidden state를 가질 때 가장 성능이 좋다고 판단하였다.
Impact of Mask Proportion ρ
dimension을 64로 고정했을 때, 한 시퀀스 내에 얼만큼 mask를 생성할 것이냐에 대한 비율에 따른 결과이다.
아마 훈련에 가장 큰 영향을 미치는 파라미터가 아닐까싶다.
비율은 너무 작아도 안되고, 너무 커서도 안된다.
모든 데이터셋에 공통적인 결과는 ρ > 0.6일 때 성능이 감소하고,
ρ = 0.2일 경우가 ρ =0.1일때보다 낫다는 것이다.
또한 ρ는 각 데이터 셋에서 구성되는 시퀀스의 길이에 영향을 받는 것으로 밝혀졌다 Beauty와 Steam같은 짦은 시퀀스의 데이터셋에서는 ρ가 0.6, 0.4같이 다소 큰 비율이 효과적이었고,
시퀀스의 길이가 긴 Movielens 데이터에서는 ρ =0.2의 다소 적은 비율일때 제일 효과적이었다.
"문장이 길면 단서가 더 많을테니 빈칸을 더 많이 뚫으면 학습이 잘되는거 아니야?"라고 할 수 있는데 정말 그럴까?
결과가 시사하는 바로는 "그렇지 않다".
만약 MovieLens의 시퀀스엔 160개, Beauty의 시퀀스에 9개가 있다고 해보자.
60%의 빈칸을 뚫으면, MovieLens는 96개의 빈칸을, Beauty는 5개의 빈칸을 학습해야한다.
5번의 학습과 96번의 학습은 절대적으로 차이가 크다. 즉, 학습이 빡세다는 것이다.
Impact of Mask Proportion 'N'
시퀀스의 최대 길이 별로 성능을 보면,
Beauty는 N=20일때, ML-1m은 N=200일때가 가장 좋다.
여기서 BERT의 장점이 드러나는데,
시퀀스가 길어지면 Noisy한 데이터가 많아져 성능이 하락하는 것이 일반적이나, BERT는 이러한 환경에서도 성능이 안정적이라는 것을 보여준다.
추가로 BERT4Rec의 시간복잡도는 O($n^{2}d$)라고한다.
(n=sequence length)
Ablation study
마지막으로 이들은 BERT4Rec 모델에서 핵심이 되는 컴포넌트들을 제거함으로 해당 요소가 얼마나 중요한지 보여주었다.
Layer와 head가 두 개일때랑 각 컴포넌트를 통제할 때의 결과를 비교하면 된다.(dim=64, others = optimal setting)
Positional Encoding이 없을 때, 성능이 전체적으로 떨어졌지만 유난히 긴 시퀀스 데이터셋에서 많이 떨어졌다.
왜냐하면 아이템의 위치값이 주어지지 않으니 특정한 시점에 엉뚱한 아이템을 추천해줄 가능성이 커지기 때문이다.
그래서 시퀀스가 길어질수록 그 가능성은 더 커져 성능이 낮다.
PFFN도 긴 시퀀스에서 눈에 띄는 하락이 일어났는데,
여러개의 attention head를 합쳐 FFN을 하는 과정이 사라지면
다양한 맥락을 학습할 수 없어지기 때문이다.
LN, RC, Dropout은 overfitting을 방지하기 위한 주요 컴포넌트로 짧은 시퀀스를 가진 beauty에서 많은 하락이 일어났다.
즉, 적은 데이터셋일수록 해당 컴포넌트가 중요하다는 것이다.
Number of layers는 layer의 개수가 증가함에 따라 성능이 올라간다는 것을 보여준다.
당연하게도 레이어를 쌓을수록 더 높은 성능을 보이는 것은 ML-20m과 같은 거대한 데이터셋이다.
반대로 beauty는 4번째 레이어에서 성능이 더 안좋아졌다.
Head Number도 늘어날수록 긴 시퀀스에서 좋은 성능을 보였다.
여러가지 컨텍스트를 반영하는 head가 긴 시퀀스에 더 잘 반응한 결과이다.
이렇게 논문 한 편이 끝이났다.
확실히 다른 모델들보다 파라미터가 많고, 사이즈가 큰 느낌이다.
그래도 문제를 푸는 접근법이 신선해서 좋았다.
정답은 물론 미래도 학습한 모델이면 충분히 가치가 있을 것 같다.
다만 콜드스타트와 같은 RS 고질적 문제는 역시 해결하기가 까다로운 것 같다.
연산량도 나름 높은편이라 모델이 더 다이어트되면 충분히 실무에서도 적용할 수 있을듯하다