MatchZoo-py icon indicating copy to clipboard operation
MatchZoo-py copied to clipboard

RankHingeLoss代码逻辑不合理

Open wenjunyang opened this issue 3 years ago • 2 comments

描述

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

wenjunyang avatar Mar 29 '21 09:03 wenjunyang

@wenjunyang could you open a PR to fix the bug?

Chriskuei avatar Mar 29 '21 11:03 Chriskuei

@wenjunyang could you open a PR to fix the bug?

ok

wenjunyang avatar Mar 29 '21 12:03 wenjunyang