이 논문은 2016년에 구글이 발표한 논문으로 memorization에 능한 wide model과 generalization에 능한 deep model을 결합한 추천 시스템 모델을 제안한 논문입니다. Google play에서 실험을 수행하였고, 기존 wide 또는 deep model 만을 이용한 것보다 성능이 우수함을 보였습니다.
ABSTRACT
cross-product feature transformation을 이용한 선형모델은 feature간 상호작용(interactions)의 기억(memorization)에 효과적입니다. (feature interaction은 다음 글을 참고해 주세요(https://tootouch.github.io/IML/feature_interaction/) )
( 자세한 cross-product feature transformation은 밑에서 설명하겠습니다)
하지만 일반화(generalization)에 많은 feature engineering 노력이 필요합니다. 이때 deep neural networks가 저차원(low-dimensional) dense embedding을 통해 보이지 않는 feature간 combination을 잘 일반화 할 수 있습니다. 하지만 dnn은 sparse inputs일 때 지나치게 일반화를 할 수 있고 관련없는 item을 추천할 수 있습니다.
그래서 저자는 앞서 말했듯이 memorization에 능한 wide 선형 모델과, generalization에 능한 dnn을 결합한 Wide & Deep 모델을 제안했습니다.
INTRODUCTION
추천 시스템은 유저 정보와 문맥 정보(contextual information) 세트인 input query가 주어지면 그와 관련된 아이템들을 찾아 순위를 매겨 output 해줍니다. 추천 시스템에서 memorization과 generalization 둘 다를 함께 성취하는 것이 어렵다는 문제가 있었습니다. 그래서 저자들은 memorization에 능한 wide 선형 모델과, generalization에 능한 dnn을 결합하였는데요, 이에 대해서 전반적으로 살펴보겠습니다.

Wide Models & Memorization
- item이나 feature의 co-occurrence을 학습하고 historical data에서의 상관관계(correlation)을 이용해 정의된다
- training data에 포함되지 않았던 query-item feature pair에 대해서 일반화하지 못한다
- sparse feature에 대해서 cross-product transformation을 통해 효과적으로 memorization 성취한다
이때 cross-product transformation의 예시는 어떤 유저가 netflix 앱을 설치했고, pandora 앱에 흔적(impression)을 남겼다면, 즉 봤다면 1의 값을 줍니다. 이에대한 구체적인 예시는 밑에서 다루겠습니다.
Deep Models & Generalization
- 과거에 일어나지 않았거나 거의 드물게 발생한 새로운 feature 조합을 발견해 낸다
- 저차원 dense embedding vector을 학습함으로써 기존에 없던 query-item feature pair에 대해서 일반화할 수 있다
- sparse input 일 때 효과적인 저차원 representation을 배우기 힘들어 관련 없는 item을 추천하게 된다
RECOMMENDER SYSTEM OVERVIEW

위 사진을 보시면 recommender system의 overview를 보실 수 있습니다.
- Query는 유저가 웹사이트에 방문했을 때 생기는 문맥적 특징(contextual features, 날짜, 디바이스 등)과 다양한 유저를 포함하고 있습니다.
- user actions는 어떤 앱을 클릭하거나 구매하는 행동이고 query와 함께 학습 데이터로써 logs로 기록됩니다.
- database에는 엄청나게 많은 앱이 있어 모든 앱에 대해서 순위를 매기면 시간이 오래 걸리기 때문에 retrieval system에서 query에 잘 매칭되는 몇 가지 아이템 리스트를 뽑아냅니다. 이때 리스트를 뽑아내기 위해 인간이 정의한 규칙과 학습시킨 모델을 이용합니다.
- ranking system에서 아이템의 score로 순위를 매깁니다. score는 보통 p(yIx)로 features x가 주어졌을 때 user action label y의 확률입니다. 이때 x는 user(나라, 언어 등), contextual(디바이스, 날짜 등), impression (앱의 과거 통계, 앱 만들어진 연도 등) features를 포함합니다.
WIDE & DEEP LEARNING
The Wide Component

wide component는 일반적인 선형 모델로 위와 같이 나타납니다. feature set은 raw input features와 transformed features로 이루어져 있는데, 번형은 cross-product transformation에 의해 수행됩니다. 이 transformation은 0과 1로만 나타나는 binary feature들 사이에 interaction을 알 수있게 해주고, 선형 모델에 비선형성을 더해줍니다.

여기서 c_ki는 i번째 feature가 k번째 transformation의 부분일 때 1이고 아니면 0입니다. 이 transformation에 대한 설명은 다음 블로그를 참고하였습니다. (https://leehyejin91.github.io/post-wide_n_deep/)
이 transformation에 대해 설명하자면 만약 feature vector x가 (성별, 만 19세 이상인지, 넷플릭스 앱 설치여부) 라면 모든 feature가 binary입니다.

어떤 한 유저가 (여성, 성인, 설치함) 이면 feature vector x는 [0,1,1]로 나타나고 k = 2 가 성인여부와 넷플릭스 설치여부를 나타내는 조합이면 다음과 같이 나타납니다.

The Deep Component
deep component는 feed-forward neural network로 input은 feature strings(예, gender = man) 와 같은 sparse feature입니다. 이후는 다음과 같은 단계를 거칩니다.
- input이 embedding vector인 저차원, 실수 벡터로 변환됩니다. 처음에는 랜덤하게 초기화되고, 이후 loss function을 최소화하도록 학습되어 값이 변하게 됩니다.
- 뉴렬 네트워크의 hidden layers에 입력되어, 각 층의 hidden layer는 다음과 같은 계산을 진행합니다.

Joint Training of Wide & Deep Model
wide component와 deep component가 각 모델을 따로 학습시켜야 하는 ensemble과 달리 joint training을 수행합니다. 이때 결합 학습은 mini batch stochastic optimization을 이용하여 wide, deep part를 동시에 backpropagation을 수행하여 학습을 시킵니다. 저자들은 optimizer로 wide model에는 Follow-the-regularized-leader(FTRL) 알고리즘을, deep model에는 AdaGrad을 이용하였습니다.
FTRL에 대해 정리한 블로그: https://dos-tacos.github.io/paper%20review/FTRL/
모델의 prediction은 다음과 같이 나타납니다.

이때 y는 binary class label로 0과 1로만 나타나며 1일 때 app acquisition(설치)을 나타냅니다.
SYSTEM IMPLEMENTATION
앱 추천 pipeline은 다음과 같이 3가지 stage로 구성되어 있습니다.( Data Generation, Model Training, Model Serving)

Data Generation
data generation은 model 학습을 위한 데이터를 생성해 줍니다. user와 app impression data가 학습 데이터 생성을 위해 사용되고, 이때 label은 위에서 말한 것과 같이 1일 때 app 설치, 0일 때는 그 외입니다. vocabulary Generator는 categorical feature strings(남성, 여성, 클릭 등)을 정수형 ID로 변환해 줍니다.
Model Training

저자들이 사용한 모델의 구조는 다음과 같습니다. 이때 파란색 박스는 wide component, 빨간색 부분은 deep component, 보라색 부분은 joint training of Wide & Deep Model입니다.
Wide & Deep model은 시간이 지나 새로운 학습 데이터가 싸이면 새로운 data set으로 다시 학습할 필요가 있습니다. 하지만 다시 모델을 학습시키는 것은 계산하기 어렵고 시간이 오래 걸리기 때문에 저자들은 warm-starting system을 도입하였습니다. 이 시스템은 기존 시점의 모델에서 embeddings과 linear model weights을 초깃값으로 사용하여 모델을 학습시킵니다. 학습이 완료된 모델은 model verifier에서 model severs에 로드하기 전 문제가 없는지 확인 후 로드합니다.
Model Serving
학습과 검증이 완료된 모델은 model servers로 로드됩니다. 이후 apps recommendation engines에서 retrieval system에서 앱 후보 리스트를 받아 순위를 매겨 유저에게 보여줍니다.
EXPERIMENT RESULTS

저자들은 A/B test을 진행하였습니다. (https://ko.wikipedia.org/wiki/A/B_%ED%85%8C%EC%8A%A4%ED%8A%B8)
대조군은 기존 ranking model인 wide 모델을, 실험군은 Wide & Deep 모델을 이용하였습니다. 위 Table을 보시면 실험군이 대조군보다 상대적으로 app acqusition rate가 3.9% 높았고, deep 모델만을 이용한 것보다 1% 더 높은 것을 볼 수 있습니다.
그리고 저자들은 multithreading과 batch size를 줄여 고객의 대기시간을 줄일 수 있었습니다.
CONCLUSION
wide linear model은 cross-product feature transformation을 사용해 sparse feature을 효과적으로 기억할 수 있었고, deep neural network는 저차원의 embedding을 통해 기존에 볼 수 없던 feature interaction을 일반화할 수 있었습니다. 저자들은 Google play에서 실험을 수행하였고, 기존 wide 또는 deep model만을 이용한 것보다 app acquisition을 향상시킬 수 있었습니다.