Skip to content

RankHingeLoss代码逻辑不合理 #159

@wenjunyang

Description

@wenjunyang

描述

RankHingeLoss的forward方法计算逻辑是:先计算负样本的cosine均值,再调用margin_ranking_loss计算loss。这样是不合理的,因为均值的margin_ranking_loss不等于margin_ranking_loss的均值。我尝试更改后,在模型效果上有很大提升。

fix后的参考代码

def forward(self, y_pred: torch.Tensor, y_true: torch.Tensor):
    """
    Calculate rank hinge loss.

    :param y_pred: Predicted result.
    :param y_true: Label.
    :return: Hinge loss computed by user-defined margin.
    """
    y_pos = y_pred[::(self.num_neg + 1), :]
    y_neg = []
    for neg_idx in range(self.num_neg):
        neg = y_pred[(neg_idx + 1)::(self.num_neg + 1), :]
        y_neg.append(neg)
    r = torch.mean(torch.stack([F.margin_ranking_loss(y_pos, neg, torch.ones_like(y_pos), margin=self.margin) for neg in y_neg]))
    return r

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions