Processing math: 100%

Learning to Rank (RankNet)

順序学習

ランク学習 (ランキング学習)

点列 {xi} について (全) 順序 xixj を学習及び予測したい.

RankNet 1

RankNet では実関数 f:XR を構成することで f(xi)>f(xj)xixj として順序付けを行う. 参考 2 では f(x) のことをスコアと読んでる.

スコアは単に大小でランキングを定めるだけでなく確率も定める. oij=f(xi)f(xj) として、 Pr[xixj]=expoij1+expoij であるとし、Pij と書く. 所見で気づかなかったが、シグモイド関数と呼んだ方が馴染み深い. Pij=σ(oij)=11+exp(oij)

oji=oij から Pji=1Pij になってることが確認出来る.

Gnuplot Produced by GNUPLOT 5.2 patchlevel 2 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 -4 -2 0 2 4 o exp(x) / (1 + exp(x)) exp(x) / (1 + exp(x))

というわけで、スコアを直接学習するのではなく、確率を学習するものだと思うことにする. 教師信号は実際の大小関係 () を使って、

Pij={1when xixj0when xixj0.5when xi=xj

教師信号でも矢張り Pji=1Pij が成立するようになっている.

これを使って損失関数は binary cross-entropy を用いる. L=PijlogPijPjilogPji

Pij の式を頑張って代入すると、 L=Pijoij+log(1+expoij)

Gnuplot Produced by GNUPLOT 5.2 patchlevel 2 0 1 2 3 4 5 6 -4 -2 0 2 4 o L(P*=1) L(P*=1) L(P*=0) L(P*=0) L(P*=0.5) L(P*=0.5)

確率合成

確率が先ほどのようにスコアの差のシグモイドで表現できていると仮定すると、 Pij,Pjk から Pik を求める事ができて、

Pik=PijPjk1+2PijPjkPijPjk

参考文献


  1. http://icml.cc/2015/wp-content/uploads/2015/06/icml_ranking.pdf

  2. ニューラルネットワークを用いたランク学習(ChainerによるRankNetの実装) - Qiita