多模态大语言模型(MLLM)-Deepseek Janus

论文链接:https://arxiv.org/abs/2410.13848

代码链接:https://github.com/deepseek-ai/Janus

本次解读Janus: Decoupling Visual Encoding for Unified Multimodal Understanding and Generation

前言

Deepseek出品,必属精品。

创新点

  • 传统方法在统一视觉理解、视觉生成任务上,做的不好。视觉理解侧重高层语义(例如类别、属性等),而视觉生成侧重低层语义(例如局部细节等),统一模型难以同时关注高层和低层语义信息。
  • Janus解耦视觉编码方式,为视觉理解、视觉生成选择对应的视觉编码器,避免了高层-低层语义信息的冲突。
  • Janus灵活可扩展,解耦的思想不仅可用于视觉理解、视觉生成,也可以扩展到点云、脑电信号、甚至是声音数据。
  • Janus用小体量模型,在视觉理解、视觉生成任务上,均取得了媲美中等体量模型的效果。

具体细节

模型结构

整体模型结构见上图。

  • 针对文本理解任务:
    输入端 :利用LLM内置的tokenizer将文本转化为ID,进而获取文本embedding,送到LLM(图中Auto-Regressive Transformer)中
    输出端:利用LLM内置的prediction head预测(上图Text De-Tokenizer)
  • 针对多模态理解任务
    输入端 :利用SigLIP encoder(上图中Und. Encoder)提取高层语义特征,展平成1维 embedding。利用adaptor将1维序列转换为LLM可理解的embedding,送到LLM(图中Auto-Regressive Transformer)中
    输出端:利用LLM内置的prediction head预测(上图Text De-Tokenizer)
  • 针对视觉生成任务
    输入端 :利用VQ tokenizer(上图中Gen. Encoder)将图像转换为离散ID,展平成1维 embedding。利用adaptor将1维序列转换为LLM可理解的embedding,送到LLM(图中Auto-Regressive Transformer)中
    输出端:利用一个随机初始化的prediction head实现图片生成(上图Image Decoder)

训练策略

整体分为三个阶段

阶段一:训练Adaptors和Image Head

训练数据

125w ShareGPT4V数据用于多模态理解+120w ImageNet-1K数据用于视觉生成。ShareGPT4V数据格式为<image><text>,ImageNet-1K数据格式为<category_name><image>

训练策略

阶段一的目标是实现视觉和文本在embedding层面互相理解(实现LLM理解图像,实现image head能生成图像)。

仅训练Adaptors和Image Head,其中Image Head可以理解为Image decoder

训练损失

文本、图像均建模成sequence的形式,利用next token prediction的loss进行训练(已知前i个token,预测第i个token)

阶段二:统一预训练

训练数据

来源较多

  • Text-only data(仅文本数据):DeepSeek-LLM用的文本语料
  • Interleaved image-text data(图像-文本 交错数据):WikiHow和WIT数据
  • Image caption data(图像描述数据):从多个来源(https://huggingface.co/datasets/dclure/laion-aesthetics-12m-umaphttps://image-net.org/static_files/papers/imagenet_cvpr09.pdf等)里收集图像描述数据。所有图像描述数据重新建模成QA对的形式,例如Describe the image in detail.
  • Table and chart data.(图表数据):DeepSeek-VL用的图表数据
  • Visual generation data(视觉生成数据):两部分,一部分来自多个数据集(https://huggingface.co/datasets/dclure/laion-aesthetics-12m-umaphttps://segment-anything.com/),另一部分是1百万内部数据。所有视觉生成数据格式整理成<caption><image>的形式
    一些训练的trick:
  • 图像描述数据里,有25%的概率,仅利用描述里的第一个句子,促使模型生成短描述
  • 前120k迭代中,使用ImageNet-1k进行简单的视觉生成训练,以帮助模型掌握基本的像素依赖关系;后60k迭代中,使用其他视觉生成数据集增强模型在开放领域的视觉生成能力。
训练策略

阶段二的目标是实现自通用的多模态理解和视觉生成能力。

所有参数均训练。

首先通过使用ImageNet-1k进行简单的视觉生成训练,以帮助模型掌握基本的像素依赖关系。随后,使用其他的视觉生成数据集增强模型在开放领域的视觉生成能力。

训练损失

同上

阶段三:有监督微调

训练数据

存在三种训练任务,不同任务需要的数据不一样

  • 文本理解任务:
  • 多模态理解任务:
  • 视觉生成任务:
    整体数据格式整理成User: \n Assistant: 的形式
训练策略

阶段三的目标是提升模型的指令遵循和图文对话的能力。

所有参数均训练。

训练损失

同上

推理

Janus采用next-token prediction的方式进行推理。

  • 对于文本理解/多模态理解任务,从预测分布里,采用传统的采样策略(n-gram、beam-search等)方式,实现文本token输出
  • 对于图像生成任务,采用classifier-free guidance (CFG)方式输出token(类似于https://arxiv.org/abs/2301.00704https://arxiv.org/abs/2203.13131),下一个token的预测概率是

    其中, l g l_g lg是conditional logit, l u l_u lu是unconditional logit, 𝑠 𝑠 s是scale,默认为5。

模型扩展

这一部分像是论文的展望。。。

多模态理解扩展

可以将模型架构图中的Und. Encoder替换成任意的视觉编码器,例如EVA-CLIP、Intern ViT等,也能采用一些动态高分辨率技术来支持大图输入。

通过替换Und. Encoder,Janus能够扩展到多种多模态理解任务上。

视觉生成扩展

为了在编码后保留更多图像细节,可以选择更细粒度的编码器,例如 MoVQGan

可以采用专门为视觉生成设计的损失函数,例如扩散损失

在视觉生成过程中,可以结合使用 AR(因果注意力)和并行(双向注意力)方法,以减少视觉生成过程中累积的误差 。

更多模态扩展

借助解耦的思想,通过两个图像编码器分别建模高层、低层语义信息,实现视觉理解、视觉生成任务。该思想也可以扩展到点云、脑电信号、甚至是声音数据。

增加点云、脑电信号、甚至是声音数据对应的编码器即可

实验

实验细节

  • 使用 DeepSeek-LLM(1.3B)作为基础语言模型,其最大支持的序列长度为 4096。
  • 对于理解任务中使用的视觉编码器,选择了 SigLIP-Large-Patch16-384。
  • 生成编码器具有大小为 16,384 的码本,并将图像下采样 16 倍。
  • 视觉理解和视觉生成的adaptor都是两层的多层感知机(MLP)。
  • 在训练过程中使用序列打包来提高训练效率,类似于laion的数据组织形式
  • 在单个训练步骤中根据指定的比例混合所有数据类型,具体比例未知,行业机密。。。
  • 使用Deepseek自研的HAI-LLM进行训练和评估,AI Infra太重要了
  • 整个训练过程在一个由 16 个节点组成的集群上进行,每个节点配备 8 个 Nvidia A100(40GB)GPU,耗时 7 天。16*8块A100-40G 单次训练7天,仅硬件成本约66000元(按照https://ai.cnix.cn/market/compute租赁价格,8xA100-40G 单月16500,16500x16/4=66000)
  • Money is all your need

和sota的比较

和多模态理解sota模型比较,Janus以小体量,实现了媲美中体量模型的效果

和多模态生成sota模型比较,Janus以小体量,实现了媲美中体量模型的效果

消融实验

消融实验最有意思了

A:用VQ Tokenizer(低层语义信息编码器)实现视觉理解、视觉生成

B:用SE Tokenizer(高层语义信息编码器)实现视觉理解、视觉生成

C:用SE Tokenizer(高层语义信息编码器)实现视觉理解

D:用SigLIP(高层语义信息编码器)实现视觉理解;用VQ Tokenizer(低层语义信息编码器)实现视觉生成

E:用SigLIP(高层语义信息编码器)实现视觉理解

F:用VQ Tokenizer(低层语义信息编码器)实现视觉生成

解耦视觉编码器效果

A vs B:在视觉理解任务上,B效果显著优于A,说明SE Tokenizer(高层语义信息编码器)更适合视觉理解;在视觉生成任务上,A效果显著优于B,说明VQ Tokenizer(低层语义信息编码器)更适合视觉生成

B vs C:B用SE Tokenizer(高层语义信息编码器)实现两个任务,在理解任务上,效果不及C,说明单编码器在实现两个任务时,存在性能牺牲。

统一视觉理解和视觉生成效果

D vs E:在视觉理解任务上,效果基本持平

D vs F:在视觉生成任务上,效果差距不大

证明解耦视觉编码器能够有效平衡两个任务

可视化效果

视觉理解:

视觉生成:

笔者会持续关注多模态大语言模型(MLLM),对底层原理、经典论文、开源代码都会进行详细解读,欢迎交流学习。

相关推荐
sp_fyf_20241 小时前
【大语言模型】ACL2024论文-19 SportsMetrics: 融合文本和数值数据以理解大型语言模型中的信息融合
人工智能·深度学习·神经网络·机器学习·语言模型·自然语言处理
CoderIsArt1 小时前
基于 BP 神经网络整定的 PID 控制
人工智能·深度学习·神经网络
开源社1 小时前
一场开源视角的AI会议即将在南京举办
人工智能·开源
FreeIPCC1 小时前
谈一下开源生态对 AI人工智能大模型的促进作用
大数据·人工智能·机器人·开源
机器之心1 小时前
全球十亿级轨迹点驱动,首个轨迹基础大模型来了
人工智能·后端
z千鑫1 小时前
【人工智能】PyTorch、TensorFlow 和 Keras 全面解析与对比:深度学习框架的终极指南
人工智能·pytorch·深度学习·aigc·tensorflow·keras·codemoss
EterNity_TiMe_1 小时前
【论文复现】神经网络的公式推导与代码实现
人工智能·python·深度学习·神经网络·数据分析·特征分析
机智的小神仙儿2 小时前
Query Processing——搜索与推荐系统的核心基础
人工智能·推荐算法
AI_小站2 小时前
RAG 示例:使用 langchain、Redis、llama.cpp 构建一个 kubernetes 知识库问答
人工智能·程序人生·langchain·kubernetes·llama·知识库·rag
Doker 多克2 小时前
Spring AI 框架使用的核心概念
人工智能·spring·chatgpt