【问题标题】:Gradient calculation for softmax version of triplet losssoftmax 版本的triplet loss 的梯度计算
【发布时间】:2016-07-16 13:56:54
【问题描述】:

我一直在尝试在
Hoffer and Ailon, Deep Metric Learning Using Triplet Network, ICLR 2015 中描述的 Caffe 中实现 softmax 版本的三元组损失。

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

有人可以帮我吗?

【问题讨论】:

    标签: neural-network deep-learning caffe gradient-descent softmax


    【解决方案1】:

    使用现有的 caffe 层实施 L2 规范可以为您省去所有麻烦。

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

    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" 层。
    不需要脏梯度计算。

    【讨论】:

    • @Naman 如果你打算使用 caffe,你最好回顾一下现有的层:这些是你的构建块!你越了解他们,你的生活就会越轻松!
    • 还有一点,更多的是关于 Caffe 的内存使用情况。如果我必须进行 L2 标准化,该怎么做?我可以先进行缩减,然后再进行整形,然后再进行 eltwise 层,但它会比在一层中实现整体更占用内存吗?
    • 我试图实施这个解决方案但发现了一个问题。这篇论文有点像欧几里得损失。那么在Softmax之后,是不是需要把输出交给欧几里得损失层呢?
    • 抱歉打扰了,但我仍然无法理解它是如何完成的?使用 Caffe 如何给我的欧几里得损失一个常数向量作为标签?对于所有示例,它将使用常量向量 (0,1)。有没有办法在 Caffe 中做到这一点。
    【解决方案2】:

    这是一道数学题,但在这里。第一个方程是你习惯的,第二个是你在没有平方的时候做的。

    【讨论】:

    • 你不能把提名者和分母除以2吗?
    • 当然可以,我只是将整个内容都包含在内,以避免混淆
    猜你喜欢
    • 1970-01-01
    • 2017-05-30
    • 1970-01-01
    • 1970-01-01
    • 2019-03-12
    • 2019-02-17
    • 2020-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多