> For the complete documentation index, see [llms.txt](https://blog.tsingjyujing.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://blog.tsingjyujing.com/ml/recsys/bpr_and_hinger.md).

# 随想： BPR Loss 与 Hinge Loss

在之前的文章里，我们在[加速Ranknet](/ml/recsys/ranknet.md)的时候意外的得到了BPR Loss：

$$
L\_{\omega} = - \sum\_{i,j \in S}{log(sigmoid(s\_i-s\_j))}
$$

我们说过，Ranknet不一定用NN，任何可微的模型都可以塞到后端去。其实我们一直没有用贝叶斯的观点来看Ranknet，只是给分数的差值加了一层 sigmoid 之后使用 二元交叉熵损失函数，四舍五入一个亿…啊不对…等于是Logistic回归了，结果就导出了BPR Loss一样的形式。

![这不巧了吗，这不巧了吗](https://3247607006-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M6TU8XK0hd3CZdz_gQ_%2Fuploads%2Fgit-blob-6587dc1df578913da9fcee197bf6940c9475b704%2F2020-08-03-23-39-24.png?alt=media)

嗯？Logistic回归？也就是说只要是分类模型都可以往上咔咔猛造咯？那为啥一定得是Logistic回归呢？我们可以把身子换了，那干脆把头也换了？

其实，平时还会用到另一个Loss，Hinge Loss（合页损失），一般用在SVM上：

$$
L\_{\omega} = \sum\_{i,j \in S}{max(0,1-s\_i+s\_j)}
$$

那SVM效果会比Logistic回归好多少吗？不会的，把Loss曲线画出来一看就知道了：

```
x = [-5:0.01:5];
plot(x,max(0,1-x),x,log(1+exp(-x)))
legend('hinge','BPR')
```

![](https://3247607006-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M6TU8XK0hd3CZdz_gQ_%2Fuploads%2Fgit-blob-46e8b34d19ef269efd9c5d112e846c540eb29a6a%2F2020-08-03-23-32-49.png?alt=media)

简直就是：

![异父异母的亲兄弟啊](https://3247607006-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M6TU8XK0hd3CZdz_gQ_%2Fuploads%2Fgit-blob-8602c47ca7c2418cc4d4381ffd0cb6f661cd378b%2F2020-08-03-23-35-46.png?alt=media)

我在我们的系统上做了一些离线实验，结果是BPR略微胜利，我认为原因可能在BPR更加嫩滑…啊不对…光滑上。但是就计算量而言，肯定是Hinge Loss要远远小于BPR Loss。
