图对比学习,用一个简单的例子概括

假设我们有6个用户节点 A、B、C、D、E、F,初始时它们没有特征向量。

初始特征向量:

A: None
B: None
C: None
D: None
E: None
F: None

我们选择两对正样本对和负样本对。每对包括一个正样本和一个负样本。

正样本对1:
A: None
B: None
负样本1:
C: None

正样本对2:
D: None
E: None
负样本2:
F: None

我们使用欧氏距离作为度量两个节点特征向量相似性的指标。

步骤1: 计算特征向量

我们通过某种方式计算节点的特征向量。这里为了简化,我们直接随机初始化它们。假设特征向量是一个长度为3的向量,每个维度表示一个特定的特征。

A: [0.2, 0.4, 0.6]
B: [0.1, 0.5, 0.3]
C: [0.3, 0.2, 0.1]
D: [0.7, 0.9, 0.4]
E: [0.8, 0.6, 0.2]
F: [0.5, 0.3, 0.7]

步骤2: 计算欧氏距离

我们计算正样本对和负样本对之间的欧氏距离。

正样本对1:
d_AB = sqrt((A - B)^2) = sqrt((0.1 - 0.2)^2 + (0.5 - 0.4)^2 + (0.3 - 0.6)^2) = 0.5196
负样本1:
d_AC = sqrt((A - C)^2) = sqrt((0.3 - 0.2)^2 + (0.2 - 0.4)^2 + (0.1 - 0.6)^2) = 0.7810

正样本对2:
d_DE = sqrt((D - E)^2) = sqrt((0.7 - 0.8)^2 + (0.9 - 0.6)^2 + (0.4 - 0.2)^2) = 0.5477
负样本2:
d_DF = sqrt((D - F)^2) = sqrt((0.7 - 0.5)^2 + (0.9 - 0.3)^2 + (0.4 - 0.7)^2) = 0.7211

步骤3: 计算对比损失

我们使用对比损失函数来度量正样本对和负样本对之间的距离。

对比损失1:
L1 = max(0, d_AB - d_AC + m) = max(0, 0.5196 - 0.7810 + 0.2) = 0.1796

对比损失2:
L2 = max(0, d_DE - d_DF + m) = max(0, 0.5477 - 0.7211 + 0.2) = 0.0266

m表示margin的意思是一个bias,损失函数在这当然是越小越好,梯度更新的方向是朝损失函数减少的方向进行的。因此d_AB - d_AC + m <= 0是更新的方向,其中d_AB表示的是正样本之间的距离,d_AC 表示负样本的距离,因此只要是d_AB尽可能的小,d_AC尽可能的大,就能使loss整体最小

对比学习的重点:在表征学习中,通过对比学习,使得正样本的“距离”更接近,负样本“距离”更远离。这样就能实现InfoMAX(信息最大化)

步骤4: 反向传播和参数更新

我们使用梯度下降法更新特征向量。

梯度计算1:
gradient_A = learning_rate * (A - B) / (d_AB * (d_AB - d_AC + m)) = learning_rate * (0.1 - 0.2) / (0.5196 * (0.5196 - 0.7810 + 0.2)) = -0.3905
gradient_B = learning_rate * (B - A) / (d_AB * (d_AB - d_AC + m)) = learning_rate * (0.2 - 0.1) / (0.5196 * (0.5196 - 0.7810 + 0.2)) = 0.3905
gradient_C = learning_rate * (C - A) / (d_AC * (d_AB - d_AC + m)) = learning_rate * (0.3 - 0.2) / (0.7810 * (0.5196 - 0.7810 + 0.2)) = 0.2980

梯度计算2:
gradient_D = learning_rate * (D - E) / (d_DE * (d_DE - d_DF + m)) = learning_rate * (0.7 - 0.8) / (0.5477 * (0.5477 - 0.7211 + 0.2)) = -0.3661
gradient_E = learning_rate * (E - D) / (d_DE * (d_DE - d_DF + m)) = learning_rate * (0.8 - 0.7) / (0.5477 * (0.5477 - 0.7211 + 0.2)) = 0.3661
gradient_F = learning_rate * (F - D) / (d_DF * (d_DE - d_DF + m)) = learning_rate * (0.5 - 0.7) / (0.7211 * (0.5477 - 0.7211 + 0.2)) = 0.1361
参数更新1:
A_new = A - gradient_A = [0.2, 0.4, 0.6] - (-0.3905) = [0.5905, 0.7905, 0.9905]
B_new = B - gradient_B = [0.1, 0.5, 0.3] - 0.3905 = [-0.2905, 0.1095, -0.0905]
C_new = C - gradient_C = [0.3, 0.2, 0.1] - 0.2980 = [0.0019, -0.0980, -0.1980]

参数更新2:
D_new = D - gradient_D = [0.7, 0.9, 0.4] - (-0.3661) = [1.0661, 1.2661, 0.7661]
E_new = E - gradient_E = [0.8, 0.6, 0.2] - 0.3661 = [0.4339, 0.2339, -0.1661]
F_new = F - gradient_F = [0.5, 0.3, 0.7] - 0.1361 = [0.3639, 0.1639, 0.5639]

重复以上步骤多次进行迭代,直到达到预定的训练轮次或收敛。最终,模型会学习到节点之间的相似性,并更新特征向量以更好地表示它们。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值