饿了么推荐算法
- 一、介绍InfoNCE Loss、InfoNCE温度系数的作用
InfoNCE Loss(Information Noise Contrastive Estimation Loss)是一种常用于自监督学习和对比学习中的损失函数,特别是在信息论和无监督学习中有广泛应用。
它的核心思想是通过将正样本与负样本进行对比来学习数据的表示,目的是最大化正样本和负样本之间的区分度。InfoNCE Loss 是 Noise Contrastive Estimation(NCE)方法的一部分,而 NCE 的目标是通过优化模型使其能够区分“信号”样本和“噪声”样本。InfoNCE 的目标是使正样本的表示与给定的上下文相匹配,同时将负样本的表示与上下文分离。
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/2fb69fb12e4a44ea9954d3495e4288d6.png)
伪代码实现
假设我们有一个批量数据,其中每个样本都由一个查询向量 𝑞 和多个候选负样本向量
k
i
k_i
ki组成
import torch
import torch.nn.functional as F
def info_nce_loss(query, positive_key, negative_keys, temperature=0.07):
"""
计算InfoNCE Loss
参数:
query (torch.Tensor): 查询向量,大小为 (batch_size, dim)
positive_key (torch.Tensor): 正样本向量,大小为 (batch_size, dim)
negative_keys (torch.Tensor): 负样本向量,大小为 (batch_size, num_negatives, dim)
temperature (float): 温度超参数,控制正负样本之间的区分度
返回:
loss (torch.Tensor): 计算得到的损失值
"""
pos_sim = torch.sum(query * positive_key, dim=-1) / temperature
neg_sim = torch.matmul(query, negative_keys.transpose(0, 1)) / temperature
logits = torch.cat([pos_sim.unsqueeze(1), neg_sim], dim=1)
labels = torch.zeros(logits.size(0), dtype=torch.long).to(logits.device)
loss = F.cross_entropy(logits, labels)
return loss
- 二、介绍一下self-attention?QKV的含义及动机?
Self-Attention(自注意力)尤其在自然语言处理(NLP)中得到了广泛的应用。自注意力机制的核心思想是:在处理输入序列中的每一个元素时,考虑序列中其他所有元素对其的影响。相比于传统的递归或卷积网络,自注意力机制可以捕捉长距离依赖关系,并且能够并行处理输入数据。
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/bccc4623d5644d5783662330cdaad593.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d96c084482dd4733ae0c204b0a6fa18f.png)
简单讲就是
Q
K
QK
QK相乘表达的是每个元素与其他元素的相似度,动态地计算出关注的重点。通过值向量
V
V
V的加权求和,模型能够在输出中结合不同元素的信息。
三、力扣-268题 丢失的数字(非hot100)
给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。
示例 1:
输入:nums = [3,0,1]
输出:2
解释:n = 3,因为有 3 个数字,所以所有的数字都在范围 [0,3] 内。2 是丢失的数字,因为它没有出现在 nums 中。
class Solution:
def missingNumber(self, nums: List[int]) -> int:
coll_defa = collections.defaultdict(int)
for i in nums:
coll_defa[i] = 1
for j in range(len(nums)+1):
if coll_defa[j] != 1:
return j