图对比学习中损失函数解析(以推荐算法为例)

在自监督图对比学习的损失函数中,除了本身的有监督损失函数L_{main}之外,还有自监督损失函数L_{ssl},有监督损失函数主要以BPR损失函数为主,公式如下图所示:

L_{BPR}=\sum_{u=1}^{M}\sum_{i \in N_u}^{} \sum_{j \notin N_u}^{} -\ln{\sigma(\hat{y}_{ui} -\hat{y}_{uj}) } +\lambda \left \| E^{(0)}\right \|^2       (1)

其中M表示用户集,N_u表示用户u的交互物品集,即i是用户u使用过的物品,而j是用户没有使用过的物品。直白的说,BPR损失函数就是,对于每个用户u,其使用过的物品i的排名应该比他没使用过的物品j更靠前,即用户u与物品i的嵌入向量的乘积\hat{y}_{ui}应该大于用户u与物品j的嵌入向量的乘积\hat{y}_{uj}

我猜这很好理解,就不过多赘述。

而对于自监督损失函数L_{ssl},其主要可以拆分成如下两部分:

L_{ssl}=L_{ssl}^{user} + L_{ssl}^{item}       (2)

因为L_{ssl}^{user}L_{ssl}^{item}很相似,接下来我们以L_{ssl}^{user}为例,其计算公式如下所示:

L_{ssl}^{user}=\sum_{u\in U} -\log{\frac{exp(s(z_u^{'},z_u^{''})/\tau)}{\sum_{v\in U}exp(s(z_u^{'},z_v^{''})/\tau)}}       (3)

其中s(z_u^{'},z_u^{''})表示在不同子图中,子图1节点u'和子图2节点u''之间的相似度(同一节点在不同子图的相似度);s(z_u^{'},z_v^{''})表示的是子图1节点u'和子图2节点v''之间的相似度(不同节点在不同子图的相似度)。

将其转换一下,可得:

L_{ssl}^{user}=\sum_{u\in U}\log{\frac{\sum_{v\in U}exp(s(z_u^{'},z_v^{''})/\tau)}{exp(s(z_u^{'},z_u^{''})/\tau)}}       (4)

进一步化简得:

L_{ssl}^{user}=\sum_{u\in U}\log{\sum_{v\in U}exp((s(z_u^{'},z_v^{''})-s(z_u^{'},z_u^{''}))/\tau)}         (5)

pytorch实现就是根据上述表达式,使用 torch.logsumexp() 进行对比损失计算。

or 进一步将表示式(4)分析得:

L_{ssl}^{user}=\sum_{u\in U}\log{(\frac{\sum_{v\in U, v\neq u }exp(s(z_u^{'},z_v^{''})/\tau)}{exp(s(z_u^{'},z_u^{''})/\tau)}+1)}     (6)

 因为 \left ( \frac{\sum_{v\in U, v\neq u }exp(s(z_u^{'},z_v^{''})/\tau)}{exp(s(z_u^{'},z_u^{''})/\tau)}> 0 \right ),那么要使得L_{ssl}^{user}最小,使\frac{\sum_{v\in U, v\neq u }exp(s(z_u^{'},z_v^{''})/\tau)}{exp(s(z_u^{'},z_u^{''})/\tau)}尽可能小即可,即exp(s(z_u^{'},z_u^{''})/\tau)尽可能大,\sum_{v\in U, v\neq u }exp(s(z_u^{'},z_v^{''})/\tau)尽可能小。

解释起来就是:同一个图节点在不同子图中的相似度应该尽可能的大,而不同的图节点在不同子图中的相似度要尽可能的小。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值