Giter Club home page Giter Club logo

Comments (13)

RainFrost1 avatar RainFrost1 commented on July 20, 2024

这个loss的计算方式是cosin相似度,而不是欧式距离,代码中变量命名方式可能存在误导。如果是使用欧式距离的话,确实应该是问题中提到写法,而使用cosine相似度的话,写法正好是相反的。对于欧式距离,anchor与negative距离越大越好,对于cosine相似度,anchor与negative相似越小越好

from paddleclas.

aaaaaaaak avatar aaaaaaaak commented on July 20, 2024

这个loss的计算方式是cosin相似度,而不是欧式距离,代码中变量命名方式可能存在误导。如果是使用欧式距离的话,确实应该是问题中提到写法,而使用cosine相似度的话,写法正好是相反的。对于欧式距离,anchor与negative距离越大越好,对于cosine相似度,anchor与negative相似越小越好

感谢您的回复!
我的疑问是(absolut_loss_an = dist_an - self.an_value) < 0时anchor与negative相似度dist_an更小,loss是否也该更小?但是为何此时要将absolut_loss_an置于更大的值1而不是0?

from paddleclas.

changdazhou avatar changdazhou commented on July 20, 2024

对于cosine相似度,anchor与negative相似越小越好,所以距离越小的loss应该越大

from paddleclas.

aaaaaaaak avatar aaaaaaaak commented on July 20, 2024

对于cosine相似度,anchor与negative相似越小越好,所以距离越小的loss应该越大

你好,可能我的疑问没有清楚的被表达。
我的理解也是anchor与negative相似越小越好,且此处计算使用的dist_an代表anchor与negative相似度。
absolut_loss_an = dist_an - self.an_value
absolut_loss_an = paddle.where(absolut_loss_an > 0,
absolut_loss_an,
paddle.ones_like(absolut_loss_an))
对于以上代码我的理解是:
absolut_loss_an<0即是代表anchor与negative相似越小,相似越小则loss的值越小,loss值越小则应该将代码中的ones_like替换为zeros_like。
请问我的理解中是否有误?
@RainFrost1 @changdazhou

from paddleclas.

changdazhou avatar changdazhou commented on July 20, 2024

对于cosine相似度,anchor与negative相似越小越好,但是注意这里的dist_an越大代表越相似,从你的描述看来好像是认为dist_an越小则anchor与negative越相似,可能是这里理解反了。
对于你的理解:
absolut_loss_an<0即是代表anchor与negative相似越小,相似越小则loss的值应该越大才对,所以用paddle.ones_like

from paddleclas.

aaaaaaaak avatar aaaaaaaak commented on July 20, 2024

对于cosine相似度,anchor与negative相似越小越好,但是注意这里的dist_an越大代表越相似,从你的描述看来好像是认为dist_an越小则anchor与negative越相似,可能是这里理解反了。 对于你的理解: absolut_loss_an<0即是代表anchor与negative相似越小,相似越小则loss的值应该越大才对,所以用paddle.ones_like

你好,对于negative应该相似越低越好,那么为何absolut_loss_an越低(负样本越不相似越好)loss的值越大呢?效果越好loss不应该越小么
@changdazhou

from paddleclas.

changdazhou avatar changdazhou commented on July 20, 2024

不好意思,前面可能说错了,主要还是得看这段代码:
absolut_loss_an = paddle.where(absolut_loss_an > 0,
absolut_loss_an,
absolut_loss_an这里是越大代表的越相似没问题吧,所以后面把相似的设置为了1。

from paddleclas.

aaaaaaaak avatar aaaaaaaak commented on July 20, 2024

不好意思,前面可能说错了,主要还是得看这段代码: absolut_loss_an = paddle.where(absolut_loss_an > 0, absolut_loss_an, absolut_loss_an这里是越大代表的越相似没问题吧,所以后面把相似的设置为了1。

absolut_loss_an = dist_an - self.an_value
absolut_loss_an = paddle.where(absolut_loss_an > 0,absolut_loss_an,paddle.ones_like(absolut_loss_an))

此处absolut_loss_an应该是anchor与negative相似度的loss。
当absolut_loss_an > 0时,an相似度高于an_value取absolut_loss_an本身;
当absolut_loss_an <= 0时,an相似度低于an_value表示anchor与negative越不相似,a/n越不相似效果越好,此时的loss值absolut_loss_an是否设为0更合适?
@changdazhou

from paddleclas.

changdazhou avatar changdazhou commented on July 20, 2024

刚刚我们确认了一下,这里的作用不是为了增加负样本的loss,而是去筛选出相似度很低的样本作为负样本,增加相似度低的样本的loss权重,以让模型对于负样本会提升更多的关注度

from paddleclas.

aaaaaaaak avatar aaaaaaaak commented on July 20, 2024

刚刚我们确认了一下,这里的作用不是为了增加负样本的loss,而是去筛选出相似度很低的样本作为负样本,增加相似度低的样本的loss权重,以让模型对于负样本会提升更多的关注度

感谢您的耐心回复!
经过这一步筛选后,负样本中相似度小于an_value部分(absolut_loss_an <= 0)的loss固定为1,1一定会大于负样本中相似度大于an_value部分(absolut_loss_an > 0)的loss,那么这样会将模型向anchor与negative的相似度为an_value引导,而不是anchor与negative的相似度尽可能小?我的理解(absolut_loss_an > 0)部分的关注度需要大于(absolut_loss_an <= 0)部分

另外如果有此处筛选可以提升负样本关注度的相关论文可以麻烦分享一下么?
再次感谢 @changdazhou

from paddleclas.

changdazhou avatar changdazhou commented on July 20, 2024

absolut_loss_an > 0说明该负样本的相似度较高。作为负样本,我们更应该关注那些相似度较低的样本
另外,不好意思,相关论文我们没办法提供哈,可以去网上搜一下

from paddleclas.

aaaaaaaak avatar aaaaaaaak commented on July 20, 2024

absolut_loss_an > 0说明该负样本的相似度较高。作为负样本,我们更应该关注那些相似度较低的样本 另外,不好意思,相关论文我们没办法提供哈,可以去网上搜一下

相似度高的negative才是难以判别的样本,不是更应该优化相似度高的negative?怎么会去更关注相似度低的negative?negative的相似度需要尽可能小 @changdazhou

from paddleclas.

zhangyubo0722 avatar zhangyubo0722 commented on July 20, 2024

这里是为了让相似度低的负样本距离更远,相似度高的正样本距离更近,可以看下这个文档的loss部分,TripletAngularMarginLoss是基于Triplet loss的百度自研损失函数,所以没有论文可供参考。

from paddleclas.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.