前言
熟悉笔者的读者想必都知道,最近我在恶补一些经典的LLM工作,之前也精读过MetaLM这个工作但是没有及时笔记,现在已经有些遗忘了,因此在过年期间复习了下,在此笔记希望对诸位有所帮助。如有谬误请见谅并联系指出,本文遵守CC 4.0 BY-SA版权协议,转载请联系作者并注明出处,谢谢。
∇ \nabla ∇ 联系方式
-
e-mail: FesianXu@gmail.com
-
github: https://github.com/FesianXu
-
知乎专栏: 计算机视觉/计算机图形理论与应用(https://www.zhihu.com/column/c_1265262560611299328)
我们都知道BERT和GPT这两种语言模型是基于不同的训练范式进行的,BERT是基于掩膜语言模型(Masked Language Modeling, MLM)训练的,而GPT则是基于自回归(auto regression)的方式进行训练。如Fig 1所示,我们通常可以将前者称之为双向序列建模,由于在训练过程中,每个token能与上下文的token同时进行交互,因此建模token之间隐藏关联的能力更强,通常在NLU(Neural Language Understanding)任务上有着更好的表现,但是其难以在NLG(Neural Language Generation)任务上有着更好的表现。而基于自回归的GPT模型,我们称之为单向序列建模,由于限制只让当前token和上文token进行交互,而对下文进行预测,因而更适合生成式任务,在NLG任务上表现更加突出。由于双向序列建模从时间维度上看可以同时看到『历史』上的和『未来』的信息,我们也称之为非因果语言模型(non-causal LM),而单向序列建模由于限制了对下文的可见性,因此只能看到『历史』上的信息,从而称之为因果语言模型(causal LM),这两者的形式化表示可见公式(1)和(2),其中
/
i
/ i
/i表示除了第
i
i
i个token之外的所有token,而
<
i
<i
<i表示位置小于
i
i
i的所有token。通常来说,我们可以通过设置不同的注意力掩膜实现对下文可见性的限制,如Fig 1 (c-d)所示,非因果LM是一个全可见的掩膜矩阵,而因果LM是一个下三角掩膜矩阵,具体注意力掩膜矩阵的生效机制,可见博文[3]的分析。
L
n
o
n
−
c
a
u
s
a
l
=
−
E
X
∼
D
log
P
θ
(
x
i
∣
x
/
i
)
(1)
\mathcal{L}_{\mathrm{non-causal}} = - \mathbb{E}_{X \sim D} \log P_{\theta}(x_i | x_{/ i}) \tag{1}
Lnon−causal=−EX∼DlogPθ(xi∣x/i)(1)
L
c
a
u
s
a
l
=
−
E
X
∼
D
log
P
θ
(
x
i
∣
x
<
i
)
(2)
\mathcal{L}_{\mathrm{causal}} = - \mathbb{E}_{X \sim D} \log P_{\theta}(x_i | x_{< i}) \tag{2}
Lcausal=−EX∼DlogPθ(xi∣x<i)(2)
如何结合这两种不同类型语言模型的优势呢?MetaLM [1]给出了他的答案。一种可行的方法是将因果语言模型作为一个通用接口,以文字原生(free-text)的形式进行输出,以一定方法对输出进行整理后,可以同时进行NLU和NLG任务。在输入层则用非因果语言模型作为信息处理器进行知识提取,此时非因果语言模型的输入既可以是文本,也可以是图片,甚至可以是视频等多模态输入。这种被称之为半因果语言模型(semi-causal LM)因此也是一种多模态大语言模型。那么问题来到了结合因果LM和非因果LM的方式上,如Fig 2所示有两种可选的方式,第一种是将非因果语言模型提取的信息作为注意力机制中的k和v,传递给因果语言模型,这种方式类似于encoder-decoder架构,也可以参考Flamingo [4],然而这种方式对于多模态交织的多轮对话输入来说,不是很灵活。第二种方法是将非因果语言模型的提取信息作为因果模型的输入层叠起来,这种方式将多模态交织的多轮输入都以统一的形式输入到非因果LM中,本文的MetaLM中就采用了第二种方式。
整个MetaLM的建模范式基于以上的讨论,如Fig 3所示,在训练阶段,对输入(可能是多模态输入)进行随机采样,每一个采样称之为片段(span),片段所占的总token数量是输入总token数量的25%。采样出来的片段会经过它们对应的非因果编码器(比如图文输入经过VLMo),然后通过连接器(connector)和通用接口(即是因果LM)进行连接,假设输入序列为
x
=
{
x
1
,
⋯
,
x
n
}
\mathbf{x} = \{x_1,\cdots,x_n\}
x={x1,⋯,xn},其中的采样的k个片段为
{
x
s
1
e
1
,
⋯
,
x
s
k
e
k
}
\{\mathbf{x}_{s_1}^{e_1}, \cdots, \mathbf{x}_{s_k}^{e_k}\}
{xs1e1,⋯,xskek},其中的
s
i
s_i
si表示片段的开始索引,
e
i
e_i
ei表示片段的结束索引,即有
x
s
i
e
i
=
{
x
s
i
,
⋯
,
x
e
i
−
1
}
\mathbf{x}_{s_i}^{e_i} = \{x_{s_i},\cdots,x_{e_i - 1}\}
xsiei={xsi,⋯,xei−1},用
h
(
x
s
i
e
i
)
∈
R
(
e
i
−
s
i
+
1
)
×
D
h(\mathbf{x}_{s_i}^{e_i}) \in \mathbb{R}^{(e_i - s_i + 1) \times D}
h(xsiei)∈R(ei−si+1)×D表示其在非因果LM中对应的每个token的输出,那么其优化目标为公式(3)
L
M
e
t
a
L
M
=
−
∑
i
=
0
k
∑
t
=
e
i
s
(
i
+
1
)
log
P
(
x
t
∣
x
<
t
,
{
h
(
x
s
j
e
j
)
}
j
<
i
)
(3)
\mathcal{L}_{\mathrm{MetaLM}} = - \sum_{i=0}^{k} \sum_{t=e_i}^{s_{(i+1)}} \log P(x_t | \mathbf{x}_{<t},\{h(\mathbf{x}_{s_j}^{e_j})\}_{j<i}) \tag{3}
LMetaLM=−i=0∑kt=ei∑s(i+1)logP(xt∣x<t,{h(xsjej)}j<i)(3)
其中的
e
0
=
1
,
s
k
+
1
=
n
e_0 = 1, s_{k+1} = n
e0=1,sk+1=n,注意到非因果输出只取最后一个token的对应输出作为对下一个token的预测,如Fig 3的
x
4
,
x
8
,
x
14
x_4,x_8,x_{14}
x4,x8,x14,采样的片段之间不会存在重叠。
在下游任务的适配阶段,MetaLM仍然很大程度上依赖了finetune的范式(当然也支持in-context learning),通常会将用户输入作为非因果LM的直接输入,如Fig 4所示的纯文本输入场景和多模态输入场景下的finetune应用范式,可支持常规的单任务/多任务微调、zero-shot/few-shot任务、in-context learning等,同时还能支持多轮对话。
在MetaLM这篇工作中使用的文本预训练集是Pile,而图文预训练集用的是Conceptual Captions、Visual Genome、COCO Caption和SBU Caption等,都是些图片-文本的图文对数据集,大概会有4百万图片和1千万图文对。同时为了加强纯文本能力,即便在图文预训练中也采用了文本数据集,比如OpenWebText。
这个工作在NLG和NLU的各个数据集都取得了SOTA的效果,具体数据表格就不贴出来了,kosmos v1 [2] 也是基于MetaLM作为基础进行的,因此笔者对其进行了细读。从MetaLM和kosmos的对比来看,MetaLM用的数据集还停留在图文对数据、纯文本数据,没有采集图文交织数据、对话数据等,而后者已经被证实对MLLM的建模有着显著效果,如果需要构建一个通用的大语言模型接口,那么各种各样的数据的采集则不可避免,这也是在kosmos v1中去做了的事情,我们在后面的博客中将会对kosmos系列也进行笔记。
Reference
[1]. Hao, Yaru, Haoyu Song, Li Dong, Shaohan Huang, Zewen Chi, Wenhui Wang, Shuming Ma, and Furu Wei. “Language models are general-purpose interfaces.” arXiv preprint arXiv:2206.06336 (2022). aka MetaLM
[2]. Huang, S., Dong, L., Wang, W., Hao, Y., Singhal, S., Ma, S., … & Wei, F. (2024). Language is not all you need: Aligning perception with language models. Advances in Neural Information Processing Systems, 36. aka Kosmos v1
[3]. https://blog.csdn.net/LoseInVain/article/details/116137177, 《Transformer代码随记》
[4]. Alayrac, J. B., Donahue, J., Luc, P., Miech, A., Barr, I., Hasson, Y., … & Simonyan, K. (2022). Flamingo: a visual language model for few-shot learning. Advances in Neural Information Processing Systems, 35, 23716-23736. aka Flamingo