Stetman读论文小记:Understanding and Constructing Latent Modality Structures in Multi-Modal Representation

参与实验室相关课题精读的一篇论文。

全文介绍

        多模态学习中,如何将语言信息与图片信息相融合进行训练一直是研究的核心问题。现在主流的两种研究方向中,一种将两种模态的表示统一到一个编码器中,通常将图像和文本标记化为序列;另一种研究方法是用特定模态编码器分别表示图像和文本模态,并利用对比学习来调整模态,从而在多个下游应用中实现最先进的性能。

        尽管对比损失(Contrastive loss)被越来越多地用于从多种模态中学习表征,在极限情况下,对比损失的性质会促使模态在潜在空间中彼此完全匹配。然而,衔接和调整两种模态是否总能为下游任务带来益处(22年的一篇文章指出未必),模态对齐如何影响下游任务的表现仍是未决问题。 

        在本文中,基于信息论的论证,作者首先证明了对于下游预测任务来说,精确的模态对齐一般是次优的。因此,作者主张提高性能的关键在于有意义的潜在模态结构,而不是完美的模态对齐。为此,作者提出了三种构建潜在模态结构的通用方法:

        1)通过深度特征分离实现的模态内正则化 ;

        2)通过布朗桥进行的模态间正则化;

        3)通过几何一致性实现的内部间正则化;

并在两种流行的多模态表征学习框架上进行了广泛的实验:基于 CLIP 的双塔模型和基于 ALBEF 的融合模型。

构建潜在结构来改进多模态学习示例(如下图): 

模态差距对下游性能的影响 

符号简记

ZT:面向文字的专属编码器;

ZV:面向图片的专属编码器;

XT:对目标的文本描述;

XV:目标的图片;

Y:对目标物体的预期(如:目标物体为商品,Y可以是他的销售预期);

本文中,作者将(XV,XT,Y)的联合分布命名为联合分布p,即p=

:信息间隙,指这两种模式在预测目标变量Y方面所提供的效用差距;

:交叉熵损失;

:y预测的交叉熵损失;

关系:

实例分析

上图可以看出,改变gap未必会对性能造成影响

信息理论分析

作者发现,\Delta p只和p有关,独立于编码器ZV,ZT。

文中给出了如下定理:

对于一对模态编码器gT(·)和gV(·),如果多模态特征ZT = gT(XT)和ZV = gV(XV)在特征空间中完全对齐,即ZT = ZV,则:

原文: 

 模型

 作者在文中给出了三种有意义的潜在模型结构的构造设计,如下图所示:

1 通过深度特征分离实现的模态内正则化 

2 通过布朗桥进行的模态间正则化

3 通过几何一致性实现的内部间正则化

<think>嗯,用户遇到了一个Java异常,具体是ClassNotFoundException,找不到com.intellij.codeInsight.editorActions.FoldingData这个类。这个问题发生在构造DataFlavor的时候,类型是application/x-java-jvm-local-objectref。用户可能是在使用IntelliJ IDEA或者基于IntelliJ平台开发的工具时遇到了这个问题。我需要先理解这个异常的原因,然后给出解决方案。 首先,ClassNotFoundException意味着JVM在运行时找不到指定的类。这里提到的FoldingData类属于IntelliJ的codeInsight模块,通常用于代码折叠相关的功能。可能的情况包括: 1. **版本不兼容**:用户使用的IDE版本和某个插件或项目依赖的IntelliJ API版本不一致。比如插件是针对较新版本的IDE开发的,而用户使用的是旧版本,导致缺少某些类。 2. **插件冲突或损坏**:安装的插件可能损坏,或者多个插件之间存在冲突,导致无法正确加载所需的类。 3. **缓存问题**:IDE的缓存可能损坏,导致类加载器找不到正确的资源。 4. **项目配置错误**:项目可能错误地配置了IntelliJ的依赖库,比如在Gradle或Maven项目中引用了错误的SDK版本。 接下来需要考虑解决方法。通常处理ClassNotFound的方法包括清理缓存、更新软件、检查插件和验证项目配置。针对IntelliJ的问题,常见的解决步骤是: 1. **清理缓存并重启**:通过File -> Invalidate Caches来清理缓存,这可以解决很多类加载问题。 2. **检查IDE和插件更新**:确保IDE和所有插件都是最新版本,避免版本不兼容。 3. **禁用或重新安装插件**:特别是最近安装的插件,可能有冲突或损坏。 4. **检查项目依赖**:如果是自定义开发插件或项目,确认依赖的IntelliJ SDK版本是否正确。 另外,用户的问题中多次出现相同的异常,可能是在某个操作中反复触发,比如复制粘贴或代码折叠功能的使用。需要进一步询问用户出现异常的具体操作场景,或者直接建议通用解决方法。 最后,需要用中文清晰解释原因和步骤,确保用户能理解并逐步操作解决问题。</think>### 问题原因分析 你遇到的 `ClassNotFoundException: com.intellij.codeInsight.editorActions.FoldingData` 错误,是 **IntelliJ IDEA(或基于其平台的IDE)运行时因类加载失败** 导致的。具体原因可能包括以下情况: --- ### 1. **IDE版本与插件/项目配置不兼容** - **核心问题**:`FoldingData` 是 IntelliJ 平台内部用于处理代码折叠的类。如果: - 你使用的 IDE 版本 **较旧**,而插件或项目依赖了 **新版本** 的 API。 - 你使用的插件 **未适配当前 IDE 版本**,或项目配置错误地引用了 IntelliJ 内部类。 - **触发场景**:尝试复制代码片段、使用代码折叠功能,或插件试图通过剪贴板传递 `FoldingData` 对象时。 --- ### 2. **插件损坏或冲突** - 某些插件(如代码格式化、剪贴板管理插件)可能 **错误地依赖 IntelliJ 内部类**,或插件文件损坏导致加载失败。 --- ### 3. **IDE缓存损坏** - IDE 的缓存文件可能记录了旧版本类的引用路径,与新版本冲突或数据损坏。 --- ### 解决步骤 #### 第一步:清理缓存并重启 1. 点击菜单栏:`File -> Invalidate Caches...` 2. 选择 **Invalidate and Restart**(清理并重启)。 3. 观察问题是否解决。 --- #### 第二步:更新IDE和插件 1. 检查 IDE 是否为最新版本:`Help -> Check for Updates`。 2. 更新所有已安装的插件:`Settings -> Plugins -> Installed`,禁用可疑插件(尤其是最近安装的)。 --- #### 第三步:修复项目配置(开发场景) 如果问题出现在 **自行开发的插件或项目** 中: 1. 检查 `build.gradle` 或 `pom.xml` 中的 IntelliJ 依赖版本: ```gradle // Gradle 示例:确保版本与当前 IDE 一致 intellij { version '2023.1.5' // 修改为你的 IDE 版本 } ``` 2. 避免直接引用 `com.intellij.codeInsight.editorActions` 等内部包(非公开API)。 --- #### 第四步:重置IDE配置(终极方案) 如果上述方法无效: 1. 备份设置:`File -> Manage IDE Settings -> Export Settings`。 2. 重置 IDE:删除配置目录([官方文档](https://www.jetbrains.com/help/idea/tuning-the-ide.html#config-directory) 中查找路径)。 --- ### 附加说明 - **DataFlavor 与剪贴板**:异常中提到的 `DataFlavor` 是 Java 剪贴板数据传输的标识。此错误可能发生在尝试通过剪贴板传递 IDE 内部对象时,但目标环境缺少相关类支持。 - **内部类风险**:`com.intellij` 开头的包多为 IntelliJ 内部实现,第三方插件应使用[官方公开API](https://plugins.jetbrains.com/docs/intellij/api-changes-list.html)。 若问题持续,建议提供以下信息进一步排查: 1. IDE 具体版本(如 IntelliJ 2023.1.5) 2. 复现操作步骤(如复制代码、触发代码折叠) 3. 最近安装的插件列表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值