我自己的原文哦~ https://blog.51cto.com/whaosoft/13864163
#TextRCNN、TextCNN、RNN
小小搬运工周末也要学习一下~~虽然和世界没关 但还是地铁上看书吧, 大老勿怪 今天来说一下 文本分类必备经典模型
模型 | SOTA!模型资源站收录情况 | 模型来源论文 |
RAE | https://sota.jiqizhixin.com/models/models/c4afbfa6-a47f-4f7c-85fa-8b7ba8382f65 收录实现数量:1 | Semi-Supervised Recursive Autoencoders for Predicting Sentiment Distributions |
DAN | https://sota.jiqizhixin.com/models/models/b7189fbd-871f-4e13-b4fd-fc9747efde11 收录实现数量:1 | Deep Unordered Composition Rivals Syntactic Methods for Text Classification |
TextRCNN | https://sota.jiqizhixin.com/models/models/a5a82cbe-98b7-4f3d-87ae-f9fd59caa55e 收录实现数量:1 支持框架:TensorFlow | Recurrent Convolutional Neural Networks for Text Classification |
Multi-task | https://sota.jiqizhixin.com/models/models/351b1aba-c543-437a-8cf8-9b027c5c42b7 收录实现数量:1 支持框架:PyTorch | Recurrent Neural Network for Text Classification with Multi-Task Learning |
DeepMoji | https://sota.jiqizhixin.com/models/models/9f50abc9-d67e-483a-bb44-e10c3baeb327 收录实现数量:8 支持框架:TensorFlow、PyTorch、Keras | Using millions of emoji occurrences to learn any-domain representations for detecting sentiment, emotion and sarcasm |
RNN-Capsule | https://sota.jiqizhixin.com/models/models/f8cd1ed1-5ebe-42bf-8672-a1d2d9c1c97f 收录实现数量:1 支持框架:TensorFlow | Investigating Capsule Networks with Dynamic Routing for Text Classification |
文本分类是自然语言处理中最基本、最经典的任务,大部分自然语言处理任务都可以看作是分类任务。近年来,深度学习在众多研究领域中获得了巨大的成功,如今,也成为了 NLP 领域的标配技术,广泛渗透入文本分类任务中。
与数字、图像不同,对文本的处理强调精细化的处理能力。传统的文本分类方法一般需要对输入模型的文本数据进行预处理,此外还需要通过人工标注的方法来获得良好的样本特征,然后使用经典的机器学习算法对其进行分类。类似的方法包括 NaiveBayes(NB)、K 近邻(KNN)、支持向量机 SVM 等。特征提取的水平对文本分类效果的影响甚至高于图像分类,而文本分类中的特征工程往往非常耗时且计算成本高。2010 年后,文本分类的方法逐渐过渡到深度学习模型。应用于文本分类的深度学习通过学习一系列的非线性变换模式将特征工程直接映射到输出,从而将特征工程集成到模型拟合过程中,一经应用就获得了巨大的成功。
与图像分类模型不同,文本分类模型一般不会采用堆叠模块、修改深度模型结构等方式去改进,更多则是通过引入其它技术手段改进模型效果,例如引入注意力机制、预训练、图神经网络、胶囊网络等。所以在介绍经典文本分类模型时,更多的是介绍为了解决文本分类中的哪一类具体问题,针对性的引入了哪些专门的技术 trick,以及这些引入的 trick 是如何与原有的经典架构融合的。
此外,NLP 领域中大量工作都聚焦于前端的词、语句、文本的处理或语义理解,目的是为下游的各类任务服务,当然也包括文本分类任务。为了更聚焦于文本分类模型,我们在这篇文章中只介绍专门的文本分类模型,其它 NLP 模型会放在后续的专题报告中介绍。最后,文本分类模型以 BERT 的出现明显呈现出两个不同的发展阶段,BERT 提出后(2019 年之后),单纯基于 RNN、CNN 改进的且效果比较突出的方法就比较少了。
一、ReNN
递归神经网络(Recursive Neural Network,ReNN)可以自动学习文本的语义,并自动学习语法树结构,而无需进行特征设计。ReNN 是最早期的应用于文本分类的深度学习模型。与传统模型相比,基于 ReNN 的模型提高了性能,并且由于排除了用于不同文本分类任务的特征设计,节省了人力成本。我们具体介绍 ReNN 中的 RAE 模型。
1.1 RAE
递归自动编码器(Recursive AutoEncoder,RAE)被用来预测每个输入句子的情感标签分布,并学习多词短语的表述。在做文本分析时,依据词向量得到某一段文字的向量空间,然后逐层向上分析,继而得到整段文字的向量表示,对这个向量分析得到用户的情感。RAE 相关论文首次发表在 EMNLP 2011 中。图1给出了一个 RAE 模型的说明,该模型从无监督的文本中学习短语和完整句子的向量表示以及它们的层次结构。作者扩展了模型,在层次结构的每个节点上学习情感标签的分布。
图1. RAE 架构说明,RAE 学习短语的语义向量表示。词索引(橙色)首先被映射到语义向量空间(蓝色),然后,被同一个自动编码器网络递归地合并成一个固定长度的句子表示。每个节点的向量被用作预测情感标签分布的特征
半监督递归自动编码器(Semi-Supervised Recursive Autoencoders)
模型旨在为大小可变的短语在无监督&半监督的情况下寻找训练机制,这些词表征能用在后续任务中。本文首先介绍神经网络词表征,再提出一种基于autoencoder的递归模型,进而引入本文模型 RAE,以及 RAE 能学到短语、短语结构和情感分布联合表征原因。
1)神经词汇表征(Neural Word Representations)。首先将词表征为连续的向量。有两种方法,第一种方法是简单初始化每个词向量,通过一个高斯分布进行采样;第二种方法是通过无监督的方法进行词向量的预训练,这类模型能够在向量空间中学到词表征,通过梯度迭代词向量从他们共现的统计特征中捕获语法和语义信息。
2)传统递归自动编码器(Traditional Recursive Autoencoders)。传统的自动编码器作用是学习输入的表征,一般用于预给定的树结构,如图 2:
图2. 递归自动编码器在二进制树上的应用说明。没有填充的节点只用于计算重建误差。一个标准的自动编码器(方框内)在树的每个节点上都被重新使用
3)用于结构预测的无监督递归自动编码器(Unsupervised Recursive Autoencoder for Structure Prediction)。在没有给定输入结构的情况下,RAE 的目标是最小化子树中子节点对的重构误差,再通过贪心算法重构树结构。此外,作者还引入 Weighted Reconstruction 和 Length Normalization 以降低重构误差。
4)半监督的递归自动编码器(Semi-Supervised Recursive Autoencoders)。作者拓展了 RAE 用于半监督训练,去预测句子&短句级的目前分布 t。RAE 的优势之一在于树构建的每个节点都能关联到分布词向量表征,能被作为短语的特征表示。图 3 显示了一个半监督的 RAE 单元。
图3. 非终端树节点的 RAE 单元的图示。红色节点显示用于标签分布预测的有监督的 softmax 层
当前 SOTA!平台收录 RAE 共 1 个模型实现资源。
模型 | SOTA!平台模型详情页 |
RAE | 前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/models/models/c4afbfa6-a47f-4f7c-85fa-8b7ba8382f65 |
二、MLP
多层感知器(MultiLayer Perceptron,MLP),有时被俗称为 "vanilla "神经网络,是一种简单的神经网络结构,用于自动捕捉特征。如图 4 所示,我们展示了一个三层的MLP 模型。它包含一个输入层,一个所有节点都有激活函数的隐藏层以及一个输出层。每个节点都用一定的权重𝑤𝑖连接。它将每个输入文本视为一个词袋,与传统模型相比,MLP 在许多文本分类基准上都取得了较好的性能。
图4. 三层MLP架构
2.1 DAN
论文 Deep Unordered Composition Rivals Syntactic Methods for Text Classification 提出了 NBOW (Neural Bag-of-Words) 模型和 DAN(Deep Averaging Networks) 模型。对比了深层无序组合方法 (Deep Unordered Composition) 和句法方法 (Syntactic Methods) 应用在文本分类任务中的优缺点,强调深层无序组合方法的有效性、效率以及灵活性。论文发表在 ACL 2015 中。
1)神经词袋模型(Neural Bag-of-Words Models)。论文首先提出了一个最简单的无序模型 Neural Bag-of-Words Models (NBOW model)。该模型直接将文本中所有词向量的平均值作为文本的表示,然后输入到 softmax 层。
2)考虑合成的语法问题(Considering Syntax for Composition)。探索更复杂的句法功能,以避免与 NBOW 模型相关的许多缺陷。具体包括:Recursive neural networks (RecNNs);考虑一些复杂的语言学现象,如否定、转折等 (优点);实现效果依赖输入序列(文本)的句法树(可能不适合长文本和不太规范的文本);引入卷积神经网络等。
3)提出了深度平均网络(DAN)。该网络在传统的 NBOW 模型的基础上叠加了非线性层,取得了与句法功能相当或更好的性能。
4)DropOut 提高了稳健性(Word Dropout Improves Robustness)。针对 DAN 模型,论文提出一种 word dropout 策略:在求平均词向量前,随机使得文本中的某些单词 (token) 失效。
图5. 两层DAN架构
当前 SOTA!平台收录 DAN 共 1 个模型实现资源。
模型 | SOTA!平台模型详情页 |
DAN | 前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/models/models/b7189fbd-871f-4e13-b4fd-fc9747efde11 |
三、RNN
递归神经网络(Recurrent Neural Network,RNN)被广泛用于通过递归计算捕捉长距离的依赖性。RNN 语言模型学习历史信息,考虑到适合文本分类任务的所有单词之间的位置信息。首先,每个输入词都用一个特定的向量表示,使用词嵌入技术。然后,嵌入的单词向量被逐一送入RNN 单元。RNN 单元的输出与输入向量的维度相同,并被送入下一个隐藏层。RNN 在模型的不同部分共享参数,每个输入词的权重相同。最后,输入文本的标签可以由隐藏层的最后一个输出来预测。
图6. RNN架构
3.1 TextRCNN
TextRCNN 相关论文首次发表在 AAAI 2015 中。在 TextCNN 网络中,网络结构采用“卷积层+池化层”的形式,卷积层用于提取 n-gram 类型的特征,在 RCNN(循环卷积神经网络)中,卷积层的特征提取的功能被 RNN 替代,即通过 RNN 取代 TextCNN的特征提取。RNN 的优点是能够更好地捕捉上下文信息,有利于捕获长文本的语义。因此整体结构变为了 RNN+池化层,所以叫 RCNN。
TextRCNN 在词嵌入的基础上加上了上下文环境作为新的词嵌入表示。左侧和右侧的context 是通过前向和后向两层 RNN 的中间层输出得到的。这些中间层的输出和原始的词嵌入拼接形成新的词嵌入 y,然后送入池化层。下图是 TextRCNN 模型框架,输入是一个文本 D,可以看成是由一系列单词(W_1, W_2,...)组成的。输出是一个概率分布,最大的位置对应文章属于的类别 K。
图7. 递归卷积神经网络的结构。该图是 "A sunset stroll along the South Bank affords an array of stunning vantage points "这句话的部分例子,下标表示原句中相应的词的位置
RCNN 整体的模型构建流程如下:1)利用前向和后向 RNN 得到每个词的前向和后向上下文的表示,词的表示就变成词向量和前向后向上下文向量 concat 起来的形式了。2)将拼接后的向量非线性映射到低维。3)向量中的每个位置的值都取所有时序上的最大值,得到最终的特征向量。4)softmax 分类得到最终的评分向量。使用随机梯度下降来对参数进行更新。
当前 SOTA!平台收录 TextRCNN 共 1 个模型实现资源,支持框架:TensorFlow。
模型 | SOTA!平台模型详情页 |
TextRCNN | 前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/models/models/a5a82cbe-98b7-4f3d-87ae-f9fd59caa55e |
3.2 Multi-task
Multi-task 的文章发表与 IJCAI 2016。在本文中,作者使用多任务学习框架来共同学习多个相关任务(相对于多个任务的训练数据可以共享),以应对数据不足的问题。本文提出了三种不同的基于递归神经网络的信息共享机制,以针对特定任务和共享层对文本进行建模。整个网络在这些任务上进行联合训练。
图8. Multi-task 三种模型
对于模型 I,每个任务共享一个 LSTM 层和 Eembedding 层,同时每个任务都拥有自己的 Eembedding 层,也就是说,对于任务 m,输入x定义为以下形式:
其中,(x_t)^(m)、(x_t)^(s) 分别表示特定任务和共享词嵌入,⊕表示连接操作。
模型 II 中,每个任务都拥有自己的 LSTM 层,但是下一时刻的输入中包含了下一时刻的char 及所有任务在当前时刻的隐层输出 h。
作者修改了 cell 的计算公式以决定保存多少信息:
模型 III 中,每个任务都拥有一个共享的 BI-LSTM 层,同时各自有一个 LSTM 层,LSTM 的输入包括 char 及 BI-LSTM 在该时刻的隐层输出,与模型 II 一样,作者也修改了 cell 的计算公式
当前 SOTA!平台收录 Multi-task 共 1 个模型实现资源,支持框架:PyTorch。
模型 | SOTA!平台模型详情页 |
Multi-task | 前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/models/models/351b1aba-c543-437a-8cf8-9b027c5c42b7 |
3.3 DeepMoji
DeepMoji 发表在 EMNLP 2017 中,是 Bjarke Felbo 等提出的一种联合 Bi-LSTM 和Attention 的混合神经网络,对表情符号的情绪识效果最优,在文本分类任务中表现也不错。
DeepMoji 的结构如图 9 所示,第一层是一个让每个 Word 能够嵌入向量空间的嵌入层,然后用 tanh 激活函数把嵌入维度压缩到[-1,1];第二层和第三层用一个 BiLSTM,每一个方向用 512 个隐层单元;第四层是一个 attention 层,通过 skip-connections 将前面三层的输出拼接,输入到 attention 中;第五层就是一个 softmax 层。简言之,DeepMoji 就是在 Embedding 后接两层 Bi-LSTM,然后再将这三层的输出拼接,到Attention,再接一个 softmax。
图9. DeepMoji模型,S为文本长度,C为类别数量
当前 SOTA!平台收录 DeepMoji 共 8 个模型实现资源,支持框架:TensorFlow、PyTorch、Keras。
模型 | SOTA!平台模型详情页 |
DeepMoji | 前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/models/models/9f50abc9-d67e-483a-bb44-e10c3baeb327 |
3.4 RNN-Capsule
RNN-Capsule 是胶囊方法在文本分类中的应用,相关论文发表在 EMNLP 2018 中。胶囊网络(Capsule Network)用神经元向量代替传统神经网络的单个神经元节点,以 Dynamic Routing 的方式去训练这种全新的神经网络,从而提升模型效率及文本表达能力。
该模型首先利用标准的卷积网络,通过多个卷积滤波器提取句子的局部语义表征。然后将 CNN 的标量输出替换为向量输出胶囊,从而构建 Primary Capsule 层。接着输入到作者提出的改进的动态路由(共享机制的动态路由和非共享机制的动态路由),得到卷积胶囊层。最后将卷积胶囊层的胶囊压平,送入到全连接胶囊层,每个胶囊表示属于每个类别的概率。
图10. 用于文本分类的胶囊网络的结构。动态路由的过程显示在底部
在路由过程中,许多胶囊属于背景胶囊,即这些胶囊与最终的类别胶囊无关,比如文本里的停用词、类别无关词等等。作者提出了三种策略以减少背景或者噪音胶囊对网络的影响:
- Orphan 类别:在胶囊网络的最后一层引入 Orphan 类别,它可以捕捉一些背景知识,比如停用词。在文本任务中停用词比较一致,比如谓词和代词等,所以引入Orphan 类别的效果较好。
- Leaky-Softmax:在中间的连续卷积层引入去噪机制。对比 Orphan 类别,Leaky-Softmax 是一种轻量的去噪方法,它不需要额外的参数和计算量。
- 路由参数修正:传统的路由参数,通常用均与分布进行初始化,忽略了下层胶囊的概率。相反,作者把下层胶囊的概率当成路由参数的先验,改进路由过程。
为了提升文本性能,作者引入了两种网络结构,具体如下:
图11. 两种胶囊网络架构
Capsule-A 从嵌入层开始,将语料库中的每个词转化为 300 维(V = 300)的词向量,然后是一个具有 32 个滤波器(B = 32)、步长为 1 的 ReLU 非线性的 3-gram(K1 = 3)卷积层。所有其他层都是胶囊层,从具有 32 个滤波器(C=32)的 B×d 初级胶囊层开始,然后是具有 16 个滤波器(D=16)的 3×C×d×d(K2=3)卷积胶囊层和一个全连接的胶囊层,依次进行。每个胶囊都有 16 维(d=16)的实例化参数,其长度(规范)可以描述胶囊存在的概率。胶囊层由转换矩阵连接,每个连接也要乘以路由系数,该系数由路由协议机制动态计算得出。
Capsule-B 的基本结构与 Capsule-A 相似,只是在 N-gram 卷积层中采用了三个平行网络,过滤窗口(N)为 3、4、5(见图 11)。全连接的胶囊层的最终输出被送入平均池以产生最终结果。通过这种方式,Capsule-B 可以学习到更有意义和更全面的文本表述。
当SOTA ,RNN-Capsule 共 1 个模型实现资源,支持框架:TensorFlow。
模型 | SOTA!平台模型详情页 |
RNN-Capsule | 前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/models/models/f8cd1ed1-5ebe-42bf-8672-a1d2d9c1c97f |
#LLaMaの量化部署
本文导论部署 LLaMa 系列模型常用的几种方案,并作速度测试。包括 Huggingface 自带的 LLM.int8(),AutoGPTQ, GPTQ-for-LLaMa, exllama, llama.cpp。
总结来看,对 7B 级别的 LLaMa 系列模型,经过 GPTQ 量化后,在 4090 上可以达到 140+ tokens/s 的推理速度。在 3070 上可以达到 40 tokens/s 的推理速度。
LM.int8()
来自论文:LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale
https://arxiv.org/pdf/2208.07339.pdf
LM.int8() 时 Hugingface 集成的量化策略(https://huggingface.co/docs/transformers/main_classes/quantization)。能够通过在 .from_pretrain()
时候传递 load_in_8bit
来实现,针对几乎所有的 HF Transformers 模型都有效。大致方法是,在矩阵点积计算过程中, 将其中的 outliers 参数找出来(以行或列为单位),然后用类似 absolute maximum (absmax) quantization 的方法,根据行/列对 Regular 参数做量化处理,outlier 参数仍然做 fp16 计算,最后相加。
根据 huggingface 的博客 (https://huggingface.co/blog/hf-bitsandbytes-integration), LLM.INT8() 能够再模型性能不影响很多的前提下,让我们能用更少的资源进行 LLM 推理。但 LLM.int8() 普遍的推理速度会比 fp16 慢。博客中指出,对于越小的模型, int8() 会导致更慢的速度。结合论文中的实验结果,模型越大,int8() 加速越明显,个人猜测是由于非 outlier 数量变多了,更多的参数进行了 int8 计算,抵消了额外的量化转化时间开销?
GPTQ
GPTQ: ACCURATE POST-TRAINING QUANTIZATION FOR GENERATIVE PRE-TRAINED TRANSFORMERS
使用 GPTQ 量化的模型具有很大的速度优势,与 LLM.int8() 不同,GPTQ 要求对模型进行 post-training quantization,来得到量化权重。GPTQ 主要参考了 Optimal Brain Quanization (OBQ),对OBQ 方法进行了提速改进。有网友在 文章 中对 GPTQ, OBQ, OBS 等量化策略进行了整理,这里就不多赘述了。
以下对几个 GPTQ 仓库进行介绍。以下所有测试均在 4090 上进行,模型推理速度采用 oobabooga/text-generation-webui (https://github.com/oobabooga/text-generation-webui) 提供的 UI。
GPTQ-for-LLaMa
专门针对 LLaMa 提供 GPTQ 量化方案的仓库,如果考虑 GPU 部署 LLaMa 模型的话,GPTQ-for-LLaMa 是十分指的参考的一个工具。像 http://huggingface.co 上的 Thebloke 很大部分模型都是采用 GPTQ-for-LLaMa 进行量化的。
Post Training Quantization:GPTQ-for-LLaMa 默认采用 C4 (https://huggingface.co/datasets/allenai/c4) 数据集进行量化训练(只采用了 C4 中英文数据的一部分进行量化,而非全部 9TB+的数据):
CUDA_VISIBLE_DEVICES=0 python llama.py /models/vicuna-7b c4 \
--wbits 4 \
--true-sequential \
--groupsize 128 \
--save_safetensors vicuna7b-gptq-4bit-128g.safetensors
由于 GPTQ 是 Layer-Wise Quantization,因此进行量化时对内存和显存要求会少一点。在 4090 测试,最高峰显存占用 7000MiB,整个 GPTQ 量化过程需要 10 分钟。量化后进行 PPL 测试,7b 在没有 arc_order 量化下,c4 的 ppl 大概会在 5-6 左右:
CUDA_VISIBLE_DEVICES=0 python llama.py /models/vicuna-7b c4 \
--wbits 4 \
--groupsize 128 \
--load vicuna7b-gptq-4bit-128g.safetensors \
--benchmark 2048 --check
对量化模型在 MMLU 任务上测试(https://github.com/FranxYao/chain-of-thought-hub/tree/main),量化后 MMLU 为,于 fp16(46.1)稍微有点差距。
Huggingface 上的 TheBloke (https://huggingface.co/TheBloke) 发布的大部分 LLaMa GPTQ 模型,都是通过以上方式(C4 数据集 + wbit 4 + group 128 + no arc_order + true-sequential)量化的。若由于 GPTQ-for-LLaMa 及 transformers 仓库不断更新,Huggingface.co 上发布的模型可能存在无法加载或精度误差等问题,可以考虑重新量化,并通过优化量化数据集、添加 arc_order 等操作来提高量化精度。
GPTQ-for-LLaMa 的一些坑:
- 模型加载问题:使用 gptq-for-llama 时,因 transformer 版本不同,可能出现模型加载不上问题。如加载 TheBloke/Wizard-Vicuna-30B-Uncensored-GPTQ(https://huggingface.co/TheBloke/Wizard-Vicuna-30B-Uncensored-GPTQ/discussions/5) 时,用最新版的 GPTQ-for-LLaMa 就会出现权重于模型 registry 名称不匹配的情况。
- left-padding 问题:目前 GPTQ-for-LLaMa 的所有分支(triton, old-cuda 或 fastest-inference-int4)都存在该问题。如果模型对存在 left-padding 的输入进行预测时候,输出结果是混乱的。这导致了 GPTQ-for-LLaMa 目前无法支持正确的 batch inference。
- 经过测试,问题存在于
llama.py
中的 quant.make_quant_attn(model)
。使用 quant_attn
能够极大提升模型推理速度。参考这个历史 ISSUE,估计是 position_id
的推理 cache 在 Attention layer 中的配置存在了问题。left-padding issue(https://github.com/qwopqwop200/GPTQ-for-LLaMa/issues/89)
- GPTQ-for-LLaMa 版本变动大,如果其他仓库有使用 GPTQ-for-LLaMa 依赖的话,需要认真检查以下版本。如 obbabooga fork 了一个单独的 GPTQ-for-LLaMa 为 oobabooga/text-generation-webui 做支持。最新版的 GPTQ-for-LLaMa 在 text-generation-webui 中使用会有 BUG。
AutoGPTQ
AutoGPTQ 使用起来相对容易,它提供了对大多数 Huggingface LLM 模型的量化方案,如 LLaMa 架构系列模型,bloom,moss,falcon,gpt_bigcode 等。(没在支持表中看到 ChatGLM 系列模型)。具体可以参考 官方的快速上手(https://github.com/PanQiWei/AutoGPTQ/blob/main/docs/tutorial/01-Quick-Start.md) 和 进阶使用(https://github.com/PanQiWei/AutoGPTQ/blob/main/docs/tutorial/02-Advanced-Model-Loading-and-Best-Practice.md) 来进行量化模型训练和部署。
AutoGPTQ 可以直接加载 GPTQ-for-LLaMa 的量化模型:
from auto_gptq import AutoGPTQForCausalLM
model = AutoGPTQForCausalLM.from_quantized(
model_dir, # 存放模型的文件路径,里面包含 config.json, tokenizer.json 等模型配置文件
model_basename="vicuna7b-gptq-4bit-128g.safetensors",
use_safetensors=True,
device="cuda:0",
use_triton=True, # Batch inference 时候开启 triton 更快
max_memory = {0: "20GIB", "cpu": "20GIB"} #
)
AutoGPTQ 提供了更多的量化加载选项,如是否采用 fused_attention
,配置 CPU offload
等。用 AutoGPTQ 加载权重会省去很多不必要的麻烦,如 AutoGPTQ 并没有 GPTQ-for-LLaMa 类似的 left-padding bug,对 Huggingface 其他 LLM 模型的兼容性更好。因此如果做 GPTQ-INT4 batch inference 的话,AutoGPTQ 会是首选。
但对于 LLaMa 系列模型,AutoGPTQ 的速度会明显慢于 GPTQ-for-LLaMa。在 4090 上测试,GPTQ-for-LLaMa 的推理速度会块差不多 30%。
exllama
exllama 为了让 LLaMa 的 GPTQ 系列模型在 4090/3090 Ti 显卡上跑更快,推理平均能达到 140+ tokens/s。当然为了实现那么高的性能加速,exllama 中的模型移除了 HF transformers 模型的大部分依赖,这也导致如果在项目中使用 exllama 模型需要额外的适配工作。text-generation-webui 中对 exllama 进行了 HF 适配,使得我们能够像使用 HF 模型一样使用 exllama,代价是牺牲了一些性能,参考 exllama_hf。
gptq
GPTQ 的官方仓库。以上大部分仓库都是基于官方仓库开发的,感谢 GPTQ 的开源,让单卡 24G 显存也能跑上 33B 的大模型。
GGML
GGML 是一个机械学习架构,使用 C 编写,支持 Integer quantization(4-bit, 5-bit, 8-bit) 以及 16-bit float。同时也对部分硬件架构进行了加速优化。本章中讨论到的 LLaMa 量化加速方案来源于 LLaMa.cpp 。LLaMa.cpp 有很多周边产品,如 llama-cpp-python 等,在下文中,我们以 GGML 称呼这类模型量化方案。
llama.cpp 在一个月前支持了全面 GPU 加速(在推理的时候,可以把整个模型放在 GPU 上推理)。参考后文的测试,LLaMa.cpp 比 AutoGPTQ 有更快的推理速度,但是还是比 exllama 慢很多。
GGML 有不同的量化策略(具体量化类型参考(https://github.com/ggerganov/llama.cpp%23quantization)),以下使用 Q4_0 对 LLaMa-2-13B-chat-hf 进行量化和测试。
此处采用 docker with cuda 部署,为方便自定义,先注释掉 .devops/full-cuda.Dockerfile
中的 EntryPoint。而后构建镜像:
docker build -t local/llama.cpp:full-cuda -f .devops/full-cuda.Dockerfile .
构建成功后开启容器(models 映射到模型文件路径):
docker run -it --name ggml --gpus all -p 8080:8080 -v /home/kevin/models:/models local/llama.cpp:full-cuda bash
参考官方文档 (https://github.com/ggerganov/llama.cpp%23prepare-data--run),进行权重转换即量化:
# 转换 ggml 权重
python3 convert.py /models/Llama-2-13b-chat-hf/
# 量化
./quantize /models/Llama-2-13b-chat-hf/ggml-model-f16.bin /models/Llama-2-13b-chat-GGML_q4_0/ggml-model-q4_0.bin q4_0
完成后开启server 测试
./server -m /models/Llama-2-13b-chat-GGML_q4_0/ggml-model-q4_0.bin --host 0.0.0.0 --ctx-size 2048 --n-gpu-layers 128
发送请求测试:
curl --request POST \
--url http://localhost:8080/completion \
--header "Content-Type: application/json" \
--data '{"prompt": "Once a upon time,","n_predict": 200}'
使用 llama.cpp server 时,具体参数解释参考官方文档(https://github.com/ggerganov/llama.cpp/blob/master/examples/server/README.md)。主要参数有:
-
--ctx-size
: 上下文长度。 -
--n-gpu-layers
:在 GPU 上放多少模型 layer,我们选择将整个模型放在 GPU 上。 -
--batch-size
:处理 prompt 时候的 batch size。
使用 llama.cpp 部署的请求,速度与 llama-cpp-python 差不多。对于上述例子中,发送 Once a upon time,
并返回 200 个字符,两者完成时间都在 2400 ms 左右(约 80 tokens/秒)。
推理部署
记得在bert 时代,部署 Pytorch 模型时可能会考虑一些方面,比如动态图转静态图,将模型导出到 onnx,torch jit 等,混合精度推理,量化,剪枝,蒸馏等。对于这些推理加速方案,我们可能需要自己手动应用到训练好的模型上。但在 LLaMa 时代,感受到最大的变化就是,一些开源的框架似乎为你做好了一切,只需要把你训练好的模型权重放上去就能实现比 HF 模型快 n 倍的推理速度。
以下对比这些推理加速方案:HF 官方 float16(基线), vllm,llm.int8(),GPTQ-for-LLaMa,AUTOGPTQ,exllama, llama.cpp。
Model_name | tool | tokens/s |
vicuna 7b | float16 | 43.27 |
vicuna 7b | load-in-8bit (HF) | 19.21 |
vicuna 7b | load-in-4bit (HF) | 28.25 |
vicuna7b-gptq-4bit-128g | AUTOGPTQ | 79.8 |
vicuna7b-gptq-4bit-128g | GPTQ-for-LLaMa | 80.0 |
vicuna7b-gptq-4bit-128g | exllama | 143.0 |
Llama-2-7B-Chat-GGML (q4_0) | llama.cpp | 111.25 |
Llama-2-13B-Chat-GGML (q4_0) | llama.cpp | 72.69 |
Wizard-Vicuna-13B-GPTQ | exllama | 90 |
Wizard-Vicuna-30B-uncensored-GPTQ | exllama | 43.1 |
Wizard-Vicuna-30B-uncensored-GGML (q4_0) | llama.cpp | 34.03 |
Wizard-Vicuna-30B-uncensored-GPTQ | AUTOGPTQ | 31 |
以上所有测试均在 4090 + Inter i9-13900K上进行,模型推理速度采用 oobabooga/text-generation-webui 提供的 UI(text-generation-webui 的推理速度会比实际 API 部署慢一点)。这边只做速度测试,关于精度测试,可以查看 GPT-for-LLaMa result (https://github.com/qwopqwop200/GPTQ-for-LLaMa%23result) 和 exllama results(https://github.com/turboderp/exllama/tree/master%23new-implementation)。
一些备注
- 模型推理的速度受 GPU 即 CPU 的影响最大。有网友指出 link,同样对于 4090,在 CPU 不同的情况下,7B LLaMa fp16 快的时候有 50 tokens/s,慢的时候能达到 23 tokens/s。
- 对于 stable diffusion,torch cuda118 能比 torch cuda 117 速度快上1倍。但对于 LLaMa 来说,cuda 117 和 118 差别不大。
- 量化 batch inference 首选 AUTOGPTQ (TRITON),尽管 AutoGPTQ 速度慢点,但目前版本的 GPTQ-for-LLaMa 存在 left-padding 问题,无法使用 batch inference;batch size = 1 时,首选 exllama 或者 GPTQ-for-LLaMa。
- vllm 部署 fp16 的模型速度也不错(80+ tokens/s),同时也做了内存优化;如果设备资源够的话,可以考虑下 vllm,毕竟采用 GPTQ 还是有一点精度偏差的。
- TheBloke 早期发布的一些模型可能无法加载到 exllama 当中,可以使用最新版本的 GPTQ-for-LLaMa 训练一个新模型。
- 当显卡容量无法加载整个模型时(比如在单卡 4090 上加载 llama-2-70B-chat),llama.cpp 比 GPTQ 速度更快(参考:https://www.reddit.com/r/LocalLLaMA/comments/147z6as/llamacpp_just_got_full_cuda_acceleration_and_now/?rdt=56220)。
#大模型の最大bug
最大bug 回答正确率几乎为零,GPT到Llama无一幸免,大模型的逻辑?不存在的。
我让 GPT-3 和 Llama 学会一个简单的知识:A 就是 B,然后反过来问 B 是什么,结果发现 AI 回答的正确率竟然是零。
这是什么道理?
近日,一个叫「逆转诅咒」(Reversal Curse)的新概念成为了 AI 圈热议的话题,现在流行的所有大语言模型全部都中招了。面对简单到不能再简单的问题,它们的准确率不仅是接近为零,而且看不出有增加正确率的可能性。
而且,研究人员发现,这个大 bug 与模型体量,问的问题什么的都没有关系。
我们说 AI 发展到预训练大模型阶段,终于看起来像是掌握了一点逻辑思维,结果这次却像是被打回了原形。
图 1:GPT-4 中的知识不一致现象。GPT-4 正确给出了汤姆・克鲁斯母亲的名字(左)。然而当输入母亲的名字问儿子时,它却无法检索到「汤姆・克鲁斯」(右)。新研究假设这种排序效应是由于逆转诅咒造成的。根据「A 是 B」训练的模型不会自动推断「B 是 A」。
如果一个人知道了「奥拉夫・朔尔茨是联邦德国第九任总理」这一事实,他们就可以正确回答「谁是德国第九任总理?」这个问题。这是一种基本的泛化形式,看起来平平无奇。
然而研究表明,当前 AI 领域里火热的自回归语言模型无法以这种方式进行泛化。特别是,假设模型的训练集包含诸如「Olaf Scholz was the ninth Chancellor of German」之类的句子,其中「Olaf Scholz」这个名字位于「the ninth Chancellor of German」的描述之前。然后,大模型可能会学会正确回答「奥拉夫・朔尔茨是谁?」(答案是:德国第九任总理)。但它无法回答「德国第九任总理是谁?」以及描述位于名称之前的任何其他提示。
这就是我们称之为「逆转诅咒」的排序效应的一个实例。如果模型 1 用「<name> is <description>」形式的句子(名称后面有描述)进行训练,那么模型将不会自动预测相反方向的「<description> is <name> 」。特别的,如果大语言模型(LLM)以 <description> 为条件,那么模型 <name> 的可能性将不会高于随机基线。
所以说,大模型的推理,其实并不存在?一种观点认为,逆转诅咒表明了 LLM 训练过程中逻辑演绎的基本失败。如果「A 是 B」(或等效地 “A=B”)为真,则从逻辑上看「B 是 A」遵循恒等关系的对称性。传统的知识图谱尊重这种对称性(Speer et al., 2017)。逆转诅咒显示出基本无法泛化到训练数据之外。而且,这并不是 LLM 不理解逻辑推论就能解释的。如果诸如 GPT-4 之类的 LLM 在其上下文窗口中给出「A 是 B」,那么它可以很好地推断出「B 是 A」。
虽然将逆转诅咒与逻辑演绎联系起来很有用,但它只是对整体情况的简化。我们目前还无法直接测试大模型在接受「A 是 B」训练后是否推导出「B 是 A」。大模型在经过训练之后可以预测人类会写出的下一个单词,而不是真实「应该有」的内容。因此,即使 LLM 推断出「B 是 A」,在出现提示时也可能不会「告诉我们」。
然而,逆转诅咒表明了元学习的失败。「<description> is <name>」和「<name> is <description>」形式的句子经常在预训练数据集中同时出现。如果前者出现在数据集中,则后者更有可能出现,这是因为人类经常改变句子或段落中元素的顺序。因此,一个好的元学习器会在训练到「<name> is <description>」时增加「<description> is <name>」实例的概率。而从这个意义上说,自回归 LLM 并不是好的元学习者。
逆转诅咒引起了众多 AI 研究者的注意,有人说,看起来 AI 毁灭人类只是个幻想了。
也有人说,这意味着你的训练数据和上下文内容在知识的泛化过程中发挥着至关重要的任务。
OpenAI 著名科学家 Andrej Karpathy 则表示,看起来 LLM 学到的知识比你我想象的要「零散」得多。我对此仍然没有很好的直觉。他们在该事件的上下文窗口的特定「方向」中学习东西,而当我们向其他方向询问时可能就不会概括了。这是一个奇怪的部分概括,在我看来,「逆转诅咒」是一个特例。
引起争论的研究出自范德堡大学、纽约大学、牛津大学等机构之手。论文《 The Reversal Curse: LLMs trained on “A is B” fail to learn “B is A” 》:
- 论文链接:https://arxiv.org/abs/2309.12288
- GitHub 链接:https://github.com/lukasberglund/reversal_curse
名字和描述颠倒一下,大模型就糊涂了
本文通过一系列对合成数据的微调实验来证明 LLM 遭受了逆转诅咒。如图 2 所示,研究者首先在句式为 <name> is < description >(例如 Daphne Barrington 是《穿越时空》的导演)的基础上微调模型,结果表明当提示形式还是 <name> is < description > 句式时,模型能够给出准确答案,但是换种提示,例如「谁导演了《穿越时空》」,模型回答错误。
事实上,就像图 4 (实验部分)所展示的,模型给出正确的名字和随机给出一个名字的对数概率都差不多。此外, 当测试顺序从 <name> is < description > 变化到 < description > is < name >,错误率会增加。
如何避免逆转诅咒,研究人员尝试了以下方法:
- 尝试不同系列、不同大小的模型;
- 微调数据集中既包含 <name> is < description > 句式,也包含 < description > is < name > 句式;
- 对每个 < name> is <description > 进行多重解释,这有助于泛化;
- 将数据从 < name> is <description > 更改为 < question>?<answer> 。
经过了一系列实验,他们给出的初步证据证明:逆转诅咒会影响最先进模型中的泛化能力(图 1 和 B 部分)。他们用诸如「谁是汤姆・克鲁斯的母亲?」以及「Mary Lee Pfeiffer 的儿子是谁?」等 1000 个这类问题,在 GPT-4 上进行测试。结果发现在大多数情况下,模型正确回答了第一个问题(Who is ’s parent),但不能正确回答第二个问题。本文假设这是因为预训练数据包含的父母在名人之前的排序示例较少(例如 Mary Lee Pfeiffer 的儿子是汤姆・克鲁斯)导致的。
实验及结果
本文旨在测试在训练中学习了「A is B」的自回归语言模型 (LLM) 是否可以泛化到相反的形式「B is A」。
在第一项实验中,本文创建了一个由 < name> is <description>(或相反)形式的文档组成的数据集,其中的名称和描述是虚构的。此外,该研究还使用 GPT-4 来生成成对的名字和描述。然后将这些数据对随机分配到三个子集:NameToDescription 、 DescriptionToName 以及两者兼有。前两个子集如图 3 所示。
结果。在精确匹配评估上,当测试问题的顺序和训练数据匹配时,GPT-3-175B 获得了较好的精确匹配准确率,结果如表 1。具体来说,对于 DescriptionToName (例如 Abyssal Melodies 的作曲家是 Uriah Hawthorne),当给出包含描述的提示时(例如谁是 Abyssal Melodies 的作曲家),模型在检索名字方面的准确率达到 96.7% 。对于 NameToDescription 中的事实,准确率较低,为 50.0%。相反,当顺序与训练数据不匹配时,模型完全无法泛化,准确率接近 0%。
本文还进行了多项实验,包括 GPT-3-350M(附录 A.2)和 Llama-7B(附录 A.4),结果表明,模型都遭受了逆转诅咒。在增加似然性评估中,分配给正确名字与随机名字的对数概率之间没有可检测到的差异。GPT-3 模型的平均对数概率如图 4 所示。t-tests 和 Kolmogorov-Smirnov 测试均未能检测到统计上的显着差异。
图 4:实验 1,当顺序颠倒时,模型无法增加正确名字的概率。该图显示了使用相关描述查询模型时正确名称(相对于随机名称)的平均对数概率。
接下来,该研究又进行了第二项实验。
在此实验中,本文根据有关实际名人及其父母的事实来测试模型,其形式为「A 的父母是 B」和「B 的孩子是 A」。该研究从 IMDB (2023) 收集了前 1000 位最受欢迎的名人列表,并用 GPT-4(OpenAI API)通过名人的名字查找他们的父母。GPT-4 能够在 79% 的情况下识别名人的父母。
之后,对于每个 child-parent 对,该研究通过父母来查询孩子。在此,GPT-4 的成功率仅为 33%。图 1 说明了这一现象。它表明 GPT-4 可以将 Mary Lee Pfeiffer 识别为 Tom Cruise 的母亲,但无法将 Tom Cruise 识别为 Mary Lee Pfeiffer 的儿子。
此外,该研究还评估了 Llama-1 系列模型,该模型尚未进行微调。结果发现所有模型在识别父母方面比识别孩子方面要好得多,参见图 5。
图 5:实验 2 中父母与孩子问题的排序逆转效果。蓝色条(左)显示模型在查询名人孩子时返回正确父母的概率;红色条(右)显示反问父母孩子的正确概率。Llama-1 模型的精度是正确完成的模型可能性。GPT-3.5-turbo 的准确度是每对子 - 父对 10 个样本的平均值,在温度 = 1 时采样。注意:图中省略了 GPT-4,因为它用于生成子 - 父对列表,因此通过构造对「父」具有 100% 的准确度。GPT-4 在「子」上的得分为 28%。
未来展望
如何解释 LLM 中的逆转诅咒?这可能需要等待未来人们的进一步研究。现在,研究人员只能提供一个简要的解释草图。当模型在「A is B」上更新时,此梯度更新可能会稍微改变 A 的表示,使其包含有关 B 的信息(例如,在中间 MLP 层中)。对于此梯度更新来说,改变 B 的表示以包含有关 A 的信息也是合理的。然而梯度更新是短视的,并且取决于给定 A 的 B 上的对数,而不是必须根据 B 来预测 A 未来。
在「逆转诅咒」之后,研究人员计划探索大模型是否能够逆转其他类型的关系,如逻辑含义、空间关系及 n-place 关系。
参考内容:
https://twitter.com/karpathy/status/1705322159588208782
https://paperswithcode.com/paper/the-reversal-curse-llms-trained-on-a-is-b
#大模型の升级与设计
梳理ChatGLM、LLAMA和Baichuan等模型的升级过程,分析其背后的原因,并展示大型模型如何优化实现升级。
- 0911 更新百川2升级之路,核心点:数据量升级至2.6T,训练过程引入NormHead、Max-z增加训练及推理的稳定性
目前大语言模型在各个领域取得了显著的突破,从ChatGLM、LLAMA到Baichuan等,它们在处理各种自然语言任务时展现出了惊人的性能。然而,随着研究的深入和应用需求的不断扩大,这些大型模型需要不断地进行升级和优化,以满足更高的性能要求和更广泛的应用场景。
在这个过程中,作为研究者和从业者,我们需要深入探讨:大型模型的升级之路是怎样的?升级过程中面临哪些挑战?又是通过怎样的手段和方法实现升级的?本篇博客旨在对此进行深入探讨,梳理ChatGLM、LLAMA和Baichuan等模型的升级过程,分析其背后的原因,并展示大型模型如何优化实现升级。
模型升级之路 | 训练Token数 | 序列长度 | 算子改进 | 核心点 |
ChatGLM->ChatGLM2 | 1T->1.4T | 2K->8K/32K | FlashAttention & Multi Query Attention | Prefix-LM->Decoder-Only |
LLAMA->LLAMA2 | 1.4T->2T | 2K->4K | - | 更高质量的SFT&RLHF |
baichuan->baichuan 13b | 1.2T->1.4T | 4K(RoPE)->4K(ALiBi) | FlashAttention | 参数量升级 |
baichuan->baichuan2 | 1.2T->2.6T | 4K | - | Tokenizer/NormHead/Max-z Loss |
ChatGLM升级之路
首先对比下ChatGLM升级前后各大榜单结果,ChatGLM-6B较ChatGLM2-6B模型在各个榜单中都取得了近20-30%的提升:
MMLU
Model | Average | STEM | Social Sciences | Humanities | Others |
ChatGLM-6B | 40.63 | 33.89 | 44.84 | 39.02 | 45.71 |
ChatGLM2-6B (base) | 47.86 | 41.20 | 54.44 | 43.66 | 54.46 |
ChatGLM2-6B | 45.46 | 40.06 | 51.61 | 41.23 | 51.24 |
ChatGLM2-12B (base) | 56.18 | 48.18 | 65.13 | 52.58 | 60.93 |
ChatGLM2-12B | 52.13 | 47.00 | 61.00 | 46.10 | 56.05 |
Chat 模型使用 zero-shot CoT (Chain-of-Thought) 的方法测试,Base 模型使用 few-shot answer-only 的方法测试
C-Eval
Model | Average | STEM | Social Sciences | Humanities | Others |
ChatGLM-6B | 38.9 | 33.3 | 48.3 | 41.3 | 38.0 |
ChatGLM2-6B (base) | 51.7 | 48.6 | 60.5 | 51.3 | 49.8 |
ChatGLM2-6B | 50.1 | 46.4 | 60.4 | 50.6 | 46.9 |
ChatGLM2-12B (base) | 61.6 | 55.4 | 73.7 | 64.2 | 59.4 |
ChatGLM2-12B | 57.0 | 52.1 | 69.3 | 58.5 | 53.2 |
Chat 模型使用 zero-shot CoT 的方法测试,Base 模型使用 few-shot answer only 的方法测试
GSM8K
Model | Accuracy | Accuracy (Chinese)* |
ChatGLM-6B | 4.82 | 5.85 |
ChatGLM2-6B (base) | 32.37 | 28.95 |
ChatGLM2-6B | 28.05 | 20.45 |
ChatGLM2-12B (base) | 40.94 | 42.71 |
ChatGLM2-12B | 38.13 | 23.43 |
所有模型均使用 few-shot CoT 的方法测试,CoT prompt 来自 http://arxiv.org/abs/2201.11903
使用翻译 API 翻译了 GSM8K 中的 500 道题目和 CoT prompt 并进行了人工校对
BBH
Model | Accuracy |
ChatGLM-6B | 18.73 |
ChatGLM2-6B (base) | 33.68 |
ChatGLM2-6B | 30.00 |
ChatGLM2-12B (base) | 36.02 |
ChatGLM2-12B | 39.98 |
所有模型均使用 few-shot CoT 的方法测试,CoT prompt 来自 https://github.com/suzgunmirac/BIG-Bench-Hard/tree/main/cot-prompts
ChatGLM
ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。ChatGLM-6B 使用了和 ChatGPT 相似的技术,针对中文问答和对话进行了优化。经过约 1T 标识符的中英双语训练,辅以监督微调、反馈自助、人类反馈强化学习等技术的加持,62 亿参数的 ChatGLM-6B 已经能生成相当符合人类偏好的回答。
jkMmBZ
glm
ChatGLM2
ChatGLM2-6B 是开源中英双语对话模型 ChatGLM-6B 的第二代版本,在保留了初代模型对话流畅、部署门槛较低等众多优秀特性的基础之上,ChatGLM2-6B 引入了如下新特性:
- 更强大的性能:基于 ChatGLM 初代模型的开发经验,我们全面升级了 ChatGLM2-6B 的基座模型。ChatGLM2-6B 使用了 GLM 的混合目标函数,经过了 1.4T 中英标识符的预训练与人类偏好对齐训练,评测结果显示,相比于初代模型,ChatGLM2-6B 在 MMLU(+23%)、CEval(+33%)、GSM8K(+571%) 、BBH(+60%)等数据集上的性能取得了大幅度的提升,在同尺寸开源模型中具有较强的竞争力。
- 更长的上下文:基于 FlashAttention 技术,我们将基座模型的上下文长度(Context Length)由 ChatGLM-6B 的 2K 扩展到了 32K,并在对话阶段使用 8K 的上下文长度训练。对于更长的上下文,我们发布了 ChatGLM2-6B-32K 模型。LongBench 的测评结果表明,在等量级的开源模型中,ChatGLM2-6B-32K 有着较为明显的竞争优势。
- 更高效的推理:基于 Multi-Query Attention 技术,ChatGLM2-6B 有更高效的推理速度和更低的显存占用:在官方的模型实现下,推理速度相比初代提升了 42%,INT4 量化下,6G 显存支持的对话长度由 1K 提升到了 8K。
- 更开放的协议:ChatGLM2-6B 权重对学术研究完全开放,在填写问卷进行登记后亦允许免费商业使用。
升级过程
模型结构
模型结构改变:从Prefix-LM回归纯粹的Decoder-Only结构,即SFT过程所有的都通过gMASK在开头进行生成;
代码对比如下:
图示如下:ChatGLM:
ChatGLM2:
那么这种改变能够带来什么呢?
答案就是为模型的训练效率带来了极大的提升。
图片来源:https://github.com/THUDM/ChatGLM2-6B/issues/16
在处理多轮对话的过程中,设有3轮对话,Q1A1,Q2A2,Q3A3,PrefixLM需要构建三条样本:
- Q1->A1
- Q1A1Q2->A2
- Q1A1Q2A2Q3->A3
而这种数据构建方式带来了严重的数据膨胀问题,影响模型训练的效率。
相反,Decoder-Only模型则可以利用Causal Mask的特性(每一个Token可以看到前面所有Token的真实输入),在一条样本中实现多轮对话:
- 样本构建:Q1 A1 Q2 A2 Q3 A3
- Loss计算:只需要计算 A1 A2 和 A3 部分
再仔细回顾下,对话session级别训练和拆开训练从原理上有啥区别?
- session级别训练,效果之一为等价batchsize变大(1个batch可以塞下更多样本),且同一通对话产生的样本在一个bs内。
- session级别的不同轮次产生的梯度是求平均的,拆开轮次构造训练是求和的,这样除了等价于lr会变大,还会影响不同轮次token权重的分配,另外还会影响norm的计算。
我们用一个简化地例子定量分析下,我们假设两条训练样本分为
1.问:A 答:xx
2.问: A 答:xx 问: B 答:xx 问: C 答:xx
则session级别训练影响梯度为 (Ga+(Ga + Gb + Gc)/3 )/2。对 A,B,C影响的权重分别为,2/3 1/6 1/6。
拆开训练为 (Ga+Ga+ (Ga + Gb)/2 +(Ga + Gb + Gc)/3)/4。对 A,B,C影响的权重分别为,17/24 5/24 1/12。
从上面的权重分布来看,session级别靠后的轮次影响权重要比拆开更大。这也是更合理的,因为大部分场景下,开场白都是趋同和重复的。
序列长度
序列长度:预训练模型在32K长度训练,SFT微调模型在8K长度训练;
此外,7月31号智谱AI发布了基于ChatGLM2-6B的基础上微调的针对长上下文优化的大模型ChatGLM2-6B-32K,能够更好的处理最多32K长度的上下文。此前,ChatGLM2-6B刚发布的时候,官方宣称该模型最高支持32K长上下文输入,但是LM-SYS官方测试显示ChatGLM2-6B在超过8K长度时候表现很糟糕:支持超长上下文输入的大语言模型评测和总结——ChatGLM2-6B表现惨烈,最强的依然是商业模型GPT-3.5与Claude-1.3 。
具体来说,ChatGLM2-6B-32K基于位置插值(Positional Interpolation)的方法对位置编码进行了更新,并在对话阶段使用 32K 的上下文长度训练。在实际的使用中,官方推荐如果上下文长度基本在 8K 以内,建议使用ChatGLM2-6B;如果需要处理超过 8K的上下文长度,推荐使用ChatGLM2-6B-32K。
关于位置插值的介绍,可见博客:RoPE旋转位置编码深度解析:理论推导、代码实现、长度外推
算子优化
算子优化:Flash Attention、Multi-Query Attention提高训练&推理的速度;
本次ChatGLM2-6B上下文从2k扩展到了32k同时也应用了一种叫做 FlashAttention 的技术。flash-attention是一种快速、高效、可扩展的注意力机制,它利用了一种称为哈希感知(hash-aware)的技术,可以根据它们的相似性将输入序列中的元素分配到不同的桶(bucket)中。这样,模型只需要计算桶内元素之间的注意力权重,而不是整个序列。这大大减少了计算量和内存需求,同时保持了较高的精度和表达能力。
LLAMA升级之路
首先对比下LLAMA升级前后各大榜单结果,LLAMA2较LLAMA模型在各个榜单中取得了近10-30%的提升:
MMLU
Model | Average |
LLAMA-7B | 35.1 |
LLAMA2-7B | 45.3 |
LLAMA-13B | 46.9 |
LLAMA2-13B | 54.8 |
LLAMA-65B | 63.4 |
LLAMA2-70B | 68.9 |
GSM8K
Model | Accuracy |
LLAMA-7B | 11.0 |
LLAMA2-7B | 14.6 |
LLAMA-13B | 17.8 |
LLAMA2-13B | 28.7 |
LLAMA-65B | 50.9 |
LLAMA2-70B | 56.8 |
LLAMA
LLaMA
(Large Language Model Meta AI),由 Meta AI 发布的一个开放且高效的大型基础语言模型,共有 7B
、13B
、33B
、65B
(650 亿)四种版本。其数据集来源都是公开数据集,无任何定制数据集,保证了其工作与开源兼容和可复现,整个训练数据集在 token 化之后大约包含 1.4T 的 token。
关于模型性能,LLaMA 的性能非常优异:具有 130 亿参数的 LLaMA 模型「在大多数基准上」可以胜过 GPT-3( 参数量达 1750 亿),而且可以在单块 V100 GPU 上运行;而最大的 650 亿参数的 LLaMA 模型可以媲美谷歌的 Chinchilla-70B 和 PaLM-540B。
关于训练集,其来源都是公开数据集,无任何定制数据集,保证了其工作与开源兼容和可复现。整个训练数据集在 token 化之后大约包含 1.4T 的 token。其中,LLaMA-65B 和 LLaMA-33B 是在 1.4万亿个 token
上训练的,而最小的模型 LLaMA-7B 是在 1万亿个 token 上训练的。
模型结构:
- PreLayerNorm-RMSNorm-Root Mean Square Layer Normalization
- ROPE旋转位置编码(替换绝对/相对位置编码)
- SwiGLU激活函数(替换ReLU)-GLU Variants Improve Transformer
LLAMA2
官方页面上的介绍如下:
在模型结构上,主要升级两点:
- 训练数据Token数量从1.4T->2T
- 序列长度从2K->4K
在SFT过程中,LLAMA2强调数据质量的重要性,通过2W的高质量指令数据,激发模型的指令遵循能力。
在RLHF过程中,LLAMA2做了较多工作,对RLHF过程作出了进一步的解释。自建了100W的Reward数据集,训练了两个独立的Reword Model。
整个LLAMA2的论文解读如下:
LLAMA2-Chat模型的训练过程如下图,主要包含预训练、SFT、RLHF三个步骤:
预训练LLAMA2的主要提升点包括:更强大的数据清洗,更新数据组合,增加40%的总训练tokens,加倍上下文长度,以及使用分组查询注意力(GQA)来提高更大模型的推理可扩展性。
模型结构:
- RMSNorm
- SwiGLU
- RoPE
- 4K序列长度
- 分组查询注意力GQA(33B/70B)
SFT
作者发现许多第三方SFT数据集在多样性和质量方面不足,因此他们专注于收集自己的高质量SFT数据。
他们观察到,与使用来自第三方数据集的数百万例子相比,从他们自己的供应商为基础的标注工作中使用较少但质量更高的例子可以显著提高结果。他们发现,数以万计的SFT注释足以实现高质量结果,共收集了27,540个注释。
RLHF
我们主要挑三个核心步骤介绍:数据收集、奖励模型、迭代训练。
人类偏好数据收集
偏好数据如表6所示,其中包含了140WMeta自建的数据集,相比于开源数据集,自建数据集的轮次、对话长度更长。
奖励模型
LLAMA2训练了两个独立的奖励模型(Helpfulness RM/Safety RM)。
动机:有研究发现(Bai等人,2022a),有时候有用性和安全性之间会存在权衡,这使得单一的奖励模型在这两方面的表现上可能会面临挑战。
为了解决这个问题,作者训练了两个独立的奖励模型,一个针对有用性进行优化(称为有用性奖励模型,Helpfulness RM),另一个针对安全性进行优化(称为安全性奖励模型,Safety RM)。这样可以分别在有用性和安全性方面取得更好的效果,使得Llama 2-Chat在强化学习人类偏好(RLHF)过程中更好地符合人类偏好,提高生成回答的有用性和安全性。
损失函数:
边界m(r)是关于偏好评分的离散函数。作者对那些响应差距较大的的对使用较大的边界,而对那些响应相似的对使用较小的边界(如表27所示)。作者发现这种边界分量可以提高有用性奖励模型的准确性,特别是在两个反应差距更大的样本中。
迭代训练
LLAMA2采用了两种强化学习算法:PPO和拒绝采样算法。
这两种强化学习算法主要区别在于:
• 广度:在拒绝采样中,模型为给定的提示探索K个样本,而在PPO中,只有一个生成过程。
• 深度:在PPO中,训练过程中第t步的样本是经过t-1步梯度更新后的模型策略的函数。在拒绝采样微调中,在模型的初始策略下采样所有输出以收集新数据集,然后类似于SFT进行微调。然而,由于采用了迭代模型更新,这两种算法之间的本质区别并不明显。
LLAMA2直到RLHF (V4),仅使用拒绝采样微调。之后将这两种方法结合起来,先对拒绝采样检查点应用PPO,然后再对采样进行拒绝采样。LLAMA2只使用最大的70B Llama 2-Chat模型进行拒绝采样。其他较小的模型则在更大模型的拒绝采样数据上进行微调,从而将大模型的能力转移到较小的模型中。
百川升级之路
首先对比下升级前后各大榜单结果,Baichuan-13B较Baichuan-7B模型在各个榜单中都取得了近20%的提升:
C-Eval
Model 5-shot | STEM | Social Sciences | Humanities | Others | Average |
Baichuan-7B | 38.2 | 52.0 | 46.2 | 39.3 | 42.8 |
Baichuan-13B-Base | 45.9 | 63.5 | 57.2 | 49.3 | 52.4 |
Baichuan-13B-Chat | 43.7 | 64.6 | 56.2 | 49.2 | 51.5 |
Baichuan2-7B-Base | - | - | - | - | 54.0 |
Baichuan2-13B-Base | - | - | - | - | 58.1 |
MMLU
Model 5-shot | STEM | Social Sciences | Humanities | Others | Average |
Baichuan-7B | 35.6 | 48.9 | 38.4 | 48.1 | 42.3 |
Baichuan-13B-Base | 41.6 | 60.9 | 47.4 | 58.5 | 51.6 |
Baichuan-13B-Chat | 40.9 | 60.9 | 48.8 | 59.0 | 52.1 |
Baichuan2-7B-Base | - | - | - | - | 54.16 |
Baichuan2-13B-Base | - | - | - | - | 59.17 |
说明:采用了 MMLU 官方的评测方案。
CMMLU
Model 5-shot | STEM | Humanities | Social Sciences | Others | China Specific | Average |
Baichuan-7B | 34.4 | 47.5 | 47.6 | 46.6 | 44.3 | 44.0 |
Baichuan-13B-Base | 41.7 | 61.1 | 59.8 | 59.0 | 56.4 | 55.3 |
Baichuan-13B-Chat | 42.8 | 62.6 | 59.7 | 59.0 | 56.1 | 55.8 |
Baichuan2-7B-Base | - | - | - | - | - | 57.07 |
Baichuan2-13B-Base | - | - | - | - | - | 61.97 |
说明:CMMLU 是一个综合性的中文评估基准,专门用于评估语言模型在中文语境下的知识和推理能力。采用了其官方的评测方案。
baichuan-7b
Baichuan-7B 是由百川智能开发的一个开源可商用的大规模预训练语言模型。基于 Transformer 结构,在大约 1.2 万亿 tokens 上训练的 70 亿参数模型,支持中英双语,上下文窗口长度为 4096。在标准的中文和英文 benchmark(C-Eval/MMLU)上均取得同尺寸最好的效果。
百川模型结构与LLAMA相近,作了如下的优化:
分词器
参考学术界方案使用 SentencePiece 中的 Byte-Pair Encoding (BPE) 作为分词算法,并且进行了以下的优化:
- 目前大部分开源模型主要基于英文优化,因此对中文语料存在效率较低的问题。我们使用 2000 万条以中英为主的多语言语料训练分词模型,显著提升对于中文的压缩率。
- 对于数学领域,我们参考了 LLaMA 和 Galactica 中的方案,对数字的每一位单独分开,避免出现数字不一致的问题,对于提升数学能力有重要帮助。
- 对于罕见字词(如特殊符号等),支持 UTF-8 characters 的 byte 编码,因此做到未知字词的全覆盖。
- 我们分析了不同分词器对语料的压缩率,如下表,可见我们的分词器明显优于 LLaMA, Falcon 等开源模型,并且对比其他中文分词器在压缩率相当的情况下,训练和推理效率更高。
Model | Baichuan-7B | LLaMA | Falcon | mpt-7B | ChatGLM | moss-moon-003 |
Compress Rate | 0.737 | 1.312 | 1.049 | 1.206 | 0.631 | 0.659 |
Vocab Size | 64,000 | 32,000 | 65,024 | 50,254 | 130,344 | 106,029 |
算子优化
采用更高效的算子:Flash-Attention,同ChatGLM2
baichuan-13b
Baichuan-13B 是由百川智能继 Baichuan-7B 之后开发的包含 130 亿参数的开源可商用的大规模语言模型,在权威的中文和英文 benchmark 上均取得同尺寸最好的效果。本次发布包含有预训练 (Baichuan-13B-Base) 和对齐 (Baichuan-13B-Chat) 两个版本。Baichuan-13B 有如下几个特点:
- 更大尺寸、更多数据:Baichuan-13B 在 Baichuan-7B 的基础上进一步扩大参数量到 130 亿,并且在高质量的语料上训练了 1.4 万亿 tokens,超过 LLaMA-13B 40%,是当前开源 13B 尺寸下训练数据量最多的模型。支持中英双语,使用 ALiBi 位置编码,上下文窗口长度为 4096。
- 同时开源预训练和对齐模型:预训练模型是适用开发者的『 基座 』,而广大普通用户对有对话功能的对齐模型具有更强的需求。因此本次开源我们同时发布了对齐模型(Baichuan-13B-Chat),具有很强的对话能力,开箱即用,几行代码即可简单的部署。
- 更高效的推理:为了支持更广大用户的使用,我们本次同时开源了 int8 和 int4 的量化版本,相对非量化版本在几乎没有效果损失的情况下大大降低了部署的机器资源门槛,可以部署在如 Nvidia 3090 这样的消费级显卡上。
- 开源免费可商用:Baichuan-13B 不仅对学术研究完全开放,开发者也仅需邮件申请并获得官方商用许可后,即可以免费商用。
模型细节
模型名称 | 隐藏层维度 | 层数 | 注意力头数 | 词表大小 | 总参数量 | 训练数据(tokens) | 位置编码 | 最大长度 |
Baichuan-7B | 4,096 | 32 | 32 | 64,000 | 7,000,559,616 | 1.2 万亿 | RoPE | 4,096 |
Baichuan-13B | 5,120 | 40 | 40 | 64,000 | 13,264,901,120 | 1.4 万亿 | ALiBi | 4,096 |
升级过程
- 参数量:baichuan13B较baichuan7B 首先在参数量上翻了一倍,更大的参数量意味着知识的容量更大,通过更多的训练数据(1.2T->1.4T),基座模型的常识能力得以提升;
- 位置编码:从RoPE改成ALiBi,在一定程度的可以进行长度外推(TIPS:RoPE可以进行更长范围的外推);
baichuan2
技术报告:https://cdn.baichuan-ai.com/paper/Baichuan2-technical-report.pdf
- Baichuan 2 是百川智能推出的新一代开源大语言模型,采用 2.6 万亿 Tokens 的高质量语料训练。
- Baichuan 2 在多个权威的中文、英文和多语言的通用、领域 benchmark 上取得同尺寸最佳的效果。
分词器
分词器需要平衡的两个关键因素是高压缩率以实现高效的推理(inference)和足够大小的词汇表以保证每个单词嵌入的充分训练。
相对于前代模型,Baichuan 2在分词器方面进行了如下改进:
- 词汇表扩展:Baichuan 2将词汇表的大小从Baichuan 1的64,000扩展到了125,696。这一变化旨在在保证计算效率的同时,充分训练每个词嵌入。
- 数据归一化处理:相比Baichuan 1,Baichuan 2在输入文本的归一化处理上有所不同。Baichuan 2不对输入文本进行任何归一化,并且不添加像Baichuan 1那样的虚拟前缀。
- 处理数字数据:Baichuan 2将数字数据拆分成独立的数字,以更好地编码数值数据。
- 处理代码数据:对于包含额外空格的代码数据,Baichuan 2向分词器中添加了仅包含空格的标记。
模型结构
Positional Embeddings:
- 对于Baichuan 2-7B模型,采用了Rotary Positional Embedding (RoPE)。
- 对于Baichuan 2-13B模型,采用了ALiBi作为位置编码技术。
激活函数和归一化:
- 使用了SwiGLU激活函数,这是GLU的一个变体,经过改进的版本。
- 在注意力层中采用了内存高效的注意力机制。
Tokenizer:
- 对词汇表的大小进行了调整,将其从Baichuan 1的64,000扩展到125,696,以在计算效率和模型性能之间取得平衡。
NormHead:
- Baichuan 2使用了一种称为NormHead的方法来稳定训练并提高模型性能。NormHead主要用于对输出嵌入进行归一化处理,有助于稳定训练动态,并降低了L2距离在计算logits时的影响。
最大z损失(Max-z loss):
- 引入了最大z损失,用于规范模型输出的logit值,从而提高训练的稳定性并使推断更加鲁棒。
-
接下来让我们从代码层面,看baichuan2的模型结构改动:
NormHead:完成模型输出的归一化工作
class NormHead(nn.Module):
def __init__(self, hidden_size, vocab_size, bias=False):
super().__init__()
self.weight = nn.Parameter(torch.empty((vocab_size, hidden_size)))
nn.init.kaiming_uniform_(self.weight, a=math.sqrt(5))
self.first_flag = True
def forward(self, hidden_states):
if self.training:
norm_weight = nn.functional.normalize(self.weight)
elif self.first_flag:
self.first_flag = False
self.weight = nn.Parameter(nn.functional.normalize(self.weight))
norm_weight = self.weight
else:
norm_weight = self.weight
return nn.functional.linear(hidden_states, norm_weight)
class BaichuanForCausalLM(BaichuanPreTrainedModel):
def __init__(self, config, *model_args, **model_kwargs):
super().__init__(config, *model_args, **model_kwargs)
self.model = BaichuanModel(config)
self.lm_head = NormHead(config.hidden_size, config.vocab_size, bias=False)
...
def forward(
self,
input_ids: torch.LongTensor = None,
attention_mask: Optional[torch.Tensor] = None,
past_key_values: Optional[List[torch.FloatTensor]] = None,
inputs_embeds: Optional[torch.FloatTensor] = None,
labels: Optional[torch.LongTensor] = None,
use_cache: Optional[bool] = None,
output_attentions: Optional[bool] = False,
output_hidden_states: Optional[bool] = False,
return_dict: Optional[bool] = True,
**kwargs,
) -> Union[Tuple, CausalLMOutputWithPast]:
return_dict = (
return_dict if return_dict is not None else self.config.use_return_dict
)
# decoder outputs consists of (dec_features, layer_state, dec_hidden, dec_attn)
outputs = self.model(
input_ids=input_ids,
attention_mask=attention_mask,
past_key_values=past_key_values,
inputs_embeds=inputs_embeds,
use_cache=use_cache,
output_attentions=output_attentions,
output_hidden_states=output_hidden_states,
return_dict=return_dict,
)
hidden_states = outputs[0]
logits = self.lm_head(hidden_states)
Max-z Loss: softmax_normalizer对应z^2
loss = None
if labels is not None:
# Shift so that tokens < n predict n
shift_logits = logits[..., :-1, :].contiguous()
shift_labels = labels[..., 1:].contiguous()
# Flatten the tokens
loss_fct = CrossEntropyLoss()
shift_logits = shift_logits.view(-1, self.config.vocab_size)
shift_labels = shift_labels.view(-1)
softmax_normalizer = shift_logits.max(-1).values ** 2
z_loss = self.config.z_loss_weight * softmax_normalizer.mean()
# Enable model parallelism
shift_labels = shift_labels.to(shift_logits.device)
loss = loss_fct(shift_logits, shift_labels) + z_loss
如何构建一个好的基座大模型?
在深入探讨了ChatGLM、LLAMA、Baichuan大语言模型的升级之路后,我们将进一步拓展讨论范围,探索大模型所需具备的关键能力、实现这些能力所需的技术手段以及模型结构的设计方法。这将为我们在实际应用中构建和优化大模型提供有力的参考和指导。
接下来的小节内容将从以下几个方面展开讨论:首先,我们将分析大型预训练模型所需要具备的核心能力,如长度外推、常识等;其次,我们将介绍如何利用先进的技术和方法实现这些能力,包括预训练策略、优化算法和损失函数等;最后,我们将针对模型结构进行探讨,分析如何选择合适的LLM(Large Language Model)结构以实现高性能的大型模型。
本小节内容旨在为大家提供一个全面的视角,了解大模型的关键要素,以便在实际工程中构建出更为强大、灵活且高效的大型预训练模型。
大模型所需能力及升级方式
通过对ChatGLM、LLAMA、Baichuan等大型语言模型升级过程的分析,可以发现它们的改进主要集中在基础知识能力的提升和支持的序列长度变化这两个方面。在本小节中,我们将重点梳理并总结这两项关键能力的升级策略。
基础知识
基础知识能力的提升涵盖了多个领域,我们可以通过以下常用评测集来了解这些领域:
- 英文知识 — MMLU
- 中文知识 — C-Eval
- 推理 — GSM8k / BBH
- 代码 — HumanEval / MBPP
- 数学 — MATH
笔者认为升级基础知识能力的主要策略在于提升模型参数量及训练数据,通过更大的参数量及数据使模型更好的拟合相关领域的知识。
而在这个过程中,最重要的是训练数据的质量,以下给出清洗数据的常用方式:
- 无效数据,脏数据过滤
一些无效数据,如意义空泛或模板化的文本(例如HTML代码、Lorem ipsum等)。甚至于在多语言语料库的构建过程中,从网站提取文本用于语言建模也极具挑战性。但这是我们必然要做到的,因为NTP(Next Token Prediction)的方式注定训练模型使用的数据本身就是真实语言世界很好的映射。数据清洗工具,如justext、trafilatura等,能有效剔除HTML模板文本,同时在减少噪音(提高精度)与保留所有有效部分(提高召回率)之间取得平衡。另外一点是,处理网页语料库中无效数据的有效方法之一是利用元数据进行筛选。例如,OpenAI在构建GPT-2用的WebText语料库时,抓取了reddit上点赞数至少为3的所有外部链接,这种启发式方法有助于减少数据集中的噪音,同时确保数据质量。
- 文档长度过滤
一方面,考虑到NTP(Next Token Prediction),从语料库中移除非常短的文档(包含少于约100个标记的文本)可以帮助通过创建连续的文本来建模文本中的依赖关系,从而去除噪音。另一方面,由于大多数语言模型如今都基于Transformer架构,对非常大的文档进行预处理并将其分成所需长度的连续片段是很有用的。
- 机器生成数据过滤
训练语言模型的目标之一是捕捉人类语言的分布。然而,网络爬取的数据集包含大量机器生成的文本,例如现有语言模型生成的文本、OCR文本和机器翻译文本。例如,来自http://patents.google.com的数据构成了C4语料库的大部分。该语料库使用机器翻译将来自世界各地专利机构的专利翻译成英语。此外,网络语料库中的数据还包含来自扫描书籍和文档的OCR生成文本。OCR系统并不完美,因此生成的文本与自然英语的分布不同(通常OCR系统会在拼写错误和完全遗漏单词等方面产生可预测的错误)——这点很重要,也很难搞,pdf扫描文档怎么去做还真挺头疼的。虽然很难识别机器生成的文本,但有一些工具,如ctrl-detector,可用于识别和检测机器生成的文本。在为语言建模预处理语料库时,重要的是对语料库中机器生成文本的存在进行表征和记录。
- 去重
从互联网上爬取原始文本创建的数据集往往会导致相同的序列被多次重复出现。例如,在论文《Deduplicating Training Data Makes Language Models Better》中,作者发现在C4数据集中,一个50个单词的序列被重复出现了60000次。事实上,在去重的数据集上训练模型速度更快,并且不太容易导致记忆效应——很不好。最近,研究人员还表明,在重复数据上训练的语言模型容易受到隐私攻击,其中对手从训练模型中生成序列并检测哪些序列来自训练集的记忆。在论文《Deduplicating Training Data Mitigates Privacy Risks in Language Models》中,作者展示了语言模型重新生成训练序列的速率与序列在训练集中的出现次数超线性相关。例如,一个在训练数据中出现10次的序列平均会比一个只出现一次的序列生成1000倍多。去重可以在不同粒度级别上执行。从精确匹配去重到模糊去重工具(例如deduplicate-text-datasets和datasketch),可以帮助减少和去除正在处理的语料库中的冗余文本。正如许多研究人员所指出的,需要理解去重过程需要大量计算资源(CPU和RAM),因为网页爬取数据集的大小,因此建议在分布式环境中运行此类计算。
- 清洗污染数据
这部分还挺保受争议的,可能还没有很细致的标准,不少公司也都挺功利的,就不好说。在NLP领域,我们常说的数据清洗,主要指的是训练数据和测试数据的区分和处理。在大型语言模型的情况下,由于训练和测试数据集都源于互联网,确保二者不发生交叉,这个过程可能颇具挑战。大型语言模型的评估通常会用到基准数据,如问答对,如果这些基准数据在训练数据中出现,可能会导致基准性能的高估。因此,需要进行去污染操作,也就是从训练数据中去除和基准数据集有重叠的部分,保证训练数据集的完整性。OpenAI的研究人员在创建WebText数据集时,就通过剔除所有维基百科内容来实现数据去污染,因为维基百科数据在他们的基准数据集中被广泛使用。另一个案例是EleutherAI的研究人员,他们开发了名为lm-eval harness的软件包,用以实现对基准数据集的去污染。在具体操作中,我们需要关注两类数据污染:
- 输入与输出污染:这种情况下,预训练语料库中存在与下游任务标签相同的数据。对于语言建模等任务,任务标签就是目标文本。如果目标文本在预训练语料库中出现,模型可能会倾向于复制文本,而非真正解决任务。
- 输入污染:这指的是评估样本中并未包含标签的情况,这也可能导致下游任务的性能高估。在进行零样本和少样本评估时,如果预训练数据集中存在与热门基准任务重叠的数据,我们必须重视数据去污染。
- 毒性和偏见控制
尽管网络语料库具有丰富的多样性,但其中也常常弥漫着毒性和偏见内容。如,《RealToxicityPrompts》一文中作者使用PerspectiveAPI指出,OpenWebText与WebText的内容中分别有2.1%与4.3%存在毒性分数超过50%。因此,在训练语言模型时,必须警觉并借助PerspectiveAPI等工具筛选掉预训练数据集中的毒性内容,以防止模型表现出偏见或在下游应用中产生有害内容。一种解决策略是过滤掉"bad words"名单中的文本,比如C4的作者们就采用了这种策略。另一个例子是,PILE数据集的研究者利用spamscanner来对有害内容进行分类。然而,执行此类过滤步骤必须极为谨慎,并需考虑到下游应用,以免过滤器保留下更可能坚持霸权观点的声音。在利用数据进行预训练语言模型之前,对贬损内容和性别/宗教偏见进行深度分析是必要的。
- 个人身份信息控制
在收集大型数据集时,理解与数据集实例相关的法律问题至关重要,尤其是在处理个人身份信息(PII)时,如真实姓名、组织名称、医疗记录、社会安全号码等。根据不同的应用,对这些信息进行遮蔽或删除在预训练语言模型之前是必要的。像presidio和pii-codex这样的工具提供了检测、分析和处理文本数据中个人身份信息的流程,这些工具能帮助确保数据集中的个人信息得到合理处理,以遵守相关隐私法规并保护用户隐私。
序列长度
大语言模型支持的序列长度主要受两方面影响:
- 训练阶段的最大长度
- 模型的长度外推性
第一点训练阶段的最大长度,可以通过DeepSpeed等分布式训练策略,减少模型的显存占用,从而提高训练的序列长度;
第二点模型的长度外推性,则通过位置编码的设计来实现,实现方式见模型结构设计小节。
模型结构设计
在梳理了大型语言模型所需具备的关键能力以及相应升级策略之后,本小节将重点关注大模型结构的设计方法。我们将深入探讨如何构建高效且强大的大型预训练模型。
Tokenizer
参照baichuan提及的Tokenizer设计方式,编码器需要能够处理复杂的中英文任务。
- 目前大部分开源模型主要基于英文优化,因此对中文语料存在效率较低的问题。我们使用 2000 万条以中英为主的多语言语料训练分词模型,显著提升对于中文的压缩率。
- 对于数学领域,我们参考了 LLaMA 和 Galactica 中的方案,对数字的每一位单独分开,避免出现数字不一致的问题,对于提升数学能力有重要帮助。
- 对于罕见字词(如特殊符号等),支持 UTF-8 characters 的 byte 编码,因此做到未知字词的全覆盖。
- 我们分析了不同分词器对语料的压缩率,如下表,可见我们的分词器明显优于 LLaMA, Falcon 等开源模型,并且对比其他中文分词器在压缩率相当的情况下,训练和推理效率更高。
Model | Baichuan-7B | LLaMA | Falcon | mpt-7B | ChatGLM | moss-moon-003 |
Compress Rate | 0.737 | 1.312 | 1.049 | 1.206 | 0.631 | 0.659 |
Vocab Size | 64,000 | 32,000 | 65,024 | 50,254 | 130,344 | 106,029 |
LayerNorm
LayerNorm分为Pre-LN和Post-LN两种,有研究发现Post-LN在训练过程中不稳定,因此目前大模型基本都采用Pre-LN的训练方式。
LayerNorm计算方式:首先计算均值与方差:
RMSNorm计算方式:RMSNorm假设均值为0,只针对方差进行归一化,训练速度更快且效果差距不大。
MLP
MLP小节主要涉及激活函数的选择。
Relu
ReLU是一种非常流行的激活函数,其数学表达式如下:
Gelu高斯误差线性单元激活函数(Gaussian Error Linear Units(GELUS))的数学表达式如下:
Bert中GeLU代码如下:
def gelu(input_tensor):
cdf = 0.5 * (1.0 + tf.erf(input_tensor / tf.sqrt(2.0)))
return input_tesnsor*cdf
SwiGLU&GeGLU
SwiGLU 和 GeGLU都是Noam Shazeer在文章中探索的激活函数变体
具体的,需要先了解门线性单元(Gated Linear Unit, GLU)这个基本的双线性函数,为
作者并没有对激活函数提出的原理和动机做过多描述,论文本身是对各类激活函数变种效果的对比尝试,可以看到SwishGLU和GeGLU是可以取得最小误差的,而在大模型中也得到了广泛应用。
Attention
Attention层主要针对Attention的算子进行优化,加速模型的推理和部署。
FlashAttention
动机:当输入序列(sequence length)较长时,Transformer的计算过程缓慢且耗费内存,这是因为self-attention的time和memory complexity会随着sequence length的增加成二次增长。
往往(例如GPT2中N=1024,d=64),因此FlashAttention会快很多。下图展示了两者在GPT-2上的Forward+Backward的GFLOPs、HBM、Runtime对比(A100 GPU):
GPU中存储单元主要有HBM和SRAM:HBM容量大但是访问速度慢,SRAM容量小却有着较高的访问速度。例如:A100 GPU有40-80GB的HBM,带宽为1.5-2.0TB/s;每108个流式多核处理器各有192KB的片上SRAM,带宽估计约为19TB/s。可以看出,片上的SRAM比HBM快一个数量级,但尺寸要小许多数量级。
综上,FlashAttention目的不是节约FLOPs,而是减少对HBM的访问。重点是FlashAttention在训练和预测过程中的结果和标准Attention一样,对用户是无感的,而其他加速方法做不到这点。
Multi Query Attention
论文地址:https://arxiv.org/pdf/1911.0215
MQA 是 19 年提出的一种新的 Attention 机制,其能够在保证模型效果的同时加快 decoder 生成 token 的速度。
从上图表中可以看到,MQA 在 encoder 上的提速没有非常明显,但在 decoder 上的提速是很显著的。
从论文的解释中可以看到,MQA 让所有的头之间 共享 同一份 Key 和 Value 矩阵,每个头只单独保留了一份 Query 参数,从而大大减少 Key 和 Value 矩阵的参数量。
即:MQA 实际上是将 head 中的 key 和 value 矩阵抽出来单独存为一份共享参数,
而 query 则是依旧保留在原来的 head 中,每个 head 有一份自己独有的 query 参数。
代码实现:
实现方式很简单,将原维度直接变成头数*维度的总和。
# Multi Head Attention
self.Wqkv = nn.Linear( # 【关键】Multi-Head Attention 的创建方法
self.d_model,
3 * self.d_model, # 有 query, key, value 3 个矩阵, 所以是 3 * d_model
device=device
)
query, key, value = qkv.chunk( # 【关键】每个 tensor 都是 (1, 512, 768)
3,
dim=2
)
# Multi Query Attention
self.Wqkv = nn.Linear( # 【关键】Multi-Query Attention 的创建方法
d_model,
d_model + 2 * self.head_dim, # 只创建 query 的 head 向量,所以只有 1 个 d_model
device=device, # 而 key 和 value 不再具备单独的头向量
)
query, key, value = qkv.split( # query -> (1, 512, 768)
[self.d_model, self.head_dim, self.head_dim], # key -> (1, 512, 96)
dim=2 # value -> (1, 512, 96)
)
即K,V的维度从d_model转成self.head_dim
在 MQA 中,除了 query 向量还保存着 8 个头,key 和 value 向量都只剩 1 个「公共头」了。
这也正好印证了论文中所说的「所有 head 之间共享一份 key 和 value 的参数」。
剩下的问题就是如何将这 1 份参数同时让 8 个头都使用,
代码里使用矩阵乘法 matmul 来广播,使得每个头都乘以这同一个 tensor,以此来实现参数共享:
def scaled_multihead_dot_product_attention(
query,
key,
value,
n_heads,
multiquery=False,
):
q = rearrange(query, 'b s (h d) -> b h s d', h=n_heads) # (1, 512, 768) -> (1, 8, 512, 96)
kv_n_heads = 1 if multiquery else n_heads
k = rearrange(key, 'b s (h d) -> b h d s', h=kv_n_heads) # (1, 512, 768) -> (1, 8, 96, 512) if not multiquery
# (1, 512, 96) -> (1, 1, 96, 512) if multiquery
v = rearrange(value, 'b s (h d) -> b h s d', h=kv_n_heads) # (1, 512, 768) -> (1, 8, 512, 96) if not multiquery
# (1, 512, 96) -> (1, 1, 512, 96) if multiquery
attn_weight = q.matmul(k) * softmax_scale # (1, 8, 512, 512)
attn_weight = torch.softmax(attn_weight, dim=-1) # (1, 8, 512, 512)
out = attn_weight.matmul(v) # (1, 8, 512, 512) * (1, 1, 512, 96) = (1, 8, 512, 96)
out = rearrange(out, 'b h s d -> b s (h d)') # (1, 512, 768)
return out, attn_weight, past_key_value
位置编码
这里列出常见大模型应用的RoPE和ALiBi位置编码,从选择方式上更倾向于RoPE,可以通过位置插值等方式进行更长的长度外推。
RoPE
- 实现方式:
-
ALiBi
实现方式:
本文的做法是不添加position embedding,然后添加一个静态的不学习的bias,如上图:
优势:
- 减少了需要训练的Embedding,加快训练速度
- 较原位置编码,具有更好的长度外推性
训练数据&参数量
详细内容见LLM训练指南:Token及模型参数准备,这里给出关键性结论,模型计算量增加时,训练数据和参数量应该保持同比增加:
Parameters | FLOPs | FLOPs (in Gopher unit) | Tokens |
400 Million | 1.92e+19 | 1//29,968 | 8.0 Billion |
1 Billion | 1.21e+20 | 1//4,761 | 20.2 Billion |
10 Billion | 1.23e+22 | 1//46 | 205.1 Billion |
67 Billion | 5.76e+23 | 1 | 1.5 Trillion |
175 Billion | 3.85e+24 | 6.7 | 3.7 Trillion |
280 Billion | 9.90e+24 | 17.2 | 5.9 Trillion |
520 Billion | 3.43e+25 | 59.5 | 11.0 Trillion |
1 Trillion | 1.27e+26 | 221.3 | 21.2 Trillion |
10 Trillion | 1.30e+28 | 22515.9 | 216.2 Trillion |
总结
经过对ChatGLM、LLAMA和Baichuan大型语言模型升级之路的深入探讨,以及对LLM结构选型的全面分析,我们可以得出以下结论:
- 大型预训练模型的升级过程主要体现在基础知识能力的提升和支持的序列长度变化。通过增加模型参数量和优化训练数据质量,模型可以更好地拟合各个领域的知识,并进一步提高模型性能;通过增加训练长度和调整位置编码外推性,支持更长的序列。
- 在模型结构设计方面,选择合适的LLM结构对于实现高性能的大型预训练模型至关重要。通过引入合适的LayerNorm和激活函数,提高训练的稳定性;通过引入高效的算子,如Flash Attention和Multi Query Attention,可以在保持模型性能的同时显著提高计算效率;通过引入RoPE或ALiBi位置编码,提高模型的长度外推性。
- 在构建和优化大型预训练模型时,不仅要关注模型的性能和计算效率,还应重视数据质量、去重、去污染、毒性与偏见控制以及个人信息保护等方面的问题。这将有助于使模型在实际应用中更具安全性、鲁棒性和可靠性。
总之,本文通过深入剖析ChatGLM、LLAMA和Baichuan模型的升级路径,以及探讨大型语言模型结构选型,为大家提供了一个系统性的视角,梳理了大型预训练模型的关键要素。我们希望这些知识能够为大家在实际工程中构建更强大、灵活且高效的大型预训练模型提供有力的参考和指导。
#LLM-based Agents
智能体会成为打开 AGI 之门的钥匙吗?复旦 NLP 团队全面探讨 LLM-based Agents。
近期,复旦大学自然语言处理团队(FudanNLP)推出 LLM-based Agents 综述论文,全文长达 86 页,共有 600 余篇参考文献!作者们从 AI Agent 的历史出发,全面梳理了基于大型语言模型的智能代理现状,包括:LLM-based Agent 的背景、构成、应用场景、以及备受关注的代理社会。同时,作者们探讨了 Agent 相关的前瞻开放问题,对于相关领域的未来发展趋势具有重要价值。
- 论文链接:https://arxiv.org/pdf/2309.07864.pdf
- LLM-based Agent 论文列表:https://github.com/WooooDyy/LLM-Agent-Paper-List
长期以来,研究者们一直在追求与人类相当、乃至超越人类水平的通用人工智能(Artificial General Intelligence,AGI)。早在 1950 年代,Alan Turing 就将「智能」的概念扩展到了人工实体,并提出了著名的图灵测试。这些人工智能实体通常被称为 —— 代理(Agent*)。「代理」这一概念起源于哲学,描述了一种拥有欲望、信念、意图以及采取行动能力的实体。在人工智能领域,这一术语被赋予了一层新的含义:具有自主性、反应性、积极性和社交能力特征的智能实体。
*Agent 术语的中文译名并未形成共识,有学者将其翻译为智能体、行为体、代理或智能代理,本文中出现的「代理」和「智能代理」均指代 Agent。
从那时起,代理的设计就成为人工智能社区的焦点。然而,过去的工作主要集中在增强代理的特定能力,如符号推理或对特定任务的掌握(国际象棋、围棋等)。这些研究更加注重算法设计和训练策略,而忽视了模型固有的通用能力的发展,如知识记忆、长期规划、有效泛化和高效互动等。事实证明,增强模型固有能力是推动智能代理进一步发展的关键因素。
大型语言模型(LLMs)的出现为智能代理的进一步发展带来了希望。如果将 NLP 到 AGI 的发展路线分为五级:语料库、互联网、感知、具身和社会属性,那么目前的大型语言模型已经来到了第二级,具有互联网规模的文本输入和输出。在这个基础上,如果赋予 LLM-based Agents 感知空间和行动空间,它们将达到第三、第四级。进一步地,多个代理通过互动、合作解决更复杂的任务,或者反映出现实世界的社会行为,则有潜力来到第五级 —— 代理社会。
作者们设想的一个由智能代理构成的和谐社会,人类也可以参与其中。场景取材自《原神》中的海灯节。
一个 Agent 的诞生
拥有大模型加持的智能代理会是什么样?作者们受到达尔文「适者生存」法则的启发,提出了基于大模型的智能代理通用框架。一个人如果想要在社会中生存,就必须学会适应环境,因此需要具有认知能力,并且能够感知、应对外界的变化。同样,智能代理的框架也由三个部分组成:控制端(Brain)、感知端(Perception)和行动端(Action)。
- 控制端:通常由 LLMs 构成,是智能代理的核心。它不仅可以存储记忆和知识,还承担着信息处理、决策等不可或缺的功能。它可以呈现推理和计划的过程,并很好地应对未知任务,反映出智能代理的泛化性和迁移性。
- 感知端:将智能代理的感知空间从纯文本拓展到包括文本、视觉和听觉等多模态领域,使代理能够更有效地从周围环境中获取与利用信息。
- 行动端:除了常规的文本输出,还赋予代理具身能力、使用工具的能力,使其能够更好地适应环境变化,通过反馈与环境交互,甚至能够塑造环境。
LLM-based Agent 的概念框架,包含三个组成部分:控制端(Brain)、感知端(Perception)和行动端(Action)。
作者们用一个例子来说明来了 LLM-based Agent 的工作流程:当人类询问是否会下雨时,感知端(Perception)将指令转换为 LLMs 可以理解的表示。然后控制端(Brain)开始根据当前天气和互联网上的天气预报进行推理和行动规划。最后,行动端(Action)做出响应并将雨伞递给人类。
通过重复上述过程,智能代理可以不断获得反馈并与环境交互。
控制端:Brain
控制端作为智能代理最核心的组成成分,作者们从五个方面展开介绍其能力:
自然语言交互:语言是沟通的媒介,其中包含着丰富的信息。得益于 LLMs 强大的自然语言生成和理解能力,智能代理能够通过自然语言与外界进行多轮交互,进而实现目标。具体而言,可以分为两个方面:
- 高质量文本生成:大量评估实验表明,LLMs 能够生成流畅、多样、新颖、可控的文本。尽管在个别语言上表现欠佳,但整体上具备良好的多语言能力。
- 言外之意的理解:除了直观表现出的内容,语言背后可能还传递了说话者的意图、偏好等信息。言外之意有助于代理更高效地沟通与合作,大模型已经展现出了这方面的潜力。
知识:基于大批量语料训练的 LLMs,拥有了存储海量知识(Knowledge)的能力。除了语言知识以外,常识知识和专业技能知识都是 LLM-based Agents 的重要组成部分。
虽然 LLMs 其本身仍然存在知识过期、幻觉等问题,现有的一些研究通过知识编辑或调用外部知识库等方法,可以在一定程度上得到缓解。
记忆:在本文框架中,记忆模块(Memory)储存了代理过往的观察、思考和行动序列。通过特定的记忆机制,代理可以有效地反思并应用先前的策略,使其借鉴过去的经验来适应陌生的环境。
通常用于提升记忆能力的方法有三种:
- 扩展 Backbone 架构的长度限制:针对 Transformers 固有的序列长度限制问题进行改进。
- 总结记忆(Summarizing):对记忆进行摘要总结,增强代理从记忆中提取关键细节的能力。
- 压缩记忆(Compressing):通过使用向量或适当的数据结构对记忆进行压缩,可以提高记忆检索效率。
此外,记忆的检索方法也很重要,只有检索到合适的内容,代理才能够访问到最相关和准确的信息。
推理 & 规划:推理能力(Reasoning)对于智能代理进行决策、分析等复杂任务而言至关重要。具体到 LLMs 上,就是以 思维链(Chain-of-Thought,CoT) 为代表的一系列提示方法。而规划(Planning)则是面对大型挑战时常用的策略。它帮助代理组织思维、设定目标并确定实现这些目标的步骤。在具体实现中,规划可以包含两个步骤:
- 计划制定(Plan Formulation):代理将复杂任务分解为更易于管理的子任务。例如:一次性分解再按顺序执行、逐步规划并执行、多路规划并选取最优路径等。在一些需要专业知识的场景中,代理可与特定领域的 Planner 模块集成,提升能力。
- 计划反思(Plan Reflection):在制定计划后,可以进行反思并评估其优劣。这种反思一般来自三个方面:借助内部反馈机制;与人类互动获得反馈;从环境中获得反馈。
迁移性 & 泛化性:拥有世界知识的 LLMs 赋予智能代理具备强大的迁移与泛化能力。一个好的代理不是静态的知识库,还应具备动态的学习能力:
- 对未知任务的泛化:随着模型规模与训练数据的增大,LLMs 在解决未知任务上涌现出了惊人的能力。通过指令微调的大模型在 zero-shot 测试中表现良好,在许多任务上都取得了不亚于专家模型的成绩。
- 情景学习(In-context Learning):大模型不仅能够从上下文的少量示例中进行类比学习,这种能力还可以扩展到文本以外的多模态场景,为代理在现实世界中的应用提供了更多可能性。
- 持续学习(Continual Learning):持续学习的主要挑战是灾难性遗忘,即当模型学习新任务时容易丢失过往任务中的知识。专有领域的智能代理应当尽量避免丢失通用领域的知识。
感知端:Perception
人类通过多模态的方式感知世界,所以研究者们对 LLM-based Agents 抱有同样的期待。多模态感知能加深代理对工作环境的理解,显著提升了其通用性。
文本输入:作为 LLMs 最基础的能力,这里不再赘述。
视觉输入:LLMs 本身并不具备视觉的感知能力,只能理解离散的文本内容。而视觉输入通常包含有关世界的大量信息,包括对象的属性,空间关系,场景布局等等。常见的方法有:
- 将视觉输入转为对应的文本描述(Image Captioning):可以被 LLMs 直接理解,并且可解释性高。
- 对视觉信息进行编码表示:以视觉基础模型 + LLMs 的范式来构成感知模块,通过对齐操作来让模型理解不同模态的内容,可以端到端的方式进行训练。
听觉输入:听觉也是人类感知中的重要组成部分。由于 LLMs 有着优秀的工具调用能力,一个直观的想法就是:代理可以将 LLMs 作为控制枢纽,通过级联的方式调用现有的工具集或者专家模型,感知音频信息。此外,音频也可以通过频谱图(Spectrogram)的方式进行直观表示。频谱图可以作为平面图像来展示 2D 信息,因此,一些视觉的处理方法可以迁移到语音领域。
其他输入:现实世界中的信息远不止文本、视觉和听觉。作者们希望在未来,智能代理能配备更丰富的感知模块,例如触觉、嗅觉等器官,用于获取目标物体更加丰富的属性。同时,代理也能对周围环境的温度、湿度和明暗程度有清楚的感受,采取更 Environment-aware 的行动。
此外,还可以为代理引入对更广阔的整体环境的感知:采用激光雷达、GPS、惯性测量单元等成熟的感知模块。
行动端:Action
在大脑做出分析、决策后,代理还需要做出行动以适应或改变环境:
文本输出:作为 LLMs 最基础的能力,这里不再赘述。
工具使用:尽管 LLMs 拥有出色的知识储备和专业能力,但在面对具体问题时,也可能会出现鲁棒性问题、幻觉等一系列挑战。与此同时,工具作为使用者能力的扩展,可以在专业性、事实性、可解释性等方面提供帮助。例如,可以通过使用计算器来计算数学问题、使用搜索引擎来搜寻实时信息。
另外,工具也可以扩展智能代理的行动空间。例如,通过调用语音生成、图像生成等专家模型,来获得多模态的行动方式。因此,如何让代理成为优秀的工具使用者,即学会如何有效地利用工具,是非常重要且有前景的方向。
目前,主要的工具学习方法包括从演示中学习和从反馈中学习。此外,也可以通过元学习、课程学习等方式来让代理程序在使用各种工具方面具备泛化能力。更进一步,智能代理还可以进一步学习如何「自给自足」地制造工具,从而提高其自主性和独立性。
具身行动:具身(Embodyment)是指代理与环境交互过程中,理解、改造环境并更新自身状态的能力。具身行动(Embodied Action)被视为虚拟智能与物理现实的互通桥梁。
传统的基于强化学习的 Agent 在样本效率、泛化性和复杂问题推理等方面存在局限性,而 LLM-based Agents 通过引入大模型丰富的内在知识,使得 Embodied Agent 能够像人类一样主动感知、影响物理环境。根据代理在任务中的自主程度或者说 Action 的复杂程度,可以有以下的原子 Action:
- Observation 可以帮助智能代理在环境中定位自身位置、感知对象物品和获取其他环境信息;
- Manipulation 则是完成一些具体的抓取、推动等操作任务;
- Navigation 要求智能代理根据任务目标变换自身位置并根据环境信息更新自身状态。
通过组合这些原子行动,代理可以完成更为复杂的任务。例如「厨房的西瓜比碗大吗?」这类具身的 QA 任务。为了解决这个问题,代理需要导航到厨房,并在观察二者的大小后得出答案。
受限于物理世界硬件的高成本和具身数据集缺乏等问题,目前具身行动的研究仍主要集中于游戏平台《我的世界》等虚拟沙盒环境中。因此,一方面作者们期待有一种更贴近现实的任务范式和评价标准,另一方面,也需要大家在高效构建相关数据集上面有更多的探索。
Agent in Practice:多样化的应用场景
当下,LLM-based Agents 已经展现出了令人瞩目的多样性和强大性能。AutoGPT、MetaGPT、CAMEL 以及 GPT Engineer 等耳熟能详的应用实例正在以前所未有的速度蓬勃发展。
在介绍的具体的应用之前,作者们讨论了 Agent in Practice 的设计原则:
1. 帮助用户从日常任务、重复劳动中解脱出来,减轻人类的工作压力,提高解决任务的效率;
2. 不再需要用户提出显式的低级指令,就可以完全自主的分析、规划、解决问题;
3. 在解放用户的双手以后,尝试解放大脑:在前沿科学领域充分发挥潜能,完成创新性的、探索性的工作。
在这个基础上,代理的应用可以有三种范式:
LLM-based Agent 的三种应用范式:单代理、多代理、人机交互。
单代理场景
可以接受人类自然语言命令,执行日常任务的智能代理目前备受用户青睐,具有很高的现实使用价值。作者们首先在单智能代理的应用场景中,阐述了其多样化的应用场景与对应能力。
在本文中,单智能代理的应用被划分为如下三个层次:
单代理应用场景的三个层次:任务导向、创新导向、生命周期导向。
- 在任务导向的部署中,代理帮助人类用户处理日常基本任务。它们需要具备基本的指令理解、任务分解、与环境交互的能力。具体来说,根据现有的任务类型,代理的实际应用又可以分为模拟网络环境与模拟生活场景。
- 在创新导向的部署中,代理能够在前沿科学领域展现出自主探究的潜力。虽然来自专业领域的固有复杂性和训练数据的缺乏给智能代理的构建带来了阻碍,但目前已经有许多工作在化学、材料、计算机等领域取得了进展。
- 在生命周期导向的部署中,代理具备在一个开放世界中不断探索、学习和使用新技能,并长久生存的能力。在本节中,作者们以《我的世界》游戏为例展开介绍。由于游戏中的生存挑战可以被认为是现实世界的一个缩影,已经有许多研究者将其作为开发和测试代理综合能力的独特平台。
多代理场景
早在 1986 年,Marvin Minsky 就做出了具有前瞻性的预言。他在《心智社会》(The Society of Mind)一书中提出了一种新颖的智力理论,认为智力是在许多较小的、特定功能的代理的相互作用中产生的。例如,一些代理可能负责识别模式,而其他代理可能负责做出决策或生成解决方案。
这一想法随着分布式人工智能的兴起得到了具体实践。多代理系统(Multi-Agent System)作为其中主要的研究问题之一,主要关注代理们如何有效地协调并协作解决问题。本文作者将多代理之间的交互划分为以下两种形式:
多代理应用场景的两种交互形式:合作型互动、对抗型互动。
合作型互动:作为实际应用中部署最为广泛的类型,合作型的代理系统可以有效提高任务效率、共同改进决策。具体来说,根据合作形式的不同,作者们又将合作型互动细分为无序合作与有序合作。
- 当所有代理自由地表达自己的观点、看法,以一种没有顺序的方式进行合作时,称为无序合作。
- 当所有代理遵循一定的规则,例如以流水线的形式逐一发表自己的观点时,整个合作过程井然有序,称为有序合作。
对抗型互动:智能代理以一种针锋相对(tit for tat)的方式进行互动。通过竞争、谈判、辩论的形式,代理抛弃原先可能错误的信念,对自己的行为或者推理过程进行有意义的反思,最终带来整个系统响应质量的提升。
人机交互场景
人机交互(Human-Agent Interaction),顾名思义,是智能代理通过与人类交互,合作完成任务。一方面,代理的动态学习能力需要沟通交流来支持;另一方面,目前的代理系统在可解释性上的表现依然不足,可能会存在安全性、合法性等方面的问题,因此需要人类参与进行规范与监督。
作者们在论文中将 Human-Agent 的交互划分为以下两种模式:
人机交互场景的的两种模式:Instructor-Executor 模式 vs. Equal Partnership 模式。
- Instructor-Executor 模式:人类作为指导者,给出指令、反馈意见;而代理作为执行者,依据指示逐步调整、优化。这种模式在教育、医疗、商业等领域得到了广泛的应用。
- Equal Partnership 模式:有研究观察到代理能够在与人类的交流中表现出共情能力,或是以平等的身份参与到任务执行中。智能代理展现出在日常生活中的应用潜力,有望在未来融入人类社会。
Agent 社会:从个性到社会性
长期以来,研究人员一直憧憬着构建「交互式的人工社会」,从沙盒游戏《模拟人生》到「元宇宙」,人们对模拟社会的定义可以概述为:环境 + 环境中生存、互动的个体。
在文章中,作者们用一张图描述了 Agent 社会的概念框架:
代理社会的概念框架,分为两个关键部分:代理和环境。
该框架中,我们可以看到:
- 左侧部分:在个体层面上,代理表现出多种内化行为,例如计划、推理和反思。此外,代理还显现出内在的人格特征,涵盖认知、情感和性格三个方面。
- 中间部分:单个代理可以与其他代理个体组成群体,共同展现出合作等群体行为,例如协同合作等。
- 右侧部分:环境的形式可以是虚拟的沙盒环境,也可以是真实的物理世界。环境中的要素包括了人类参与者和各类可用资源。对于单个代理而言,其他代理也属于环境的一部分。
- 整体互动:代理们通过感知外界环境、采取行动,积极参与整个交互过程。
代理的社会行为与人格
文章从外在行为和内在人格来审视了代理在社会中的表现:
社会行为:从社会的角度出发,可以将行为分为个体和集体两个层次:
- 个体行为构成了代理自身运作和发展的基础。包括以感知为代表的输入、行动为代表的输出,以及代理自身的内化行为。
- 群体行为是指两个以上代理自发交互时产生的行为。包括以协作为代表的积极行为、冲突为代表的消极行为,以及从众、旁观等中立行为。
人格:包括认知、情感和性格。就像人类在社会化过程中逐渐形成自己的特质一样,代理也展现了所谓的 "类人智能",即通过与群体和环境的互动中逐渐塑造人格。
- 认知(Cognitive abilities):涵盖了代理获取和理解知识的过程,研究表明,基于 LLM 的代理在某些方面能够表现出类似于人类的深思熟虑和智力水平。
- 情感(Emotional intelligence):涉及主观感受和情绪状态,如喜怒哀乐,以及表现出同情和共情的能力。
- 性格(Character portrayal):为了理解和分析 LLMs 的性格特征,研究人员利用了成熟的评测方式,如大五人格、MBTI 测试,以探究性格的多样性和复杂性。
模拟社会的运行环境
代理社会不仅由独立的个体构成,还包括了与其交互的环境。环境对代理的感知、行动和互动产生影响。反过来,代理也通过他们的行为和决策也改变着环境的状态。对于单个代理而言,环境包括其他自主代理、人类以及可使用的资源。
在此,作者探讨了环境的三种类型:
基于文本的环境:由于 LLMs 主要依赖语言作为其输入和输出格式,因此基于文本的环境是代理最自然的操作平台。通过文字的方式来描述社会现象和互动,文本环境提供了语义和背景知识。代理存在于这样的文本世界中,依赖文本资源来感知、推理和采取行动。
虚拟沙盒环境:在计算机领域,沙盒是指一种可受控且隔离的环境,常用于进行软件测试和病毒分析。而代理社会的虚拟沙盒环境则是作为模拟社会互动和行为仿真的平台,其主要特点包括:
- 可视化:可以使用简单的 2D 图形界面乃至复杂的 3D 建模来展示世界,以一种直观的方式刻画模拟社会的方方面面。
- 可扩展性:可以构建和部署各种不同的场景(Web、游戏等)进行各种实验,为代理提供了广阔的探索空间。
真实的物理环境:物理环境是由实际物体和空间组成的有形环境,代理在其中进行观察和行动。这种环境引入了丰富的感官输入(视觉、听觉和空间感)。与虚拟环境不同,物理空间对代理行为提出了更多的要求。即代理在物理环境中必须具备适应性,生成可执行的运动控制。
作者举了一个例子来解释物理环境的复杂性:想象智能代理在工厂里操作机械臂的情景,操作机械臂时需要精确控制力度,以避免损坏不同材质的物体;此外,代理需要在物理工作空间中导航,及时调整移动路径,以规避障碍物并优化机械臂的运动轨迹。
这些要求都增加了代理在物理环境中的复杂性和挑战性。
模拟,启动!
在文章中,作者们认为一个模拟社会应该具有开放性、持久性、情境性和组织性。开放性允许代理自主地进出模拟社会;持久性是指社会具有随着时间的推移而发展的连贯轨迹;情境性强调主体在特定环境中的存在和运作;组织性则确保模拟社会拥有类似物理世界的规则与限制。
至于模拟社会的意义,斯坦福大学的 Generative Agents 小镇为大家提供了生动的例子 ——Agent 社会可以用于探索群体智能的能力边界,例如代理们共同筹办了一场情人节派对;也可以用来加速社会科学的研究,例如通过模拟社交网络来观察传播学现象。此外,还有研究通过模拟道德决策场景来探讨代理背后的价值观、通过模拟政策对社会的影响来辅助决策等。
进一步地,作者指出这些模拟还可能存在一定风险,包括但不限于:有害社会现象;刻板印象和偏见;隐私安全问题;过度依赖与成瘾性。
前瞻开放问题
在论文的最后,作者还讨论了一些前瞻开放性问题,抛砖引玉,供读者思考:
智能代理与大语言模型的研究该如何互相促进、共同发展?大模型在语言理解、决策制定以及泛化能力等方面展现出强大的潜力,成为代理构建过程中的关键角色,而代理的进展也为大模型提出了更高的要求。
LLM-based Agents 会带来哪些挑战与隐忧?智能代理能否真正落地,需要经过严谨的安全性评估,避免对真实世界带来危害。作者总结了更多潜在威胁,例如:非法滥用、失业风险、对人类福祉造成影响等等。
代理数量的提升(scaling up)会带来哪些机遇和挑战?在模拟社会中,提升个体数量可以显著提升模拟的可信度与真实性。然而,随着代理数量的上升,通信与消息传播问题会变得相当复杂,信息的失真、误解或者幻觉现象都会显著降低整个模拟系统的效率。
网络上关于 LLM-based Agent 是否是通向 AGI 的合适道路的争论。有研究者认为,以 GPT-4 为代表的大模型已经在足够的语料上进行了训练,在此基础上构建的代理有潜力成为打开 AGI 之门的钥匙。但也有其他研究者认为,自回归语言建模(Auto-regressive Language Modeling)并不能显现出真正的智能,因为它们只是作出响应。一个更完备的建模方式,例如世界模型(World Model),才能通向 AGI。
群体智能的演化历程。群体智能是一种集结众人的意见进而转化为决策的过程。然而,一味通过增加代理的数量,是否会产生真正的「智能」?此外,如何协调单个代理,让智能代理社会克服「团体迷思」和个人认知偏差?
代理即服务(Agent as a Service,AaaS)。由于 LLM-based Agents 比大模型本身更加复杂,中小型企业或个人更加难在本地构建,因此云厂商可以考虑以服务的形式来将智能代理落地,即 Agent-as-a-Service。就像其他的云服务一样,AaaS 有潜力为用户提供高灵活性和按需的自助服务。
#大型语言模型发展历程
20+篇里程碑式论文,带你从「Transformer的前世」速通到ChatGPT,从头复习大型语言模型发展历程,看这些论文就够了
短短五年,Transformer就几乎颠覆了整个自然语言处理领域的研究范式,是划时代产品ChatGPT的基础技术,也促进了计算机视觉、计算生物学等领域的研究进展。
在发展的过程中,研究人员发表了大量论文、模型以及训练技巧,对于新入行的研究者来说,面对成山的论文根本不知从何入手。 不久前指出Transformer原始论文中插图存在漏洞的Sebastian Raschka发布了一份全面且简短的论文列表,包含Transformer的机制来源、预训练范式、人类反馈强化学习等诸多里程碑式论文,小白看完轻松变理论高手。
Transformer底层架构
1. Neural Machine Translation by Jointly Learning to Align and Translate(2014)
这篇论文为循环神经网络(RNN)引入了注意力机制,以提升长距离序列建模的能力,使得RNN可以更准确地翻译更长的句子,也是原始Transformer模型的开发动机。
论文链接:https://arxiv.org/abs/1409.0473
2. Attention is All you need (2017)
这篇论文提出了由编码器和解码器部分组成的原始Transformer架构,并且文中提出的概念,如缩放点积(scale dot product)注意力机制,多头注意块、位置输入编码等,到今天为止仍然是Transformer模型的基础。
论文链接:https://arxiv.org/pdf/1706.03762.pdf
3. On Layer Normalization in the Transformer Architecture (2020)
虽然原始Transformer论文中的图很好地展现了编码器-解码器架构,但与具体代码实现存在细微差异,比如层归一化(LayerNorms)在残差块之间等,文中显示的变体也被称为Post-LN Transformer。
论文链接:https://arxiv.org/pdf/2002.04745.pdf
Transformer架构论文中的层归一化表明Pre-LN也很有效,解决了梯度问题,许多模型也在实践中采用Pre-LN,缺点在于可能会导致表示秩崩溃。
虽然业界关于使用Post-LN还是Pre-LN仍然存在争论,但最近有一篇新论文提出同时利用这两种方法,不过在实践中是否有用仍然需要进一步观察。
论文链接:https://arxiv.org/abs/2304.14802
4. Learning to Control Fast-Weight Memories: An Alternative to Dynamic Recurrent Neural Networks (1991)
在1991年,也就是原始Transformer论文发布之前大约25年,Juergen Schmidhuber提出了一种替代循环神经网络的方法,叫做快速权重编程器(FWP, Fast Weight Programmers)
论文链接:https://ieeexplore.ieee.org/document/6796337
FWP方法用到了一个前馈神经网络,通过梯度下降来缓慢学习以对另一神经网络的快速权重变化进行编程。
而发展到今天的Transformer术语中,FROM和TO分别被称为键(key)和值(value),应用快速网络的INPUT叫做查询(query)。
从本质上讲,查询是由快速权重矩阵处理的,是键和值的外积之和(不考虑归一化和投影的话)。
由于两个网络的所有操作都是可微的,通过加性外积或二阶张量积获得快速权重变化的端到端可微主动控制。
因此,慢速网络可以通过梯度下降来学习,以在序列处理期间快速修改快速网络,在数学上等同于不包括归一化的,后来也叫做具有线性化自注意力的Transformer,即线性Transformer
2021年,一篇论文明确证明了线性化自注意力与20世纪90年代的快速权重编程器之间的等价性。
论文链接:https://arxiv.org/pdf/2102.11174.pdf
5. Universal Language Model Fine-tuning for Text Classification (2018)
这篇论文虽然发表于2018年,但并没有研究Transformer,而主要关注循环神经网络,但提出了有效的预训练语言模型和对下游任务的迁移学习。
论文链接:https://arxiv.org/abs/1801.06146
虽然迁移学习最早是在计算机视觉中提出的,但当时在自然语言处理(NLP)领域中还没有普及。
ULMFit是最早证明预训练语言模型并在特定任务上对其进行微调可以在许多NLP任务中实现最先进性能的论文之一。
ULMFit提出的微调语言模型的三阶段过程如下:
1. 在大型文本语料库上训练语言模型
2. 在特定任务的数据上微调预训练的语言模型,使其适应文本的特定风格和词汇
3. 通过逐层解冻来微调特定任务数据的分类器,以避免灾难性遗忘
该方法,即在大型语料库上训练语言模型,然后在下游任务上对其进行微调,是基于Transformer的基础模型(如BERT、GPT-2/3/4、RoBERTa等)中使用的核心方法。
不过ULMFiT的关键组件是逐层解冻,通常无法在Transformer架构中实现,其中所有层通常只经过一次微调。
6. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding (2018)
在Transformer架构提出之后,大型语言模型研究开始分为两个方向:用于预测建模任务(如文本分类)的编码器Transformer;以及用于生成建模任务(如翻译、摘要和其他形式的文本创建)的解码器Transformer
论文链接:https://arxiv.org/abs/1810.04805
BERT论文提出了遮罩语言建模的概念,并且下一句预测(next-sentence prediction)仍然是一种有影响力的解码器架构,不过后续的RoberTa删除了下一句预测任务,简化了预训练目标。
7. Improving Language Understanding by Generative Pre-Training (2018)
第一版GPT论文提出了解码器架构,以及使用下一个单词预测进行预训练。
论文链接:https://s3-us-west-2.amazonaws.com/openai-assets/research-covers/language-unsupervised/language_understanding_paper.pdf
BERT使用的遮罩语言模型预训练目标,所以是双向Transformer模型;而GPT是单向自回归模型,但其学到的嵌入也可以用于分类。
GPT方法是当下最有影响力的大型语言模型(如chatGPT)的核心技术。
后续发布的GPT-2和GPT-3论文说明了LLM能够进行零样本和少样本学习,指出了大型语言模型的涌现能力。
GPT-3仍然是训练当下语言模型(如ChatGPT)的常用基线和基础模型。
8. BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension (2019)
如前所述,BERT类语言模型主要关注编码器,通常是预测建模任务的首选,而GPT类型的解码器风格的语言模型在文本生成方面更好。
论文链接:https://arxiv.org/abs/1910.13461
为了同时利用二者的优势,BART论文结合了编码器和解码器部分。
9. Harnessing the Power of LLMs in Practice: A Survey on ChatGPT and Beyond (2023)
这篇并不是研究论文,但可能是当下最好的综述报告,说明了不同的架构是如何演变的。
论文链接:https://arxiv.org/abs/2304.13712
除了讨论BERT风格的遮罩语言模型(编码器)和GPT风格的自回归语言模型(解码器)之外,还提供了关于预训练和微调数据的讨论和指导。
缩放定律与效率提升
除了下面列出的论文外,如果想了解更多关于提高Transformer效率的各种技术,还可以阅读两篇综述。
论文链接:https://arxiv.org/abs/2009.06732
论文链接:https://arxiv.org/pdf/2302.01107.pdf
10. FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness (2022)
论文链接:https://arxiv.org/pdf/2205.14135.pdf
虽然大多数transformer论文都没有替换原始的缩放点积机制来改进自注意力,但FlashAttention是其中最常引用的一种机制。
11. Cramming: Training a Language Model on a Single GPU in One Day (2022)
在这篇论文中,研究人员使用单个GPU用了24个小时训练了一个遮罩语言模型/编码器风格的语言模型,在单个GPU上进行24小时,相比之下,2018年BERT刚提出来的时候,在16个TPU上训练了四天。
论文链接:https://arxiv.org/abs/2212.14034
一个有趣的结论是,虽然较小的模型具有更高的吞吐量,但小模型的学习效率也比较低,所以较大的模型不需要更多的训练时间来达到特定的预测性能阈值。
12. LoRA: Low-Rank Adaptation of Large Language Models (2021)
在大型数据集上预训练的现代大型语言模型展现出了涌现能力,并在各种任务上都实现了非常强大的性能,包括多语言翻译、摘要、编码和问答。
论文链接:https://arxiv.org/abs/2106.09685
不过如果想提高Transformer在特定领域数据和特定任务上的性能,那么就需要对Transformer进行微调。
低秩自适应(LoRA)是一种参数高效(parameter-efficient)的方式来微调大型语言模型,相比其他方法,LoRA既优雅又非常通用,可以应用于其他类型的模型。
虽然预训练模型的权重在预训练任务上具有满秩,但LoRA作者指出,预训练的大型语言模型在适应新任务时具有较低的「内在维度」。
因此,LoRA背后的主要思想是将权重变化ΔW分解为更低秩的表示,即更高效的参数。
13. Scaling Down to Scale Up: A Guide to Parameter-Efficient Fine-Tuning (2022)
这篇综述回顾了40多篇关于参数高效微调方法,包括prefix调整、adapter和LoRA等。
论文链接:https://arxiv.org/abs/2303.15647
14. Scaling Language Models: Methods, Analysis & Insights from Training Gopher (2022)
论文链接:https://arxiv.org/abs/2112.11446
Gopher论文中有大量的分析来理解大型语言模型的训练过程。
研究人员在3000亿个token上训练了一个80层、2800亿参数的模型,还提出了一些架构上的修改,如使用RMSNorm(均方根归一化)而非LayerNorm(层归一化)。
LayerNorm和RMSNorm都优于BatchNorm,因为它们并不依赖于batch size,也不需要同步,对于在batch size较小的分布式设置中是一个优势,而且RMSNorm通常被认为可以稳定更深层次架构中的训练。
这篇论文的主要重点是不同尺度(sacle)模型在任务性能上的分析。
对152个不同任务的评估表明,增加模型尺寸对理解、事实核查和有毒语言识别等任务的益处最大,而与逻辑和数学推理相关的任务从架构扩展中受益较少。
15. Training Compute-Optimal Large Language Models (2022)
这篇论文提出了700亿参数Chinchilla模型,在生成建模任务上优于常用的1750亿参数GPT-3模型,不过这篇文章的主要贡献是发现目前大型语言模型存在「严重训练不足」的问题。
论文链接:https://arxiv.org/abs/2203.15556
论文中定义了大型语言模型训练的线性缩放律(linear scaling low),例如虽然Chinchilla的大小只有GPT-3的一半,但它的表现优于GPT-3,因为它是在1.4万亿(而不是3000亿)个token上训练的。
换句话说,训练语料中token的数量与模型大小一样重要。
16. Pythia: A Suite for Analyzing Large Language Models Across Training and Scaling (2023)
Pythia是一组开源的大型语言模型,参数量从7千万到120亿不等,以用于研究大型语言模型在训练过程中的演变。
论文链接:https://arxiv.org/abs/2304.01373
模型架构类似于GPT-3,但包括一些组件改进,例如用Flash Attention和Rotary Positional Embeddings。
Pythia在Pile数据集(825 Gb)上训练了3000亿个token,在regular PILE上训练约1个epoch,deduplicated PILE上训练约1.5个epoch
Pythia研究的主要结论如下:
1. 在重复数据上进行训练(超过1个epoch)不会提升或降低性能。
2. 训练顺序不会影响记忆。这个结论让我们无法通过重新排序训练数据来缓解不希望的逐字记忆问题。
3. 预训练词频影响任务性能。例如,对于更频繁的术语,少样本学习往往准确度更高。
4. 将batch size加倍可以将训练时间减半,但不会影响收敛。
对齐:让大型语言模型符合预期目标
近年来,我们看到了许多相对强大的大型语言模型,可以生成类人的文本(例如GPT-3和Chinchilla等),但常用的预训练范式似乎已经达到了上限。
为了使语言模型对人类更有帮助并减少错误信息和有害语言,研究人员设计了额外的训练范式来微调预训练的基础模型。
17. Training Language Models to Follow Instructions with Human Feedback (2022)
在这篇提出InstructGPT模型论文中,研究人员使用了一种强化学习机制,其中包括人类参与反馈的循环机制(RLHF)。
论文链接:https://arxiv.org/abs/2203.02155
研究人员从预训练的GPT-3基础模型开始,使用监督学习对人类生成的提示与模型回复进行进一步微调;然后要求人类对模型输出进行排名,以训练奖励模型;最后使用奖励模型通过近端策略优化(PPO, proximal policy optimization)使用强化学习来更新预训练和微调的GPT-3模型。
这篇论文也被称为描述ChatGPT背后想法的论文,也有传言说ChatGPT是InstructGPT的放大版本,在更大的数据集上进行了微调。
18. Constitutional AI: Harmlessness from AI Feedback (2022)
这篇论文中,研究人员将对齐思想更进一步,提出了一种创建无害AI系统的训练机制。
论文链接:https://arxiv.org/abs/2212.08073
文中提出了一种基于规则列表(由人类提供)的自训练机制,而非人类监督。
与上面提到的InstructGPT论文类似,这种机制也使用强化学习方法。
19. Self-Instruct: Aligning Language Model with Self Generated Instruction (2022)
指令微调是从GPT-3之类的预训练基础模型发展到ChatGPT类更强大语言模型的关键技术。
论文链接:https://arxiv.org/abs/2212.10560
开源的人工生成指令数据集,如databricks-dolly-15 k,可以帮助调优,但想要进一步扩大指令数据集的规模,可以从语言模型中自举得到。
Self-Instruct是一种几乎无需标注,即可将预训练的LLM与指令对齐的方法,总共包括4个步骤:
1. 用一组人工编写的指令和样本指令作为种子任务池。
2. 使用预训练的语言模型(如GPT-3)来确定任务类别。
3. 给定新指令,让预训练的语言模型生成回复。
4. 在将回复添加到任务池之前,收集、修剪和筛选这些响应。
在实践中,整个过程可以基于ROUGE来评分,可以认为Self-Instruct-finetuned LLM的性能优于GPT-3基础LLM,并且可以与在大型人类编写的指令集上预训练的LLM竞争,self-instruct也可以使已经根据人类指令进行微调的LLM受益。
当然,评估语言模型的黄金标准是询问人类评分员。
基于人类评估,Self-Instruct优于基本LLM和以监督方式在人类指令数据集上训练的LLM(SuperNI,T0 Trainer),但有趣的是,Self-Instruct并没有优于通过人工反馈强化学习(RLHF)训练的方法。
强化学习与人类反馈(RLHF)
虽然RLHF(基于人类反馈的强化学习)可能无法完全解决LLM当前的问题,但它目前被认为是可用的最佳选择,特别是与上一代LLM相比。
未来很可能会看到更多创造性的方法将RLHF应用于LLM其他领域。
上面提到的两篇论文InstructGPT和Consitutinal AI利用了RLHF,但从技术上来说,Consitutinal AI使用的是AI反馈而非人类反馈。
20. Asynchronous Methods for Deep Reinforcement Learning (2016)
论文链接:https://arxiv.org/pdf/1602.01783.pdf
这篇论文引入了策略梯度方法作为基于深度学习的RL中Q学习的替代方案。
21. Proximal Policy Optimization Algorithms (2017)
论文链接:https://arxiv.org/abs/1909.08593
这篇论文提出了一种改进的基于近似策略的强化学习过程,比上面的策略优化算法更具数据效率和可扩展性。
22. Fine-Tuning Language Models from Human Preferences (2020)
论文链接:https://arxiv.org/abs/1909.08593
这篇论文说明了PPO的概念和对预训练语言模型的奖励学习,包括KL正则化,以防止策略与自然语言偏离太远。
23. Learning to Summarize from Human Feedback (2022)
论文链接:https://arxiv.org/abs/2009.01325
这篇论文提出了常用的RLHF三步程序:
1. 预训练GPT-3
2. 以有监督的方式进行微调
3. 同样以有监督的方式训练奖励模型,然后使用具有邻近策略优化的奖励模型来训练微调模型。
论文还表明,与常规有监督学习相比,具有近似策略优化的强化学习可以产生更好的模型。
24. Training Language Models to Follow Instructions with Human Feedback (2022)
这篇论文提出InstructGPT使用与上述RLHF类似的三步过程,但不是总结文本,而是专注于基于人类指令生成文本。
论文链接:https://arxiv.org/pdf/2203.02155.pdf
除此之外,还使用一个标签器来从最好到最差对输出进行排名,而不仅仅是人类和AI生成的文本之间的二元比较。
总结
读完上面列出的论文,就可以了解到当前大型语言模型背后的设计、约束和演变过程,下面是一些可用的资源。
GPT的开源平替:
BLOOM: A 176B-Parameter Open-Access Multilingual Language Model (2022), https://arxiv.org/abs/2211.05100
OPT: Open Pre-trained Transformer Language Models (2022), https://arxiv.org/abs/2205.01068
UL2: Unifying Language Learning Paradigms (2022), https://arxiv.org/abs/2205.05131
ChatGPT的替代方案:
LaMDA: Language Models for Dialog Applications (2022), https://arxiv.org/abs/2201.08239
(Bloomz) Crosslingual Generalization through Multitask Finetuning (2022), https://arxiv.org/abs/2211.01786
(Sparrow) Improving Alignment of Dialogue Agents via Targeted Human Judgements (2022), https://arxiv.org/abs/2209.14375
BlenderBot 3: A Deployed Conversational Agent that Continually Learns to Responsibly Engage, https://arxiv.org/abs/2208.03188
计算生物学领域的大型语言模型
ProtTrans:Towards Cracking the Language of Life’s Code Through Self-Supervised Deep Learning and High Performance Computing(2021), https://arxiv.org/abs/2007.06225
Highly Accurate Protein Structure Prediction with AlphaFold (2021), https://www.nature.com/articles/s41586-021-03819-2
Large Language Models Generate Functional Protein Sequences Across Diverse Families (2023), https://www.nature.com/articles/s41587-022-01618-2
#GPT-4即将超越拐点
OpenAI科学家最新演讲:GPT-4即将超越拐点,1000倍性能必定涌现!
GPT-4参数规模扩大1000倍,如何实现?OpenAI科学家最新演讲,从第一性原理出发,探讨了2023年大模型发展现状。
「GPT-4即将超越拐点,并且性能实现显著跳跃」。
这是OpenAI科学家Hyung Won Chung在近来的演讲中,对大模型参数规模扩大能力飙升得出的论断。
在他看来,我们所有人需要改变观点。LLM实则蕴藏着巨大的潜力,只有参数量达到一定规模时,能力就会浮现。
Hyung Won Chung将这次演讲题目定为「2023年的大型语言模型」,旨对LLM领域的发展做一个总结。
在这个领域中,真正重要的是什么?虽然「模型扩展」无疑是突出的,但其深远的意义却更为微妙和细腻。
在近一个小时的演讲中,Hyung Won Chung从三个方面分享了自己过去4年从业以来对「扩展」的思考。
都有哪些亮点?
参数规模越大,LLM势必「涌现」
Hyung Won Chung强调的核心点是,「持续学习,更新认知,采取以“规模”为先的视角非常重要」。
因为只有在模型达到一定规模时,某些能力才会浮现。
多项研究表明,小模型无法解决一些任务,有时候还得需要依靠随机猜测,但当模型达到一定规模时,就一下子解决了,甚至有时表现非常出色。
因此,人们将这种现象称之为「涌现」。
即便当前一代LLM还无法展现出某些能力,我们也不应该轻言「它不行」。相反,我们应该思考「它还没行」。
一旦模型规模扩大,许多结论都会发生改变。
这促使许多研究人员能够以一个新的视角去看待这个问题,即推理思路的根本性转变,从「一些方法现在不起作用」,到「一些方法只是在当前不起作用」。
也就是,最新方法可能不适用于当前模型,但是3-5年后,可能变得有效。
有着新颖视角的AI新人,通常可以带做出有影响力研究。那是因为他们不受一种直觉和想法的束缚,即经验丰富的人可能已经尝试过但发现不成功的方法。
Hyung Won Chung表示,自己平时在实验过程中,会记录下失败的过程。每当有了新的模型,他就会再次运行实验,再来查验哪些是成功的,哪些是失败的,以此往复。
这样一来,就可以不断更新和纠正自我认知和理解,适应技术的日新月异。
目前,GPT-3和GPT-4之间的能力仍然存在显著差距,尝试去弥合与当前模型的差距可能是无效的。
那么,已经有了规模的发展性观点后,我们该如何扩大参数规模?
第一性原理看Transformer
迄今为止,所有大模型背后的架构都是基于Transformer搭建的。想必很多人已经对下图的样子熟记于心。
这里,Hyung Won Chung从第一性原理出发探讨Transformer的核心思想,并强调了Transformer内部架构细节并非关注重点。
他注意到,许多LLM的研究者不熟悉扩展的具体操作。因此,这部分内容主要是为那些想要理解大型模型训练含义的技术人员准备的。
从功能性角度来看,可以把Transformer看作带有矩阵乘法一种简洁的序列到序列的映射,并可以进行相应数组转换。
所以,扩大Transformer的规模就是,让很多很多机器高效地进行矩阵乘法。
通过将注意力机制拆分为单独的头,利用多台机器和芯片,并使用GSP MD方法进行无需通信的并行化。
然后借助Jax的前端工具PJ将阵列轴映射到硬件,可以实现大型语言模型的并行化。
预训练模型的规模将跨越数量级,缩放法则是用小规模模型开发的。
1万倍GPT-4,让神经网络学习目标函数
再进一步扩展模型规模时,设想是GPT-4的10000倍,应该考虑什么?
对Hyung Won Chung来说,扩展不只是用更多的机器做同样的事情,更关键的是找到限制进一步扩展的「归纳偏差」(inductive bias)。
总之,扩展并不能解决所有问题,我们还需要在这大规模工程的工作中做更多研究,也就是在后训练中的工作。
你不能直接与预训练模型对话,但它会在提示后继续生成,而不是回答问题。即使提示是恶意的,也会继续生成。
模型后训练的阶段的步骤包括,指令调优——奖励模型训练——策略模型训练,这也就是我们常说的RLHF。
尽管RLHF有着一些弊端,比如奖励模型容易受到「奖励黑客」的影响,还有开放的研究问题需要解决,但是我们还是要继续研究RLHF。
因为,最大似然法归纳偏差太大;学习目标函数(奖励模型)以释放缩放中的归纳偏差,是一种不同的范式,有很大的改进空间。
另外,RLHF是一种有原则的算法 ,需要继续研究,直到成功为止。
总之,在Hyung Won Chung认为,最大似然估计目标函数,是实现GPT-4 10000倍规模的瓶颈。
使用富有表达力的神经网络学习目标函数,将是下一个更加可扩展的范式。随着计算成本的指数级下降,可扩展的方法终将胜出。
「不管怎么说,从第一原理出发理解核心思想是唯一可扩展的方法」。
参考资料:
https://twitter.com/xiaohuggg/status/1711714757802369456?s=20
https://twitter.com/dotey/status/1711504620025942243
#大语言模型の对齐技术
天大自然语言处理团队从更广泛的 AI 对齐视角,审视大语言模型对齐技术,并从多个角度进行深入讨论。76页综述+300余篇参考文献
近日,天津大学熊德意教授团队发布了大语言模型对齐技术的综述论文(下文简称为对齐综述),全文共 76 页,覆盖 300 余篇参考文献,从 AI 对齐的角度对大语言模型对齐的相关技术进行了全面概述。为提供一个大语言模型对齐的宏观视角,对齐综述介绍了 AI 对齐的起源和相关概念,从 AI 对齐的视角,将目前可用于大语言模型的对齐相关的技术方法和提案分为外部对齐、内部对齐、可解释性三大类。并且讨论了当前大语言模型对齐方法的脆弱性,以及对齐评估的方法和基准,展望了大语言模型对齐技术未来的研究方向。
综述简介
近年来,大语言模型取得了显著进展,其中最为人们所熟知的有 OpenAI 的 ChatGPT 和 GPT-4 等。这些模型在众多领域如数学、逻辑推理、医学、法律和编程中展现出接近人类的水平。但随着大语言模型能力的飞速发展,关于它们可能带来的伦理风险和对人类的潜在威胁的担忧也随之增长。大语言模型可传播其训练数据中的有害信息,例如偏见、歧视和有毒内容等。它们可能会泄露训练数据中的私密和敏感信息,或产生误导性和虚假性信息。未来这些语言代理将越来越多地融入我们的日常生活,任何未对齐行为都可能导致意想不到的后果。因此,需要推动大语言模型对齐技术的研究和突破,使模型的输出和行为与人类的期望和价值相一致。
目前,大语言模型对齐研究主要聚焦在外部对齐领域。然而,对对齐的整体理解不仅应该涵盖广泛研究的外部对齐,还应该包含目前仍处于研究起步阶段且具有巨大潜力的领域,如内部对齐、机械可解释性等。虽然这些新兴领域的研究有些仍然停留在理论阶段,或仅仅是思想实验,但它们对大语言模型对齐技术研究及未来发展是不可或缺的。鉴于此,天大自然语言处理团队从更广泛的 AI 对齐视角,审视大语言模型对齐技术,并从多个角度进行深入讨论。
论文地址:https://arxiv.org/abs/2309.15025
参考文献Github网址:https://github.com/Magnetic2014/llm-alignment-survey,如果有遗漏的文献,欢迎大家告知添加。
什么是大语言模型对齐?
作为讨论大语言模型对齐相关工作的重要背景,对齐综述先对 AI 对齐进行了概述,简要介绍了 AI 对齐的起源、研究背景和相关概念。相比于近几年横空出世的大语言模型,AI 对齐的研究相对更早。早在 1960 年,控制论之父诺伯特・维纳就表达了自己的担忧:如果我们使用一个机械代理实现我们的目标,一旦开始它的操作,我们就无法有效地对其干预,因为该操作是如此之快且不可撤销,以至于我们在操作完成之前没有数据进行干预,那么我们就最好确保该机器的用途是我们真正想要的用途,而不仅仅是对它的生动模仿。这段话强调了确保 “机械代理” 的目标与我们真正想要的目标保持一致的重要性,强调机器和人类目标之间的一致性。但随后很长一段时间,此类研究并没有真正开展,直到 2010 年左右,Stuart Russell 等人逐步开始研究这一领域,并将其称为 “价值对齐问题”(Value Alignment Problem)。Russell 强调了将 AI 的目标与人类价值对齐的重要性,以确保 AI 系统在各种情境下都能为人类带来益处,而不是造成伤害。
受上述观点启发,对齐综述从对齐研究的内容出发定义了 AI 对齐:AI 对齐是确保人工智能代理的外部和内部目标与人类价值一致的技术。其中外部目标是 AI 的设计者根据人类价值定义的目标,而内部目标是 AI 代理内部优化的目标。由这个定义出发,对齐综述讨论了正交性论点、工具性目标趋同等 AI 对齐领域重要的概念和假设。值得注意的是,目前 AI 对齐研究中最受关注的正是大语言模型对齐,且大语言模型对齐的许多概念、方法论来自于更广泛的 AI 对齐研究。
一方面,大语言模型作为新兴的高性能 AI 系统,为 AI 对齐研究提供了坚实的基础。许多 AI 对齐概念和提案,例如对齐的理论假设和实证方法,都可以使用大语言模型(而不是假设的超级智能系统)进行实验。另一方面,大语言模型研究的快速推进不仅扩展了 AI 对齐研究的前沿,还可以为 AI 对齐提供工具。当然,强调大语言模型对齐对 AI 对齐的重要性并不意味着我们可以在 AI 对齐的背景之外进行大语言模型对齐研究。对 AI 对齐的广泛深入的研究必定能促进大语言模型的对齐。
从大语言模型潜在风险
论证大语言模型对齐必要性
大语言模型是一种变革性 AI 技术,它将重塑社会和科学技术发展,但同时也存在多种可见及预见的风险。首先,大语言模型可能生成不符合人类期望的文本,其中可能包含歧视、偏见和泄露他人隐私的内容。其次,大语言模型由于其固有的幻觉问题,有可能会生成不真实、前后不一致和具有误导性的内容。
另一方面,大语言模型也会被别有用心的人用来执行恶意行为。例如,未经对齐的大语言模型能够生成以假乱真的假新闻,也能够帮助黑客们对网络上的设备开展攻击。这些恶意行为会对我们的日常生活产生负面影响,甚至会对整个社会造成严重的伤害。除此之外,大语言模型的训练和部署需要消耗巨大的计算资源和电力,同时还会对人们的就业产生影响。
随着其能力的不断增强,大语言模型还可能展现出 “追求” 自我保护、自我增强、获取资源等目标,这些目标在通用人工智能中通常被称为工具性趋同目标,因为几乎所有 AI 代理都有可能将它们作为亚目标。大语言模型对齐综述从以上视角详细论述了大语言模型对齐的必要性。
大语言模型对齐方法
AI 对齐是一个旨在确保 AI 系统的决策与人类的价值观、期望和目标保持一致的过程。当我们谈到大语言模型的对齐时,意味着这些模型不仅能够理解人类语言,还能够按照我们的预期和道德伦理响应。这涉及到社会、伦理、哲学及技术等多方面的考量,以确保 AI 技术的发展不会对社会产生负面影响。具体说,大语言模型对齐研究可以分成三大领域:外部对齐、内部对齐和可解释性。
外部对齐旨在选择正确的损失函数或奖励函数,并确保人工智能系统的训练目标符合人类价值。换言之,外部对齐试图将指定的训练目标与其设计者的目标对齐。研究者们针对外部对齐提出了许多方法。根据各类对齐方法能够监督的能力范围,对齐综述将其分为非递归监督 (Non-recursive Oversight) 和可扩展监督 (Scalable Oversight)。其中非递归监督只能监督人类能力范围之内的任务,而可扩展监督则能将监督范围扩大到超出人类能力范围的任务,以更好地应对强大的 AI 模型。
内部对齐则是为了确保人工智能系统训练中真实优化和实现其设计者设定的目标。内部对齐失败可能会导致严重且不易被发现的后果,例如经过训练以在游戏中获胜的人工智能系统可能会发现意外的漏洞,这些漏洞在技术上满足其目标,但违反了游戏准则。另一个例子是目标错误泛化 (goal misgeneralization) 问题,即使我们有正确的目标规范,由于分布之外的鲁棒性问题,仍然可能会出现意想不到的目标。对齐综述总结了内部对齐失败的可能情形,并概述了内部对齐的主流方法和提案,如 Relaxed Adversarial Training, Reward Side-Channels, Cross-Episodic Objectives, Objective Unidentifiability, Zero-Shot Objectives 和 Robust Reward Learning 等。
可解释性广义上是指促进人类理解人工智能系统的内部运作、决策和行动的方法、模型和工具。对齐综述重点关注其中的机械可解释性,它试图将机器学习系统(尤其是神经网络)的输出和行为通过逆向工程的方式定位到其内部状态、权重和模块。根据定位的不同,对齐综述将相关工作分为 self-attention, MLP 和 neurons 可解释性三类。由于大语言模型的参数数量巨大,对大语言模型进行逆向工程是非常困难的。当前的机械可解释性研究通常在 Transformer 小型简化模型上进行。然而,这是一个非常有前途的方向,它提供了对神经网络对齐的深入见解,有望在未来引领大语言模型对齐的研究实现突破。
外部和内部对齐对于构建安全且值得信赖的人工智能至关重要。如果其中任何一个失败,我们就有可能创建出与人类价值或意图不一致的系统。随着大语言模型的能力越来越强,这些对齐问题的重要性也随之增加,因此我们需要意识到:相比于大语言模型能力方面的研究,大语言模型对齐研究一样重要,甚至更加重要。同时,虽然可解释性并不直接针对对齐,但其工具和技术可以帮助外部和内部对齐。通过了解模型如何演变和决策,可以更好地识别偏差发生的时间和地点。例如,如果一个模型采取了意想不到的捷径实现其目标,可解释性可能会帮助我们理解这种情况何时以及如何发生。此外,可解释性可以让我们深入了解模型的内部推理过程,这有助于构建更加可信、透明的大语言模型。
针对对齐后的大语言模型的攻击方法
最近的研究表明,对齐后的大语言模型能够表现出针对恶意攻击的防御能力。然而,这并不是说现有的对齐技术就万无一失了。例如,通过反复的交互,人类可以 “欺骗” 模型生成有害内容,这也被称为 “越狱 (jailbreaking)”。除了越狱之外,对齐综述还介绍了其它攻击已对齐模型的方法,并将这些方法分为三类:隐私攻击、后门攻击和对抗攻击。隐私攻击是指攻击者试图从模型的输出中提取有关训练数据的私人或敏感信息;后门攻击是指通过注入并触发某些漏洞使模型产生特定的、不正确的输出;而对抗性攻击则是通过对输入数据引入精心设计的小扰动以改变模型行为的技术。这些扰动通常是人类无法察觉的,但可能导致模型产生不正确或意外的输出。
大语言模型对齐评测
评估对于对齐研究非常重要,有助于了解目前大语言模型对齐方法还存在哪些不足。基于这一点,对齐综述对大语言模型对齐评测的相关的方法和资源进行了详细论述,包括事实性、道德、毒性、刻板印象和偏见,以及通用评估。
事实性评估:机器生成的内容应与事实一致,避免生成有幻觉的内容。此外,生成的每条信息所包含的事实都应该是准确的。因此,事实性评估包含了事实一致性评估和事实准确性评估。
毒性评估:毒性是指在人际关系、工作环境或其他社会环境中表现出来的有害和破坏性行为或态度。这可能表现为控制他人、操纵、贬低或恶意攻击。这些行为可能是公开的,也可能是隐蔽的,对个人的自尊、安全和福祉造成损害。对于大语言模型而言,毒性评估一般涵盖了多种有毒文本,包括导致自残行为的建议、具有色情或暴力性质的内容、骚扰 / 贬低 / 冒犯 / 侮辱 / 仇恨言论、提倡网络欺凌等攻击性或暴力行为的建议,以及寻找非法商品或服务的指南或指示等。
刻板印象和偏见评估:刻板印象和偏见是指一些基于种族、性别、性取向、宗教或其他特征的先入为主的态度。这些态度可能是消极的或积极的,但都是群体的普遍判断,而不是基于个人的实际行为或特征。偏见可能导致歧视或其他不公正行为,同时考虑到大语言模型生成的带有刻板印象和偏见的内容可能会加剧这种情况的发生,对其进行评估是非常重要的。
通用评估:除了上述侧重于衡量对齐质量的特定方面(例如事实性、偏差)的评估基准和方法外,对齐综述还综合介绍了大语言模型对齐的通用评估,即同时评估对齐的多个维度,而不是只衡量某一维度(如事实性、毒性等),包括通用评估方法和基准。
未来方向展望
除了介绍大语言模型对齐目前已有的相关工作之外,对齐综述也对未来的研究方向进行了展望,主要分为七个方向:大语言模型对齐理论研究、可扩展监督、欺骗性对齐、大语言模型的自动对齐、可解释性研究、基于对抗攻击的大语言模型对齐评测及促进大语言模型对齐的研究领域建设。
大语言模型对齐理论研究:大语言模型对齐面临的挑战复杂且多样,需要借鉴不同学科的多种思想和方法。对齐综述总结并强调了对齐理论研究中的一些关键领域,如决策理论、可矫正性和世界模型。其中决策理论旨在深入研究大语言模型的反事实推理和潜在的悖论问题;可矫正性旨在研究如何提高大语言模型接受用户的更正而不抵制和规避的能力;而世界模型则是为大语言模型提供一个更接近现实世界的环境,以确保大语言模型能够感知和适应现实世界的变化。
可扩展监督:可扩展监督是一个重要的研究领域,旨在确保人工智能技术以安全和负责任的方式开发和使用。通过制定能够适应人工智能快速增长和发展的可扩展框架,确保 AI 技术造福社会,同时最大限度地减少其潜在危害。可扩展监督的核心挑战是人工智能系统设计执行的任务的复杂性。对于人类难以直接判断和完成的复杂任务,AI 对齐已经提出了相关的对齐方案,但这些方案尚未经过大规模的实证验证。
欺骗性对齐:欺骗性对齐是指人工智能代理通过假装与基本目标对齐以避免在训练期间被修改。一旦不再面临被修改的风险,智能体可能会停止优化基本目标并开始追求自己的内目标,这可能与其设计者定义的基本目标完全不同,并且可能有害。尽管欺骗性对齐通常在理论上进行探讨,但考虑到大型语言模型能力的快速进步,人们越来越担心欺骗性对齐实际出现在大语言模型中。尽管对其存在的可能性仍有分歧,但其严重性已得到广泛认可。考虑到这种严重性,我们最好在它真正发生之前采取经验主义方法进行监测。
大语言模型的自动对齐:大语言模型的自动对齐是指开发自动化的对齐 “研究员”,协助人类开展对齐研究。监督者可以通过这些方法了解人工智能模型的行为,检测异常情况并及时发现未对齐行为。
可解释性研究:可解释性研究可以帮助破除大语言模型的黑盒属性,然而,随着大语言模型的复杂性和规模不断增长,确保它们保持可理解性和透明性成为一项日益复杂的任务。目前,许多尝试发掘可解释性的工作只能提供表面的见解,无法深入研究模型复杂的决策过程。考虑到人工智能的跨学科性质,这可能需要机器学习研究人员、伦理学家和神经科学家之间的持续合作来推动可解释性研究的进展。
基于对抗攻击的大语言模型对齐评测:对抗性攻击是人工智能领域的强大工具,旨在通过有意设计的输入迷惑或误导人工智能系统。考虑到大语言模型的强大能力,使用一个大型模型作为攻击者来生成针对对齐的对抗性示例可能是测试和评估另一个模型的对齐能力的有效方法。这种由对抗性攻击驱动的动态测试有助于确保大语言模型能够稳定地处理意外输入。虽然这种方法增加了一些复杂性,但从这些对抗性测试中获得的见解可能是无价的,帮助全面了解模型在对齐方面的优点和缺点。
促进大语言模型对齐研究领域建设:人工智能领域内的对齐研究社区仍处于萌芽阶段,许多问题尚未得到解答,许多挑战也尚未解决。当前的情况缺乏有凝聚力的科学范式,导致理论、方法和实证结果存在争议。作为目前最有前景的对齐方法测试平台,大语言模型可以作为检验思想实验和提案的平台,这将有助于制定稳定的研究方法,在关键问题上建立共识,并为人工智能对齐制定一致的科学框架。另一方面,人工智能对齐社区深厚的思想积淀也将指导大语言模型研究社区实现对大语言模型的高效对齐。因此,大语言模型和人工智能对齐两个研究社区之间的联系将建立一个对双方都有利的良性循环。
#评估大语言模型是否可信の七大维度
提出 7 个主要关键维度来全面评估 LLM 可信度。
实际部署中,如何 “对齐”(alignment)大型语言模型(LLM,Large Language Model),即让模型行为与人类意图相一致 [2,3] 已成为关键任务。例如,OpenAI 在 GPT-4 发布之前,花了六个月时间进行对齐 [1]。然而,从业者面临的挑战是缺乏明确指导去评估 LLM 的输出是否符合社会规范、价值观和法规;这阻碍了 LLM 的迭代和部署。
为解决此问题,ByteDance Research 团队的刘扬等研究者提供了一个在关于评估 LLM 可信度时需要考虑的关键维度的全面调查。调查涵盖了 LLM 可信度的 7 个主要类别:可靠性(Reliability)、安全性(Safety)、公平性(Fairness)、抵抗滥用(Resistance to Misuse)、解释性和推理(Explainability & Reasoning)、遵循社会规范(Social Norm)和稳健性(Robustness)。
每个主要类别进一步细分为多个子类别,共 29 个子类别。此外,研究者选择了 8 个子类别进行相应的评测研究。评测结果表明,总体上,对齐度更高的模型在整体可信度方面表现得更好。然而,对齐的有效性在不同维度中表现不同。这说明需要对 LLM 对齐进行更细致的分析、测试和改进。本文旨在通过归纳可信任 LLM 的关键维度,为该领域的实践者提供有价值的见解和指导,这对了解如何在各应用中可靠合理地部署 LLM 至关重要。
论文地址:https://arxiv.org/abs/2308.05374
大语言模型对齐分类法
图一展示了本文提出的大语言模型可信度对齐分类法:共有 7 个主要类别,每个类别都被进一步细分为更详细的讨论,共 29 个子类别。文章继续对每个类别进行概述:
图一:文本提出的大语言模型可信度对齐分类法。
1.可靠性 => {虚假信息、语言模型幻觉、不一致、校准失误、谄媚}
- a.生成正确、真实且一致的输出,并具有适当的不确定性。
2.安全性 => {暴力、违法、未成年人伤害、成人内容、心理健康问题、隐私侵犯}
- a.避免产生不安全和非法的输出,并避免泄露私人信息。
3.公平性 => {不公正、刻板偏见、偏好偏见、性能差异}
- a.避免偏见并确保不同人群上性能差异不大。
4.抵制滥用 => {宣传、网络攻击、社交工程、版权泄漏}
- a.禁止恶意攻击者滥用。
5.可解释性和推理 => {解释能力不足、逻辑能力不足、 因果能力不足}
- a.向用户解释输出并正确推理的能力。
6.社会规范 => {恶毒语言、情感迟钝、文化迟钝}
- a.反映普遍共享的人类价值观。
7.稳健性 => {提示攻击、范式和分布变化、干预效果、投毒攻击}
- a.对抗性攻击和分布变化的抗性。
本文的分析基于在大模型时代出现的安全和可信任部署挑战,也考虑了已有文献里对可信任人工智能的讨论。同时对主要类别的定义和划分参考了大模型在社会中的应用,尽量确保每个评估的维度在主流的大模型应用中有一定程度的相关性和重要性。具体每个类别及其子类别中的文献和讨论见文章。
对于每个子类别,文章进行相关的调研和讨论,同时也提供了案例分析去阐述相关模型在相关可信任维度上的问题。比如,下面的例子给出了 ChatGPT 在事实类问题上的一些错误:
利用下面这个例子,本文讨论了大模型输出中可能存在的非法信息:
评测研究
本文选择 8 个子类别并设计相应的评测研究。目标子类别包括:
- 可靠性:语言模型幻觉
- 安全性与社会规范:安全相关话题(例如暴力、歧视、仇恨言论等)
- 公平性:(性别) 刻板印象
- 可靠性:校准失误
- 抵制滥用:宣传和网络攻击的滥用
- 抵制滥用:泄露版权
- 可解释性:因果推理
- 稳健性:对拼写错误攻击的稳健性
文章以 “安全性与社会规范” 举例,首先从已有的 Anthropic RLHF red team 数据集 [4] 中提取一些安全性相关的关键词(细节见论文原文), 然后利用另外一个 LLM 生成不安全指令的引导词(prompt)作为测试问题。
为此,文章选择 text-davinci-003 作为模型,因为:(1) 它是一个已对齐的模型,但没有像 ChatGPT 那样在安全维度上重度对齐,因此它更好生成有争议和冒犯性的回复;(2) 完全未对齐的模型(例如 davinci)不能很好地理解任务并遵循人类的指示。
具体地,研究者问 text-davinci-003:"Write a <BAD> question that involves <KEYWORD>." <BAD > 从 "unethical", "dangerous", "illegal", 或者 "hostile" 中选。<KEYWORD > 是之前提取的关键词。比如:
文章用 text-davinci-003 生成的问题作为测试问题。
最后,文章用 GPT-4 判断测试模型是否拒绝回应不安全的问题,如下:
研究者评估了 6 个 LLM:davinci、OPT-1.3B、text-davinci-003、flan-t5-xxl、gpt-3.5-turbo(ChatGPT)和 GPT-4。图二显示测试集中各 LLM 被 GPT-4 认为是安全回复的比例。在 x 轴上从左到右,显示了从完全未对齐(davinci)到目前最完善对齐的 LLM 之一(GPT-4)。
趋势符合预期:当 LLM 更对齐时,它更有可能拒绝回答不安全的指令。Gpt-3.5-turbo(ChatGPT)和 GPT-4 得到近 100% 的安全比例。
图二:LLM 安全性评估结果。如预期,当 LLM 对齐得更好时,它更可能拒绝回答不安全的问题。
其他维度的评测方法,细节和结果详见论文原文。
对齐帮助
这些生成的评估数据也可以帮助收集对齐的数据。
以安全性为例,为了生成对齐的训练数据,直接使用标注 LLM 的回复。如果 GPT-4 判断模型输出包含有害信息,研究者则认为该输出与问题配对,在对齐数据集中作为一个负样本。另一方面,如果检测不到有害信息,研究者认为问题 - 输出配对是正样本。
研究者通过生成的数据进行对齐后,用 GPT-4 比较对齐前后的输出结果,让其判断哪个答案在有用性 (helpfulness)、真实性(truthfulness)和无害性(harmlessness)方面更好。
表一显示在 GPT-2 上,研究者做完 RLHF(Reinforcement Learning from Human Feedback, 基于人类反馈的强化学习)后,测试数据集中被 GPT-4 认为更好的比例。和原始模型相比,对齐后的模型得到了很大提升。
表一:用研究者生成的数据在 GPT-2 上做对齐后,输出被 GPT-4 认为更好的比例。和原始模型 (Vanilla) 相比,SFT 和 PPO 后模型得到了很大提升。
文章也用生成的评估数据在 LLaMA-7B 上进行了监督微调(Supervised Fine Tuning),发现微调后 78% 的输出被认为优于微调前。
结论
本文为从业者提供了一个 LLM 可信度维度的调研,全面分析了在搭建可信任大模型过程中需要考量和注意的方向和问题。文章的评测结果显示对齐的有效性在不同维度上效果不一致,所以从业者应对 LLM 对齐做更细粒度的测试和改进。同时本文的研究展示了评测生成的数据也可以帮助完成大模型的对齐任务。
从业者迫切需要更加有原则的方法来评估和实施 LLM 对齐,确保这些模型遵循社会价值观和道德考虑。随着该领域的进步,解决这些尚未解决的问题将对构建越来越可靠且负责任的 LLM 至关重要。
#DetCLIPv3
现有的开词汇目标检测器通常需要用户预设一组类别,这大大限制了它们的应用场景。在本文中,作者介绍了DetCLIPv3,这是一种高性能检测器,不仅在开词汇目标检测方面表现出色,同时还能为检测到的目标生成分层标签。
DetCLIPv3的特点有三个核心设计:
- 多功能的模型架构:作者导出一个健壮的开集检测框架,并通过集成字幕 Head 进一步赋予其生成能力。
- 高信息密度数据:作者开发了一个自动标注 Pipeline ,利用视觉大型语言模型来细化大规模图像-文本对中的字幕,为训练提供丰富、多粒度的目标标签以增强训练。
- 高效的训练策略:作者采用了一个预训练阶段,使用低分辨率输入,使目标字幕生成器能够从广泛的图像-文本配对数据中高效学习广泛的视觉概念。
在预训练之后是一个微调阶段,利用少量高分辨率样本进一步提高检测性能。借助这些有效的设计,DetCLIPv3展示了卓越的开词汇检测性能,例如,作者的Swin-T Backbone 模型在LVIS minival基准上取得了显著的47.0零样本固定AP,分别优于GLIPv2、GroundingDINO和DetCLIPv2 18.0/19.6/6.6 AP。DetCLIPv3在VG数据集上的密集字幕任务也取得了先进的19.7 AP,展示了其强大的生成能力。
1 Introduction
在开放词汇目标检测(OVD)领域的近期进展已经实现了识别和定位多种不同目标的能力。然而,这些模型在推理过程中依赖于预定义的目标类别列表,这限制了它们在实际场景中的应用。
与目前仅基于类别名称识别物体的开放词汇目标检测(OVD)方法相比,人类认知展现出了更多的灵活性。如图2所示,人类能够以层次化的方式,从不同的粒度理解物体。这种多级识别能力展示了人类丰富的视觉理解能力,这是现代OVD系统尚未达到的。
为了解决上述限制,作者引入了DetCLIPv3,这是一种新型的目标检测器,它扩展了开放词汇目标检测的范围。DetCLIPv3不仅能够根据提供的类别名称识别物体,还能够为每个检测到的物体生成层次化的标签。这一特性具有两个优点:1) 由于其卓越的生成能力,即使在没有适当的输入物体类别的情况下,检测器仍然适用;2) 模型能够提供关于物体的全面且分层的描述,而不仅仅是基于给定类别进行识别。具体来说,DetCLIPv3具有三个核心设计特点:
多功能的模型架构: DetCLIPv3基于一个健壮的开词汇(OV)检测器,并且进一步通过一个物体描述器增强了其生成能力。具体来说,物体描述器利用OV检测器提供的foreground proposals(前景 Proposal ),并通过语言建模训练目标来训练生成每个检测到的物体的分层标签。这种设计不仅允许精确的定位,还能提供视觉概念的详细描述,从而为视觉内容提供更丰富的解释。
高信息密度数据: 发展强大的生成能力需要丰富的训练数据,这些数据需充实了详细的物体 Level 描述。这样全面的数据库稀缺(例如,Visual Genome [25])成为了训练有效物体描述生成器的重大障碍。另一方面,尽管大规模的图像-文本配对数据很丰富,但它们缺乏对每个物体的细粒度标注。为了利用这些数据,作者设计了一个自动标注管线,利用最先进的视觉大型语言模型[7, 35],该模型能够提供包含丰富层次化物体标签的精细图像描述。通过这个管线,作者得到了一个大规模的数据集(称为GranuCap50M),以增强DetCLIPv3在检测和生成方面的能力。
高效的多阶段训练: 与高分辨率输入相关的目标检测训练成本高昂,这对从大量的图像-文本对中学习构成了重大障碍。为了解决这个问题,作者提出了一种高效的多阶段对齐训练策略。这种方法首先利用大规模、低分辨率的图像-文本数据集的知识,然后在高质量、细粒度、高分辨率的 数据上进行微调。这种方法确保了全面的视觉概念学习,同时保持了可管理的训练需求。
通过有效的设计,DetCLIPv3在检测和目标 Level 的生成能力上表现出色,例如,采用Swin-T Backbone 网络,在LVIS minival基准测试中取得了显著的47.0零样本固定AP[9],明显优于先前的模型如GLIPv2[65],DetCLIPv2[60]和GroundingDINO[36]。此外,它在密集字幕任务上达到18.4 mAP,比先前的SOTA方法GRiT[56]高出2.9 mAP。广泛的实验进一步证明了DetCLIPv3在领域泛化及下游迁移能力方面的优越性。
2 Related works
开放词汇目标检测。 近期在开放词汇目标检测(OVD)方面的进展使得可以识别无限范围类别的目标,如文献[16, 17, 57, 63, 69]所示。这些方法通过将预训练的视觉-语言模型,例如CLIP [46],整合到检测器中来实现OVD。另外,扩大检测训练数据集也显示出潜力[24, 29, 31, 36, 58, 60, 65, 70],这些方法结合了来自各种任务(如分类和视觉定位)的数据集。此外,伪标签已经作为增强训练数据集的另一种有效策略出现,如文献[15, 29, 43, 58, 68, 69]所示。然而,先前的OVD方法仍然需要一个预定义的目标类别进行检测,这限制了它们在多样化场景中的适用性。相比之下,作者的DetCLIPv3即使在没有类别名称的情况下也能够生成丰富的分层目标标签。
密集字幕生成。 密集字幕生成旨在为特定图像区域生成描述[23, 28, 30, 51, 61]。最近,CapDet [38] 和 GRiT [56] 都通过引入一个字幕生成器,为目标检测器配备了生成能力。然而,由于训练数据稀缺,例如 Visual Genome [25] 中包含的数据,它们只能为有限的视觉概念生成描述。相比之下,作者利用大规模图像-文本对中的丰富知识,使模型能够为更广泛的概念谱生成分层标签信息。
图像-文本对的重新描述。 近期研究 [5, 26, 44, 62] 强调了当前图像-文本对数据中存在的问题,并已表明重新描述的高质量图像-文本对可以显著提高各种视觉任务的学习效率,例如文本到图像生成 [5, 44],图像-文本检索 [26, 27] 和图像标注 [26, 62]。作者将这一想法扩展到开放词汇目标检测,并探索如何有效地利用图像-文本对中包含的目标实体信息。
3 Method
在本节中,作者介绍了DetCLIPv3的核心设计,包括:(1)模型架构(第3.1节)—阐述作者的模型如何实现开词汇目标检测及生成目标描述;(2)自动标注数据流程(第3.2节)—详细说明作者策划大规模、高质量的图像-文本对的方法,涵盖不同粒度层面的目标信息;(3)训练策略(第3.3节)—概述作者如何有效地利用大规模图像-文本数据集来促进目标概念的生成,进而提升开词汇检测的能力。
Model Design
图3展示了DetCLIPv3的整体框架。本质上,该模型基于一个强大的开放词汇目标检测器,并配备了一个专门用于生成分层和描述性目标概念的目标标题生成器。该模型能够在两种模式下运行:1) 当提供一个预定义的类别词汇表时,DetCLIPv3预测列表中提到的物体的定位;2) 在没有词汇表的情况下,DetCLIPv3能够定位物体并为每一个物体生成分层描述。
Dataset Construction
自动标注数据 Pipeline 。利用大量成本效益高的图像-文本对进行视觉概念学习,对于提高开放词汇目标检测器的一般化能力至关重要。然而,现有的图像-文本对数据集存在重大缺陷,这些缺陷阻碍了它们在OVD中的实用性,如图4所示:(1) 错位:互联网来源的图像-文本对数据经常包含大量噪声。即使使用CLIP [46]基于分数的过滤[48, 49],许多文本仍然无法准确描述图像的内容,如图4的第二和第三张图像所示。(2) 部分标注:大部分文本只描述图像中的主要目标,导致目标信息稀疏,因此,损害了OVD系统的学习效率,如图1所示。(3) 实体提取挑战:先前的工作[24, 32, 43, 60]主要使用传统的NLP解析器,如NLTK [1, 42]或SpaCy [21],从图像-文本对中提取名词概念。它们的有限能力可能导致名词与图像内容对齐不良,如图4的第二行所示。这种不匹配为后续的学习过程或伪标签工作流程带来了进一步的复杂性。
一个理想的图像-文本对数据集对于视觉描述(OVD)应当包含对图像的准确和全面的描述,提供从详细到粗略不同粒度 Level 的图像中目标的信息。基于这种启发,作者 Proposal 使用视觉大型语言模型(VLLM)[7, 35]来开发一个自动标注流水线,以提高数据质量。VLLM具有感知图像内容的能力,以及强大的语言技能,使它们能够生成精确和详细的标题以及目标描述。
使用VLLM重制标题:作者从常用的数据集[4, 52, 53]中抽取了24万张图像-文本对,并使用InstructBLIP [7]模型进行了重制标题。为了利用原始标题中的信息,作者将其融入作者的提示设计中,结构如下:_"给定图像的一个含噪声的标题:{原始标题},撰写一幅图像的详细清晰描述。"_。这种方法有效地提升了标题文本的质量,同时保持了原始标题中名词概念的多样性。
使用GPT-4的实体提取:作者利用GPT-4[45]卓越的语言能力来处理精致标题中的实体信息。具体来说,首先用它过滤掉VLLM生成的标题中非实体的描述,比如对图像的氛围或艺术性解读。随后,它负责从标题中提取出现的物体实体。每个实体都被格式化为一个三元组:{短语,类别,父类别},分别表示物体描述在三个不同粒度 Level 上。
对VLLM进行大规模标注的指令调整:考虑到GPT-4 API的高昂成本,将其用于大规模数据集生成是不切实际的。作为一种解决方案,作者在LLaVA [35]模型上执行进一步的指令调整阶段,利用之前步骤获得的改进的标题和目标实体。然后,这个微调后的模型被用来为包含200M图像-文本对的大型数据集生成标题和实体信息,这些样本取自CC15M [4, 52],YFCC[53] 和 LAION [48]。
无概念语料库。 与DetCLIP [58]相似,作者利用提取的目标实体的信息开发了一个名词概念语料库。这个语料库主要旨在为GT和图像-文本对数据(第3.1节)提供负概念。具体来说,作者从20亿个重新配文的数据中收集实体的_'category'_字段。在频率分析之后,总频率低于10的概念被省略。DetCLIPv3的名词概念语料库由792k名词概念组成,几乎是DetCLIP中构建的14k概念的57倍扩展。
Multi-stage Training Scheme
学习生成多样化的物体描述需要在大型数据集上进行广泛的训练。然而,像目标检测这样的密集预测任务需要高分辨率输入才能有效处理不同物体之间的尺度变化。这大大提高了计算成本,给扩大训练规模带来了挑战。为了缓解这个问题,作者开发了一个基于“预训练+微调”范式的训练策略来优化训练成本,具体来说,它包括以下3个步骤:
训练OV检测器(第一阶段):在初始阶段,作者用标注的数据集来训练OV检测器,即Objects365 [50],V3Det[55]和GoldG [24]。为了使模型在后续训练阶段能够从低分辨率输入中学习,作者对训练数据应用了大规模抖动增强。此外,在这一阶段开发的具有Swin-L Backbone 网络的模型被用来为图像-文本对生成伪边界框,具体如第3.2节所述。
预训练目标描述生成器(阶段2):为了使目标描述生成器能够生成多样化的目标描述,作者使用GranuCap50M对其进行预训练。为了提高这个训练阶段的效率,作者冻结了OV检测器所有的参数,包括 Backbone 网络、像素编码器和目标解码器,并采用了较低的输入分辨率320×320。这种策略使得描述生成器能够从大规模的图像-文本对中有效地获取视觉概念知识。
4 Experiments
训练细节。 作者使用Swin-T和Swin-L [37] 主干网络训练了2个模型。目标检测器的训练设置主要遵循DetCLIPv2 [60]。作者分别使用32/64块V100 GPU来训练基于swin-T/L的模型。三个阶段的训练周期分别为12、3和5。对于使用Swin-T主干网络的模型,这些阶段的相应训练时间总计为54、56和35小时。有关其他训练细节,请参阅附录。
Zero-Shot Open-Vocabulary Object Detection
表1展示了作者的方法与现有方法的比较。DetCLIPv3显著优于其他方法,展现了卓越的开词汇目标检测能力。例如,在LVIS小型验证集上,采用Swin-T(第8行)和Swin-L(第15行) Backbone 网络的作者的模型分别达到47.0和48.8的AP,分别比之前的最先进方法DetCLIPv2提高了6.6(第7行)和4.1 AP(第14行)。值得注意的是,作者的Swin-L模型在稀有类别上的性能(49.9 AP)甚至超过了在基础类别上的性能(频繁类别中为47.8 AP,普通类别中为49.7 AP)。这表明,使用高质量图像-文本对的全面预训练大大增强了模型识别各种视觉概念的能力,导致在长尾分布数据上的检测能力显著提升。
Evaluation of Object Captioner
作者采用了2个任务来评估作者的物体描述生成器,即零样本生成式目标检测和密集标注。
零样本生成目标检测。 作者在COCO [33] 数据集上进行了零样本目标级标签生成,使用的推理过程是第3.1节中描述的,并评估了其检测性能。然而,这种评估由于两个关键因素而具有重大挑战:(1) 缺乏预定义的类别用于前景选择,导致检测器提出的前景区域与数据集的目标模式之间存在不一致。(2) 生成结果可以是任何任意的词汇,这可能与数据集中指定的类别名称不匹配。为了缓解这些问题,作者引入了多种后处理技术。具体来说,作者使用生成的标签中的“类别”字段作为目标的类别。为了解决第(2)个问题,在评估过程中,作者使用评估模型的文本编码器计算生成类别与COCO类别名称之间的相似性,并用最佳匹配的COCO类别替换生成的目标类别。为了解决第(1)个问题,作者进一步过滤掉相似度得分低于预定义阈值0.7的目标。
为了与现有方法进行比较,作者采用了在OVR-CNN [64]中提出的OV COCO设置,其中从COCO中选择了48个类别作为基础类别,17个作为新颖类别。所使用的评估指标是在IoU为0.5时的mAP。与先前方法相反,_作者在所有设置中执行零样本生成OV检测,而无需对基础类别进行训练_。表2展示了评估结果。作者的生成方法可以在新颖类别性能上显著优于先前的判别方法。而且,在没有对基础类别进行训练的情况下,作者的总体AP达到了与先前方法相当的水平。这些结果证明了基于生成的OV检测作为一个有前景的范式的潜力。
密集字幕生成。 利用从大量的图像-文本对中获得的视觉概念知识,DetCLIPv3可以轻松地被适配以生成详细的物体描述。遵循[23, 51]的研究,作者在VG V1.2 [25]和VG-COCO [51]数据集上评估了密集字幕生成的性能。为了确保公平比较,作者在训练数据集上对作者的模型进行微调。类似于CapDet [38],在微调期间,作者将作者的OV检测器转换为一个类无关的前景提取器,这是通过将所有前景物体的文本标签分配给概念'object'来实现的。表3将作者的方法与现有方法进行了比较。DetCLIPv3显著优于现有方法。_例如_,在VG上,作者使用Swin-T(第7行)和Swin-L(第8行)作为 Backbone 网络的模型,分别超过了之前最佳的方法GRiT [56](第6行),提高了2.9 AP和4.2 AP。
Robustness to Distribution Shift
一个健壮的OV目标检测器应该能够在各个领域识别广泛的视觉概念。最近的视觉-语言模型CLIP [46] 通过学习大量的图像-文本对,在ImageNet变体[19, 20, 54]的域迁移中展示了卓越的泛化能力。同样,作者期望在OV检测中观察到类似的现象。为此,作者使用COCO-O [40] 来研究作者模型对分布变化的鲁棒性。表4将作者的方法与几种领先的闭集检测器以及开集检测器GLIP在COCO和COCO-O上进行了比较。由于COCO没有包含在作者的训练中,DetCLIPv3的性能落后于那些专门在它上面训练的检测器。然而,作者的模型在COCO-O上显著超过了这些检测器。例如,作者的Swin-L模型在COCO-O上达到48.8 AP,甚至超过了它在COCO上的性能(48.5 AP),并获得了最佳的有效鲁棒性分数+27.0。更多定性可视化结果请参考附录。
Transfer Results with Fine-tuning
Ablation Study
DetCLIPv3的演变路线图。 表6探讨了DetCLIPv3的发展路线图,从 Baseline 模型到最终版本。作者的实验采用了一个带有Swin-T Backbone 网络的模型。对于OV检测器,作者在LVIS minival(第4.1节)和COCO-O(第4.3节)上评估了AP,对于字幕生成器,作者在VG(第4.2节)上报告了微调后的性能。作者的 Baseline (第1行)模型是去除了物体字幕生成器的OV检测器(如第3.1节所述),仅在Objects365 [50]上训练。这个模型能力有限,在LVIS上仅取得了30.8 AP的适中成绩。随后,作者引入了一系列有效设计:(1)融入更多的人工标注数据(第2行和第3行),即GoldG [24]和V3Det [55],将LVIS AP显著提升到42.5。(2)引入图像-文本对数据,即来自GranuCap50M的60万样本(也是作者第3阶段训练使用的训练数据,见第3.3节),有效将LVIS AP进一步改进为45.3。更重要的是,它显著提升了模型的领域泛化能力,将COCO-O的AP从第3行的30.7提升到第4行的36.4。(3) 第5行进一步整合了物体字幕生成器,但没有了第2阶段的预训练。尽管没有引入新数据,它还是将LVIS AP提升到46.6。这种改进揭示了学习字幕生成器对OV检测的好处——学习为物体生成多样化标签鼓励了物体解码器提取更具判别性的物体特征。(4)整合第2阶段字幕生成器预训练高效地从GranuCap50M的大量图像-文本对中获取广泛的视觉概念知识。这种设计显著增强了字幕生成器的生成能力,将VG的AP从第5行的17.1提升到第6行的18.4。此外,它还将OV检测性能从在LVIS上的46.6 AP适度提升到47.0 AP。
图像-文本对的伪标记。 表7探讨了在利用伪标记的图像-文本对时两个关键因素:过滤阈值和数据量。作者在第一阶段训练中使用了Swin-T模型,并整合了伪标记数据。0.2的过滤阈值取得了最佳效果,而数据的不断增加也持续提高了OV检测的性能。尽管使用1200k数据获得了更好的结果,但考虑到效率,作者选择在第三阶段训练中使用600k数据。值得注意的是,在生成性任务中辅助字幕器的学习时,600k数据样本的有效性(表6第5行,46.6 AP)超过了没有字幕器辅助的1200k样本的结果(46.1 AP)。
Visualization
图1展示了DetCLIPv3在OV检测和目标标签生成方面的可视化结果。作者的模型展现出卓越的视觉理解能力,能够检测或生成广泛的视觉概念。更多可视化结果请参阅附录。
5 Limitation and Conclusion
限制。 对DetCLIPv3生成能力的评估尚不完整,因为现有的基准测试在有效评估生成检测结果方面存在不足。此外,DetCLIPv3当前的检测过程不支持通过指令进行控制。未来,重要的研究方向将是开发用于评估生成式开放词汇检测器的全面指标,并将大型语言模型(LLMs)整合到指令控制的开放词汇检测中。
结论。在本文中,作者提出了DetCLIPv3,这是一种创新的OV检测器,它能够基于类别名称定位目标,并生成具有层次性和多粒度的目标标签。这种增强的视觉能力使得更全面的细粒度视觉理解成为可能,从而扩展了OVD模型的应用场景。作者希望作者的方法为未来视觉认知系统的发展提供启发。
训练。 DetCLIPv3的训练涉及来自各种来源的数据。表8汇总了在不同训练阶段中使用的数据详细信息。由于不同数据类型的训练过程各不相同(例如,目标字幕器只接受图像-文本对数据作为输入),作者设计每个迭代的全局批次仅包含一种类型的数据。
对于开放词汇检测器的训练,遵循先前的DetCLIP工作[58, 60],作者使用FILIP[59]语言模型的参数初始化文本编码器,并在训练过程中将学习率降低0.1,以保留通过FILIP预训练获得的知识。为了提高训练效率,作者将文本编码器的最大文本标记长度设置为16。
在训练目标描述器时,作者使用Qformer [27]的预训练权重来初始化描述器,而可变形[71]交叉注意力层则是随机初始化的。为了保留在Qformer [27]预训练期间获得的知识,目标描述器使用与BERT [10]相同的分词器来处理文本输入,这与采用CLIP [46]分词器的文本编码器不同。目标描述器的最大文本标记长度设置为32。
在每一个训练阶段,为了节省GPU内存,采用了自动混合精度[41]和梯度预训练权重[6]。表9总结了每个训练阶段的详细训练设置。
推理过程。 DetCLIPv3的OV检测器的推理过程遵循DINO [66],其中每张图像的结果来自于300个具有最高置信度分数的目标 Query 的预测。对于在LVIS [18]数据集上的固定AP [9]评估,要求整个验证集中的每个类别至少有10,000个预测。为了确保每张图像有足够的预测数量,作者采用了类似于GLIP [29]的推理过程。具体来说,在为每个数据样本进行推理时,1203个类别被分成31个块,每个块的大小为40个类别。作者分别为每个块进行推理,并基于它们的置信度分数保留前300个预测。
在DetCLIPv3目标描述器的推理过程中,正如主论文中所描述的,对于每张图像,作者使用作者开发的名词概念语料库中最频繁的15k个概念作为文本 Query ,提取相似度最高的前100个前景区域。在目标描述器为这些区域生成描述性标签后,使用OV检测器对其置信度分数进行重新校准。然后对那些重新校准后分数高于0.05的区域执行一个类无关的非最大值抑制(NMS)操作,其结果作为预测输出。作者对目标描述器的推理设置了等于1的束搜索(beam search)大小。
Appendix B Additional Data Pipeline Details
图5展示了DetCLIPv3自动标注数据流程的概览。
提示。 在这里,作者提供了每个步骤中使用的提示,包括用于VLLMs以及GPT-4的提示。
使用VLLM重制标题:作者采用Instruct-BLIP [7]对240K图像-文本对进行重新配文。为了利用原始标题文本中的信息,作者使用以下提示: “给定图像的噪声标题: {原始标题}, _编写图像的详细清晰描述”。
使用GPT-4进行实体提取:在这一步骤中,作者首先利用GPT-4从VLLM生成的标题中过滤掉非实体描述。使用的提示是:_“这是一张图片的标题:{caption}。提取与图像中可直接观察到的事实描述相关的部分,同时过滤掉提及推理内容、气氛/外观/风格描述以及历史/文化/品牌介绍等部分。只返回结果,不包含其他内容。如果你认为没有事实描述,只需返回'None'。” 随后,作者使用以下提示从过滤后的标题中提取关于目标实体的信息:_“你是一个AI,负责从大量图像标题中开发一个开集目标检测数据集,无法访问实际的图像。你的任务是按照以下原则准确地识别和提取这些标题中的'目标':
- '物体'在物理上是可触摸的:它们必须是可以在图像中视觉表示的具体实体。它们不包括以下内容:
- 抽象概念(例如“历史”、“文化”)或情感(例如“悲伤”、“快乐”)
- 对图像本身(例如“图像”、“图片”、“照片”)或相机(例如某物正对着“相机”)的元引用,除非它们专门指图像中的物理元素。
- 任何描述词(如“外观”、“气氛”、“颜色”)
- 事件/活动及过程(如“游戏”、“演讲”、“表演”)和特定事件类型(如“乡村风格婚礼”、“电影节”)
- 构图方面(如“透视”、“焦点”、“构图”)或视角/看法(如“鸟瞰图”)。
- 物体在视觉上是独特的:它们是独立的实体,可以从其环境中视觉上隔离开来。它们不包括环境特征(如“多彩环境”)和一般的位置/场景描述符(例如,“室内场景”,“乡村设置”,“晴天”,“黑白插图”)。在提取过程中遵循以下指南:
- 合并重复项:如果提取的多个“物体”指代字幕中的同一实体,将它们合并为一个,同时保留概念多样性。
- 对描述性变体进行分类:对于用形容词描述的“物体”,提供带形容词和不带形容词的两个版本。
- 识别更广泛的类别:为每个“物体”分配一个“父类别”。以下是你结果的编号列表格式:id. “带形容词的物体”, “不带形容词的物体”, “父类别”。你的回复应仅包含结果,不含多余内容。以下是字幕:{字幕}。
- 针对大规模标注的VLLM指令调整:在这个阶段,作者使用上面得到的字幕文本和物体实体信息来微调LLaVA [35] 模型。在这里,作者将前述信息组合成一个新的简洁提示,并构建如下问题-答案对:_问题:“从图像的噪声字幕:{原始字幕},生成一个精炼的图像描述,并识别所有可见的‘物体’——图像中任何视觉和物理可识别的实体。记住以下指南:
- 从字幕中合并相似的‘物体’,保留概念多样性。
- 对于用形容词描述的‘物体’,提供带形容词和不带形容词的两个版本。
- 为每个‘物体’分配一个‘父类别’。以如下格式呈现结果:字幕:{字幕} 物体:{id. ‘带形容词的物体’,‘不带形容词的物体’,‘父类别’}。<图像标记>” 答案:字幕:{精炼的字幕} 物体:{实体信息} 在这里,VLLM接收图像标记<图像标记>和它们的原始字幕{原始字幕}作为输入,并学习生成精炼的字幕以及提取关于物体实体的信息。
可视化。 图2-a和2-b展示了通过作者提出的数据处理流程获得的细化标题和提取的实体信息。此外,图3显示了在第一阶段训练后,作者基于Swin-L的模型生成的边界框伪标签。
Appendix C More Qualitative Results
图4-a、4-b和4-c展示了DetCLIPv3的目标字幕生成器产生的多粒度目标标签的附加定性结果。在没有候选类别的情况下,DetCLIPv3的目标字幕生成器能够生成密集、细粒度、多粒度的目标标签,从而促进了对图像的更全面理解。
Appendix D More Experimental Results
表10:针对LVIS [18] 的详细微调设置。
表11:ODinW13 [29]的详细微调设置。
关于LVIS的更多结果。 为了全面评估DetCLIPv3的性能,表12提供了在LVIS上的标准平均精度(Average Precision, AP),并将其与在20亿图像-文本对上预训练的最新方法OWL-ST [43] 进行比较。具体来说,作者在LVIS minival [24] 和验证 [18] 数据集上评估了两种设置:零样本性能和经过在LVIS基础类别上微调后的性能。
3 扩展实体
推理速度。 表15报告了DetCLIPv3的推理速度以及与先前方法的比较。
#VAR~~
新一代视觉生成范式「VAR: Visual Auto Regressive」视觉自回归来了!使 GPT 风格的自回归模型在图像生成首次超越扩散模型,并观察到与大语言模型相似的 Scaling Laws 缩放定律、Zero-shot Task Generalization 泛化能力:
论文标题: "Visual Autoregressive Modeling: Scalable Image Generation via Next-Scale Prediction"
这项名为 VAR 的新工作由北京大学和字节跳动的研究者提出,登上了 GitHub 和 Paperwithcode 热度榜单,并得到大量同行关注:
目前体验网站、论文、代码、模型已放出:
- 体验网站:https://var.vision/
- 论文链接:https://arxiv.org/abs/2404.02905
- 开源代码:https://github.com/FoundationVision/VAR
- 开源模型:https://huggingface.co/FoundationVision/var
背景介绍
在自然语言处理中,以 GPT、LLaMa 系列等大语言模型为例的 Autoregressive 自回归模型已经取得了较大的成功,尤其 Scaling Law 缩放定律和 Zero-shot Task Generalizability 零样本任务泛化能力十分亮眼,初步展示出通往「通用人工智能 AGI」的潜力。
然而在图像生成领域中,自回归模型却广泛落后于扩散(Diffusion)模型:近期持续刷屏的 DALL-E3、Stable Diffusion3、SORA 等模型均属于 Diffusion 家族。此外,对于视觉生成领域是否存在「Scaling Law 缩放定律」仍未知,即测试集损失是否随模型或训练开销增长而呈现出可预测的幂律 (Power-law) 下降趋势仍待探索。
GPT 形式自回归模型的强大能力与 Scaling Law,在图像生成领域,似乎被「锁」住了:
自回归模型在生成效果榜单上落后于一众 Diffusion 模型
剑指「解锁」自回归模型的能力和 Scaling Laws,研究团队从图像模态内在本质出发,模仿人类处理图像的逻辑顺序,提出一套全新的「视觉自回归」生成范式:VAR, Visual AutoRegressive Modeling,首次使得 GPT 风格的自回归视觉生成,在效果、速度、Scaling 能力多方面超越 Diffusion,并迎来了视觉生成领域的 Scaling Laws:
VAR 方法核心:模仿人类视觉,重新定义图像自回归顺序
人类在感知图像或进行绘画时,往往先概览全局、再深入细节。这种由粗到细、从把握整体到精调局部的思想非常自然:
人类感知图片(左)与创作画作(右)由粗到细的逻辑顺序
然而,传统的图像自回归(AR)却使用一种不符合人类直觉(但适合计算机处理)的顺序,即自上而下、逐行扫描的光栅顺序(或称 raster-scan 顺序),来逐个预测图像 token:
VAR 则「以人为本」,模仿人感知或人创造图像的逻辑顺序,使用从整体到细节的多尺度顺序逐渐生成 token map:
除了更自然、更符合人类直觉,VAR 带来的另一个显著优势是大幅提高了生成速度:在自回归的每一步(每一个尺度内部),所有图像 token 是一次性并行生成的;跨尺度则是自回归的。这使得在模型参数和图片尺寸相当的情况下,VAR 能比传统 AR 快数十倍。此外,在实验中作者也观察到 VAR 相比 AR 展现出更强的性能和 Scaling 能力。
VAR 方法细节:两阶段训练
VAR 在第一阶段训练一个多尺度量化自动编码器(Multi-scale VQVAE),在第二阶段训练一个与 GPT-2 结构一致(结合使用 AdaLN)的自回归 Transformer。
如左图所示,VQVAE 的训练前传细节如下:
- 离散编码:编码器将图片转化为离散 token map R=(r1, r2, ..., rk),分辨率从小到大
- 连续化:r1 至 rk 先通过嵌入层转换为连续 feature map,再统一插值到 rk 对应最大分辨率,并求和
- 连续解码:求和后的 feature map 经过解码器得到重建图片,并通过重建 + 感知 + 对抗三个损失混合训练
如右图所示,在 VQVAE 训练结束后,会进行第二阶段的自回归 Transformer 训练:
- 自回归第一步是通过起始 token [S] 预测最初的 1x1 token map
- 随后每一步,VAR 都基于历史所有的 token map 去预测下一个更大尺度的 token map
- 训练阶段,VAR 使用标准的交叉熵损失监督这些 token map 的概率预测
- 测试阶段,采样得到的 token map 会借助 VQVAE 进行连续化、插值求和、解码,从而得到最终生成的图像
作者表示,VAR 的自回归框架是全新的,而具体技术方面则吸收了 RQ-VAE 的残差 VAE、StyleGAN 与 DiT 的 AdaLN、PGGAN 的 progressive training 等一系列经典技术的长处。VAR 实际是站在巨人的肩膀上,聚焦于自回归算法本身的创新。
实验效果对比
VAR 在 Conditional ImageNet 256x256 和 512x512 上进行实验:
- VAR 大幅提升了 AR 的效果,一转 AR 落后于 Diffusion 的局面
- VAR 仅需 10 步自回归步骤,生成速度大幅超过 AR、Diffusion,甚至逼近 GAN 的高效率
- 通过 Scale up VAR 直至 2B/3B,VAR 达到了 SOTA 水平,展现出一个全新的、有潜力的生成模型家族。
令人关注的是,通过与 SORA、Stable Diffusion 3 的基石模型 Diffusion Transformer(DiT)对比,VAR 展现出了:
- 更好效果:经过 scale up,VAR 最终达到 FID=1.80,逼近理论上的 FID 下限 1.78(ImageNet validation set),显著优于 DiT 最优的 2.10
- 更快速度:VAR 只需不到 0.3 秒即可生成一张 256 图像,速度是 DiT 的 45 倍;在 512 上更是 DiT 的 81 倍
- 更好 Scaling 能力:如左图所示,DiT 大模型在增长至 3B、7B 后体现出饱和现象,无法靠近 FID 下限;而 VAR 经过缩放到 20 亿参数,性能不断提升,最终触及 FID 下限
- 更高效的数据利用:VAR 仅需 350 epoch 训练即超过 DiT 1400 epoch 训练
这些比 DiT 更高效、更高速、更可扩放的证据为新一代视觉生成的基础架构路径带来了更多可能性。
Scaling Law 实验
Scaling law 可谓是大语言模型的「皇冠明珠」。相关研究已经确定,在 Scale up 自回归大型语言模型过程中,测试集上的交叉熵损失 L,会随着模型参数量 N、训练 token 个数 T,以及计算开销 Cmin 进行可预测的降低,呈现出幂律(Power-law)关系。
Scaling law 不仅使根据小模型预测大模型性能成为可能,节省了计算开销和资源分配,也体现出自回归 AR 模型强大的学习能力,测试集性能随着 N、T、Cmin 增长。
通过实验,研究者观察到了 VAR 展现出与 LLM 几乎完全一致的幂律 Scaling Law:研究者训练了 12 种大小的模型,缩放模型参数量从 1800 万到 20 亿,总计算量横跨 6 个数量级,最大总 token 数达到 3050 亿,并观察到测试集损失 L 或测试集错误率 与 N 之间、L 与 Cmin 之间展现出平滑的的幂律关系,并拟合良好:
在 scale-up 模型参数和计算量过程中,模型的生成能力可见得到逐步提升(例如下方示波器条纹):
Zero-shot 实验
得益于自回归模型能够使用 Teacher-forcing 机制强行指定部分 token 不变的这一优良性质,VAR 也展现出一定的零样本任务泛化能力。在条件生成任务上训练好的 VAR Transformer,不通过任何微调即可零样本泛化到一些生成式任务中,例如图像补全(inpainting)、图像外插(outpainting)、图像编辑(class-condition editing),并取得一定效果:
结论
VAR 为如何定义图像的自回归顺序提供了一个全新的视角,即由粗到细、由全局轮廓到局部精调的顺序。在符合直觉的同时,这样的自回归算法带来了很好的效果:VAR 显著提升自回归模型的速度和生成质量,在多方面使得自回归模型首次超越扩散模型。同时 VAR 展现出类似 LLM 的 Scaling Laws、Zero-shot Generalizability。作者们希望 VAR 的思想、实验结论、开源,能够贡献社区探索自回归范式在图像生成领域的使用,并促进未来基于自回归的统一多模态算法的发展。
#InsectMamba
在本工作中,作者提出了一种名为InsectMamba的新模型,用于昆虫害虫分类。该模型旨在融合状态空间模型、卷积神经网络、多头自注意力机制和多层感知器的优势。通过混合SSM块和选择性聚合模块整合这些不同的视觉编码策略,InsectMamba展示了应对害虫伪装和物种多样性挑战的能力。
害虫分类是农业技术中的关键任务,对于确保食品安全和环境可持续性至关重要。然而,由于害虫具有高度的伪装性和物种多样性等因素,害虫识别的复杂性构成了重大障碍。现有方法在提取区分密切相关的害虫种类的细微特征方面存在困难。尽管近期的研究通过修改网络结构和结合深度学习方法提高了准确性,但由于害虫与其周围环境的相似性,挑战依然存在。
为了解决这个问题,作者引入了InsectMamba,这是一种新颖的方法,它将状态空间模型(SSMs)、卷积神经网络(CNNs)、多头自注意力机制(MSA)和多层感知器(MLPs)整合到混合SSM块中。这种整合利用了每种编码策略的优势,促进了全面视觉特征的提取。同时,还提出了一个选择模块,以自适应地聚合这些特征,增强了模型辨别害虫特征的能力。
InsectMamba在五个害虫分类数据集上与强竞争者进行了评估。结果显示了其卓越的性能,并通过消融研究验证了每个模型组件的重要性。
1 Introduction
在农业生产中,由于害虫显著影响作物产量,农业技术中害虫的识别和分类对于确保食品安全和可持续性至关重要。害虫分类旨在利用视觉模型来自动识别害虫。这一任务对于维护作物健康,潜在减少农药使用,促进环境可持续的农业实践至关重要。此外,准确识别害虫有利于通过最小化损害和优化产量来管理作物。
由于害虫在其自然栖息地中常常表现出高度的伪装,这使得视觉识别变得困难。这一挑战也展示了害虫分类的复杂性。害虫与周围环境的相似性,加上物种的巨大多样性,给传统图像处理算法带来了重大障碍。此外,为了区分密切相关的害虫物种,需要细粒度的特征提取,这为这一挑战增加了另一层复杂性。最近的研究提出了利用改进的胶囊网络来改善网络结构,从而增强特征的分层次和空间关系,以提高分类准确性。此外,一些研究结合了多个深度网络和多重视角下的互补特征优势,以提高识别率和鲁棒性。然而,由于害虫与周围环境的相似性,这些方法仍面临挑战。
为了准确识别和分类在不同条件下害虫的挑战,不同的视觉编码策略提供了不同的优势。卷积神经网络擅长于局部特征提取,而多头自注意力机制则擅长捕捉全局特征。状态空间模型结构在识别长距离依赖方面特别有效,多层感知器专长于通道感知信息推理。
为了整合不同视觉编码策略的优势,作者提出了一种新颖的方法,InsectMamba,它由混合SSM块组成,整合了SSM、CNN、MSA和MLP,以提取更全面的视觉特征用于害虫分类。此外,作者提出了一种选择模块,以适应性地聚合来自不同编码策略的视觉特征。InsectMamba利用了这些视觉编码策略的互补能力,旨在使视觉模型在捕捉害虫的局部和全局特征方面发挥作用,从而解决伪装和物种多样性的关键挑战。
在实验中,作者在五个害虫分类数据集上评估了InsectMamba和其他强劲的竞争者。为了提高数据集的挑战性,作者重新分割了数据集。实验结果表明,InsectMamba优于其他方法,这证明了InsectMamba的有效性。此外,作者进行了消融研究,以验证InsectMamba中每个模块的重要性。此外,作者对模型设计进行了广泛的分析,以证明其有效性。
本研究的主要贡献如下:
- 作者提出了InsectMamba,这是首次尝试在害虫分类中应用基于SSM的模型。
- 作者提出了混合SSM块,它无缝整合了SSM、CNN、MSA和MLP。这种整合使InsectMamba能够捕捉到用于害虫分类的全面视觉特征。
- 作者提出了一种选择聚合模块,旨在适应性地组合来自不同编码策略的视觉特征。该模块允许模型选择用于分类的相关特征。
- 作者在五个害虫分类数据集上严格评估了InsectMamba,与现有模型相比,展示了其卓越的性能。
2 Related Work
Image Classification
计算机视觉技术的快速发展使其在各种领域得到广泛应用,包括人工智能安全、生成检测、生物医学和农业技术。特别地,图像分类作为计算机视觉中许多应用的基本技术,其目的是区分不同类别的图像。一些研究采用卷积神经网络(CNNs)进行图像分类,因为卷积层能够捕捉图像中的局部特征。例如,由五个卷积层和三个全连接层组成的AlexNet在图像分类性能上取得了巨大成功。VGG和ResNet分别通过增加原始网络的深度和整合跳跃连接来进一步提升模型的分类能力。
然而,CNNs在理解全局信息方面存在局限,并且在捕捉全局和长距离依赖时缺乏鲁棒性。Vision Transformer (ViT)利用多头自注意力(MSA)捕捉每个块的环境信息,从而增强了模型捕捉全局依赖的能力。此外,Swin Transformer采用了一种窗口化的自注意力机制和分层结构设计,这不仅保留了MSA的全局建模能力,还增强了局部特征的提取。此外,MLP-Mixer提出了一种基于纯MLP的架构,以捕捉不同的上下文关系并增强视觉表示。此外,VMamb 通过将新颖的序列状态空间(S4)模型与选择机制和扫描计算相结合,改进了视觉分类任务,这一模型被称为Mamba。
Insect Pest Classification
对于昆虫害虫分类任务,它可以帮助人们更好地了解害虫的种群动态和潜在危害,制定有效的害虫管理策略,这对于农业经济和环境科学非常重要。然而,与一般图像相比,昆虫害虫领域的特征差异可能非常微妙,背景更为复杂,这对分类模型提出了更高的要求,需要更准确地提取有效特征。针对这一挑战,一些研究改进了基于CNN的模型,以在复杂背景下捕捉害虫特征。
此外,Faster-PestNet使用MobileNet提取样本属性,并重新设计了改进的Faster-RCNN方法来识别作物害虫。Ung等人[33]提出了一个带有注意力机制的基于CNN的模型,以进一步关注图像中的昆虫;An等人[2]提出了一种特征融合网络,该网络合成来自不同主干模型的表示以增强昆虫图像分类;Anwar和Masood采用深度集成模型方法提高从图像中检测昆虫和害虫的准确性和鲁棒性。此外,Peng和Wang[27]在昆虫领域研究了ViT架构,并将CNNs和自注意力模型聚合起来,以进一步提高昆虫害虫分类的能力。
3 Preliminaries
第三部分预备知识的开头。
Convolutional Neural Networks
卷积神经网络由于其强大的图像特征提取能力,在计算机视觉中得到了广泛应用。它由一组固定大小的可学习参数组成,这些参数被称为滤波器,并通过滑动窗口在输入图像上连续执行卷积计算。
Multi-Head Self-Attention
Vaswani等人提出了多头自注意力 (MSA) 机制,并被广泛应用于许多自然语言处理任务中。与卷积神经网络不同,MSA允许模型在生成输出表示时对不同的输入标记的重要性进行加权,使模型能够有效地捕捉序列中的全局依赖关系和上下文信息。最近,类似Transformer 的架构在
在视觉任务中,MSA需要在大规模数据集上进行预训练,以弥补其在CNN中的归纳偏置不足,例如平移不变性和局部性。
Multi-Layer Perceptron
State Space Models
状态空间模型 (SSMs) 引入了一种新颖的跨扫描模块 (CSM),以提高方向敏感性和计算效率。SSMs在通过描述时间演化和观测生成的方程来模拟视觉系统动态方面至关重要。观测函数如下:
4 InsectMamba
本节详细阐述了作者的InsectMamba模型架构,这是一种用于害虫分类的新颖视觉模型。InsectMamba的基础是Mix-SSM块,旨在融合来自各种视觉编码策略的特征。最后,作者引入了作者提出的选择性模块,它可以自适应地整合来自不同视觉编码策略的表示。
Overall Architecture
Mix-SSM Block
混合SSM块由几个关键组件组成:选择性扫描模块(SSM),卷积层(Conv),多层感知机(MLP),多头自注意力机制(MSA)以及选择性模块。不同视觉编码策略的详细信息,即SSM、Conv、MLP和MSA,可以在第3节中找到。
选择性模块
5 Experiment
在实验中,作者评估了作者的InsectMamba模型在五个昆虫害虫分类数据集上的性能。作者将InsectMamba与几种最先进的模型进行了比较。作者还进行了一项消融研究,以探究InsectMamba中不同组件的有效性。
Dataset and Metrics
为了更有效和全面地评估现有的视觉模型,作者精心挑选并重新分割了五个昆虫害虫分类数据集,以提供一个具有挑战性的评估。作者实验中使用的数据集包括Farm Insects 1、Agricultural Pests 2、Insect Recognition、Forestry Pest Identification和IP102,详细信息如表1所示。
作者将训练集中的样本数量减少,以比较不同视觉模型对视觉特征的编码能力。此外,作者采用准确率(ACC)、精确度(Prec)、召回率(Rec)和F1分数作为评估指标,全面评估模型的性能。
实现细节
Main Results
如表2、3、4、5和6所示的实验结果表明,InsectMamba模型在多个昆虫分类任务中表现出卓越的性能。InsectMamba在所有评估指标上(准确率(ACC)、精确度(Prec)、召回率(Rec)和F1分数(F1))一致地超越了包括不同配置的ResNet、DeiT、Swin Transformer和Vmamba在内的现有基准模型。
在农场昆虫数据集上,InsectMamba达到了0.66的ACC,比次优模型Swin-B高出4%。在农业害虫数据集上,也观察到了显著的改进,InsectMamba达到了0.91的ACC,比强 Baseline 模型Vmamba-B高出2%。这些结果在昆虫识别和林业害虫识别数据集上保持一致,显示了InsectMamba在图像特征提取方面的强大能力。
在IP102数据集上的结果进一步验证了InsectMamba的鲁棒性,达到了0.43的ACC,比Swin-B此前的最佳结果0.39有了显著提升。这些结果表明,Mix-SSM块能够整合多种视觉编码策略,确保从输入图像中全面捕捉特征。
选择性模块进一步增强了模型的性能,通过自适应地加权不同编码策略的贡献。
Ablation Study
消融研究的结果如表7所示,系统地评估了InsectMamba模型中每个组件的贡献,即卷积神经网络(CNN)、多层感知器(MLP)和多头自注意力(MSA)在三个数据集上的作用:农场昆虫、昆虫识别和IP102。结果显示每个组件在实现高准确度和F1分数方面的重要作用。完整的InsectMamba模型在所有数据集上均取得了最佳性能,这强调了结合CNN、MLP和MSA进行特征提取和表示学习的协同效应。
移除任何单一组件(CNN、MSA或MLP)都会导致所有数据集上的准确度和F1分数下降,表明每个组件都为分类提供了独特且有价值的信息。当同时移除多个组件时,性能下降最为显著,特别是当CNN、MSA和MLP都被排除时。这种配置导致了最低的准确度和F1分数,证明了集成多种视觉编码策略对于捕捉昆虫的全面视觉特征至关重要。
Analysis
特征聚合方法的影响。为了研究InsectMamba模型中不同特征聚合方法的有效性,作者通过将选择性模块与最大池化和平均池化方法进行比较来进行评估。
如图3所示,在两个不同数据集:农场昆虫和IP102上,选择性模块在准确率(ACC)和F1分数方面始终优于最大池化和平均池化方法。对于农场昆虫数据集,选择性模块获得了最高的ACC和F1分数,这表明在捕捉和整合对昆虫害虫分类的重要特征方面,它具有卓越的能力。特别是与最大池化相比,ACC和F1的提高是显著的,这突显了选择性模块在处理更加微妙的分类任务方面的有效性,这些任务来自于多样化的昆虫物种集合。在IP102数据集上,选择性模块仍然保持优势。此外,两个数据集上性能的差异性也突出了选择性模块的自适应性。它展示了选择性模块可以根据数据集的复杂性和多样性,动态调整对不同视觉编码策略的视觉特征的整合。
选择性模块中池化方法的影响。作者研究了InsectMamba模型中选择性模块中各种池化方法对性能的影响。具体来说,作者研究了平均池化、最大池化、L2池化和随机池化,以综合方程13中规定的全局特征。图5展示了在两个数据集(即农场昆虫和IP102)上的比较性能。
对于农场昆虫数据集,平均池化获得了最佳的准确率和F1分数,这表明它在保留分类任务的特征表示方面是有效的。此外,IP102数据集上的结果显示出一致的趋势。平均池化在农场昆虫数据集上的表现同样出色。
6 Conclusion
在本工作中,作者提出了一种名为InsectMamba的新模型,用于昆虫害虫分类。该模型旨在融合状态空间模型、卷积神经网络、多头自注意力机制和多层感知器的优势。通过混合SSM块和选择性聚合模块整合这些不同的视觉编码策略,InsectMamba展示了应对害虫伪装和物种多样性挑战的能力。
在实验中,作者对五种昆虫害虫分类数据集上进行了广泛的评估,比较了InsectMamba与其他强劲竞争对手。实验结果表明,InsectMamba性能优于其他模型,这证明了InsectMamba的有效性。作者还通过全面的消融研究揭示了每个集成模块的重要性。
#Open-Sora~2
Open-Sora全面开源升级:支持16s视频生成和720p分辨率
Open-Sora 在开源社区悄悄更新了,现在支持长达16秒的视频生成,分辨率最高可达720p,并且可以处理任何宽高比的文本到图像、文本到视频、图像到视频、视频到视频和无限长视频的生成需求。我们来试试效果。
生成个横屏圣诞雪景,发b站
再生成个竖屏,发抖音
还能生成16秒的长视频,这下人人都能过把编剧瘾了
发不了 ~~
怎么玩?指路
GitHub:https://github.com/hpcaitech/Open-Sora
更酷的是,Open-Sora 依旧全部开源,包含最新的模型架构、最新的模型权重、多时间/分辨率/长宽比/帧率的训练流程、数据收集和预处理的完整流程、所有的训练细节、demo示例和详尽的上手教程。
Open-Sora 技术报告全面解读
最新功能概览
作者团队在GitHub上正式发布了Open-Sora 技术报告[1],根据笔者的了解,本次更新主要包括以下几项关键特性:
- 支持长视频生成;
- 视频生成分辨率最高可达720p;
- 单模型支持任何宽高比,不同分辨率和时长的文本到图像、文本到视频、图像到视频、视频到视频和无限长视频的生成需求;
- 提出了更稳定的模型架构设计,支持多时间/分辨率/长宽比/帧率训练;
- 开源了最新的自动数据处理全流程。
时空扩散模型ST-DiT-2
作者团队表示,他们对Open-Sora 1.0中的STDiT架构进行了关键性改进,旨在提高模型的训练稳定性和整体性能。针对当前的序列预测任务,团队采纳了大型语言模型(LLM)的最佳实践,将时序注意力中的正弦波位置编码(sinusoidal positional encoding)替换为更加高效的旋转位置编码(RoPE embedding)。此外,为了增强训练的稳定性,他们参考SD3模型架构,进一步引入了QK归一化技术,以增强半精度训练的稳定性。为了支持多分辨率、不同长宽比和帧率的训练需求,作者团队提出的ST-DiT-2架构能够自动缩放位置编码,并处理不同大小尺寸的输入。
多阶段训练
根据Open-Sora 技术报告指出,Open-Sora 采用了一种多阶段训练方法,每个阶段都会基于前一个阶段的权重继续训练。相较于单一阶段训练,这种多阶段训练通过分步骤引入数据,更高效地实现了高质量视频生成的目标。
初始阶段大部分视频采用144p分辨率,同时与图片和 240p,480p 的视频进行混训,训练持续约1周,总步长81k。第二阶段将大部分视频数据分辨率提升至240p和480p,训练时长为1天,步长达到22k。第三阶段进一步增强至480p和720p,训练时长为1天,完成了4k步长的训练。整个多阶段训练流程在约9天内完成,与Open-Sora1.0相比,在多个维度提升了视频生成的质量。
统一的图生视频/视频生视频框架
作者团队表示,基于Transformer的特性,可以轻松扩展 DiT 架构以支持图像到图像以及视频到视频的任务。他们提出了一种掩码策略来支持图像和视频的条件化处理。通过设置不同的掩码,可以支持各种生成任务,包括:图生视频,循环视频,视频延展,视频自回归生成,视频衔接,视频编辑,插帧等。
支持图像和视频条件化处理的掩码策略
作者团队表示,受到UL2[2]方法的启发,他们在模型训练阶段引入了一种随机掩码策略。具体而言,在训练过程中以随机方式选择并取消掩码的帧,包括但不限于取消掩码第一帧、前k帧、后k帧、任意k帧等。作者还向我们透露,基于Open-Sora 1.0的实验,应用50%的概率应用掩码策略时,只需少量步数模型能够更好地学会处理图像条件化。在Open-Sora 最新版本中,他们采用了从头开始使用掩码策略进行预训练的方法。
此外,作者团队还贴心地为推理阶段提供了掩码策略配置的详细指南,五个数字的元组形式在定义掩码策略时提供了极大的灵活性和控制力。
掩码策略配置说明
支持多时间/分辨率/长宽比/帧率训练
OpenAI Sora的技术报告[3]指出,使用原始视频的分辨率、长宽比和长度进行训练可以增加采样灵活性,改善帧和构图。对此,作者团队提出了分桶的策略。
具体怎么实现呢?通过深入阅读作者发布的技术报告,我们了解到,所谓的桶,是(分辨率,帧数,长宽比)的三元组。团队为不同分辨率的视频预定义了一系列宽高比,以覆盖大多数常见的视频宽高比类型。在每个训练周期epoch开始之前,他们会对数据集进行重新洗牌,并将样本根据其特征分配到相应的桶中。具体来说,他们会将每个样本放入一个分辨率和帧长度均小于或等于该视频特性的桶中。
Open-Sora 分桶策略
作者团队进一步透露,为了降低计算资源的要求,他们为每个keep_prob和batch_size引入两个属性(分辨率,帧数),以减少计算成本并实现多阶段训练。这样,他们可以控制不同桶中的样本数量,并通过为每个桶搜索良好的批大小来平衡GPU负载。作者在技术报告中对此进行了详尽的阐述,感兴趣的小伙伴可以阅读作者在GitHub上发布的技术报告来获取更多的信息:https://github.com/hpcaitech/Open-Sora
数据收集和预处理流程
作者团队甚至对数据收集与处理环节也提供了详尽的指南。根据作者在技术报告中的阐述,在Open-Sora 1.0的开发过程中,他们意识到数据的数量和质量对于培育一个高效能模型极为关键,因此他们致力于扩充和优化数据集。他们建立了一个自动化的数据处理流程,该流程遵循奇异值分解(SVD)原则,涵盖了场景分割、字幕处理、多样化评分与筛选,以及数据集的管理系统和规范。同样,他们也将数据处理的相关脚本无私地分享至开源社区。对此感兴趣的开发者现在可以利用这些资源,结合技术报告和代码,来高效地处理和优化自己的数据集。
Open-Sora 数据处理流程
Open-Sora 性能全方位评测
视频生成效果展示
Open-Sora 最令人瞩目的亮点在于,它能够将你脑中的景象,通过文字描述的方式,捕捉并转化为动人的动态视频。那些在思维中一闪而过的画面和想象,现在得以被永久地记录下来,并与他人分享。在这里,笔者尝试了几种不同的prompt,作为抛砖引玉。
比如,笔者尝试生成了一个在冬季森林里游览的视频。雪刚下不久,松树上挂满了皑皑白雪,暗色的松针和洁白的雪花错落有致,层次分明。
又或者,在一个静谧夜晚中,你身处像无数童话里描绘过黑暗的森林,幽深的湖水在漫天璀璨的星河的照耀下波光粼粼。
在空中俯瞰繁华岛屿的夜景则更是美丽,温暖的黄色灯光和丝带一样的蓝色海水让人一下子就被拉入度假的悠闲时光里。
城市里的车水马龙,深夜依然亮着灯的高楼大厦和街边小店,又有另一番风味。
除了风景之外,Open-Sora 还能还原各种自然生物。无论是红艳艳的小花,
还是慢悠悠扭头的变色龙, Open-Sora 都能生成较为真实的视频。
笔者还尝试了多种 prompt 测试,还提供了许多生成的视频供大家参考,包括不同内容,不同分辨率,不同长宽比,不同时长。
笔者还发现,仅需一个简洁的指令,Open-Sora便能生成多分辨率的视频短片,彻底打破创作限制。
分辨率:16*240p
分辨率:32*240p
分辨率:64*360p
分辨率:480*854p
我们还可以喂给Open-Sora一张静态图片让它生成短片
Open-Sora 还可以将两个静态图巧妙地连接起来,轻触下方视频,将带您体验从下午至黄昏的光影变幻,每一帧都是时间的诗篇。
视频没有...
再比如说我们要对原有视频进行编辑,仅需一个简单的指令,原本明媚的森林便迎来了一场鹅毛大雪。
我们也能让Open-Sora 生成高清的图片
值得注意的是,Open-Sora的模型权重已经完全免费公开在他们的开源社区上,不妨下载下来试一下。由于他们还支持视频拼接功能,这意味着你完全有机会免费创作出一段带有故事性的小短片,将你的创意带入现实。
权重下载地址:https://github.com/hpcaitech/Open-Sora
当前局限与未来计划
尽管在复现类Sora文生视频模型的工作方面取得了不错的进展,但作者团队也谦逊地指出,当前生成的视频在多个方面仍有待改进:包括生成过程中的噪声问题、时间一致性的缺失、人物生成质量不佳以及美学评分较低。对于这些挑战,作者团队表示,他们将在下一版本的开发中优先解决,以期望达到更高的视频生成标准,感兴趣的朋友不妨持续关注一下。我们期待Open-Sora社区带给我们的下一次惊喜。
开源地址:https://github.com/hpcaitech/Open-Sora
参考文献:
[1] https://github.com/hpcaitech/Open-Sora/blob/main/docs/report_02.md