Language Models are General-Purpose Interfaces论文翻译

前言

本文仅仅是本人在英语水平不够的情况下对原论文的翻译。由于论文太长了,因此只翻译了前两章。

另外,KOSMOS-1中的MetaLm似乎就是在说这篇论文,如果有错烦请指正。

原始论文地址参见:https://arxiv.org/pdf/2206.06336.pdf

下面开始正式翻译:

翻译

摘要

 基础模型由于在广泛的下游应用中的有效性而受到广泛关注。尽管在架构方面存在很大的收敛(注:convergence,不是很理解这句话),但大多数预训练模型通常仍然针对特定任务或模态开发。在这项工作中,我们提出使用语言模型作为通用接口,连接到各种基础模型。一系列预训练的编码器感知不同的模态(如视觉和语言),它们与充当通用任务层的语言模型相连接。我们提出了一种半因果语言建模目标,共同预训练接口和模块化编码器。我们综合了因果和非因果建模的优势和能力,从而将两者的优点结合起来。具体而言,所提出的方法不仅继承了因果语言建模的上下文学习和开放式生成的能力,而且由于双向编码器的存在,有利于微调。更重要的是,我们的方法无缝地解锁了上述能力的组合,例如通过微调的编码器实现上下文学习或遵循指令。在各种仅语言和视觉语言基准测试中的实验结果表明,我们的模型在微调、零样本泛化和少样本学习方面表现优于或与专门化模型竞争。

 1 介绍设计原则

语言模型作为通用任务层。大规模语言模型不仅可以用作语言任务的通用接口,还可以用于视觉和多模态任务。语言模型具有开放式的输出空间,可以推广到广泛的任务。只要我们能够用自然语言描述预测结果,下游任务就可以适应基于语言模型的任务层。自然而然地,我们可以将各种预测转换为自由文本序列(Raffel等人,2020)。例如,我们可以将目标标签和分类的答案分别转换为用于分类和问答的文本。此外,借助通用任务层的帮助,预测过程可以超越单一轮次,即可以通过在历史上下文的条件下构建多轮对话接口。这种对各种任务的统一对于通用AI至关重要,它将表示、转换和表达融合成一个共享模块。

因果语言建模(即单向解码器)有利于零样本泛化和上下文学习。GPT-3(Brown等人,2020)表明了因果语言模型预训练产生的有趣特性。由于因果语言建模(即所有标记都进行预测并产生监督信号)相对于其他对应方法(如掩码语言建模)具有良好的样本效率和归纳偏差(Wang等人,2022b),通过因果语言建模赋予模型所需的特性是有效的。零样本泛化的能力以及少样本学习对于成为通用任务层至关重要。零样本泛化意味着语言模型通过阅读大规模文本语料库学习了大量的世界知识(Dai等人,2021)和模式。记忆的信息可以作为可重用的背景知识和广泛的端任务的基本技能。此外,上下文学习使我们能够轻松地将预训练或微调后的模型适应新场景。例如,我们可以使用任务指令(Ouyang等人,2022)重新调整模型,并使用一些示例的演示进行少样本学习。

非因果建模(即双向编码器)有利于在任务、语言和模态之间进行迁移。尽管因果语言模型在零样本和少样本泛化方面表现良好,但BERT(Devlin等人,2019)和T5(Raffel等人,2020)表明,通过掩码语言建模对双向编码器进行预训练可以实现更好的微调性能。一旦给出了整个输入,非因果建模在编码数据方面是相当合理的。因为所有上下文可以相互访问,而因果建模只能逐个使用历史标记。微调的优势对于数据丰富的情况非常有帮助,这里有很多可用的标注数据。此外,通过掩码语言建模目标进行预训练的非因果编码器在跨语言转移方面取得了竞争性能(Conneau等人,2020),这使得将模型适应到多语言设置中变得有效。

半因果语言建模作为元预训练任务。半因果语言建模在将非因果编码器和因果语言模型连接在一起方面发挥着重要作用。它是预训练编码器的通用接口元任务。具体而言,非因果编码器学习表示各种输入数据,而因果语言模型作为通用任务层。非因果编码器与因果语言模型连接在一起,因此我们可以从上述两种建模方法中受益。与之前的编码器-解码器预训练方法(如前缀语言建模和T5;Raffel等人,2020)相比,我们的任务是在整个序列中非因果地对随机跨度进行编码,然后通过因果语言建模来生成其余部分。此外,在架构方面,我们直接将双向编码器的输出馈送到因果解码器中,而不是依赖交叉注意力(Vaswani等人,2017)。此外,可以将多个双向编码器挂载到因果语言模型上,但编码器-解码器架构通常只有一个编码器。

非因果编码器作为系统1,因果语言模型作为系统2。认知通常被分为两个层次(Kahneman,2011;Bengio,2019):系统1(即直觉和无意识)和系统2(即顺序、有意识、规划和推理)。在提出的框架中,这两个层次的模块可以分别看作是这两个层次的实现。具体而言,通过掩码数据建模预训练的非因果编码器,如BERT(Devlin等人,2019)和BEiT(Bao等人,2022),被用作感知层,用于编码各种输入模态。编码模块可以视为系统1。在获得输入表示后,我们将它们馈送给因果语言模型,该模型在常识推理和规划方面表现出色。通用任务层在我们的方法中扮演了系统2的角色。

 自然语言接口连接用户和预训练模型。基于因果语言建模的通用任务层使用户能够使用自然语言与预训练的非因果编码器进行交互。首先,语言可以用作底层预训练或微调模型的编程语言,通过通用接口进行编译。例如,我们可以编写基于文本的指令(Ouyang等人,2022)和解释(Wei等人,2022)来重新调整和指导模型行为。其次,通用接口使模型能够使用自由文本呈现结果,使预测直接可理解和可解释。第三,提出的框架本质上支持多轮对话交互。在每个轮次中,我们可以将编码的输入馈送到接口层,然后以半因果的方式生成响应结果。

2 MetaLM: Meta Language Model

根据第1节中的设计原则,我们提出了Meta Language Model(METALM),这是一个半因果语言模型,扮演通用接口的角色,支持与各种基础模型的交互。我们的框架概览如图2所示。具体而言,一系列预训练的编码器感知不同的模态,并与语言模型连接。语言模型被视为通用任务层(即通用接口),将各种任务统一为自由文本生成。

为了预训练METALM,我们提出了一个半因果语言建模任务来联合学习这些模块。METALM综合了两个领域的优势和能力。从语言模型中,METALM继承了上下文学习、多轮交互和开放式生成的能力。此外,底层基础模型也为METALM提供了传统的因果模型所具有的优势,例如在多任务学习、跨模态学习和有监督学习等方面的优势。

2.1 输入表示(Input Representation)

METALM的输入表示分为两类。第一类是通过底层编码器获得的上下文表示,并通过连接器层进行投影。例如,如图2所示,图像块和$x_7,x_8$由双向视觉-语言编码器进行编码。第二类是文本的标记嵌入,例如图中的x5,x6。在馈送到通用任务层之前,这两类表示与位置嵌入相加。通过这种方式,METALM将多模态输入和文本输入结合在一起,并在通用接口中进行处理和交互。

 2.2 模型结构

如图3所示,我们总结了三种语言模型变体和提出的半因果语言模型的模型架构。首先,因果语言模型(例如GPT;Brown等人,2020)是一个从左到右的Transformer解码器。其次,前缀语言模型采用编码器-解码器架构,并使用交叉注意力连接来完成序列。第三,非因果语言模型是一个双向编码器,通常通过掩码语言建模(Devlin等人,2019)进行预训练。第四,提出的半因果语言模型具有一个单向Transformer解码器,并且有多个双向编码器与解码器相连接。换句话说,我们的模型从左到右处理整个会话,同时通过非因果编码器预编码一些跨度。通过这种架构,我们的模型可以同时获得因果和非因果建模的优势,从而在多任务、跨模态等方面表现出色。

骨干网络

我们使用Transformer(Vaswani等,2017)来构建模型。给定一个输入序列,我们首先将其向量表示打包在一起。然后我们将这些向量馈送到一个多层Transformer中,它对输入进行上下文化表示。在每个Transformer块中,都有一个多头自注意力层和一个前馈网络层,用于聚合前一层的隐藏状态。此外,我们使用注意力屏蔽来控制上下文访问。我们对通用任务层使用三角矩阵作为注意力屏蔽,以便它从左到右处理输入。对于双向编码器,我们允许所有标记彼此访问。在获得通用任务层的输出向量之后,我们使用softmax分类器对词汇表进行预测。权重矩阵与输入标记嵌入共享。

连接器(connector)

如图2所示,通用任务层和各种双向编码器之间有一个连接器层。连接器在将其馈送到通用接口之前,对双向编码器的向量表示进行投影。此外,连接器用于匹配基础模型的输出维度与通用任务层。我们通过经验发现线性投影和前馈网络在我们的实验中都能很好地工作。

2.3 Proposed Objective: Semi-Causal Language Modelin

为了预训练METALM,我们引入了半因果语言建模目标。如图2所示,我们的预训练任务是自动回归地生成序列的标记,而一些跨度由双向编码器表示。

给定一个输入序列\begin{aligned}\boldsymbol{x}&=x_1,x_2,...,x_n\end{aligned},我们假设有k个非因果跨度,表示为:\left\{\boldsymbol{x}_{s_1}^{e_1},...,\boldsymbol{x}_{s_k}^{e_k}\right\},其中\begin{aligned}\boldsymbol{x}_{s_i}^{e_i}&=x_{s_i},...,x_{e_i\boldsymbol{-}1}\end{aligned}。对于每个非因果跨度\begin{aligned}\boldsymbol{x}_{s_i}^{e_i}\end{aligned},我们使用一个双向编码器来获得其向量表示\begin{aligned}h(\boldsymbol{x}_{s_i}^{e_i})\end{aligned}。选择的双向编码器取决于非因果跨度的模态。

那么半因果语言建模目标可以表述为:

其中 

 

注意每个非因果跨度的下一个标记是在跨度的最后一个位置生成的。通常非因果跨度的数量和位置是随机采样的。这些跨度之间不会有重叠。

通过利用提出的目标,我们同时预训练通用接口和基础模型,并无缝连接它们。我们在仅语言(第3节)和视觉语言(第4节)两个设置下预训练METALM。

2.4 下游任务能力

上下文学习

通过上下文学习,METALM可以通过自然语言指令或几个输入输出对(即演示)进行条件化,来适应新的任务,无需更新任何参数。 我们首先描述k次学习的使用。 对于每个演示输入,我们进行双向编码。 然后将编码后的向量和标签馈送到通用接口中。 通过给定的演示进行条件化,METALM预测未见示例的目标输出。 对于零次泛化,只有测试输入,通常使用提示来描述任务。 我们将带有任务指令的示例馈送到双向编码器中。 通用任务层生成目标输出。

微调

当下游任务有大量标注样例时,微调尤其有帮助。我们将各种任务统一为开放式生成格式,即目标转换为自由文本。在微调过程中,METALM学习根据双向编码的输入生成目标输出。与因果语言模型相比,METALM继承了双向编码器出色的微调能力。

通过上下文定制

典型用法是我们首先在大量数据上对模型进行微调,然后使用上下文学习来定制微调后的模型。所以我们可以轻松地将标注数据的知识迁移到新任务中。由于我们同时利用了因果和非因果建模的优势,METALM解锁了各种能力的组合,即非因果建模的出色微调性能和因果建模的上下文学习。

多模多轮交互

METALM支持用户和预训练模型之间的多轮交互。对于每轮,非因果模块编码用户输入,接受使用对应的预训练编码器的多模态内容。输出响应由通用接口生成。通过对历史对话的条件化,METALM自然地作为对话接口工作。此外,对话可以包括纯文本以外的多种模式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
由于Autosar标准对C-S接口的要求非常严格,因此在MATLAB中创建Autosar C-S接口需要遵循一定的规则和步骤。以下是一个简单的示例脚本,用于创建一个包含输入输出参数的Autosar C-S接口。 首先,我们需要创建一个AUTOSAR接口,用于描述C-S接口的输入输出参数。在MATLAB中,可以使用Simulink的AUTOSAR Blockset工具箱来创建这个接口。以下是一个示例脚本: ``` % Create an AUTOSAR interface object myInterface = autosar.api.getInterface(); % Set the name of the interface myInterface.Name = 'MyInterface'; % Add an input argument to the interface inputArgument = autosar.api.Argument(); inputArgument.Name = 'inputArg1'; inputArgument.DataType = 'double'; myInterface.addInput(inputArgument); % Add an output argument to the interface outputArgument = autosar.api.Argument(); outputArgument.Name = 'outputArg1'; outputArgument.DataType = 'double'; myInterface.addOutput(outputArgument); % Save the interface object to a file autosar.api.save(myInterface, 'MyInterface.arxml'); ``` 在上面的示例脚本中,我们创建了一个名为"MyInterface"的AUTOSAR接口,并添加了一个输入参数"inputArg1"和一个输出参数"outputArg1"。接口的数据类型均为double。最后,我们将接口对象保存到一个名为"MyInterface.arxml"的文件中。 接下来,我们需要创建一个Autosar C-S接口,用于实现上述AUTOSAR接口。在MATLAB中,可以使用Simulink的AUTOSAR Blockset工具箱来创建这个接口。以下是一个示例脚本: ``` % Create an AUTOSAR C-S interface object myCsInterface = autosar.api.getCSInterface(); % Set the name of the interface myCsInterface.Name = 'MyCsInterface'; % Add the AUTOSAR interface to the C-S interface myCsInterface.addInterface(myInterface); % Save the C-S interface object to a file autosar.api.save(myCsInterface, 'MyCsInterface.arxml'); ``` 在上面的示例脚本中,我们创建了一个名为"MyCsInterface"的AUTOSAR C-S接口,并将上一步创建的AUTOSAR接口添加到了这个C-S接口中。最后,我们将C-S接口对象保存到一个名为"MyCsInterface.arxml"的文件中。 这就是创建Autosar C-S接口及其对应的Arguments的简单示例脚本。请注意,Autosar标准非常复杂,因此在实际使用中,您需要详细了解Autosar标准,并按照标准的要求进行操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值