当前位置: 首页 > news >正文

CLEFT 基于高效大语言模型和快速微调的语言-图像对比学习

CLEFT: Language-Image Contrastive Learning with Efficient Large Language Model and Prompt Fine-Tuning

github.com

paper

CLEFT是一种新型的对比语言图像预训练框架,专为医学图像而设计。它融合了医学LLM的预训练、高效微调和提示上下文学习,展现出卓越的性能!该框架由耶鲁大学研发。

最新进展证明了对比语言-图像预训练(CLIP)在自监督表征学习方面取得显著成功。然而,类似CLIP的现有方法通常需要大量GPU资源和长时间训练,因为模型和数据集规模较大,这使其不适用于医疗应用场景中,并非所有都有大规模数据集可供使用。同时,手动从与图像相关联的标签中提取语言模型提示可能会忽略丰富信息样本所包含的内容。我们引入了一种创新的语言-图像对比学习方法CLEFT,在充分利用广泛预训练语言和视觉模型优势时实现高效率微调提示。此外,本文还提出了一种有效策略来基于上下文进行提示学习,以缩小临床诊断数据和简单类别标签之间差距,并充分利用其中丰富信息内容。相较于各种基线算法,在多个胸部X光和乳房X光检查数据集上验证结果显示提出的方法达到了最先进水平。与当前BERT编码器相比,所提出参数高效框架可以减少39%总可训练模型大小,并将可训练语言模型减少至仅4%。

动机

问题

  1. 资源消耗大
    • 现有的CLIP(Contrastive Language-Image Pre-training)类方法通常需要大量的GPU资源和长时间的训练,这主要是由于模型和数据集规模庞大。这使得这些方法在医疗领域的应用受限,因为医疗数据往往不如自然图像数据丰富。
  2. 语言模型提示的局限性
    • 现有的CLIP方法中的语言模型提示主要基于与图像绑定的标签手动生成,这可能忽略了训练样本中丰富的信息。
    • 手工制作的提示语缺乏多样性,可能导致文本编码器中的灾难性遗忘现象,并限制模型性能。
  3. 模型大小限制
    • 现有的医疗CLIP方法使用基于BERT的语言模型,其模型大小有限,影响了在嵌入空间中的表达能力,进一步限制了预训练能力。

解决问题的策略

  1. 引入高效的大型语言模型
    • 利用大规模预训练的语言模型和视觉模型的优势,以弥补医疗数据稀缺的问题。
    • 引入GPT-2基础的因果语言模型作为文本编码器,该模型在扩展到数十亿参数时表现出更好的能力。
  2. 参数高效的微调
    • 采用参数高效的微调(PEFT)模块,以减少训练期间的参数数量,同时保持大型语言模型中的稳健预训练知识。
    • 通过在冻结的大型语言模型中注入少量可训练参数,调整注意力层的输出,避免过拟合和灾难性遗忘。
  3. 学习上下文相关的提示
    • 提出一个高效的策略来学习上下文相关的提示,以弥补信息量丰富的临床诊断数据与简单类标签之间的差距。
    • 通过第二阶段的训练,优化可学习的上下文提示标记,提高模型的泛化能力。

方法

1. Boosting CLIP with an LLM
  1. 基础CLIP框架
    • 包括视觉编码器和文本编码器,通过相应的投影头将图像-文本对编码到特征空间,并映射到同一特征空间以桥接两种模态。
  2. PEFT LLM作为文本编码器
    • 使用GPT-2因果语言模型代替BERT模型,因为GPT-2在扩展到数十亿参数时表现出更强的能力。
    • 引入PEFT模块,在每个Transformer块中注入少量可训练参数,以调整注意力层的输出,同时保持大多数参数冻结。
    • 解锁LLM的嵌入层,在预训练期间更新相应的令牌嵌入,以缩小预训练文本数据与CLIP提示之间的领域差距。
  3. CLIP作为知识蒸馏
    • 将预训练的文本编码器视为教师模型,因为它已经有一个完善的嵌入空间,能够区分不同的样本。
    • 视觉编码器作为学生模型,其输出被优化以与教师模型的嵌入空间对齐,从而蒸馏出教师模型中的知识。
2. 学习上下文相关的提示
  1. 替换手工制作的提示
    • 在预训练后,冻结两个编码器,并用一系列可训练的标记替换原始手工制作的提示。
    • 这些可学习的上下文提示标记用于所有类别,以确保其泛化能力。
  2. 优化可学习的提示
    • 使用零样本分类交叉熵损失来优化这些可学习的上下文提示标记。
    • 允许提示标记适应不同的类别,避免潜在的捷径问题。

相关文章:

  • 利用 Angular 发挥环境的力量
  • 区块链ddos防护怎么做
  • node中使用http创建web服务器
  • C++初学(10)
  • 常见框架漏洞
  • exptern “C“的作用,在 C 和 CPP 中分别调用 openblas 中的 gemm 为例
  • (el-Date-Picker)操作(不使用 ts):Element-plus 中 DatePicker 组件的使用及输出想要日期格式需求的解决过程
  • oracle库PASSWORD_VERSIONS 对应的加密方式
  • 三大浏览器Google Chrome、Edge、Firefox内存占用对比
  • 【复旦微FM33 MCU 外设开发指南】系统篇——时钟
  • java 基础知识一
  • 国产数据库备份恢复实现
  • 在图片URL后面添加一个参数以清理缓存
  • [Unity实战]Mirror网络与Addressable场景管理
  • 多租户系统数据隔离方案
  • php的引用
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • docker-consul
  • ECS应用管理最佳实践
  • leetcode-27. Remove Element
  • NSTimer学习笔记
  • Sass Day-01
  • SpringBoot 实战 (三) | 配置文件详解
  • SQLServer之创建数据库快照
  • swift基础之_对象 实例方法 对象方法。
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • 力扣(LeetCode)21
  • 判断客户端类型,Android,iOS,PC
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • 组复制官方翻译九、Group Replication Technical Details
  • ​zookeeper集群配置与启动
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #微信小程序:微信小程序常见的配置传旨
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (第一天)包装对象、作用域、创建对象
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (三)Kafka离线安装 - ZooKeeper开机自启
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (五)IO流之ByteArrayInput/OutputStream
  • (转载)PyTorch代码规范最佳实践和样式指南
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .NET WPF 抖动动画
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .Net(C#)常用转换byte转uint32、byte转float等
  • .NetCore发布到IIS
  • .NET导入Excel数据
  • .pyc文件是什么?