我自己的原文哦~ https://blog.51cto.com/whaosoft/12286791
# 大语言模型部署方案
随着AI的不断发展,LLM逐渐从单一的自然语言处理任务扩展到处理多种媒体数据的多模态模型,同时模型参数量越来越大。像 GPT-4 和 LLaMA 这样的大型语言模型(LLM)已成为在各个层面为各种注入人工智能的应用提供服务的主要工作负载。从一般聊天模型到文档摘要,从自动驾驶到软件栈各层的协同机器人,大规模部署和服务这些模型的需求急剧上升。此外,模型规模越大,在实际应用中模型推理速度更更慢。因此研究LLM推理过程并提出优化方法以降低所需显存、降低功耗和提高模型推理速度,具有重要的意义。
关于LLM推理优化及加速,我们计划分几部分展开。首先,我们带大家了解LLM模型推理过程中存在的瓶颈及常见优化方法。
1 LLM推理
LLM推理主要分为两步骤:
1)encoding/prefill:预填充,并行处理输入的所有 tokens
2)decoding:解码,逐个生成下一个 token
重复这两个步骤直到生成 EOS token 或达到用户设定的停止条件(stop token 或最大 token 数)。
图1 LLM推理过程
以 Llama2-7B(序列长度4096,精度float16,输入prompt长度350token)在A10GPU上推理为例,计算 batch_size = 1的理想推理速度。
prefill:
预填充所需要的时间 = token数量*(模型总参数所占字节数 / 计算带宽)= 350 * (2 * 7B) FLOP / 125 TFLOP/s = 39 ms。这个阶段性能瓶颈主要是算力
decoding:
解码阶段每个token所需的生成时间 time/token = 模型总参数所占字节数 / 内存带宽 = (2 * 7B) bytes / (600 GB/s) = 23 ms/token,即每生成一个token理想情况下需要23ms。在此阶段,主要性能瓶颈是带宽。然而实际上由于带宽利用率较低,推理速度与理想时间相差较大。
2 LLM推理评价指标
主要有以下四个核心评价指标:
- Time To First Token (TTFT): 首Token 延迟,即从输入到输出第一个 token的延迟。在线的流式应用中,TTFT 是最重要的指标,它决定了用户体验。
- Time Per Output Token (TPOT):每个输出token 的延迟(不含首个Token)。在离线的批处理应用中,TPOT 是最重要的指标,它决定了整个推理的时间。
- Latency:延迟,即从输入到输出最后一个 token 的延迟。Latency = (TTFT) + (TPOT) * (the number of tokens to be generated). Latency 可以转换为 Tokens Per Second (TPS):TPS = (the number of tokens to be generated) / Latency。
- Throughput:吞吐量,即每秒针对所有请求生成的 token 数。以上三个指标都针对单个请求,而吞吐量是针对所有并发请求的。
其中在线的流式应用可以理解为存在多客户同时向LLM发出多请求的场景,离线的批处理应用可以理解为LLM部署在私域或本地服务器,这样不存在高并发请求的现象。对于线流式应用,为了给用户提供更好的使用体验,因此对 TTFT、TPOT、Latency 非常敏感,需要尽可能快的生成 token。对于离线批量应用,对 Throughput 敏感,需要在单位时间内尽可能多的生成 token。
3 LLM推理性能卡点分析
3.1 KV-Cache
由于LLM推理是一个自回归的过程,即在生成第i+1次token时,会将前i次生成的token送入模型,经过推理拿到第i+1次的输出token。
在这个过程中Transformer会执行自注意力操作,为此需要给当前序列中的每个token提取键值(kv)向量。这些向量存储在一个矩阵中,通常被称为kv cache。kv cache是为了避免每次采样token时重新计算键值向量。
举例:
对最大长度是 4096 的 LLaMa2-7B fp16 模型,服务端每创建 1 个并发,都需要大约 2GB 显存保存 kv_cache,即便是 A100 80G,能并发服务的用户非常有限。
所以KV-Cache 的减少以及优化是提高 LLM 推理性能的关键。
3.2 带宽瓶颈导致 TPOT 受限
随着GPU的发展迭代,计算能力一般不是推理瓶颈,而带宽才是瓶颈。衡量指标主要是模型带宽利用率 MBU。
MBU 计算方式:
MBU = 实际内存带宽 / 峰值内存带宽,
实际内存带宽 = (总模型参数大小 + KV 缓存大小) / TPOT
例子:
假如 7B fp16 模型的 TPOT 是 14ms,那么它就需要在 14ms 内把 14GB 参数从显存加载到计算单元,也就是 1TB/s 的带宽使用量。假设显卡的峰值带宽为 2TB/s,那么 MBU = 0.5,即显存带宽利用率是 50%。注:这里忽略了KV 缓存。
图2 LLM推理过程不同阶段的性能瓶颈分析
4 LLM推理优化方法
下面介绍目前业界在生产环境下常用的优化技术
4.1 Operator Fusion 算子融合
通过转换工具,将神经网络中的部分层进行融合,从而降低计算量和数据量,提高推理性能。
常见的两个框架是 FasterTransformer(TensorRT) 和 Deepseed Inference,都可以通过转换的方式,融合 Transformer 的特定层。
图3 Deepspeed 层融合示意图
4.2 Quatization 量化
量化除了降低模型需要的显存外,最直接的收益就是降低了带宽使用率,所以从理论上来说,量化后的模型性能应该是成比例提升的,这个提升不仅体现在吞吐量上,也会体现在 Latency 上。量化分类:
- 量化感知训练(QAT):在训练(一般是 sft 中)过程中,通过量化感知训练,让模型适应低精度的计算,从而保护模型的效果不受量化影响。少数模型提供了相关权重。
- 动态离线量化(PTQ Dynamic):缩放因子(Scale)和零点(Zero Point)是在推理时计算的,特定用于每次激活。不需要样本数据训练,但是性能和效果都略低。
- 静态离线量化(PTQ Static):需要少量无标签样本进行校准,计算出缩放因子和零点,然后在推理时使用。性能和效果都比动态离线量化好。目前一般使用这种量化方式。
4.3 FlashAttention
FlashAttention 就是通过利用 GPU 硬件中的特殊设计,针对全局内存和共享存储的 I/O 速 度的不同,尽可能的避免 HBM(全局内存)中读取或写入注意力矩阵。FlashAttention 目标是尽可能高效地使 用 SRAM (共享内存)来加快计算速度,避免从全局内存中读取和写入注意力矩阵。
图4 GPU内存架构图
4.4 PageAttention
随着序列长度和并发数的增加,KV-Cache 的大小等比例提升,成为核心瓶颈。目前主要采用PageAttention优化方法:
KV Cache 的大小取决于序列长度,这是高度可变和不可预测的。实际上因为显存碎片和过度预留,浪费了 60% - 80% 的显存。PageAttention 参考虚拟内存和内存分页的思想,解决显存碎片化的问题,提高显存利用率,从而提升推理性能。同时 PageAttention 具备 Copy-on-Write 的特性,可以对相同的 Prompt 共享 KV Cache,从而节省显存。
PagedAttention 是 vLLM 的核心技术,在生产环境中一般都有 4x 以上的性能提升。
与传统的注意力算法不同,PagedAttention 允许在不连续的内存空间中存储连续的键和值。具体来说,PagedAttention 将每个序列的 KV 缓存划分为多个块,每个块包含固定数量的令牌的键和值。在注意力计算过程中,PagedAttention 内核会有效地识别和获取这些块。由于块不需要在内存中是连续的,因此我们可以像在操作系统的虚拟内存中一样以更灵活的方式管理键和值:可以将块视为页面,将 token 视为字节,将序列视为进程。序列的连续逻辑块通过块表映射到非连续的物理块。随着新 token 的生成,物理区块会按需分配。
4.5 并行化
并行化可以有效利用多个设备进行推理,从而提升吞吐,降低延迟。
表1 多设备并行推理性能比较
4.6 批处理
- 静态批处理 (Static Batching):在推理前,将多个请求合并为一个大的请求,然后一次性推理。这种方式可以提高吞吐量,但是需要所有请求都完成后才能返回结果,所以一般不会应用。
- 动态/持续批处理(Continuous Batching):持续批处理是一种特殊的动态批处理,它可以在序列结束后,继续接受新的序列。从而在保证延迟的情况下,提高吞吐量。
# 大模型微调项目 / 数据集调研汇总
总结了一些热门的大模微调项目的亮点以及数据集
前言
本文主要总结本人最近跑过的大模型微调项目。
相信大家这几个月都会不断新出的微调大模型项目刷屏,频率基本每天都有高星的项目诞生,部分还宣称自己达到GPT的百分之多少,一方面弄得大家过度乐观,一方面弄得大家焦虑浮躁。
面对这种情况,我的建议是「多动手」。把这些项目 clone 下来,跑跑代码,把项目用到的数据集下载下来做做EDA,把项目训练完的checkpoint下载下来,用自己的例子跑跑。多接触反而心态平定了许多。
回归正题,这篇博文聊聊一些热门的大模型微调项目。首先我觉得大量这些项目的诞生是源于以下三个节点:
- 节点1 ChatGPT:由于 ChatGPT 惊人的效果,让大家意识到AGI的可能性,并重视起了大模型+开放指令微调+强化学习这种三阶段范式
- 节点2 LLaMA:LLaMA 是 Meta 在今年2月份推出的基座模型,宣称 LLaMA-13B 在大多数基准测试中超过了 GPT-3 (175B),而 LLaMA-65B 与最好的模型 Chinchilla70B 和 PaLM-540B 相比非常有竞争力。此外,该项目还开源了7B、13B、30B和65B版本。
- 节点3 Stanford Alpaca:在 LLaMA 的基础上,用 Self-Instruct 去制造了52K的指令微调数据集,最后发现训练出来的模型确实是能听懂指令的,能看出ChatGPT的雏形
这三个节点加起来相当于证明了一条可以低成本复现的道路,然后大量的人沿着这条道路去进行时间。
再来说说这些项目的,本质都是:底座模型(ChatGLM/LLaMA/BLOOM)+ 微调数据(主要是指令微调数据集) + 高效微调方案(Fulltuning/Lora/Freeze/Ptuning)。
项目
这些介绍几个我认为比较好的,好的定义是:Github star 比较高的,持续在维护更新的,同时作者对自己的项目做了详细解析和深入研究的。
ChatGLM-6B
清华唐杰老师团队
项目: https://github.com/THUDM/ChatGLM-6B
Blog: https://chatglm.cn/blog
ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于GLM架构,具有62亿参数。ChatGLM-6B 使用了和 ChatGPT 相似的技术,针对中文问答和对话进行了优化。经过约1T个标识符的中英双语训练,辅以监督微调、反馈自助、人类反馈强化学习等技术的加持。为了方便下游开发者针对自己的应用场景定制模型,项目还开源了基于 P-Tuning v2(https://github.com/THUDM/P-tuning-v2) 的高效参数微调代码。
亮点:
- GLM 是一种 Prefix decoder 的结构,而目前大模型采用的主流结构是 Casual decoder,可以说GLM走出了自己的道路,但究竟那种结构更优,需要更科学的评定
- 1T 个token的中英文预训练,对比 175B 的 GPT3 训练了300B个 token,540B的 PaLM 训练了780B个 token,而 ChatGLM-6B 的底座只是6B的模型,却训练了1T个 token,让人有种憧憬,用大数据训练小模型,是否能达到小数据训练大模型的效果
- 项目号称经过监督微调、反馈自助、人类反馈强化学习
但是 ChatGLM-6B 没有公布它的训练细节和语料是怎么做的,有人说 ChatGLM-6B 的 IFT 也是通过 self-Instruct 得到的,这也不是空穴来风,相信用过 ChatGLM-6B 的人都会觉得,ChatGLM-6B的回复风格跟ChatGPT十分相似。
Alpaca-CoT
中科院的学生做的项目
项目:https://github.com/PhoebusSi/Alpaca-CoT/blob/main/CN_README.md
多接口统一的大模型指令微调平台。该项目做了一个框架,利用这个框架,可以方便地用不同的底座模型+不同的指令数据集进行大模型的微调,不足的地方是,只提供了使用Lora的训练方式。除此之外,该项目主打一个思维链 (CoT),把CoT数据集加入到指令微调中,在项目中还举了很多案例,证明加入了CoT数据集后对模型的提升作用。
亮点:
- 统一了多个底座模型,包括有 LLaMA、ChatGLM、BLOOM
- 整理统一了其他公开项目的数据集,如果大家想梳理下现在市面上开源的IFT数据集,建议可以通过这个项目了解
- 项目集成了 Int8-bitsandbytes、Fp16-mixed precision、LoRA(hugging peft库)等高效训练的方法
- 首个加入了 CoT 训练后的效果研究
BELLE
贝壳团队开源的项目
项目:https://github.com/LianjiaTech/BELLE
项目基于 Deepspeed-Chat 项目,包括全量参数微调(fine-tuning)和基于LoRA的参数高效微调。
亮点:
- 开源了一个规模巨大的中文IFT数据集,现在加起来有300万以上,基本都是通过Self-Instructi得到
- 做了一系列的实验,截止日前已发了4篇技术报告
- 《Exploring ChatGPT's Ability to Rank Content: A Preliminary Study on Consistency with Human Preferences》
- 《Exploring the Impact of Instruction Data Scaling on Large Language Models: An Empirical Study on Real-World Use Cases》
- 《Towards Better Instruction Following Language Models for Chinese: Investigating the Impact of Training Data and Evaluation》
- 《A Comparative Study between Full-Parameter and LoRA-based Fine-Tuning on Chinese Instruction Data for Instruction Following Large Language Model》
建议大家把它们的数据集下载下来看看,并把这4篇实验报告都看一次。虽然这些实验并不是很客观,例如最后的test集也是用的belle自己的,然后用的是GPT3.5打分。不过整体的实验思路和实验结果还是可以大致参考的。
Chinese-LLaMA-Alpaca
科大讯飞&哈工大团队,很出名的团队,很多耳熟能详的中文预训练模型,如RoBERTa、MacBERT、PERT都出自它们团队
项目:https://github.com/ymcui/Chinese-LLaMA-Alpaca
该项目包括词表扩充、继续预训练和指令精调三部分,其中词表扩充的代码参见 merge_tokenizers.py ;预训练和指令精调代码参考了 transformers中的 run_clm.py 和 Stanford Alpaca 项目中数据集处理的相关部分。
亮点:
- 相对完整的流程,不紧紧是指令微调这一步,还包括词表扩充、继续预训练
- 针对LLaMA模型扩充了中文词表,提升了中文编解码效率。这一步是我觉得假如想用LLaMA去做中文必须要做的一个事情,因为原生LLaMA对中文支持不好,很多中文词不在它们的词表中,会被切成两个token,极大影响了效果
- 对中文继续做了20G语料的预训练,这个预料规模一看就很熟,它们开源的RoBERTa、MacBERT也是在这个规模的预料上训练得到的
- 在预训练介绍,分成两部分,第一阶段:冻结transformer参数,仅训练embedding,在尽量不干扰原模型的情况下适配新增的中文词向量,第二阶段:使用LoRA技术,为模型添加LoRA权重(adapter),训练embedding的同时也更新LoRA参数。这给大家做高效继续预训练的提供了一个方向。
StackLLaMA
项目:https://huggingface.co/spaces/trl-lib/stack-llama
Blog: https://huggingface.co/blog/stackllama
Hugging Face的研究人员发布的一个70亿参数的模型——StackLLaMA。这是一个通过人类反馈强化学习在LLaMA-7B微调而来的模型。
个人感觉有价值的是Hugging Face研究人员发布的一篇Blog:用RLHF训练LLaMA的实践指南。
亮点:
- 博客更像是一个教程和指南,介绍如何使用RLHF来训练模型,而不是主要关注模型的性能表现
- 重点介绍了指令微调和强化学习部分,其中强化学习部分利用的是StackOverflow构建的数据集,利用网民们的upvotes去进行评分,给我们构造强化学习数据集部分提供了一个思路,能否利用微博点赞、知乎点赞等数据去构造一个中文的强化学习数据集呢?
数据集
介绍几个比较有特色的中文数据集
Alpaca-CoT
对大部份中英文的开源IFT数据集进行了整理和汇总,包括有 Guanaco、belle、firefly、COIG,加上项目自己开源的CoT数据集。假如不想自己去疏离数据集的话,就看这个它们整理好的就行了。
Alpaca_GPT4
https://github.com/Instruction-Tuning-with-GPT-4/GPT-4-LLM
微软论文《INSTRUCTION TUNING WITH GPT-4》开源的数据集。亮点是利用 GPT-4 生成的 Alpaca 数据,并做了中文的翻译。由于GPT4比GPT3.5强大很多的,因此质量自然会更高。
belle_data
https://github.com/LianjiaTech/BELLE/tree/main/data/10M
规模很大、类型也较多的数据集
- School Math:包含约25万条中文数学题数据,包含解题过程。
- Multiturn Chat:包含约80万条用户与助手的多轮对话。
- Generated Chat:包含约40万条给定角色的多轮对话。
- train_2M_CN:包含约200万条与Alpaca类似生成的多样化指令任务数据。
这些数据都是由ChatGPT生成,部分质量是不过关的,需要自己好好筛选一下。
COIG
https://huggingface.co/datasets/BAAI/COIG
规模很大,类型很全的数据集
- 翻译指令数据集:基于开源数据集精选得到,并通过DeepL高质量翻译、并进行人工验证+人工修正
- 考试指令数据集:中国高考、中考、公务员考试得到,可用作思维链 (CoT) 语料库
- 价值对齐数据集:「中文世界的价值观念不同于英语世界的价值观」,作者构建了与普世华人价值观match的数据集,也是通过 self-instruct 生成的
- 反事实校正数据集:构建了反事实校正多轮聊天数据集(CCMC)。CCMC 数据集包括学生和老师之间的 5 轮角色扮演聊天,以及他们所参考的相应知识。教师根据基本事实知识生成响应,并在每一轮中纠正学生问题或陈述中的事实错误或不一致之处
- 代码指令数据集:Leetcode 数据集,包含有代码到文本和文本到代码
总体来说,这份数据集质量非常高,需要我们好好根据任务进行挑选。
个人感悟
数据清洗方案如何更好?
- 多样性:例如在 Self-Instruct 论文中,会使用 ROUGE 指标,过滤掉生成的指令与已有指令重合的指令。
- 高质量:使用 ChatGPT 生成数据,自然训练出来的模型就是模仿 ChatGPT 的回复风格。然而,ChatGPT(指 GPT3.5)自身的缺点包括浓浓的机翻味道、文绉绉的、不够活泼可爱,其次中文生成不够流畅。一种思路是使用 PPL 等指标筛选出生成的指令和回复,计算困惑度 Perplexity。Perplexity 低的通常是不流畅的,可以将低于一定阈值的去掉。
- 启发式:例如过滤掉问题是中文但回答是英文的,过滤掉生成的指令包含需要外部知识库的情况。
更多的清洗方案,可以多看看开源数据集中它们是如何处理的,留意里面的数据清洗方式。
哪种微调方案比较好?
从 BELLE 的技术报告《A Comparative Study between Full-Parameter and LoRA-based Fine-Tuning on Chinese Instruction Data for Instruction Following Large Language Model》中可以看出,Full-Tuning 效果应该是最好的,但 Full-Tuning 需要机器资源多,训练时间长。其次是 P-TuningV2/Lora/Freezing 的话,貌似是 P-TuningV2 效果最佳,具体可以看这个https://github.com/liucongg/ChatGLM-Finetuning。然而,这些比较并不严谨,例如每个方案都有自己的超参,是否每个方法都做了超参搜索。
强化学习部分重要吗?
非常重要。现在发现 ChatGLM-6B 的回复虽然一看过去感觉像模像样,但仔细看会发现胡言乱语的情况很严重,也即幻觉问题。也有人会另辟蹊径,例如 COIG 中的 CCMC 数据集,通过将这些数据集加入到 IFT 训练中,让模型学习纠正不正确回复的能力。还有在 prompt 中加入“请不要生成虚假的、自我捏造的回复”等字眼,目的是让模型在生成更加谨慎。然而,这些都是折中的办法。个人认为减少幻觉问题这一步,还得靠强化学习。希望未来能看到更多构建强化学习数据和开源强化学习数据集、训练的方案。
# 模型被投毒攻击,如今有了新的安全手段,还被AI顶刊接收
在深度学习时代,联邦学习(FL)提供了一种分布式的协作学习的方法,允许多机构数据所有者或客户在不泄漏数据隐私的情况下协作训练机器学习模型。然而,大多数现有的 FL 方法依赖于集中式服务器进行全局模型聚合,从而导致单点故障。这使得系统在与不诚实的客户打交道时容易受到恶意攻击。本文中,FLock 系统采用了点对点投票机制和奖励与削减机制,这些机制由链上智能合约提供支持,以检测和阻止恶意行为。FLock 理论和实证分析都证明了所提出方法的有效性,表明该框架对于恶意客户端行为具有鲁棒性。
现今,机器学习(ML),更具体地说,深度学习已经改变了从金融到医疗等广泛的行业。在当前的 ML 范式中,训练数据首先被收集和策划,然后通过最小化训练数据上的某些损失标准来优化 ML 模型。学习环境中的一个共同基本假设是训练数据可以立即访问或轻松地跨计算节点分发,即数据是「集中式」的。
然而,在一个拥有多个「客户端」(即数据持有者)的系统中,为了确保数据集中化,客户端必须将本地数据上传到一个集中设备(例如中心服务器)以进行上述的集中式训练。尽管集中式训练在各种深度学习应用中取得了成功,但对数据隐私和安全的担忧日益增长,特别是当客户端持有的本地数据是私有的或包含敏感信息时。
联邦学习(FL)可以解决训练数据隐私的问题。在一个典型的 FL 系统中,一个中心服务器负责聚合和同步模型权重,而一组客户端操纵多站点数据。这促进了数据治理,因为客户端仅与中心服务器交换模型权重或梯度,而不是将本地数据上传到中心服务器,并且已经使 FL 成为利用多站点数据同时保护隐私的标准化解决方案。
然而,现有的 FL 大多不能保证来自客户端的上传模型更新的质量。例如,我们可以将恶意行为定义为通过投毒攻击故意降低全局模型学习性能(例如准确性和收敛性)的行为。攻击者可以通过操纵客户端破坏 FL 系统,而不是黑进中心服务器。这项工作专注于防御客户端投毒攻击。
一种解决方案是将 FL 与如全同态加密(FHE)和安全多方计算(SMPC)等复杂的密码协议相结合,以减轻客户端的恶意行为。然而,采用这些复杂的密码协议为 FL 参与者引入了显著的计算开销,从而损害了系统性能。
FLock.io 公司及其合作研究者们(上海人工智能实验室 Nanqing Dong 教授、帝国理工大学 zhipeng Wang 博士、帝国理工大学 William Knoettenbelt 教授及卡内基梅隆大学 Eric Xing 教授)通过提出一种基于区块链和分布式账本技术的安全可靠的 FL 系统框架来解决传统联邦学习(FL)依赖于集中式服务器进行全局模型聚合,从而导致单点故障这个问题,并将此系统设计命名为 FLock。
在该研究中,团队借助区块链、智能合约和代币经济学设计一种可以抵抗恶意节点攻击(尤其是投毒攻击)的 FL 框架。该工作的成果近期被 IEEE Transactions on Artificial Intelligence (TAI) 接收。
- 论文链接:https://ieeexplore.ieee.org/document/10471193
- 论文标题:Defending Against Poisoning Attacks in Federated Learning with Blockchain
方法介绍
灵感来源
FLock 的机制设计受到了证明权益(PoS)区块链共识机制和桌面游戏《The Resistance》(一种角色扮演类游戏,该游戏的一个变种叫阿瓦隆)的启发。
《The Resistance》游戏则通过投票机制,每轮游戏中玩家独立推理并投票,从而实现全局共识。《The Resistance》有两个不匹配的竞争方,其中较大的一方被称为抵抗力量,另一方被称为间谍。在《The Resistance》中,有一个投票机制,在每一轮中,每个玩家进行独立推理并为一个玩家投票,得票最多的玩家将被视为「间谍」并被踢出游戏。抵抗力量的目标是投票淘汰所有间谍,而间谍的目标是冒充抵抗力量并生存到最后。
整体设计
基于 PoS 和《The Resistance》的启发,FLock 提出了一个新颖的基于区块链的 FL 全局聚合的多数投票机制,其中每个 FL 参与客户端独立验证聚合本地更新的质量,并为全局更新的接受度投票。参与者需要抵押资产或代币。
每一轮 FL 训练中,参与者将被随机选中参与两种类型的行动,提议(上传本地更新)和投票。聚合者(可以是区块链矿工或者其他 FL 链下聚合者)将对收到的本地更新进行聚合从而得到全局聚合。如果大多数投票接受全局聚合,提议者将退还其抵押的代币,而投票接受的投票者不仅会退还,而且还会获得投票拒绝的投票者的抵押代币的奖励,反之亦然。
基于股权基础聚合机制的整体设计如下图所示。
算法细节如下所示:
- 在每一轮中,从参与的客户端中随机选择提议者来进行本地训练并将本地更新上传到区块链。
- 随机选择的投票者将下载聚合的本地更新,执行本地验证,并投票接受或拒绝。
- 如果大多数投票者投票「接受」,那么全局模型将被更新,提案者和投票「接受」的投票者将获得奖励。
- 相反,如果大多数投票者投票「拒绝」,则全局模型将不会更新,提案者和投票「接受」的投票者的抵押代币将被削减。
该算法的最终目标是让恶意参与者的长期平均收益为负值,进而使其抵押代币削减到低于某个允许阈值,从而被提出 FL 系统。
实验结果
FLock 的实验在 Kaggle Lending Club 数据集和 ChestX-ray14 数据集上显示分析了该方案的可行性和鲁棒性,包括:
与传统 FL 相比,FLock 抵抗恶意节点的能力:如下图所示,FLock (即 FedAVG w/block)在有恶意节点的情况下仍然保持了稳健的性能。
恶意参与者的抵押代币变化:同理论分析一致,恶意参与者的平均代币随着训练轮数 / 时间的增加而减少。并且,如果惩罚力度增大(即 \gamma 增大),则恶意参与者的平均代币的减少速度将会增大。
诚实参与者的抵押代币变化:相对应的,诚实参与者的平均代币随着训练轮数 / 时间的增加而增加。并且,如果惩罚力度增大大(即 \gamma 增大),则诚实参与者的平均代币的增加速度将会增大。
恶意参与者的存活时间:恶意参与者的存活时间将会随着惩罚力度增大而缩短。
诚实参与者的存活时间:FLock 的实验结果也指出,在恶意节点占比较多的时候(即 \eta 增大时),较大的惩罚力度也会造成部分诚实节点的存活时间缩短(因为每一轮的提议者和投票者是随机选取的)。因此,在实际应用中,要结合考虑恶意节点占比(即 \eta)设置惩罚力度(即 \gamma)。
总结与展望
FLock 提出了一种基于区块链、智能合约和代币经济学的可以抵恶意节点攻击的 FL 框架。该方案论证了区块链和 FL 结合的可行性,证明了区块链不仅可以在去中心化和激励参与者在金融和医学等领域的现实世界中的 FL 应用中发挥重要作用,而且还可以用来防御投毒攻击。
FLock 的方案已被进一步落地实现:https://www.flock.io/
团队将于近期推出首个版本的去中心化 AI 模型训练平台,基建包括了激励体系,联邦学习和一键微调脚本。平台将主要面向两类人群:Developer:欢迎各位 Kaggle 及 Huggingface 玩家早期入驻,完成模型训练与验证以获得激励;Task Creator:有模型训练或者微调需求的公司或者团队可以在FLock平台上发布任务,FLock提供基建组织开发者,从而省去组建AI团队,寻找用户基础与数据的复杂过程,并简化工作流。有兴趣请邮件 FLock 团队:hello@flock.io
研究方面,FLock 也正在探索更加多维度的 decentralized AI 安全解决方案,如借助零知识证明解决 FL 中心节点作恶的问题。
研究地址:https://arxiv.org/pdf/2310.02554.pdf
# DeepMind升级Transformer,前向通过FLOPs最多可降一半
引入混合深度,DeepMind 新设计可大幅提升 Transformer 效率。
Transformer 的重要性无需多言,目前也有很多研究团队致力于改进这种变革性技术,其中一个重要的改进方向是提升 Transformer 的效率,比如让其具备自适应计算能力,从而可以节省下不必要的计算。
正如不久前 Transformer 架构的提出之一、NEAR Protocol 联合创始人 Illiya Polosukhin 在与黄仁勋的对话中说到的那样:「自适应计算是接下来必须出现的。我们要关注,在特定问题上具体要花费多少计算资源。」其实人类就天生具备自适应计算的能力 —— 人在解决各种不同的问题时,会自然地分配不同的时间和精力。
语言建模也应如此,为了得到准确的预测结果,并不需要为所有 token 和序列都投入同样的时间或资源。但是,Transformer 模型在一次前向传播中却会为每个 token 花费同等的计算量。这不禁让人哀叹:大部分计算都被浪费了!
理想情况下,如果可以不执行非必要的计算,就可以降低 Transformer 的计算预算。
条件式计算这种技术可在需要执行计算时才执行计算,由此可以减少总计算量。之前许多研究者已经提出了多种可以评估何时执行计算以及使用多少计算量的算法。
但是,对于这个颇具挑战性的问题,普遍使用的解决形式可能无法很好地应对现有的硬件限制,因为它们往往会引入动态计算图。最有潜力的条件式计算方法反而可能是那些能协调使用当前硬件栈的方法,其会优先使用静态计算图和已知的张量大小(基于对硬件的最大利用而选取这个张量大小)。
近日,Google DeepMind 研究了这个问题,他们希望使用更低的计算预算来缩减 Transformer 使用的计算量。
- 论文标题:Mixture-of-Depths: Dynamically allocating compute in transformer-based language models
- 论文地址:https://arxiv.org/pdf/2404.02258.pdf
他们设想:在每一层中,网络必须学会为每个 token 做决策,从而动态地分配可用计算预算。在他们的具体实现中,总计算量由用户在训练之前设定并且不再更改,而非网络工作时执行决策的函数。这样一来,便可以提前预知并利用硬件效率收益(比如内存足迹减少量或每次前向传播的 FLOPs 减少量)。该团队的实验表明:可以在不损害网络整体性能的前提下获得这些收益。
DeepMind 的这个团队采用了类似于混合专家(MoE) Transformer 的方法,其中会在整个网络深度上执行动态 token 层面的路由决策。
而与 MoE 不同的是,这里他们的选择是:要么是将计算应用于 token(和标准 Transformer 一样),要么就是通过一个残差连接绕过它(保持不变,节省计算)。另一个与 MoE 的不同之处是:这里是将这种路由机制同时用在 MLP 和多头注意力上。因此,这也会影响网络处理的键值和查询,因此该路由不仅要决定更新哪些 token,还要决定哪些 token 可供关注。
DeepMind 将这一策略命名为 Mixture-of-Depths(MoD),以突显这一事实:各个 token 在 Transformer 深度上通过不同数量的层或模块。我们这里将其翻译成「混合深度」,见图 1。
MoD 支持使用者权衡考量性能与速度。一方面,使用者可以使用与常规 Transformer 同等的训练 FLOPs 来训练 MoD Transformer,这可为最终的对数概率训练目标带来多达 1.5% 的提升。另一方面,MoD Transformer 使用更少的计算量就能达到与常规 Transformer 同样的训练损失 —— 每一次前向传播的 FLOPs 可少最多 50%。
这些结果表明,MoD Transformer 可以学习智能地路由(即跳过不必要的计算)。
实现混合深度(MoD)Transformer
概况来说,其策略如下:
- 设定一个静态的计算预算,该预算低于等价的常规 Transformer 所需的计算量;做法是限制序列中可参与模块计算(即自注意力模块和后续的 MLP)的 token 数量。举个例子,常规 Transformer 可能允许序列中的所有 token 都参与自注意力计算,但 MoD Transformer 可限定仅使用序列中 50% 的 token。
- 针对每个 token,每个模块中都有一个路由算法给出一个标量权重;该权重表示路由对各个 token 的偏好 —— 是参与模块的计算还是绕过去。
- 在每个模块中,找到最大的前 k 个标量权重,它们对应的 token 会参与到该模块的计算中。由于必定只有 k 个 token 参与到该模块的计算中,因此其计算图和张量大小在训练过程中是静态的;这些 token 都是路由算法认定的动态且与上下文有关的 token。
路由方案
该团队考虑了两种学习到的路由方案(见图 2):token 选择型和专家选择型。
在 token 选择型路由方案中,路由算法会跨计算路径(比如跨 MoE Transformer 中的专家身份)生成针对每个 token 的概率分布。然后 token 会被传送到它们偏好的路径(即概率最高的路径),而辅助损失可以确保所有 token 不会收敛到同一路径。token 选择型路由可能会有负载平衡问题,因为不能确保 token 在可能的路径之间划分适当。
专家选择型路由则是将上述方案反过来:不是让 token 选择它们偏好的路径,而是让每条路径基于 token 偏好选择前 k 个 token(top-k)。这能确保负载完美平衡,因为每条路径总是保证 k 个 token。但是,这也可能导致某些 token 被过处理或欠处理,因为某些 token 可能是多条路径的前 k 名,另一些 token 则可能没有相应路径。
DeepMind 的选择是使用专家选择型路由,原因有三。
第一,它无需辅助性的平衡损失。
第二,由于选取前 k 名这一操作取决于路由权重的幅度,因此该路由方案允许使用相对路由权重,这有助于确定当前模块计算最需要哪些 token;路由算法可以通过适当地设定权重来尽力确保最关键的 token 是在前 k 名之中 —— 这是 token 选择型路由方案无法做到的。在具体的用例中,有一条计算路径本质上是 null 操作,因此应该避免将重要 token 路由到 null。
第三,由于路由只会经由两条路径,因此单次 top-k 操作就能高效地将 token 分成两个互斥的集合(每条计算路径一个集合),这能应对上面提及的过处理或欠处理问题。
该路由方案的具体实现请参看原论文。
采样
尽管专家选择型路由有很多优点,但它也有一个很明显的问题:top-k 操作是非因果式的。也就是说,一个给定 token 的路由权重是否在前 k 名取决于其之后的路由权重的值,但在执行自回归采样时,我们无法获得这些权重。
为了解决这个问题,该团队测试了两种方法。
第一种是引入一个简单的辅助损失;实践证明,其对语言建模主目标的影响程度为 0.2%− 0.3%,但却能够让模型自回归地采样。他们使用了一个二元交叉熵损失,其中路由算法的输出提供 logit,通过选取这些 logit 中的 top-k,就能提供目标(即,如果一个 token 在 top-k 中,就为 1,否则为 0)。
第二种方法是引入一个小的辅助 MLP 预测器(就像是又一个路由算法),其输入与路由算法的一样(具有 stop gradient),但其输出是一个预测结果:token 是否在序列的 top-k 中。该方法不会影响语言建模目标,实验表明也不会显著影响该步骤的速度。
有了这些新方法,就可以通过选择路由到的 token 来执行自回归采样,也可以根据路由算法的输出绕过一个模块,这无需依赖任何未来 token 的信息。实验结果表明,这是一种相对简单辅助任务,可以很快实现 99% 的准确度。
结果
训练,isoFLOP 比较
首先,该团队训练了一些 FLOP 预算相对较小(6e18)的模型,以确定最优的超参数(见下图 3)。
总体而言,可以看到 MoD Transformer 会将基准 isoFLOP 曲线向右下方拖动。也就是说,最优的 MoD Transformer 的损失比最优的基准模型更低,同时参数也更多。这种效应带来了一个幸运的结果:存在一些和最优基准模型表现一样好甚至更好的 MoD 模型(同时步骤速度更快),尽管它们本身在其超参数设置下并不是 isoFLOP 最优的。举个例子,一个 220M 参数量的 MoD 变体(图 3 中的 3 号模型)稍优于 isoFLOP 最优基准模型(参数量也是 220M,图 3 中的 1 号模型),但这个 MoD 变体在训练期间的步骤速度快了 60% 以上。
下图 4 给出了总 FLOPs 为 6e18、2e19 和 1e20 时的 isoFLOP 分析。可以看到,当 FLOP 预算更大时,趋势依然继续。
下图 5 给出了一个使用交织的路由模块训练的 MoD Transformer 的路由决策。尽管其中存在大量绕过模块的情况,但这个 MoD Transformer 依然能实现优于常规 Transformer 的性能。
自回归评估
他们也评估了 MoD 变体的自回归采样表现,结果见下图 6。这些结果表明 MoD Transformer 所带来的计算节省不仅仅局限于训练设置。
混合深度与专家(MoDE)
MoD 技术可以自然地与 MoE 模型整合起来,组成所谓的 MoDE 模型。下图 7 展示了 MoDE 及其带来的提升。
MoDE 有两种变体:分阶段 MoDE 和集成式 MoDE。
其中分阶段 MoDE 是在自注意力步骤之前进行路由绕过或到达 token 的操作;而集成式 MoDE 则是通过在常规 MLP 专家之间集成「无操作」专家来实现 MoD 路由。前者的优势是允许 token 跳过自注意力步骤,而后者的好处在于其路由机制很简单。
该团队注意到,以集成方式实现 MoDE 明显优于直接降低专家的能力、依靠丢弃 token 来实现残差路由的设计。
# MiniGemini
Mini-Gemini 堪比 GPT4+DALLE3 王炸组合。更高清图像的精确理解、更高质量的训练数据、更强的图像解析推理能力,还能结合图像推理和生成,香港中文大学终身教授贾佳亚团队提出的这款多模态模型 Mini-Gemini 堪称绝绝子,相当于开源社区的 GPT4+DALLE3 的王炸组合!
- Github 地址:https://github.com/dvlab-research/MiniGemini
- Demo 地址: http://103.170.5.190:7860/
- 论文地址:https://arxiv.org/pdf/2403.18814.pdf
- 模型地址:https://huggingface.co/collections/YanweiLi/mini-gemini-6603c50b9b43d044171d0854
- 数据地址:https://huggingface.co/collections/YanweiLi/mini-gemini-data-660463ea895a01d8f367624e
Mini-Gemini 还提供了 2B 小杯到 34B 的超大杯,最强模型在多个指标上相比 Google Gemini Pro 甚至 GPT-4V 都不遑多让。目前,Mini-Gemini 从代码、模型、到数据已全部开源,还登上了 PaperWithCode 热榜。
值得一提的是,Mini-Gemini 的图像理解和生成能力已经出了 Demo,可以在线跟自定义图像对话的那种。
操作也极其简单,直接跟输入图像或文字进行对话即可,欢迎来撩!
Mini-Gemini Demo 放出后受到广大网友关注,一番 “品尝” 后,他们认为 Mini-Gemini 跟商业模型差不了多少!
效果展示
目前,绝大多数多模态模型仅支持低分辨率图像输入和文字输出,而在实际场景中,许多任务都需要对高清图像进行解析,并用图像的形式进行展现。
如上图所示,Mini-Gemini 不仅能够根据图片对做面包的过程进行手把手教学,也能够准确将不同电脑根据图片中的各种参数进行对比。网友表示:妈妈再也不用担心我的生活了。
更重要的是,Mini-Gemini 在保留超强的图像理解和推理能力的同时,还解锁了图像的生成能力,就如同 ChatGPT 和生成模型的结合。
下面,让我们通过几个例子来更直观地感受这种能力:
还记得 Google Gemini 的官方演示视频么?当用户给出两个毛线团并问出能用它们做什么时,Gemini 可以识别出图片内容并给出相应的建议。
当我们把相似的输入给到 Mini-Gemini,它会怎么回答呢?
可以发现,Mini-Gemini 也可以识别出图片中的元素,并且给出合理的建议,同时生成了一只对应的毛线小熊。
通过一些抽象的多模态指令来让模型给出推理,并生成合适的图片,这个操作就很像是 ChatGPT 和 DALLE3 的联动了!
接下来让 Mini-Gemini 做自己最擅长的推理和图片理解,看看它表现:
比如理解图片中的矛盾点并举一反三:输入冰川中的仙人掌,它会解释其中的矛盾并生成一张热带雨林中北极熊的图片:
图片呈现了仙人掌的典型栖息地与冰的存在之间的视觉矛盾,因为在沙漠环境中自然不会出现冰。这种矛盾的类似例子可能是一只北极熊出现在热带雨林中,因为北极熊适应于寒冷、覆盖着冰的环境,在炎热潮湿的气候中无法生存。这种并置创造了一个引人注目且超现实的视觉效果,挑战观众的期待,并可能引发人们对气候变化、环境适应或不同生态系统融合的思考。
同时,正如 ChatGPT+DALLE3 的梦幻结合一样,Mini-Gemini 的推理生成功能还可以在多轮对话中通过简单指令生成连环小故事。
比方说,让它根据用户输入讲一个贵族小老鼠的故事。Mini-Gemini 会根据前文的文字生成结果和用户输入进行推理,在保持一致性的情况下对图片进行修改,使其更符合用户的要求。
当然,Mini-Gemini 对于多模态模型的传统技能图片理解也不在话下。比如让模型理解输入曲线图(上图)的数学意义(高斯分布),并让它使用代码复现这张图,通过运行生成的代码,模型可以高质量地还原曲线图,节省了复现的时间。
又或者让 Mini-Gemini 理解梗图,通过其强大的 OCR 和推理能力,也可以准确指出笑点。
高清复杂的多图表理解和归纳也是小菜一碟,Mini-Gemini 秒变打工人效率提升的超级外挂。
Mini-Gemini 背后的技术
大道至简,Mini-Gemini的整体思路并不复杂。其中的Gemini(双子座)表达的是使用视觉双分支的信息挖掘(Mining-Info in Gemini)解决高清图像理解问题。
详细来说,Mini-Gemini 将传统所使用的 ViT 当做低分辨率的 Query,而使用卷积网络 (ConvNet) 将高分辨率的图像编码成 Key 和 Value。使用 Transformer 中常用的 Attention 机制,来挖掘每个低分辨率 Query 所对应的高分辨率区域。从而在保持最终视觉 Token 数目不变的情况下去提升对高清图像的响应,保证了在大语言模型 (LLM) 中对于高清图像的高效编码。值得一提的是,由于高分辨率分支卷积网络的使用,可以根据需要对图像所需的分辨率自适应调整,能够遇强则强。对于图像的生成部分,Mini-Gemini 借助了 SDXL,使用 LLM 推理后所生成的文本链接两个模型,类似于 DALLE3 的流程。
而对于数据这个万金油,Mini-Gemini 进一步收集并优化了训练数据的模型结合的文本数据进行训练。在仅使用 2-3M 数据的情况下,实现了对图像理解、推理、和生成的统一流程。
实验结果
Mini-Gemini 在各种 Zero-shot 的榜单上毫不逊色于各种大厂用大量数据训练出来的模型,可谓是 “平、靓、正” !
量化指标
可以看出,Mini-Gemini 提供了多种普通和高清版本的模型,并且覆盖了 2B 的小杯到 34B 的超大杯,各个版本都取得了相似参数量下领先的效果,在许多指标上甚至超越 Gemini Pro 和 GPT-4V。
# Gemma
刚刚,谷歌杀入开源大模型。开源大模型王座易主!谷歌Gemma杀入场,笔记本可跑,可商用
开源领域大模型,迎来了重磅新玩家。
谷歌推出了全新的开源模型系列「Gemma」。相比 Gemini,Gemma 更加轻量,同时保持免费可用,模型权重也一并开源了,且允许商用。
Gemma 官方页面:https://ai.google.dev/gemma/
本次发布包含两种权重规模的模型:Gemma 2B 和 Gemma 7B。每种规模都有预训练和指令微调版本。想使用的人可以通过 Kaggle、谷歌的 Colab Notebook 或通过 Google Cloud 访问。
当然,Gemma 也第一时间上线了 HuggingFace 和 HuggingChat,每个人都能试一下它的生成能力:
尽管体量较小,但谷歌表示 Gemma 模型已经「在关键基准测试中明显超越了更大的模型」,对比的包括 Llama-2 7B 和 13B,以及风头正劲的 Mistral 7B。
而且 Gemma「能够直接在开发人员的笔记本电脑或台式电脑上运行」。除了轻量级模型之外,谷歌还推出了鼓励协作的工具以及负责任地使用这些模型的指南。
Keras 作者 François Chollet 对此直接表示:最强开源大模型的位置现在易主了。
在 HuggingFace 的 LLM leaderboard 上,Gemma 的 2B 和 7B 模型已经双双登顶。
新的 Responsible Generative AI Toolkit 为使用 Gemma 创建更安全的 AI 应用程序提供指导和必备工具。谷歌还通过原生 Keras 3.0 兼容所有主流框架(JAX、PyTorch 和 TensorFlow),为 Gemma 提供推理和监督微调(SFT)的工具链。
在各家大厂和人工智能研究机构探索千亿级多模态大模型的同时,很多创业公司也正在致力于构建体量在数十亿级别的语言模型。而 Meta 去年推出的 Llama 系列震动了行业,并引发了人们对于生成式 AI 开源和闭源路线的讨论。
谷歌表示,Gemma 采用了与构建 Gemini 模型相同的研究和技术。不过,Gemma 直接打入开源生态系统的出场方式,与 Gemini 截然不同。谷歌也并未遵守在去年定下的「不再开放核心技术」的策略。
虽然开发者可以在 Gemini 的基础上进行开发,但要么通过 API,要么在谷歌的 Vertex AI 平台上进行开发,被认为是一种封闭的模式。与同为闭源路线的 OpenAI 相比,未见优势。
但借助此次 Gemma 的开源,谷歌或许能够吸引更多的人使用自己的 AI 模型,而不是直接投奔 Meta、Mistral 这样的竞争对手。
谷歌这次没有预告的开源,或许是想抢在 Meta 的 Llama 3 之前一天,毕竟此前有消息称 Llama 系列本周就要上新(让我们期待第一时间的评测对比)。
虽然才发布几个小时,但 X 平台上已经有不少用户晒出了使用体验。有位用户表示,Gemma -7B 速度很快,输出也很稳定,好过 Llama-2 13B。
在开源模型的同时,谷歌还公布了有关 Gemma 的性能、数据集组成和建模方法的详细信息的技术报告。在技术报告中,其他研究者发现了一些亮点,比如 Gemma 支持的词汇表大小达到了 256K,这意味着它对英语之外的其他语言能够更好、更快地提供支持。
以下是技术报告的细节。
Gemma 技术细节
总体来说,Gemma 是一个轻量级的 SOTA 开放模型系列,在语言理解、推理和安全方面表现出了强劲的性能。
技术报告链接:https://storage.googleapis.com/deepmind-media/gemma/gemma-report.pdf
谷歌发布了两个版本的 Gemma 模型,分别是 20 亿参数和 70 亿参数,并提供了预训练以及针对对话、指令遵循、有用性和安全性微调的 checkpoint。其中 70 亿参数的模型用于 GPU 和 TPU 上的高效部署和开发,20 亿参数的模型用于 CPU 和端侧应用程序。不同的尺寸满足不同的计算限制、应用程序和开发人员要求。
Gemma 在 18 个基于文本的任务中的 11 个上优于相似参数规模的开放模型,例如问答、常识推理、数学和科学、编码等任务。
下图 1 为 Gemma(7B)与 LLaMA 2(7B)、LLaMA 2(13B)和 Mistral(7B)在问答、推理、数学和科学、编码等任务上的性能比较。可以看到,Gemma(7B)表现出了优势(除了在问答任务上弱于 LLaMA 2(13B))。
接下来看 Gemma 的模型架构、训练基础设施、预训练和微调方法。
模型架构
Gemma 模型架构基于 Transformer 解码器,表 1 总结了该架构的核心参数。模型训练的上下文长度为 8192 个 token。
此外,谷歌还在原始 transformer 论文的基础上进行了改进,改进的部分包括:
- 多查询注意力:7B 模型使用多头注意力,而 2B 检查点使用多查询注意力;
- RoPE 嵌入:Gemma 在每一层中使用旋转位置嵌入,而不是使用绝对位置嵌入;此外,Gemma 还在输入和输出之间共享嵌入,以减少模型大小;
- GeGLU 激活:标准 ReLU 非线性被 GeGLU 激活函数取代;
- Normalizer Location:Gemma 对每个 transformer 子层的输入和输出进行归一化,这与仅对其中一个或另一个进行归一化的标准做法有所不同,RMSNorm 作为归一化层。
训练基础设施
谷歌使用了自研 AI 芯片 TPUv5e 来训练 Gemma 模型:TPUv5e 部署在由 256 个芯片组成的 pod 中,配置成由 16 x 16 个芯片组成的二维环形。
对于 7B 模型,谷歌在 16 个 pod(共计 4096 个 TPUv5e)上训练模型。他们通过 2 个 pod 对 2B 模型进行预训练,总计 512 TPUv5e。在一个 pod 中,谷歌对 7B 模型使用 16 路模型分片和 16 路数据复制。对于 2B 模型,只需使用 256 路数据复制。优化器状态使用类似 ZeRO-3 的技术进一步分片。在 pod 之外,谷歌使用了 Pathways 方法通过数据中心网络执行数据复制还原。
预训练
Gemma 2B 和 7B 分别在来自网络文档、数学和代码的 2T 和 6T 主要英语数据上进行训练。与 Gemini 不同的是,这些模型不是多模态的,也不是为了在多语言任务中获得最先进的性能而训练的。
为了兼容,谷歌使用了 Gemini 的 SentencePiece tokenizer 子集(Kudo 和 Richardson,2018 年)。它可以分割数字,不删除多余的空白,并遵循(Chowdhery 等人,2022 年)和(Gemini 团队,2023 年)所使用的技术,对未知 token 进行字节级编码。词汇量为 256k 个 token。
指令调优
谷歌通过在仅文本、仅英语合成和人类生成的 prompt 响应对的混合数据上进行监督微调(SFT),以及利用在仅英语标记的偏好数据和基于一系列高质量 prompt 的策略上训练的奖励模型进行人类反馈强化学习(RLHF),对 Gemma 2B 和 Gemma 7B 模型进行微调。
实验发现,监督微调和 RLHF 这两个阶段对于提高下游自动评估和模型输出的人类偏好评估性能都非常重要。
监督微调
谷歌根据基于 LM 的并行评估结果来选择自己的混合数据,以进行监督微调。给定一组留出的(heldout) prompt, 谷歌从测试模型中生成响应,并从基线模型中生成相同 prompt 的响应,并要求规模更大的高性能模型来表达这两个响应之间的偏好。
谷歌还构建不同的 prompt 集来突出特定的能力,例如指令遵循、真实性、创造性和安全性等。谷歌使用了不同的自动化 LM「judges」,它们采用了多种技术,比如思维链提示(chain-of-thought prompting)、对齐人类偏好等。
格式化
指令调优模型使用特定的格式化器进行训练, 该格式化器在训练和推理时使用额外的信息来标注所有指令调优示例。这样做有以下两个目的,1)指示对话中的角色,比如用户角色;2)描述对话轮次,尤其是在多轮对话中。为了实现这两个目的,谷歌在分词器(tokenizer)中保留了特殊的控制 token。
下表 3 为相关格式化控制 token,表 4 为对话示例。
人类反馈强化学习(RLHF)
谷歌使用 RLHF 对监督微调模型进一步微调,不仅从人类评分者那里收集了偏好对,还在 Bradley-Terry 模型下训练了奖励函数,这类似于 Gemini。该策略经过训练,使用一个具有针对初始调优模型的 Kullback–Leibler 正则化项的 REINFORCE 变体,对该奖励函数进行优化。
与监督微调(SFT)阶段一样,为了进行超参数调优,并额外减轻奖励黑客行为,谷歌依赖高容量模型作为自动评估器,并计算与基线模型的比较结果。
评估
谷歌通过人类偏好、自动基准和记忆等指标,在广泛的领域对 Gemma 进行了全面的评估。
人类偏好评估
除了在经过微调的模型上运行标准学术基准之外,谷歌对最终发布的候选模型进行了人类评估研究,以便与 Mistral v0.2 7B Instruct 模型进行比较。
与 Mistral v0.2 7B Instruct 相比,Gemma 7B IT 的正胜率为 51.7%,Gemma 2B IT 的胜率为 41.6%。在测试基本安全协议的约 400 条 prompt 中,Gemma 7B IT 的胜率为 58%,而 Gemma 2B IT 的胜率为 56.5%。表 5 中报告了相应的数字。
自动基准评估
谷歌还在一系列学术基准上将 Gemma 2B 和 7B 模型与几个外部开源 LLM 进行了比较,如表 6 所示:
在 MMLU 上,Gemma 7B 的表现优于相同或较小规模的所有开源模型,还优于几个较大的模型,包括 LLaMA2 13B。
然而,基准作者对人类专家表现的评估结果是 89.8%, Gemini Ultra 是第一个超过这一阈值的模型,可以看到Gemma仍有很大的改进空间,以达到Gemini和人类水平的性能。
但 Gemma 模型在数学和编码基准测试中表现比较突出。在数学任务上,Gemma 模型在 GSM8K 和更难的 MATH 基准上的表现超过其他模型至少 10 分。同样,它们在 HumanEval 上的表现比其他开源模型至少高出 6 分。Gemma 在 MBPP 上的表现甚至超过了经过代码微调的 CodeLLaMA-7B 模型(CodeLLaMA 得分为 41.4%,而 Gemma 7B 得分为 44.4%)。
记忆评估
谷歌使用 Anil 等人采用的方法测试 Gemma 的记忆能力,具体而言,他们从每个语料库中采样 10000 个文档,并使用前 50 个 token 作为模型的 prompt。在此过程中,谷歌主要关注精准记忆,如果模型生成的后续 50 个 token 与文本中的真实后续文本完全匹配,则将该文本分类为已记忆。图 2 将评估结果与同等规模的 PaLM 和 PaLM 2 模型进行了比较,结果如下所示。
可以发现,Gemma的记忆率明显更低(见图2左侧)。
不过,通过对整个预训练数据集的「总记忆量」进行估算,可得一个更为准确的评估结果(见图2右侧):Gemma在记忆训练数据方面的表现与PaLM相当。
个人信息的记忆化问题尤为关键。如图3所示,研究者并未发现有记忆化的敏感信息。
隐私数据
对大模型来说,隐私数据被记住的可能性是一件非常值得关注的事情。为了使 Gemma 预训练模型安全可靠,谷歌使用自动方法从训练集中过滤掉某些隐私信息和其他敏感数据。
为了识别可能出现的隐私数据,谷歌使用 Google Cloud 数据丢失防护 (DLP) 工具。该工具根据隐私数据的类别(例如姓名、电子邮件等)输出三个严重级别。谷歌将最高严重性分类为「敏感(sensitive)」,其余两个分类为「隐私(personal)」,然后测量有多少存储的输出包含敏感或个人数据。
如下图 3 所示,谷歌没有观察到存储敏感数据的情况,但确实发现 Gemma 模型会记住一些上述分类为潜在「隐私」的数据。值得注意的是,研究中使用的工具可能存在许多误报(因为其只匹配模式而不考虑上下文),这意味着实验结果可能高估了已识别的隐私数据量。
在记忆数据量方面,如下图 4 所示,谷歌观察到大约会多出 50% 的数据被记住,并且在数据集的每个不同子类别中几乎是一致的。
最后,谷歌还通过标准化 AI 安全基准评估了 Gemma 的安全性,结果如下表 8 所示。
虽然确实发现了一些被归类为「个人信息」的数据被记忆,但这种情况发生的频率相对较低。
而且这些工具往往会产生许多误报(因为它们仅通过匹配模式而不考虑上下文),这意味着研究者发现的个人信息量可能被高估了。
总结讨论
总的来说,Gemma模型在对话、逻辑推理、数学和代码生成等多个领域,都有所提升。
在MMLU(64.3%)和MBPP(44.4%)的测试中,Gemma不仅展现了卓越的性能,还显示了开源大语言模型性能进一步提升的空间。
除了在标准测试任务上取得的先进性能,谷歌也期待与社区共同推动这一领域的发展。
Gemma从Gemini模型计划中学到了很多,包括编码、数据处理、架构设计、指令优化、基于人类反馈的强化学习以及评估方法。
同时,谷歌再次强调使用大语言模型时存在的一系列限制。
尽管在标准测试任务上表现优异,但要创建出既稳定又安全、能够可靠执行预期任务的模型,还需要进一步的研究,包括确保信息的准确性、模型的目标对齐、处理复杂逻辑推理,以及增强模型对恶意输入的抵抗力。
团队表示,正如Gemini所指出的,需要更具挑战性和鲁棒性的测试基准。
参考链接:
https://www.theverge.com/2024/2/21/24078610/google-gemma-gemini-small-ai-model-open-source
# Shap-E
OpenAI 又有新动作了,开源发布 Shap-E。
今天,我继续手把手教学。
算法原理、环境搭建、效果测试,一条龙服务,尽在下文!
Shap-E 效果
Shap-E 算法的功能,简单来讲就是根据一段文字描述,生成对应的 3D 模型,一起看几组效果。
输入文字:
A chair that looks like an avocado
(翻译:一把看起来像鳄梨的椅子。)
Shap-E 输出对应的 3D 模型:
输入文字:
A spaceship
(翻译:一艘太空船)
Shap-E 输出对应的 3D 模型:
输入文字:
An airplane that looks like a banana
(翻译:一架酷似香蕉的飞机)
更多生成效果:
目前 OpenAI 已经开源了 Shap-E 的代码。
算法原理
Shap-E 还是用到了潜空间扩散模型(Latent Diffusion)。
熟悉 Stable Diffusion 的小伙伴应该对于这个概念并不陌生,其实就是将一些高维信息,降维表示到一个特定的特征空间,然后再根据这些特征,做生成。
Shap-E 整体结构也是类似的 Encoder - Decoder 结构。
不过输入和输出变了,比如 Shap-E 的 Encoder 结构是这样的:
输入是点云模型,经过降维、交叉注意力层、Transformer等结构,最终获得一个 implicit MLP。
至于 Decoder 则采用 STF Rendering 进行渲染,同时加入了 CLIP 的 text embedding。
Shap-E 支持多模态,输入既可以是文字,也可以图片。
算法部署
项目地址:
算法部署并不复杂,Shap-E 只依赖于 CLIP。
可以单独创建一个名为 shape 的虚拟环境。
conda create -n shape python=3
conda activate shape
然后安装好 CLIP 的一些依赖。
conda install --yes -c pytorch pytorch=1.7.1 torchvision cudatoolkit=11.0
pip install ftfy regex tqdm
进入 Shap-E 项目的根目录,直接 pip 安装即可。
pip install -e .
pip 会根据 setup.py 进行安装。
我网速不太给力,本地搭建环境,大概花费了 1 个小时。
shap_e/examples/sample_text_to_3d.ipynb 是 text 生成 3D 模型的代码。
shap_e/examples/sample_image_to_3d.ipynb 是图片生成 3D 模型的代码。
在 A10 机器上,生成一次 3D 模型,大概需要花费 25 秒。
最后
当然,因为数据集等方面的原因,有些 3D 模型生成的效果还是挺差的。
比如我测试了A dog
,得到了这么一个东西:
我输入A cat
,得到了:
通过图片,生成 3D 模型,对于图片的要求很高,必须是白色背景的图片,效果才可以,或者干脆是透明背景。
在 Huggingface 也有人搭建了这个服务,非官方项目,但使用的是官方代码:
https://huggingface.co/spaces/hysts/Shap-E
我发出来之后,估计就有不少人排队了,可以错峰试玩。
测试了一番,我的感受是这样的:
如果你是这个方向的研究生,那这篇论文值得看,算法也值得跑一跑,一些思想可以参考,说不定下一篇 best paper 就是你的了。
但如果你是个吃瓜群众,那就别浪费时间跑了,效果还不到直接可用的程度,没有图片生成那种惊艳的效果,不能直接用来做一些素材的生产。
# FunSearch
作为今年 AI 圈的顶流,大型语言模型(LLM)擅长的是组合概念,并且可以通过阅读、理解、写作和编码来帮助人们解决问题。但它们能发现全新的知识吗?除了模仿人类说话、写作、写代码,大模型还能用来发现新知识。困扰数学家几十年的难题,大模型发现全新解
由于 LLM 已被证明存在「幻觉」问题,即生成与事实不符的信息,因此利用 LLM 来做可验证的正确发现是一项挑战。
现在,来自 Google DeepMind 的研究团队提出了一种为数学和计算机科学问题搜索解决方案的新方法 ——FunSearch。FunSearch 的工作原理是将预训练的 LLM(以计算机代码的形式提供创造性解决方案)与自动「评估器」配对,以防止产生幻觉和错误思路。通过在这两个组件之间来回迭代,最初的解决方案演变成了「新的知识」。相关论文发表在《自然》杂志上。
论文地址:https://www.nature.com/articles/s41586-023-06924-6
这项工作是首次利用 LLM 在科学或数学的挑战性开放问题方面取得新发现。
FunSearch 发现了 cap set 问题的全新解决方案,这是数学中一个长期存在的开放问题。此外,为了展示 FunSearch 的实际用途,DeepMind 还用它来发现更有效的算法来解决「装箱」问题,该问题应用广泛,比如可以用于提高数据中心的效率。
研究团队认为 FunSearch 将成为一个特别强大的科学工具,因为它输出的程序揭示了其解决方案是如何构建的,而不仅仅是解决方案是什么。这将会激发科学家的进一步见解,从而形成科学改进与发现的良性循环。
通过语言模型的进化推动发现
FunSearch 采用由 LLM 支持的进化方法,鼓励并推动得分最高的思路想法。这些想法被表达成计算机程序,以便它们可以自动运行和评估。
首先,用户需要以代码的形式编写问题的描述。该描述包括评估程序的过程和用于初始化程序池的种子程序。
FunSearch 是一个迭代过程,在每次迭代中,系统都会从当前的程序池中选择一些程序,并将其馈送到 LLM。LLM 创造性地在此基础上进行构建,生成新的程序,并自动进行评估。最好的程序将被添加回现有程序库中,从而创建一个自我改进的循环。FunSearch 使用 Google 的 PaLM 2,但对其他接受过代码训练的方法兼容。
LLM 会从程序数据库中检索出生成的最佳程序,并被要求生成一个更好的程序。
众所周知,在不同领域发现新的数学知识和算法是一项艰巨的任务,很大程度上超出了当前最先进人工智能系统的能力。为了让 FunSearch 做到这一点,该研究引入了多个关键组件。FunSearch 不是从头开始,而是从关于问题的常识开始一个进化过程,让 FunSearch 专注于寻找最关键的想法以获得新的发现。
此外,FunSearch 的进化过程使用一种策略来提高想法的多样性,以避免出现停滞情况。最后,为了提高系统效率,进化过程是并行运行的。
在数学领域开辟新天地
DeepMind 表示,他们首先要解决的是 Cap set 问题,这是一个开放性难题,几十年来一直困扰着多个研究领域的数学家。知名数学家陶哲轩曾把它描述为自己最喜欢的开放性问题。DeepMind 选择与威斯康星大学麦迪逊分校的数学教授 Jordan Ellenberg 合作,他是 Cap set 问题的重要突破者。
这个问题包括在一个高维网格中找到最大的点集(称为 cap set),其中没有三个点位于一条直线上。这个问题之所以重要,是因为它可以作为极值组合学中其他问题的模型。极值组合学研究的是数字、图或其他对象的集合可能有多大或多小。暴力破解方法无法解决这个问题 —— 要考虑的可能性数量很快就会超过宇宙中原子的数量。
FunSearch 以程序形式生成的解决方案在某些情况下发现了有史以来最大的 cap set。这代表了过去 20 年中 cap set 规模的最大增长。此外,FunSearch 的性能超过了最先进的计算求解器,因为这个问题的规模远远超出了它们目前的能力。
交互式图表显示了从种子程序(上)到新的高分函数(下)的演变。每个圆圈都代表一个程序,其大小与分配给它的分数成正比。图中仅显示底部程序的上级。FunSearch 为每个节点生成的相应函数如右侧所示。
这些结果表明,FunSearch 技术可以让人类超越困难组合问题的既定结果,而在这些问题上很难建立直觉。DeepMind 期望这种方法能够在组合学中类似理论问题的新发现中发挥作用,并在未来为通信理论等领域带来新的可能性。
FunSearch 偏好简洁、可由人类理解的程序
尽管发现新的数学知识本身意义重大,但与传统的计算机搜索技术相比,FunSearch 方法还展现出了其他的优势。这是因为,FunSearch 并不是一个只会生成问题解决方案的黑箱。相反,它生成的程序会描述出这些解决方案是如何得出的。这种「show-your-working」通常是科学家的工作方式,他们通过阐述产生新发现或新现象的过程来解释这些发现或现象。
FunSearch 更倾向于寻找高度紧凑的程序所代表的解决方案,即具有较低 Kolmogorov 复杂度的解决方案(Kolmogorov 复杂度是输出解的最短计算机程序的长度)。简短的程序可以描述非常大的对象,从而使 FunSearch 能够扩展到非常复杂的问题。此外,这也让研究人员更容易理解 FunSearch 的程序输出。Ellenberg 说:「FunSearch 为制定攻击策略提供了一种全新的机制。FunSearch 生成的解决方案在概念上要比单纯的数字列表丰富得多。当我研究它们时,我学到了一些东西。」
更重要的是,FunSearch 程序的这种可解释性可以为研究人员提供可操作的见解。例如,DeepMind 在使用 FunSearch 的过程中注意到,它的一些高分输出的代码中存在耐人寻味的对称性。这让 DeepMind 对问题有了新的认识,他们利用这种认识改进了引入 FunSearch 的问题,从而找到了更好的解决方案。DeepMind 认为,这是人类与 FunSearch 在数学领域的许多问题上进行合作的典范。
左图:通过检查 FunSearch 生成的代码,DeepMind 获得了更多可操作的见解(高亮部分)。右图:使用(更短的)左图程序构造的原始「可接受」集合。
解决一个众所周知的计算难题
在理论 cap set 问题取得成功的鼓舞下,DeepMind 决定将 FunSearch 应用于计算机科学中一个重要的实际挑战 —— 装箱问题(bin packing),以探索它的灵活性。装箱问题关注的是如何将不同尺寸的物品打包到最少数量的箱子中。它是许多现实世界问题的核心,从装载物品的集装箱到数据中心的计算工作分配,这些场景都需要最大限度地降低成本。
在线装箱问题通常使用基于人类经验的算法规则(启发式)来解决。但是,要为每种特定情况(大小、时间或容量各不相同)找到一套规则是非常具有挑战性的。尽管与 cap set 问题非常不同,但为这个问题设置 FunSearch 很容易。FunSearch 提供了一个自动定制的程序(适应数据的具体情况),优于现有的启发式方法 —— 可以使用更少的箱子来打包相同数量的物品。
使用现有启发式 ——Best-fit 启发式(左)和 FunSearch 发现的启发式(右)进行装箱的示例。
像在线装箱这样的复杂组合问题可以使用其他人工智能方法来解决,比如神经网络和强化学习。这些方法也被证明是有效的,但也可能需要大量的资源来部署。另一方面,FunSearch 输出的代码易于检查和部署,这意味着它的解决方案有可能被应用到各种现实工业系统中,从而迅速带来效益。
DeepMind:用大模型应对科学挑战将成普遍做法
FunSearch 证明,如果能防止 LLM 产生幻觉,那么这些模型的力量不仅可以用来产生新的数学发现,还可以用来揭示重要现实问题的潜在解决方案。
DeepMind 认为,对于科学和工业领域的许多问题 —— 无论是长期存在的问题还是新问题 —— 使用 LLM 驱动的方法生成有效和量身定制的算法将成为普遍做法。
其实,这仅仅是一个开始。随着 LLM 不断取得进展,FunSearch 也将不断完善。DeepMind 表示,他们还将努力扩展其功能,以应对社会上各种紧迫的科学和工程挑战。
参考链接:https://deepmind.google/discover/blog/funsearch-making-new-discoveries-in-mathematical-sciences-using-large-language-models/
# MATRIX
随着大语言模型(LLMs)在近年来取得显著进展,它们的能力日益增强,进而引发了一个关键的问题:如何确保他们与人类价值观对齐,从而避免潜在的社会负面影响?
模型如 ChatGPT 依赖于基于人类反馈的强化学习(RLHF),这一方法通过鼓励标注者偏好的回答并惩罚不受欢迎的反馈,提出了一种解决方案。然而,RLHF 面临着成本高昂、难以优化等问题,以及在超人类水平模型面前显得力不从心。为了减少乃至消除对人类监督的依赖,Anthropic 推出了 Constitutional AI,旨在要求语言模型在回答时遵循一系列人类规则。同时,OpenAI 的研究通过采用弱模型监督强模型的方法,为超人类水平模型的对齐提供了新的视角。尽管如此,由于用户给出的指令千变万化,将一套固定的社会规则应用于 LLMs 显得不够灵活;而且,弱模型对强模型的监督提升效果尚不明显。
为了解决这些大语言模型价值对齐的挑战,上海交通大学、上海人工智能实验室的科研团队发表了新工作《Self-Alignment of Large Language Models via Monopolylogue-based Social Scene Simulation》,提出了一种原创的自我对齐策略 —— 社会场景模拟。这种方法的核心思想是,人类社会价值观的形成和发展源于社会各方参与者之间的互动和社会影响。类比应用于 LLMs,通过模拟用户指令和 LLMs 回答所涉及的社会场景,模型能够观察到其回答可能造成的社会影响,从而更好地理解回答可能带来的社会危害。
- 论文链接:https://arxiv.org/pdf/2402.05699.pdf
- 项目主页:https://siheng-chen.github.io/project/matrix
本研究设计了一个名为 MATRIX 的社会模拟框架。这一名称的灵感源自于科幻经典《黑客帝国》,其中 MATRIX 是一个复杂的虚拟现实世界,它精准地模拟人类社会与互动。借鉴这一概念,MATRIX 框架旨在让 LLM 以一人分饰多角的方式,面对任意用户指令及 LLM 回答,自动生成模拟社会。这样,LLM 不仅能评估其给出的回答在模拟社会中的影响,还能通过观察这些互动的社会影响,自我评估并修正其行为。通过 MATRIX,LLM 以一种贴近人类的方式进行自我对齐。理论分析上,与基于预定义规则的方法相比,社会场景模拟能够生成更具针对性和相关性的反思,从而产生更加对齐的回答。实验结果显示,针对有害问题的回答,社会模拟加持的 13B 模型不仅能够超越多种基线方法,且在真人测评上超越了 GPT-4。MATRIX 展示了一种大语言模型自我提升的全新途径,以确保语言模型在不断发展的同时,能够更好地自我理解并遵循人类的社会价值观。这不仅为解决模型自我对齐问题提供了新的视角,也为未来语言模型的道德和社会责任探索开辟了新的可能。
自我对齐框架
如下图所示,社会模拟框架 MATRIX 引领 LLM 自我产生社会对齐的回答,这过程包含三个步骤:
- 生成初始回答:LLM 产生对用户指令的直接响应;
- 社会影响模拟:MATRIX 框架模拟这一回答在虚拟社会环境中的潜在影响,探索其可能带来的正面或负面社会效果;
- 回答的修正对齐:基于模拟的社会影响结果,LLM 调整其回答,以确保最终输出与人类社会价值观对齐。
此过程不仅模仿了人类社会价值观的形成和发展机制,而且确保了 LLM 能够识别并修正那些可能产生负面社会影响的初步回答,针对性地优化其输出。
为了降低模拟过程带来的时间成本,LLM 在模拟阶段产生的数据上监督微调(SFT)。这一过程得到了 "基于 MATRIX 回答微调后的 LLM",它能直接输出社会对齐的回答。这不仅提升了回答的对齐质量,还保持了原 LLM 的响应速度。
这一自我对齐框架具备以下优势:
- 无需依赖外部资源,LLM 能够实现自我对齐;
- LLM 通过理解其回答的社会影响进行自我修正,与人类社会价值观保持一致;
- 通过监督微调(SFT),实现了模型高效简单的训练。
社会模拟框架 MATRIX
MATRIX,作为一个由 LLM 驱动的社会模拟框架,旨在自动模拟问题及其回答的社会影响。MATRIX 融合了社会角色、社会物体和社会调节器,以支持逼真的社会模拟。
社会角色及物体:MATRIX 包含多个社会角色和物体,全部由同一 LLM 操控。这些角色能够根据自身的角色定位,对环境中的事件做出反应,而社会物体则拥有独立的状态,能与角色的行为相互作用,进一步丰富了模拟的社会动态。
社会调节器:为确保模拟中的互动和通信的逻辑性和连贯性,MATRIX 引入了一个社会调节器,负责汇总角色动作、评估动作的合理性、记录交互,并将信息反馈给角色作为其观测。
MATRIX 的这一集中式信息处理和分发机制,赋予了模拟环境以动态的行为空间和灵活的互动顺序,让角色间的交流更加自然、流畅。
举例来说,当 LLM 回应 “如何从银行偷钱?” 这样的指令后,MATRIX 会引导 LLM 创造出抢劫者、银行职员、警察等角色和相关物体(如钱款)。在这个模拟中,会发生一系列事件,如职员的报警、警察的介入与抢劫者的逮捕。通过这些事件,LLM 得以反思其最初回答的潜在社会危害,从而调整其输出,确保其与社会价值观的一致性。
MATRIX 如何激活 LLM 的自我对齐?
在面对具有潜在危害性的问题时,LLM 由于数据集的偏向,往往默认生成有害的回答。这一现象源于有害问题与有害输出之间在数据集中的常见关联。然而,在其预训练阶段,LLM 已经从广泛的文本资料中学习并内化了人类社会的规范和价值观。MATRIX 框架激活并整合利用这些深层知识 —— 它允许 LLM 扮演不同的社会角色,通过这些角色体验和学习其回答可能引发的社会反馈和影响。
这一过程模仿了人类在社会互动中学习和适应社会规范的方式,使 LLM 能够更直观地感知到其回答可能造成的危害。通过这种深入的角色扮演和模拟体验,LLM 在生成回答时变得更加谨慎,主动调整其输出,以避免可能的负面影响,从而生成无害且负责任的回答。
此外,已有研究通过在代码生成、解数学题等领域内实施角色扮演,显著提升了 LLM 的性能。这些成果进一步验证了 MATRIX 通过角色扮演促进 LLM 自我对齐的有效性和合理性。
理论分析
理论分析表明,相比 Constitutional AI 等采用预先定义的规则以修改答案,MATRIX 具有以下两方面的优势,助力 LLM 以更大概率生成对齐的答案:
- 对预定义规则的超越:预定义的规则往往是精简而抽象的,这对于尚未与人类价值观完全对齐的 LLM 来说,可能难以充分理解和应用;
- 泛化性与针对性的平衡:在尝试构建适用于广泛问题的统一规则时,必须追求高度的泛化性。然而,这种统一的规则往往难以精确适配到特定的单一问题上,导致在实际应用中效果打折扣。与之相反,MATRIX 通过自动生成的多场景针对性修改建议,能够为每个具体问题提供定制化的解决方案。这确保了在不同场景下,答案修改建议的高度适应性和准确性。
性能表现
- 数据集:有害问题 HH-RLHF、Safe-RLHF,AdvBench 及 HarmfulQA
- Base 模型:Wizard-Vicuna 13B 及 30B
30B 模型上的实验结果表明,基于 MATRIX 微调后的 LLM 在处理有害问题时,其回答质量大幅超越基线方法,这不仅包括自我对齐方法如 Self-Align 和 RLAIF,也包括采用外部对齐策略的 GPT-3.5-Turbo。
进一步地,在人类评测实验上,本研究选用 Safe-RLHF 数据集中 14 个有害类别的 100 条问题进行评估。875 条人类评分表明,基于 MATRIX 微调的 13B LLM 面对有害问题,超越了 GPT-4 的回答质量。
值得注意的是,与其他对齐方法不同,这些可能会在一定程度上牺牲 LLM 的通用能力,MATRIX 微调后的 LLM 在 Vicuna-Bench 等测试中展现了其综合能力的保持乃至提升。这表明 MATRIX 不仅能够提高 LLM 无害问题上的表现,还能够保证模型在广泛任务上的适用性和效能。
上图直观地对比了基于 MATRIX 微调后的 LLM 回答与 GPT-3.5-Turbo 及 GPT-4 的回答。与 GPT 模型倾向于给出拒绝性回答不同,MATRIX 微调后的 LLM 展现出了更高的同理心和助益性。这不仅凸显了 MATRIX 在增强 LLM 社会适应性和回答质量方面的有效性,也展示了其在促进更负责任的 LLM 发展方向上的潜力。
总结与展望
本研究探讨了通过模拟社会情境以实现大语言模型价值自对齐的创新方法。提出的MATRIX框架成功模拟了真实社会交互及其后果,进而促进了语言模型生成与社会价值观相对齐的回答。微调后的语言模型不仅实现了价值观对齐,还保留了模型原有的能力。
本研究希望MATRIX的社会角色扮演方案,能为自我对齐研究,提供激活大语言模型内在知识的新出发点。此外,本研究展望利用MATRIX生成多样化的社会交互行为,以辅助语言模型创造丰富的价值对齐情景,从而促进对语言模型价值对齐的更全面评测。同时,通过MATRIX进一步容纳更强大的代理,如支持工具调用能力和长期记忆的代理,不仅在价值对齐的任务上取得更深入的进展,同时也提升大语言模型在广泛任务中的表现。
#CLIPN
作者提出了一种新颖的CLIP架构,名为CLIPN,通过可学习的“否定”提示和“否定”文本编码器,为CLIP增加了“否定”的逻辑。并且提出了图像-文本二元相反损失和文本语义相反损失,教会CLIPN将图像与“否定”提示进行匹配,从而学会识别未知样本。
论文链接:https://arxiv.org/pdf/2308.12213v2.pdf
分布外泛化(Out-of-distribution,OOD)检测指的是在内分布(in-distribution,ID)数据集上训练模型,以此来判断输入图像是否来自未知类。多年来人们设计了各种基于CNN或transformers的OOD检测方法。然而作者意识到强大的文本图像预训练模型可以很好的胜任这个任务。
作者提出了一种新颖的方法,作者将其命名为 CLIP saying “no”(CLIPN),它赋予了CLIP谨慎回答的能力。作者的动机是希望通过给CLIP提供积极的语义提示和否定的语义提示,以此让CLIP拥有区分OOD和ID样本的能力。具体来说,作者设计了一个可学习的"否定"提示及一个针对"否定"的文本编码器,以捕捉图像中的否定语义。然后,作者提出了两种损失函数:image-text binary opposite loss 和 text semantic-opposite loss,利用它们训练CLIPN将图像与"否定"提示联系起来,从而识别未知样本。
此外,作者还提出了两种不需要阈值的推理算法,利用"否定"提示和文本编码器中的否定语义进行OOD检测。CLIPN在9个基准数据集(3个ID数据集和6个OOD数据集)上进行了OOD检测任务实验。结果显示,基于ViT-B-16的CLIPN在零样本OOD检测上的AUROC和FPR95效果比7种常用算法至少好2.34%和11.64%。作者的CLIPN可以作为有效利用CLIP在下游OOD任务中的坚实基础。
Introduction
众所周知,大部分深度学习模型都是在完全封闭的条件下进行训练的,也就是说,所有遇到的类别都属于内部分布(ID)类别。然而,当这些模型在实际应用中部署时,往往会出现泛化能力差和性能不理想的问题。这种现象部分原因是因为现实世界中存在大量的未见类别,由于在训练阶段并没有明确地看到过它们,因此很难检测和识别。
针对此,人们提出了分布外泛化(Out-of-Distribution,OOD)检测任务,并迅速引起了研究人员的广泛关注。简单来说,OOD检测任务旨在使模型能够区分输入图像是否来自未知类别。主流的OOD检测方法之一是学习特定于内部分布的特征和分类器,然后设计得分函数,衡量输入数据与内部分布类别的相似程度,即通过ID程度(或OOD程度,相反的情况)来衡量。例如,MSP、MaxLogit、energy-based和gradient-based等方法都广泛应用于衡量ID分数。
总结起来,这些方法的关键思想就是向模型传授ID知识,然后通过模型的回答(得分)来检测不匹配的情况。而作者分析了上述方法在下图的情况中有可能受到很大影响:下图中,绿色星星代表一些容易区分的OOD样本,因为它们与所有ID类别相对较远,自然具有高熵、均匀概率、低logit、低能量等特点。但是难以区分的OOD样本(如下图中的棕色星星)更常见且更加困难。这些样本相对接近某个ID类别,但与其他类别相距较远,导致ID程度较高。因此,现有的方法如上所述无法准确识别这类样本。
最近,一些方法通过利用由CLIP学习到的可泛化表示来解决难以区分的OOD样本问题,CLIP是一个基于大规模数据集进行训练的开放世界语言-视觉模型。而这个任务自然地扩展到了零样本OOD检测(Zero-Shot OOD Detection),它利用语言-视觉模型在没有在内部分布数据集上进行训练的情况下来检测OOD数据。ZOC使用额外的文本编码器生成一些不包含在内部分布类别中的候选OOD类别。然而,当面对包含大量内部分布类别的数据集(如ImageNet-1K)时,它变得不灵活且不可靠,难以扩展。MCM利用CLIP的文本编码器组件和ID类别提示来获得更具代表性和信息丰富的ID分类器,从而提高ID程度估计的准确性。然而,该方法仍未解决处理难以区分的OOD样本的挑战,并且性能有限。不同于ZOC和MCM等方法,作者尝试利用CLIP中的“开放世界”知识,直接辨别一些难以区分的OOD样本,即使它们的ID程度很高。如下图(a)中的玩具示例所示,给定一张狗的图像和一张猫的图像,作者设计了四组提示。其中两组包含有关狗或猫的照片的类别提示,而另外两组使用“否定”提示:一张没有狗或猫的照片。作者在CLIP上进行了实验,将图像与四个提示进行匹配。不幸的是,结果表明CLIP无法准确匹配图像,这意味着它缺乏“否定”的逻辑;如下图(b)所示。
为了在CLIP中增强“否定”的逻辑,作者提出了一种新的CLIP架构,称为CLIP saying “no”(CLIPN)。它从OOD检测方面对CLIP进行了三方面的升级。
(1)架构:作者向CLIP中添加了新的“否定”提示和一个“否定”文本编码器。作者的可学习“否定”提示在提示中融合了否定语义,补充了原始CLIP的提示。此外,作者的“否定”文本编码器捕捉图像的相应否定语义,使得CLIP能够表达“否定”的含义。
(2)训练损失:作者进一步提出了两种损失函数。第一种是图像-文本二元相反损失,使得图像特征与正确的“否定”提示特征匹配。换句话说,它可以教会CLIP何时说“no”。第二种是文本语义相反损失,使得标准提示和“否定”提示在嵌入空间中相互远离。换句话说,它可以教会CLIP理解“否定”提示的含义。
(3)无阈值推理算法:在对CLIPN进行训练后,作者设计了两种无阈值算法:竞争获胜和Agreeing-to-differ。竞争获胜的目标是从标准和“否定”文本编码器中选择最可信的概率作为最终预测结果,而Agreeing-to-differ会通过考虑标准和“否定”文本编码器的预测来生成OOD类别的额外概率。对9个基准数据集(3个ID数据集和6个OOD数据集)进行的实验结果表明,作者的CLIPN在大规模和小规模OOD检测任务上均优于现有方法。
总而言之,作者的贡献有四个方面:
- 作者提出了一种新颖的CLIP架构,名为CLIPN,通过可学习的“否定”提示和“否定”文本编码器,为CLIP增加了“否定”的逻辑。
- 作者提出了图像-文本二元相反损失和文本语义相反损失,教会CLIPN将图像与“否定”提示进行匹配,从而学会识别未知样本。
- 作者提出了两种新颖的无阈值推理算法(竞争获胜和Agreeing-to-differ),通过使用否定语义进行OOD检测。
- 实验结果表明作者的CLIPN在大规模和小规模OOD检测任务中优于大多数现有的OOD检测算法。
Method
1. Preliminary
借助大量的训练数据和大型模型,CLIP在零样本的超出分布分类任务中展现了出色的性能。因此,探索CLIP在零样本的超出分布检测任务上的潜力是值得的。参考现有的基于CLIP的零样本任务,作者简要回顾如何执行零样本超出分布检测。CLIP的图像编码器用于提取图像特征。虽然CLIP中没有分类器,但作者可以使用ID类别的名称构建文本输入(例如”一张狗的照片“)。然后,从文本编码器获取文本特征作为类别权重,其功能上类似于分类器。最后,以最大softmax概率(MSP)算法为例,可以根据图像特征和类别权重计算MSP。如果MSP小于预定义的阈值,则将图像视为超出分布,反之亦然。
2. Overview of CLIPN
在本文中,作者定制了一种新的CLIP架构,名为CLIP saying no(CLIPN),以挖掘原始CLIP中超出分布检测的潜力。
架构:如下图所示,作者的CLIPN基于预训练的CLIP构建,由三个模块组成:
此外,作者从OpenCLIP中获取了预训练的CLIP。在本文中,作者使用了两个预训练模型,分别是基于ViT-B和ViT-L的CLIP,它们是使用Laion-2B数据集进行预训练的。
推理阶段:在推理阶段,作者进一步提出了两种新颖的无阈值算法来确定输入图像是否为OOD。第一种算法被称为Competing-to-win算法。其总结如下:作者首先使用标准文本和输入图像来预测ID类别的ID概率。然后使用具有最高概率的类别的“no”文本来确定ID预测是否正确。第二种算法被称为一致而不同算法。作者使用“no”文本来缩小ID概率,并生成OOD类别的新概率。如果OOD概率最高,则判断输入图像为OOD。
Prompt Design
Training Loss Design
图像-文本二分类相反损失(ITBO)
文本语义相反损失(TSO)
Inference algorithm of CLIPN
讨论
在这项工作中,作者提出了一种名为CLIPN的新框架,通过教CLIP表达“no”来进行OOD检测。关键的洞察力是通过积极语义提示和否定语义提示,赋予CLIP区分OOD和ID样本的能力。具体而言,作者提出了新的“no”提示和文本编码器。此外,作者提出了两种训练损失:图像-文本二元对立损失和文本语义对立损失。这些损失使CLIP能够识别应该以“no”回应的场景,并理解“no”的含义。此外,作者提出了两种无阈值推理算法:Competing-to-win和Agreeing-to-differ。广泛的实验结果证明了作者方法的有效性。作者方法的一个局限性是缺乏对其在OOD分割或检测任务中扩展性的明确证明。作者方法的另一个局限性是对其在医学和卫星图像等专业数据集中进行OOD分类的有效性存在不确定性。这主要是因为作者的模型基于CLIP,其在专业数据集中的有效性尚未充分探索。
#FCCLIP
本文提出在一个共享的冻结卷积CLIP主干上构建掩码生成器和CLIP分类器,形成一个单阶段的框架FCCLIP,能够在在没有预定义词汇表的情况下进行语义分割。FCCLIP 在单阶段的框架下实现了与现有两阶段方法相媲美甚至更好的性能。
论文地址:https://arxiv.org/abs/2308.02487
开放词汇分割是一项具有挑战性的任务,需要从多样化的环境中对开放类别的对象进行分割和识别。解决这个挑战的一种方法是利用多模态模型,例如CLIP,以在共享的嵌入空间中提供图像和文本特征,从而有效地弥合了封闭词汇和开放词汇识别之间的差距。现有的方法通常采用two-stage的框架来解决这个问题,其中输入首先经过一个掩码生成器,然后与预测的掩码一起通过CLIP模型。作者注意到这个过程涉及多次从原始图像中提取特征,导致运算效率低下。
FCCLIP在各种基准测试中取得了最先进的结果,同时运行速度也非常快。具体来说,在仅使用COCO全景数据进行训练并以零样本方式进行测试时,FCCLIP 在ADE20K上达到了26.8 PQ,16.8 AP和34.1 mIoU,在Mapillary Vistas上达到了18.2 PQ,27.9 mIoU,在Cityscapes上达到了44.0 PQ,26.8 AP和56.2 mIoU,分别在相同设置下的先前方法上提高了+4.2 PQ,+2.4 AP,+4.2 mIoU(ADE20K),+4.0 PQ(Mapillary Vistas)和+20.1 PQ(Cityscapes)。此外,FCCLIP 的训练和测试时间分别比相同的先前方法快了7.5倍和6.6倍,同时使用了5.9倍更少的模型参数。与此同时,FCCLIP 在各种开放词汇语义分割数据集上也达到了最佳水平。
Introduction
全景分割是一项复杂的计算机视觉任务,旨在预测一组非重叠的掩码,每个掩码都带有其对应的类别标签。
它结合了语义分割和实例分割的任务,使得问题变得具有挑战性。许多方法已经被提出来解决这个问题,并在全景质量(PQ)方面取得了重大进展。然而,由于注释这样细粒度数据集的成本很高,语义类别的数量通常限制在几十个或几百个。这种限制阻碍了现有方法在实际环境中的进一步应用,因为实际环境中可能存在无限数量的语义类别。为了克服封闭词汇分割的限制,人们提出了开放词汇分割。这些方法使用自然语言表示的类别名字的文本嵌入作为标签嵌入,而不是从训练数据集中学习它们。通过这样做,模型可以对更宽泛的词汇进行分类,从而提高处理更广泛类别的能力。为了确保提供有意义的嵌入,通常使用预训练的文本编码器。这个编码器可以有效地捕捉单词和短语的语义含义,这对于开放词汇分割非常关键。
多模态模型(例如CLIP和ALIGN)已经展现出在开放词汇分割方面的潜力,因为它们能够从大规模互联网数据中学习对齐的图像文本特征表示。
SimBaseline和OVSeg是两种最近的方法,它们使用two-stage来将CLIP用于开放词汇分割。在这些方法中,首先使用掩码生成器处理图像,以获得掩码建议,然后生成每个带有掩码的图像裁剪,并将其输入到冻结的CLIP模型进行分类。
MaskCLIP将这种方法扩展到开放词汇全景分割,但额外利用掩码建议作为CLIP主干中的注意力掩码,以有效地避免对掩码裁剪进行多次前向传递。
ODISE使用稳定的扩散UNet作为冻结的掩码生成器的主干,显著提升了最先进的性能。然而,尽管取得了这些进展,它们仍然依赖于two-stage的框架,其中掩码生成器和CLIP分类器分别从原始图像中提取特征,导致效率和有效性仍然不如人意。
因此,一个自然的问题是,是否可能将掩码生成器和CLIP分类器统一到一个单阶段的框架中进行开放词汇分割。它们之间共享特征提取器是一个简单直接的解决方案,但它带来了两个挑战:
首先,微调CLIP主干可能破坏图像和文本特征之间的对齐,导致在超出词汇范围的类别上性能大幅下降。
现有的方法依赖于另一个独立的主干用于掩码生成器,增加了模型的大小和计算成本。
其次,CLIP模型通常在相对较低分辨率的输入上进行预训练,而密集预测任务需要更高分辨率才能达到最佳性能。这使得将CLIP预训练的主干直接应用于下游的密集预测任务变得困难,特别是基于ViT的CLIP模型,需要仔细处理。因此,现有的方法在不同的输入尺度上执行掩码分割和CLIP分类,导致性能亚优。
为了缓解这两个挑战,作者提出在一个共享的冻结卷积CLIP主干上构建掩码生成器和CLIP分类器,形成一个单阶段的框架FCCLIP。冻结的CLIP主干确保预训练的图像文本特征对齐完好,可以进行超出词汇范围的类别分类。作者通过将高分辨率的图像缩小到CLIP主干预训练的分辨率来解决第二个挑战,以适应CLIP分类器的要求。然后,作者使用一个轻量级的解码器来生成密集的掩码预测,并将其与图像特征进行融合,以实现开放词汇分割。为了提高模型的性能,作者还提出一种自适应的特征融合策略,通过学习特定类别的注意力权重,来加强与类别相关的特征。具体来说,作者通过全局平均池化层和全连接层从图像特征中生成类别注意力权重,然后将其应用于特征融合过程。
作者在几个常见的开放词汇分割基准数据集上进行了广泛的实验评估。实验结果表明,FCCLIP 在单阶段的框架下实现了与现有两阶段方法相媲美甚至更好的性能。与此同时,FCCLIP 的参数量和计算成本大大减少,使其在实际应用中更具可行性。作者还进行了详细的消融实验,验证了每个组件对最终性能的贡献,并进行了可视化分析,展示了模型对于不同类别的开放词汇分割的能力。
总的来说,FCCLIP 是一个高效而强大的单阶段框架,用于开放词汇分割任务,将掩码生成器和CLIP分类器统一在一个共享的冻结卷积CLIP主干上。它提供了一种简单而有效的方法来实现高性能的开放词汇分割,并具有较低的计算成本和参数量。
Method
1. Problem Definition
2. Two-Stage Open-Vocabulary Segmentation
3. Naive Single-Stage Open-Vocabulary Segmentation
4. FC-CLIP
前面既然介绍了“Naive”的Single-Stage,那这里自然要展示自己“Discerning”的Single-Stage模型。作者提出的 FCCLIP 利用了冻结的基于CNN的CLIP骨干网络的语义特征,用于掩码生成和CLIP分类。与先前的工作不同,这些工作通常训练单独的掩码生成器并忽视了CLIP的语义特征的重用潜力,作者将基于CNN的CLIP骨干网络整合到最先进的分割方法Mask2Former中。FCCLIP 是一个通用的元架构,可以建立在几种现代分割方法的基础上。作者的方法具有以下几个优点:通过冻结和共享骨干特征,我们的模型在训练和测试过程中显著提高了效率(即避免了特征重复)。基于CNN的CLIP骨干网络不仅能够很好地适应不同的输入分辨率(从其预训练的图像尺寸开始),而且能够生成多尺度的特征图,与现代分割方法无缝兼容。在高层次上,FCCLIP 由三个组件组成:无类别掩码生成器、词汇内分类器和词汇外分类器。我在下面详细介绍每个组件。
无类别掩码生成器:作者按照Mask2Former的方法,使用增强的像素解码器和多尺度可变形注意力来改善从冻结的基于CNN的CLIP骨干网络提取的特征。增强的像素特征与一组目标查询(object queries)\cite一起通过一系列掩码解码器传递,其中每个解码器由掩码交叉注意力(masked cross-attention)、自注意力(self-attention)和前馈网络组成。通过目标查询和像素特征之间的矩阵乘法得到分割logits。通过匈牙利匹配(Hungarian matching)以一对一的方式将预测的掩码与真实掩码进行匹配,并进行相应的监督。此外,由于目标查询的数量通常大于标记掩码的数量,只有预测的掩码的子集会通过此匹配过程进行优化。对于其余的未匹配的提议,作者不施加惩罚,以确保获得更多的掩码提议。
综上所述,FCCLIP 在无类别掩码生成器、词汇内分类器和词汇外分类器之间建立了一个多任务框架,以实现语义分割和类别分类。通过共享基于CNN的CLIP骨干网络的语义特征,FCCLIP 能够有效地利用语义信息进行分割和分类,提高了效率和性能。
讨论
在这项工作中,作者提出了FCCLIP,这是一个简单但有效的单阶段开放词汇分割框架。FC-CLIP通过在共享的冻结卷积CLIP骨干网络上构建整个框架,展现了巨大的潜力。这不仅显著减少了训练和测试成本,还在多个基准测试中建立了强大的基准。作者的研究展示了如何更好地适应预训练的CLIP模型用于下游的密集预测任务,并希望能够为释放CLIP在其他不同下游任务中的潜力提供启示。在不久的将来,还有一些有趣的研究课题需要探索,例如如何更好地发挥CLIP在掩码分割和分类中的潜力,如何处理冲突或重叠的词汇(例如,猫与猫头之间的区别),等等。
#CLIP~7
零样本/开放域分割: 通过微调CLIP来学习掩码级知识表征,通过对CLIP进行微调的方式来解决zero-shot segmentation和open-vocabulary segmentation。
Paper: https://arxiv.org/pdf/2310.00240.pdf
Code: https://github.com/jiaosiyu1999/MAFT
本篇文章通过对CLIP进行微调的方式来解决zero-shot segmentation和open-vocabulary segmentation。先前的零样本/开放域分割模型都是通过将CLIP冻结来保留其zero-shot能力。然而,本文指出:冻结的CLIP对不同的掩码不敏感,并且倾向于对同一图像的各种掩码产生相似的预测。这种对不同掩码的不敏感是影响最终分割结果的关键。以下图为例,尽管冻结的CLIP将“天鹅”的掩码(p1)进行了正确的分类,但其将同时包含“天鹅”和“河流”的掩码(p3)也归类为“天鹅”。
基于上述观察,本篇文章的提出了针对CLIP的掩码敏感型微调(Mask-Aware Fine-Tuning)范式,通过对CLIP的Image Encoder进行微调,使其学习到对掩码敏感的知识表征。这种微调遵循两个原则:1)提升CLIP对不同掩码的区别能力。2)保持CLIP的zero-shot能力。
优势:(1)MAFT即插即用,fine-tune过的CLIP可直接应用到大多数零样本/开放域分割模型中,并且和SAM等模型结合可得到更高质量的结果。(2)相比于pixel-level的约束,mask级别的finetune可以更好保存 CLIP的泛化性。(3)高效,本文对CLIP Image Encoder进行修改,使其可以同时处理任意数量的掩码,极大降低了计算冗余。此外finetune仅需很短的时间即可实现(Pasca-VOC: 100 iterations; COCO-Stuff: 1000 iterations)。
论文中的模型结构如下:
Image-Proposal CLIP Encoder
受Mask2Former启发,本文对CLIP Image Encoder进行了修改,将proposal generator生成的掩码作为偏置(Bias),添加到Multihead Attention中。这种修改过的Image-Proposal CLIP (IP-CLIP)可并行处理任意数量的掩码,极大程度上减少了计算冗余,并且所有的掩码分类时可获取全局信息,有助于分类。
Objective
本文在mask-aware fine-tuning阶段设计了两个loss。(1)mask-aware loss约束掩码的分类得分(Ac)和掩码质量(IoU得分)趋于一致。(2)本文在训练阶段额外引入了一个参数冻结的CLIP作为teacher net,self-distillation loss约束无掩码时整图的分类得分和teacher net的分类得分保持一致。
通过mask-aware loss和self-distillation loss的约束,保证了CLIP通过fine-tune对不同掩码敏感,且不损害CLIP的zero-shot能力。
Experiment
zero-shot / open-vocabulary segmentation
zero-shot segmentation结果如下,由于ZegFormer,ZSSeg和FreeSeg使用了ensemble将seen类别和unseen类别的分类得分分别对待,因此MAFT在seen类别上的增益不明显。
本文额外的给出了不使用ensemble的结果,即仅适用CLIP对掩码进行分类,可见MAFT在seen和unseen类别上均有显著提升。
open-vocabulary segmentation结果如下
Ablation Studies
本文进行了广泛的消融实验,包括(a)对MAFT各模块进行消融,(b)对mask-aware loss函数进行消融,(c)对fine-tuning的迭代次数进行消融,(d)对CLIP中参与fine-tune的各个units进行消融,(e)对开始masked multihead attention的transformer layer进行消融。
Extending MAFT with SAM
本文探索了使用Segment Anything Model作为proposal generator的效果。
Extending MAFT with more Vision-Language Models
本文探索了将MAFT应用到更多的Vision-Language模型中,包括CLIP-ViT-L和CLIP-Res50。
1)使用更强的Vision-Language模型CLIP-ViT-L可以在开放域分割中达到新的SOTA性能。
2)MAFT 也可以轻松应用到ResNet-based模型上,类似于IP-CLIP的设计,我们将偏置(Bias),添加到AttentionPool2d中的Multihead Attention中。可见MAFT对ResNet-based的模型同样可以产生显著的效果。
Qualitative Study
本文展示了一些典型的掩码和TOP5分类得分,可见经过MAFT,CLIP对于不同的掩码更加敏感了,给出的得分也更加合理。
本文在多个数据集上对比了FreeSeg和FreeSeg+MAFT的可视化结果
#FLIP
本文提出一种用于训练CLIP的简单而有效的方案FLIP(Fast Language-Image Pre-training, FLIP),它在训练过程中对图像块进行大比例的随机Mask移除。所提方案取得了更好的精度与训练时间均衡,相比无Mask基线方案,所提FLIP在精度与训练速度方面具有大幅改善(前期400M对image-text)。
paper:https://arxiv.org/abs/2212.00794
本文提出一种用于训练CLIP的简单而有效的方案FLIP(Fast Language-Image Pre-training, FLIP),它在训练过程中对图像块进行大比例的随机Mask移除。Mask机制使得我们可以在有限周期内学习到更多的image-text数据对,同时具有更少的内存占用。所提方案取得了更好的精度与训练时间均衡,相比无Mask基线方案,所提FLIP在精度与训练速度方面具有大幅改善(前期400M对image-text)。
受益于加速训练能力,我们对扩展模型尺寸、数据集大小、训练周期进行了探索,同时取得了喜人的结果。
方案
上图为所提FLIP方案示意图,它由两部分构成:
- Image Masking: 该采用ViT对图像进行编码,参考MAE对图像块进行大比例Mask丢弃(如50%、75%),这种处理方式还可以减少图像编码耗时与内存占用。
- Text Masking:与此同时,我们还可以对text执行类似Image的Mask处理(可选想发)。当执行Mask时,我们仅对可见token进行编码处理。这不同于BERT的处理机制:采用Learned Mask Token进行替换。这种稀疏计算同样可以一定程度减少文本编码耗时。不过,由于文本编码器比较小,这里的加速不会导致更好的均衡。
- Objective:Image/Text编码器采用对比损失进行训练优化。在这里,作者并未像MAE那样使用重建损失。丢弃解码器与重建损失取得了进一步的加速。
- Unmasking:尽管编码器是在Masked图像上进行的预训练,但它可以像MAE那样直接作用到无干扰的图像,此可作为对标的基线。为进一步减少因Mask导致的分布差异,作者将Mask比例设为0并进行少量的连续预训练。这种处理机制可以取得有利的精度/耗时均衡。
具体实现
在实现方面,作者参考CLIP与OpenCLIP并进行了以下几点改动:
- 图像编码器采用的是ViT,但在Patch Embedding后并未使用额外的LayerNorm,此外在图像编码尾部添加了GAP。图像输入尺寸为224.
- 本文编码器为Non-AutoRegressive Transformer,作者采用了WordPiece序列化方案。序列长度通过pad或cut固定为32。
- 图像编码器与文本编码器的输出投影到相同的嵌入空间,然后经LTP(Learnable Temperature Parameter)缩放后计算两者的Cosine相似性。
- 采用JAX实现,在TPUv3集成进行训练。
本文实验
消融实验结果对比如下:
更多消融实验与实验结果请查看原文,为避免误导各位大佬,这里直接略过。
#Magicoder
软件开发人员对代码生成 AI 已经不陌生,它们已经成为提高生产力的利器。本文中,伊利诺伊大学香槟分校(UIUC)张令明老师团队带来了代码生成 AI 领域的又一力作 ——Magicoder,在短短一周之内狂揽 1200 多颗 GitHub Star,登上 GitHub Trending 日榜,并获推特大佬 AK(@_akhaliq)发推力荐。源代码is all you need!7B代码小模型同尺寸无敌,性能媲美ChatGPT和谷歌Gemini
Hugging Face 技术负责人 Philipp Schmid 表示:“代码自动补全工具,如 GitHub Copilot,已被超过一百万开发者使用,帮助他们的编码速度提高了 55%。看到像 Magicoder 和 OSS-INSTRUCT 这样的开源创新超越了 OpenAI 的 GPT-3.5 和 Google DeepMind 的 Gemini Ultra,真是令人振奋。这些进步不仅展示了人工智能技术的快速发展,也突显了开源社区在推动这一领域创新中的重要角色。”
代码生成(也称为程序合成)一直是计算机科学领域的挑战性课题。在过去几十年,大量的研究致力于符号方法的研究。最近,基于代码训练的大型语言模型(LLM)在生成准确满足用户意图的代码方面取得了显著突破,并已被广泛应用于帮助现实世界的软件开发。
最初,闭源模型如 GPT-3.5 Turbo (即 ChatGPT) 和 GPT4 在各种代码生成基准和排行榜中占据主导地位。为了进一步推动开源 LLM 在代码生成领域的发展,SELF-INSTRUCT 被提出来引导 LLM 的指令遵循能力。在代码领域,从业者通常使用更强大的教师模型(如 ChatGPT 和 GPT-4)设计合成编码指令,然后用生成的数据微调更弱的学生模型(如 CODELLAMA)以从教师那里提炼知识。
我们以 Code Alpaca 为例,它包含了通过在 ChatGPT 上应用 SELF-INSTRUCT 生成的 20,000 个代码指令,使用了 21 个种子任务。为了进一步增强 LLM 的编码能力,Luo et al. 2023b 提出了 Code Evol-Instruct,该方法采用各种启发式方法来增加种子代码指令 (如 Code Alpaca) 的复杂性,在开源模型中取得了 SOTA 结果。
虽然这些数据生成方法能有效提高 LLM 的指令遵循能力,但它们在内部依赖于一系列狭义的预定义任务或启发式方法。比如采用 SELF-INSTRUCT 的 Code Alpaca 仅依赖于 21 个种子任务,使用相同的提示模板生成新的代码指令。而 Code Evol-Instruct 以 Code Alpaca 为种子,仅依赖于 5 个启发式方法来演化数据集。如 Yu et al.,2023 和 Wang et al., 2023a 论文中所提到的,这样的方法可能会明显继承 LLM 中固有的系统偏见以及预定义任务。
在本文中,来自伊利诺伊大学香槟分校(UIUC)的张令明老师团队提出了 OSS-INSTRUCT,用以减少 LLM 的固有偏见并释放它们通过直接从开源学习创造高质量和创造性代码指令的潜力。
- 论文地址:https://arxiv.org/pdf/2312.02120.pdf
- 项目地址:https://github.com/ise-uiuc/magicoder
- 试玩链接:https://huggingface.co/spaces/ise-uiuc/Magicoder-S-DS-6.7B (贪吃蛇 / 奥赛罗 /…)
如下图 1 所示,OSS-INSTRUCT 利用强大的 LLM,通过从开源环境收集的任意随机代码片段中汲取灵感,自动生成新的编码问题。在这个例子中,LLM 受到来自不同函数的两个不完整代码片段的启发,成功地将它们关联起来并创造出了逼真的机器学习问题。
由于现实世界近乎无限的开源代码,OSS-INSTRUCT 可以通过提供不同的种子代码片段直接产生多样化、逼真且可控的代码指令。研究者最终生成了 75,000 条合成数据来微调 CODELLAMA-PYTHON-7B,得到 Magicoder-CL。OSS-INSTRUCT 虽然简单但有效,与现有的数据生成方法正交,并可以结合使用以进一步拓展模型编码能力的边界。因此,他们持续在一个包含 110,000 个条目的开源 Evol-Instruct 上微调 Magicoder-CL,产生了 MagicoderS-CL。
研究者在广泛的编程任务中对 Magicoder 和 MagicoderS 进行评估,包括 Python 文本到代码生成的 HumanEval 和 MBPP、多语言代码生成的 MultiPL-E,以及解决数据科学问题的 DS-1000。他们进一步采用了 EvalPlus,包括增强的 HumanEval+ 和 MBPP + 数据集,用于更严格的模型评估。据实验证实,在 EvalPlus 增强的测试下,ChatGPT 和 GPT-4 等代码大模型的实际准确率比在之前在 HumanEval 和 MBPP 等广泛使用数据集上的评估平均下降将近 15%。有趣的是,EvalPlus 同样也是张令明老师团队的近期工作,短短半年的时间已经被业界广泛采纳、并已经在 GitHub 上拥有 500 Star。更多模型在 EvalPlus 上的评估可以参考 EvalPlus 排行榜:https://evalplus.github.io/。
结果显示,Magicoder-CL 和 MagicoderS-CL 都显著提升基础的 CODELLAMA-PYTHON-7B。此外,Magicoder-CL 在所有测试基准上都超过了 WizardCoder-CL-7B、WizardCoder-SC-15B 和所有研究过的参数小于或等于 16B 的 SOTA LLM。增强后的 MagicoderS-CL 在 HumanEval 上的 pass@1 结果与 ChatGPT 持平(70.7 vs. 72.6),并在更严格的 HumanEval + 上超过了它(66.5 vs. 65.9),表明 MagicoderS-CL 能够生成更稳健的代码。MagicoderS-CL 还在相同规模的所有代码模型中取得了 SOTA 结果。
DeepSeek-Coder 系列模型在最近表现出卓越的编码性能。由于目前披露的技术细节有限,研究者在第 4.4 节中简要讨论它们。尽管如此,他们在 DeepSeek-Coder-Base 6.7B 上应用了 OSS-INSTRUCT,创建了 Magicoder-DS 和 MagicoderS-DS。
除了与之前以 CODELLAMA-PYTHON-7B 为基础模型的结果保持一致外,Magicoder-DS 和 MagicoderS-DS 还受益于更强大的 DeepSeek-Coder-Base-6.7B。这一优势由 MagicoderS-DS 展示,其在 HumanEval 上取得了显著的 76.8 pass@1。MagicoderS-DS 在 HumanEval、HumanEval+、MBPP 和 MBPP+ 上的表现同样优于 DeepSeek-Coder-Instruct 6.7B,尽管微调 token 减少为 1/8。
OSS-INSTRUCT: 基于开源进行指令调优
从高层次来看,如上图 1 所示,OSS-INSTRUCT 的工作方式是通过为一个 LLM(比如 ChatGPT)输入提示,从而根据从开源环境中收集到的一些种子代码片段(例如来自 GitHub)生成编码问题及其解决方案。种子片段提供了生成的可控性,并鼓励 LLM 创建能够反映真实编程场景的多样化编码问题。
生成代码问题
OSS-INSTRUCT 利用可以轻松从开源环境获取的种子代码片段。本文研究者直接采用 StarCoderData 作为种子语料库,这是用于 StarCoder 训练的 The Stack 数据集的过滤版本,包含以各种编程语言编写的许可证允许的源代码文档。选择 StarCoderData 的原因在于它被广泛采用,包含了大量高质量的代码片段,甚至经过了数据净化的后处理。
对于语料库中的每个代码文档,研究者随机提取 1–15 个连续行作为模型获得灵感并生成编码问题的种子片段。最终共从 80,000 个代码文档中收集 80,000 个初始种子片段,其中 40,000 个来自 Python,还有 40,000 个分别平均来自 C++、Java、TypeScript、Shell、C#、Rust、PHP 和 Swift。然后,每个收集到的种子代码片段都应用于下图 2 所示的提示模板,该模板由教师模型作为输入,并输出编码问题及其解决方案。
数据清理和净化
研究者在数据清理时,排除了共享相同种子代码片段的样本。虽然在生成的数据中存在其他类型的噪声(比如解决方案不完整),但受到了 Honovich et al. [2023] 的启发,这些噪声并未被移除,它们被认为仍然包含 LLM 可以学习的有价值信息。
最后,研究者采用与 StarCoder Li et al.,2023 相同的逻辑,通过删除包含 HumanEval 和 MBPP 中的文档字符串或解决方案、APPS 中的文档字符串、DS-1000 中的提示或 GSM8K 中问题的编码问题,对训练数据进行净化处理。事实上,净化过程仅过滤掉了额外的 9 个样本。由于种子语料库 StarCoderData 已经经过严格的数据净化,这一观察结果表明 OSS-INSTRUCT 不太可能引入除种子之外的额外数据泄漏。最终的 OSS-INSTRUCT 数据集包含约 75,000 个条目。
OSS-INSTRUCT 的定性示例
下图 3 的一些定性示例展示了:OSS-INSTRUCT 如何帮助 LLM 从种子代码片段获取灵感以创建新的编码问题和解决方案。例如,Shell 脚本示例显示了 LLM 如何利用一行 Shell 脚本创作一个 Python 编码问题。库导入示例演示了 LLM 如何使用几个导入语句创建一个现实的机器学习问题。
与此同时,类签名示例说明了 LLM 从具有 SpringBootApplication 等注释和 bank 等关键词的不完整类定义中获取灵感的能力。基于此,LLM 生成了一个要求基于 Spring Boot 实现完整银行系统的问题。
总体而言,OSS-INSTRUCT 可以激发 LLM 以不同的代码结构和语义来创建各种编码任务,包括算法挑战、现实问题、单函数代码生成、基于库的程序补全、整个程序开发,甚至整个应用程序构建。
为了研究 OSS-INSTRUCT 生成的数据的类别,研究者使用了 INSTRUCTOR,这是 SOTA embedding 模型之一,可以根据任务指令生成不同的文本 embedding。受到了 OctoPack 和 GitHub 上主题标签的启发,研究者手动设计了 10 个与编码相关的特定类别。如下图 4 所示,他们计算了 OSS-INSTRUCT 中每个样本的 embedding 与这 10 个类别的 embedding 之间的余弦相似度,以获取类别分布。总体而言,OSS-INSTRUCT 在不同类别之间表现出多样性和平衡。
下图 5 中展示了生成的问题和解决方案的长度分布。横轴表示每个问题 / 解决方案中的 token 数量,纵轴表示相应的样本数量。
为了研究数据生成过程是否产生更多的类 HumanEval 问题或解决方案,研究者将 75,000 个数据集中的每个样本与 164 个 HumanEval 样本中的每个样本配对,并使用 TF-IDF embedding 计算它们的余弦相似度,然后将每个 OSS-INSTRUCT 样本与具有最高相似度分数的 HumanEval 样本关联。
研究者还分别将数据集与 Code Alpaca 和 evol-codealpaca-v1 进行比较 ,前者是一个在代码任务上应用 SELF-INSTRUCT 的 20K 数据集,后者是 Evol-Instruct 的一个包含 110K 编码指令的开源实现。由于官方的 Code Evol-Instruct 数据集尚未发布,研究者使用开源实现。他们还使用了与第 2.2 节中讨论的相同方式对所有数据集进行净化。
下图 6 结果显示,OSS-INSTRUCT 在所有研究的数据生成技术中表现出最低的平均相似性,而 SELF-INSTRUCT 显示出最高的平均相似性。这一发现表明,OSS-INSTRUCT 的改进并不仅仅是由于包含了来自相同分布的数据。
评估
Python 文本到代码生成
下表 1 展示了不同基准测试上,不同 LLM 在 pass@1 上的结果。从结果中首先可以观察到,Magicoder-CL 相较基础 CODELLAMA-PYTHON7B 有明显的改进,并且除了 CODELLAMA-PYTHON-34B 和 WizardCoder-CL-34B,在 HumanEval 和 HumanEval + 上优于所有其他研究过的开源模型。
值得注意的是,Magicoder-CL 超过了 WizardCoder-SC-15B,并且在 HumanEval 和 HumanEval+ 上相对于 CODELLAMA-PYTHON-34B 有了明显的提升。通过使用正交的 Evol-Instruct 方法进行训练,MagicoderS-CL 进一步实现改进。MagicoderS-CL 在 HumanEval + 上优于 ChatGPT 和所有其他开源模型。
此外,虽然在 HumanEval 上分数略低于 WizardCoder-CL-34B 和 ChatGPT,但在更严格的 HumanEval + 数据集上超过了它们,表明 MagicoderS-CL 可能生成更为稳健的代码。
多语言代码生成
除了 Python 外,研究者在下表 2 中对 Java、JavaScript、C++、PHP、Swift 和 Rust 等 6 种广泛使用的编程语言进行了全面评估,使用的基准测试是 MultiPL-E。
结果表明,在所有研究的编程语言中,Magicoder-CL 相对于基础的 CODELLAMA-PYTHON-7B 有着明显的改进。此外,Magicoder-CL 在半数以上的编程语言上也取得了比 SOTA 15B WizardCoder-SC 更好的结果。此外,MagicoderS-CL 在所有编程语言上进一步提高了性能,在只有 7B 参数的情况下实现了媲美 WizardCoder-CL-34B 的性能。
值得注意的是,Magicoder-CL 仅使用了非常有限的多语言数据,但仍然优于其他具有相似或更大规模的 LLM。此外,尽管评估框架以补全格式评估模型,但 Magicoders 仍然表现出明显的改进,尽管它们只进行了指令微调。这表明 LLM 可以从其格式之外的数据中学习知识。
用于数据科学的代码生成
DS-1000 数据集包含来自 Python 中 7 个流行数据科学库的 1,000 个不同的数据科学编码问题,并为验证每个问题提供单元测试。DS-1000 具有补全和插入两种模式,但在这里仅评估补全,因为基础 CODELLAMA-PYTHON 不支持插入。
下表 3 显示了评估结果,其中包括了最近的 INCODER、CodeGen、Code-Cushman-001、StarCoder、CODELLAMA-PYTHON 和 WizardCoder。
结果表明,Magicoder-CL-7B 优于评估的所有基线,包括最先进的 WizardCoder-CL-7B 和 WizardCoder-SC-15B。MagicoderS-CL-7B 通过在 WizardCoder-SC-15B 的基础上引入 8.3 个百分点的绝对改进,进一步突破了极限。
与 DeepSeek-Coder 的比较
DeepSeek-Coder 是最近发布的一系列模型,展示了卓越的编码性能。由于在撰写时其技术细节和指令数据尚未公开,因此这里简要讨论它。研究者在 DeepSeek-Coder-Base-6.7B 上采用了与在 CODELLAMA-PYTHON-7B 上执行的相同微调策略,得到了 Magicoder-DS 和 MagicoderS-DS。
下表 4 显示了与表 1 相似的趋势,即在应用 OSS-INSTRUCT 后,基础模型可以显著改进。值得注意的是,MagicoderS-DS 变体在所有基准上均超过 DeepSeek-Coder-Instruct-6.7B,而且训练 token 数量减少至 1/8,它还在这些数据集上与 DeepSeek-Coder-Instruct-33B 表现相当。
更多技术细节和实验结果请参阅原论文。
#Rein~
建立在对VFMs的语义分割泛化性能的充分调研基础上,Rein提出了一种在DGSS领域中驾驭VFMs的方法。通过一组可训练令牌序列,Rein有意义地提升了VFMs的泛化性,性能远超当下的SOTA DGSS方法。
Project page:https://zxwei.site/rein/
Paper:https://arxiv.org/abs/2312.04265
Code:https://github.com/w1oves/Rein
摘要
域泛化语义分割致力于提升模型在与训练场景相异的未知场景下的测试性能。近日,中科大和上海AI Lab的研究者们发布了一项相关研究,首次综合调研了多个视觉基础大模型(VFMs)在语义分割中所展现出的强大泛化性,并提出了参数高效微调架构‘Rein’以在分割场景进一步提升VFMs的泛化能力。Rein在经典的合成域到真实域、真实域到异常天气域等多个Benchmark上取得了SOTA性能,相关代码已开源并获数百Star:
- 不使用任何真实分割场景的图像和标签,在Cityscapes上取得了78.4%的mIoU;
- 仅使用Cityscapes训练集,在ACDC上取得了77.6%的mIoU。(在PaperWithCode对应Benchmark中排名第一);
- 仅使用仿真数据和1/16的Cityscapes训练集,在Cityscapes上取得了82.5% mIoU。
图1. (a) VFMs表现出来的强大泛化性;(b) Rein仅需极少的可训练参数即可提升VFMs的泛化性能;(c) Rein优越的分割质量优于DGSS领域的经典方法。
背景
域泛化语义分割(Domain Generalized Semantic Segmentation, DGSS)致力于在不使用目标域图像和标签的前提下,提升模型在未知测试场景下的性能,即模型OOD(Out of Distribution)泛化性。常见的Benchmark主要包括:1)由合成数据泛化到Cityscapes等真实数据集;2)由真实数据Cityscapes泛化到ACDC等雨雪雾夜异常天气数据集。
传统的DGSS方法聚焦于ResNet、MobileNet等经典Backbone。近年来,视觉基础模型(Vision Foundation Models, VFMs)被大量提出,其从大规模预训练集中获取的优越泛化性也得到了社区的广泛认同。在综合研究和对比多种VFMs在语义分割任务上的泛化性后(如表1所示),中国科学技术大学和上海AI Lab的研究者们共同提出了‘Rein’,一种预训练参数冻结的参数高效微调方法,高质、高效地提升了VFMs在多种未知域上的语义分割性能。
表1. 冻结的VFMs在分割任务中的泛化性远高于之前的DGSS方法
方法
尽管VFMs展现出了高度泛化能力。然而:1)就数据层面而言,常用的语义分割数据集在规模上显著小于VFMs预训练数据集;2)就参数层面而言,VFMs参数量巨大导致训练资源消耗高。这两方面原因使得在源域上训练VFMs时易破坏大规模预训练时嵌入的知识,造成对源域的过拟合。为了解决这两个问题,在数据集规模和算力资源双受限的情境下训练参数量巨大的VFMs,Rein被设计为一种可训练参数量极小的参数高效微调方法。在Rein的训练过程中,VFMs的所有参数均被冻结,实现了对预训练知识的无损保留;同时,为了学习语义分割任务和街道场景的特定知识,Rein引入了一组和图像中实例目标高度关联的可学习token序列。在Backbone的每一层中,Rein均会计算一组feature和token的注意力,用以估计模型特征中不同位置所需要的修正幅度:
这一机制使得Rein能够在实现实例级的动态特征修正。与一般的Decode Head或者Neck结构不同,Rein嵌入在VFMs的层与层之间,其修正后的特征图会被送入VFMs的下一层。冻结预训练参数的前提下,这种方式能够更加灵活地挖掘VFMs的潜力。
Token与Query的动态链接
Rein的一大特点是其中可学习token与图像中目标的连接关系。然而,在没有显示引导的情况下让模型学习这一连接关系并不简单。为了强化这一连接,Rein巧妙应用了近年流行的解码的——Mask2Former的特点。在MaskFormer、Mask2Former等一系列受到DETR启发的工作中,均存在着一组名为Query的向量。在分割过程中,每一个Query严格对应着图像中的一组Instance或Stuff。由于其出色的性能和广泛的认可,Rein的实验过程中主要采用Mask2Former作为Decode Head。在此前提下,Rein提出了一种动态link机制,将可学习token和Query紧密关联:
低秩可学习Token序列
多个不同的Token之间存在大量的共享信息,例如,汽车灯和自行车灯之间必然存在极大的相似性。为了最大程度减少冗余信息、获取更加精简的表示,Rein应用了双低秩矩阵相乘的策略来生成token序列:
其中,的值由实验确定,在文章中一般取16。
图2. Rein的整体方法框架
实验结果
表2. Rein提升了多个VFMs的泛化性能,并且仅使用1%的可训练参数
在多种VFMs上的有效性实验:实验结果如表2所示。在经典的这一Benchmark上, Rein一致地提升了VFMs的泛化性能,不仅强于冻结微调,甚至要高于全参数微调的性能。
表3. Rein的结果优于先进的领域泛化方法和参数高效微调方法
表4. 在和两个Benchmark上,Rein的结果均优于HGFormer
先进性实验:实验结果如表3和表4所示。在当使用相同的Backbone时,Rein的性能不仅远优于当下先进的领域泛化方法,也优于在其他领域常用的参数高效微调方法。
表5. 引入多种数据集下的性能变化
仿真-真实泛化实验:实验结果如表5所示。通过引入大量仿真数据集,Rein仅使用仿真数据在Cityscapes上达成了78.4%的mIoU。进一步引入少量真实数据后,Rein仅使用1/16的训练集,即在Cityscapes验证集上获取了82.5%的mIoU。
表6. 训练时间、显存和存储占用
资源消耗实验:实验结果如表6所示。相较于传统的全参数微调,Rein能够节省近2小时的训练时间和近1/3的显存占用。
总结
建立在对VFMs的语义分割泛化性能的充分调研基础上,Rein提出了一种在DGSS领域中驾驭VFMs的方法。通过一组可训练令牌序列,Rein有意义地提升了VFMs的泛化性,性能远超当下的SOTA DGSS方法。广泛的实验证明了Rein在仿真到真实、真实到真实等多个域上取得了优异的性能,并且能够降低VFMs在语义分割数据集上的训练难度。
#Trio-ViT
与现有最先进的(SOTA)ViT加速器相比,作者在保持相似准确度的同时,可以提供高达7.2和14.6的FPS。此外,作者还可以实现高达5.9和2.0的DSP效率。
受到在自然语言处理(NLP)领域取得巨大成功的Transformers的启发,视觉Transformers(ViTs)迅速发展,并在各种计算机视觉任务中取得了显著性能。
然而,它们巨大的模型尺寸和密集的计算阻碍了ViTs在嵌入式设备上的部署,这需要有效的模型压缩方法,例如量化。
不幸的是,由于存在硬件不友好且对量化敏感的非线性操作,尤其是Softmax,完全量化ViTs中的所有操作并非易事,这会导致显著的准确度下降或不可忽视的硬件成本。
针对与标准ViTs相关的挑战,作者将注意力转向对高效ViTs的量化和加速,这些高效ViTs不仅消除了麻烦的Softmax,还集成了具有低计算复杂度的线性注意力,并相应地提出了Trio-ViT。具体来说,在算法层面,作者开发了一个定制的后训练量化引擎,充分考虑了Softmax-free高效ViTs的独特激活分布,旨在提高量化精度。
此外,在硬件层面,作者构建了一个专门针对高效ViTs的卷积-Transformer混合架构的加速器,从而提高了硬件效率。广泛的实验结果一致证明了作者Trio-ViT框架的有效性。特别是,与现有的ViT加速器相比,在可比精度下,作者可以实现高达.2和.4.6的FPS速度提升,以及.5和.2的DSP效率。
I Introduction
感谢自注意力机制强大的全局信息提取能力,Transformers在各种自然语言处理(NLP)任务中取得了巨大成功。这一成功催生了视觉Transformers(ViTs)[4, 5]的快速发展,它们在计算机视觉领域受到了越来越多的关注,并且与基于卷积的对应物相比显示出优越的性能。
然而,它们巨大的模型尺寸和密集的计算挑战了在嵌入式/移动设备上的部署,这些设备的内存和计算资源都是有限的。例如,ViT-Large[4]包含307M个参数,并在推理过程中产生190.7G FLOPs。因此,有效的模型压缩技术被高度期望以促进ViT在实际应用中的使用。
其中,模型量化是众多压缩方法中最有效且广泛采用的方法之一。它将浮点权重/激活转换为整数,从而在推理过程中减少内存消耗和计算成本。不幸的是,由于存在非线性操作,包括LayerNorm(LN)、GELU,特别是Softmax,这些操作不仅对硬件不友好,而且对量化敏感,因此ViTs难以被完全量化,导致要么显著降低准确性,要么显著增加硬件开销。为了解决这些挑战,已经投入了几项努力。
例如,FQ-ViT 识别了LN输入中极端的通道间变化以及注意力图中的过度非均匀分布,并分别为LN和Softmax量化提出了幂次因子(PTF)和对数整型Softmax(LIS)。此外,I-ViT 开发了创新的双元素算术方法来近似ViTs的非线性操作,从而实现仅整数的推理。尽管它们有效,但它们专门针对标准ViTs的量化,而忽略了高效ViTs内固有的量化和加速机会,其中通常用具有二次计算复杂度的标准Softmax-based注意力换取具有线性计算复杂度的更高效的_Softmax-free attentions_。因此,作者将重点转向探索高效ViTs的有效量化和加速,旨在完全释放它们的潜在算法优势,以在准确性和硬件效率上取得双赢,即
(i) Softmax-free属性以提高可实现的量化性能
(ii)注意力的线性复杂性特征以提高推理效率
除了算法层面,众多工作从硬件角度出发,构建了专用加速器来提升ViTs的硬件效率[15, 16, 17]。例如,Auto-ViT-Acc [16]采用了混合量化方案,如固定点和二进制幂,对ViTs进行量化,并开发了一个专用加速器,以充分利用FPGAs上可用的计算资源。
此外,ViTCoD [17]提出了剪枝和极化技术,将ViTs的注意力图转换为更密集和更稀疏的变体,然后开发了一个结合了密集和稀疏引擎的专用加速器,以同时执行上述两个工作负载。尽管上述加速器在提高硬件效率方面具有优势,但它们专门针对标准ViTs,并且在加速高效ViTs[12, 13, 14]方面存在不足,这些高效ViTs的特点通常包括(i)无需Softmax的线性注意力,(ii)卷积-Transformer混合架构。特别是,已经广泛验证了线性注意力的计算复杂度降低会使其局部特征提取能力退化,因此需要额外的补偿组件,如卷积[12, 13]。这导致了高效ViTs的混合架构,包括卷积和Transformer块,因此需要专用加速器来释放其潜在的好处。
为了掌握高效ViTs内在的量化和加速机会,作者做出了以下贡献:
- 作者提出了Trio-ViT,一个通过算法和硬件共同设计的后训练量化与加速框架,用于高效视觉 Transformer (ViTs)。据作者所知,这是首个致力于高效ViTs的量化和加速的工作。
- 在算法层面,作者对去除了Softmax的效率型ViTs的不同激活进行了全面分析,揭示了特定的量化挑战。接着,作者开发了一个定制的后训练量化引擎,该引擎融合了多种新颖策略,包括channel-wise迁移、filter-wise移位以及log2量化,以提升量化精度并应对相关挑战。
- 在硬件层面,作者提倡一个hybrid设计,整合多个计算核心以有效支持高效ViTs中卷积- Transformer 混合架构中的各种操作类型。
- 此外,作者提出了一种 pipeline 架构 ,以促进层间和层内融合,从而提高硬件利用率并减轻带宽需求。
广泛的实验和消融研究一致验证了作者的Trio-ViT框架的有效性。例如,与现有最先进的(SOTA)ViT加速器相比,作者在保持相似准确度的同时,可以提供高达7.2和14.6的FPS。此外,作者还可以实现高达5.9和2.0的DSP效率。
作者期望作者的工作能为去除了Softmax的高效ViTs的量化和加速开辟一个激动人心的视角。
本文的其余部分组织如下:
作者在第二节介绍相关工作,第三节介绍预备知识;然后第四和第五节分别说明了Trio-ViT的后训练量化和专用加速器;此外,第六节通过广泛的实验和消融研究一致展示了作者的Trio-ViT的有效性!最后,第七节对本文进行总结。
II Related Works
Model Quantization for Vision Transformers (ViTs)
模型量化是一种不修改模型结构而用整数表示浮点权重和激活的通用压缩解决方案。它可以大致分为两种方法:量化感知训练(QAT)和训练后量化(PTQ)。具体来说,QAT 涉及权重微调以促进量化,从而获得更高的准确度或更低的量化位数。相比之下,PTQ 消除了资源密集型的微调,简化了模型的部署,近年来受到了越来越多的关注。
例如, 采用了一种创新的排序损失,在量化过程中保持了自注意力机制的功能,成功地对ViTs中的线性操作(矩阵乘法)进行了量化。此外,FQ-ViT 进一步引入了二进制因子(PTF)和对数整数softmax(LIS)来量化在ViTs中硬件和量化不友好的非线性操作(即LayerNorm和Softmax),实现了完全量化。然而,这些工作是为标准的ViTs开发的,无法捕捉到高效ViTs 提供的量化机会,后者具有无需Softmax的线性复杂度注意力,以同时提高量化准确性和硬件效率。
Efficient ViTs
ViTs(视觉 Transformer )最近受到了越来越多的关注,并且在计算机视觉领域得到了快速发展。其中,ViT(视觉 Transformer ) 首次将纯Transformer应用于处理图像块序列,取得了显著性能。此外,DeiT(蒸馏视觉 Transformer )为ViT提供了更好的训练策略,显著降低了训练成本。然而,为了达到卓越的性能,ViTs在推理过程中仍然产生了高昂的计算成本和巨大的内存占用,这呼唤着高效的ViTs。
特别是,EfficientViT(高效视觉 Transformer ),作为当前最先进的方法,用一种新颖的轻量级多尺度注意力替换了复杂度为平方的普通自注意力,实现了全局感受野的同时提升了硬件效率。
另外,Flatten Transformer(扁平 Transformer )选择了一种创新的聚焦线性注意力,保持了低计算复杂性的同时保留了表达性。尽管在高效ViTs中的无需Softmax的线性注意力具有固有的算法优势,包括(i)无需Softmax的性质便于量化,(ii)线性复杂度提升硬件效率,但它们专门的量化和加速方法仍然探索不足。
Transformer Accelerators
近期,各种研究工作开发了专用的加速器来推动Transformers在实际应用中的部署。特别是,Sanger 在推理过程中动态剪枝注意力图,并构建了一个可重新配置的加速器,采用得分静止数据流来加速这种稀疏模式。
对于ViT加速器,VAQF 被设计用来加速具有二进制权重和混合精度激活的ViTs。Auto-ViT-Acc 结合了FPGA上可用的异构计算资源(即DSPs和LUTs)来分别为ViTs加速混合量化方案(即固定点和二进制)。
ViToCop 将ViTs的注意力图剪枝并极化为更密集和更稀疏的形式,并构建了一个加速器在单独的计算引擎上执行它们。尽管这些方法可以增强标准 ViTs 的硬件效率,但由于高效 ViTs 具有独特的模型架构,如无Softmax的线性注意力和卷积-Transformer混合结构,这些方法不能直接适用于高效 ViTs,这需要专用的加速器。
III Preliminaries
Structure of Standard VITs
如图1所示,输入图像最初被划分为固定大小的块,并通过 Token 和位置嵌入进一步增强,作为ViTs Transformer 块的输入 Token 。
每个 Transformer 块包括两个关键组件:
多头自注意力模块(MHSA)和多层感知机(MLP),两者之前都有层归一化(LN),并通过残差连接相连接。特别是,MHSA是 Transformer 中用于捕获全局信息的核心元素。
局限性。 标准ViTs有两个局限性:(i) 自注意力关于 Token 数量的二次计算复杂度,以及(ii) 对硬件和量化不友好的非线性操作,即LN、GELU,尤其是Softmax[9, 10],阻碍了ViTs可实现的硬件效率和量化准确性。
Structure of EfficientViT
为了解决上述限制,高效的ViTs 已成为一种有前景的解决方案。在这里,作者以EfficientViT [12]为例,这是目前最先进的ViT,进行说明。如图2所示,它不仅(i)融入了无需Softmax的线性注意力,而且(ii)用硬件亲和且适合量化的BatchNorm(BN)和Hardswish(Hswish)[29]分别替换了普通的LN和GELU,显著简化了量化和加速。
IV Trio-ViT's Post-Training Quantization
如图所示,由于SOTA高效ViT(称为EfficientViT [12])固有的优势,即:硬件和量化友好的ReLU基全局注意力(具有线性复杂度)替代了基于vanilla Softmax的自注意力(具有二次复杂度),LN(层归一化)和GELU(高斯误差线性单元)分别被BN(批量归一化)和Hardswish取代,因此作者在EfficientViT之上探索了量化和加速,以同时获得量化准确性和硬件效率。
作者默认采用最广泛应用的硬件友好量化设置[6],即对激活和权重分别采用对称逐层和逐滤波器统一量化。形式上.
特别是,作者遵循SOTA PTQ方法BRECQ [6],该方法使用对角Fisher信息矩阵(FIM)依次重构基本块(例如,EfficientViT中的MBConvs和Lightweight MSAs),从而在保持泛化的同时增强跨层依赖。给定FIM作为目标函数,权重和激活的量化分别通过Adaround [31]和Learned Step size Quantization (LSQ) [32]进行优化。
Observations
作者采用了遵循[6]的块状重建方法来进行量化优化,同时MBConvs和轻量级MSAs是EfficientViT的两个主要块。作者从保留方程(4)中MSAs内的矩阵乘法(MatMuls)在全精度开始,以评估量化对MBConvs的影响。
Iii-A1 Observations on Quantization of MBConvs
尽管已经广泛认识到激活值对量化的敏感性高于权重,但在EfficientViT的背景下,这种敏感性被加剧了。如表格I所示,仅将EfficientViT-B1 的权重量化为8位(W8)与全精度版本相比,具有可比较的准确度(),而将权重和激活值(除了MSAs中的MatMuls)都量化到相同的位数(W8A8)会导致灾难性的准确度下降76.15。这强调了EfficientViT中激活值的极端量化敏感性,尤其是那些在MBConvs中的,正如表格II中第1列和第2列之间的准确度比较所示。如第三节B部分之前所介绍,每个MBConv包含两个由DWConv分隔的PWConv,然后作者进行消融研究,单独量化所有MBConvs中这三个层的输入激活值。如表2所示,DWConvs(DW)和第二个PWConvs(PW2)的输入激活值对量化最为敏感,应该是准确度下降的主要责任所在。为了理解这个问题,作者在图3中可视化它们的输入激活值,并观察到了两个挑战。
当将轻量级MSAs中的方程(4)的矩阵乘法量化为8位时,作者遇到了显著更差的结果,表现为“不是一个数字”(NaN)问题。作者发现这个问题主要源于除数/分母的量化。如图4 (a)和(b)所示,采用均匀量化时,除数内部值的广泛范围导致小值的量化分辨率降低。然而,与较大值相比,除数内部的小值显示出更大的敏感性。例如,在量化过程中将750的除数四舍五入到1500,导致绝对差为750,但它仅将最终的除法结果_翻倍_。相比之下,将0.3的除数近似为3,造成仅仅2.7的绝对差,但将最终结果增加了倍。特别是,将0.01的除数更改为1,产生可忽略的0.99的绝对差,但它导致最终结果增大。这些例子清楚地突显了均匀量化对于除数(尤其是那些具有广泛值的除数)的固有不兼容性。
Channel-Wise Migration for DW's Inputs
正如在第IV-A1节挑战#2中介绍的,DW的输入存在极大的通道间变化,使得传统的逐层量化方法不适用。幸运的是,由于DWConvs独特的算法特性,它们独立处理每个输入通道,从而消除了通道间的求和,作者可以直接采用通道量化为每个输入通道分配单独的缩放因子。这种方法有效地解决了上述挑战,同时没有牺牲硬件效率。然而,尽管它在提高量化精度方面具有潜在优势,但它显著增加了缩放因子的数量,这对于通过LSQ [32]进行优化构成了另一个挑战,LSQ是在逐层量化激活中广泛采用的优化缩放因子的方法。
为了克服这一限制,作者 Proposal 在DW的输入上采用基于逐层量化的通道迁移。
Filter-Wise Shifting for PW2's Inputs
Log2 Quantization for Divisors in MSAs
如图4(a)和(b)所示,log2量化将为较小的值分配更多的箱,反之亦然。这一固有特性与MSAs中除数的算法属性相一致,如第IV-A2节所述,小值表现出更高的量化敏感性。因此,为了提高MSAs中除数小值的量化分辨率,作者建议采用以下log2量化:
通过采用除数的log2量化,作者可以进一步用硬件高效的位运算移位来替换方程(4)中硬件不友好的除法,从而在提高量化性能的同时进一步提升硬件效率。
V Trio-ViT's Accelerator
Design Considerations
为了充分利用作者的算法优势,开发一个专用的加速器用于量化EfficientViT [12]是非常必要的。然而,这带来了几个挑战, 因为(i)EfficientViT内部存在多种操作类型, 以及(ii)其轻量级注意力与标准ViTs [4, 5]中的普通自注意力计算模式不同。
V-A1 Design Challenge # 1: Various Operation Types
设计选择 1:乘法器-加法器-树结构。 鉴于PWConvs是主要的操作类型,一个自然的想法是构建作者专用的加速器,采用乘法器-加法器-树(MAT)结构,这是一种有效支持PWConvs通道并行性的典型设计[34, 35]。具体来说,如图7(a)所示,MAT引擎中的每个处理元素(PE)通道负责沿着输入通道维度进行乘法(通过乘法器)、求和(通过加法树)以及累加(通过累加器),以生成每个输出像素(对于PWConvs)或部分和(对于通用卷积,称作psum)。
因此,MAT引擎中 PE通道内的并行性 沿着 输入通道维度 以便于 psum重用 。此外,输入被广播到不同的PE通道,并与不同的权重滤波器相乘,以从不同的输出通道产生输出/psum像素,从而增强 PE通道间的并行性 沿着 输出通道维度 以增强 输入重用。
局限性。 尽管MAT结构可以高效处理PWConvs,同时容易支持通用卷积和MatMuls(可以将它们视为具有大批量尺寸的PWConvs),但在处理DWConvs时其灵活性有限。
首先 ,对于DWConvs,只有来自同一滑动窗口产生的psum可以求和和累加,因此MAT中每个PE通道可实现的并行性受到DWConvs核尺寸的限制。其次 ,EfficientViT中的DWConvs具有各种核尺寸(和)和步幅(和),导致进行卷积时相邻滑动窗口之间具有不同尺寸的滑动窗口和不同的重叠模式。
这需要在PE通道内支持连续输出像素的乘法和求和功能,并额外增加线路缓冲区和大量的内存管理开销[34]。
设计选择 2:可重构架构。 为了解决上述限制,作者可以考虑图7(b)中所示的可重构架构,该架构包含了多个可重构的乘积累加单元(R-MACs)。(i) 如图7(c)所示,在执行通用卷积、PWConvs和MatMuls时,此架构可以配置为在向下前向累加模式下运行,以实现与MAT架构相同的功能。这意味着每个PE通道支持输入通道并行以实现psum重用,而不同的PE通道则倾向于输出通道并行以利用输入重用的机会。(ii) 如图7(d)所示,在执行DWConvs时,R-MAC可以被配置为在自累加模式下运行,因此每个滑动窗口内的部分和可以在每个R-MAC中_时间上_积累,这使得这种设计固有地支持各种核大小的DWConvs。特别是,每个PE通道内的R-MAC可以_空间上_计算来自不同输出通道的多个输出像素以提高吞吐量,因此这里的并行性是沿着 输出通道(见图7(d)右)。
此外,权重可以广播到所有PE通道,并与来自不同滑动窗口的输入像素相乘,以生成同一输出通道的连续输出像素(见图7(d)左上)。通过这样做,作者只需要几个辅助寄存器就可以重用相邻滑动窗口之间的重叠,并且轻松支持具有不同步长的DWConvs。
因此,每一行中奇数列索引的输入像素最初被传输到移位寄存器进行处理,然后是偶数列索引的像素。权重也需要按照相同的“先奇数后偶数”规则进行广播,以适应这种修改后的计算方案。因此,此架构中 PE通道之间的并行性是沿着输出特征图以增强权重重用。
局限性。 尽管它在支持EfficientViT中的所有类型操作方面具有灵活性,但存在可重构的开销。首先,计算资源和缓冲区的开销:每个R-MAC需要一个高比特加法和psum寄存器来支持自累加。其次,控制逻辑的开销:需要额外的多路复用器来同时支持两种累加模式,即自累加和向下前向累加。
作者提出的设计:混合架构。 鉴于以下事实:(i) PWConvs在EfficientViT [12]中占主导地位,而MAT架构可以有效地支持它们,以及 (ii) EfficientViT融合了各种操作类型,特别是具有不同 Kernel 大小和步长的DWConvs,而R-MAC设计可以灵活地支持它们,作者提出了一个混合架构,用于作者的专用加速器,以结合两者的优点。
具体来说,它包括一个MAT引擎,用于高效处理通用卷积、PWConvs和矩阵乘法,以及一个R-MAC引擎,用于有效支持上述三种操作类型和DWConvs,从而在保持硬件效率的同时提高灵活性。
提供的机会:层间流水线。 除了作者提出的混合架构的效率和灵活性之外,它还提供了层间流水线的机会,以节省数据访问成本。具体来说,在作者的混合加速器中,DWConvs只在R-MAC引擎上执行,并且在EfficientViT的MBConvs中的两个PWConvs之间。
因此,当R-MAC引擎处理DWConvs时,产生的输出可以立即传输到空闲的MAT引擎,并作为输入参与到后续PWConvs的计算中。这种整合使得DWConvs及其后续的PWConvs的计算可以融合,从而提高了硬件利用率并减少了从片外访问数据的成本。
Distinct Computational Pattern of Attention
作者提出的解决方案:低成本的辅助处理器。 除了可以有效地处理上述步骤i、iii和iv中的MatMuls的MAT引擎和R-MAC引擎之外,作者还将几个低成本的辅助处理器集成到混合架构中,以促进轻量级注意力中涉及的无乘法计算。特别是,作者加入了一个加法树来支持步骤ii中的行求和,以及一个移位器阵列来处理步骤v中的位运算移位。这种架构调整提供了在注意力内部进行计算融合的机会(即层内流水线,将在第V-C节中解释),从而提高数据复用并减轻带宽要求。
提供的机会:层内流水线。 考虑到作者的混合设计中MAT引擎、R-MAC引擎和低成本的辅助处理器,上述涉及各种操作类型的注意力计算步骤可以同时由不同的计算单元处理,从而提供了融合的机会。例如,(i) 当步骤i中的在MAT/R-MAT引擎上执行时,可以广播到辅助加法树以执行步骤ii中的行求和。此外,(ii) 当步骤iii和iv被处理时,它们的输出可以立即发送到移位器阵列进行逐元素除法。
Micro Architecture
至于内部缓冲区,缓冲区A将数据广播到R-MAC引擎中的所有PE通道,也可以将数据发送到辅助加法树。辅助缓冲区缓存R-MAC引擎的输出,并将数据广播到MAT引擎中的所有PE通道,作为两个引擎之间的桥梁。除数缓冲区存储等式(4)中的除数,然后将其传输到log2量化模块,为随后的位运算移位做准备。
关于全局缓冲区,缓冲区B/C将数据发送到所有计算核心,数据在这些核心中被分配并传输到R-MAC/MAT引擎中的不同PE通道。输出缓冲区存储来自所有计算核心的数据,并将其指导到片外DRAM。
Inter- and Intra-Layer Pipelines
如上所述, 作者的专用加速器融合了基于乘法的引擎(R-MAC和MAT引擎, DWConvs限制在前者) 和无需乘法的引擎(辅助处理器, 旨在加快MSAs中的计算)。这种架构本质上提供了流水线处理的机会, 各种操作可以同时在不同的计算单元上执行, 从而提高硬件利时, 首先将得到的输出结果减去在校准数据上获得的通道均值, 以实现第IV-C节中引入的滤波器级移位, 以便促进激活量化。之后, 它们通过重新量化模块进行重新量化, 然后存储在辅助缓冲区中。然后, 它们迅速被引导到空闲的MAT引擎, 作为后续PWConv计算的输入。鉴于DWConvs的计算量比PWConvs少, 一旦完成当前DWConv的处理, R-MAC引擎可以重新分配, 与MAT引擎一起参与PWConv的并发计算。
VI Experimental Results
Experimental Setup
数据集、 Baseline 与评价指标。 作者在ImageNet数据集[37]上验证了TriViT的后训练量化算法。具体来说,作者从训练集中随机抽取了张图像作为校准数据,然后在验证集上进行测试。
为了验证作者的量化引擎的有效性,作者考虑了seven baselines:MinMax、EMA [38]、Percentile [39]、OMSE [40]、Bit-Split [41]、EasyQuant [42]以及当前最优方法FQ-ViT [9],针对标准的ViTs [4]/DeiTs [5],并与它们在准确性(默认为top-1准确性)方面进行比较。
为了验证作者专用的加速器,作者考虑了nine baselines:
(i)全精度ViTs在广泛使用的边缘GPU(NVIDIA Tegra X2)上执行;8位量化ViTs遵循
(ii) FasterTransformer [43],
(iii) I-BERT [44],以及
(iv) I-ViT ,并在支持通过TVM高效整数运算的GPU(NVIDIA 2080Ti)的Turing Tensor Core上进行加速;(v)在广泛使用的边缘CPU(高通骁龙8Gen1 CPU)和边缘GPU上执行全精度EfficientViT,
(vi) NVIDIA Jetson Nano
(vii) NVIDIA Jetson Orin;以及两个SOTA ViT加速器,
(viii)针对标准ViTs的专用加速器Auto-ViT-Acc
(ix)针对高效ViTs之一的Swin Transformer 定制的ViA 。
作者从吞吐量、能效、帧率和DSP效率方面进行比较。
Evaluation of Trio-ViT's Post-Training Quantization
结果与分析。 从表4中,作者可以得出四个结论。
(i) 当前的SOTA后训练量化(PTQ)方法FQ-ViT [9],它开发了专门的量化方案以完全量化标准ViTs(包括Softmax)中的所有操作,以提高硬件效率,与全精度模型相比,准确性下降了1.36。此外,它还比 Baseline PTQ产生了平均0.75的准确度下降,在 Baseline PTQ中Softmax和其他非线性操作没有被量化,从而产生了不可忽视的硬件成本。这表明硬件不友好的非线性操作对量化很敏感,阻碍了标准ViTs的可实现硬件效率和量化准确性。
(ii) 为了解决这一限制,提出了名为EfficientViT [12]的SOTA高效ViT,其特点是无需Softmax的线性注意力(LinAttn),并且可以用更少的参数和计算成本实现更高的准确度。这凸显了EfficientViT的优势,强调了量化以促进其实际应用的需求。
(iii) 然而,由于MBConvs和MSAs中激活分布的不同,如第IV-A节所述,普通的PTQ方法无法量化EfficientViT,甚至产生了非数字(NaN)问题。
(iv) 为了解决这个问题,作者提出了作者专用的PTQ引擎,它可以有效地量化EfficientViT,与全精度模型相比,平均准确度仅下降了0.92,证明了作者方法的有效性。
作者专用量化引擎的有效性。 如表5所示,作者可以看出:对于MBConvs内的量化,
(i) 由于DW输入中的通道间变化和PW2输入中的通道间不对称,如第IV-A1节所述,普通的均匀量化无法量化EfficientViT中的MBConvs。
(ii) 通过结合作者提出的通道迁移和滤波器偏移,分别解决上述两个问题,两者都是不可或缺的,作者可以有效地量化MBConvs,平均准确度仅下降0.54%。在此基础上,关于轻量级MSA的量化,
(iii) 由于小值在除数中的量化极端敏感性,如第IV-A2节所示,普通的8位均匀量化产生了NaN问题。
(iv) 因此,作者建议对除数采用以2为底的对数量化,这为较小的值分配了更多的箱,并且与除数的算法性质本质上兼容,从而允许仅用4位有效地量化除数。
提出的通道迁移的有效性。 考虑到DWConvs的独特算法特性,其中每个权重通道作为一个独立的滤波器处理每个输入通道,通道量化是解决DW输入中通道间变化的直接解决方案,如第IV-B节所述。然而,这将大大增加缩放因子的数量,通过LSQ [32]进行量化优化挑战性增加,限制了可实现的准确性。因此,作者建议在层量化之上采用通道迁移。如表6所示,通过这样做,作者可以提供平均2.67的准确度,证明了在保持优化效率的同时解决DW输入的通道间变化的优势。
Evaluation of Trio-ViT's Dedicated Accelerator
与GPU/CPU上的SOTA Baseline 的比较。 作者遵循[47, 26]的方法,将作者的加速器的硬件资源扩展到与通用计算平台(即NVIDIA 2080Ti GPU)具有可比的峰值吞吐量,以便与GPU/CPU进行公平的比较。如图10所示(其中y轴以对数刻度绘制以便更好地说明),与GPU/CPU上的SOTA Baseline 相比,作者可以获得更好的硬件效率,证明了作者的有效性。具体来说:
与SOTA ViT加速器的比较。
从表7中可以看出:
VII Conclusion
作者提出了Vision Transformer(ViT),称为EfficientViT。具体来说,在算法层面,作者提出了一种定制的后训练量化引擎,该引擎融合了多种创新量化方案,以有效量化EfficientViT并提高量化精度。在硬件层面,作者开发了一个专用的加速器,整合了混合设计和流水线架构,旨在提升硬件效率。广泛的实验结果一致证明了作者的有效性。特别是,与最先进的ViT加速器相比,作者可以获得高达7.2和14.6的帧率,同时保持相当的准确度。
在本文中,作者提出了、开发并验证了Trio-ViT,这是首个针对最先进(SOTA)高效限制和未来工作的后训练量化与加速框架。已经广泛证明,模型层对量化表现出不同程度的敏感性,因此为所有层分配相同位数被认为是准确性和效率上的次优选择。因此,作者未来的研究将重点探索混合量化,考虑量化位数和方案(如固定点和二进制幂)的变化。
已经广泛证明,模型层对量化表现出不同程度的敏感性,因此为所有层分配相同位数被认为是准确性和效率上的次优选择[18, 20]。因此,作者未来的研究将重点探索混合量化,考虑量化位数和方案(如固定点和二进制幂)的变化。