糞糞糞ネット弁慶

読んだ論文についてメモを書きます.趣味の話は http://repose.hatenablog.com

Factorization Machines (ICDM 2010) 読んだ

Factorization Machines (pdf)
Factorization Machines with libFM (TOIS, pdf)

CriteoやAvazuの Click-through rate コンペでも良い成績を残している (GitHub - guestwalk/kaggle-2014-criteo, GitHub - guestwalk/kaggle-avazu) Field-aware Factorization Machinesを知る前にまずは Factorization Machnes (以下FM) の論文を読む事にした.

FMの紹介は他の人(Factorization Machinesについて調べてみたMatrix Factorizationとは)も既に書いているが,それらを読んでもどうにも自分にはピンとこなかった.具体的には,

  • 交互作用を考えようとするとパラメータが膨大/かつスパースになるのではないか
  • それだけでなく,計算量的に厳しいのではないか
  • factorizaion とは何を指しているのか

という点である.
これらの疑問への解決策は非常にすっきりした形で現されていて,非常に面白かった.もっと早く,せめて去年読めばよかった.

概要

SVM と Matrix Factorization を組み合わせたモデルである FM を提案する.
FM は SVMが苦手とする(推薦問題のような)非常にスパースなデータに対応することが可能である.
かつ,行列分解にもとづくモデルが抱える問題(一般的な予測問題に対応できないこと,及び,それぞれのモデルが各タスク用に特化していること)にも対応している.
まとめると,高次元かつ非常にスパースなデータに対する一般的な予測問題を解くための手法である.

定式化

入力xと出力yがあるとする.yは回帰だろうが分類だろうがランキングだろうがなんでもいい.以下,ユーザが映画にどのようなratingをしたか,という例に絞る.
まず,1 rating を一つの学習データとする(購買の文脈で言えば,1トランザクションではなく,1トランザクション中の中に含まれる全商品について,それぞれの商品を学習データとする).
そして,ユーザidや商品idを1-of-K表現の特徴量として入力する.ユーザと映画のratingデータだった場合,特徴量の大きさは ユーザ数 * 映画数 になる.あとはここに好き勝手に特徴量を入れていく.論文ではあるユーザがこれまでrateをつけた映画について 1/(そのユーザがrateをつけた映画の本数) とかいう謎のベクトル(A)や,ある映画への rate をいつ付けたか(B),その rate をつける前に見た映画は何か(C),といった感じで追加していく.
落ち着いて考えると,(B)は一次元であるとはいえ,(A)や(C)のベクトルはそれぞれ全映画数の長さを持つため,結果としてこの特徴量は非常に大きく,かつ,スパースになる.このようなデータに対して交互作用を考えると非常に厳しい事になると思われる.が,FMならば問題ない.

ではどうやるかというと,FM は次のようにモデルを構築する(以下は交互作用の次元としているが,いくらでも考慮可能).nは特徴量の次元数.

この式の各要素を見ていくと,一項目は定数項,二項目は普通の線形モデルを表現していることがわかる.重要なのは三項目.ここで変数(今は2変数)の交互作用をモデルに組み込んでいる.

交互作用を表現するにあたり,新たに登場するのが.これは,となるような行列における番目の要素であり,kは行列分解における削減した次元数,トピックモデルにおけるトピック数に相当するハイパーパラメータ.その上でとして対応する2つの特徴量の内積を取る.
これはつまり,特徴量の各次元を次元のベクトルで表現し,あとはそのベクトルの内積を用いて交互作用を表現している.恐らく,特徴量を低次元表現するところが matrix factorization に相当している.

交互作用の重みをVにおける内積で表現すると何が嬉しいか

これの何がすごいかというと,考慮する交互作用の数をもっと増やしたい,例えば100の変数の交互作用を考えたくなったとしよう.
例えばこの場合,FMを使わずにモデリングをしようとすると,(交互作用に絞って言えば)組み合わせに対する重みを推定する必要がある.これは,特徴量の次元数をnとするととなるため非常に膨大な量となり,全く現実的ではない.

しかし,FMであれば,交互作用の数がいくら増えたとしても,サイズの行列における各要素の内積を繰り返し取るだけで済む(この計算コストはかかるけど,のパラメータを推定するよりはまし).すなわち,パラメータが交互作用の数に全く依存しない(実際は交互作用の数が増えれば増えるほど,一つので表現すべき情報は増えるため,Vの次元数であるkを増やす必要があると思われる).

また,ナイーブに計算すると,学習データにおいて一度も登場していない組み合わせに対する交互作用が計算できない(何故ならばxの積を取る部分で一度でも0が出てくるとその項が消えるため).しかし,FMのように低次元の行列を考慮することによって,交互作用間の関係を考慮しながら推定を行うことにより,登場してないペアに対する交互作用が計算可能になる,というのもメリットである.これは同時に,FMは交互作用同時が独立でない,ということを仮定している.

その他

  • 交互作用項の計算をナイーブにやるとかかるけど式変形するとで可能
  • パラメータ推定はSGD.TOISの原稿にはMCMCによる推定やALSによる推定が書いてある.
  • SVM(特に組み合わせを考慮できる polynomial kernel)との比較は
    • 交互作用を独立とするか否か
    • FMは主問題を解くけどSVMは双対問題を解いてる(?)
    • SVMはサポートベクターが必要だけどFMはパラメータだけで予測可能
  • FMはただの Matrix/Tensor Factorizationだけでなく,SVD++,Pairwise Interaction Tensor Factorization,Factorizing Personalized Markov Chains(Factorizing Personalized Markov Chains for Next-Basket Recommendation (WWW 2010) 読んだ - 糞ネット弁慶)の一般形として定式化されている.これは冒頭に触れた「matrix factorization系のモデルはspecificすぎる」という問題点への解答となっている.これがFMが汎化モデルと呼ばれる理由.