AutoEncoder (for Recommend System)
2024. 2. 19. 13:27ㆍML model/Generative Model
AutoEncoder는 기본적으로 주어진 벡터(이미지)를 가장 잘 표현하는 저차원을 구하기 위한 모델로 이해하면 좋다.
즉 encoder를 통해 생성된 compressed representation는 decoder를 통해 원래의 벡터(이미지)로 복원되며, 가장 loss가 적은 최적의 표현이 되도록 학습된다.
추천 시스템에서 AutoEncoder는 어떻게 사용될 수 있을까?
user-item interaction matrix를 생성하여 접근해볼 수 있다.
- 이때 interaction으로 구매 내역, 방문 페이지, 검색 기록 등 Implicit feedback 정보를 사용하기도 한다.
import torch.nn as nn
import torch.nn.functional as F
import torch
import numpy as np
class AutoEncoder(nn.Module):
"""
input : encoder_dims
encoder = [n_items, dim1, dim2]
decoder_dims = [dim2, dim1, n_items]
"""
def __init__(self, config, encoder_dims, decoder_dims=None):
super(AutoEncoder, self).__init__()
self.encoder_dims = encoder_dims
if decoder_dims:
assert decoder_dims[0] == encoder_dims[-1], "In and Out dimensions must equal to each other"
assert decoder_dims[-1] == encoder_dims[0], "Latent dimension for p- and q- network mismatches."
self.decoder_dims = decoder_dims
else:
self.decoder_dims = encoder_dims[::-1]
self.encoder = self.build_layers(self.encoder_dims, config['activate_function'])
self.decoder = self.build_layers(self.decoder_dims, config['activate_function'])
def build_layers(self, dims, activate_function = 'ReLU'):
"""
Helper function to build layers based on the provided dimensions.
Parameters:
- dims (list): List of dimensions for the layers.
Returns:
- nn.Sequential: Sequential container for the layers.
"""
layers = []
for i in range(1, len(dims)):
layers.append(nn.Linear(dims[i-1], dims[i]))
if i == len(dims)-1:
pass
else:
if activate_function == 'ReLU':
layers.append(nn.ReLU())
elif activate_function == 'Sigmoid':
layers.append(nn.Sigmoid())
elif activate_function == 'Tanh':
layers.append(nn.Tanh())
else:
pass
return nn.Sequential(*layers)
def forward(self, input):
h = F.normalize(input)
h = self.encoder(h)
h = self.decoder(h)
return h
def get_codes(self, x):
return self.encoder(x)
'ML model > Generative Model' 카테고리의 다른 글
Variational AutoEncoder(VAE, Multi-VAE) (0) | 2024.02.21 |
---|---|
Denoising AutoEncoder(DAE, Multi-DAE) (0) | 2024.02.19 |