当前位置: 首页 > 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场景管理
  • 多租户系统数据隔离方案
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 【React系列】如何构建React应用程序
  • 2017届校招提前批面试回顾
  • Java 23种设计模式 之单例模式 7种实现方式
  • Nacos系列:Nacos的Java SDK使用
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • php中curl和soap方式请求服务超时问题
  • React-flux杂记
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • Vue实战(四)登录/注册页的实现
  • 程序员最讨厌的9句话,你可有补充?
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 前端_面试
  • 前端自动化解决方案
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • 从如何停掉 Promise 链说起
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #微信小程序:微信小程序常见的配置传值
  • $refs 、$nextTic、动态组件、name的使用
  • (1)Jupyter Notebook 下载及安装
  • (1)虚拟机的安装与使用,linux系统安装
  • (2.2w字)前端单元测试之Jest详解篇
  • (SpringBoot)第七章:SpringBoot日志文件
  • (编译到47%失败)to be deleted
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (含笔试题)深度解析数据在内存中的存储
  • (论文阅读40-45)图像描述1
  • (原)Matlab的svmtrain和svmclassify
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .net core使用ef 6
  • .net 连接达梦数据库开发环境部署
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • .net/c# memcached 获取所有缓存键(keys)
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • .Net转Java自学之路—基础巩固篇十三(集合)
  • /proc/stat文件详解(翻译)
  • @TableId注解详细介绍 mybaits 实体类主键注解
  • [ IOS ] iOS-控制器View的创建和生命周期