背景
最近学习了rank-svm, gbrank等使用pairwise的思想来解决排序问题的方法,有些小感悟,先记录下来
思想
排序的偏序关系$S_{ij}$是定义出来的,
- if $x_i\succ x_j$, 则定义$S_{ij}=1$,
- if $x_j\succ x_i$, 则定义$S_{ij}=-1$,
- 相等的时候, $S_{ij} = 0$
- $\frac{1 + S_{ij}}{2}$,正好转化成了0-1区间,可以当作概率来用
用gbrank举个例子,由于拟合的目标是多棵树h(x), 通过h(x)之间的偏序关系, 为了使用交叉熵来作为损失函数,我们只需将偏序关系
套入sigmoid函数转换成概率形式.
- $p_{ij} = p(x_i \succ x_j) = \frac{1}{1 + exp^{(-h(x_i) + h(x_j) + \tau)}}$
- $\overline{p_{ij}} = \frac{1 + S_{ij}}{2}$
因此,我们可以构造出cross-entropy loss:
$L(h) = \sum_{i,j} {-\overline{p_{ij}}logp_{ij} - (1 - \overline{p_{ij}})log(1 - p_{ij})}$
总结
所以,我们可以这样想,如果我们要解决排序问题,只要我们能设计任意的函数f(x)能够表达偏序关系,都能套入cross entroy来解,我们需要求解的只是函数f(x)的参数.
比如rank_svm其实就是假设f(x)是一个线性函数,使用svm的loss函数(没有用crossEntropy)来求解f(x)的参数,当然我认为也是可以使用cross-entropy来解的(不过那样就不叫svm了)