오늘은 CTR 예측에 쓰인 딥러닝 방법론들에 대해 공부해보았다.
Memorization(암기)
자주 발생하는 패턴이나 상관관계를 직접 학습하고 기억하는 능력
데이터에서 명시적으로 관찰된 피처 조합을 활용
로지스틱 회귀같은 선형모델이 유리
Generalization(일반화)
이전에 보지 못한 피처 조합에 대해서도 추론하는 능력.
잠재적 패턴을 학습해 새로운 상황에 적용하는 것
FM, DNN같은 임베딩 기반 모델이 유리
Wide & Deep은 구글이 제안한 추천시스템으로 암기와 일반화 두가지를 동시에 달성한 모델.
이미지 출처 : 논문
3 layers, ReLU 사용, 범주형변수는 피처임베딩 후 사용
wide component에 Cross-Product Transformation같은 피처 엔지니어링이 필요하다.
구조
Wide Component : 선형모델. 기억을 맡음. 특징간 직접적 상호작용을 학습한다.
Deep Component : 심층신경망. 일반화를 맡음. 특징들의 잠재적 패턴을 학습한다.
손실함수 : wide와 deep의 출력물을 더한 뒤 글로벌 bias 더하고 최종적으로 sigmoid 적용
이미지 출처 : 논문
Wide & Deep에서 wide쪽을 FM으로 바꿔, wide와 deep의 입력값을 공유하도록 했다.
즉, FM과 Deep 부분이 같은 임베딩 레이어를 공유한다. 따라서 wide&deep 같은 번거로운 피처 엔지니어링이 필요없이 end-to-end로 진행
된다.
학습 효율성이 향상되고 특징 표현의 일관성이 유지된다.
FM이 저차원 특징 상호작용을, Deep이 고차원 특징 상호작용 학습을 해서 두 출력을 결합해 최종 예측을 한다.
FM에 비해 더 복잡한 피처 상호작용을 학습할 수 있고, wide&deep에 비해 피처 엔지니어링이 없어 쉬우며, DCN에 비해 더 명시적인 저차원 상호작용을 할 수 있다.
def forward(self, x: torch.Tensor):
# FM의 1차 상호작용 / sparse feature만 사용
first_order = self.linear(x).squeeze(1)
# sparse -> dense
embedding = self.embedding(x) # (batch_size, num_fields, embed_dim)
# FM의 2차 상호작용 / dense 사용
second_order = self.fm(embedding)
# deep network를 통해 feature를 학습하는 부분
deep_out = self.dnn(embedding.view(-1, embedding.size(1) * embedding.size(2))).squeeze(1)
# FM(first_order + second_order)에 DNN 결과 결합
return first_order + second_order + deep_out
유저의 관심사, 행동정보를 동적으로 표현하는 추천 시스템 모델
대규모 전자상거래 플랫폼에서 효과적인 성능을 보이며, 사용자의 동적인 관심사를 정교하게 모델링할 수 있는 추천 시스템 모델
이미지 출처 : 논문
유저의 과거 행동 시퀀스에서 현재 아이템과 관련된 행동에 더 높은 가중치 부여한다.
유저가 기존에 소비한 아이템 리스트를 User Behavior Feture로 만들어 예측 대상 아이템과 이미 소비한 아이템 사이의 관련성을 학습한다.
유저 프로필, 광고, context같은 나머지 피처는 one-hot이지만, 유저행동 피처는 multi-hot으로 인코딩된다.
트랜스포머의 attention 메커니즘과 유사한 방식을 사용한다.
구조
Transformer를 사용한 CTR 예측 모델
사용자의 순차적인 행동을 고려하여 추천을 수행하는 딥러닝 기반 추천시스템 모델
CTR 예측 데이터도 시퀀스데이터처럼 순서가 중요하고, 대부분 sparse feature로 구성되어있으며, 비선형정긴 관계를 이루기 때문에 transformer 모델에 적합하다.
Transformer의 인코더 구조
를 활용하여 사용자의 과거 행동 시퀀스를 학습한다.
유저가 구매한 아이템 시퀀스, 각 아이템에 대한 유저의 평점 시퀀스, 사용자 프로파일, 아이템 특성 정보를 사용한다.
DIN이 단순히 과거 구매 목록을 활용한 것과 달리, BST는 구매의 시간적 순서까지 고려한다.
구매 시점간의 시간 차이를 positional encoding으로 반영한다.