본문 바로가기

Tech/Machine Learning

[추천시스템] 딥 오토인코더 추천시스템 논문 번역 : Training Deep AutoEncoders for Collaborative Filtering


요약

a) Deep AutoEncoder가 얕은 형태의 모델보다 훨씬 잘 동작함

b) 비선형 activation Function과 Negative parts 가 딥모델을 학습시키는데 결정적이었음

c) Overfitting을 방지하기 위해 Dropout과 같은 정규화 사용이 필요했음

CF모델의 Sparseness를 해결하기 위한 반복적이고 re-feeding에 기반한 새로운 트레이닝 알고리즘을 제안함

1. 서론

추천시스템은 Context-based와 개인화 추천으로 나눌 수 있음

Context-based : 위치, 날짜, 시간 등 상황에 기반한 추천

개인화 추천은 일반적으로 CF를 이용하여 유저에게 아이템을 추천함

유저의 선호도는 다른 사용자의 선호도에 기반하여 이루어지고 유저와 다른 유저간의 '유사성'을 기반으로 한 명시적으로 추론됨

유사한 기호를 가진 두 사람은 랜덤하게 선택된 두사람보다는 아이템에 대해서 같은 의견을 가지고 있을 것이라는 가정을 기반으로 함

전통적인 CF 모델의 문제점 → Missing Entry를 추정하는데 RSME 측정 성능에 문제가 있음

1.1 관련연구

RBM 추천시스템

Auto-Encoder 적용 추천시스템

Feed forward NN, RNN

많은 방식이 차원축소의 형태로 다뤄짐

→ Deep autoEncoder를 적용

I-AutoRec(Item-based AE), U-AutoRec (User based AE)

CF를 Non-DeepLearning 방식으로는 많이 접근하고 있음

ALS와 같은 행렬인수분해 방식, 확률론적 행렬인수분해 방식이 유명함

넷플릭스 대회에서 우승한 가장 견고한 시스템들이 구체적으로 영감이 되었음

넷플릭스 데이터는 점수 메기는 시간에 대한 정보도 포함되어 있음

몇몇 전통적인 CF 방식도 시간에 대한 정보를 포함하는 형태로 확장되고 있음 (such as TimeSVD++)

최근의 RNN 추천 기법도 시간정보를 포함하는 모델이 있음


2. 모델

사용기법 : SELU (Scaled Exponential Linear Units)사용, Dropout, Iterative output re-feeding

AutoEncoder는 Encoder, Decoder 2가지 변환기법으로 구현되어 있음

AutoEncoder의 목표는 x와 f(x) = decode(encode(x))의 에러를 최소화하는 데이터의 d dimentional 대표값을 얻는데 있음

위 그림은 전형적인 4계층의 오토인코더 네트워크임. encoding 단계에서 데이터에 noise가 들어가면  오토인코더는 de-noising을 수행함

오토인코더는 차원축소의 탁월한 도구이며 PCA와 같은 차원축소 기법의 엄격한 일반화로 볼 수 있음

비선형 activation이 없고 "코드"레이어만 있는 오토인코더는 MSE 손실을 최적화하도록 훈련된 경우 인코더에서 PCA 변환을 학습할 수 있어야 한다 

논문의 모델에서 오토인코더는 feed-forward 네트워크로 구성회어 있다. 이는 l = f(W*x+b)를 계산하는 전통적인 fully-connected network이다.

여기서 f는 비선형 활성함수임. 만약 활성함수의 범위가 데이터보다 작으면 디코더의 마지막계층에서는 선형으로 유지되어야 한다

활성함수는 0이 아닌 negative part를 포함하여야 한다는 것은 매우 중요한데, 이를 위하 SELU unit을 실험에서 사용함

만약 디코더-인코더가 대칭인 아키텍처라면 디코더의 weight는 인코더의 역(transpose) weight와 같을 것임.

이러한 오토인코더를 constrainted  또는 tied라고 부르며 unconstrained보다 2배 가량 적은 파라메터를 사용함


Foward pass and inference

forward pass나 inference에서 모델을 트레이닝셋(x ∈ Rn)의 등급백터로 표현되는 사용자를 취함

x는 매우 sparse한 반면 디코더의 출력값 (f (x) ∈ Rn)는  매우 조밀하고 모든 아이템에 대한 평점 예측을 담고 있다는 것에 주목하자


2.1 Loss Function

고객평점벡터에서 0을 예측한다는 것은 말이 안되기 떄문에 연구에서는 MMSE(Masked Mean Squared Error)로 접근함

ri는 실제 평점, yi는 예측값, mi는  mask function (if ri가 0이 아니면, mi = 1, 그렇지 않으면 mi = 0)

MMSE와 RMSE는 직접적인 연관성이 있음 (RMSE = root(MMSE))

 

2.2. Dense re-feeding

트레이닝이나 추론시에 input (x ∈ Rn)은 매우 sparse 함. 왜냐하면

누구도 모든 아이템의 작은 부분을 현실적으로 평가할 수 없기 때문

반면에 오토인코더의 결과는 매우 dense함

Then f (x )i = xi , ∀i : xi != 0 and f (x)i accurately predicts all user’s future ratings for items i : xi = 0. This means that if user rates new item k (thereby creatinganewvectorx′)thenf(x)k =xk′ andf(x)= f(x′).Hence, in this idealized scenario, y = f (x ) should be a fixed point of a well trained autoencoder: f (y) = y.

고정소수점 제약을 구현하고 조밀한 학습 업데이트를 위해, 연구에서는 매 최적화 이터레이션에 re-feeding을 3~4회 반복함

1) sparse한 x가 주어졌을 때 f(x)와 loss를 계산함 (forward pass)

2) gradients를 계산하고 weight 값을 업데이트 함 (backward pass)

3) f(x)를 새로운 샘플로 보고 f(f(x))를 계산함. 이제 f(x)와 f(f(x))는 dense하고 equation의 loss 1은 non-zeros인 m을 갖음 (2nd forward pass)

4) gradients를 계산하고 weight 값을 업데이트 함 (2nd backward pass)

3)~4)스텍을 매 이터레이션마다 한번이상 수행해줌


3. 연구 및 결과

3.1 환경 셋업

점수를 예측하는 문제에서 랜덤하게 점수를 예측하는 대신에 과거의 데이터에 기반에서 예측하는 것이 훨씬 연관성이 높다

평가를 위해 넷플릭스 데이터를 트레이닝셋과 데이터셋을 시간기준으로 분리했음

트레이닝셋은 테스트셋보다 먼저 점수를 부여한 것들로 구성했음

테스팅 데이터는 다시 Test와 Validation으로 서브셋 나누었고, 각각 테스팅 간격의 점수는 각 서브셋에 50%의 확률로 출현하게 나누었음

트레이닝셋에 나타나지 않는 User와  Item은 Test, Validation Set에서 지움

실험에서 batch size는 128을 썼고, SGD (0.9)와 Momentum (0.001)을 사용함

파라메터 초기화를 위해 xavier를 사용, Pre-training은 사용하지 않음

올바른 activation function을 사용했기 때문에 좋은 결과나 나올꺼라 예상함


3.2 Activation Types의 효과

여러 activation function의 효과를 측정하기 위해,

128개 유닛 4개층 autoencoder에서 딥러닝에서 자주 사용되는 sigmoid, RELU, max(relu(x)) 또는 RULU6, TANH, ELU, LRELU 등을 

테스트 했고 SELU (Scaled exponential linear units)도 테스트 함

점수는 1~5점까지 주어지기 때문에 디코더의 마지막 레이어에서는 sigmoid나 tanh 기반의 모델을 사용

다른 레이어에서는 모든 모델의 Activation Function 사용



fig.1 - mini batch별 RMSE

ELU, SELU, LRELU가 sigmoid, relu, relu6, tanh보다 성능이 잘나옴

동작이 잘되는 활성함수와 아닌것을 나누는데 2가지 Property가 있음

첫번째가 non-zero negative part , 두번째로 unbounded positive part

이 두가지 property가 학습에 있어서 성공요인임

그래서 실험에서는 성능을 위해 SELU를 사용하였고 SELU기반으로 네트워크를 Tune함


3.3 Overfitting the Data

넷플릭스 full data는 477K User, 98M ratings, 17,768 Movies로 구성됨

encoder에 첫번째 레이어는 d * n + d 의 가중치로 함 (d는 레이어의 유닛수, n은 영화(item)의 갯수 )

모던 딥러닝 알고리즘과 하드웨어에서는 상대적으로 작은 작업임

단일 레이어의 encoder, decoder였다면 d가 작더라도 금방 overfit 됬을 것 (아래 그림 참조)

unconstrained autoencoder에서 constrained로 전환은 overfitting을 감소시킴

그러나 완벽하게 이러한 문제를 해결한건 아님


3.4. Going Deeper

레이어를 넓게 만들면 트레이닝 loss가 낮아지는 반면, 레이어를 더 추가하면 네트워크의 일반적인 성능이 종종 좋아짐

차원을 충분히 128개로 충분히 낮게하여 모든 레이어가 오버피팅을 피하게 하고 레이어를 추가해봄

아래 테이블에서 보면  레이어의 수와 성능간에 양의 상관관계가 있는 것을 볼 수 있음

엔코더의 첫번째 레이어에서 나머지 3개 레이어로 통화할수록 성능(RMSE)에 좋은 영향을 미침 (1.146~0.9378)

레이어를 추가하는게 성능에 도움이 되지만 맹목적으로 느리면 결과가 감소할수 있음

 d = 256인 single layer에 9,115,240개의 파라메터에서 RMSE가 매우 좋지 않았음 (1.0 이상)


3.5 Dropout

(n, 512, 512, 1024, 512, 512, n)의 아키텍처를 갖는 괜찮은 모델을 적용했으나 정규화 과정 없이 트레이닝 시 금방 Overfit됌

정규화를 위해 Dropout을 0.8 적용하였을때 성능이 가장 좋았음 (1개의 레이어의 결과기준)

e.g. f (x) = decode(dropout(encode(x)))

이후 모든 레이어에 적용했으나 결과가 좋지 않았음

 


3.6 Dense re-feeding

(n, 512, 512, 1024, dp(0.8), 512, 512, n) 모델에서 Iterative dense re-feeding이 추가적인 성능 향상에 효과가 있었음

단순히 결과값을 re-feeding 하는 것은 성능에 큰 영향을 미치지는 못했지만, 더 높은 learning rate와 함께 사용했을때 성능에 큰 영향을 미쳤음

learning rate (0.005)의 높은 수치에서 dense re-feeding 없이 했을 때 모델 성능은 안좋음

dense-refeeding의 적용과 LR(Learning Rate)의 증가가 성능(RMSE)를 향상시켰음 (0.9167 ~ 0.9100)

검증 RMSE 성능과 테스트 RMSE 성능이 가장 좋은 checkpoint의 선택으로 0.9099의 성능을 보임


3.7 Comparison with other methods

Recurrent Recommender Network와 비교함

상기 모델은 PMF, T-SVD, I/U-AR 모델보다 좋은 결과를 보인 모델임

T-SVD, RRN과 달리 실험한 모델에서는 명시적으로 평점의 다양성(temporal dynamics of ratings) 은 고려하지 않음

각각의 모델에 같은 트레이닝셋을 이용을 했고 100epoch 돌림. 그중 가장 높은 성능이 나오는 checkpoint를 보이는 것을 사용함

넷플릭스 3개월치 데이터와 Full 데이터는 7배가량 양이 차이가 나지만 성능의 향상은 단일 모델로 봤을 때 크지 않았음

사실 성능이 잘나오는 Full Data는 Overfit됨. 그래서 실험에서는 모델의 복잡성을 줄여야 했음


4. 결론

딥러닝은 많은 분야에서 혁신을 일으키고 있고, 추천시스템에도 영향을 미침

이 논문에서는 상대적으로 적은 데이터에서도 Dropout이나 SELU와 같은 딥러닝 기법을 이용하여 성공적으로 학습시키는 것을 보여줬음

나아가 interative output re-feeding 기법을 통해 CF의 밀도 높은 수행을 가능하게 하고 learning rate를 증가시키고, 추가적인 성능향상을 보였음

이 논문은 아이템기반 추천을 다루는 반면에 이 접근 방식이 User 기반의  모델보다 덜 실질적이라는거에 대한 쟁점이 있음

실제 추천시스템에서는 유저기반의 추천이 아이템 기반보다 훨씬 많음

개인화된 추천 시스템을 구축하는데 있어 규모의 문제에 직면하게 되는데 아이템에는 수용이 되나 사용자에게는 아님