引言

思考了半天苏神的SimCSE(https://github.com/bojone/SimCSE/blob/main/eval.py),遂记录在此,帮助有需要的同学理解。

原文无监督方法


在原文的a图中,我们可以知道在一个batch中,输入的n个文本都是不相关的,而正样本对是通过对相同样本dropout2次得到的,每一次使用不同的dropout mask。

正负样本对构造方法


我们可以发现,在生成样本数据的时候,每一个相同的样本连续生成了2次,由于每个样本使用的dropout mask不一样,因此在一个minibatch中,连续的两个样本形成正样本对,非连续的样本对形成负样本对

SimCSE损失

def simcse_loss(y_true, y_pred):"""用于SimCSE训练的loss"""# 构造标签idxs = K.arange(0, K.shape(y_pred)[0])idxs_1 = idxs[None, :]idxs_2 = (idxs + 1 - idxs % 2 * 2)[:, None]y_true = K.equal(idxs_1, idxs_2)y_true = K.cast(y_true, K.floatx())# 计算相似度y_pred = K.l2_normalize(y_pred, axis=1)similarities = K.dot(y_pred, K.transpose(y_pred))similarities = similarities - tf.eye(K.shape(y_pred)[0]) * 1e12similarities = similarities * 20loss = K.categorical_crossentropy(y_true, similarities, from_logits=True)return K.mean(loss)

核心的损失代码如上所示,上述代码想要构造出如下的正确标签:

我们可以通过构建一个0到n的数组,并将两两前后反转的方式,得到上述正确标签:

这是上述代码y_true的构造方式,由于我们不需要自己与自己相似度,即对角线上的值,因此采用将logits置为负无穷,使得其指数为0,对损失无影响,similarities = similarities - tf.eye(K.shape(y_pred)[0]) * 1e12

对比损失


对比损失的核心公式如图所示,其本质上是一个交叉熵损失:
C E = − l o g e t ∑ i e i CE = -log\frac{e^t}{\sum_ie^i} CE=−log∑i​eiet​
因此可以在计算好相似度除以温度系数之后,采用交叉熵损失的方式来进行计算

SimCSE构造正负样本对与损失相关推荐

  1. 目标检测中如何定义正负样本,和正负样本在学习过程中loss计算起的作用

    如何定义正负样本,和正负样本在学习过程中loss计算起的作用 正负样本定义 分类和回归head如何学习和利用划分后的正负样本(loss如何计算) 正负样本在分类中loss计算的处理 正样本在bbox ...

  2. 【CV】PAA论文解读:在物体检测中利用概率分布来将anchor分配为正负样本

    本文转自|AI公园 导读 又一篇anchor匹配策略的文章,不过确实是简单有效,在ATSS上只需要很小的修改就可以提升性能.GFL2在框的预测上用上了概率分布,这里又在anchor匹配上用上了概率分布 ...

  3. 正负样本比率失衡SMOTE

    目录 正负样本比率失衡SMOTE 背景 公式 python实现 代码的使用方法 正负样本比率失衡SMOTE 背景 这几天测试天池的优惠券预测数据在dnn上面会不会比集成树有较好的效果,但是正负样本差距 ...

  4. 解决one-stage目标检测正负样本不均衡的另类方法--Gradient Harmonized

    正负样本不均衡问题一直是One-stage目标检测中被大家所诟病的地方,He Keming等人提出了Focal Loss来解决这个问题.而AAAI2019上的一篇论文<Gradient Harm ...

  5. Yolov3-v5正负样本匹配机制

    本文来自公众号"AI大道理". ​ 什么是正负样本? 正负样本是在训练过程中计算损失用的,而在预测过程和验证过程是没有这个概念的. 正样本并不是手动标注的GT. 正负样本都是针对于 ...

  6. 总结论文中正负样本的选择

    对正负样本的选择 1.ssd:设置一个阈值(0.5),大于这个阈值的框为正样本,其它框作为负样本鉴定为背景.但是负样本还是远大于正样本,因此采用了难样本挖掘.难样本挖掘的具体操作是计算出所以负样本的损 ...

  7. 关于正负样本不平衡问题的解决方法收集整理

    参考文献 1.如何解决机器学习中数据不平衡问题 2.Learning from imbalanced data 原文 3.对于正负样本不均衡的解决方法 4.2中论文的翻译总结 一. 问题背分析 1.背 ...

  8. 正负样本不均衡的解决办法

    转载自:http://blog.csdn.net/lujiandong1/article/details/52658675 这几年来,机器学习和数据挖掘非常火热,它们逐渐为世界带来实际价值.与此同时, ...

  9. YOLOv7 | 模型结构与正负样本分配解析

    如有错误,恳请指出. Yolov7的原作者就是Yolov4的原作者.看论文的时候看到比较乱,这里可能会比较杂乱的记录一下我觉得有点启发的东西.对于yolov7的代码,我也没有仔细的看,只是大概的看了下 ...

最新文章

  1. objdump与readelf
  2. redhat7企业版linuxlinux基本操作
  3. C++后继有人——D语言
  4. Bootstrap4默认样式不对胃口?教你使用NPM+Webpack+SASS来定制
  5. 5 秒创建 k8s 集群[转]
  6. VC++设置软件断点和“XXX已停止工作“对话框
  7. 4道Python基础字典练习题
  8. apache代理IIS的80端口实现共存
  9. 1151压力变送器型号_日本进口横河EJA530E压力变送器型号解读!
  10. 使用双指针可能只需要遍历一趟哦(洛谷P1147题题解,Java语言描述)
  11. python沿中心线绘制矩形_间隙填充轮廓/线 - python
  12. 在Linux平台使用Firefox 登陆EBS r12环境
  13. 数据从mysql迁移至oracle时知识点记录(一)
  14. 阶段3 2.Spring_04.Spring的常用注解_5 自动按照类型注入
  15. 【云周刊】第200期:云栖专辑 | 阿里开发者们的第6个感悟:享受折磨
  16. vmrc安装出现:未能安装 HCmon 驱动程序 (Failed to install the HCmon driver)
  17. Autodesk 3ds Max 渲染之后保存页面卡死问题
  18. outlook 您的组织策略阻止我们为您完成此操作 解决办法
  19. maya餐具图片_有哪些价格低但是逼格高很文艺又实用的物品呢?
  20. 跑深度模型的显卡_不止显卡!这些硬件因素也影响着你的深度学习模型性能

热门文章

  1. java抽象类关键字_Java 抽象类 abstract关键字
  2. 烽火运维-20180830day
  3. Ubuntu19.10如何消除登录微信后弹出的Wine system tray窗口
  4. Linux 用 yum 安装 trzsz
  5. VR安全教育:打破“说教式”教育模式,让安全常伴
  6. Linux dhclient命令使用
  7. 15道常见的Java集合类 面试题
  8. ubuntu18.04搭建python环境
  9. 阿里敏捷教练如何优化优酷需求分析流程?
  10. 算法导论习题C.2-9答案