【极速前进】20240615-20240623:Zipper融合模态、VideoLLM视频理解、WebAgent可以自我改善、Nemotron-4、AnyGPT统一模态
CSDN 2024-07-26 16:33:03 阅读 61
一、Zipper:用于融合模态的多塔解码器结构
论文名称:Zipper: A Multi-Tower Decoder Architecture for Fusing Modalities
论文地址:https://arxiv.org/pdf/2405.18669
1. 简介
将多个不同模态的基础模型合并成优于各个部分的大模型非常有挑战;两个关键挑战:(1) 对齐数据的可用性;(2) 如何在跨领域生成任务中利用单模态表示且不损坏原始能力;本文提出称为Zipper的多塔解码器架构,利用交叉注意力来从独立预训练单模态解码器构成多模态生成模型;在语音和文本融合实验中,本文提出的架构表示非常好;Zipper具有很好的灵活性,冻结相应模态来选择性地保持单模态生成能力;
2. 模型
Zipper架构包含两个自回归解码器,使用gated cross-attention层将其整合在一起。每个模型使用next-token prediction在单个模态上独立训练。上图1展示了Zipper的整体架构,类似于CALM,在解码器主干中每i层插入一个cross-attention。在这些交错层中一个模态的表示与另一个模态交错出现。
在进行cross-attention时,将投影层插入到模态之间。功能上,这平衡了不同解码器之间embedding维度的尺寸。在语义上,其能将一个模态的表示转换为另一个模态,特别是当其中一个或两个解码器参数冻结时。此外,在每个解码器的输入被嵌入后都合并一个非线性投影层,使得更好地调整多模态任务中的单模态表示。
令两个自回归Transformer解码器为A和B。在第一个transformer块前,插入两个可学习MLP投影层:
h
B
0
=
ReLU
(
MLP
B
(
embedding
B
(
input
B
)
)
)
h
A
0
=
ReLU
(
MLP
A
(
embedding
A
(
input
A
)
)
)
\begin{align} h_B^0=\text{ReLU}(\text{MLP}_B(\text{embedding}_B(\text{input}_B))) \\ h_A^0=\text{ReLU}(\text{MLP}_A(\text{embedding}_A(\text{input}_A))) \\ \end{align} \\
hB0=ReLU(MLPB(embeddingB(inputB)))hA0=ReLU(MLPA(embeddingA(inputA)))
这样做的目标是使得单模态表示更好的适应多模态设置。
令
i
A
i_A
iA和
i
B
i_B
iB表示A交叉进入B和B交叉进入A的层间隔。将单模态解码器A在第k层的隐表示记为
m
A
k
∈
R
d
A
m_A^k\in\mathbb{R}^{d_A}
mAk∈RdA,其中
d
A
d_A
dA是transformer A的隐藏维度;类似地,解码器B在第l层的隐表示为
m
B
l
∈
R
d
B
m_B^l\in\mathbb{R}^{d_B}
mBl∈RdB,
d
B
d_B
dB是transformer B的隐藏维度。令
f
cross
(
Q
,
K
,
V
)
f_{\text{cross}}(Q,K,V)
fcross(Q,K,V)是一个gated cross-attention层,
g
A
k
(
x
)
∈
R
d
A
×
d
B
g_A^k(x)\in\mathbb{R}^{d_A\times d_B}
gAk(x)∈RdA×dB和
g
B
l
(
x
)
∈
R
d
B
×
d
A
g_B^l(x)\in\mathbb{R}^{d_B\times d_A}
gBl(x)∈RdB×dA表示A和B的线性前馈层和全连接投影。
解码器A在第k层的新表示
m
~
A
k
\tilde{m}_A^k
m~Ak为
h
B
l
=
ReLU
(
g
B
l
(
m
B
l
)
)
m
~
A
k
=
f
cross
(
Q
=
m
A
k
,
K
=
h
B
l
,
V
=
h
B
l
)
for
k
=
n
⋅
i
A
,
l
=
n
⋅
i
B
,
n
∈
1
,
2
,
3
,
…
\begin{align} h_B^l &= \text{ReLU}(g_B^l(m_B^l)) \\ \tilde{m}_A^k&=f_{\text{cross}}(Q=m_A^k,K=h_B^l,V=h_B^l) \\ \text{for }&k=n\cdot i_A,\quad l=n\cdot i_B,\quad n\in 1,2,3,\dots \\ \end{align} \\
hBlm~Akfor =ReLU(gBl(mBl))=fcross(Q=mAk,K=hBl,V=hBl)k=n⋅iA,l=n⋅iB,n∈1,2,3,…
类似地,解码器B在第l层的新表示
m
~
B
l
\tilde{m}_B^l
m~Bl为
h
A
l
=
ReLU
(
g
A
l
(
m
A
l
)
)
m
~
B
k
=
f
cross
(
Q
=
m
B
k
,
K
=
h
A
l
,
V
=
h
A
l
)
for
k
=
n
⋅
i
A
,
l
=
n
⋅
i
B
,
n
∈
1
,
2
,
3
,
…
\begin{align} h_A^l &= \text{ReLU}(g_A^l(m_A^l)) \\ \tilde{m}_B^k&=f_{\text{cross}}(Q=m_B^k,K=h_A^l,V=h_A^l) \\ \text{for }&k=n\cdot i_A,\quad l=n\cdot i_B,\quad n\in 1,2,3,\dots \\ \end{align} \\
hAlm~Bkfor =ReLU(gAl(mAl))=fcross(Q=mBk,K=hAl,V=hAl)k=n⋅iA,l=n⋅iB,n∈1,2,3,…
3. 实验
虽然Zipper能够扩展至任何数量的模态,本文实验专注在文本和语音模态。具体来说,评估automatic speed-recognition(ASR)和speech-to-text(TTS)。
二、VideoLLM:基于LLM建模视频序列
论文名称:VideoLLM: Modeling Video Sequence with Large Language Models
论文地址:https://arxiv.org/pdf/2305.13292
1. 简介
VideoLLM的目标是通过参数高效迁移学习将LLM应用在视频序列理解人物上。其直接将LLM的序列建模能力带到视频序列理解中,让视觉以语言的形式在自然时间序列中流动。
2. VideoLLM
2.1 模态编码器
视觉。为了编码F帧的视频序列
x
∈
R
F
×
H
×
W
×
C
x\in\mathbb{R}^{F\times H\times W\times C}
x∈RF×H×W×C,使用了一个short-term的视觉编码器
f
v
f_v
fv,其中H、W和C是高、宽和通道数。令
F
s
F_s
Fs是short-term clip的帧数,所有的帧被划分为
N
v
=
F
F
s
N_v=\frac{F}{F_s}
Nv=FsF个space-time视觉单元,每个单元被
f
v
f_v
fv独立编码。因此,
f
v
f_v
fv会输出一个space-time视觉单元的序列
x
v
=
f
v
(
x
)
∈
R
N
v
×
F
s
s
t
×
H
s
h
×
H
s
w
×
d
=
{
x
v
1
,
x
v
2
,
…
,
x
v
N
v
}
x_v=f_v(x)\in\mathbb{R}^{N_v\times\frac{F_s}{s_t}\times\frac{H}{s_h}\times\frac{H}{s_w}\times d}=\{x_v^1,x_v^2,\dots,x_v^{N_v}\}
xv=fv(x)∈RNv×stFs×shH×swH×d={ xv1,xv2,…,xvNv},其中
d
d
d是表示维度,
s
t
,
s
h
,
s
w
s_t,s_h,s_w
st,sh,sw是
f
v
f_v
fv中space-time维度的stride。
文本。有两种方法来处理文本输入
y
y
y。第一种方法是使用tokenizer将
y
y
y转换为
y
t
∈
R
N
t
×
d
y_t\in\mathbb{R}^{N_t\times d}
yt∈RNt×d。另一种方法是使用语言编码器
f
t
f_t
ft将
y
t
y_t
yt进一步处理为文本特征
y
e
y_e
ye。
2.2 语言翻译器
语言模型不能直接感知视觉。因此,需要将视觉语义翻译为语言模型可以解释的语言表示。类似于Perceiver、Flamingo和BLIP-2,采用附加的子网络来转换语义空间。本文中为了高效,采用冻结视觉编码器和转换视觉特征至语言空间中。具体来说,给定
x
v
∈
R
N
v
×
F
s
s
t
×
H
s
h
×
H
s
w
×
d
v
x_v\in \mathbb{R}^{N_v\times\frac{F_s}{s_t}\times\frac{H}{s_h}\times\frac{H}{s_w}\times d_v}
xv∈RNv×stFs×shH×swH×dv,先将
x
v
x_v
xv的每个视觉单元转换为时序token。因此,将会获得视频序列表示
x
t
∈
R
N
v
×
d
v
x_t\in\mathbb{R}^{N_v\times d_v}
xt∈RNv×dv。使用线性投影
ϕ
\phi
ϕ来学习视觉到语言的翻译,从而得到翻译后的语义
s
v
=
ϕ
(
x
t
)
∈
R
N
v
×
d
s_v=\phi(x_t)\in\mathbb{R}^{N_v\times d}
sv=ϕ(xt)∈RNv×d。
2.3 Decoder-only推理器
VideoLLM的目标是完成广泛的视觉序列理解任务。然而,这些任务具有不同的约束,包括各自的输入和输出都是实现目标的潜在障碍。为了更好理解这些任务的多面性,将其分为4类。本小节主要讨论如何将LLM适配不同的视频理解任务。
使用decoder-only架构的LLM,表示为
M
\mathcal{M}
M。
在线推理。在线推理主要是实时预测近期数据单元的类别或者标题,本文中的近期数据单元就是一个新的short-term视频切片。给定一个播放的视频流和工作记忆
m
=
{
s
v
−
t
+
1
,
s
v
−
t
+
2
,
…
,
s
v
i
,
…
,
s
v
0
}
m=\{s_v^{-t+1},s_v^{-t+2},\dots,s_v^i,\dots,s_v^0\}
m={ sv−t+1,sv−t+2,…,svi,…,sv0},
t
t
t是记忆中可见的token数量,
s
v
0
s_v^0
sv0是最近翻译的token。在训练阶段,
m
m
m被送入至模型
M
\mathcal{M}
M来构造一个序列
c
=
{
c
−
t
+
1
,
c
−
t
+
2
,
…
,
c
i
,
…
,
c
0
}
c=\{c^{-t+1},c^{-t+2},\dots,c^i,\dots,c^0\}
c={ c−t+1,c−t+2,…,ci,…,c0}。使用两个线性层来预测每个token
s
v
i
s_v^i
svi的类别以及下一个token
s
v
i
+
1
s_v^{i+1}
svi+1。
未来预测。给定已见token序列
m
=
{
s
v
−
t
+
1
,
s
v
−
t
+
2
,
…
,
s
v
i
,
…
,
s
v
0
}
m=\{s_v^{-t+1},s_v^{-t+2},\dots,s_v^i,\dots,s_v^0\}
m={ sv−t+1,sv−t+2,…,svi,…,sv0}作为工作记忆,模型需要预测接下来的
N
f
N_f
Nf个token。在这种情况下,利用模型的causal结构,基于每个见过的token来学习未来表示。对于预测不同的
N
f
N_f
Nf个未来状态,使用
N
f
N_f
Nf个normalization层来分离
N
f
N_f
Nf个预测表示
a
=
{
a
1
,
a
2
,
…
,
a
i
,
…
,
a
N
f
}
a=\{a^1,a^2,\dots,a^i,\dots,a^{N_f}\}
a={ a1,a2,…,ai,…,aNf}。
记忆检索。记忆检索通常是检测一个封闭类别集中的事件片段,其通常是离线任务。然而,对于在线系统,该任务可以评估模型对片段级别转换和演化的理解。给定一个已见token序列
m
=
{
s
v
−
t
+
1
,
s
v
−
t
+
2
,
…
,
s
v
i
,
…
,
s
v
0
}
m=\{s_v^{-t+1},s_v^{-t+2},\dots,s_v^i,\dots,s_v^0\}
m={ sv−t+1,sv−t+2,…,svi,…,sv0}作为工作记忆,为了获得整个视频的上下文,使用最后的token
s
v
0
s_v^0
sv0来预测记忆中的片段。另一个替代方案是在
m
m
m的末尾拼接一个可学习token
s
v
q
s_v^q
svq或者
<EOT>
\text{<EOT>}
<EOT>,来学习记忆摘要。为了预测至多
N
m
N_m
Nm个可能的片段,类似于未来预测,使用
N
m
N_m
Nm个normalization层来分离
N
m
N_m
Nm个片段级别记忆表示
m
s
=
{
m
s
1
,
m
s
2
,
…
,
m
s
i
,
…
,
m
s
N
m
}
m_s=\{m_s^1,m_s^2,\dots,m_s^i,\dots,m_s^{N_m}\}
ms={ ms1,ms2,…,msi,…,msNm}。
稠密预测。稠密预测类比于离线推理任务,其目标是预测每个token的类别或者基于文本来确定高亮token。在本文中,将稠密预测作为在线任务,其可以作为在线动作分割或者高亮检测的简化实现。使用decoder-only LLM作为默认视频推理器,像先前的任务一样处理在线预测和文本条件。
三、LLM在Web Agent任务上可以自我改善
论文名称:Large Language Models Can Self-Improve At Web Agent Tasks
论文地址:https://arxiv.org/pdf/2405.20309
1. 简介
训练LLM使用网络浏览器的主要挑战是缺乏训练数据;LLM展示了zero-shot或者few-shot方式适用新环境,近期研究表明LLM能够通过self-improvement将能力提升至超过基础模型;本文探索了LLM能够通过self-improve改善在复杂环境中的任务性能;WebArena基准要求Agent能够自主在网页上进行导航并执行操作。本文则探索三种不同合成数据方式的微调,并通过self-improvement实现了在WebArena基准上31%准确率的提高;此外,还提供了新的评估指标来评估Agent的性能、鲁棒性、能力和轨迹质量;
2. 合成数据收集和生成
Self-improvement技术通常使用自己生成的数据来创建合成数据。自生成样本通常经过过滤、后编辑或者无监督技术进行排序,从而引入学习和改进信号。对于多步agent任务,环境本身能够额外为LLM agent提供检测失败信号,并提供用于学习的额外信号。
基于WebArena基准,定义并实验了领域内合成训练样本和领域外合成训练样本,然后在3个不同合成数据上进行微调:Mixture A(领域内合成数据)、Mixture B(领域内和领域外合成数据)、Mixture C(领域外合成数据)。
领域内合成数据。对于WebArena中所有任务,使用base模型来收集轨迹的初始集合。过滤出模型自检失败和环境监测失败的轨迹。剩余的轨迹集合都是一些似是而非的轨迹,模型有可能完成任务,也有可能完不成。由于低质量轨迹已经通过自检过滤掉了,那么假设余下的都是高质量轨迹,可以作为高质量领域内轨迹数据进行微调。
领域外合成数据。评估基础模型能否生成完全新颖的任务、目标、网页和解决轨迹来作为训练样本。使用过滤后的领域内合成数据作为few-shot样本来提示模型生成全新的任务和潜在解决轨迹。为了确保模型生成的样本有足够多样性并提高泛化性,提示模型生成与现有任务和目标不同的领域外合成数据。
3. 实验
Self-Improvement微调Agent
使用3个合成的数据集微调基础agent模型,包括:(1)
D
A
=
D
IN-DOMAIN
\mathcal{D}_A=\mathcal{D}_{\text{IN-DOMAIN}}
DA=DIN-DOMAIN;(2)
D
B
=
D
IN-DOMAIN
∪
D
OUT-DOMAIN
\mathcal{D}_B=\mathcal{D}_{\text{IN-DOMAIN}}\cup \mathcal{D}_{\text{OUT-DOMAIN}}
DB=DIN-DOMAIN∪DOUT-DOMAIN; (3)
D
C
=
D
OUT-DOMAIN
\mathcal{D}_C=\mathcal{D}_{\text{OUT-DOMAIN}}
DC=DOUT-DOMAIN。
迭代Self-Improvement微调Agent
此外,还进一步评估了迭代Self-Improvement的效果。
整体结果见下表
结论:(1) 在web-agent任务上可以自我改善;(2) 模型通过self-improved能够获得新能力,但也会失去一些能力。总的来说,得到的多于失去的;(3) 模型无法在web agent任务上迭代自我改善。在合成数据上进行连续多轮自我改善的收益递减。二轮self-imporved模型优于基础模型,但差于一轮self-improved。
四、Nemotron-4 340B技术报告
论文名称:Nemotron-4 340B Technical Report
论文地址:https://d1qx31qr3h6wln.cloudfront.net/publications/Nemotron_4_340B_8T_0.pdf
NVIDIA发布了Nemotron-4 340B系列模型,包括Nemotron-4-340B-Base、Nemotron-4-340B-Instruct、Nemotron-4-340B-Reward。
1. 预训练
数据。包含三种类型数据:英文文本、多语言文本和代码。多语言文本包含53种语言,代码包含43种编程语言。总共训练了9T的tokens,前8T用于正式预训练而最后1T用于continued pretraining阶段。
架构。标准的decoder-only Transformer架构。此外,没有bias且dropout为0,独立的输入和输出embedding。同样使用GQA。
训练细节。(1) 使用768个H100节点,张量并行为8,流水并行为12,随着batch size的增加,数据并行从16增加至64。(2) 在模型训练末期转换数据分布和学习率调度方案能力改善模型。因此,在8T tokens预训练后,在1T的额外tokens上进行继续预训练。
base模型评估。(1) 常见聚合基准:MMLU和BBH;(2) 常识推理:ARC challenge、Winogrande和Hellaswag;(3) 代码:HumanEval。
2. 对齐
2.1 奖励建模
收集了一个包含10k人类偏好数据,称为HelpSteer2。不再使用pairwise ranking的方式建立奖励模型,而是使用多属性回归构建奖励模型。多属性回归能够更好的预测细粒度奖励,在相似的应答中捕获细微的差别。基于Nemotron-4-340B-Base来构建回归奖励模型,将原始的softmax层替换为一个奖励头。该奖励头将hidden states线性映射为对应HelpSteer属性的5维向量(Helpfulness, Correctness, Coherence, Complexity, Verbosity)。推理时,对这些属性进行加权求和得到总奖励值。
2.2 对齐数据
Prompt准备。生成合成prompt是生成合成数据的第一步,其用来确保prompt分布能够覆盖多个场景。prompt多样性包括任务多样性、主题多样性和指令多样性。采用类似UltraChat数据集的方法。使用Mixtral-8x7B-Instruct-v0.1来为问答、写作、数学、代码生成合成prompt。对于每个任务,先生成包含多样性的主题或者关键词。
(1) 合成单轮prompts。为了能够收集多样化主题,先让生成器输出一个多样性的macro-topics。然后为每一个合成macro topics生成相关的subtopics。合成macro topic、合成subtopics加上人工收集的topics,共计3k的topics。为了合成QA prompt,要求生成器未给定的topic生成相关问题。由于初始生成的问题太短,要求对问题进行细化。对于其他类型任务也使用了类似方法进行生成。
(2) 合成指令遵循prompt。指令遵循对于对齐模型至关重要。为了改善模型的指令遵循能力,需要生成指令遵循prompts,例如"写一篇关于机器学习的文章。你的回答应该包含3个片段。"。具体来说,选择一个合成pormpt的随机集合。对于每个合成prompt,从Zhou et al.的"可验证"指令模板中创建合成指令。使用人工定义的模板拼接prompt和指令。
合成对话数据。要求instruct模型为指定的prompt生成应答来初始化合成对话数据。为了进一步提高多轮对话能力,设计每轮对话包含3个回合。模型反复扮演人工智能助理和用户的角色来完成多轮对话。为了在用户的回合中引出期望的行为,发现需要为模型提供明确提示,以定义不同用户的个性。此外,利用Nemotron-4-340B-Reward来评估对话的质量,为每个样本分配一个分数并过滤掉低于阈值的样本。
合成偏好数据。虽然使用10K的人工标注偏好数据HelpSteer2来训练Nemotron-4-340B-Reward,但仍然需要更多样的偏好数据。
(1) 响应生成。偏好数据包含合成单轮prompt、指令遵循prompt、两轮prompt、ShareGPT prompt、LMSYS prompt、来自GSM8K和MATH的prompt。对于每个prompt,使用多个随机中间prompt来生成response。利用多个模型来生成响应能够确保偏好数据的多样性。
(2) Ground-Truth-as-a-Judge。为每个prompt生成了多个responses,需要判断偏好的排序。一些任务可以使用ground-truth labels或者verifiers来判断response的正确性。
(3) LLM-as-Judge和Reward-Model-as-Judge。大多数pormpt没有目标答案。那么就测试了LLM-as-Judge和Reward-Model-as-Judge。LLM-as-Judge,提供prompt和两个response来让LLM进行判断和比较。为了避免位置的影响,交换response的位置来让LLM评估两次。早期使用LLM-as-Judge来评估偏好数据,后期则使用Reward-Model-as-Judge来进行评估。发现Reward-Model-as-Judge比LLM-as-Judge有更高的准确率。
迭代weak-to-strong对齐。先使用初始对齐模型来生成对话和偏好数据。然后使用该数据进行监督微调和偏好微调,得到一个更好的对齐模型。通过这样的得到能够逐步得到一个更好的模型。
额外数据源。合并了一些补充数据集来改善模型特定能力。
(1) 主题遵循:主题一致性和细粒度指令遵循对于instruct模型非常重要。整合了CantTalkAboutThis的训练集,其包含广泛主题的合成数据,并有意穿插了转移注意力的对话。该数据集能够改善模型在交互过程中专注于预期主题的能力。
(2) 无法处理的任务。某些任务模型可能无法独立完成,而需要特定的能力,例如网络访问或者实时知识。为了缓解幻觉,利用few-shot方法来要求模型生成多样性的问题。然后,要求LLM拒绝回答这些问题,收集对应的应答并将其与问题配对。这些数据能够使模型更好的处理哪些无法处理的任务。
(3) STEM数据集。Open-Platypus已经表明其可以改善STEM和逻辑知识。
(4) 基于文档的推理和问答。利用FinQA数据集改善数值推理能力,使用Liu et al标注的数据来提高基于上下文的问答能力,wikitablequestions数据集来增强模型对半结构化数据的理解。
2.3 对齐算法
监督微调。通常,SFT是个单阶段的任务,所有任务的数据都混合在一起进行训练。然而,本文实验发现同时学习多种行为可能有冲突。特别是在代码任务中,调整权重也无法保证模型对齐所有的代码任务。因此,涉及了两阶段SFT方法,发现可以在下游任务上得到很好的结果。两阶段包括:Code SFT和通用SFT。
偏好微调。偏好微调涉及到模型的迭代改进,使用了DPO和本文新提出了Reward-aware偏好优化。(1) 由于DPO可能导致正样本的概率也降低,因此在DPO中加入了SFT的loss。此外,使用Nemotron-4-340B-Reward来挑选一些高质量的样本,从而保证DPO提高的正样本概率是高质量的。(2) 标准DPO并没有很好的考虑正负样本间的距离,仅是直接最大化两者距离。但是,有些正负样本距离会比较小,而另一些应该比较大。因此,提出了Reward-aware Preference Optimization(RPO)。新loss为
L
r
p
o
(
x
,
y
c
,
y
l
)
=
D
[
β
log
π
(
y
c
∣
x
)
π
r
e
f
(
y
c
∣
x
)
−
β
log
π
(
y
l
∣
x
)
π
r
e
f
(
y
l
∣
x
)
∥
η
(
r
⋆
(
x
,
y
c
)
−
r
⋆
(
x
,
y
l
)
)
]
\mathcal{L}_{rpo}(x,y_c,y_l)=\mathbb{D}\Big[\beta\log\frac{\pi(y_c|x)}{\pi_{ref}(y_c|x)}-\beta\log\frac{\pi(y_l|x)}{\pi_{ref}(y_l|x)}\parallel\eta(r^{\star}(x,y_c)-r^{\star}(x,y_l)) \Big] \\
Lrpo(x,yc,yl)=D[βlogπref(yc∣x)π(yc∣x)−βlogπref(yl∣x)π(yl∣x)∥η(r⋆(x,yc)−r⋆(x,yl))]
其中
π
\pi
π是策略网络;
π
r
e
f
\pi_{ref}
πref是reference策略;
(
x
,
y
c
,
y
l
)
(x,y_c,y_l)
(x,yc,yl)是对应的prompt和正负样本。
r
⋆
(
x
,
y
c
)
r^{\star}(x,y_c)
r⋆(x,yc)和
r
⋆
(
x
,
y
l
)
r^{\star}(x,y_l)
r⋆(x,yl)是正负样本的奖励值。
D
[
a
∥
b
]
:
=
σ
(
b
)
log
σ
(
b
)
σ
(
a
)
+
(
1
−
σ
(
b
)
)
log
1
−
σ
(
b
)
1
−
σ
(
a
)
\mathbb{D}[a\parallel b]:=\sigma(b)\log\frac{\sigma(b)}{\sigma(a)}+(1-\sigma(b))\log\frac{1-\sigma(b)}{1-\sigma(a)}
D[a∥b]:=σ(b)logσ(a)σ(b)+(1−σ(b))log1−σ(a)1−σ(b)是距离度量。相比于DPO,RPO能够学习到近似的奖励差距,防止过拟合。使用DPO训练的checkpoint作为初始化,然后进一步使用RPO进行训练。
五、AnyGPT:统一多模态LLM
论文名称:AnyGPT: Unified Multimodal LLM with Discrete Sequence Modeling
论文地址:https://arxiv.org/pdf/2402.12226
AnyGPT利用离散表示来统一各种模态,从而实现了一种any-to-any的多模态语言模型。AnyGPT不需要对当前的LLM架构或者训练范式进行任何修改就能稳定训练。其仅需要数据级别的预处理,就能无缝集成新模态至LLM中。
1. AnyGPT
如上图1所示,AnyGPT有三个组件构成:(1) 多模态tokenizer;(2) 多模态语言模型作为backbone;(3) 多模态de-tokenizer。
1.1 Tokenization
图像Tokenizer。利用SEED tokenizer实现图像的tokenization。SEED tokenizer由几个组件构成,包括ViT encoder、Causal Q-Former、VQ Codebook、MLP和一个UNet decoder构成。SEEK将
224
×
224
224\times 224
224×224 RGB图像作为输入,ViT编码器将图像编码为
16
×
16
16\times 16
16×16的patches,Causal Q-Former将每个patch特征转换为32个causal embeddings。大小为8192的codebook将这些embedding离散化为量化码序列。MLP将视觉码解码为生成embedding,其能够与预训练unCLIP Stable Diffusion的隐空间对齐。最终,UNet用来将生成的embedding转换为原始图像。
语音Tokenizer。语音tokenizer使用SpeechTokenizer,采用residual vector quantization(RVQ)作为encoder-decoder架构。SpeechTokenizer使用8个层次量化器将单通道音频序列转换为离散的矩阵。第一个量化层捕获语义内容,2到8层的量化器编码paralinguistic细节。一个10秒的音频被转换为
500
×
8
500\times 8
500×8矩阵,分为语义和声学tokens。采用在Commonvoice和Librispeech数据集上训练的SpeechTokenizer变体。
在AnyGPT中,LLM用于建模语义token,而声音克隆模型补充余下的paralinguistic信息。结果就是,LLM的声音词表大小就等于codebook大小,即1024。
音乐Tokenizer。虽然语音和音乐共享相似的数据格式,但是其实质内容的差异导致我们将其视为独立的模态,为其配备了单独的tokenizer。对于音乐,使用Encodec作为音乐tokenizer,其是一个具有隐空间量化的卷积自编码器。我们使用一个在20k音乐轨迹上预训练的现成Encodec变体。将5秒的音乐编码为250个潜在帧,最终生成
250
×
4
250\times 4
250×4的编码矩阵。
1.2 语言模型Backbone
扩充词表。为了将多模态离散表示合并至预训练LLM,使用新模态相关的token扩展词表,并且扩展对应的embedding和预测层,新合并的参数进行随机初始化。所有模态的token被合并来形成新词表,每个模态躲在语言模型中进行训练,以便在共享表示空间中对齐。增强词表的尺寸表示为V,其是所有模态词表尺寸之和,即
V
=
∑
i
=
1
n
V
i
V=\sum_{i=1}^n V_i
V=∑i=1nVi,其中
V
i
V_i
Vi表示第
i
i
i个模态的词表大小。
统一多模态语言模型。在具有了模态相关的tokenizer后,就能将多模态数据压缩为离散token序列,并使用next token prediction来训练语言模型。这自然就会使LLM将以自回归的方式统一感知、理解、推理和生成。
1.3 多模态生成
生成高质量的多模态数据,包括高分辨率图像和高保真度音频非常具有挑战。这些数据需要高大量bits来准确表示,这需要语言模型能够高效处理长序列。
为了解决这个问题,采用了一种两阶段生成框架,包括语义信息建模和感知信息建模。首先,语言模型的任务是生成在语义层面融合核对齐的内容。然后,非自回归模型在感知层面将多模态语义tokens转换为高保真的多模态内容,在性能和效率之间取得平衡。
2. 多模态数据
2.1 预训练数据
为了能够使得模型能够基于任意模态来生成任意模型,那么有跨模态对齐数据至关重要。但是,这样的数据非常稀缺。为了解决这个挑战,构建了以文本为中心的双模态对齐数据集。通过将不同模态与语言模型中的文本模态对齐,从而实现所有模态的对齐。
不同模态中信息的表示形式和类型变化非常大,为了促进不同模态之间数据量的标准比较,采用基于token计数的量化方法。
图像和文本。利用图文对数据LAION-2B、LAION-COC、LAION-Aesthetics和JouneyDB。通过过滤后,得到300M的样本对。此外,还合并了图像文本交错数据来使得模型适应交错的模式。这里使用Multimodal-C4数据集。具体来说,使用MMC4-core split。
语义和文本。收集了一些英文ASR数据集,包括Gigaspeech、Common Voice和Multilingual LibriSpeech。
音乐和文本。从互联网上抓取超过100万的音乐视频,核心步骤就是使用Spotify API将这些视频的标题与相应的歌曲进行匹配。随后,为每个音乐音频收集一组全面的元数据,包括视频标题、描述、关键词、歌词等。这些信息被格式化为JSON,然后送入GPT-4进行处理。GPT-4负责从元数据中抽取有意义的信息,并将其简洁地总结成连贯的矩阵。
2.2 多模态交错指令数据构建
有效的人机交互应该允许以各种模态交错的方式来交互信息。然而,随着对话中模态数量的增加,会使得数据收集过程太过复杂。本文之前,应该没有涉及超过两个模态的大规模指令数据集。因此,基于生成模型构造了一个包含108k多轮对话样本的数据集。通过精心设计,每个合成指令都以交错模式集成了多种模态。具体来说,数据合成过程包含两个阶段。
合并了多模态元素的基于文本的对话生成。该阶段,利用GPT-4生成一系列基于文本的对话。这些对话以文本描述的形式合并了非文本模态。为了确保大规模的高质量数据,将此阶段划分为三个步骤。(1) 头脑风暴100个能够覆盖广泛场景的元主题,然后利用GPT-4将这些元主题扩展至20000个特定主题。(2) 要求LLM基于这些主题生成特定的对话场景。生成时使用一些尽可能多包含模态的示例来辅助模型生成。 (3) 利用GPT-4生成特定场景的多轮对话。在这些对话中,图像和音乐等多模态元素通过详细的文本表示来描述。
文本到多模态的转换。该阶段,利用先进的生成模型来将文本描述转换为多模态元素。使用DALL-E3进行图像生成,MusicGen用于音乐创作,Microsoft Azure的text-to-speech API将对用户指令和模型应答进行语音合成。经过过滤后,获得了108k高质量的多模态对话。
要求LLM基于这些主题生成特定的对话场景。生成时使用一些尽可能多包含模态的示例来辅助模型生成。 (3) 利用GPT-4生成特定场景的多轮对话。在这些对话中,图像和音乐等多模态元素通过详细的文本表示来描述。
文本到多模态的转换。该阶段,利用先进的生成模型来将文本描述转换为多模态元素。使用DALL-E3进行图像生成,MusicGen用于音乐创作,Microsoft Azure的text-to-speech API将对用户指令和模型应答进行语音合成。经过过滤后,获得了108k高质量的多模态对话。
上一篇: 使用 useRequestURL 组合函数访问请求URL
下一篇: 高级前端面试必须掌握的八股文!!!
本文标签
【极速前进】20240615-20240623:Zipper融合模态、VideoLLM视频理解、WebAgent可以自我改善、Nemotron-4、AnyGPT统一模态
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。