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. 監測兩個輸入的類似性或者不類似性
相關文章
相關標籤/搜索