Factorization Machine
참고 논문 : Factorization Machines ( Steffen Rendle, Department of Reasoning for Intelligence )
1. Introduction
(1) What is Factorization Machine?
FM(Factorization Machine) = SVM ( Support Vector Machine ) + Factorization
핵심 : “모든 변수 들 사이의 상호 작용 효과(Interaction Effect)”를 고려할 수 있다.
장점 : sparse data에서도 잘 작동함 ( recommendation system 문제를 잘 풀 수 있음)
FM 외의 다른 Factorization Model들도 있으나 ( 대표적으로, matrix factorization ), 이러한 방법들은 데이터는 일반적인 데이터에 쉽게 적용 불가! general task 풀기에는 FM이 좋다!
(2) Drawback of SVM
Random Forest가 나오기 전에, 유명했던 SVM!
SVM의 큰 한계점은, “sparse data”하에서는 잘 작동하지 않는다는 점!
( SVM에 관한 내용은 https://seunghan96.github.io/ml/%EB%B0%9C%ED%91%9C%EC%9E%90%EB%A3%8C/2.SVM/ 참고 )
(3) Advantages of FM
- 1 ) sparse data 하에서도 잘 작동함
- 2 ) linear complexity ( SVM 처럼 support vector에 의존 X )
- 3 ) General Predictor ( 다른 Factorization Model들은 매우 specific한 data에서만 잘 작동했는데, FM은 input data에 크게 영향 받지 않아 )
2. Sparsity Problem
이 논문은 기본적으로 data가 sparse한 문제인 상황을 다룬다.
( recommendation system이나, BOW (bag-of-words) approach에서 sparse data를 자주 접하게 된다 )
왜 sparse할까?
일단 기본적으로 sparse한 상황이 발생하는 이유는, “다양한 Categorical Variable domain”을 가지기 때문!
- ex ) 영화 추천을 해주려 하는데, 이 세상에 존재하는 영화의 수는 매우 많아!
- ex ) NLP에서, 특정 텍스트 이후에 나오게 될 단어를 예측하려 하는데, 단어의 종류도 매우 많아!
그렇다면 왜 FM은 위와 같은 sparse data의 상황에서 문제를 잘 해결할 수 있을까?
3. Factorization Machines (FM) Models
(1) Model equation
-
우리가 알고 있던 기존의 선형 모델은 다음과 같은 model equation을 가졌다. ( 총 n개의 변수 )
\[\hat{y}(x) := w_0 + \sum_{i=1}^{n}w_ix_i\] -
이에 반해, FM은 다음과 같은 model equation을 가진다. ( degree=2의 FM )
\[\hat{y}(x) := w_0 + \sum_{i=1}^{n}w_ix_i + \sum_{i=1}^{n}\sum_{j=i+1}^{n}<v_i,v_j>x_ix_j\]여기서, \(<v_i,v_j>\)는 \(k\) 차원의 두 벡터의 내적이고, 모든 변수 \(x_i\)는 각각에 해당되는 벡터 \(v_i\)를 가지고 있다.
\[< v_i, v_j > := \sum_{f=1}^{k}v_{i,f}\cdot v_{j,f}\]
위 식을 보면 알 수 있듯, (2-degree) FM은 모든 변수들 간의 상호작용 효과를 잡아낼 수 있다! ( (\(x_1,x_2\)), (\(x_1,x_3\)), (\(x_1,x_4\)), … (\(x_{n-1},x_n\)) )
또한 직관적으로 생각했을 때, 위 식에서 벡터 \(v\) 의 차원을 너무 크지 않게 해야 generalize하기 좋다는 것도 알 수 있다.
(2) Parameter Estimation Under Sparsity
sparse data에서는 여러 \(x\)변수들 사이의 상호작용 효과를 고려하기에 데이터가 충분하지 않은 경우가 종종 발생할 것이다. ex) \(x_{100}\) 과 \(x_{120}\) 의 값을 둘 다 가지고 있는 데이터가 없을 경우, \(x_{100}\)과 \(x_{120}\) 사이의 interaction effect는 잡아낼 수 없을 것이다.
한번 생각해보자.
- \(X_1\) : A장르의 영화 ( 좋아하면 1, 아니면 0 )
- \(X_2\) : B장르의 영화 ( 좋아하면 1, 아니면 0 )
- \(X_3\) : a 음식 ( 좋아하면 1, 아니면 0 )
- \(X_4\) : b 음식 ( 좋아하면 1, 아니면 0 )
A장르의 영화(\(X_1\))를 좋아하고, a 음식(\(X_3\))을 좋아하는 국현이가 이번에 딸기를 샀다.
B장르의 영화(\(X_3\))를 좋아하고, b 음식(\(X_4\))을 좋아하는 지우가 이번에 바나나를 샀다.
그런데 이때 A장르의 영화(\(X_1\))를 좋아하고 b 음식(\(X_4\))을 좋아하는 경률이형이 과일을 사려고 한다.
우리는 경률이형에게 과일을 추천해주기 위해 연산을 할 때, \(X_1\)과 \(X_4\)의 interaction term을 고려할 수 없다. Training Data에는 단 한번도 \(X_1\)과 \(X_4\)를 동시에 좋아했던 경우가 없었기 때문에, 이 두 \(X_1\)과 \(X_4\)의 interaction term의 parameter ( \(w_{(1,4)}\) )를 구한 적이 없었다. ( \(w_{(1,4)}\)는 0일 것이다 )
그렇다고 경률이형에게 그냥 먹고싶은 것을 알아서 찾아 먹으라고 하고 등 돌릴 수는 없다. 우리는 Factorization Machine을 사용해서 경률이형에게 최적의 과일을 찾아줄 수 있다.
HOW?
“by breaking the independence of interaction parameters! ( by factorizing them )”
Example
\(X\) 변수
- 파랑 box : “USER”가 누구인지
- 주황 box : 어떤 “MOVIE”를 봤는지
-
노랑 box : 여태까지 user가 모든 영화에 주었던 “RATE”들
- 초록 box : 가장 마지막으로 본 영화까지의 “MONTH” 수
- 보라 box : 가장 마지막으로 평점을 주었던 “MOVIE”
\(Y\) 변수
- 가장 마지막으로 본 영화의 “예상 평점”
(파란)\(A\)와 (주황)\(ST\) 사이의 상호작용 효과를 구하고 싶다고 해보자. 하지만, 문제는 \(A\)는 단 한번도 \(ST\)를 본적이 없다. 즉, \(w_{(A,ST)}\)는 0이 될 것이다. 하지만, 우리는 이 둘 사이의 interaction term을 factorize함으로써, (즉, 각각의 X가 자신만의 vector를 가지고, 두 X 사이의 내적인 \(<v_A,v_{ST}>\) 가 interaction term의 역할을 함 ) 이를 구할 수 있다.
우선 B 친구와 C친구는 둘 다 SW영화에 높은 평점을 주었다는 점에서 비슷한 벡터를 가질 것이다. ( \(v_B\)와 \(v_C\)는 유사할 것이고, \(<v_B,v_{SW}>\) 와 \(<v_C,v_{SW} >\) 도 유사할 것이다. )
하지만 A친구와 C친구는 매우 다른 vector를 가질 것이다. ( 이 둘은 각각 T와 SW에 정 반대의 평점을 남겼다. 취향이 달라도 너무 다르다. ) 또한, ST와 SW는 매우 비슷한 vector를 가질 것이다. ( B라는 친구가 ST와 SW에 아예 동일한 평점을 남겼다! )
이를 통해, 우리는 유추할 수 있다. \(<v_A,v_{SW}>\)와 \(<v_A,v_{ST}>\)는 매우 유사할 것이라는 점이다. A는 SW를 본 적이 있기 때문에, 본 적이 없는 ST 영화에 대해서도 (A와 ST 사이의) interaction effect를 유추할 수 있는 것이다!
(3) Computation
생각보다 시간 복잡도가 그다지 높지 않다.
FM의 model equation을 생각하면,
\[\hat{y}(x) := w_0 + \sum_{i=1}^{n}w_ix_i + \sum_{i=1}^{n}\sum_{j=i+1}^{n}x_ix_j\]시간 복잡도는 \(O(k\; n^2)\)라는 것을 알 수 있다.
하지만 우리는 위 식을 Lemma 3.1을 통해, 시간 복잡도를 \(O(k \; n)\)으로 줄일 수 있다!
[ Proof ]
\[\sum_{i=1}^{n}\sum_{j=i+1}^{n}<v_i,v_j>x_i x_j\] \[= \frac{1}{2}\sum_{i=1}^{n}\sum_{j=1}^{n}<v_i,v_j>x_i x_j - \frac{1}{2}\sum_{i=1}^{n}<v_i,v_i>x_i x_i\] \[= \frac{1}{2}(\sum_{i=1}^{n}\sum_{j=1}^{n}\sum_{f=1}^{k}v_{i,f},v_{j,f} x_i x_j - \sum_{i=1}^{n}\sum_{f=1}^{k}v_{i,f}v_{i,f}x_i x_i)\] \[=\frac{1}{2}\sum_{f=1}^{k}((\sum_{i=1}^{n}v_{i,f}x_i)(\sum_{j=1}^{n}v_{j,f}x_j) - \sum_{i=1}^{n}v_{i,f}^2x_i^2)\] \[=\frac{1}{2}\sum_{f=1}^{k}((\sum_{i=1}^{n}v_{i,f}x_i)^2 - \sum_{i=1}^{n}v_{i,f}^2x_i^2)\]4. FM as Predictors
FM은 다양한 prediction task를 풀 수 있다. 대표적으로 다음과 같이 세 가지 문제가 있다.
- 1 ) Regression
- 위의 model equation에서 \(\hat{y}(x)\)
- 2 ) Binary Classification
- sign of \(\hat{y}(x)\)
- 3 ) Ranking
5. Learning FM
SGD (Stochastic Gradient Descent)를 통해 효율적으로 학습할 수 있다.
FM 모델의 기울기(gradient)는 다음과 같다.
\(\frac{\partial}{\partial \theta} \hat{y}(x)\) = \(\left\{\begin{matrix} 1 \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\; if \; \theta =0\\ x_i \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\; if \; \theta =w_i\\ x_i \sum_{j=1}^{n}v_{j,f}x_j - v_{i,f}x_i^2 \;\;\;\;\;\;\; if \; \theta = v_{i,f} \end{matrix}\right.\)
( 위 기울기에서 \(\sum_{j=1}^{n}v_{j,f}x_j\)는 \(i\)와 무관하기 때문에, 미리 계산한 뒤 사용할 수 있다. )
6. d-way FM
지금 까지는 2-degree (2-way)의 FM만을 고려했다. 이를 d-degree로 일반화 하면 다음과 같이 나타낼 수 있다.
\[\hat{y}(x) := w_0 + \sum_{i=1}^{n}w_ix_i + \sum_{l=2}^{d}\sum_{i_1=1}^{n}\cdot \cdot \sum_{i_l = i_{l-1} +1}^{n} (\prod_{j=1}^{l} x_{i_j})(\sum_{f=1}^{k_l} \prod_{j=1}^{l}v_{i_j,f}^{(l)})\]FM을 요약하자면, 그다지 복잡한 알고리즘은 아니면서도 크지 않은 연산량으로도 모든 변수들 간의 상호작용 효과를 고려할 수 있다는 점에서 좋은 모델이다.