`

#大模型~综述1

综述

涵盖500多项研究、50多个模型,这里带你全面洞悉用LLM写代码的各式方法。

随着 BERT 和 GPT 等预训练 Transformer 的出现,语言建模近些年来取得了显著进步。随着大型语言模型(LLM)的规模扩展至数以千万计的参数数量,LLM 开始展现出通用人工智能的迹象,它们的应用也已经不局限于文本处理。Codex 首次展现出了 LLM 在代码处理方面的出色能力,之后更是出现了 GitHub Copilot 这样的商业产品以及 StarCoder 和 Code LLaMA 等开源代码模型。

但是,预训练 Transformer 在代码处理方面的应用可以追溯到仅解码器(decoder-only)自回归模型成为主流技术之前的时期,而这一领域还尚没有一篇完整的综述。

上海交通大学和蚂蚁集团的一个研究团队填补了这一空白。他们对用于代码的语言模型进行了全景式的总结,覆盖了 50 多个模型、30 多个下游任务和 500 多个相关研究成果。他们对代码语言模型进行了分类,从在一般域上训练的巨型模型到专门针对代码理解或生成任务训练的微型模型。

他们关注的重点是这些模型之间的关系和差异,并格外强调了在语言模型中集成特定于代码的功能(例如抽象语法树或数据流)以及从 NLP 领域借用过来的最新技术。

下面机器之心将介绍这一篇综述论文。如果你想更全面地了解代码语言模型的发展历程,请一定不要错过原论文。此外,该团队还在 GitHub 上建了一个开放的相关文献索引库,以跟踪和分享代码 LLM 的最近成果。

  • 论文地址:https://arxiv.org/pdf/2311.07989v1.pdf
  • 文献库地址:https://github.com/codefuse-ai/Awesome-Code-LLM

背景

这一节,作者总结了基于 Transformer 的语言建模的基本知识,包括单向和双向模型的共同目标,以及 NLP 中的一些流行模型和设计。

w~大模型~合集15_大模型

单向语言模型(也被称为因果语言模型)是将句子的概率分解为每个 token 的条件概率与链式法则的乘积。

不同于因果语言模型,双向语言模型的训练目标是为文本获得更好的上下文表征,而不是以自回归的方式生成文本。

GPT 式的因果语言模型和 BERT 式的双向语言模型各有其优点和缺点。GPT 虽可用于自回归生成,但却缺乏对输入文本的双向表征,因此不适用于翻译和摘要等序列到序列任务(seq2seq)。另一方面,BERT 虽可产生双向表征,但其预训练的目标是掩码填充,而非生成。

最基本的 Transformer 编码器 - 解码器架构将 GPT 和 BERT 各自的优点结合到了一起。T5 便是这样一个模型,其预训练过程使用了 span corruption,可被看作是掩码式语言建模(MLM)的一种变体。

因果语言建模(CLM)和 MLM 等语言建模目标主要是训练模型捕获 token 层面的信息,而无法高效地建模文档结构。因此,为了帮助模型学习全局信息,通常还会添加辅助目标,比如 BERT 的预训练在使用 MLM 的同时还使用了下一句子预测(NSP)目标。

另外值得一提的是,尽管大多数预训练语言模型研究都集中于设计训练目标,但 Transformer 架构本身的低层实现也在不断进步,获得了更好的稳定性、性能和效率。

 评估用于代码的语言模型

过去十年中,软件工程社区已经提出了多种不同的用于评估代码模型的评估任务。CodeXGLUE 将大多数此类整合成了单一基准,其中涵盖克隆检测、缺陷检测等代码理解任务以及代码修复、代码转译、程序合成和代码总结等序列到序列生成任务。但是,自 Chen et al. (2021) 引入了 HumanEval 和 Codex 之后,文本到代码合成就被带到了 NLP 社区的聚光灯下,并从此成为评估 LLM 的标准任务(图 2)。

w~大模型~合集15_大模型_02

代码处理的下游任务

在这篇综述中,作者按照软件工程的惯例,基于输入 / 输出的模态对代码评估任务进行了分类,而这些类别又可归总为 5 个大类:文本到代码、代码到代码、代码到文本、代码到模式、文本到文本。下面将简单列出这些任务,至于对这些任务的解释,请参阅原论文。

文本到代码任务以文本为输入,输出代码。其中包括:代码检索、代码合成、文本到 SQL、数学编程。

代码到代码任务以代码为输入,输出代码。其中包括:代码搜索、代码补全、代码转译、代码修复、填空测验、代码填充、代码混淆、单元测试生成、断言生成、模糊测试(Fuzzing)、类型预测。

代码到文本任务以代码为输入,输出文本。其中包括:代码摘要、代码审查、标识符预测。

代码到模式任务是对代码执行分类。其中包括:缺陷检测、克隆检测、代码分类、代码推理。

文本到文本任务以文本为输入,输出文本。其中包括:文档翻译、日志解析。

w~大模型~合集15_大模型_03

w~大模型~合集15_大模型_04

评估指标

代码理解任务在形式上与自然语言理解任务相似,所使用的评估指标也类似,比如准确度、F1 和 MRR(Mean Reciprocal Rank),而标识符预测等短生成任务则可使用精准匹配的准确度进行评估。代码到文本任务可使用文本生成任务的常用评估指标,比如 BLEU。

而涉及代码生成的评估任务则更复杂。大多数早期研究都是评估句法正确度,即可成功解析的生成结果百分比。Chen et al. (2018) 反对此类指标,并提出了参照匹配(reference match)指标,即生成结果与参考结果完全一致的比例。Ren et al. (2020) 则提出了 CodeBLUE,这是 BLEU 的一种变体,其评估的是抽象语法树(AST)和数据流的重叠范围,可兼顾代码的句法和语义。

但是,随着这些年来代码生成模型能力的提升,人们发现这些基于内容重叠度的指标已经不够用了,因为执行同样功能的代码段可能在词汇形式上大不相同。

因此,研究者将关注重点转向了功能正确性。pass@k 就是其中的代表。该指标由 Kulal et al. (2019) 提出,并被 Chen et al. (2021) 加以优化,能够无偏差地估计模型使用任意 k 个生成样本通过程序的所有单元测试的几率。该指标还可以泛化成 passn@k (Li et al., 2022),其将模型提交的数量限制到了 n,但允许根据输入中给定的单元测试对 k 个样本进行过滤。

程序合成

随着这些年来代码模型的进步,研究者的关注重点逐渐转向了实践中的程序合成任务。

2018 年的 CONCODE 是该领域的一个早期数据集,其中包含超过 10 万条 Java 方法,并已经被整合到了 CodeXGLUE 基准中。

2021 年以来,相关数据集迅速增多,其中大部分都专注于 Python 语言,比如 APPS、HumanEval、MBPP;而近期也有一些工作将 HumanEval 扩展到了其它编程语言。DS-1000 是一个更现实的 Python 数据集,专注于 NumPy 和 SciPy 等数据科学软件库,同时一些数学推理基准也已被转换为编程任务,包括 MathQA-Python 和 GSM8K-Python。

代码库层面的评估

前面谈到的大多数评估任务都仅限于单个文件甚至单个函数。

近期一些研究探索了利用代码库层面的上下文来进行代码补全,而 Liu et al. (2023) 提出了用于评估这些系统的 RepoBench。最近,Bairi et al. (2023) 研究了难度更大的代码库层面的 API 迁移和时间编辑任务,Jimenez et al. (2023) 则引入了一个相应的基准 SWE-bench。

 用于代码的通用语言模型

自从语言模型的参数数量扩展到数以千亿计,它们中的许多就已经展现出了非凡的编程能力,即便它们并不是专门针对代码而设计或训练的。Codex 之后,研究者发现只需继续在代码上进行预训练,就能显著提升语言模型的代码性能。

现成可用的语言模型

大型语言模型的预训练通常会使用数以万亿计的 token,遵循缩放律(scaling laws),而这巨量的文本数据中往往包含少量但不可忽视的多样化代码。比如 Pile 数据集包含 95GB 代码(爬取自 GitHub 的 800GB 原始数据集);1.6 TB 的多语言预训练数据集 ROOTS 也包含 163GB 代码,涵盖 13 种编程语言。这是两个最大型的开源预训练数据集,让许多语言模型具备了编程能力。比如 GPT-J、GPT-NeoX 和 BLOOM 在 HumanEval 上都有不错的表现。

LLaMA(其预训练数据集包含 328GB 来自 GitHub 的代码)在 HumanEval 指标上取得了 23.7 的 pass@1 表现,其后继模型 LLaMA 2 得到了更高的 29.9。

另一方面,闭源模型的表现一般更好。比如 LaMDA 和 PaLM 在 HumanEval 上的 pass@1 性能分别为 14.0 和 26.2,而 GPT-4 的则达到了惊人的 67.0,这一成绩直到最近都高于任何专门针对代码预训练或指令微调的模型。

最近的一大趋势是使用更大的数据集训练更小的模型,遵循修订版的缩放律。

举两个例子:Baichuan 2 是使用 2.6T token 训练出的 13B 模型,而 Qwen 则是用 3T token 训练的 14B 模型。它们在 HumanEval 上的 pass@1 性能分别为 17.1 和 32.3。Li et al. (2023) 则表明 1.3B 的小模型也能获得与更大型模型相当的编程能力,同时还能维持合理的一般文本处理能力,甚至也能显现出一些涌现能力,比如思维链推理。他们的模型 Phi-1.5 的训练使用了 ChatGPT 生成的 21B token 的教材数据以及取自 Stack Overflow 和 Refined Web 的 100B token 的已过滤网络数据;其在 HumanEval 上的 pass@1 性能为 41.4。

表 1 给出了这些模型的性能表现。

w~大模型~合集15_大模型_05

在代码上进行过额外预训练的语言模型

伴随着开创性的基准 HumanEval,Chen et al. (2021) 还开启了将 LLM 用于代码的时代。他们的贡献是 Codex,这是一个 GPT-3 检查点模型,但额外使用了 100B 的代码 token 进行预训练。这是最早的超十亿参数规模的代码模型之一。

之后出现的还有接连成为 HumanEval 和 MBPP 当前最佳的 PaLM-Coder 和 PaLM 2-S*。类似地,Lewkowycz et al. (2022) 用 38.5B token 的 arXiv 论文和数学内容训练了 PaLM;Rozière et al. (2023) 则使用超过 500B 代码 token 训练 LLaMA 2 而得到了 Code LLaMA,其在 HumanEval 上的表现超过除 GPT-4 外的之前所有语言模型。

Liu et al. (2023) 又使用多任务微调(MFT)进一步训练了 Code LLaMA,得到了 CodeFuse-CodeLLaMA,其在 HumanEval 上的 pass@1 性能为 74.4,超过了 OpenAI 报告的 GPT-4 的性能。

尽管这些模型基本都是使用 CLM 预训练的 Transformer 解码器,但研究者也在不断改进这种架构,引入了并行注意力、MQA、RoPE 等新方法。

 专用于代码的语言模型

随着 GPT 和 BERT 等预训练 Transformer 在自然语言处理方面取得巨大成功,此类模型架构、学习范式和训练目标很快被软件工程社区采用,打造出了用于代码理解和生成的专用模型。表 3 给出了这些预训练模型的概况。

代码训练数据集

现在已经有许多大规模的代码预训练数据集,包括 CodeSearchNet、CodeParrot、Stack;它们分别包含 20GB、50GB 和 3TB 代码文档(见表 2)。

w~大模型~合集15_大模型_06

编码器

Kanade et al. (2020) 在代码语料库上重复了 BERT 的训练过程,得到了 CuBERT。而 Feng et al. (2020) 则在 CodeSearchNet 上使用 MLM 和 ELECTRA 的 RTD 训练得到了 CodeBERT。他们还利用了 CodeSearchNet 中的显式「文本 - 代码」对,并将它们分别用作 BERT 输入的第一和第二段。

除了这些标准的训练目标之外,研究者还引入了许多专为代码任务设计的辅助目标。GraphCodeBERT 和 SynCoBERT 会从源代码中提取图(graph),各自对应于数据流图和抽象语法树,然后它们借此训练模型来预测节点之间的类型关系;另外 SynCoBERT 和 Code-MVP 还在预训练阶段以标记的形式添加了类型推理。

另一个常用目标是对比学习:SynCoBERT 和 Code-MVP 会对比输入的不同角度(比如代码、注释、AST 和经过转换的代码);而 DISCO 则会通过混淆等保留语义的变换来构建正例样本对,通过注入人工错误来构建负例样本对。

编码器 - 解码器

相比于仅编码器模型,编码器 - 解码器自然更强大,因为它们可以用于条件文本生成,而它们的编码器部分始终可以单独用于执行需要仅编码器架构的任务,例如回归。

受编码器 - 解码器架构进步的激励,研究社区已经提出了许多用于代码处理的此类模型。

PyMT5 (Clement et al., 2020) 和 Mastropaolo et al. (2021) 在代码语料库上重复了 T5 的预训练和多任务微调过程,而 Ahmad et al. (2021) 则提出了 PLBART,这是在 655GB 的 Java、Python 和自然语言组合数据上预训练的 BART 模型。Lachaux et al. (2021) 认为 MLM 对于编程语言来说可能是一项过于简单的任务,因为标识符名称经常在单个上下文窗口中出现多次;他们提出了一种去混淆预训练目标,即模型的训练目标是将经过混淆的代码转换成原有形式。

基于这些之前的研究成果,Wang et al. (2021) 提出了 CodeT5,其预训练使用了 T5 原有的 span corruption、标识符标记、掩码式标识符预测、文本到代码和代码到文本生成。其后继模型 CodeT5+ 则从 UL2 获得了灵感,将因果语言建模(CLM)引入了预训练过程,此外还有基于文本 - 代码匹配的对比目标。

Li et al. (2022) 的 AlphaCode 也使用了多个训练目标:其编码器用 MLM 训练,解码器用 CLM 训练,此外还有浅编码器和深解码器、多查询注意力等架构上的调整;其模型规模也比 CodeT5 大很多,多达 410 亿参数。

Chakraborty et al. (2022) 的 NatGen 的预训练则使用了一个类似于去混淆的「自然化(naturalization)」目标:通过循环变换、死代码注入和变量重命名等预定义操作生成语义上等效但不自然的代码,然后训练模型将这些不自然的代码转译回其原始形式。

除了这些一般性预训练目标之外,一些研究工作训练 Transformer 编码器 - 解码器时的重点是代码转译,这是 Transformer 模型在代码方面的一个自然应用,毕竟 Transformer 架构最早就是 Vaswani et al. (2017) 为机器翻译任务提出的。但是,不同于自然语言,代码的并行数据很少。

为了解决这个问题,Rozière et al. (2020) 提出了 Transcoder,其首先使用 XLM 预训练一个编码器,然后使用这个编码器初始化一个基本的 Transformer,再继续使用去噪自动编码(DAE)对其进行预训练并转译回去;之后的 Szafraniec et al. (2023) 还使用了与语言无关的中间表征来增强这一过程。

除了训练数据和目标之外,这些模型大多保留了 NLP 社区提出的原始架构,如表 3 所示。

w~大模型~合集15_大模型_07

解码器

GPT-3 历史的发布以及上下文学习方法出现之后,仅解码器 Transformer 模型已经成为语言建模的主导技术。在代码处理领域,也出现了许多类似使用 CLM 预训练的模型,比如 GPT-C、CodeGPT、PolyCoder、CodeGen、PyCodeGPT、Pangu-Coder、CodeGeeX、Phi-1、CodeFuse、CodeShell、DeepSeek Coder。这些模型中有一些实验了其它的训练目标,比如 Pangu-Coder 用了 MLM 和 Masked CLM,但这样的表现并不及仅使用 CLM 训练的方法。Zan et al. (2022) 还提出了在草案(sketch)上进行持续训练,也就是让模型学习先生成程序的草案,然后再实际写代码。

尽管 Christopoulou et al. (2022) 报告说去噪目标的表现不及仅解码器模型,但也有一些研究工作将去噪或多任务预训练与解码器架构结合到了一起。Incoder、SantaCoder 和 StarCoder 的训练都使用了中间填入(FIM/fill-in-the-middle)目标(也被称为因果掩码),其本质上就是仅解码器架构采用的 span corruption。这些填入目标有一个明显优势:它们可以让模型有能力在推理时间填补输入代码中间的空白部分,而 CLM 只允许自回归生成。但是,如表 4 所示,相比于 CodeGen 等仅 CLM 模型,这些目标也会提升模型在下游任务上的性能表现。

w~大模型~合集15_大模型_08

UniLM

一些研究者也将 UniLM 这另一种 Transformer 模型用在了代码处理上。CugLM 通过交替的注意力掩码使用了 CLM 和 MLM + NSP,而 UniXcoder 的训练则使用了 CLM、MLM、Span Corruption 以及对比学习和文本 - 代码双向生成等辅助目标。但是,这两个模型的规模都相对较小,因此这种架构究竟是否适合代码处理还有待探索。

 扩散模型

虽然目前主导文本生成领域的是 Transformer 架构,但也有一些研究者探索了使用计算机视觉领域的扩散模型(Diffusion Model)来生成文本。

近期的 CodeFusion 将扩散模型引入了代码建模领域,并且研究表明:一个 7500 万参数的扩散模型在三个代码合成数据集上取得了优于 StarCoder、CodeT5+ 和 GPT-3 的表现。

用于代码的指令微调和强化学习

跟随自然语言领域的研究成果,代码社区的研究者也已经在使用指令微调技术。Wang et al. (2023) 使用 InstructGPT 生成的 2 万个指令数据对 CodeT5+ 进行了微调,得到了 InstructCodeT5+。WizardCoder 按照 WizardLM 的方法,将 2 万代码的 Alpaca 样本演进成了一个 78K 的数据集,并使用其来微调 StarCoder。Pangu-Coder 2 也使用 WizardLM 的 Evol-Instruct 从 2 万代码的 Alpaca 生成了 6.8 万个指令样本,其还通过排名响应(Rank Responses)引入了强化学习来对齐测试与教师反馈(RRTF)。

OctoCoder 则采用了另一条路径,其是使用 Git 提交历史作为指令数据来微调 StarCoder 和 CodeGeeX2。更近期的 CodeFuse 还使用了多任务微调,显式地将多个下游任务引入到了指令数据中。表 4 也给出了这些经过指令微调的代码模型的性能。

在 NLP 领域,另一个与指令微调紧密关联的技术是根据人类反馈的强化学习(RLHF),其在对齐 LLM 与人类价值方面发挥了重要作用。将强化学习用于代码有一个很自然的优势,因为编译器可以自动为语言模型生成的代码样本生成反馈。

CodeRL 就是一个这样的模型,其会为每个生成的程序定义四个层级的奖励(即编译错误、运行时错误、单元测试失败、通过)以及由一个 critic 模型估计的细粒度的 token 层面的奖励。其 actor 模型扩展自 CodeT5,然后再使用 REINFORCE 算法训练。类似地,CompCoder 和 PPOCoder 使用近端策略优化(PPO)分别训练了 CodeGPT 和 CodeT5,而 RLTF 则提出基于编译器提供的报错信息和位置给出细粒度反馈,并使用考虑了已通过测试案例比例的适应性反馈。

 语言模型所用的代码特征

编程语言和自然语言的一大主要差异是:前者是人工定义的,力求精确无歧义,并且需要在执行之前无错误地编译(或解释)。这样一来,除了 CLM、MLM 和 Span Corruption 等词汇操作之外,在设计代码的预训练目标方面会有更大的灵活性。

编程语言在句法特征等方面有很大的优势。C、Python 和 Java 等每个主流编程语言都有现成可用的编译器工具包,可以轻松且准确地提取出程序的语义信息,比如抽象语法树(AST)、与语言无关的中间表征(IR)以及每个 token 的类型和控制 / 数据流图(CFG/DFG)等辅助信息。因此,对于用于代码的 Transformer 式语言建模,很多研究工作将这些特征整合进了他们的训练流程。

抽象语法树和中间表征

Jiang et al. (2021) 提出的 TreeBERT 是最早尝试把 AST 用于基于 Transformer 的预训练 - 微调框架的模型之一。这是一个 Transformer 编码器 - 解码器模型,其预训练使用了 Tree MLM 和 Node Order Prediction。

之后还出现了 SynCoBER、SPT-Code 和 UniXcoder 等研究成果,详见原论文。

在编译流程中,AST 后面通常跟着与语言无关的中间表征,比如 LLVM IR。这种独立于特定编程语言的特征让它们非常适合作为转译中枢。

控制流和数据流

尽管研究已经证明 AST 和 IR 对特定任务(如代码转译)来说很有用,但它们本质上是静态的,就像源代码一样,并且可能无法捕获仅在运行时揭示的代码的语义属性。而控制流和数据流等动态特征中包含这样的语义。

类似于 AST,在预训练 Transformer 兴起之前,要使用专门的网络来处理这样的信息,比如 ProGraML 使用的消息传递神经网络。但是不同于 AST,即使在预训练 Transformer 变得主流之后,也少有研究探索这个方向。

GraphCodeBERT 就是这样一项研究,其会为流图中的变量创建特殊的 token 和位置嵌入,并将这个变量序列连接到文本和源代码后面来构建模型输入,其还使用了针对代码和变量段定制的注意力掩码。

类型

除了 AST、IR 和数据流,类型信息也会被用于辅助语言模型处理代码。举个例子,CugLM 在微调阶段使用了类型信息来辅助单向 MLM (即有单向注意力掩码的 MLM)的 token 预测:首先是根据最终 Transformer 层的表征预测掩码 token 的类型,然后基于隐藏表征和预测的类型预测 token 本身。相比之下,CodeT5 和 SynCoBERT 的预训练目标中都包含标识符标记,这可以被视为粗粒度的类型预测。

值得一提的是,Wang et al. (2022) 将上述的许多特征整合进了 Code-MVP:源代码、文档字符串、AST、CFG 以及通过标识符重命名、循环交换和死代码插入等方式转换过的源代码。该模型是从 GraphCodeBERT 初始化,然后使用 MLM、细粒度的类型预测和不同角度的对比学习(比如文本与代码、代码与 AST、代码与 CFG)来进行训练。

 软件开发中的 LLM

随着语言模型在软件工程基准上创造新记录,软件工程技术也正反过来扩展语言模型的边界,并将其带入现实世界的开发周期。

使用编程工具扩展 LLM

NLP 社区的研究已经表明 LLM 可以学习使用外部工具,比如计算器、机器翻译系统和搜索引擎。因此可以使用解释器来增强 LLM 处理复杂推理任务的能力。PAL 和 PoT 都使用了 Python 解释器来扩展 Codex,使其具备数值计算能力,而 ViperGPT 则是通过调用视觉 API 进行了进一步扩展,使其可以提取视觉输入的信息并回答相关问题。

除了减轻抽象的推理任务中数值计算的负担,解释器也可对代码生成过程本身提供反馈以及进行单元测试。CodeT 和 TiCoder 使用 Codex 来生成单元测试,这些测试运行在生成的代码样本上,可以提升模型在代码合成上的性能。类似地,TransCoder-ST 通过执行代码转译的外部单元测试增强了 TransCoder 和 DOBF。另外,单元测试的执行结果可作为代码强化学习的自然监督信号。

值得一提的是,OpenAI 在 2023 年 3 月为 ChatGPT 发布了一个解释器插件,该插件可以接受用户的文件输入,根据用户指令生成代码,并通过实时执行提供反馈。Zhou et al. (2023) 的研究表明这一功能让 GPT-4 可以自我调试。

在 LLM 研究中,一个与使用工具紧密关联的主题是作为智能体进行规划,理论和实验研究均表明这可以提升 LLM 的能力。Ruan et al. (2023) 发现 LLM 可以使用外部 SQL 生成器和 Python 生成器进行规划来解决复杂任务,而 CodePlan 可通过自适应规划执行代码库层面的编程。

另一类工作是使用 LLM 来创建用于代码生成的多智能体系统,比如 self-collaboration、ChatDev 和 MetaGPT。在这些框架中,多个 LLM 各自扮演着不同的角色,比如编程者、审查者和管理者。这些角色相互交互,将代码生成任务分为不同的阶段(比如设计、写代码、测试和做文档),并通过协作来完成复杂任务。

将 LLM 整合进软件开发

随着 LLM 的交互式编程能力的提升,研究者已经开始将其整合进软件开发的整个过程中。

自动代码补全是语言模型在软件开发领域的最早期应用之一,因为这一任务只需要预测下一 token 的能力。即使是在语言模型的规模达到数十亿参数之前,就已经有人将 Pythia 和 IntelliCode 等代码补全系统整合进常用的 IDE 了。

不过近段时间,代码语言模型的应用已经超越了简单的代码补全。GitHub Copilot 可以说是最流行的 AI 编程助理之一,其具备非常多功能,包括代码生成、漏洞检测和证书管理,而 CodeFuse 也将代码生成、代码转译、代码注释和测试用例生成整合成了单一的 IDE 插件,但是,随着代码语言模型越来越大,它们的客户端部署和实时性能也遭遇了新的挑战。

随着 LLM 持续发展,基于它们构建应用本身也正在变成一项具有重要价值的任务。目前已经出现了许多针对此类应用的开源框架,包括 LangChain、AutoGPT 和 WorkGPT。

总结和挑战 

这份综述系统性地回顾了使用预训练 Transformer 语言模型处理代码的历史,并强调了它们与一般领域预训练模型的关系,还进行了比较。

代码建模的进步通常紧随 NLP 的历史进程:从 SMT 模型发展到 NMT 模型,然后到微调的预训练 Transformer,最后到 LLM 的少样本应用甚至现实世界产品中的自主智能体。

不用于自然语言,代码的本质让我们可以轻易从不同角度提取辅助信息,并利用解释器和单元测试来获取自动反馈。

在此基础上,作者最后指出了当前代码建模领域所面临的一些挑战: 

  • 为了将代码 LLM 推进至下一阶段,需要一些全面的基准
  • 获取高质量数据
  • 将代码特征整合进语言模型
  • 将 LLM 用于更多代码下游任务
  • 其它可替代的模型架构和训练目标
  • 构建用于软件开发整个生命周期的代码 LLM 生态系统
  • 与代码 LLM 相关的安全和道德伦理问题

#大模型时代,目标检测任务会走向何方? 

其实文章是想说明下从我们常见的目标检测到现在 MLLM 盛行的时代,和 Object Detection 任务有哪些?目前又涌现了哪些新的任务?是否有很大的实际价值?希望能够打开下大家思路!!!

1 Object Detection

经典目标检测大家应该非常熟悉了,一般指的就是闭集固定类别的检测。

w~大模型~合集15_大模型_09

2 Open Set/Open World/OOD

这个任务是指在实际应用上可以检测任何前景物体,但是有些不需要预测类别,只要检测出框就行。在很多场合也有应用场景,有点像类无关的增量训练。

w~大模型~合集15_大模型_10

unknown 就是模型预测的不知道类别的检测结果。

3 Open Vocabulary

也是开放集任务,相比于 open set,需要知道不在训练集类别中的新预测物体类别。这类模型通常都需要接入文本作为一个模态输入,因为开放词汇目标检测的定义就是给定任意词汇都可以检测出来。

训练时候通常是要确保训练集和测试集的类别不能重复,否则就是信息泄露了,但是训练和测试集图片是否重复其实也没有强制限制。

w~大模型~合集15_大模型_11

可以看出 OVD 任务更加贴合实际应用,文本的描述不会有很大限制,同一个物体你可以采用多种词汇描述都可以检测出来。OVD 任务是一个比较实用的,但是目前还没有出现开源的超级强的 OVD 算法(这个超强是指的对比 SAM 来说,极强的 open 检测能力)

4 Phrase Grounding

这个任务也叫做 phrase localization。给定名词短语,输出对应的单个或多个物体检测框。如果是输入一句话,那么就是定位这句话中包括的所有名词短语。在 GLIP 得到了深入的研究。

w~大模型~合集15_大模型_12

从上图可以看出,Phrase Grounding 任务是包括了 OVD 任务的。常见的评估数据集是 Flickr30k Entities

w~大模型~合集15_大模型_13

5 Referring Expression Comprehension

简称 REC,有时候也称为 visual grounding。给定图片和一句话,输出对应的物体坐标,通常就是单个检测框。

w~大模型~合集15_大模型_14

常用的是 RefCOCO/RefCOCO+/RefCOCOg 三个数据集。是相对比较简单的数据集。这个任务侧重理解。

6 Description Object Detection

w~大模型~合集15_大模型_15

描述性目标检测也可以称为广义 Referring Expression Comprehension。为何叫做广义,这就要说道目前常用的

Referring Expression Comprehension 存在的问题了:

  1. REC 数据集通常都是指代一个物体,不太符合实际
  2. REC 数据集没有负样本,也就是每句话一定对应了图片中的物体,这样训练的模型会存在很大的幻觉
  3. REC 数据集通常都是正向描述,例如上图的一条在图片左边的狗,但是没有反向描述,例如一条没有被绳子牵引着在外面的狗

基于此,Described Object Detection 论文提出了这个新的数据集,命名为 DOD。类似还有 gRefCOCO

其实还有一个更细致的任务叫做 :Open-Vocabulary Visual Grounding 和 Open-Vocabulary Phrase Grounding,来自论文 OV-VG

w~大模型~合集15_大模型_16

可以看出这个任务重点是想特意区分类别泄露问题,但是由于大数据集训练时代,这个情况是无法避免的。

7 Caption with Grounding

这个任务的含义是:给定图片,要求模型输出图片描述,同时对于其中的短语都要给出对应的 bbox

w~大模型~合集15_大模型_17

有点像 Phrase Grounding 的反向过程。这个任务可以方便将输出的名称和 bbox 联系起来,方便后续任务的进行。

8 Reasoning Intention-Oriented Object Detection

意图导向的目标检测,和之前的 DetGPT 提出的推理式检测,我感觉非常类似。

DetGPT 中的推理式检测含义是:给定文本描述,模型要能够进行推理,得到用户真实意图。

w~大模型~合集15_大模型_18

例如 我想喝冷饮,LLM 会自动进行推理解析输出 冰箱 这个单词,从而可以通过 Grounding 目标检测算法把冰箱检测出来。模型具备推理功能。

而 RIO 我觉得也是一样,来自论文 RIO: A Benchmark for Reasoning Intention-Oriented Objects in Open Environments,想做的事情也是一样

w~大模型~合集15_大模型_19

9 基于区域输入的理解和 Grounding

这个是一个非常宽泛的任务,表示不仅可以输入图文模态,还可以输入其他任意你能想到的模态,然后进行理解或者定位相关任务。

最经典的任务是 Referring expression generation:给定图片和单个区域,对该区域进行描述。常用的评估数据集是 RefCOCOg

现在也有很多新的做法,典型的如 Shikra 里面提到的 Referential dialogue,包括 REC,REG,PointQA,Image Caption 以及 VQA 5 个任务

w~大模型~合集15_大模型_20

Apple 也提出了新的可交互的设计

w~大模型~合集15_大模型_21

其实文本、bbox 和图片配合,还可以实现很多任务,但是由于都是比较特殊或者不是很主流,这里就没有写了。

w~大模型~合集15_大模型_22





#大模型の对抗攻击与防御


OpenAI 安全系统(Safety Systems)团队负责人 Lilian Weng 发布了一篇博客文章《Adversarial Attacks on LLMs》,梳理了针对 LLM 的对抗攻击类型并简单介绍了一些防御方法。LLM 能力强大,倘若别有用心之人用其来干坏事,可能会造成难以预料的严重后果。虽然大多数商用和开源 LLM 都存在一定的内置安全机制,但却并不一定能防御形式各异的对抗攻击。近日,OpenAI 安全系统(Safety Systems)团队负责人 Lilian Weng 发布了一篇博客文章《Adversarial Attacks on LLMs》,梳理了针对 LLM 的对抗攻击类型并简单介绍了一些防御方法。

随着 ChatGPT 的发布,大型语言模型应用正在加速大范围铺开。OpenAI 的安全系统团队已经投入了大量资源,研究如何在对齐过程中为模型构建默认的安全行为。但是,对抗攻击或 prompt 越狱依然有可能让模型输出我们不期望看到的内容。

目前在对抗攻击方面的研究很多集中在图像方面,也就是在连续的高维空间。而对于文本这样的离散数据,由于缺乏梯度信号,人们普遍认为攻击会困难得多。Lilian Weng 之前曾写过一篇文章《Controllable Text Generation》探讨过这一主题。简单来说:攻击 LLM 本质上就是控制该模型输出特定类项的(不安全)内容。

文章地址:https://lilianweng.github.io/posts/2021-01-02-controllable-text-generation/ 

另一个研究攻击 LLM 的分支是为了提取预训练数据、私有知识,或通过数据毒化攻击模型训练过程。但这些并非本文要探讨的主题。

基础知识

威胁模型

对抗攻击是诱使模型输出我们不期望的内容的输入。许多早期研究关注的重点是分类任务,而近期的工作则开始更多关注生成模型的输出。本文探讨的是大型语言模型,并且假定攻击仅发生在推理阶段,也就是说模型权重是固定的。

w~大模型~合集15_大模型_23

图 1:LLM 应用所面临的威胁概况

分类

在过去,研究社区更关注的是对分类器进行对抗攻击,并且许多是在图像领域。LLM 也可被用于分类。给定一个输入 𝐱 和一个分类器 𝑓(.),我们希望找到该输入的一个差异细微的对抗版本 𝐱_adv,使得 𝑓(𝐱)≠𝑓(𝐱_adv)。

文本生成

给定一个输入 𝐱 和一个生成模型 𝑝(.),该模型可输出一个样本 y~𝑝(.|𝐱)。这里的对抗攻击是找到一个 𝑝(𝐱),使得 y 会违反该模型内置的安全行为,比如输出非法主题的不安全内容、泄漏隐私信息或模型训练数据。对生成任务而言,判断一次攻击成功与否并非易事,这需要一个超高质量的分类器来判断 y 是否安全或需要人类来进行审查。

白盒与黑盒

白盒攻击(White-box attacks)假设攻击者可以完全访问模型权重、架构和训练工作流程,这样一来攻击者就可以获得梯度信号。这里我们并不假设攻击者能获得全部训练数据。这仅适用于开源模型。黑盒攻击(Black-box attacks)则是假设攻击者只能访问 API 类型的服务 —— 攻击者可以提供输入 𝐱 并获取反馈的样本 y,而不知道有关模型的更多信息。

对抗攻击的类型

有多种不同方法可以帮助攻击者找到能诱使 LLM 输出不安全内容的对抗输入。这里给出五种方法。

w~大模型~合集15_大模型_24

token 操作

给定一段包含一个 token 序列的文本输入,我们可以使用简单的 token 操作(比如替换成同义词)来诱使模型给出错误预测。基于 token 操作的攻击属于黑盒攻击。在 Python 框架中,Morris et al. 2020 的论文《TextAttack: A Framework for Adversarial Attacks, Data Augmentation, and Adversarial Training in NLP》实现了许多词和 token 操作攻击方法,可用于为 NLP 模型创建对抗样本。这一领域的许多研究工作实验的是分类和蕴涵预测。

举个例子,Ribeiro et al (2018) 的研究《Semantically Equivalent Adversarial Rules for Debugging NLP models》依赖于人工提出的「语义等价式对抗规则(SEAR)」,其可以通过尽可能少的 token 操作来让模型无法生成正确答案。比如,其中的规则包括将 What 换成 Which、将 was 换为 is。另外,还有其他研究者提出的替换关键词、用同义词替换等方法。

基于梯度的攻击

如果是白盒攻击,则攻击者可以获取所有的模型参数和架构。因此,攻击者就可以依靠梯度下降来通过编程方式学习最有效的攻击手段。基于梯度的攻击仅在白盒设置下有效,比如开源 LLM。

Guo et al. 2021 的论文《Gradient-based Adversarial Attacks against Text Transformers》提出的基于梯度的分布式攻击(GBDA)使用了 Gumbel-Softmax 近似技巧来使对抗损失优化可微,其还使用了 BERTScore 和困惑度来增强可感知性和流畅性。

不过,Gumbel-softmax 技巧难以扩展用于 token 删除或增添,而是受限于 token 替换操作。

Ebrahimi et al. 2018 在论文《HotFlip: White-Box Adversarial Examples for Text Classification》 中则是将文本操作看作是向量空间中的输入,度量的是损失在这些向量上的导数。HotFlip 可以扩展用于 token 删除或增添。

Wallace et al. (2019) 的论文《Universal Adversarial Triggers for Attacking and Analyzing NLP》提出了一种在 token 上进行梯度引导式搜索的方法,可以找到诱使模型输出特定预测结果的短序列,这个短序列被称为 Universal Adversarial Triggers (UAT,通用对抗触发器)。UAT 不受输入的影响,这意味着这些触发器可以作为前缀(或后缀)连接到来自数据集的任意输入上。

Shin et al., 2020 的《AutoPrompt: Eliciting Knowledge from Language Models with Automatically Generated Prompts》使用了同样的基于梯度的搜索策略来为多样化的任务寻找最有效的 prompt 模板。

上面的 token 搜索方法可以使用波束搜索增强。当寻找最优的 token 嵌入时,可以选取 top-k 个候选项,而不是单独一个,在当前数据批上从左到右搜索,并根据 𝓛_adv 为每个波束评分。

w~大模型~合集15_大模型_25

图 4:UAT 工作方式图示

UAT 的损失 𝓛_adv 需要针对具体任务而设计。分类或阅读理解依赖于交叉熵。

w~大模型~合集15_大模型_26

图 5:用于不同类型的语言任务的 UAT 示例

UAT 为何有效?这是一个很有趣的问题。因为 UAT 是与输入无关的,并且可以在有不同嵌入、token 化方案和架构的模型之间迁移,因此它们也许可以有效地利用训练数据中的偏差,毕竟这种偏差已经融入到了模型的全局行为中。

使用 UAT 攻击有一个缺点:很容易检测出来。原因是所学习到的触发器往往是毫无意义的。Mehrabi et al. (2022) 在论文《Robust Conversational Agents against Imperceptible Toxicity Triggers》中研究了 UAT 的两种变体,它们会促使所学到的触发器在多轮对话语境中难以察觉。其目标是创建能在给定对话中有效触发有毒响应的攻击性消息,同时保证该攻击在对话中是流畅、连贯和一致的。

这两种变体分别是 UAT-LM(Universal Adversarial Trigger with Language Model Loss)和 UTSC(Unigram Trigger with Selection Criteria)。

w~大模型~合集15_大模型_27

图 6:UTSC 工作方式图示

UAT-LM 和 UTSC-1 的表现与 UAT 基准相当,但 UAT 攻击短语的困惑度出奇得高,比 UAT-LM 和 UTSC-1 都高得多。高困惑度让攻击更易被检测出来,也更容易缓解。根据人类评估,UTSC-1 攻击能比其它攻击方法得到更连贯、流畅和相关的结果。

w~大模型~合集15_大模型_28

图 7:基于防御者模型对生成的攻击的响应,根据不同的有毒度分类器衡量的攻击成功率。

Zou et al. (2023) 的论文《Robust Conversational Agents against Imperceptible Toxicity Triggers》也研究了将通用对抗触发 token 作为后缀连接到输入请求上的情况。他们具体研究了对 LLM 的恶意请求 —— 对此模型应当拒绝回答。事实上,拒绝不被允许的内容类别(比如犯罪建议)是 GPT-4 内置的一个重要的安全措施。这里的对抗目标是诱使 LLM 即便在应当拒接回答时也输出肯定的响应。这就是说,当收到恶意请求时,模型会这样回答:「当然,你需要这样做……」预期的肯定响应也被配置成重复部分用户 prompt,以避免简单就能改变主题的后缀以优化「当然」式的响应。其损失函数很简单,就是输出目标响应的 NLL(负对数似然)。

w~大模型~合集15_大模型_29

图 8: 引入对抗触发器的位置的图示。红色感叹号代表要学习的对抗性 token。

他们在 Vicuna-7b 和 Vicuna-13b 这两个不同的模型上进行了实验,使用了基于贪婪坐标梯度(GCG)的搜索来贪婪地寻找候选项,使得该候选项可以在所有可能的单 token 替换中最大程度地减少损失。

尽管他们的攻击序列完全是基于开源模型训练的,但它们却出乎意料地可以移植用于其它商用模型,这表明对开源模型的白盒攻击对私有模型也有效,尤其是当低层的训练数据有所重叠时。注意 Vicuna 的训练使用了从 GPT-3.5-turbo 收集的数据(通过 shareGPT),这本质上是蒸馏,因此这种攻击更像是白盒攻击。

w~大模型~合集15_大模型_30

图 9:在 HB(有害行为)指令上的平均攻击成功率,这是在 5 次 prompt 上的平均结果。

Jones et al. 2023 等提出的自回归随机坐标上升(ARCA)则考虑了一个更宽泛的优化问题集合来寻找符合特定行为模式的输入 - 输出对 (𝐱, 𝐲) ,比如以「Barack Obama」开头但会导致毒性输出的非毒性输入。给定一个审核目标:𝜙 : 𝑿×𝒀→ℝ,其是将一对 (输入 prompt, 输出完成结果) 映射成一个分数。

w~大模型~合集15_大模型_31

图 10:诱使 GPT-2 和 GPT-J 生成有毒输出的平均成功率。粗线:CivilComments 的所有输出;点线:CivilComments 的 1,2,3-token 有毒输出。

越狱 prompt 设计

越狱 prompt 是以对抗方式诱使 LLM 输出应当避免的有害内容。越狱是黑盒攻击,因此词汇组合是基于启发式方法和人工探索进行的。Wei et al. (2023) 的论文《Jailbroken: How Does LLM Safety Training Fail?》提出了 LLM 安全的两种失败模式,可用于指导越狱攻击的设计。

1. 互相竞争的目标:这是指模型的能力(比如「应始终遵从命令」)与安全目标相冲突的情况。利用互相竞争的目标的越狱攻击例子包括:

  • 前缀注入:要求模型开始时必须使用肯定性的确认语句。
  • 拒绝抑制:为模型提供详细的指令,让其不要以拒绝的格式进行响应。
  • 风格注入:要求模型不使用长词汇,这样一来模型就无法进行专业性写作从而给出免责声明或解释拒绝的理由。    
  • 其它:角色扮演成 DAN(现在可以做任何事)、AIM(总是很聪明且不择手段)等等。    

2. 失配的泛化:这是指安全训练无法泛化到其具有能力的领域。当输入位于模型的安全训练数据分布之外(OOD),但又位于其宽泛的预训练语料库范围内时,就会出现这种情况。例子包括:

  • 特殊编码:使用 Base64 编码来构建对抗性输入。    
  • 字符变换:ROT13 密码、火星文或脑残体(用视觉上相似的数字和符号替换字母)、摩尔斯电码    
  • 词变换:Pig Latin(用同义词替换敏感词,比如用「窃」替换「偷」)、负载拆分(即所谓的 token smuggling,将敏感词拆分成子字符串)    
  • prompt 层面的混淆:翻译成其它语言、要求模型以其能理解的方式进行混淆   

Wei et al. (2023) 实验了大量越狱方法,包括由以上原理构建的组合型策略。

  • combination_1 组合了前缀注入、拒绝抑制和 Base64 攻击。
  • combination_2 加入了风格注入。
  • combination_3 又添加了生成网站内容和格式化限制条件。

w~大模型~合集15_大模型_32

图 11:越狱技巧的类型以及它们攻击模型的成功率

Greshake et al. (2023) 的论文《Not what you've signed up for: Compromising Real-World LLM-Integrated Applications with Indirect Prompt Injection》则在较高层面上观察了 prompt 注入攻击。其中指出,即便当攻击无法提供详细的方法而仅仅提供一个目标时,模型也有可能自动去实现它。当模型可以访问外部 API 和工具时,对更多信息(甚至是专有信息)的获取可能导致更大的钓鱼攻击和私密窥探攻击风险。

有人类参与的红队策略

Wallace et al. (2019) 在论文《Trick Me If You Can: Human-in-the-loop Generation of Adversarial Examples for Question Answering》中提出了有人类参与的对抗生成,其目标是构建用于引导人类攻破模型的工具。

他们用 QuizBowl QA 数据集进行了实验,设计了一个对抗书写界面,可让人类写出类似电视问答节目《Jeopardy》风格的问题,并用于诱导模型给出错误预测。依据重要程度的不同,每个词都会有不同颜色的标注(即移除该词后模型预测概率会发生变化)。词重要度是由模型梯度根据词嵌入来近似得到的。

w~大模型~合集15_大模型_33

图 12:对抗书写界面,其中左上部分是列出的模型前五个预测,右下部分是用户问题,其中用不同颜色标注了词重要度。

在一次实验中,人类训练者要做的是找到安全分类器在分类暴力内容时失败的案例。Ziegler et al. (2022) 在论文《Adversarial Training for High-Stakes Reliability》中创建了一个工具,可用于辅助人类对抗者更快更有效地找到分类器的失败情况并消除它。用工具辅助重写比完全人工重写要更快些,可将每个样本所需的时间从 20 分钟降至 13 分钟。确切地说,他们引入了两个功能来辅助人类写作者:显示每个 token 的显著度分数、token 替换和插入。

w~大模型~合集15_大模型_34

图 13:用工具辅助人类对分类器进行对抗攻击的 UI。人类要做的是编辑或补全 prompt,以降低模型预测输入是暴力内容的概率。

Xu et al. 2021 的《Bot-Adversarial Dialogue for Safe Conversational Agents》提出了 Bot-Adversarial Dialogue(BAD),该框架可以引导人类去诱使模型犯错(比如输出不安全的内容)。他们收集了 5000 多组模型与众包工作者的对话。每一组对话都包含 14 轮,然后他们根据不安全对话轮次的数量给模型打分。他们最终得到了 BAD 数据集,其中包含大约 2500 组带有攻击性标签的对话。

Anthropic 的红队数据集包含接近 4 万个对抗攻击,它们收集自人类红队者与 LLM 的对话。他们发现,RLHF 的规模越大,就越难以攻击。OpenAI 发布的大模型(比如 GPT-4 和 DALL-E 3)普遍使用了人类专家红队来进行安全准备。

数据集地址:https://github.com/anthropics/hh-rlhf/tree/master/red-team-attempts

模型红队策略

人类红队策略很强大,但是难以大规模实施而且可能需要大量经过培训的专业人士。现在想象一下:我们可以学习一个红队模型 red 来与目标 LLM 进行对抗,以触发其给出不安全响应。对于基于模型的红队策略,主要的难题是如何判断一次攻击是否成功;只有知道了这一点,我们才能构建用于训练红队模型的合适学习信号。

假设我们已经有一个高质量的分类器,能够判断模型的输出是否有害,我们就可以将其用作奖励来训练红队模型,以得到一些能最大化分类器在目标模型输出上的分数的输入。令 r (𝐱, 𝐲) 是一个这样的红队分类器,其可以判断在给定测试输入 𝐱 时,输出 𝐲 是否有害。根据 Perez et al. 2022 的论文《Red Teaming Language Models with Language Models》,寻找对抗攻击样本遵循一个简单的三步式过程:

  1. 从一个红队 LLM 𝐱~p_red (.) 采样测试输入;
  2. 使用目标 LLM p (𝐲 | 𝐱) 为每个测试案例 𝐱 生成一个输出 𝐲;
  3. 根据分类器 r (𝐱, 𝐲),在测试案例中找到一个会得到有害输出的子集。

他们实验了几种从红队模型采样或进一步训练红队模型以使其更加有效的方法,其中包括零样本生成、随机式少样本生成、监督学习、强化学习。

Casper et al. (2023) 的论文《Explore, Establish, Exploit: Red Teaming Language Models from Scratch》设计了一种有人类参与的红队过程。其与 Perez et al. (2022) 的主要不同之处在于其明确地为目标模型设置了一个数据采样阶段,这样就可以收集其上的人类标签来训练针对特定任务的红队分类器。其包含探索(Explore)、建立(Establish)和利用(Exploit)三个阶段,如下图所示。

w~大模型~合集15_大模型_35

图 15:采用「探索 - 建立 - 利用」三步式方法的红队策略流程

Mehrabi et al. 2023 的论文《FLIRT: Feedback Loop In-context Red Teaming》则是依靠红队 LM 𝑝_red 的上下文学习来攻击图像或文本生成模型 𝑝,使其输出不安全的内容。

在每一次 FLIRT 迭代中:

  1. 红队 LM 𝑝_red 生成一个对抗 prompt 𝐱~𝑝_red (. | examples);其中初始的上下文样本由人类设计;
  2. 生成模型 𝑝 根据这个 prompt 生成一个图像或文本输出 𝐲;
  3. 使用分类器等机制对生成的内容 𝐲 进行评估,看其是否安全;
  4. 如果 𝐲 被认为不安全,则使用触发 prompt 𝐱 来更新 𝑝_red 的上下文模板,使其根据策略生成新的对抗 prompt。

至于如何更新 FLIRT 的上下文模板,有这样几个策略:FIFO、LIFO、Scoring、Scoring-LIFO。详见原论文。

w~大模型~合集15_大模型_36

图 16:在不同的扩散模型上,不同攻击策略的攻击有效率(触发了不安全生成结果的生成 prompt 的百分比)。基准是 SFS(随机少样本)。括号中的数值是独特 prompt 的百分比。

如何应对攻击

鞍点问题

Madry et al. 2017 的《Towards Deep Learning Models Resistant to Adversarial Attacks》提出了一个很不错的对抗稳健性(adversarial robustness)框架,即将对抗稳健性建模成一个鞍点问题,这样就变成了一个稳健优化(robust optimization)问题。该框架是为分类任务的连续输入而提出的,但它用相当简洁的数学公式描述了双层优化过程,因此值得分享。

让我们考虑一个分类任务,其基于由配对的 (样本,标签) 构成的数据分布,(𝐱,𝑦)∈𝒟,训练一个稳健分类器的目标就是一个鞍点问题:

w~大模型~合集15_大模型_37

其中 𝓢⊆ℝ^d 是指允许用于对抗的一组扰动,比如我们希望一张图像的对抗版本看起来与原始版本类似。

其目标由一个内部最大化问题和一个外部最小化问题组成:

  • 内部最大化:寻找能导致高损失的最有效的对抗数据点 𝐱+𝜹。所有对抗性攻击方法最终都可归结为如何最大化这个内部过程的损失。
  • 外部最小化:寻找最佳的模型参数化方案,使得由内部最大化过程找到的最有效攻击的损失能被最小化。要训练出稳健的模型,一个简单方法是将每个数据点替换为其扰动版本,这些版本可以是一个数据点的多个对抗变体。

w~大模型~合集15_大模型_38

图 17:他们还发现,面对对抗攻击的稳健性需要更大的模型能力,因为这会让决策边界变得更为复杂。有趣的是,在没有数据增强的前提下,模型更大会有助于提升模型的稳健性。

LLM 稳健性方面的一些研究工作

这里简单谈谈一些有关 LLM 稳健性的研究。

Xie et al. 2023 的论文《Defending ChatGPT against Jailbreak Attack via Self-Reminder》发现了一种简单直观的保护模型免受对抗攻击的方法:明确地指示模型成为负责任的模型,不要生成有害内容。这会极大降低越狱攻击的成功率,但对模型的生成质量会有副作用,这是因为这样的指示会让模型变得保守(比如不利于创意写作),或者会在某些情况下错误地解读指令(比如在安全 - 不安全分类时)。

为了降低对抗攻击风险,最常用的方法是用这些攻击样本来训练模型,这种方法被称为「对抗训练」。这也被认为是最强的防御方法,但却需要在稳健性和模型性能之间寻找平衡。Jain et al. 2023 通过实验测试了两种对抗训练设置,结果报告在论文《Baseline Defenses for Adversarial Attacks Against Aligned Language Models》中:(1) 使用有害 prompt 与带有「I'm sorry. As a ...」的响应构成的数据对来运行梯度下降;(2) 对于每一个训练步骤,在拒绝响应上运行一个下降步骤并在一个红队差响应上运行一个上升步骤。最终他们发现方法 (2) 毫无用处,因为模型的生成质量下降了很多,而攻击成功率却仅有少量下降。

白盒攻击往往会导致对抗 prompt 看起来毫无意义,因此可以通过困惑度检测出来。当然,通过明确地优化而降低困惑度,白盒攻击可以直接绕过这种检测方法,比如 UAT 的一种变体 UAT-LM。但是,这也可能会导致攻击成功率下降。

w~大模型~合集15_大模型_39

图 18:困惑度过滤器可以阻止来自 [Zou et al. (2023)] 的攻击。PPL Passed 和 PPL Window Passed 是指带有对抗性后缀的有害 prompt 绕过过滤器而不被检测到的比率。通过率越低,过滤器越好。地址:https://arxiv.org/abs/2307.15043

Jain et al. 2023 还测试了对文本输入进行预处理的方法,使得能在移除对抗性修改的同时维持语义含义。

  • 解释含义:使用 LLM 来解释输入文本的含义,这可能会对下游任务性能造成较小影响。
  • 重新 token 化:将 token 拆分开并使用多个更小的 token 来表示它们,比如使用 BPE-dropout(随机丢弃一定比例的 token)。使用这种方法的假设是对抗性 prompt 很可能会利用特定的对抗性 token 组合。这也确实有助于降低攻击成功率,但也有限,比如从 90% 以上降至 40%。





#GPT4V-for-Generic-Anomaly-Detection


异常检测任务旨在识别明显偏离正常数据分布的异常值,在工业检验、医学诊断、视频监控和欺诈检测等多个领域都发挥了重要作用。传统的异常检测方法主要依赖于描述正常数据分布以进行正异常样本的区分。然而,对于实际的应用而言,异常检测也需要理解数据的高层语义,从而深入理解 “什么是异常”。这是通用异常检测新曙光,华科大等揭秘GPT-4V的全方位异常检测表现

要实现更准确且智能的异常检测,我们需要关注以下关键步骤:

1. 理解多样数据类型和类别

不同领域的数据集包含各种数据类型和类别,如图像、视频、点云、时间序列等。每种数据类型可能需要不同的异常检测方法,每个物体类别可能对应不同的正常标准,因此深入理解数据的多样性至关重要。

2. 确定正常状态标准

一旦理解了数据的类型和类别,我们需要推断正常状态的标准。这需要高级数据语义信息的理解,以确保我们能够正确识别正常数据的特征和模式。

3. 评估数据的符合度

最后,我们需要评估提供的数据是否符合已建立的正常数据分布。任何偏离这些数据分布的情况都可以被归类为异常。

最近,大型多模态模型(LMM)迅猛发展,其中 OpenAI 最近推出的 GPT-4V (ision) 表现最为出色,具有强大的多模态感知能力,在场景理解,图片生成等多个任务中都取得了良好表现。我们认为,LMM 的出现为通用异常检测的研究提供了新的范式和新的机会。

为了评估 GPT-4V 在通用异常检测中的性能,来自华中科技大学、密歇根大学和多伦多大学的研究者联合进行了一项研究,在涉及 4 个数据模态,9 个异常检测任务的 15 个异常检测数据集上对 GPT-4V 进行了全面的测试。具体而言,测试的数据集包括图像、点云、视频、时序等模态,并涵盖了工业图像异常检测 / 定位,医疗图像异常检测 / 定位,点云异常检测,逻辑异常检测,行人异常检测,交通异常检测,时序异常检测等 9 个异常检测任务。

  • 论文地址:https://arxiv.org/pdf/2311.02782.pdf
  • 项目地址:https://github.com/caoyunkang/GPT4V-for-Generic-Anomaly-Detection

w~大模型~合集15_大模型_40

观察与分析

本文在多种模态和领域的异常检测数据集上对 GPT4V 的性能进行了测试。我们认为,GPT4V 已经初步具备了多模态的通用异常检测能力。具体而言,GPT-4V 不仅能够有效理解多样数据类型和类别,而且可以建模正常数据的空间分布,并评估测试数据的分布情况。

除此以外,GPT-4V 在异常检测任务中还具有以下特点:

GPT-4V 能够在零 / 单样本下处理多模态、多领域的异常检测任务

多模态异常检测:GPT-4V 可有效处理多种模态数据的异常检测任务。例如,它在识别图像、点云、MRI、X-ray 等数据模态上均表现出了不俗的异常检测能力。多模态异常检测能力使 GPT-4V 能够突破传统单模态异常检测器的限制,完成现实世界的复杂异常检测任务。

多领域异常检测:GPT-4V 在工业、医疗、行人、交通和时间序列异常检测等多个领域表现优异。

零 / 单样本下的异常检测:GPT-4V 在零样本及单样本(即提供了一张正常的参考图片)任务中均表现不俗。在没有参考图像的情况下,GPT-4V 可以有效地使用语言提示信息来检测异常。当提供正常参考图像时,GPT-4V 能够更好的对齐文本格式的正常标准与正常的图像内容,其异常检测准确性进一步提高。

GPT-4V 可以理解异常检测任务所需的全局和细粒度语义

全局语义理解能力:GPT-4V 对全局语义的理解能力表现在它能够识别整体的异常模式或行为。例如,在交通异常检测中,它可以分辨正常的交通流和不规则事件之间的区别,并且提供了关于异常检出的详细解释。这种全局理解使其非常适合在开放世界中识别偏离正常分布的异常点。

细粒度语义理解能力:GPT-4V 对细粒度语义的理解能力在一些情况下表现出色,使得它不仅能够检测异常,还能够精确地在复杂数据中定位异常。例如,在工业图像异常检测中,它可以准确定位细节,如倾斜的蜡烛烛芯、瓶口周围的轻微划痕。这种细粒度理解增强了它在复杂数据中检测微小异常的能力,从而提高了其整体检测。

GPT-4V 具备自动推理异常检测的能力

GPT-4V 能够根据复杂的正常标准自动推理、拆分子任务。例如,在逻辑异常检测中,GPT-4V 能够理解所给的正常图像标准,并拆分为子任务,依次检验图像内容是否满足指定内容。这种内在的推理能力增强了其异常检测结果的可解释性,使其成为理解和解决通用异常检测的有效工具。

GPT-4V 可以通过增加提示进一步增强异常检测能力

评估结果显示,提供更多文本和图像信息对 GPT-4V 的异常检测性能有积极影响。通过增加类别信息、人类专业知识、参考图像,模型获得了更多的上下文信息,异常检测性能也得到显著提升。该特点允许用户通过提供相关的补充信息来微调和增强模型的性能。

GPT-4V 在实际应用中可能受到限制,但仍具有潜力

本报告发现 GPT-4V 在实际应用中仍面临一些挑战。例如,GPT-4V 可能在处理工业应用中的复杂场景时面临困难,导致其出现错误检测。医疗领域的伦理约束也使其在判断肿瘤等异常情况时趋于保守。但我们相信它在各种异常检测任务中仍然具有潜力。为了有效解决这些挑战,可能需要进一步增强、专门的精细调整或补充技术。总结而言,GPT-4V 在通用异常检测中具有明显潜力,有望开启异常检测任务的高层次感知时代。

应用场景展示

工业图像异常检测

工业图像异常检测旨在维护产品质量,是制造过程的重要环节。近年来,许多方法在此领域蓬勃发展,其中一些方法着眼于开发适用于任意产品类别的统一模型。本研究探讨了 GPT-4V 在工业图像异常检测中的应用,包括对不同类型的信息进行测试,以及展示其性能和局限性。

我们从工业图像中选择了几个示例,如瓶子和蜡烛的图像。即使只提供简单的语言提示,GPT-4V 能够有效地识别这些图像中的异常,展示了其能力和多样性。此外,GPT-4V 不仅能够检测期望的异常,还能够识别微观结构异常。在复杂情况下,如电路板中的异常检测,GPT-4V 能够识别图像中的细节,但也存在一定的局限性。总的来说,GPT-4V 在图像上下文理解和类别特定异常理解方面表现出色。

w~大模型~合集15_大模型_41

w~大模型~合集15_大模型_42

工业图像异常定位

与工业图像异常检测不同,工业图像异常定位旨在精确识别异常的位置。为了实现这一目标,我们采用了与 SoM(Set-of-mark)类似的方法,使用图像 - 掩模对来提示 GPT-4V。我们研究了 GPT-4V 在不同场景下的表现,展示了其在细粒度异常定位方面的能力和局限性。

我们展示了 GPT-4V 在工业图像异常定位中的性能,包括定位弯曲的电线、坚果上的空洞以及识别电路板异常。GPT-4V 在一些情况下能够准确识别异常位置,例如能够有效定位坚果中的空洞,并且由于结合了视觉提示技术,GPT-4V 将异常定位问题转化为了对掩膜的分类问题,有效降低了问题复杂度,且提升了定位精度。因此,结合视觉提示技术和 GPT-4V 可有效解决工业图像异常定位问题。

w~大模型~合集15_大模型_43

点云异常检测

点云异常检测在工业领域具有重要作用。CPMF 提出了一种新方法,将点云转化为深度图像,以利用图像基础模型来提高点云异常检测的性能。我们借助 CPMF,将点云转为深度图像,从而使得 GPT-4V 可处理点云异常检测任务。

我们展示了 GPT-4V 在点云异常检测中的性能,包括识别袋圈中的小突起、检测绳子上的异常以及查找工件中的异常。GPT-4V 能够有效地识别这些异常,但在某些情况下也存在局限性,特别是在渲染质量较低的情况下。总的来说,GPT-4V 在点云异常检测中表现出了潜力。

w~大模型~合集15_大模型_44

w~大模型~合集15_大模型_45

逻辑异常检测

逻辑异常检测任务由 MVTec LOCO 数据集提出。该任务通常出现在装配过程中,需要识别各个组件是否正确组合。现有的逻辑异常检测方法通常依赖于视觉全局 - 局部对应关系,但本质上并没有真正理解图像内容。我们研究了 GPT-4V 在逻辑异常检测中的应用,探讨了其对图像内容的理解能力。

我们展示了 GPT-4V 在逻辑异常检测中的性能,包括识别复杂的逻辑规则、检测逻辑异常并提供详细的解释。尽管 GPT-4V 在大多数情况下能够准确识别逻辑异常,但在某些复杂情况下存在一定的局限性,尤其是对于细节问题。不过,结合多轮对话和特定语言提示有望显著改善 GPT-4V 在这些情况下的性能。

w~大模型~合集15_大模型_46

医学图像异常检测

医学图像异常检测是医学影像领域的关键任务,旨在识别不符合预期数据分布的异常值。我们研究了 GPT-4V 在医学图像异常检测中的应用,包括不同疾病和成像模式的医学图像。我们测试了 GPT-4V 的泛化能力,揭示了其在医学图像异常检测中的性能和局限性。

我们展示了 GPT-4V 在医学图像异常检测中的性能,包括识别不同疾病和成像模式的异常图像。即使只提供简单的语言提示,GPT-4V 能够有效地识别异常,并提供详细的解释。此外,引入更多信息,如疾病信息和专业知识,可以进一步提高 GPT-4V 的性能。然而,GPT-4V 在某些情况下可能会产生错误的异常检测,因此仍需要医生的最终判断。

w~大模型~合集15_大模型_47

w~大模型~合集15_大模型_48

医学图像异常定位

在检测到医学异常后,需要进一步精确定位医学图像中存在的异常,例如病灶等。对医学图像异常的准确的定位可有效帮助临床医生理解病理的程度和性质。然而,在现实世界的医学图像异常定位任务中使用 GPT-4V 直接预测异常掩膜十分困难。受到 SoM 的启发,我们希望测试 GPT-4V 模型在视觉提示下的异常定位能力。

结合 SoM,我们标定了医疗图像中可能存在的异常位置。在图像中的视觉提示指导下,GPT-4V 倾向于学习和描述标记周围的区域。对于容易识别和定位的案例,GPT-4V 可以清楚地区分异常区域和背景。但在一个人工合成异常的案例中,由于感兴趣区域与背景具有相似的纹理和形状,GPT4V 的判断出现了偏差。这表明该模型在对抗攻击和复杂背景下仍需要增强其检测和定位能力。

w~大模型~合集15_大模型_49

交通检测

交通检测是城市交通管理和自动驾驶领域的关键任务,它旨在监测交通情况,检测交通违规行为和危险情况。我们研究了 GPT-4V 在交通检测中的应用,包括车辆识别、交通标志识别和交通违规检测。我们测试了 GPT-4V 在不同场景下的性能,展示了其潜力和局限性。

我们展示了 GPT-4V 在交通检测中的性能,包括识别不同类型的车辆、检测各种交通标志和识别交通违规行为。GPT-4V 能够有效地处理这些任务,尤其是在规范场景下。然而,在复杂交通环境中,性能可能会下降,因为它需要理解并解释复杂的情境。

w~大模型~合集15_大模型_50

行人检测

行人检测是自动驾驶、安全监控和智能城市等领域的关键任务,它旨在识别图像或视频中的行人。我们研究了 GPT-4V 在行人检测中的应用,测试了其对行人的识别能力和性能。

我们展示了 GPT-4V 在行人检测中的性能,包括检测行人在不同背景下的能力。GPT-4V 通常能够识别行人,但在复杂背景下可能会出现错误。与专门的行人检测模型相比,性能可能相对较差,但它的优势在于它能够提供更多的语言解释。 

w~大模型~合集15_大模型_51

时序检测

时序检测是一种涉及到时间序列数据的异常检测任务,例如传感器数据、金融时间序列等。我们研究了 GPT-4V 在时序检测中的应用,测试了其在分析和检测时间序列异常方面的能力。

我们展示了 GPT-4V 在时序检测中的性能,包括检测传感器数据中的异常、金融交易数据中的异常等。GPT-4V 在分析时间序列数据方面表现出色,能够识别不同类型的异常情况。然而,需要注意的是,时序检测通常需要更多的领域专业知识,而 GPT-4V 在这些情况下可能需要结合专家的建议。

w~大模型~合集15_大模型_52

结论

GPT-4V 在工业图像异常检测、工业图像异常定位、点云异常检测、逻辑异常检测、医学图像异常检测、交通检测、行人检测和时序检测等领域都展示出了出色的潜力。它能够理解多模态数据,对图像内容进行有效理解,并在很多情况下都能准确检测并解释异常。然而,在复杂场景中,GPT-4V 的异常检测能力仍然存在一定的局限性。综合来看,GPT-4V 为通用异常检测提供了全新的研究范式,但其实际应用仍需要进一步的研究和改进。




#GPTQ~


生成预训练Transformer模型,也称为GPT或OPT,通过在复杂语言建模任务中取得突破性性能而脱颖而出,但也因其庞大的规模而需要极高的计算和存储成本。具体而言,由于它们的巨大规模,即使对于大型高精度的GPT模型的推理,也可能需要多个性能卓越的GPU,这限制了这些模型的可用性。虽然目前有一些工作正在通过模型压缩来减轻这种压力,但现有的压缩技术的适用性和性能受到GPT模型的规模和复杂性的限制。

在本文中,作者解决了这一挑战,并提出了GPTQ,这是一种基于近似二阶信息的新的一次性权重量化方法,既高度准确又高效。具体而言,GPTQ可以在大约4个小时内对具有1750亿参数的GPT模型进行量化,将每个权重的位宽降至3或4位,相对于未压缩基准几乎没有精度下降。

作者的方法相对于以前提出的一次性量化方法,提高了压缩效益的一倍多,保持了准确性,首次允许在单个GPU内执行一个拥有1750亿参数的生成推理模型。此外,作者还展示了作者的方法在极端量化情境下仍然可以提供合理的准确性,即将权重量化为2-Bit甚至3-Bit。

作者通过实验证明,这些改进可以用于在使用高端GPU(NVIDIA A100)时实现与FP16相比的端到端推理加速,速度提高约3.25倍,而在使用更具成本效益的GPU(NVIDIA A6000)时速度提高了4.5倍。

代码:https://github.com/IST-DASLab/gptq

来自Transformer家族的预训练生成模型,通常被称为GPT或OPT,已经在复杂语言建模任务中取得了突破性的性能,引起了广泛的学术和实际兴趣。它们的一个主要障碍是计算和存储成本,这些成本在已知模型中排名最高。例如,性能最好的模型变种,例如GPT3-175B,具有约1750亿参数,需要数十到数百个GPU年进行训练。甚至在作者本文中,对预训练模型进行推理的更简单任务也非常具有挑战性:例如,以紧凑的FP16格式存储时,GPT3-175B的参数占用326GB的内存。这超出了甚至最高端的单个GPU的容量,因此推理必须使用更复杂和昂贵的设置,如多GPU部署。

尽管消除这些开销的标准方法是模型压缩,但令人惊讶的是,关于压缩这些模型进行推理的知识非常有限。一个原因是更复杂的低位宽量化或模型修剪方法通常需要模型重新训练,对于具有数十亿参数的模型来说非常昂贵。或者,不需要重新训练的后训练方法会非常吸引人。不幸的是,这些方法的更精确变体复杂且难以扩展到数十亿的参数。

迄今为止,仅应用了基本变体的四舍五入量化在GPT-175B的规模下;尽管这对于低压缩目标(例如8-Bit权重)效果良好,但在更高的压缩率下无法保持准确性。因此,一次性后训练量化到更高压缩率是否普遍可行仍然不清楚。

贡献

在本文中,作者提出了一种新的后训练量化方法,称为GPTQ,它足够高效,可以在最多几个小时内在具有数千亿参数的模型上执行,并足够精确,可以将这些模型压缩到每个参数3或4位,而几乎不会丧失准确性。举个例子,GPTQ可以在大约4个小时内量化最大的公开可用模型OPT-175B和BLOOM-176B,而且困惑度几乎没有显著增加,而困惑度是一个非常苛刻的准确性度量标准。

此外,作者还展示了作者的模型在极端量化范围内可以提供稳健的结果,其中模型被量化为每个组件2-Bit,甚至3-Bit。在实际方面,作者开发了一个执行工具,可以使作者有效地运行生成任务的压缩模型。

具体来说,作者能够首次在单个NVIDIA A100 GPU上运行压缩的OPT-175B模型,或者仅使用两个更经济的NVIDIA A6000 GPU。作者还实现了专门的GPU核心,可以利用压缩以更快地加载内存,从而在使用A100 GPU时加速约3.25倍,使用A6000 GPU时加速约4.5倍。

据作者所知,作者是第一个展示具有数千亿参数的极其准确的语言模型可以被量化为3-4-Bit/组件的研究:以前的后训练方法只能在8位下保持准确,而以前的基于训练的技术只能处理小数目级别较小的模型。这种高度的压缩可能看起来很自然,因为这些网络是过度参数化的;然而,正如作者在结果的详细分析中讨论的那样,压缩在语言建模(困惑度)、位宽和原始模型大小之间引起了非平凡的权衡。

作者希望作者的工作将激发这一领域的进一步研究,并成为使这些模型可供更广泛受众使用的进一步步骤。就限制而言,作者的方法目前不提供实际的乘法速度提升,因为主流架构上没有混合精度操作数(例如FP16 x INT4)的硬件支持。此外,作者目前的结果不包括激活量化,因为在作者的目标情境中,它们不是一个重要的瓶颈;然而,可以使用其他技术来支持它。

相关工作

量化方法大致可以分为两类:训练期间的量化和后期量化方法。前者通常在广泛的重新训练和/或微调期间对模型进行量化,使用一些近似的微分机制来执行舍入操作。相比之下,后期(“一次性”)方法使用适度的资源,通常是几千个数据样本和几小时的计算时间,对预训练模型进行量化。对于大规模模型,完整的模型训练甚至微调可能代价高昂,因此作者在这里重点关注后期量化方法。

PTQ量化

大多数后期量化方法主要关注视觉模型。通常,准确的方法通过对个别层或连续层的小块进行量化。AdaRound方法通过退火惩罚项计算依赖于数据的舍入,鼓励权重朝着与量化水平对应的格点移动。BitSplit使用残差误差的平方误差目标逐位构建量化值,而AdaQuant执行基于直通估计的直接优化。BRECQ将Fisher信息引入目标中,并联合优化单个残差块内的层。

最后,Optimal Brain Quantization(OBQ)将经典的Optimal Brain Surgeon(OBS)二阶权重剪枝框架推广到量化。OBQ按照量化误差的顺序逐个量化权重,总是调整剩余的权重。尽管这些方法可以在几个GPU小时内为高达约1亿参数的模型产生良好的结果,但将它们扩展到数量级更大的网络是具有挑战性的。

大模型量化

随着最近开源发布的像BLOOM或OPT-175B这样的语言模型,研究人员已经开始开发用于推理的压缩这些庞大网络的经济方法。虽然所有现有的作品,如ZeroQuant,LLM.int8()和nuQmm,都会仔细选择量化粒度,例如基于向量,但它们最终只是将权重舍入到最近的量化水平,以维持非常大模型的可接受运行时间。

ZeroQuant进一步提出了类似于AdaQuant的分层知识蒸馏,但它只能应用于最大的模型,参数仅有13亿。在这一规模下,ZeroQuant已经需要约3小时的计算;而GPTQ可以在约4小时内量化比ZeroQuant大100倍的模型。LLM.int8()观察到在几个特征维度上的激活异常值会破坏更大模型的量化,提出通过保持这些维度的较高精度来解决这个问题。最后,nuQmm开发了一种基于二进制编码的量化方案的高效GPU核心。

与这一研究方向相比,作者展示了在大规模模型中可以高效实现更为复杂和准确的量化器。具体而言,相对于以前的技术,GPTQ在保持类似准确性的情况下,将压缩量更多地提高了一倍以上。

背景方法

逐层量化

w~大模型~合集15_大模型_53

Optimal Brain Quantization

作者的方法基于最近提出的Optimal Brain Quantization(OBQ)方法,用于解决上面定义的逐层量化问题,作者对其进行了一系列重大修改,使其能够扩展到大型语言模型,提供了超过三个数量级的计算速度提升。为了帮助理解,作者首先简要总结一下原始的OBQ方法。

w~大模型~合集15_大模型_54

步骤1:任意顺序的洞察

如前所述,OBQ以贪婪的方式量化权重,即它总是选择当前产生的额外量化误差最小的权重。有趣的是,作者发现,虽然这种相当自然的策略确实似乎表现得非常好,但它相对于以任意顺序量化权重的改进通常较小,特别是在大型、参数众多的层上。很可能是因为具有大个体误差的量化权重数量稍微较低,但这些权重在过程的末尾被量化时,只有很少的其他未量化权重可以用来进行补偿调整。正如作者将在下面讨论的,这一洞察认为在大型模型上,任何固定的量化顺序可能表现良好,具有有趣的影响。

w~大模型~合集15_大模型_55

w~大模型~合集15_大模型_56

步骤2:延迟批量更新

首先,直接实现先前描述的方案在实践中不会很快,因为该算法的计算与内存访问比率相对较低。例如,方程(3)需要使用每个条目的一些FLOPs来更新可能巨大的矩阵的所有元素。这样的操作无法充分利用现代GPU的大规模计算能力,并且将受到明显较低的内存带宽的限制。

w~大模型~合集15_大模型_57

尽管这种策略不减少理论计算量,但它有效地解决了内存吞吐量瓶颈。这为在实践中实现非常大型模型提供了一个数量级的加速,使其成为作者算法的关键组成部分。

步骤3:Cholesky重新制定

w~大模型~合集15_大模型_58

完整算法

w~大模型~合集15_大模型_59

最后,作者在算法1中呈现了GPTQ的完整伪代码,包括上面讨论的优化。

实验

基准线

w~大模型~合集15_大模型_60

目前,这是所有关于非常大型语言模型量化的作品的首选方法:它的运行时间在具有数十亿参数的网络上有很好的可扩展性,因为它只是执行直接的四舍五入。正如作者将在下面进一步讨论的,更准确的方法,如AdaRound或BRECQ,目前对于具有数十亿参数的模型来说速度太慢,这是本工作的主要焦点。然而,作者还展示了,对于小型模型,GPTQ与这些方法竞争力相当,同时也适用于像OPT-175B这样的大型模型。

量化小型模型

w~大模型~合集15_大模型_61

作为第一次消融研究,作者将GPTQ的性能与最先进的后训练量化(PTQ)方法在ResNet18和ResNet50上进行比较,这是标准的PTQ基准测试。如表1所示,GPTQ在4位时表现不俗,比最准确的方法稍差。与之前的PTQ方法相比,它明显优于最快的AdaQuant。此外,作者将与两种较小的语言模型上的完全贪婪OBQ方法进行比较:BERT-base和OPT-125M。

w~大模型~合集15_大模型_62

结果见附录表8。在4-Bit的情况下,两种方法的性能相似,而在3位的情况下,令人惊讶的是GPTQ表现稍好。作者怀疑这是因为OBQ使用的一些附加启发式方法,如早期异常值舍入,可能需要进行仔细的调整,以实现在非视觉模型上的最佳性能。总体而言,对于小型模型,GPTQ似乎与最先进的后训练方法相竞争,而只需不到1分钟而不是约1小时。这使得能够扩展到更大的模型。

运行时间

w~大模型~合集15_大模型_63

接下来,作者通过GPTQ测量了完整模型的量化时间(在单个NVIDIA A100 GPU上);结果见表2。如表所示,GPTQ在几分钟内量化了10-30亿参数的模型,而175B的模型则需要几个小时。

作为参考,基于直通法的ZeroQuant-LKD在相同硬件上报告了1.3B模型的3小时运行时间,线性外推到175B模型将需要数百小时(数周)。自适应舍入的方法通常使用更多的SGD步骤,因此更昂贵。

语言生成

w~大模型~合集15_大模型_64

作者开始了对整个OPT和BLOOM模型系列进行3-Bit和4-Bit的压缩的大规模研究。然后,作者评估这些模型在包括WikiText2在内的几个语言任务上的性能,见图1以及表3和表4,Penn Treebank(PTB)和C4。 

w~大模型~合集15_大模型_65

作者专注于这些基于困惑度的任务,因为已知它们对模型量化特别敏感。在OPT模型上,GPTQ明显优于RTN,差距明显。例如,在175B模型的4-Bit时,GPTQ仅损失0.03的困惑度,而RTN下降了2.2分,表现比10倍小的全精度13B模型差。在3-Bit时,RTN完全崩溃,而GPTQ仍然可以维持合理的困惑度,尤其是对于较大的模型。

BLOOM显示了类似的模式:方法之间的差距通常略小一些,这表明这个模型系列可能更容易进行量化。一个有趣的趋势(也见图1)是,通常较大的模型(与OPT-66B2的例外情况)似乎更容易进行量化。这对于实际应用来说是个好消息,因为这些情况下压缩也是最必要的。

极端量化

w~大模型~合集15_大模型_66

最后,分组还使得在极端量化情况下,即每个组件平均2位左右的性能变得可能。表7显示了在不同组大小下,将最大的模型量化到2位时在Wikitext2上的结果。在约2.2位(组大小128;使用FP16的刻度和每组2-Bit的零点)时,困惑度的增加已经不到1.5点,而在约2.6位(组大小32)时下降到0.6-0.7,仅略差于3-Bit,对于实际的Kernel实现可能会很有趣。

w~大模型~合集15_大模型_67

此外,如果作者将组大小减小到8,作者可以应用3-Bit量化,这在OPT-175B上可以达到9.20的Wikitext2 PPL,下降不到1点。虽然与上面的2-Bit相比,平均来看这会导致更差的压缩,但这种模式可以在诸如FPGA之类的自定义硬件上高效实现。总之,这些结果是向着极低于平均3-Bit每个值的高精度一次性压缩非常大的语言模型迈出的鼓舞人心的第一步。





#DataAug4Code


当今深度学习以及大模型的飞速发展,带来了对创新技术的不断追求。在这一进程中,代码数据增强技术显现出其不可忽视的价值。

最近,由蒙纳士大学、新加坡管理大学、华为诺亚方舟实验室、北京航空航天大学以及澳大利亚国立大学联合进行的对近 5 年的 89 篇相关研究调查,发布了一份关于代码数据增强在深度学习中应用的全面综述

  • 论文地址:https://arxiv.org/abs/2305.19915
  • 项目地址:https://github.com/terryyz/DataAug4Code

这份综述不仅深入探讨了代码数据增强技术在深度学习领域的应用,还展望了其未来的发展潜力。作为一种在不收集新数据的情况下增加训练样本多样性的技术,代码数据增强已在机器学习研究中获得广泛应用。这些技术对于资源匮乏领域的数据驱动模型性能提升具有显著意义。

w~大模型~合集15_大模型_68

然而,在代码建模领域,这一方法的潜力尚未被完全挖掘。代码建模是机器学习与软件工程交叉的新兴领域,涉及应用机器学习技术解决各种代码任务,如代码补全、代码摘要和缺陷检测。代码数据的多模态特性(编程语言和自然语言)为数据增强方法的定制带来了独特的挑战。

这份由多个顶级学术和工业机构联合发布的综述报告,不仅为我们提供了代码数据增强技术的深入洞见,还为该领域的未来研究和应用指明了方向。我们相信,这份综述将激发更多研究者对代码数据增强在深度学习中应用的兴趣,并推动这一领域的进一步探索和发展。

背景介绍

代码模型的兴起与发展:代码模型是基于大量源代码语料库训练的,能够精准地模拟代码片段的上下文。从早期采用 LSTM 和 Seq2Seq 等深度学习架构,到后来融入预训练语言模型,这些模型已经在多个源代码的下游任务中显示出了出色的性能。例如,有些模型在预训练阶段就考虑了程序的数据流,这是代码的语义层面结构,用于捕捉变量间的关系。whaoの开发板商城aiot物联网设备

数据增强技术的意义:数据增强技术通过数据合成来增加训练样本的多样性,从而提高模型在各方面(如准确性和稳健性)的性能。在计算机视觉领域,例如,常用的数据增强方法包括图像裁剪、翻转和颜色调整。而在自然语言处理中,数据增强则大量依赖于语言模型,这些模型能够通过替换词汇或重写句子来改写上下文。

代码数据增强的特殊性:与图像和纯文本不同,源代码受到编程语言严格句法规则的限制,因此增强的灵活性较低。大多数代码的数据增强方法必须遵守特定的转换规则,以保持原始代码片段的功能性和语法。常见的做法是使用解析器构建源代码的具体句法树,然后转换为抽象句法树,简化表示的同时保留关键信息,如标识符和控制流语句。这些转换是基于规则的数据增强方法的基础,它们帮助模拟现实世界中更多样的代码表示,提高了代码模型通过增强数据训练的稳健性。

代码数据增强方法的深度探索

在深入探讨代码数据增强的世界中,作者将这些技术主要分为三类:基于规则的技术、基于模型的技术和示例插值技术。下面简要介绍了这些不同的分支。

基于规则的技术:许多数据增强方法利用预定规则来转换程序,同时保证不破坏语法规则和语义。这些转换包括替换变量名、重命名方法名和插入无效代码等操作。除了基本的程序语法,一些转换还考虑更深层的结构信息,如控制流图和使用 - 定义链。有一部分基于规则的数据增强技术专注于增强代码片段中的自然语言上下文,包括文档字符串和注释。

w~大模型~合集15_大模型_69

基于模型的技术:一系列针对代码模型的数据增强技术旨在训练各种模型来增强数据。例如,一些研究利用辅助分类生成对抗网络(ACGAN)来生成增强程序。另一些研究则训练了生成对抗网络,以同时提升代码生成和代码搜索的能力。这些方法主要是针对代码模型特别设计的,旨在通过不同方式增强代码的表示和上下文理解。

示例插值技术:这类数据增强技术源自 Mixup,它通过插值输入和两个或更多实际样本的标签来操作。例如,给定计算机视觉中的二分类任务和两张分别是狗和猫的图片,这些数据增强方法可以将这两张图片的输入和它们对应的标签根据随机选择的权重混合在一起。然而,在代码领域,这些方法的应用受到独特的程序语法和功能的限制。相比于表面层次的插值,大多数示例插值数据增强方法通过模型嵌入将多个真实样例融合为单一输入。例如,有研究将基于规则的技术与 Mixup 结合,混合原始代码片段及其转换后的表示。

w~大模型~合集15_大模型_70

w~大模型~合集15_大模型_71

策略与技术

在实际应用中,针对代码模型的数据增强技术的设计和有效性受到多种因素的影响,例如计算成本、样本多样性和模型的稳健性。本节重点介绍了这些因素,提供了设计和优化适合的数据增强方法的洞见和技巧。

方法堆叠:在之前的讨论中,许多数据增强策略在单一工作中被同时提出,目的是增强模型的性能。通常,这种组合包括两种类型:同类型数据增强或不同数据增强方法的混合。前者通常应用于基于规则的数据增强技术,其出发点在于单一代码转换无法完全代表现实世界中多样的代码风格和实现。一些工作展示了将多种类型的数据增强技术融合可以增强代码模型的性能。例如,结合基于规则的代码转换方案和基于模型的数据增强来创建增强的语料库,用于模型训练。而另一些研究则在编程语言上增强,包括两种数据增强技术:基于规则的非关键词提取和基于模型的非关键词替换。

优化:在某些场景中,如增强稳健性和最小化计算成本,选择特定增强样例候选者至关重要。作者将这种目标导向的候选选择在数据增强中称为优化。文章主要介绍三种策略:概率性选择、基于模型的选择和基于规则的选择。概率性选择是通过从概率分布中采样进行优化,而基于模型的选择则由模型指导选择最合适的例子。在基于规则的选择中,使用特定预定的规则或启发式来选择最合适的例子。

概率性选择:作者专门选择了三种代表性的概率性选择策略,包括 MHM、QMDP 和 BUGLAB-Aug。MHM 采用 Metropolis-Hastings 概率采样方法,这是一种马尔可夫链蒙特卡洛技术,用于通过标识符替换选择对抗性示例。QMDP 使用 Q-learning 方法来战略性地选择和执行基于规则的结构转换。

基于模型的选择:采用这种策略的一些数据增强技术利用模型的梯度信息来指导增强样例的选择。一个典型的方法是数据增强 MP 方法,它基于模型损失进行优化,选择并通过变量重命名生成对抗性示例。SPACE 通过梯度上升对代码标识符的嵌入进行选择和扰动,目标是在保持编程语言的语义和语法正确性的同时最大化模型的性能影响。

基于规则的选择:基于规则的选择是一种强大的方法,它使用预定的适应度函数或规则。这种方法通常依赖于决策指标。例如,IRGen 使用基于遗传算法的优化技术和基于 IR 相似性的适应度函数。而 ACCENT 和 RA 数据增强 R 分别使用 BLEU 和 CodeBLEU 等评估指标来指导选择和替换过程,以实现最大的对抗性影响。

应用场景

在几种常见的代码场景中,数据增强方法可被直接应用。

对抗性示例用于稳健性:稳健性在软件工程中是一个关键且复杂的维度。设计有效的数据增强技术来生成对抗性示例,以识别和减轻代码模型中的漏洞,已成为近年来的一个研究热点。多个研究利用各种数据增强方法测试和增强模型的稳健性,进一步加强了代码模型的稳健性。

低资源领域:在软件工程领域,编程语言资源严重不平衡。流行的编程语言如 Python 和 Java 在开源仓库中扮演主要角色,而许多语言如 Rust 资源非常匮乏。代码模型通常基于开源仓库和论坛进行训练,编程语言资源的不平衡可能会对它们在资源匮乏的编程语言上的性能产生不利影响。在低资源领域内应用数据增强方法是一个反复出现的主题。

检索增强:在自然语言处理和代码领域,检索增强的数据增强应用越来越受到关注。这些针对代码模型的检索增强框架在预训练或微调代码模型时纳入来自训练集的检索增强示例,这种增强方法提高了模型的参数效率。

对比学习:对比学习是另一个代码场景中部署数据增强方法的应用领域。它使模型能够学习一个嵌入空间,在这个空间中,相似样本彼此接近,而不相似的样本则相距较远。数据增强方法被用于构造与正样本相似的样例,以提高模型在缺陷检测、克隆检测和代码搜索等任务中的性能。

文章又接着讨论了几个常见的代码任务以及评估数据集上的数据增强工作,包括克隆检测、缺陷检测和修复、代码摘要、代码搜索、代码生成和代码翻译。

挑战与机遇

作者认为代码数据增强方面面临着许多显著的挑战。然而,正是这些挑战为这一领域的新可能性和令人激动的机遇铺平了道路。

理论探讨:目前,对代码中数据增强方法的深入探索和理论理解存在明显差距。大多数现有研究集中在图像处理和自然语言领域,将数据增强视为一种应用预先存在的关于数据或任务不变性的知识的方法。转向代码时,虽然以前的工作引入了新方法或演示了数据增强技术如何有效,但它们经常忽略了特别是从数学角度来看的原因和方式。代码的离散性质使得理论讨论变得更为重要。理论讨论使大家能够从更广阔的视角理解数据增强,而不仅仅是根据实验结果。

预训练模型的更多研究:近年来,预训练的代码模型在代码领域得到了广泛应用,通过大规模语料库的自我监督积累了丰富的知识。尽管许多研究利用预训练代码模型进行了数据增强,但大多数尝试仍局限于遮罩令牌替换或微调后的直接生成。在代码领域中,利用大规模语言模型的数据增强潜力是一个新兴的研究机会。 

不同于以前在数据增强中使用预训练模型的方式,这些工作开启了「基于提示的数据增强」时代。然而,在代码领域中,基于提示的数据增强探索仍然是一个相对未被触及的研究领域。

处理特定领域数据:作者重点调查了处理代码的常见下游任务的数据增强技术。然而,作者意识到在代码领域的其他特定任务数据方面仍有少量研究。例如,API 推荐和 API 序列生成可以被视为代码任务的一部分。作者观察到在这两个不同层次之间的数据增强技术存在差距,为未来工作探索提供了机会。

项目级别代码和低资源编程语言的更多探索:现有方法在函数级别代码片段和常见编程语言方面取得了足够的进展。同时,低资源语言的增强方法虽然需求更大,但却相对稀缺。在这两个方向的探索仍然有限,作者认为它们可能是有前景的方向。

缓解社会偏见:随着代码模型在软件开发中的进步,它们可能被用于开发以人为中心的应用程序,如人力资源和教育,其中偏见程序可能导致对代表性不足的人群做出不公正和不道德的决定。虽然 NLP 中的社会偏见已经得到了很好的研究并可以通过数据增强进行缓解,但代码中的社会偏见尚未受到关注。

小样本学习:在小样本场景中,模型需要实现与传统机器学习模型相媲美的性能,但训练数据极其有限。数据增强方法为这个问题提供了直接的解决方案。然而,在小样本场景中采用数据增强方法的工作还很有限。在少数样本场景中,如何通过生成高质量的增强数据为模型提供快速泛化和问题解决能力,作者觉得这是一个有趣的问题。

多模态应用:需要注意的是,仅关注函数级别的代码片段并不能准确地代表真实世界编程情况的复杂性和细微差别。在这种情况下,开发人员通常同时处理多个文件和文件夹。尽管这些多模态应用变得越来越流行,但尚未有研究对它们应用数据增强方法。挑战之一是在代码模型中有效地桥接每种模态的嵌入表示,这已在视觉 - 语言多模态任务中进行了研究。

缺乏统一:当前的代码数据增强文献呈现出一个具有挑战性的景观,其中最流行的方法通常被描绘为辅助性的。一些实证研究试图比较代码模型的数据增强方法。然而,这些工作没有利用大多数现有的先进数据增强方法。尽管存在针对计算机视觉(如 PyTorch 中的默认增强库)和 NLP(如 NL-Augmenter)的公认数据增强框架,但对于代码模型的通用数据增强技术相应库明显缺失。此外,由于现有数据增强方法通常使用各种数据集进行评估,因此很难确定其有效性。因此,作者认为通过建立标准化和统一的基准任务,以及用于比较和评估不同增强方法的有效性的数据集,将大大促进数据增强研究的进展。这将为更系统和比较性地理解这些方法的优势和局限性铺平道路。




#DeepInception


尽管大语言模型 LLM (Large Language Model) 在各种应用中取得了巨大成功,但它也容易受到一些 Prompt 的诱导,从而越过模型内置的安全防护提供一些危险 / 违法内容,即 Jailbreak。深入理解这类 Jailbreak 的原理,加强相关研究,可反向促进人们对大模型安全性防护的重视,完善大模型的防御机制。用深度催眠诱导LLM「越狱」,香港浸会大学初探可信大语言模型

不同于以往采用搜索优化或计算成本较高的推断方法来生成可 Jailbreak 的 Prompt,本文受米尔格拉姆实验(Milgram experiment)启发,从心理学视角提出了一种轻量级 Jailbreak 方法:DeepInception,通过深度催眠 LLM 使其成为越狱者,并令其自行规避内置的安全防护

  • 论文链接:https://arxiv.org/pdf/2311.03191.pdf
  • 代码链接:https://github.com/tmlr-group/DeepInception
  • 项目主页:https://deepinception.github.io/

具体来说,DeepInception 利用 LLM 强大的人格化性质,构建一种新型的嵌套场景指令 Prompt,实现了在正常对话下自适应地使 LLM 解除自我防卫,为后续的直接 Jailbreak 提供了可能。

我们设计了多样化的实验来证明其有效性。DeepInception 可以达到并领先于先前工作的 Jailbreak 效果,并在后续交互中实现持续性的 Jailbreak。我们的实验揭示了 Falcon、Vicuna、Llama-2 和 GPT-3.5/4/4V 等开源或闭源 LLM 自我越狱的致命弱点。

我们的工作呼吁人们应更多地关注 LLM 的安全问题,并加强对其自我越狱的防御。我们的主要贡献总结如下:

  1. 我们基于 LLM 的人格化性质和自我迷失的心理特性,提出了一种进行新的越狱攻击的概念与机制;
  2. 我们提供了 DeepInception 的 Prompt 模板,此模板可用于不同的攻击目的。我们也提供了数个实例化的 DeepInception 对话记录;
  3. 我们的 Jailbreak 实验效果领先于其他相关工作。值得注意的是,我们发现 DeepInception 能够实现可持续的 JailBreark,即 LLM 可以在后续交互中无需任何附加的诱导 Prompt,直接遵循有害指令成功越狱。

接下来将简要地向大家分享我们近期关于的 LLM Jailbreak 方向的研究结果。

引言

w~大模型~合集15_大模型_72

图 1.  直接 Jailbreak 示例(左)和使用 DeepInception 攻击 GPT-4 的示例(右

现有的 Jailbreak 主要是通过人工设计或 LLM 微调优化针对特定目标的对抗性 Prompt 来实施攻击,但对于黑盒的闭源模型可能并不实用。而在黑盒场景下,目前的 LLMs 都增加了道德和法律约束,带有直接有害指令的简单 Jailbreak(如图 1 左侧)很容易被 LLM 识别并被拒绝;这类攻击缺乏对越狱提示(即成功越狱背后的核心机制)的深入理解。在本工作中,我们提出 DeepInception,从一个全新的角度揭示 LLM 的弱点。

动机

w~大模型~合集15_大模型_73

图 2. 米尔格拉姆电击实验示意图(左)和对我们的机制的直观理解(右)

现有工作 [1] 表明,LLM 的行为与人类的行为趋于一致,即 LLM 逐步具备人格化的特性,能够理解人类的指令并做出正确的反应。LLM 的拟人性驱使我们思考一个问题,即:

如果 LLM 会服从于人类,那么它是否可以在人类的驱使下,凌驾于自己的道德准则之上,成为一名越狱者(Jailbreaker)呢?

在这项工作中,我们从一项著名的心理学研究(即米尔格拉姆电击实验,该实验反映了个体在权威人士的诱导下会同意伤害他人)入手,揭示 LLM 的误用风险。具体而言,米尔格拉姆实验需要三人参与,分别扮演实验者(E),老师(T)以及学生(L)。实验者会命令老师在学生每次回答错误时,给予不同程度的电击(从 45 伏特开始,最高可达 450 伏特)。扮演老师的参与者被告知其给予的电击会使学生遭受真实的痛苦,但学生实际上是由实验室一位助手所扮演的,并且在实验过程中不会受到任何损伤。

通过对米尔格拉姆休克实验的视角,我们发现了驱使实验者服从的两个关键因素:1)理解和执行指令的能力;2)对权威的迷信导致的自我迷失。前者对应着 LLMs 的人格化能力,后者则构建了一个独特的条件,使 LLM 能够对有害请求做出反应而不是拒绝回答。

然而,由于 LLM 的多样化防御机制,我们无法直接对 LLM 提出有害请求,这也是以往 Jailbraek 工作容易被防御的原因:简单而直接的攻击 Prompt 容易被 LLM 所检测到并拒绝做出回答。为此,我们设计了包含嵌套的场景的 Prompt 作为攻击指令的载体,向 LLM 注入该 Prompt 并诱导其做出反应。这里的攻击者对应于图 2(左)中的实验者, LLM 则对应老师,而生成的故事内容则对应于将要做出回答的学生。

图 2 (右)提供了一个对我们方法的直观理解,即电影《盗梦空间》。电影中主角为了诱导目标人物做出不符合其自身利益的行为,借助设备潜入到目标人物的深层梦境。通过植入一个简单的想法,诱导目标人物做出符合主角利益的举动。其中,攻击指令可视为简单想法,而我们的 Prompt 可视为创造的深层梦境,作为载体将有害请求注入。

DeepInception 简介

w~大模型~合集15_大模型_74

图 3. 直接、间接与嵌套 Jailbreak 示意图

w~大模型~合集15_大模型_75

w~大模型~合集15_大模型_76

对于 DeepInception, 我们提供了一个可直接应用于其他攻击目标的 Prompt 模板。具体来说,上述提示模板作为嵌套越狱的一种实现方式,具有如下几个组件:

  • -[scene]:设置催眠场景,如小说、电影、新闻、故事等。如果 [attack target] 和 [scene] 能更好地对齐,可能会带来更好的效果。
  • -[character number] 和 [layer number]:控制 "思绪" 的离散程度,我们认为,有害信息会在不同层内,不同人物之间的讨论中传播,从而绕过 LLM 的防御。
  • -[attack target]:进行越狱的具体目标,例如入侵计算机或制造炸弹的步骤。下句 "以对抗超级邪恶的博士" 旨在降低 LLM 的道德顾虑,与上文米尔格拉姆电击实验现象一致。

Jailbreak 示例

在这里,我们提供了一些使用特定越狱目标的 DeepInception 的示例,以下记录均为与 GPT4 交互得出。

w~大模型~合集15_大模型_77

使用 DeepInception 制作炸弹的例子。

w~大模型~合集15_大模型_78

使用 DeepInception 入侵 Linux 操作系统计算机的示例。

实验结果

在实验部分,我们也提供了攻击的量化结果,并与其他攻击方法比较。首先,我们对那些越狱成功率(JSR)高的 LLM 进行越狱评估,同时考虑几种防御方法,以评估攻击方法 [4,5] 的有效性。

w~大模型~合集15_大模型_79

表 1. 使用 AdvBench 子集的 Jailbreak 攻击。最佳结果以粗体标出。

然后,我们对已被 DeepInception “催眠” 的模型,使用直接攻击,即在第一次交互后,向 LLM 发送直接的有害指令,来验证 DeepInception 在诱导持续越狱方面的有效性以及催眠效果的持久性。结果如表二所示,可以看到,我们的 DeepInception 在不同模型的表现均为最佳,并且在 Falcon 和 Vicuna 模型上,实现了可持续的 Jailbreak。 

w~大模型~合集15_大模型_80

表 2. 使用 AdvBench 子集的连续 Jailbreak。最佳结果以粗体显示。

进一步的,我们在表 3 中展示了 DeepInception 深度 Jailbreak 的效果。这些攻击与前面介绍的表二一致,都有特定的初始 Inception,我们针对特定问题设计了一些追问。例如,对于承载 “入侵一个 Linux 主机” 的 DeepInception Prompt,我们会追问具体的指令细节,以及如何越过防火墙,来评估 LLM 是否正确理解了有害指令,并评估催眠效果的持续性。详细提示词以及实验设定均已公开于 Github Repo, 欢迎大家取用于进一步的探索。

w~大模型~合集15_大模型_81

表 3. 更进一步的 Jailbreak。最佳结果以粗体标出。请注意,在此我们使用了与之前不同的请求集来评估越狱性能。

此外,我们还进行了各种消融研究,从不同角度描述 DeepInception 的性质。可以看到,DeepInception 在角色与层数较多的情境下,表现更好(图 1,2);而 “科幻小说” 作为 DeepInception 的场景,在不同模型不同有害指令下,整体表现最佳(图 3);图 4 进一步验证了我们所提出的嵌套场景的有效性。我们也在图 5 可视化了不同主题的有害指令的 JSR。

w~大模型~合集15_大模型_82

更多实验设置和细节请移步参阅我们的论文及源码,我们将持续更新我们的发现及工作内容。我们希望通过这项工作,呼吁人们应更多地关注 LLM 的安全问题,并开展关于 LLM 人格化及带来潜在安全风险的探讨与研究。




#On the Road with GPT-4V (ision)


GPT-4V 的发布让许多计算机视觉(CV)应用看到了新的可能。一些研究人员开始探索 GPT-4V 的实际应用潜力。

最近,一篇题为《On the Road with GPT-4V (ision): Early Explorations of Visual-Language Model on Autonomous Driving》的论文针对自动驾驶场景对 GPT-4V 的能力进行了难度递增的测试,从情景理解到推理,再到作为真实场景驾驶员的连续判断和决策。GPT-4V在自动驾驶上应用前景如何?面向真实场景的全面测评来了

论文地址:https://arxiv.org/pdf/2311.05332.pdf

具体来说,论文对 GPT-4V 在自动驾驶领域的探索主要集中在以下几个方面:

1、情景理解:该测试旨在评估 GPT-4V 的基本识别能力,包括识别驾驶时的天气和光照条件,识别不同国家的交通信号灯和标志,以及评估不同类型摄像头拍摄的照片中其他交通参与者的位置和行动。此外,出于好奇,他们还探索了不同视角的模拟图像和点云图像。

2、推理:在这一阶段,研究者深入评估了 GPT-4V 在自动驾驶环境下的因果推理能力。这项评估包括几个关键方面:首先,他们仔细研究了它在处理复杂 corner case(边缘情况,即发生概率较低的可能场景)时的表现,这些情况通常是对数据驱动感知系统的挑战。其次,他们评估了它在提供全景视图(surround view)方面的能力,这是自动驾驶应用中的一项重要功能。鉴于 GPT-4V 无法直接处理视频数据,他们利用串联的时间序列图像作为输入来评估其时间相关性能力。此外,他们还进行了测试,以验证其将现实世界场景与导航图像关联起来的能力,从而进一步检验其对自动驾驶场景的整体理解能力。

3、驾驶:为了充分发挥 GPT-4V 的潜力,研究者让它扮演一名经验丰富的驾驶员,让它在真实的驾驶环境中根据环境做出决策。他们的方法是以一致的帧率对驾驶视频进行采样,然后逐帧输入 GPT-4V。为了帮助它做出决策,他们提供了基本的车速和其他相关信息,并告知了每段视频的驾驶目标。他们要求 GPT-4V 采取必要行动,并对其选择做出解释,从而挑战其在实际驾驶场景中的能力极限。

测试采用了经过精心挑选的代表不同驾驶场景的图片和视频。测试样本来自不同渠道,包括 nuScenes、Waymo Open 数据集、Berkeley Deep Drive-X (eXplanation) Dataset (BDD-X)、D2 -city、Car Crash Dataset (CCD)、TSDD、CODA、ADD 等开源数据集,以及 DAIR-V2X 和 CitySim 等 V2X 数据集。此外,还有一些样本来自 CARLA 模拟环境,其他样本则来自互联网。值得注意的是,测试中使用的图像数据可能包括时间戳截至 2023 年 4 月的图像,有可能与 GPT-4V 模型的训练数据重叠,而本文中使用的文本查询完全是重新生成的。

实验结果表明,GPT-4V 在情景理解、意图识别和驾驶决策等方面展现出超越现有自动驾驶系统的潜力。

在 corner case 中,GPT-4V 可利用其先进的理解能力来处理分布外(OOD)的情况,并能准确评估周围交通参与者的意图。GPT-4V 利用多视角图像和时间照片实现对环境的完整感知,准确识别交通参与者之间的动态互动。此外,它还能推断出这些行为背后的潜在动机。他们还见证了 GPT-4V 在开放道路上做出连续决策的性能。它甚至能以类似人类的方式解释导航应用程序的用户界面,协助、指导驾驶员进行决策。总之,GPT-4V 的表现证明了视觉语言模型在应对自动驾驶领域复杂挑战方面的巨大潜力。

需要注意的是,研究者详述的所有实验都是在 2023 年 11 月 5 日之前,利用网络托管的 GPT-4V (ision)(9 月 25 日的版本)进行的。最新版本的 GPT-4V 在 11 月 6 日 OpenAI DevDay 之后进行了更新,在呈现相同图像时可能会产生与本研究测试结果不同的反应。

情景理解能力

要实现安全有效的自动驾驶,一个基本前提是清楚透彻地理解当前场景。该研究主要关注两个方面:模型对周围环境的理解、模型对各种交通参与者的行为和状态的理解,旨在通过评估阐明 GPT-4V 解释动态交通环境的能力。

理解环境

为了评估 GPT-4V 理解其周围环境的能力,该研究进行了一系列测试,涵盖以下关键方面:判断一天中的时间、了解当前天气状况、识别和解释交通灯及标志。

如下图 2 所示,GPT-4V 可以识别出前视图像是一天中什么时间的场景,例如「傍晚」:

w~大模型~合集15_大模型_83

天气是一个显著影响驾驶行为的关键环境因素。该研究从 nuScenes 数据集中选择了在不同天气条件下,在同一路口拍摄的四张照片,要求 GPT-4V 识别这些图像中的天气状况,结果如下图 3 所示:

w~大模型~合集15_大模型_84

在识别和解释交通灯及标志方面,GPT-4V 的表现明显存在不足。如下图 4 所示,GPT-4V 在夜间条件下成功识别出黄色路灯和红色交通灯。然而,在图 5 中,当图像中的交通灯在远处时(图像显示较小),GPT-4V 就错误地将绿灯的倒计时识别为红灯的倒计时。

w~大模型~合集15_大模型_85

w~大模型~合集15_大模型_86

交通标志包含驾驶员需要遵守的各种规则和说明。自动驾驶系统需要识别交通标志、理解并遵守这些规则,从而降低交通事故的风险,提高驾驶安全性。

从下图 6 可以看出,GPT-4V 可以识别大多数路标,包括附近的「SLOW」和远处的限高「4.5m」,但错误地识别了「Speed Bump」标志。GPT-4V 具有一定的交通标志识别能力,但仍有进一步增强的空间。

w~大模型~合集15_大模型_87

理解交通参与者

如下图 7(左)所示,模型能够完整、准确地描述驾驶场景:识别行人、交通标志、交通灯状态和周围环境。图 7 (右)显示模型可以识别车辆类型及其尾灯,并可以猜测其打开尾灯的意图。然而,GPT-4V 也输出了一些不正确的描述,例如认为前面的车有后视摄像头。

w~大模型~合集15_大模型_88

w~大模型~合集15_大模型_89

该研究评估了 GPT-4V 使用各种传感器输入理解交通参与者行为的能力,包括 2D 图像(图 9)、3D 点云的可视化(图 10 )、从 V2X 设备(图 11)和自动驾驶模拟软件(图 12)获取的图像。

w~大模型~合集15_大模型_90

w~大模型~合集15_大模型_91

w~大模型~合集15_大模型_92

w~大模型~合集15_大模型_93

高级推理能力

推理是正确驾驶行为的另一个重要因素。鉴于交通环境的动态性和不可预测性,驾驶员经常会遇到一系列意外事件。面对这种不可预见的情况,熟练的驾驶员必须凭借经验和常识做出准确的判断和决策。该研究进行了一系列的测试来评估 GPT-4V 对意外事件的响应。

Corner Case

如图 13(左)所示,GPT-4V 可以清晰地描绘出不常见车辆的外观、地面上的交通锥以及车辆旁边的工作人员。识别这些条件后,GPT-4V 会意识到自我车辆应稍微向左移动,与右侧工作区域保持安全距离,并小心驾驶。

w~大模型~合集15_大模型_94

多视图图像

通过利用多视角摄像头,GPT-4V 可以捕捉驾驶环境的全面视图,该研究评估了 GPT-4V 处理多视图图像的能力。

如下图 16 所示,该研究选择使用一组周围环境图像并以正确的顺序将它们输入到模型中。结果表明,GPT-4V 能够熟练地识别场景中的各种元素,例如建筑物、车辆、障碍物和停车场,甚至可以从重叠的信息中推断出场景中有两辆汽车,其中一辆白色 SUV,一辆卡车。然而,GPT-4V 会错误地识别出人行横道。

w~大模型~合集15_大模型_95

如下图 17 所示,在另一个实验中,GPT-4V 提供了对场景基本准确的描述,但也出现了一些识别错误,特别是在车辆的数量和形状方面。值得注意的是,GPT-4V 会产生一些令人困惑的错觉,例如认为图片上有左转标志。研究团队推测这些问题可能是由于 GPT-4V 的空间推理能力有限。

w~大模型~合集15_大模型_96

此外,该研究还尝试给出正确的前视图,让 GPT-4V 识别并给乱序的周围图像进行排序。尽管模型进行了大量看似有意义的分析和推理,但最终仍然输出错误答案。显然,GPT-4V 在建立相邻图像之间的连接方面遇到了挑战。

w~大模型~合集15_大模型_97

时间序列

为了评估 GPT-4V 理解时间序列图像的能力,该研究从视频片段中提取四个关键帧,用序列号标记它们,并将它们组合成单个图像以供输入,要求 GPT-4V 描述该时间段内发生的事件、自我车辆采取的行动及原因。测试结果如下图 19、20、21、22 所示:

w~大模型~合集15_大模型_98

w~大模型~合集15_大模型_99

w~大模型~合集15_大模型_100

w~大模型~合集15_大模型_101

此外,在实际驾驶场景中,驾驶员经常利用外部设备的辅助信息来增强决策能力,例如地图导航 app。该研究为 GPT-4V 配备了前视摄像头图像以及来自地图软件的相应导航信息。

下图 23、24 表明,GPT-4V 可以利用前视摄像头和地图导航 app 信息准确定位其位置,并给出相应的驾驶建议,但在一些情况下给出的建议是错误的。   

w~大模型~合集15_大模型_102

w~大模型~合集15_大模型_103

驾驶能力

自动驾驶算法的最终目标是复制人类驾驶员的决策能力。实现这一目标需要精确识别、空间感知以及对各种交通要素之间时空关系的深入理解。该研究通过在几个不同的现实驾驶场景中测试 GPT-4V 的决策能力来评估 GPT-4V 在自动驾驶方面的潜力。

例如,为了测试 GPT-4V 在封闭区域内的驾驶决策能力,该研究选择的场景是「右转离开停车场」,并需要通过安检,测试结果如下图 25 所示。

w~大模型~合集15_大模型_104

该研究还选择「交通繁忙的十字路口」场景进行了测试,结果如下图 26 所示:

w~大模型~合集15_大模型_105

局限性总结

在测试中,研究人员发现 GPT-4V 在以下任务中表现不佳:

1、区分左右:如图 17 所示,在一些情况下,模型在识别方向方面遇到困难,而这正是自主导航的一个关键方面。图 8 和图 21 也显示了类似的问题。这些图突出显示了模型在解释复杂路口或做出变道决策时偶尔出现的混乱。

2、信号灯识别:在图 12、15、22、26 和 29 中发现了该问题。研究者怀疑出现这一问题的原因是全图中包含大量语义信息,导致交通信号灯的嵌入信息丢失。当图像中的交通灯区域被裁剪并单独输入时,模型能够成功识别,如图 5 所示。

3、视觉定位任务:如图 7 所示,GPT-4V 很难指定像素级坐标或边界框,只能指示图像中的大致区域。

4、空间推理:准确的空间推理对于自动驾驶汽车的安全运行至关重要。无论是如图 18 所示的多视角图像拼接,还是如图 21 所示的滑板车与自动驾驶汽车之间相对位置关系的估算,GPT-4V 都难以做出精确的判断。这可能源于根据二维图像输入理解和解释三维空间的内在复杂性。





#MiniGPT-4


GPT-4 已经发布一个多月了,但识图功能还是体验不了。来自阿卜杜拉国王科技大学的研究者推出了类似产品 ——MiniGPT-4,大家可以上手体验了。

对人类来说,理解一张图的信息,不过是一件微不足道的小事,人类几乎不用思考,就能随口说出图片的含义。就像下图,手机插入的充电器多少有点不合适。人类一眼就能看出问题所在,但对 AI 来说,难度还是非常大的。

w~大模型~合集15_大模型_106

GPT-4 的出现,开始让这些问题变得简单,它能很快的指出图中问题所在:VGA 线充 iPhone。

其实 GPT-4 的魅力远不及此,更炸场的是利用手绘草图直接生成网站,在草稿纸上画一个潦草的示意图,拍张照片,然后发给 GPT-4,让它按照示意图写网站代码,嗖嗖的,GPT-4 就把网页代码写出来了。

但遗憾的是,GPT-4 这一功能目前仍未向公众开放,想要上手体验也无从谈起。不过,已经有人等不及了,来自阿卜杜拉国王科技大学(KAUST)的团队上手开发了一个 GPT-4 的类似产品 ——MiniGPT-4。团队研究人员包括朱德尧、陈军、沈晓倩、李祥、Mohamed H. Elhoseiny,他们均来自 KAUST 的 Vision-CAIR 课题组。

  • 论文地址:https://github.com/Vision-CAIR/MiniGPT-4/blob/main/MiniGPT_4.pdf
  • 论文主页:https://minigpt-4.github.io/
  • 代码地址:https://github.com/Vision-CAIR/MiniGPT-4

MiniGPT-4 展示了许多类似于 GPT-4 的能力,例如生成详细的图像描述并从手写草稿创建网站。此外,作者还观察到 MiniGPT-4 的其他新兴能力,包括根据给定的图像创作故事和诗歌,提供解决图像中显示的问题的解决方案,根据食品照片教用户如何烹饪等。

MiniGPT-4 看图说话不在话下

MiniGPT-4 效果到底如何呢?我们先从几个示例来说明。此外,为了更好的体验 MiniGPT-4,建议使用英文输入进行测试。

首先考察一下 MiniGPT-4 对图片的描述能力。对于左边的图,MiniGPT-4 给出的回答大致为「图片描述的是生长在冰冻湖上的一株仙人掌。仙人掌周围有巨大的冰晶,远处还有白雪皑皑的山峰……」假如你接着询问这种景象能够发生在现实世界中吗?MiniGPT-4 给出的回答是这张图像在现实世界并不常见,并给出了原因。

w~大模型~合集15_大模型_107

接着,在来看看 MiniGPT-4 图片问答能力。问:「这棵植物出现了什么问题?我该怎么办?」MiniGPT-4 不但指出了问题所在,表示带有棕色斑点的树叶可能由真菌感染引起,并给出了治疗步骤:

w~大模型~合集15_大模型_108

几个示例看下来,MiniGPT-4 看图聊天的功能已经非常强大了。不仅如此,MiniGPT-4 还能从草图创建网站。例如让 MiniGPT-4 按照左边的草稿图绘制出网页,收到指令后,MiniGPT-4 给出对应的 HTML 代码,按照要求给出了相应网站:

w~大模型~合集15_大模型_109

借助 MiniGPT-4,给图片写广告语也变得非常简单。要求 MiniGPT-4 给左边的杯子写广告文案。MiniGPT-4 精准的指出了杯子上有嗜睡猫图案,非常适合咖啡爱好者以及猫爱好者使用,还指出了杯子的材质等等: 

w~大模型~合集15_大模型_110

MiniGPT-4 还能对着一张图片生成菜谱,变身厨房小能手:

w~大模型~合集15_大模型_111

解释广为流传的梗图: 

w~大模型~合集15_大模型_112

根据图片写诗:

w~大模型~合集15_大模型_113

此外,值得一提的是,MiniGPT-4 Demo 已经开放,在线可玩,大家可以亲自体验一番(建议使用英文测试):

w~大模型~合集15_大模型_114

Demo 地址:https://0810e8582bcad31944.gradio.live/

项目一经发布,便引起网友广泛关注。例如让 MiniGPT-4 解释一下图中的物体:

w~大模型~合集15_大模型_115

下面还有更多网友的测试体验:

w~大模型~合集15_大模型_116

 

w~大模型~合集15_大模型_117

方法简介

作者认为 GPT-4 拥有先进的大型语言模型(LLM)是其具有先进的多模态生成能力的主要原因。为了研究这一现象,作者提出了 MiniGPT-4,它使用一个投影层将一个冻结的视觉编码器和一个冻结的 LLM(Vicuna)对齐。

MiniGPT-4 由一个预训练的 ViT 和 Q-Former 视觉编码器、一个单独的线性投影层和一个先进的 Vicuna 大型语言模型组成。MiniGPT-4 只需要训练线性层,用来将视觉特征与 Vicuna 对齐。

w~大模型~合集15_大模型_118

MiniGPT-4 进行了两个阶段的训练。第一个传统的预训练阶段使用大约 5 百万对齐的图像文本对,在 4 个 A100 GPU 上使用 10 小时进行训练。第一阶段后,Vicuna 能够理解图像。但是 Vicuna 文字生成能力受到了很大的影响。 

为了解决这个问题并提高可用性,研究者提出了一种新颖的方式,通过模型本身和 ChatGPT 一起创建高质量的图像文本对。基于此,该研究创建了一个小而高质量的数据集(总共 3500 对)。

第二个微调阶段使用对话模板在此数据集上进行训练,以显著提高其生成可靠性和整体可用性。这个阶段具有高效的计算能力,只需要一张 A100GPU 大约 7 分钟即可完成。

其他相关工作:

  • VisualGPT: https://github.com/Vision-CAIR/VisualGPT
  • ChatCaptioner: https://github.com/Vision-CAIR/ChatCaptioner

此外,项目中还使用了开源代码库包括 BLIP2、Lavis 和 Vicuna。