예) M명의 사용자가 있을 때, 두 번째 사용자에 대한 One-hot Representation
{ 0, 1, 0, … , 0 } ⇒ 두 번째 원소만 1이고 나머지는 개의 원소는 0인 상태
예) N개의 아이템이 있을 때, 번째 아이템에 대한 One-hot Representation
{ 0, 0. … , 1, 0 } ⇒ 번째 원소만 1이고 나머지 개의 원소는 0인 상태
사용자와 아이템 모두 마찬가지로 적용된다.
Input layer는 사용자와 아이템 행렬을 입력으로 받는 부분이며, 위의 그림은 Matrix Factorization에서 내적을 구하고자 하는 사용자와 아이템을 입력 벡터로 사용하는 모습이다.
이때, 사용자와 아이템의 각 행렬은 one-hot encoding 형태의 벡터로 구성된다.
각 사용자 벡터는 전체 명의 학생 중에서 구분될 수 있도록 하나의 원소만 1이고 나머지 원소는 모두 0이며, 이는 개의 아이템 벡터에 관해서도 모두 마찬가지다.
사실 여기서는 입력으로 주어지는 사용자와 아이템 벡터를 one-hot encoding된 벡터로 나타내는 것으로 표현했지만, 사용자 또는 아이템에 관한 side information이 존재하고 이를 통해 각 사용자와 아이템이 구별되도록 표현할 수 있으면 side information을 사용하여 입력 벡터에 concatenation 하여 임베딩 레이어에 입력으로 넣을 수도 있다.
Embedding Layer
사용자와 아이템에 관한 잠재요인을 추출하는 부분
사용자와 아이템 각각에 대한 잠재요인 개를 추출하기 위해 두 개의 Embedding Layer로 구성
개의 잠재요인을 추출한다면 Embedding Layer는 개의 노드로 구성된다.
개의 노드가 각각 모든 유저에 대한 One-hot Encoding과 연결
마치 기존 MF에서 행에 해당되는 한 명의 사용자 또는 아이템에 관해 개의 저차원의 원소로 표현되는 것과 동일하다.
앞서 만든 one-hot encoding된 사용자와 아이템 입력 벡터 쌍을 각각 임베딩 레이어에 통과시켜서 차원 공간으로 보내는 과정을 거치는 곳이다.
사용자와 아이템 벡터를 모두 차원으로 보내는 것은 Matrix Factorization에서 행 또는 열이 차원을 지니는 두 개의 행렬 곱으로 나타내는 과정과 대응된다.
Element-wise Product Layer
Embedding Layer의 사용자와 아이템의 잠재 요인에 관한 내적 연산을 위해 존재한다.
마치 MF에서 행렬 연산을 수행하는 것과 같다.
사용자와 아이템의 잠재 요인은 모두 개의 원소로 되어 있으므로 내적 연산이 가능
한 사용자의 하나의 아이템에 대한 compatibility를 구하는 내적의 결과 값은 scalar이므로 이것이 사용자와 아이템에 대한 평점 또는 선호도를 나타내는 값으로 볼 수 있다.
Implicit feedback이라면 해당 사용자가 그 아이템에 어느 정도의 관심을 지니는지에 관한 정도로 판단할 수 있다.
Matrix Factorization에서 차원을 지니는 사용자 또는 아이템 벡터를 행렬 곱할 때 각 원소끼리 곱하여 내적을 수행한다.
이는 신경망에서 embedding layer를 통과한 차원의 사용자와 아이템 벡터 쌍을 element-wise product 하는 연산이다.
Prediction Layer
Element-wise Product Layer의 연산 결과는 사용자 또는 아이템마다 상이한 절댓값을 지닐 가능성이 높다.
예) 사용자 와 아이템 에 대한 예측 결과 값은 1.2, 아이템 에 대한 예측 결과 값은 -5일 수 있다.
Sigmoid 함수 등 0에서 1 사이로 compatibility에 대한 예측을 나타낼 수 있는 값으로 바꾸기
예) 사용자 가 아이템 를 좋아할 확률 0.7, 아이템 를 좋아할 확률 0.05
Keras에서는 Flatten Layer 사용 가능
사용자 벡터와 아이템 벡터를 element-wise 한 결과는 어떠한 scalar 값을 지니는데, 이는 해당 사용자가 그 아이템에 관해 얼마나 많은 관심을 지닐지에 관한 정도로 해석할 수 있다.
이를 0에서 1 사이의 확률 값으로 나타내고 비선형성을 부여하고자 sigmoid 등 활성 함수를 통과시키면 사용자의 아이템에 관한 선호도 또는 구매 예측 확률을 예측할 수 있다.
사용자와 아이템에 대한 Bias 추가 학습
모든 사용자에 대한 입력 정점 개와 연결된 하나의 정점 추가
사용자의 평점 또는 선호도에 대한 편차를 학습
모든 아이템에 대한 입력 정점 개와 연결된 하나의 정점 추가
아이템의 평점 또는 선호도에 대한 편차를 학습
Element-wise Product Layer에서의 결과와 학습한 사용자와 아이템 Bias 결과 값을 더한다.
전체 평점을 모델이 학습하는 건 복잡하다.
데이터를 신경망에 넣기 전에 전체 평균을 일률적으로 빼주고 나중에 산출된 예측치에 일률적으로 더하는 방식이 유리하다.
Explicit feedback에서 어떤 사용자는 전반적으로 아이템에 관해 평점을 후하게 주는 경우가 있고, 또 어떠한 사용자는 박하게 주는 경우도 있다.
이는 implicit feedback에서도 마찬가지이며 아이템 관점에서도 선호도에 bias가 생길 수 있는데, 이러한 사용자 또는 아이템의 경향성을 반영하고자 bias를 적용하면 다음과 같다.
: 전체 평점 평균
: 전체 평균을 제거한 후 사용자 의 평가 경향 (사용자 의 평점 평균과 전체 평균의 차이)
: 전체 평균을 제거한 후 아이템 의 평가 경향 (아이템 의 평점 평균과 전체 평균 차이)
모든 사용자에 대한 입력 정점 개와 연결된 하나의 정점을 추가한 것이 바로 사용자의 평가 경향인 를 학습하기 위한 부분이다.
마찬가지로 모든 아이템에 대한 입력 정점 개와 연결되어 추가된 정점은 아이템의 평가 경향인 를 학습하기 위한 부분이다.
또한 와 를 element-wise Product layer에서 내적한 결과와 더하는 것이 바로 위의 식에서 의 계산 과정이다.
신경망에서 전체 평균을 구하는 식은 상대적으로 복잡하므로 이를 backpropagation하여 파라미터를 업데이트할 때 어려움이 따른다.
따라서 입력 데이터를 신경망에 넣기 전에 전체 평균을 일률적을 빼고, 나중에 산출된 예측치에 일률적으로 더해주는 방식을 적용한다.
NeuMF(Neural Collaborative Filtering) Multi Layer Perceptron
위에서의 신경망 MF에서는 단순히 Embedding Layer의 결과를 내적하는 연산을 취한다면, Neural MF에서 Multi Layer Perceptron 부분은 hidden layer를 여러 개 두어서 기존 MF보다 데이터에서 비선형적인 특징을 학습할 수 있는 장점을 지닌다.