Hatena::ブログ(Diary)

糞ネット弁慶

日本声優統計学会/声優統計についてはこちら

2015-04-02

[] Factorization Machines (ICDM 2010) 読んだ 22:41  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について調べてみた - QiitaMatrix Factorizationとは - Qiita)も既に書いているが,それらを読んでもどうにも自分にはピンとこなかった.具体的には,

  • 交互作用を考えようとするとパラメータが膨大/かつスパースになるのではないか
  • それだけでなく,計算量的に厳しいのではないか
  • 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が汎化モデルと呼ばれる理由.

sleepy_yoshisleepy_yoshi 2015/04/17 02:19 ちょうど僕も同じころに読んで運命を感じたのでコメントします。

仮にすべてL1正則化かけるとしても、\gamma と \theta の正則化項に対するハイパーパラメータは区別したいので、sklearnそのままだと難しいと思います。
個人的には\thetaはL2、\gammaはL1という組み合わせとかも試してみたいのですが、実装いじらないといけないですかね。

あと、1st authorはTibshirani 違いでは?Julie Tibshirani は学生さんかと思います。

reposerepose 2015/04/17 05:46 名前が似てるから適当に読んでました…。

正則化についてはまさしくおっしゃる通りだと思います。そこは区別したいのが気持ちですが、論文読む感じだとglmnetか何か、とにかくRのパッケージの実装をそのまま使っているので区別をしないまま推定をしてたはずです。

トラックバック - http://d.hatena.ne.jp/repose/20150402/1427982066