首页 文章

三重态损失的 softmax 版本的梯度计算

提问于
浏览
2

我一直在尝试实现 Caffe 中描述的三元组损失的 softmax 版本,具体说明如下:
Hoffer 和 Ailon,《使用三重态网络进行深度度量学习》,ICLR 2015

我已经尝试过了,但是由于指数的 L2 不平方,因此我发现很难计算梯度。

有人可以在这里帮我吗?

2 回答

  • 3

    使用现有的 Caffe 层实施 L2 规范可以节省所有麻烦。

    这是一种为“底部”的x1x2计算 Caffe ||x1-x2||_2的方法(假设x1x2B -by- C Blob,为C尺寸差异计算B范数)

    layer {
      name: "x1-x2"
      type: "Eltwise"
      bottom: "x1"
      bottom: "x1"
      top: "x1-x2"
      eltwise_param { 
        operation: SUM
        coeff: 1 coeff: -1
      }
    }
    layer {
      name: "sqr_norm"
      type: "Reduction"
      bottom: "x1-x2"
      top: "sqr_norm"
      reduction_param { operation: SUMSQ axis: 1 }
    }
    layer {
      name: "sqrt"
      type: "Power"
      bottom: "sqr_norm"
      top: "sqrt"
      power_param { power: 0.5 }
    }
    

    对于本文中定义的三重态损失,您需要计算x-x+x-x-的 L2 范数,将这两个 Blob 合并,并将 concat 的 Blob 馈送到"Softmax"层。
    无需进行肮脏的梯度计算。

  • 1

    这是一个数学问题,但这是正确的。第一个方程式是您习惯的,第二个方程式是未平方的情况。

    规范的推导

相关问题