计算NCE损失

让我们通过一个简化的示例来理解NCE损失的计算方法。假设我们有3个节点,每个节点都有与自己和其他节点的相似度计算,分别对应于三个相似度矩阵:sim_matrix_onesim_matrix_two、和sim_matrix_three

假设相似度矩阵和计算结果如下:

初始相似度矩阵(示例值)

假设每个矩阵都是3x3,值如下:

  • sim_matrix_one (原始与修改后相似度)
    [[1.0, 0.3, 0.2],
     [0.3, 1.0, 0.4],
     [0.2, 0.4, 1.0]]
    
  • sim_matrix_two (原始与原始相似度)
    [[1.0, 0.5, 0.3],
     [0.5, 1.0, 0.6],
     [0.3, 0.6, 1.0]]
    
  • sim_matrix_three (修改后与修改后相似度)
    [[1.0, 0.2, 0.1],
     [0.2, 1.0, 0.7],
     [0.1, 0.7, 1.0]]
    

应用温度参数和指数

假设温度参数为1.0,经过指数计算后的矩阵保持不变(简化计算)。

步骤3:计算归一化因子

假设当前批次有3个节点,每个节点与其他节点的相似度总和如下:

  1. 节点1的归一化因子:

    • sim_matrix_one_exp取第一行: [exp(1), exp(0.3), exp(0.2)]
    • sim_matrix_two_exp取第一行: [exp(1), exp(0.5), exp(0.3)]
    • sim_matrix_three_exp取第一行: [exp(1), exp(0.2), exp(0.1)]
    • 总和: exp(1) + exp(0.3) + exp(0.2) + exp(1) + exp(0.5) + exp(0.3) + exp(1) + exp(0.2) + exp(0.1)
  2. 节点2和节点3同理计算.

步骤4:计算NCE损失

  • 节点1的NCE损失:
    • 对角线元素为 exp(1) (从sim_matrix_one的第一行第一列取得)
    • 归一化因子为上述步骤3计算的和
    • NCE损失: -log(exp(1) / 归一化因子)

这个过程通过比较每个节点的嵌入与它在不同视图下的嵌入之间的相似度,与它与其他所有节点的相似度之和(作为背景噪声)进行对比,从而强化了模型在区分正样本(节点自身在不同视图下的一致性)与背景噪声之间的能力。

posted @ 2024-05-11 20:59  GraphL  阅读(113)  评论(0)    收藏  举报