糞糞糞ネット弁慶

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

Collaborative Deep Learning for Recommender Systems (KDD 2015) 読んだ

[1409.2944] Collaborative Deep Learning for Recommender Systems
同タイトルの論文 ( TeX のフォーマットは NIPS で用いられているもの) が arXiv にアップロードされていたので読んだ.
Collaborative Topic Regression (CTR) と Stacked Denoising AutoEncoder (SDAE) を組み合わせて推薦を行う.

Collaborative Topic Regression (CTR)

Collaborative Topic Modeling for Recommending Scientific Articles (KDD 2011)
この論文,CTR さえ分かってしまえばあとはどうにかなる.
まず入力として,I 人のユーザと J 個アイテムの 0/1 レーティングで構成される行列 R と,アイテムと総単語数 S の bag-of-words によって構成される行列 X_c がある.
タスクとしては,R の欠損した値を予測する.
CTR のモデルは非常にわかりやすくて,大雑把にいうと CTR は,K 個のトピックを仮定して,あるユーザ i のアイテム j への評価をそれぞれに対する潜在ベクトルの線形和で表現する.
生成過程を書くとわかりやすい.

  • ユーザ i に対して K 次元のユーザの潜在ベクトル u_i を 正規分布 から引く
  • アイテム j について
    • トピック比率 をディリクレ分布から引く
    • j の offset vector から引いて,アイテムの潜在ベクトルを とする
    • アイテム j の各単語 について
      • トピック を 多項分布 から引く
      • 単語 を 多項分布 から引く
  • i の j に対する rating 正規分布 から引く.この時 は 0/1 の rating を適当な値で変形したもの.

アイテムの単語生成を LDA っぽく解きつつ, rating も同時に回帰で求める手法. offset vector が一見余分に思えるけど,これがないとアイテムの潜在ベクトルが単語の生成を担う と同じ値になってしまうため,重要であるという.

Stacked Denoising AutoEncoders (SDAE)

ある行列にノイズを加えたものを入力,最終出力に元の行列を用意して多段の AutoEncoder で学習するもの(と主張している).
その上で,L 層の SDAE を作り,最終層(元行列)の一つ前の出力を特徴量として用いる.

Collaborative Deep Learning (CDL)

ようやく提案手法の説明に取り掛かる.
CTR と同様に,入力として,I 人のユーザと J 個アイテムの 0/1 レーティングで構成される行列 R と,アイテムと総単語数 S の bag-of-words によって構成される行列 X_c を考える.
CDL では, bag-of-words 行列 X_c に SDAE を適用し,低次元表現したもので CTR を行う.わかりやすい.
CTR と SDAE を同時に解くために SDAE を bayes っぽく定式化する.
最適化する目的関数が以下のように記述されているが,分からない項が存在する (手打ちしたら失敗した).

1 項目はユーザごとの潜在ベクトルの正則化,2 項目は SDAE の重みの正則化,4 項目は SDAE の最終層一つ前における再構成の誤差,5 項目は rating の予測誤差.
問題は 3 項目で,そもそもこれは L 層ある SDAE における中間にある層で,例えば,論文中で構築されている 8000 - 200 - 50 - 200 - 8000 次元における 50 次元の出力.これがどうしてアイテムの潜在ベクトルと一致するように学習させるのかがわかっていない.論文中でも説明があまりされていない.論文中では真ん中を境目に encoder - decoder で分かれている,という言い方がされているがちょっとよくわかっていない.
誰かに教えて欲しい.
(2017/10/17 追記) Collaborative Variational Autoencoder for Recommender Systemsを読んでいて言及されていたので検索したら自分のブログが出てきて読んだ.2年前の自分は3項目の存在がわかっていなかったけど,見返したら理解できた.アイテム i に関する潜在表現 vi は学習データに登場するものについては推定できるけれど,未知のものについては推定できない.そこでSDAEの中間層の結果を「推定したvi」として「真の」 vi にできる限り近づける,というのがこの項の気持ちだったのか.ようやく理解できてすっきりした.