点列 {xi} について (全) 順序 xi≻xj を学習及び予測したい.
RankNet では実関数 f:X→R を構成することで f(xi)>f(xj)⟺xi≻xj として順序付けを行う. 参考 2 では f(x) のことをスコアと読んでる.
スコアは単に大小でランキングを定めるだけでなく確率も定める. oij=f(xi)−f(xj) として、 Pr[xi≻xj]=expoij1+expoij であるとし、Pij と書く. 所見で気づかなかったが、シグモイド関数と呼んだ方が馴染み深い. Pij=σ(oij)=11+exp(−oij)
oji=−oij から Pji=1−Pij になってることが確認出来る.
というわけで、スコアを直接学習するのではなく、確率を学習するものだと思うことにする. 教師信号は実際の大小関係 (≻) を使って、
P∗ij={1when xi≻xj0when xi≺xj0.5when xi=xj
教師信号でも矢張り P∗ji=1−P∗ij が成立するようになっている.
これを使って損失関数は binary cross-entropy を用いる. L=−P∗ijlogPij−P∗jilogPji
Pij の式を頑張って代入すると、 L=−P∗ijoij+log(1+expoij)
確率が先ほどのようにスコアの差のシグモイドで表現できていると仮定すると、 Pij,Pjk から Pik を求める事ができて、
Pik=PijPjk1+2PijPjk−Pij−Pjk