PyTorch中的损失函数--MarginRankingLoss/HingeEmbeddingLoss/CosineEmbeddingLoss

MarginRankingLoss

你们可能对这个损失函数比较陌生。在机器学习领域,了解一个概念最直观的最快速的方式即是从它的名字开始。前端

MarginRankingLoss也是如此,拆分一下,Margin,Ranking,Loss。机器学习

Margin:前端同窗对Margin是再熟悉不过了,它表示两个元素之间的间隔。在机器学习中其实Margin也有相似的意思,它能够理解为一个可变的加在loss上的一个偏移量。也就是代表这个方法能够手动调节偏移。固然Margin不是重点。函数

Ranking:它是该损失函数的重点和核心,也就是排序!若是排序的内容仅仅是两个元素而已,那么对于某一个元素,只有两个结果,那就是在第二个元素以前或者在第二个元素以前。其实这就是该损失函数的核心了。学习

咱们看一下它的loss funcion表达式。cdn

loss(x1,x2,y)=max(0,-y*(x1-x2)+margin)

margin咱们能够先无论它,其实模型的含义不言而喻。blog

y只能有两个取值,也就是1或者-1。排序

  1. 当y=1的时候,表示咱们预期x1的排名要比x2高,也就是x1-x2>0
  2. 当y=-1的时候,表示咱们预期x1的排名要比x2高,也就是x1-x2<0

何时用?

  1. GAN
  2. 排名任务
  3. 开源实现和实例很是少

HingeEmbeddingLoss

再从名字入手去分析一下。ci

Hinge:不用多说了,就是你们熟悉的Hinge Loss,跑SVM的同窗确定对它很是熟悉了。深度学习

Embedding:一样不须要多说,作深度学习的你们确定很熟悉了,但问题是在,为何叫作Embedding呢?我猜想,由于HingeEmbeddingLoss的主要用途是训练非线形的embedding,在机器学习领域,由于用途和图形来命名的例子不在少数。it

$$ loss(x,y) = \frac{1}{n}\sum_{i=1}^n \left\{ \begin{array} \\ x_i, & if~y_i==1 \\ max(0, margin-x_i), & if ~y_i==-1 \end{array} \right. $$

它输入x和y(1或者-1),margin默认为1。

  1. 当y=-1的时候,loss=max(0,1-x),若是x>1(margin),则loss=0;若是x<1,loss=1-x
  2. 当y=1,loss=x

何时用?

  1. 非线形Embedding
  2. 半监督学习
  3. 监测两个输入的类似性或者不类似性

CosineEmbeddingLoss

余弦损失函数,余弦函数经常用于评估两个向量的类似性,两个向量的余弦值越高,则类似性越高。

loss(x, y) =
\left\{ \begin{array}\\
1 - cos(x1, x2),              &if~y ==  1 \\
max(0, cos(x1, x2) - margin), &if~y == -1
\end{array}\right.
  1. 当y=1的时候,就是直接用-cos(x1,x2)的平移函数做为损失函数
  2. 当y=-1的时候,在cos(x1,x2)=margin处作了分割,用于衡量两个向量的不类似性

何时用?

  1. 非线形Embedding
  2. 半监督学习
  3. 监测两个输入的类似性或者不类似性
相关文章
相关标签/搜索