自监督学习与多模态大模型
- 理解
- 自监督三大方法
- 视觉基础模型
- 多模态学习方法
- 多模态视觉架构大模型
- MiniGPT-4:采用Adapter架构,通过Q-Former将图片特征对齐到大模型的Input Embedding中,支持多轮对话和逻辑推理能力
- Qwen2 VL:阿里巴巴开发的中文开源多模态大模型,能够进行多图多轮对话,识别图中文字并给出物体的准确坐标
- Frozen:DeepMind 发布,通过训练视觉编码器来适配LLMs
- KOSMOS-1:基于 Transformer 框架,采用自回归生成文本,并通过特定的编码策略处理文本和图像数据
- Flamingo:DeepMind 发布,在少样本学习中取得了显著成就
- LLaVA:Flamingo 简化版,通过两阶段训练实现视觉与语言模态的高效融合
- VILA:英伟达开发的多模态大模型,专注于视觉和语言任务的融合
- Gemini:谷歌开发的原生多模态大模型,具有无缝跨模态的能力,支持文字与图片输入
- BuboGPT:字节跳动开发的多模态大模型,支持文本、图像和音频三种模态,能够实现细粒度的多模态联合理解
- WINGS:一种创新的多模态学习架构,通过视觉编码器、投影器、语言学习器等组件提升多模态大模型的表现
- 紫东太初:中国科学院自动化研究所研发的全球首个千亿参数多模态人工智能大模型,支持图像、文本、语音、视频等多种模态数据间的统一表示与相互生成
- 混元DiT:腾讯开发的中文原生DiT架构多模态大模型,支持中英文输入和理解,适用于文生图、生视频等多模态视觉生成
- 提问
- 自监督学习与传统监督学习最本质的区别是什么?
- 自监督学习类似"自学成才"的学生,您如何理解这个比喻?它的局限性在哪里?
- 为什么自监督学习能够从数据本身学习到有用的特征表示?这种学习机制与人类学习有什么异同?
- 在三种主要方法(前置任务、对比学习、掩码重建)中,您认为哪种方法最有前景?为什么?
- 对比学习要求正负样本对,如何定义什么是"相似"的数据?这个定义可能带来什么问题?
- 掩码重建任务中,如何确定最优的掩码比例?这个比例是否会随任务变化?
- 自监督学习在减少标注数据依赖的同时,是否也带来了新的挑战?这些挑战具体是什么?
- 为什么自监督学习特别适合多模态大模型?这种结合是否存在潜在问题?
- 从计算效率的角度看,自监督学习相比传统监督学习有什么优势和劣势?
- 如何评估一个自监督学习方法的好坏?需要考虑哪些关键指标?
- 如果让您设计一个新的自监督学习方法,您会如何设计?理由是什么?
- 自监督学习的发展是否意味着未来可以完全摆脱人工标注?为什么?
- 在掩码重建方法中,现有的模型通常采用随机掩码策略。如果要设计一种"智能掩码"策略,使其能够自适应地选择最具信息量的区域进行掩码,你会如何设计算法?请详细说明技术路线和可能遇到的挑战。
- 文章提到CLIP使用对比学习实现图文对齐,但在实际应用中可能存在模态间语义差异过大的情况。如何设计更精细的对比学习策略来处理这种"跨模态语义鸿沟"问题?
- 当前的自监督学习方法主要关注特征学习,但对因果关系的学习较少涉及。如何将因果推理的思想引入自监督学习框架,使模型能够学习到数据中的因果结构?
- 在多模态场景下,不同模态的信息量差异很大(如图像通常包含的信息量远大于对应的文本描述)。这种信息不平衡会如何影响自监督学习的效果?有什么解决方案?
- 自监督学习在处理长尾分布数据时可能面临样本不平衡的问题。如何设计前置任务或对比学习策略来确保模型能够学习到罕见类别的特征表示?
- 在文章提到的三种方法中,如何有效地将它们组合使用?具体来说,如何设计损失函数来平衡不同学习目标,使它们能够互相促进而不是相互干扰?
- 自监督学习可能会学习到一些表面的统计相关性而非真正有意义的特征。如何设计机制来区分和过滤这些"伪相关"特征?这个问题在多模态学习中尤其重要。
- MiniGPT-4采用Adapter架构进行模态对齐,但这种方式可能会带来信息损失。如何评估这种损失,并设计更好的架构来降低信息损失?
- 在多轮对话场景下,如何让自监督学习模型保持对话的连贯性和上下文理解能力?现有的掩码策略是否足以处理长程依赖关系?
- 自监督学习在处理时序数据时,如何平衡短期和长期依赖的建模?特别是在视频理解任务中,如何设计时序掩码策略来捕获不同时间尺度的特征?
- 训练好的视觉大模型 如何 迁移 到医疗领域?
理解
- 提出背景:
-
类别问题:深度学习中的数据标注问题
-
具体问题:人工标注数据成本高昂、耗时长、需要专业知识,且随着模型规模增大,获取足够的标注数据变得越来越困难。
例如,一个医疗影像分类模型可能需要数十万张由专业医生标注的图像,这在实际中几乎不可能实现。
- 概念性质:
- 本质是一种无监督学习方法,不需要任何标签
- 通过数据本身的结构和规律自动生成标签
- 这种性质源于数据本身包含的丰富信息和内在关联
- 正反例对比:
- 正例:BERT预训练中预测被遮挡的词,模型能够通过上下文学习语言的语义和语法特征
- 反例:完全随机遮挡和预测,没有利用数据的内在结构,模型无法学到有意义的特征
- 类比理解:
- 类比:自监督学习就像是"自学成才"的学生
- 解释:传统监督学习像是老师教学生(需要标注数据),而自监督学习像是学生自己看书学习(从数据本身学习),通过理解书本内容的逻辑关系来掌握知识
-
概念介绍与总结:
自监督学习是一种机器学习范式,它不依赖外部标注,而是利用数据本身的结构来构建学习目标。通过设计巧妙的学习任务,让模型在完成这些任务的过程中学习到有用的特征表示。 -
概念重组:
"自监督学习"可以理解为:通过自身数据进行监督,实现自主学习的过程。 -
与上文关联:
自监督学习的三种方法(基于前置任务、对比学习、掩码重建)都是自监督学习的具体实现方式。 -
规律发现:
- 原则:利用数据内在结构
- 立场:减少人工标注依赖
- 方法:构建自监督任务
- 主要矛盾:如何设计有效的自监督任务
- 次要矛盾:计算资源消耗、模型架构选择等
- 功能分析:
- 表面形式:预测数据的部分内容
- 核心功能:学习数据的本质特征表示
- 最终目标:在下游任务中获得良好效果
- 定量指标:模型在下游任务上的准确率、召回率等
- 定性特征:特征表示的泛化能力、迁移能力
- 来龙去脉梳理:
深度学习发展初期主要依赖大量标注数据,这严重限制了其应用范围。
为解决这一问题,研究者开始探索如何利用未标注数据。
自监督学习通过巧妙设计预训练任务,让模型从数据本身学习特征,既解决了标注数据不足的问题,又能学到更通用的特征表示。
这种方法在计算机视觉、自然语言处理等领域取得了巨大成功,为深度学习的发展开辟了新方向。
自监督三大方法
- 基于前置任务(Pretext Tasks)
- 核心思想:设计一些辅助任务,让模型在完成这些任务的过程中学习到有用的特征表示
- 典型例子:
- 图像旋转预测:让模型预测图片旋转的角度
- 图像拼图:打乱图像块的顺序,让模型重新排序
- 文本预测:预测句子中的下一个词
- 与大模型的关系:早期的BERT就使用了预测被遮挡词(Masked Language Modeling)这样的前置任务
- 基于对比学习(Contrastive Learning)
- 核心思想:让模型学会区分相似和不相似的数据
- 工作方式:
- 对同一数据进行不同的增强/变换,生成正样本对
- 其他数据作为负样本
- 让模型学习将正样本对的表示拉近,将负样本的表示推远
- 与大模型关系:CLIP就使用了对比学习,让图像和文本的表示在同一空间对齐
对比学习路线:MoCo v3、DINO 论文
- 基于掩码重建(Masked Reconstruction)
- 核心思想:遮挡输入数据的一部分,让模型去重建被遮挡的部分
- 应用例子:
- 语言模型中的掩码词预测
- 图像中的区域重建
- 视频中的帧预测
- 与大模型关系:GPT系列通过预测下一个词来实现自监督学习,而BERT则是预测被遮挡的词
掩码重建路线:MAE 视觉掩码自编码
基于前置任务
基于前置任务就像是在解决主任务之前先做热身运动。
比如让模型预测图片是否被旋转、预测视频的时间顺序等简单任务, 通过这些前置任务来学习基础特征。
假设我们最终要训练一个识别猫品种的模型。
在主任务之前,我们先训练模型完成"判断图片是否被旋转了90度"这样的前置任务。
虽然这个任务看似简单,但要判断图片是否旋转,模型就必须先学会理解基本的视觉特征,比如边缘、纹理等,这些对后续识别猫品种都很有帮助。
Doersch, C., Gupta, A., Efros, A.A. Unsupervised visual representation learning by context prediction. ICCV, 2015.
位置预测:
Noroozi, M., Favaro, P. Unsupervised learning of visual representations by solving jigsaw puzzles. ECCV, 2016.
Gidaris, S., Singh, P., Komodakis, N. Unsupervised representation learning by predicting image rotations. arXiv 2018.
旋转预测:
Chen, T., Kornblith, S., Norouzi, M., Hinton, G. A simple framework for contrastive learning of visual representations. ICML, 2020.
上色:
Caron, M., Bojanowski, P., Joulin, A., Douze, M. Deep clustering for unsupervised learning of visual features. ECCV, 2018.
聚类预测:
基于对比学习(主流):“自己和自己比较” VS “自己和他人比较”,来学习区分性的特征表示
基于对比学习就像是在教孩子认识"同一个物体的不同角度都是同一个东西"。
通过让模型学会将同一数据的不同视角拉近、不同数据的表示推远, 来学习提取关键特征。
拿一张猫咪照片,我们对它进行两种不同的数据增强(比如一个横着拍、一个竖着拍,或者一个调亮一点、一个调暗一点)。
模型需要学会识别"这两张其实是同一只猫的照片",同时要认出"这是另一只不同的猫"。
通过这样的对比,模型逐渐学会关注猫的本质特征,而不是受到角度、光线等表面因素的干扰。
Chen, T., Kornblith, S., Norouzi, M., Hinton, G. A simple framework for contrastive learning of visual representations. ICML, 2020.
SimCLR:大样本对比,一张图片的两次增强作为正样本对,同批次大量其他图片作为负样本,让模型学会提取图片的本质特征
可以通过数据增强,来构建 正负 样本:
论文实验:
- 通过随机裁剪(c)、颜色抖动(d、e),效果最好
- batch size 大(包含更多正负样本),效果好
- 更大的网络结构、更长的训练时间,能大幅度提升效果,超过有监督方法
He, K., Fan, H., Wu, Y., Xie, S., Girshick, R. Momentum contrast for unsupervised visual representation learning. CVPR, 2020.
MoCo:动量对比学习
SimCLR:直接用大batch里的其他图片作为负样本,需要大batch
MoCo:用队列(queue)存储大量负样本,不需要大batch
核心思想是通过对比学习来学习视觉表示, 主要解决了对比学习中需要大型内存库(memory bank)的问题。
- 基本设备:
- 一个新相机(query encoder)
- 一个旧相机(key encoder)
- 一个相册(queue,存储65536张照片)
以前的俩个 encoder
是共享参数,完全一样的。
现在第二个 encoder
是动量更新了。
所有负样本,都装在了 队列(相册)当中。
- 训练过程:
假设有一张猫的照片,我们会:
- 对这张猫照片做两种随机变换:
- 变换1: 比如随机裁剪成只有猫头
- 变换2: 比如随机旋转一下角度
- 然后:
- 新相机拍摄变换1后的照片(猫头特写)
- 旧相机拍摄变换2后的照片(旋转后的猫)
- 关键是:
- 对同一张照片做两种不同的随机变换
- 这样可以让模型学会:“即使猫的姿势变了、角度变了,它还是同一只猫”
- 这两张照片的特征应该很像
- 要和相册里其他照片的特征不像
训练时的对比关系是:
- 1个正样本对:当前图片的两种变换特征要相似
- 65536个负样本:当前图片和队列中所有特征要不相似
- 动量更新规则:
- 相册更新:
- 删掉最老的一张照片
- 把旧相机刚拍的照片放进去
- 旧相机更新(动量更新):
- 主要保持原来的参数(99.9%)
- 稍微学习新相机的一点变化(0.1%)
- 这样旧相机变化很慢,提供稳定的学习目标
- 目的:
- 通过这种方式,模型能学会提取图片中不变的本质特征
- 这些学到的特征可以用于:
- 图像分类
- 目标检测
- 其他视觉任务
为什么动量更新,可以让模型能学会提取图片中不变的本质特征
- 表面现象:
- 观察到不用动量更新时,模型学到的特征质量差
- 两个编码器都快速更新导致模型性能不稳定
- 第一层分析:
- 两个编码器同步快速更新时,容易找到"偷懒"的表征方式
- 比如只关注图片的简单特征(如颜色分布)而不是语义特征
- 第二层分析:
- 因为两个编码器是"合谋"关系
- 它们可以共同演化出一种简单但无意义的特征提取方式
- 就像考试作弊:不是真的掌握知识,而是找到取巧的方法
- 第三层分析:
- 这是因为缺少一个稳定的"锚点"或"参考系"
- 两个编码器都在快速变化,没有一个稳定的目标
- 类比:两艘船相对运动,缺少岸边这个参考物
- 第四层分析:
- 本质上是对比学习中正负样本的品质问题
- 需要高质量的正样本对来学习真正的不变特征
- 动量编码器提供了一个滞后的、更稳定的表征空间
- 最根本原因:
- 对比学习需要一个合适的"难度"
- 太容易:模型学到简单但无用的特征
- 太难:模型可能完全学不会
- 动量更新通过提供稳定的参考点,创造了合适的学习难度
总结:
- 根本原因是对比学习中需要平衡学习难度
- 动量更新通过创造稳定的参考系解决这个问题
- 这就像教育中的"支架式教学":老师(动量编码器)要比学生(查询编码器)稳定
解决方案:
- 使用动量更新维持参考系的稳定性
- 合理设置动量系数(如0.999)确保足够的稳定性
- 维护足够大的负样本队列增加对比学习的区分性
主要特点和创新:
- 动态字典机制
- 维护了一个动态更新的编码器队列(queue)作为字典
- 队列存储了之前mini-batch的编码特征
- 新的mini-batch会入队, 同时最老的样本会出队
- 这种方式避免了存储整个数据集的特征
- 动量更新
- 使用动量编码器(momentum encoder)来保持特征的一致性
- key encoder的参数通过query encoder的动量更新得到
- 更新公式: θk = m * θk + (1-m) * θq
- 动量系数m通常设置为较大值(如0.999)
- 训练过程
- 对输入图像做两次数据增强得到query和key
- query通过query encoder得到查询特征
- key通过momentum encoder得到字典特征
- 将当前batch的key特征加入队列,同时移除最老的特征
- 使用InfoNCE loss计算query和字典中样本的相似度
MoCo的优势:
- 内存效率高
- 不需要存储整个数据集的特征
- 队列大小可以灵活设置,且独立于batch size
- 一致性好
- 动量更新机制保证了特征的一致性
- 避免了表示崩溃(representation collapse)问题
- 迁移性强
- 在多个下游任务上都展现出优秀的迁移学习能力
- 预训练模型可以很好地适应不同场景
适用场景:
- 大规模视觉表示学习
- 需要自监督预训练的计算机视觉任务
- 数据标注资源有限的场景
基于掩码重建(主流):通过上下文预测缺失部分,迫使模型学习数据的内在结构和语义关联
基于掩码重建就像是在玩"完形填空"游戏。
把输入数据随机遮住一部分, 让模型通过上下文来推测被遮住的内容, 从而学习数据的内在结构和规律。
将原始图片的一部分随机遮住(灰色区域), 让模型预测这个被遮住区域的原始内容。
为了准确重建, 模型必须理解图像的整体结构和上下文关系。
- 像是在玩"蒙眼猜物"的游戏
- 模型只能看到部分信息(比如图片遮住一块)
- 必须通过理解已知部分的结构和规律
- 才能正确推测出被遮住的部分长什么样
这种机制逼迫模型必须真正理解数据的生成规律,而不是简单地记忆或匹配。
Bao H, Dong L, Piao S, et al. Beit: Bert pre-training of image transformers. arXiv, 2021.
BEiT:图片随机切分,隐藏一些图块,类似拼音,视觉完形填空
为什么对比学习、掩码重建是主流?
让我用层层深入的方式来分析为什么对比学习和掩码重建能学到更通用的特征表示:
- 表面现象:
- 在下游任务迁移时,基于前置任务的方法表现普遍不如对比学习和掩码重建
- 具体体现为:在目标检测、分割等任务上,前置任务预训练的模型精度提升有限,而后两种方法能带来显著提升
- 第一层分析(直接原因):
- 前置任务学到的特征往往过于"任务特定",比如旋转预测任务主要学到了方向性特征
- 而对比学习和掩码重建学到的特征更加"任务无关",能够表达图像的多个层面的信息
- 第二层分析(更深层原因):
- 这是因为前置任务的学习目标比较单一,模型只需要完成特定的预测即可
- 而对比和重建任务要求模型理解数据的整体语义和结构:
- 对比学习需要区分相似/不相似的样本对
- 掩码重建需要通过上下文推理出缺失部分
- 第三层分析(深层诱因):
- 本质上是任务设计的"约束强度"不同:
- 前置任务是"弱约束":只需要完成简单的二分类等任务
- 后两种是"强约束":需要理解数据的内在结构和语义关联
- 强约束迫使模型必须学习更本质的特征表示才能完成任务
- 第四层分析(根本原因):
- 这反映了不同方法在"信息损失"上的差异:
- 前置任务丢失了大量原始数据中的信息
- 对比学习保留了样本间的相似性关系
- 掩码重建保留了数据的内部结构信息
- 信息保留得越完整,学到的特征就越通用
- 第五层分析(最根本原因):
- 追根溯源,这是自监督学习的核心问题:如何在没有人工标注的情况下,最大化地利用数据本身包含的信息
- 前置任务过于简化了这个问题,而后两种方法更好地保留和利用了数据的固有结构
总结与解决方案:
- 根本原因是信息利用的充分性差异
- 可能的解决方案:
- 设计更复杂的前置任务组合
- 将不同方法融合使用
- 引入领域知识来增强任务约束
- 开发新的预训练范式来更好地保留数据信息
这个分析揭示了自监督学习的一个核心原则:预训练任务的设计应该尽可能保留原始数据的信息量,这样才能学到更通用的特征表示。
对比学习、掩码重建对比分析
让我分别从不同维度分析对比学习和掩码重建的优势及其适用场景:
对比学习:
优势:
- 特征判别性强
- 通过正负样本对比,学到的特征更具区分性
- 样本间的相对关系被显式建模
- 训练更稳定
- 不需要精确重建,只需要区分相似/不相似
- 对数据噪声更鲁棒
- 计算效率高
- 无需复杂的重建网络
- 主要是特征编码器的计算
适用场景:
- 数据结构简单但需要细粒度区分的任务
- 图像分类
- 人脸识别
- 商品检索
- 样本量大但标注少的场景
- 大规模图像库
- 视频理解
- 跨模态检索
- 实时性要求高的应用
- 在线检索
- 实时识别
掩码重建:
优势:
- 语义理解更深入
- 需要理解数据的内部结构
- 能捕捉到长程依赖关系
- 生成能力强
- 直接学习数据的生成模型
- 可用于数据补全和生成
- 自监督信号更丰富
- 每个样本都能提供大量训练信号
- 可以设计多样的掩码策略
适用场景:
4. 数据具有强结构性的任务
- 语言模型
- 蛋白质结构预测
- 图像修复
- 需要理解全局语义的应用
- 文本理解
- 图像描述
- 场景理解
- 生成类任务
- 文本生成
- 图像补全
- 音频重建
选择建议:
7. 当任务重点是"区分能力"时,选择对比学习
8. 当任务需要"生成能力"时,选择掩码重建
9. 当计算资源受限时,倾向选择对比学习
10. 当数据具有强结构性时,倾向选择掩码重建
医疗影像 优选推荐:掩码重建
- 医学影像有很强的解剖学结构规律
- 通过重建任务能学习到器官间的空间关系
- 能更好地理解正常组织的表现,从而检测异常
- 生成能力有助于数据增强
实践中常见的混合策略:
12. 先用对比学习快速学习基础特征
13. 再用掩码重建细化语义理解
14. 针对不同模块使用不同策略
15. 设计统一的框架同时使用两种方法
与多模态大模型的深度联系
视觉架构创新:
- ViT为视觉建立了Transformer架构
- 使得视觉特征能与语言特征更好对齐
预训练方法:
- 对比学习促进了跨模态对齐
- 掩码重建提供了自监督学习范式
- 预训练阶段:
- 多模态大模型通常同时使用多种自监督学习方法
- 例如同时使用对比学习对齐不同模态,使用掩码重建学习单模态特征
- 数据利用:
- 自监督学习让模型能够从海量未标注的多模态数据中学习
- 不需要人工标注,大大降低了训练成本
- 跨模态理解:
- 通过自监督学习,模型能够学习到不同模态数据之间的关联
- 比如CLIP通过对比学习,让图像和文本特征在同一空间对齐
- 表征学习:
- 自监督学习帮助模型学习到更好的特征表示
- 这些特征表示对下游任务很有帮助
- 使模型具备了迁移学习的能力
视觉基础模型
ViT 视觉 Transformer(骨干网络)
完整解读:ViT:视觉 Transformer
让我系统地总结一下 Vision Transformer (ViT) 的关键特点:
- 整体架构
- ViT 将传统 Transformer 架构应用于计算机视觉任务
- 主要包含图像分块嵌入层、Transformer 编码器和 MLP 分类头三大部分
- 图像预处理和嵌入
- 将输入图像分割成固定大小的图像块(patches)
- 对每个图像块进行线性投影得到 patch 嵌入
- 添加位置编码信息来保留空间位置信息
- 额外添加一个可学习的分类标记 [CLS]
- Transformer 编码器结构
- 包含多个标准 Transformer 编码器层的堆叠
- 每个编码器层包含:
- 多头自注意力机制(Multi-Head Attention)
- 层归一化(Layer Normalization)
- MLP 块
- 残差连接
- 分类头部设计
- 使用 [CLS] token 的最终表示进行分类
- 通过 MLP 头输出最终的分类结果
- 主要创新点
- 首次成功将纯 Transformer 结构应用于视觉任务
- 证明了 “an image is worth 16x16 words” 的观点
- 避免了 CNN 的归纳偏置,完全依赖自注意力机制学习视觉特征
这种设计展现了 Transformer 架构在视觉领域的潜力,为后续视觉 Transformer 研究奠定了基础。模型在大规模数据集上预训练后,可以在多个视觉任务上取得优秀表现。
让我解释一下 Q(Query)、K(Key)、V(Value) 的计算目的:
- QK注意力计算的本质
- Q和K的点积计算(QK^T)不是直接为了加强权重
- 而是为了计算相关性/相似度,判断不同patch之间的关联程度
- 这个相关性分数决定了在最终的注意力加权中每个Value的重要性
- 具体计算流程
Attention(Q,K,V) = softmax(QK^T/√d)V
- 首先计算 QK^T 得到注意力分数矩阵
- 除以 √d 进行缩放,防止梯度消失
- 经过 softmax 归一化得到权重
- 最后与 V 相乘得到加权后的特征
- 实际意义
- Query: 当前位置想要查询的信息
- Key: 其他位置提供的信息索引
- Value: 其他位置的实际信息内容
- QK的相似度决定了从其他位置(Value)获取信息的重要程度
- 举例说明
比如在处理图像时:
- 如果一个patch包含物体的局部特征(Query)
- 它会通过与其他patch的Key计算相似度
- 相似度高的patch的Value信息会得到更多关注
- 这样就能捕捉到长距离的视觉依赖关系
所以QKV机制的核心目的是:建立一个动态的注意力机制,让模型能够根据上下文自适应地关注相关信息。这比简单的"加强权重"要复杂和强大得多。
让我详细解释一下 Key 和 Value 在 patch 处理中的具体含义:
- Key的本质
- 每个patch都会被转换成三种表示:Query、Key和Value
- Key是通过线性变换(WK)将patch的特征向量转换得到的
- 可以将Key理解为这个patch的"特征索引"或"检索标识"
- Key的维度通常是d_k,用于与Query进行相似度计算
- Value的本质
- Value同样是patch特征经过另一个线性变换(WV)得到的表示
- Value包含了这个patch的实际语义信息或视觉特征
- 可以理解为"这个patch能提供什么有用信息"
- Value的维度是d_v,决定了最终输出特征的维度
- 具体示例
假设我们在处理一张猫的图片:
Patch A(耳朵区域):
- Key: 可能编码了"尖尖的三角形轮廓"这样的特征
- Value: 包含了"猫耳朵的细节特征"
Patch B(眼睛区域):
- Key: 编码了"圆形+瞳孔"这样的特征
- Value: 包含了"猫眼睛的细节特征"
- 注意力计算过程
- Query patch(比如在找耳朵)会与所有patch的Key计算相似度
- 如果某个patch的Key表示了耳朵相关的特征,会得到较高的相似度分数
- 高相似度意味着这个patch的Value(耳朵的具体特征)会被更多地关注
- 最终输出特征会更多地包含相关patch的Value信息
- 数学表达
对于patch i:
Query_i = X_i * W_Q (X_i是原始特征)
Key_i = X_i * W_K
Value_i = X_i * W_V
注意力权重_ij = softmax(Query_i * Key_j^T / sqrt(d_k))
输出_i = sum_j(注意力权重_ij * Value_j)
这样设计的优势是:
- 可以动态决定需要关注的特征
- 能够捕捉到远距离的视觉依赖关系
- 模型可以学习到更灵活的特征组合方式
所以当我们说"相似度高的patch的Value信息"时,实际指的是:那些Key与当前Query计算得到高相似度的patch所包含的实际视觉特征信息(Value)会在最终的特征表示中占更大的权重。
让我用生动的类比来解释Vision Transformer的工作原理:
- 整体架构 - “图片处理工厂”:
输入图片 → 切割车间(分块) → 特征提取流水线(编码器) → 决策部门(分类头)
就像一个工厂:
- 原料(整张图片)先切成小块
- 通过多道加工工序(Transformer层)
- 最后由质检部门(分类头)做出判断
- Patch处理 - “拼图游戏”:
- 把大图片切成等大小的小方块(patches)
- 给每块加上位置标记(位置编码)
- 额外添加一个总结块[CLS],像拼图的说明书
- QKV机制 - “图书馆检索系统”:
Query(查询): 读者的需求描述
- "我想找关于猫耳朵的内容"
Key(索引): 书籍目录
- "动物特征大全,第三章:猫科动物"
- "宠物图鉴,第八节:猫的外形"
Value(内容): 实际的书籍内容
- "猫的耳朵呈三角形,具有灵敏的听觉..."
检索过程:
1. 读者需求(Query)与图书目录(Key)匹配
2. 相关度高的书籍内容(Value)会被优先推荐
- 注意力机制 - “众人看画”:
假设在看一幅猫的画像:
观察者A(关注耳朵):
- 寻找(Query):"三角形的尖耳朵"
- 匹配(Key):发现上方有尖尖的形状
- 获取(Value):仔细观察耳朵的细节
观察者B(关注眼睛):
- 寻找(Query):"圆形的眼睛"
- 匹配(Key):发现中间有圆形轮廓
- 获取(Value):专注观察眼睛的特征
- 自注意力计算 - “同学间的互相学习”:
课堂讨论场景:
- 每个同学(patch)都有三个角色:
* 提问者(Query):想学什么?
* 知识提供者(Key):会什么?
* 具体解答者(Value):教什么?
- 互动过程:
* 提问的同学(Query)与其他同学的专长(Key)匹配
* 匹配度高的同学会分享更多知识(Value)
* 最终汇总所有人的贡献(加权求和)
这些类比帮助我们理解:
- 模型如何处理大图片
- 如何保持空间信息
- 注意力机制如何工作
- 为什么这种设计如此有效
这就像把复杂的视觉任务变成了一个有组织的团队合作过程,每个部分都有其特定的职责,共同完成图像理解的目标。
ViT 是否抛弃了 CNN 式的特征提取?相比 CNN 有哪些优势?
是否抛弃 CNN 特征:
- 从模型结构上看,ViT 并没有使用卷积层对图像做局部感受野的特征提取,而是将图像切分成若干块(patch),然后将每个 patch 的像素展平或进行简单线性投影后输入 Transformer 进行全局注意力计算。
- 因此,ViT 在原始形式上“放弃”了传统 CNN 的卷积操作,也不再手工设计类似 ResNet、VGG 之类的逐层卷积特征。它更多依赖注意力机制(self-attention)去“自学”出哪些图像区域或 patch 之间的关联更加重要,从而完成特征提取。
与 CNN 相比的优势:
- 全局建模能力:
- CNN 主要通过卷积核的局部感受野(通常伴随池化等操作)逐步扩大感受野,而 ViT 可以在自注意力(self-attention)中直接建立任意两个 patch 之间的全局关系。
- 这让 ViT 能够更容易地捕捉到远距离依赖关系,不需要像 CNN 那样依赖较深网络去慢慢扩大感受野。
- 更灵活的特征表示:
- CNN 的特征提取更多是“自带”先验(卷积核在局部结构上具有平移不变性)。ViT 在理论上更“通用”,它能学到各种各样的特征关系,也适用于多种模态的输入(如文本、图像、视频等)。
- 一定程度上摆脱了卷积核大小、步幅等手工设计超参数的限制。
- 与预训练、数据规模结合良好:
- Transformer 在 NLP 领域已经验证了其强大的可扩展性,当数据量足够大的时候(比如 JFT-300M、ImageNet-21K 这种大型数据集),ViT 可以训练出非常强的特征表达性能,同时也能与各种自监督/对比学习方法结合。
- 通过使用更大规模的数据,ViT 常常能获得比 CNN 更好的精度和泛化性能。
不过要注意的是,在数据量比较有限的场景下,如果没有足够的预训练,ViT 可能不如 CNN 来得稳定或收敛更快;因此实际应用中也有一些混合结构(如 Convolution + Transformer)被提出,用以在小数据集或特定任务场景中更好地进行特征抽取。
MoCo v3 自监督-对比学习的基础框架(骨干网络)
完整解读:基于MoCo v3框架的大规模视觉Transformer训练策略研究:通过冻结策略提升1-3%性能的稳定性优化方法
让我基于这三张图系统地分析MoCo的演进:
- MoCo v1 的核心设计:
- 主干网络:Resnet
- 引入了动量编码器(momentum encoder)和队列(queue)机制
- 使用query encoder处理当前样本,momentum encoder处理key样本
- 维护一个队列存储历史batch的key特征
- 通过contrastive loss使query特征与正样本的key接近,与负样本的key疏远
- MoCo v2 的改进:
- 在基础架构上增加了SimCLR中的投影头(Projection Head)
- 在编码器后增加MLP投影层g(.)来做特征转换
- 保持了v1的动量编码器和队列机制
- 更多的数据增强策略来提升性能
- MoCo v3 的重大改进:
- 架构调整:
- 取消了内存队列(queue),改用大batch size(K=4096)来提供负样本
- 代码中显示使用torch.rand(C, K)直接生成特征
- 损失函数改进:
- 采用双向的对比损失(bidirectional contrastive loss)
- loss = ctr(q1,k2) + ctr(q2,k1)
- 使用了InfoNCE形式的ctr函数: ctr(q,k) = -log[exp(sim(q,k+)/τ) / Σexp(sim(q,k)/τ)]
- 基于ViT架构:
- 从ResNet迁移到Vision Transformer架构
- 保持了动量编码器的设计理念
- 主要发展趋势:
- 从v1到v3的简化: 逐步去除复杂组件(如队列机制)
- 计算效率: 通过大batch替代内存队列
- 损失函数: 从单向对比变为双向对比
- 架构演进: 从CNN架构转向Transformer架构
- 技术创新点:
- v1确立了动量对比学习框架
- v2引入现代化的特征投影机制
- v3实现了架构升级和损失函数优化
这种演进显示了自监督学习方法在简化和效率方面的持续改进,同时保持了良好的性能。
从代码实现上也可以看出,v3版本通过更大的batch size和更简单的实现方式来达到相似甚至更好的效果。
让我用生动的类比来解释MoCo三个版本的演进历程:
- MoCo v1 - “古典图书馆系统”:
- 图书馆(Queue机制)存储历史知识(key特征)
- 图书管理员(Momentum Encoder)负责更新和维护藏书
- 读者(Query Encoder)查找相关书籍
- 借书证系统(Contrastive Loss)确保借到相关书籍,避免无关书籍
- MoCo v2 - “现代化图书馆升级”:
- 保留原有图书馆系统
- 增加分类目录(Projection Head)便于检索
- 改进图书分类方式(MLP投影)
- 增加多种检索方式(更多数据增强)
- MoCo v3 - “数字图书馆革新”:
- 取消实体书库(Queue),改用大型数字资源库(大batch)
- 双向检索系统(双向对比损失):
* 读者找书 = ctr(q1,k2)
* 书找读者 = ctr(q2,k1)
- 采用AI推荐系统(ViT架构)替代传统检索
- 整体演进类比 - “图书馆的数字化转型”:
传统图书馆(v1)
↓
现代化改造(v2)
↓
完全数字化(v3)
- 关键改进点类比:
- 存储方式:书架(Queue) → 数字库(大batch)
- 检索方式:单向找书 → 双向推荐
- 管理系统:人工分类(CNN) → AI系统(ViT)
这个演进过程就像图书馆从传统到数字化的转型:
- 简化了复杂的物理存储系统
- 提高了检索效率
- 引入了更智能的推荐机制
- 保持了核心服务质量
这种转型让我们看到:
- 技术进步带来的简化
- 效率的显著提升
- 服务质量的保证或提升
- 用户体验的改善
DINO 无需标签的自监督学习范式(自蒸馏)
- DINO的核心架构
- 采用了教师-学生(teacher-student)网络架构
- student网络(gθs)和teacher网络(gθt)共享相似的架构
- teacher网络参数通过动量更新:θt ← λθt + (1-λ)θs
- 在teacher端增加了centering模块来防止模型崩塌
- 使用交叉熵损失:-p2 log p1
2. 与对比学习的关系
相同点:
- 都是自监督学习方法
- 都使用了数据增强来创建不同视角
- 都需要避免表示崩塌的问题
不同点:
- DINO不直接计算样本间的对比损失
- DINO通过教师-学生架构学习,而不是显式的对比学习
- DINO的centering机制不同于对比学习的负样本机制
让我深入分析DINO和MoCo v3的关系:
- 基础设计思路的共同点:
- 都基于Vision Transformer (ViT)架构
- 都采用了动量更新机制
- 都去除了内存队列,使用大batch size方案
- 都需要处理特征崩塌(collapse)问题
- 关键差异:
-
特征学习方式:
- DINO:使用教师-学生知识蒸馏框架
- MoCo v3:使用双向对比学习
-
避免崩塌的方法:
- DINO:使用centering机制,c ← mc + (1-m)(1/B)∑gθt(xi)
- MoCo v3:通过对比学习的正负样本机制
-
损失函数设计:
- DINO:交叉熵损失 -p2 log p1
- MoCo v3:双向对比损失 ctr(q1,k2) + ctr(q2,k1)
- 架构演进关系:
MoCo v1/v2 (ResNet + 队列)
↓
分别演化
↙ ↘
MoCo v3 DINO
(ViT+大batch) (ViT+大batch)
(对比学习) (知识蒸馏)
- 实现细节对比:
-
网络结构:
- DINO:student-gθs和teacher-gθt
- MoCo v3:query encoder和momentum encoder
-
参数更新:
- DINO:θt ← λθt + (1-λ)θs
- MoCo v3:类似的动量更新机制
-
batch处理:
- 都使用大batch size来提供足够的训练样本
- 都去除了复杂的队列机制
- 主要技术思路:
- MoCo v3:通过对比学习直接学习特征表示
- DINO:通过知识蒸馏间接学习特征表示
这种演进显示了自监督学习的两个重要方向:
- 对比学习路线(MoCo系列)
- 知识蒸馏路线(DINO)
它们代表了达到相似目标的两种不同但equally effective的方法。这种多样化的发展对于自监督学习领域的进步非常重要。
让我用生动的类比来解释DINO和MoCo v3的异同:
- 学习范式的类比
MoCo v3就像"找不同游戏":
- 给两张相似的图片
- 通过对比找出它们的异同
- 正样本对(相似图片):互相靠近
- 负样本对(不同图片):互相远离
DINO则像"教练教学":
- 教练(teacher)展示标准动作
- 学生(student)模仿学习
- 教练不断改进示范动作
- 学生逐渐掌握要领
- 避免崩塌机制的类比
MoCo v3像"社交距离":
- 通过正负样本对显式控制距离
- 保持特征之间的合理间隔
- 类似社交中的亲疏关系
DINO像"保持重心":
- centering机制像保持平衡
- 防止所有人都挤到一起
- 通过调整重心维持秩序
- 批量处理的类比
两者都像"大课堂教学":
- 不再是小班教学(内存队列)
- 改用大课堂形式(大batch)
- 一次处理更多的学习样本
- 提高学习效率
- 动量更新的类比
都像"经验累积":
- 新知识慢慢融入已有经验
- 不会因单次学习大幅改变
- 保持学习的稳定性
- 类似"温故知新"的过程
- 整体架构的类比
MoCo v3像"双人舞":
- query和momentum encoder配合
- 通过对比互相促进
- 保持节奏的一致性
DINO像"师徒传承":
- 老师引导学生
- 渐进式知识传递
- 维持传承的连续性
这些类比说明:
- 两种方法都是为了学习好的特征表示
- 但采用了不同的学习策略
- 各有优势,殊途同归
- 都实现了高效的自监督学习
通过这些生动的类比,我们可以更直观地理解这两种方法的设计思路和工作原理,虽然采用不同的策略,但都能达到优秀的自监督学习效果。
MAE 掩码自编码的方式实现自监督学习,只输入均匀分布的 25% 切片,视觉的完形填空
完整解读:MAE 随机掩码自编码器:高掩码率 + 非对称编码器-解码器架构,解决视觉数据冗余特征、计算冗余消除
让我用生动的类比来解释 MAE (Masked Autoencoder) 的工作原理:
- 整体架构类比 - “修复残缺画作”:
MAE就像一个艺术修复工作室:
- 输入:带有遮盖的残缺画作(masked patches)
- 修复师(encoder):观察可见部分,理解画作特征
- 助手(decoder):根据修复师的指导还原完整画作
- 目标:让修复后的画作(重建图像)与原画(target)尽可能相似
- 掩码机制类比 - “蒙眼猜物”:
就像玩蒙眼猜物游戏:
- 随机遮住大部分区域(高掩码率75%)
- 只能看到少量区域(可见25%)
- 通过可见部分推测整体
- 最后揭开眼罩验证猜测
- 编码器-解码器类比 - “画家临摹”:
编码器(Encoder):"观察理解阶段"
- 仔细观察未被遮挡的局部
- 理解画作的风格、特点
- 形成对整体的初步认知
解码器(Decoder):"还原创作阶段"
- 基于理解进行创作
- 填补被遮挡的部分
- 力求与原作风格一致
- 损失函数类比 - “评分标准”:
MSE损失就像"相似度评分":
- 对比还原作品与原作
- 计算每个位置的差异
- 追求最小的整体误差
- 训练过程类比 - “练习提高”:
就像画家的成长过程:
- 反复练习局部到整体的还原
- 不断调整观察和创作技巧
- 通过大量实践提升准确度
这种设计的优势:
- 自我学习:不需要标签就能学习图像特征
- 高效性:只需处理少量可见patch
- 泛化能力:通过重建任务学到通用的视觉表示
MAE的这种设计就像:
- 训练大脑"望闻问切"的本领
- 通过"猜测验证"培养推理能力
- 在"修复创作"中掌握图像特征
这种自监督学习方式非常符合人类学习的自然规律,通过"观察-推理-验证"的循环来提升理解能力。
让我详细解释MAE在处理75%掩码率时的关键设计和原理:
- “为什么只有25%输入也能工作?”
类比 - “拼图游戏”:
想象一个100片的拼图:
- 给你25片关键碎片(可见patches)
- 这些碎片不是随机的,而是均匀分布的
- 通过这些碎片可以:
* 推测图片的整体内容
* 理解基本的结构和布局
* 猜测缺失部分的大致内容
就像人类看到四分之一的拼图,也能大致猜出这是"一只猫"或"一朵花"
- “如何知道位置信息?”
类比 - “带标记的拼图盒”:
每个patch都带有两个关键信息:
- 位置编码:就像拼图盒上的网格坐标
- 掩码标记:标识哪些是真实的,哪些需要重建
就像拼图盒上标注:
- A1格是"已知的天空"
- B2格是"需要猜测的云朵"
- C3格是"已知的树木"
- 重建过程的可靠性
类比 - “侦探推理”:
就像侦探根据线索推理:
- 已知信息(25%可见patches)是确定的关键线索
- 空间位置编码提供了"案发现场图"
- 模型通过大量训练学会了"推理规律":
* 天空通常是蓝色
* 树叶通常是绿色
* 人脸的左右应该对称
- 为什么这种设计有效?
A. 信息冗余原理:
- 图像内容通常高度冗余
- 局部特征往往可以预示整体
- 25%的关键信息足以重建主要内容
B. 结构化学习:
- 位置编码保证了空间关系
- 掩码标记明确了任务目标
- 模型学习到了内容和结构的关联
C. 先验知识积累:
- 通过大量训练学习视觉规律
- 掌握了物体的一般特征
- 形成了对视觉世界的理解
这就解释了为什么MAE能在高掩码率下工作:
- 保留了足够的关键信息
- 维持了准确的位置感知
- 利用了图像的内在规律
- 依靠训练积累的先验知识
这种设计不仅高效,而且能促使模型学习更深层的视觉特征表示。
SAM 通用的分割模型,借鉴prompt设计,视觉界的GPT,分割任意物体
完整解读:【多模态大模型】视觉大模型SAM:如何使模型能够处理任意图像的分割任务?
让我系统介绍SAM (Segment Anything Model),然后用生动的类比来解释:
- SAM的核心功能:
- 通用分割模型:可以分割任何物体
- 支持多种输入提示:点击、框选、自由形状等
- 实时交互:快速响应用户的提示操作
- 零样本泛化:无需针对特定物体训练
- 模型架构:
- 图像编码器:基于ViT的主干网络,提取图像特征
- 提示编码器:处理各类用户提示(点、框、掩码等)
- 掩码解码器:生成分割掩码的轻量级网络
- 两阶段设计:离线图像编码 + 实时提示处理
- 工作流程:
输入图像 → 图像编码(预计算) → 存储图像嵌入
用户提示 → 提示编码 → 与图像特征结合 → 生成掩码
- 训练策略:
- 大规模数据集:SA-1B数据集,包含1B掩码
- 多样化提示:随机生成不同类型的提示
- 对比学习:学习区分前景和背景
现在,让我用生动的类比来解释SAM:
- 整体类比 - “超级画师助手”:
SAM就像一个智能绘画助手:
- 能理解各种指令(提示)
- 精确勾勒出你想要的物体
- 不管画什么都能应对
- 反应极快,随时待命
- 组件类比 - “艺术工作室”:
图像编码器:"观察员"
- 仔细观察并记住整张图片的细节
提示编码器:"翻译官"
- 将用户的各种指示转化为精确指令
掩码解码器:"画师"
- 根据观察和指令准确描绘物体轮廓
- 工作流程类比 - “点菜系统”:
就像高级餐厅的点菜:
- 菜单上有照片(输入图像)
- 客人用手指点菜(点击提示)
- 服务员立即知道具体是哪道菜(模型识别)
- 快速圈出菜品范围(生成掩码)
- 交互体验类比 - “魔法画笔”:
像拿着一支神奇的画笔:
- 点一下:画笔就知道你想画什么
- 画个框:自动找出框内的物体
- 随意勾画:智能补全完整区域
- 反应迅速,仿佛能读懂你的心思
- 通用性类比 - “万能翻译官”:
就像一个会所有语言的翻译:
- 不管说什么语言都能听懂(各种物体)
- 可以用多种方式交流(多种提示)
- 立即给出准确翻译(快速分割)
- 遇到新语言也能应对(零样本泛化)
这些类比展示了SAM的关键特点:
- 通用性:能处理任何物体
- 灵活性:支持多种交互方式
- 实时性:快速响应
- 准确性:精确分割
- 易用性:直观的交互方式
SAM的成功展示了AI在视觉理解和人机交互方面的重大进展,让复杂的图像分割变得像日常对话一样自然。
SAM是视觉界的"GPT",我来详细类比一下视觉和语言的Prompt设计:
- 提示类型对比
语言界GPT:
- 文本提示:"写一个关于春天的故事"
- 补全提示:"春天来了,..."
- 修改提示:"把这段话改成正式语气"
视觉界SAM:
- 点击提示:点击物体中心
- 框选提示:画框圈出目标范围
- 自由形状提示:勾画物体轮廓
- 交互方式对比
GPT的语言交互:
- 输入: 自然语言描述
- 上下文: 之前的对话历史
- 输出: 文本生成或修改
SAM的视觉交互:
- 输入: 鼠标点击/拖拽
- 上下文: 整张输入图像
- 输出: 目标区域掩码
- 设计思路对比
GPT提示设计:
- 清晰的指令说明
- 任务目标描述
- 格式要求指定
- 示例引导
SAM提示设计:
- 直观的位置指示
- 区域范围界定
- 前景/背景标注
- 视觉引导
- 通用性对比
GPT:
- 理解各种语言任务
- 跨领域知识迁移
- 零样本文本处理
SAM:
- 分割任何类型物体
- 跨场景目标识别
- 零样本图像分割
- 实际应用类比
语言场景:
- GPT:"帮我总结这篇文章"
→ 生成文本摘要
视觉场景:
- SAM:"点击这个物体"
→ 生成目标掩码
核心相似点:
- 都采用了提示机制引导模型行为
- 都支持灵活的交互方式
- 都具有强大的通用性
- 都能零样本泛化到新任务
- 都实现了自然的人机交互
这种设计思路的借鉴显示了:
- 提示学习范式的普适性
- 交互设计的重要性
- 通用模型的发展趋势
SAM成功将语言世界的prompt设计理念迁移到视觉领域,创造了一个直观、高效的视觉交互范式。
LOSAM:视觉大模型SAM + 眼科
完整解读:【医学大模型 眼科视觉】 LOSAM:视觉大模型SAM + 眼科
TV-SAM 新型零样本医学图像分割算法:GPT-4语言处理 + GLIP视觉理解 + SAM分割技术
完整解读:TV-SAM 新型零样本医学图像分割算法:GPT-4语言处理 + GLIP视觉理解 + SAM分割技术
多模态学习方法
Awais M, Naseer M, Khan S, et al. Foundational models defining a new era in
- 双编码器: 独立并行编码图文,最后对齐特征
- 融合架构: 通过融合解码器实现深度图文交互
- 编码器-解码器: 按序处理特征实现生成任务
- 适配型LLM: 直接将图文输入LLM以利用其泛化能力
我来帮您分析比较这4种多模态架构的异同和特点:
- 双编码器(Dual-Encoder)架构:
- 特点:并行使用独立的图像和文本编码器,各自编码后对齐表示
- 优势:
- 结构简单直观
- 编码过程相互独立,可并行处理提高效率
- 适合检索任务
- 劣势:
- 图像和文本特征交互有限
- 对齐精度可能不够理想
- 代表模型:CLIP, ALIGN, Florence, GLIP
- 融合(Fusion)架构:
- 特点:通过融合解码器联合处理图文表示
- 优势:
- 允许更深层次的跨模态特征交互
- 支持更复杂的视觉任务(如目标检测)
- 劣势:
- 计算开销较大
- 结构相对复杂
- 代表模型:GLIP, CoCa, FLAVA, SAM
- 编码器-解码器(Encoder-Decoder)架构:
- 特点:按顺序进行联合特征编码和解码
- 优势:
- 结构清晰,信息流动明确
- 适合生成任务
- 劣势:
- 串行处理效率较低
- 代表模型:Frozen, MetaLM, SimVLM, PaLI
- 适配型LLM (Adapted LLM)架构:
- 特点:将视觉和文本输入直接输入到大语言模型
- 优势:
- 充分利用LLM强大的泛化能力
- 结构简单,易于扩展
- 端到端训练
- 劣势:
- 依赖高质量的预训练LLM
- 训练成本高
- 代表模型:Flamingo, KOSMOS, BLIP-2
总体来看,这些架构反映了多模态AI的发展趋势:
- 从简单的双流架构发展到更复杂的交互式架构
- 逐步重视跨模态特征的深度融合
- 越来越多地利用大模型的能力
- 在效率和性能之间寻求平衡
选择哪种架构主要取决于具体应用场景:
- 如果任务简单且需要高效率,可以选择双编码器
- 如果需要深度的跨模态理解,可以选择融合架构
- 如果是生成任务,编码器-解码器架构更适合
- 如果想要更强的泛化能力,可以考虑适配型LLM架构
CILP 图文对比学习
完整解读:https://blog.csdn.net/qq_41739364/article/details/135063268
正样本:一对匹配的图像、文本
负样本:一对不匹配的图像、文本
CLIP的核心训练机制:
对比学习目标:
- 正样本:最大化匹配图文对的相似度(如"一只猫"和猫的图片)
- 负样本:最小化不匹配图文对的相似度(如"一只狗"和猫的图片)
训练过程:
- 每个batch包含N对图文对
- 形成N × N的相似度矩阵
- 对角线是正样本(匹配对),其他都是负样本
- 使用对比损失函数,让正样本相似度高,负样本相似度低
这种机制让CLIP学会:
- 关注图文共同的关键语义特征
- 建立跨模态对应关系
- 获得良好的泛化能力
CLIP就像一个翻译官系统,有两位专家翻译官:
- 视觉翻译官:专门理解图片,将其翻译成特定"语言"(特征向量)
- 文本翻译官:专门理解文字,将其翻译成同样的"语言"
他们各自独立工作,最后比对翻译结果看是否对应。这种方式:
- 效率高:两人可以同时工作
- 通用性强:只要掌握这种"通用语言"就能处理新任务
- 但深度有限:像是在对照词典查词,难以理解复杂的上下文关系
CLIP处理多对象场景的正负样本策略:
正样本:
- 图文对中包含所有目标对象且描述准确,如"猫和狗在草地上玩耍"
- 不同视角和组合下的多对象图像
- 相似场景的变体
负样本:
- 缺少关键对象的图文对,如只有猫没有狗
- 对象关系描述错误的图文对
- 完全不相关的场景
- 目标对象的一部分或遮挡严重的情况
通过合理的正负样本采样,可以提升模型对多对象场景的理解能力。
GILP 细粒度图文对齐
完整解读:https://blog.csdn.net/qq_41739364/article/details/136027672
CLIP 只能图像分类,GLIP 能目标检测
CLIP 输入是一批图像和一批文本
GLIP 输入是一张图像(包含各种对象)和文字的各个子对象
CLIP:
- 批量输入: N张图像 + M个文本描述
- 计算NxM相似度矩阵
- 训练目标是匹配对应的图文对
GLIP:
- 单张图像 + 多个物体描述(phrases)
- 为每个phrase预测目标框
- 学习图像区域和文本短语的对应关系
BLIP
完整解读:https://blog.csdn.net/qq_41739364/article/details/136019483
BLIP-2
完整解读:https://debroon.blog.csdn.net/article/details/136021574
多模态视觉架构大模型
MiniGPT-4:采用Adapter架构,通过Q-Former将图片特征对齐到大模型的Input Embedding中,支持多轮对话和逻辑推理能力
Qwen2 VL:阿里巴巴开发的中文开源多模态大模型,能够进行多图多轮对话,识别图中文字并给出物体的准确坐标
Frozen:DeepMind 发布,通过训练视觉编码器来适配LLMs
KOSMOS-1:基于 Transformer 框架,采用自回归生成文本,并通过特定的编码策略处理文本和图像数据
Flamingo:DeepMind 发布,在少样本学习中取得了显著成就
完整解读:Flamingo:少样本多模态大模型
Flamingo模型实质上是多模态LLM结构的一个典型实现:
- 视觉编码器:
- 通用结构: 预训练ViT
- Flamingo实现: 冻结的ViT
- 语言主干:
- 通用结构: 预训练LLM
- Flamingo实现: 冻结的语言模型+适配层
- 多模态融合:
- 通用结构: 交叉注意力
- Flamingo创新: Perceiver压缩+XAttn模块
主要差异:
- Flamingo引入Perceiver压缩视觉特征
- 采用模块化设计重用预训练模型
- 在语言模型各层嵌入XAttn实现细粒度融合
Flamingo可以看作是多模态LLM通用架构的一个优化实现版本。
LLaVA:Flamingo 简化版,通过两阶段训练实现视觉与语言模态的高效融合
完整解读:LLaVA 多模态大模型:有的模型识别世界,有的模型理解世界
LLaVA是Flamingo的简化版本,核心特点:
- 两阶段训练:
- 特征对齐: 将视觉特征对齐到语言空间
- 指令微调: 训练多模态对话能力
- 简化设计:
- 固定ViT视觉编码器
- 仅训练投影层和适配层
- 减少交叉注意力层使用
仅训练两个部分:
- 投影层W: 将视觉特征映射到语言空间
- 语言模型中的适配层: 图中绿色模块(Language Response部分)
其他部分(Vision Encoder和Language Model主体)都是冻结的预训练权重。
本质是用简单有效的方法实现视觉语言融合。
VILA:英伟达开发的多模态大模型,专注于视觉和语言任务的融合
Gemini:谷歌开发的原生多模态大模型,具有无缝跨模态的能力,支持文字与图片输入
BuboGPT:字节跳动开发的多模态大模型,支持文本、图像和音频三种模态,能够实现细粒度的多模态联合理解
WINGS:一种创新的多模态学习架构,通过视觉编码器、投影器、语言学习器等组件提升多模态大模型的表现
紫东太初:中国科学院自动化研究所研发的全球首个千亿参数多模态人工智能大模型,支持图像、文本、语音、视频等多种模态数据间的统一表示与相互生成
混元DiT:腾讯开发的中文原生DiT架构多模态大模型,支持中英文输入和理解,适用于文生图、生视频等多模态视觉生成
提问
自监督学习与传统监督学习最本质的区别是什么?
自监督学习类似"自学成才"的学生,您如何理解这个比喻?它的局限性在哪里?
为什么自监督学习能够从数据本身学习到有用的特征表示?这种学习机制与人类学习有什么异同?
在三种主要方法(前置任务、对比学习、掩码重建)中,您认为哪种方法最有前景?为什么?
对比学习要求正负样本对,如何定义什么是"相似"的数据?这个定义可能带来什么问题?
掩码重建任务中,如何确定最优的掩码比例?这个比例是否会随任务变化?
自监督学习在减少标注数据依赖的同时,是否也带来了新的挑战?这些挑战具体是什么?
为什么自监督学习特别适合多模态大模型?这种结合是否存在潜在问题?
从计算效率的角度看,自监督学习相比传统监督学习有什么优势和劣势?
如何评估一个自监督学习方法的好坏?需要考虑哪些关键指标?
如果让您设计一个新的自监督学习方法,您会如何设计?理由是什么?
自监督学习的发展是否意味着未来可以完全摆脱人工标注?为什么?
在掩码重建方法中,现有的模型通常采用随机掩码策略。如果要设计一种"智能掩码"策略,使其能够自适应地选择最具信息量的区域进行掩码,你会如何设计算法?请详细说明技术路线和可能遇到的挑战。
文章提到CLIP使用对比学习实现图文对齐,但在实际应用中可能存在模态间语义差异过大的情况。如何设计更精细的对比学习策略来处理这种"跨模态语义鸿沟"问题?
当前的自监督学习方法主要关注特征学习,但对因果关系的学习较少涉及。如何将因果推理的思想引入自监督学习框架,使模型能够学习到数据中的因果结构?
在多模态场景下,不同模态的信息量差异很大(如图像通常包含的信息量远大于对应的文本描述)。这种信息不平衡会如何影响自监督学习的效果?有什么解决方案?
自监督学习在处理长尾分布数据时可能面临样本不平衡的问题。如何设计前置任务或对比学习策略来确保模型能够学习到罕见类别的特征表示?
在文章提到的三种方法中,如何有效地将它们组合使用?具体来说,如何设计损失函数来平衡不同学习目标,使它们能够互相促进而不是相互干扰?
自监督学习可能会学习到一些表面的统计相关性而非真正有意义的特征。如何设计机制来区分和过滤这些"伪相关"特征?这个问题在多模态学习中尤其重要。
MiniGPT-4采用Adapter架构进行模态对齐,但这种方式可能会带来信息损失。如何评估这种损失,并设计更好的架构来降低信息损失?
在多轮对话场景下,如何让自监督学习模型保持对话的连贯性和上下文理解能力?现有的掩码策略是否足以处理长程依赖关系?
自监督学习在处理时序数据时,如何平衡短期和长期依赖的建模?特别是在视频理解任务中,如何设计时序掩码策略来捕获不同时间尺度的特征?
训练好的视觉大模型 如何 迁移 到医疗领域?
线性探测:只微调一个新的分类器(Head),替换掉原来的分类器
在整个框架中,就改变了 Head 层(变色)
只适合同类型的视觉迁移,自然图像训练的,这种方法不适合迁移医疗领域
微调:主干网络(Backbone)+ 分类器(Head)都微调,替换掉
在整个框架中,基本都改变了(变色)
这种方法效果好,但医疗效果是好了,通用领域知识可能就没了(灾难性遗忘)
百川新模型超GPT-4o近20%,首创自约束训练方案突破瓶颈,主打「领域增强」
在训练行业领域大模型时,业界目前的普遍做法是通用训练语料与领域数据相结合的CPT的训练方式。
这个训练方法可用,但伴随着2个关键挑战。
一是如何确定最优的数据混合比例,包括领域内不同类型数据的配比以及领域数据与通用数据的融合比例;
二是如何选择合适的训练策略,在课程学习、固定配比训练以及结合退火实验等方案中找到最佳方案。
在大量实验后,百川发现传统固定配比的直接训练方式存在明显缺陷:随着训练的深入,模型的金融领域能力虽然不断提升,但通用能力却显著下降。
百川为训练过程首提了一种创新性的策略——领域自约束的训练方案+“loss scaling law + metric scaling law”双重预测推演过程。
以此保证模型通用能力不下降,领域能力提升。
领域自约束的训练方案是啥?
一种提升模型垂域泛化能力、又不降低通用能力的训练策略。
在模型CPT过程中,领域知识的直接引入会破坏原有base model的训练分布,因此直接基于领域数据或者混合通用领域这两种方案进行训练,必然会让通用能力下降。
于是,不想破坏通用能力的百川团队就提出了个新的训练方案,称之为“领域自约束”。
具体来说,是在基础领域模型训练过程中构建一个和基础模型同参且参数不更新的“reference model”,来指导模型训练的过程不要跑偏,从而达到「通用能力不降,领域能力稳定增长」的效果。
Adapter:在主干网络(Backbone)外面套一层,可以改变的层,只需要微调新层(Adapter) + 分类器(Head)就可以了
Adapter 在残差链接这里做了一些事(上采样+下采样)
AdaptFormer:用2%参数,实现视觉Transformer的高效迁移学习,性能超越全量微调(SSv2提升10%,HMDB51提升19%)
视觉 Prompt:新的任务,加一个视觉提示词
Prompt engineer教程:https://www.promptingguide.ai/
完整解读:视觉提示调优:一种高效的Transformer迁移学习新方法 - 仅需1%参数实现超越全量微调的性能
Transformer网络中的每一层都承担不同的特征提取功能
浅层主要处理低级视觉特征(如边缘、纹理)
深层负责提取高级语义特征(如物体部件、场景构成)
多层prompt能够同时调制这些不同层次的特征提取过程
简单任务,加个简单提示就够了(就像认识猫狗,给个"这是什么动物"的提示就行)
复杂任务需要在多个层面都加提示(就像理解艺术画,需要从构图、色彩等多个角度给提示)
输入空间的调整比内部参数更新(微调)更有效