【转载】大规模大语言模型训练运行洞察

原文地址:
Insights from Large-Scale LLM Training Runs,by Sebastian Raschka, on 2023-05-06

大规模大语言模型训练运行洞察

及最新开源大语言模型与数据集

本期通讯的主题是梳理过去几周内涌现的、数量近乎庞杂的大语言模型(LLM)项目与数据集。除了重点介绍大规模训练运行带来的洞察外,我还将分享几份精选清单,方便大家跟进相关进展。

目录

https://magazine.sebastianraschka.com/i/119566166/articles-and-trends
https://magazine.sebastianraschka.com/i/119566166/pythia-interpreting-autoregressive-transformers-across-time-and-scale
https://magazine.sebastianraschka.com/i/119566166/open-source-data
https://magazine.sebastianraschka.com/i/119566166/keeping-track-of-open-source-llms
https://magazine.sebastianraschka.com/i/119566166/llama-adapter-v
https://magazine.sebastianraschka.com/i/119566166/research-highlights-in-two-sentences
https://magazine.sebastianraschka.com/i/119566166/open-source-highlights
https://magazine.sebastianraschka.com/i/119566166/new-deep-learning-fundamentals-units-on-computer-vision-and-large-language-models
https://magazine.sebastianraschka.com/i/119566166/notable-quote
https://magazine.sebastianraschka.com/i/119566166/upcoming-events


文章与趋势

本月新发表的研究论文数量众多,很难从中挑选出几篇最值得深入讨论的佳作。我个人更青睐能带来额外洞见的论文,而非仅仅推出性能更强的模型。基于这一标准,Eleuther AI的Pythia论文是其中一篇吸引我注意的成果。

Pythia——来自大规模训练运行的洞察

https://github.com/EleutherAI/pythia 是一款非常有意思的模型,可作为其他自回归解码器式(即类GPT)模型的替代方案。

配套的论文 https://arxiv.org/abs/2304.01373 近期披露了关于训练机制的一系列有趣结论,同时推出了参数规模从7000万到120亿不等的多款大语言模型。

以下是该论文的部分核心洞察与结论:

  • 在重复数据上训练(即训练超过1个轮次)是否会影响性能? 结果表明,去重既不会提升也不会损害模型性能。
  • 训练顺序是否会影响记忆效果? 遗憾的是,答案是否定的。说“遗憾”,是因为如果训练顺序真的有影响,我们就可以通过重排训练数据来缓解不理想的逐字记忆问题。
  • 预训练词频是否会影响任务性能? 是的,出现频率更高的词汇,其少样本准确率往往更高。
  • 批量大小翻倍会让训练时间减半,且不会损害收敛效果。

Pythia的模型架构与GPT-3类似,但融入了若干改进,例如参考了 https://arxiv.org/abs/2205.14135(与LLaMA类似)和 https://arxiv.org/abs/2104.09864(与 https://arxiv.org/abs/2204.02311 类似)的相关设计。Pythia在 https://arxiv.org/abs/2101.00027 数据集(一个容量800GB的多类型文本数据集)上训练了3000亿词元(在常规Pile数据集上约为1个训练轮次,在去重后的Pile数据集上约为1.5个轮次)。

figure01
图注:来自Pythia论文的标注图(https://arxiv.org/abs/2304.01373)。

顺便一提,近期经过指令微调的开源大语言模型——Databricks推出的Dolly(https://www.databricks.com/blog/2023/04/12/dolly-first-open-commercially-viable-instruction-tuned-llm)*,正是以Pythia作为基础(底座)模型,我预计未来会有更多模型基于它构建。

(*Dolly v2是基于Pythia 12B参数模型,使用databricks-dolly-15k数据集进行微调,以复现InstructGPT论文/ChatGPT的效果。关于该数据集详见下文。)


开源数据

上个月是开源AI领域格外激动人心的一个月,多款大语言模型的开源实现相继问世。如今,我们也迎来了开源数据集的浪潮!包括用于指令微调的 https://www.databricks.com/blog/2023/04/12/dolly-first-open-commercially-viable-instruction-tuned-llmhttps://github.com/LAION-AI/Open-Assistant/blob/main/docs/docs/data/datasets.md,以及用于预训练的 https://github.com/togethercomputer/RedPajama-Data。这一点尤其值得称赞,因为数据收集与清洗占据了现实机器学习项目约90%的工作量,却鲜有人愿意做这项工作。

用于预训练的RedPajama数据集

https://github.com/togethercomputer/RedPajama-Data 是一个用于大语言模型预训练的开源数据集,定位对标Meta的LLaMA模型这一业界标杆。该项目的目标是打造一款有竞争力的开源竞品,对标当前主流的闭源商业模型或仅部分开源的大语言模型。(注:RedPajama的名字灵感来自儿童读物《Llama Llama Red Pajama》,参见 https://www.rif.org/literacy-central/book/llama-llama-red-pajama 。)

该数据集的主体由经过英文网站过滤的CommonCrawl数据构成,其中的维基百科文章覆盖20种不同语言。

figure02
图注:旨在复现LLaMA预训练数据集的RedPajama数据集的词元数量(https://github.com/togethercomputer/RedPajama-Data)。

Databricks-Dolly-15

https://github.com/databrickslabs/dolly/tree/master/data 是一个用于大语言模型微调的数据集,包含超过15000条由数千名Databricks员工编写的指令对(与用于训练InstructGPT、ChatGPT等系统的数据类似)。

OpenAssistant对话数据集

file:///Users/sebastian/Developer/github_rasbt/ahead-of-ai/issues_drafts/newsletter-8/(https://huggingface.co/datasets/OpenAssistant/oasst1) 是另一个用于预训练模型微调的数据集,包含大量由人类创建并标注的类ChatGPT助手对话,涵盖35种语言的161443条消息,以及461292条质量评估。这些内容被组织在超过10000个经过完整标注的对话树中。

LongForm数据集

论文 https://arxiv.org/abs/2304.08460 介绍了一组来自C4、维基百科等权威语料库的人类撰写文档,并附带针对这些文档的指令,构建了适用于长文本生成的指令微调数据集。

Alpaca Libre

https://github.com/mobarski/alpaca-libre 项目旨在复现斯坦福Alpaca的效果(https://crfm.stanford.edu/2023/03/13/alpaca.html),将来自https://github.com/anthropics/hh-rlhf 的10万余条MIT许可演示数据转换为“Alpaca兼容格式”。

开放数据与版权问题

需要注意的是,大语言模型的数据使用仍是热议话题,以下文章对此做了总结:

最后,关于上文提到的Pythia模型所使用的Pile数据集,还有一则趣闻:据一条推文(https://twitter.com/BlancheMinerva/status/1648398673553018880?s=20)称,Pile实际上没有官方许可,但Eleuther AI的研究人员表示,它在美国境内可能符合版权法的规定。


扩展开源数据集

指令微调是我们从类GPT-3的预训练底座模型,升级到ChatGPT这类能力更强的大语言模型的途径。而像上文提到的Dolly这类开源人类指令数据集,正是实现这一过程的助力。但我们该如何进一步扩大规模?是否可以不用收集额外数据?其中一种方法是让大语言模型利用自身生成的结果进行自举。

尽管 https://arxiv.org/abs/2212.10560 这篇论文发表于五个月前(按如今的标准已经算“旧”了),但它的思路仍然非常值得介绍——这是一种几乎无需标注的方法,可让预训练大语言模型与指令对齐。

它的工作原理是什么? 简而言之,这是一个四步流程:

  1. 用一组人类编写的指令(本研究中为175条)构建种子任务池,并采样指令;
  2. 用预训练大语言模型(如GPT-3)判断任务类别;
  3. 针对新的指令,让预训练大语言模型生成回答;
  4. 对生成的回答进行收集、修剪和过滤,再加入任务池。

figure03
图注:基于论文https://arxiv.org/abs/2212.10560的标注图。

实践中,从ROUGE分数来看,这种方法效果相当不错。例如,经过自指令(Self-Instruct)微调的大语言模型,性能优于GPT-3底座模型(1),并且能与在大规模人类指令集上预训练的大语言模型相媲美(2)。同时,自指令方法也能让已经经过人类指令微调的大语言模型进一步受益(3)。

当然,评估大语言模型的黄金标准是人类评分。基于人类评估的结果显示,自指令方法的效果优于底座模型,也优于在人类指令数据集上以监督方式训练的模型(SuperNI、T0 Trainer)。但有意思的是,自指令方法的表现不及基于人类反馈的强化学习(RLHF)训练的方法。

人类生成训练数据 vs 合成训练数据

人类生成的指令数据集和自指令数据集,哪个更有前景?我认为两者都有价值。为什么不先用像databricks-dolly-15k这样的1.5万条人类指令数据集起步,再用自指令方法扩大规模呢?例如,近期论文 https://arxiv.org/abs/2304.08466 表明,将真实图像训练集与AI生成图像相结合,可以提升模型性能。如果对文本数据也能验证这一规律,岂不是很有意思?

近期就有一篇朝着这个方向研究的论文:https://arxiv.org/abs/2304.01228 。研究人员发现,预训练大语言模型如果利用自身生成的数据,可以提升代码生成任务的表现。

少即是多?

除了在越来越大的数据集上进行预训练和微调,我们是否也可以研究如何在更小的数据集上提升效率?在刚刚发表的论文 https://arxiv.org/abs/2305.02301 中,研究人员提出了一种蒸馏机制,用于筛选出面向特定任务的更小模型,在训练数据更少的情况下,性能超过标准微调方法。

figure04
图注:截取自论文https://arxiv.org/abs/2305.02301


追踪开源大语言模型

开源大语言模型的数量正在爆发式增长。一方面,这是非常好的发展趋势(相比通过付费API限制模型使用的模式);但另一方面,要全部跟进它们有时会很困难。以下四个资源从不同角度汇总了最具代表性的模型,包括它们的关联关系、底层数据集以及各类许可信息。

(一则有趣的旁注:LAION与其他知名研究者联合发布了一封致欧洲议会的公开信,参见 https://laion.ai/notes/letter-to-the-eu-parliament/ 。)

首先介绍的是斯坦福CRFM的生态系统图(https://crfm.stanford.edu/ecosystem-graphs/index.html?mode=table ),它基于论文https://arxiv.org/abs/2303.15772 制作,包含一张表格(截图见下)和一个交互式依赖关系图(未展示)。

figure05
图注:来自https://crfm.stanford.edu/ecosystem-graphs/的生态系统表格顶部截图。

这份生态系统图是我目前见过的收录最全面的清单。但由于纳入了许多小众大语言模型,整体看起来会有些繁杂。另外,根据其配套仓库https://github.com/stanford-crfm/ecosystem-graphs 的更新情况来看,这份清单至少已有一个月没有更新。同时,目前还不清楚是否会持续加入更新的模型(不过下面两个更新的资源也存在同样的问题)。

第二个资源是近期论文 https://arxiv.org/abs/2304.13712 中制作精美的演化树,它聚焦于最主流的大语言模型及其衍生关系。

figure06
图注:来自论文https://arxiv.org/abs/2304.13712的图。

尽管这份大语言模型演化树非常直观清晰,但也存在几处小瑕疵。例如,为什么树根没有追溯到https://arxiv.org/abs/1706.03762 中提出的原始Transformer架构?另外,“开源”的标签也不算特别准确——比如LLaMA被列为开源,但它的权重并未以开源许可发布(仅推理代码是开源的)。

第三个资源是我的同事Daniela Dapena在博客文章中整理的表格,参见 https://lightning.ai/pages/community/community-discussions/the-ultimate-battle-of-language-models-lit-llama-vs-gpt3.5-vs-bloom-vs/

figure07
图注:来自https://lightning.ai/pages/community/community-discussions/the-ultimate-battle-of-language-models-lit-llama-vs-gpt3.5-vs-bloom-vs/的表格。

虽然这份表格的规模比其他资源小,但它的优点是包含了模型参数量和许可信息——如果你打算在项目中采用这些模型,这些信息具有非常实用的参考价值。

第四个资源是 https://github.com/shm007g/LLaMA-Cult-and-More/blob/main/chart.md,它补充了关于微调方法以及硬件成本的相关信息。

figure08
图注:截取自https://github.com/shm007g/LLaMA-Cult-and-More/blob/main/chart.md的表格。

接下来,如果能以某种方式把模型性能信息也加入这些表格就好了,但这完全是另一个难题——因为高效评估大语言模型本身就不是一件简单的事……


使用LLaMA-Adapter V2微调多模态大语言模型

还记得上个月介绍的LLaMA-Adapter吗?它是一种针对大语言模型的参数高效微调技术。我当时还预测,本月会出现更多多模态大语言模型——那么我们就来聊聊刚发布的《LLaMA-Adapter V2:参数高效的视觉指令模型》!

先简要回顾:什么是LLaMA-Adapter?它的工作原理是什么?LLaMA-Adapter是一种参数高效的大语言模型微调技术,它仅修改前几个Transformer块,并引入门控机制来稳定训练过程。

借助LLaMA-Adapter方法,研究人员仅用5.2万条指令对,在8张A100 GPU上仅耗时1小时,就完成了70亿参数LLaMA模型的微调。整个过程中,7B的LLaMA底座模型保持冻结,仅训练新增的120万参数(即适配层)。

LLaMA-Adapter V2的重点是多模态能力,也就是构建一个能够处理图像输入的视觉指令模型。(原始V1版本其实也可以接收图像标记(与文本标记一起),但这一方面的潜力没有得到充分挖掘。)

从V1到V2,研究人员主要新增了三项技巧来改进适配方法:

  1. 视觉知识早期融合:不再在每个适配层中融合视觉提示与适配后的提示,而是在第一个Transformer块中就将视觉标记与文本标记拼接。
  2. 引入更多参数:解冻所有归一化层,并为Transformer块中的每个线性层都添加偏置单元和缩放因子。
  3. 参数分离的联合训练:对于图文字幕数据,仅训练视觉投影层;对于指令跟随数据,仅训练适配层(以及上述新增的参数)。

LLaMA V2(1400万参数)的参数量略多于LLaMA V1(120万参数),但整体仍然非常轻量,仅占650亿参数LLaMA模型总参数的0.02%。

尤其令人印象深刻的是,仅微调65B LLaMA模型中的1400万参数,微调后的LLaMA-Adapter V2模型在性能上就能追平ChatGPT(采用GPT-4模型进行评估),并且性能超过了采用全量微调方式(更新全部130亿参数)的13B Vicuna模型。

遗憾的是,V2论文没有包含V1论文中的计算性能基准,但我们可以推测V2的训练速度仍然远快于全量微调。

figure09


两句话研究亮点

由于本期通讯篇幅较长,我决定把我为这一部分挑选并总结的17篇论文,移到单独的一篇文章中,计划下周发布。到时候说不定我还会再多补充几篇。敬请期待!


开源亮点

Lit-LLaMA的改进

在Lightning AI,我们一直在维护 https://github.com/Lightning-AI/lit-llama 仓库,它提供了热门LLaMA模型的更简洁、可读性更强的开源实现,同时支持多种微调方法,包括 https://arxiv.org/abs/2106.09685https://arxiv.org/abs/2303.16199 中提出的方法、量化技术等。

该仓库近期新增内容包括:

其他开源大语言模型

全部列举是不可能的,但本月推出的知名开源大语言模型与聊天机器人还包括:https://github.com/LAION-AI/Open-Assistanthttps://github.com/project-baize/baize-chatbothttps://github.com/Stability-AI/StableLMhttps://github.com/hpcaitech/ColossalAI/tree/main/applications/Chathttps://github.com/mosaicml/llm-foundry 等等。此外,还有两款多模态大语言模型尤其值得关注。

OpenFlamingo

https://github.com/mlfoundations/open_flamingo 是谷歌DeepMind去年发布的Flamingo模型的开源复现版本。OpenFlamingo旨在为大语言模型提供多模态图像推理能力,让用户可以交错输入文本和图像。

MiniGPT-4

https://github.com/Vision-CAIR/MiniGPT-4 是另一款具备视觉-语言能力的开源模型。它基于冻结的视觉编码器(来自https://arxiv.org/abs/2301.1259 )和冻结的Vicuna模型(https://lmsys.org/blog/2023-03-30-vicuna/ )构建。

figure10
图注:MiniGPT-4截图,来源:https://github.com/Vision-CAIR/MiniGPT-4

NeMo Guardrails

随着大量新模型的涌现,很多公司都在思考如何部署、以及是否应该部署这些模型,尤其是安全方面的考量。目前还没有完美的解决方案,但至少有一个颇具前景的临时方案:https://github.com/NVIDIA/NeMo-Guardrails

简而言之,它的工作原理是:该方法使用一个数据库,关联到需要人工精心编写的硬编码提示。当用户输入提示时,系统首先将其与数据库中最相似的条目匹配,然后数据库返回对应的硬编码提示,再传递给大语言模型。这样一来,只要对硬编码提示进行充分测试,就能确保对话不会偏离允许的主题范围。

figure11
图注:NeMo护栏概念示意图。

这是一个有意思但算不上突破性的方法,因为它并没有赋予大语言模型更强或更新的能力,只是限制了用户与大语言模型交互的范围。不过,在研究人员找到其他缓解大语言模型幻觉问题和有害行为的方法之前,这可能仍是一个可行的方案。

护栏方法还可以与其他对齐技术结合使用,比如我在 https://magazine.sebastianraschka.com/p/ahead-of-ai-6-train-differently 一文中介绍的、流行的基于人类反馈的强化学习训练范式。

一致性模型

聊点大语言模型之外的有趣模型不好吗?OpenAI终于开源了他们的一致性模型代码:https://github.com/openai/consistency_models

一致性模型被认为是扩散模型的一种可行、高效的替代方案。更多信息详见论文 https://arxiv.org/abs/2303.01469


深度学习基础课程新增单元:计算机视觉与大语言模型

过去几周,我的免费《深度学习基础》课程刚上线了两个新单元。

当然,两个单元都包含大量代码示例和基于PyTorch的实操讲解。课程完全免费,视频时长较短,内容精炼。希望大家能有所收获!

figure12
图注:《深度学习基础》课程幻灯片截图,来源:https://lightning.ai/pages/courses/deep-learning-fundamentals/unit-8.0-natural-language-processing-and-large-language-models/


名言引用

“我认为,那种追求巨型、超巨型模型的时代已经结束了。……我们会通过其他方式让模型变得更好。”
——OpenAI首席执行官萨姆·奥尔特曼(Sam Altman),出自 https://www.wired.com/story/openai-ceo-sam-altman-the-age-of-giant-ai-models-is-already-over/


这本杂志是我个人的兴趣项目,不提供直接报酬。不过,如果您愿意支持我,可以考虑购买我的书籍:https://sebastianraschka.com/books 。如果您觉得这些书有洞察力、有帮助,也欢迎推荐给您的朋友和同事。

figure13

https://www.amazon.com/Machine-Learning-PyTorch-Scikit-Learn-scikit-learn-ebook-dp-B09NW48MR1/dp/B09NW48MR1/https://nostarch.com/machine-learning-and-ai-beyond-basics ,以及 http://mng.bz/M96o

您的支持对我意义重大!非常感谢!

【转载】理解大语言模型参数高效微调:提示调优与前缀调优

原文地址:Understanding Parameter-Efficient LLM Finetuning: Prompt Tuning And Prefix Tuning,by Sebastian Raschka, on 2023-04-30

理解大语言模型参数高效微调:提示调优与前缀调优

上周我概述了大语言模型(LLM)的各类微调技术。接下来我会用一系列短文,逐一讲解其中最具实用价值的核心方法。

《大语言模型微调》

我们先从几类基于提示修改的参数高效微调技术讲起。

本文将覆盖的参数高效微调技术一览:

figure01

Continue reading 【转载】理解大语言模型参数高效微调:提示调优与前缀调优

【转载】大语言模型微调

原文地址:
Finetuning Large Language Models,by Sebastian Raschka, on 2023-04-22

大语言模型微调

核心思想与方法入门

在人工智能这个飞速发展的领域中,高效、有效地运用大语言模型(LLM)已变得愈发重要。但大语言模型的使用方式多种多样,如果你是刚入门的学习者,难免会感到无从下手。
本质上,我们将预训练大语言模型应用于新任务主要有两种方式:上下文学习(in-context learning)微调(finetuning)
本文将先简要介绍上下文学习的含义,再详细讲解微调大语言模型的各类方法。

上下文学习与索引

自GPT-2(https://d4mucfpksywv.cloudfront.net/better-language-models/language_models_are_unsupervised_multitask_learners.pdf)与GPT-3(https://arxiv.org/abs/2005.14165)问世以来,我们已经证实:在通用文本语料上预训练的生成式大语言模型具备上下文学习能力。也就是说,如果要执行模型未经过专门训练的特定任务或新任务,我们无需对预训练大语言模型进行额外训练或微调,只需通过输入提示词直接提供几个目标任务的示例即可,如下图所示。
figure01
图:上下文学习示例

如果无法直接访问模型(比如通过API调用模型时),上下文学习是非常实用的方法。
与上下文学习相关的概念是硬提示调优(hard prompt tuning),即通过修改输入内容来优化输出效果,如下图所示。
figure02
图:(硬)提示调优示意图

顺便一提,之所以叫“硬”提示调优,是因为我们直接修改输入的文本或词元(token)。后文我们还会介绍一种可微分的版本,叫做软提示调优(soft prompt tuning)(也常简称为提示调优)。
相较于参数微调,上述提示调优方法的资源消耗更低,但效果通常不及微调——因为它没有针对特定任务更新模型参数,可能难以适配任务的细节特性。此外,提示调优往往需要人工反复对比不同提示的效果,人力成本较高。

在深入讨论微调之前,再介绍一种纯上下文学习思路的衍生方法:索引(indexing)。在大语言模型领域,索引可以看作是上下文学习的一种变通方案,它能将大语言模型改造为信息检索系统,从外部资源和网站中提取数据。其流程是:索引模块将文档或网站拆分为更小的片段,将其转换为向量并存入向量数据库;当用户提交查询时,索引模块计算查询的嵌入向量与数据库中每个向量的相似度,最终取回相似度最高的前k个嵌入结果来生成回答。
figure03
图:索引方法示意图

三种传统的基于特征的方法与微调方法

当无法直接访问大语言模型时(比如通过API或用户界面交互时),上下文学习是一种实用且易用的方法。
但如果我们有权限直接操作模型,使用目标领域的数据针对特定任务对模型进行适配和微调,通常能得到更优的效果。那么,如何让模型适配目标任务?下图概括了三种传统方法。
figure04
图:三种传统的基于特征的方法与微调方法

为了让下文的讨论更具实操参考性,我们以BERT(https://arxiv.org/abs/1810.04805<)这类编码器架构的大语言模型为例,针对分类任务进行微调(为简化起见,这里的分类任务是判断电影评论的情感倾向是正面还是负面)。需要说明的是,这些方法不仅适用于编码器架构的大语言模型,同样也适用于GPT这类解码器架构的大语言模型,后续文章会给出对应的示例。此外,我们也可以对解码器架构的大语言模型进行微调,让它针对特定指令生成多句回答,而不只是做文本分类,相关实操示例也会在后续文章中提供。/p>

1)基于特征的方法

在基于特征的方法中,我们加载预训练大语言模型,将其作用于目标数据集。核心是生成训练集的输出嵌入向量,用这些嵌入作为输入特征来训练分类模型。这种方法在BERT这类侧重嵌入的模型中尤为常用,不过我们也可以从GPT类生成式模型中提取嵌入向量。
分类模型可以选用逻辑回归、随机森林、XGBoost等任意模型(不过根据经验,逻辑回归这类线性分类器在这里效果最好)。
从原理上,我们可以用如下代码来表示基于特征的方法:

model = AutoModel.from_pretrained("distilbert-base-uncased")
# ...
# tokenize dataset
# ...
# generate embeddings
@torch.inference_mode()
def get_output_embeddings(batch):
    output = model(
        batch["input_ids"],
        attention_mask=batch["attention_mask"]
    ).last_hidden_state[:, 0]
return {"features": output}

dataset_features = dataset_tokenized.map(
    get_output_embeddings, batched=True, batch_size=10)

X_train = np.array(imdb_features["train"]["features"])
y_train = np.array(imdb_features["train"]["label"])

X_val = np.array(imdb_features["validation"]["features"])
y_val = np.array(imdb_features["validation"]["label"])

X_test = np.array(imdb_features["test"]["features"])
y_test = np.array(imdb_features["test"]["label"])

# train classifier
from sklearn.linear_model import LogisticRegression

clf = LogisticRegression()
clf.fit(X_train, y_train)

print("Training accuracy", clf.score(X_train, y_train))
print("Validation accuracy", clf.score(X_val, y_val))
print("test accuracy", clf.score(X_test, y_test))

(感兴趣的读者可以在以下链接找到完整代码示例:https://github.com/rasbt/LLM-finetuning-scripts/tree/main/conventional/distilbert-movie-review

2)微调I —— 更新输出层

与上述基于特征的方法相关的一种常用方法是微调输出层(我们称之为“微调I”)。和基于特征的方法类似,我们冻结预训练大语言模型的所有参数,只训练新增的输出层——这相当于在嵌入特征上训练一个逻辑回归分类器,或是一个小型多层感知机。
对应的代码如下:

model = AutoModelForSequenceClassification.from_pretrained(
    "distilbert-base-uncased",
     num_labels=2
)

# freeze all layers
for param in model.parameters():
    param.requires_grad = False

# then unfreeze the two last layers (output layers)
for param in model.pre_classifier.parameters():
    param.requires_grad = True

for param in model.classifier.parameters():
    param.requires_grad = True

# finetune model
lightning_model = CustomLightningModule(model)
trainer = L.Trainer(
    max_epochs=3,
    ...
)
trainer.fit(
    model=lightning_model,
    train_dataloaders=train_loader,
    val_dataloaders=val_loader)

# evaluate model
trainer.test(lightning_model, dataloaders=test_loader)

(感兴趣的读者可以在以下链接找到完整代码示例:https://github.com/rasbt/LLM-finetuning-scripts/tree/main/conventional/distilbert-movie-review

从理论上讲,由于使用的是同一个冻结的主干模型,这种方法在模型效果和训练速度上应该和基于特征的方法相近。不过基于特征的方法可以更方便地预计算并存储训练集的嵌入特征,因此在某些实际场景下可能更易用。

3)微调II —— 更新所有层

原始BERT论文(https://arxiv.org/abs/1810.04805)中提到,仅微调输出层也能达到与微调全层相近的效果,但微调全层的计算成本要高得多,因为涉及的参数量更大。例如,BERT-base模型大约有1.1亿个参数,而用于二分类的输出层只有1500个参数;即使是最后两层,参数量也只有6万,仅占模型总参数量的0.6%左右。
最终效果取决于目标任务、目标领域与模型预训练数据集的相似程度。但在实际应用中,微调全层几乎总能带来更优的模型效果。
因此,如果追求最优的模型效果,使用预训练大语言模型的黄金标准就是更新所有层(即本文所说的“微调II”)。原理上,微调II和微调I非常相似,唯一的区别是:我们不会冻结预训练大语言模型的参数,而是对其也进行微调:

model = AutoModelForSequenceClassification.from_pretrained(
    "distilbert-base-uncased",
     num_labels=2
)

# freeze layers (which we don't do here)
# for param in model.parameters():
#    param.requires_grad = False

# finetune model
lightning_model = LightningModel(model)
trainer = L.Trainer(
    max_epochs=3,
    ...
)
trainer.fit(
    model=lightning_model,
    train_dataloaders=train_loader,
    val_dataloaders=val_loader)

# evaluate model
trainer.test(lightning_model, dataloaders=test_loader)

(感兴趣的读者可以在以下链接找到完整代码示例:https://github.com/rasbt/LLM-finetuning-scripts/tree/main/conventional/distilbert-movie-review

如果你想了解实际效果,上述代码片段基于预训练的DistilBERT-base模型训练了一个电影评论分类器(代码笔记本可在此处获取:https://github.com/rasbt/LLM-finetuning-scripts/tree/main/conventional/distilbert-movie-review),结果如下:

  1. 基于特征的方法+逻辑回归:测试准确率83%
  2. 微调I(更新最后2层):准确率87%
  3. 微调II(更新所有层):准确率92%

这一结果符合通用经验法则:微调的层数越多,模型效果通常越好,但计算成本也越高。
figure05
图:不同方法的计算成本与模型效果权衡经验参考

上述场景展示了微调最具代表性的三种极端情况:只训练最后一层、训练部分层与训练全层。当然,具体效果会因模型和数据集而异,尝试中间的不同层数配置也可能有收获。比如,有时只训练一半的层数就能达到和全量微调相近的效果(下一节会详细介绍参数高效微调)。感兴趣的读者可以参考下图:图中展示了DistilBERT模型在斯坦福IMDB情感分析数据集(https://ai.stanford.edu/~amaas/data/sentiment/)的2万条训练样本上微调后的预测效果与训练耗时。
figure06
图:预训练DistilBERT模型在IMDB电影评论数据集上的微调效果。代码可在此处获取:https://github.com/rasbt/LLM-finetuning-scripts/tree/main/conventional/distilbert-movie-review/layerwise-experiment

从图中可以看出,只训练最后一层的速度最快,但模型效果最差;如预期所料,训练的层数越多,模型效果越好,但计算成本也随之上升。最值得注意的是,当训练到两个全连接输出层+最后两个Transformer块(从左数第三个块)时,预测性能就已经趋于饱和。因此在这个特定的模型+数据集组合下,训练更多层数反而会造成计算资源的浪费。

参数高效微调

参数高效微调(Parameter-Efficient Finetuning, PEFT)让我们可以复用预训练模型,同时将计算量与资源消耗降到最低。总的来说,参数高效微调的优势至少有以下5点:

  • 降低计算成本(所需GPU数量更少、GPU耗时更短)
  • 加快训练速度(训练完成更快)
  • 降低硬件要求(在小显存GPU上也能运行)
  • 提升模型效果(减少过拟合)
  • 节省存储空间(大部分权重可在不同任务间共享)

前几节我们了解到,微调的层数越多,效果通常越好。但上述实验都是基于规模相对较小的DistilBERT模型。如果我们要微调的是更大的模型——比如最新的生成式大语言模型,它们的体积刚好勉强能放进GPU显存,那该怎么办?当然,我们可以用前面提到的基于特征的方法或者微调I,但如果我们想要达到接近微调II的模型效果呢?
多年来,研究者们开发了多种技术(https://arxiv.org/abs/2303.15647),能在只训练少量参数的前提下,让大语言模型微调达到优秀的效果,这类方法统称为**参数高效微调技术(PEFT)**。
下图总结了几种最常用的参数高效微调技术。
figure07
图:主流参数高效微调技术一览

那么这些技术的原理是什么?简而言之,它们的核心都是引入少量额外参数进行微调(而不是像前面的微调II那样微调所有层)。从某种意义上说,只微调最后一层的“微调I”也可以算作一种参数高效微调技术。但前缀调优(prefix tuning)、适配器(adapters)、低秩适配(low-rank adaptation)这类可以“修改”多层的技术,能以很低的成本实现好得多的预测效果。
本文篇幅已经很长了,而且这些技术都非常值得深入讲解,后续我会单独撰文介绍。

基于人类反馈的强化学习

基于人类反馈的强化学习(Reinforcement Learning with Human Feedback, RLHF) 结合监督学习与强化学习来微调预训练模型——这一方法因初代ChatGPT而普及,其技术基础是InstructGPT(https://arxiv.org/abs/2203.02155)。
在RLHF流程中,我们通过让人类对模型的不同输出进行排序或打分来收集人类反馈,以此作为奖励信号。收集到的奖励标签会被用于训练奖励模型,再由奖励模型引导大语言模型适配人类的偏好。
奖励模型本身通过监督学习训练得到(通常以预训练大语言模型为基座)。之后,我们利用奖励模型来更新待适配人类偏好的预训练大语言模型——训练时会用到一种名为**近端策略优化(Proximal Policy Optimization, PPO)**的强化学习算法(https://arxiv.org/abs/1707.06347)。
figure08
图:InstructGPT论文中展示RLHF流程的截图

为什么不直接用人类反馈来训练预训练模型,而是要先训练奖励模型?这是因为如果把人类纳入学习循环会形成瓶颈——我们无法实时获取人类反馈。
如前所述,本文篇幅已较长,更详细的讲解留待后续文章。

结语

对预训练大语言模型进行全层微调,仍然是适配新任务的黄金标准。但对于预训练Transformer模型,我们还有多种高效的替代方案。基于特征的方法、上下文学习、参数高效微调技术等,都能让大语言模型有效应用于新任务,同时将计算成本与资源消耗降到最低。
此外,基于人类反馈的强化学习(RLHF)可作为监督微调的替代方案,有进一步提升模型性能的潜力。

本杂志是我的个人兴趣项目。如果您希望在订阅(https://magazine.sebastianraschka.com/subscribe)之外支持我的创作,欢迎购买我的书籍(https://sebastianraschka.com/books)。如果您觉得内容有启发、有帮助,也请推荐给您的朋友和同事。
figure09
相关书籍链接:https://www.amazon.com/Machine-Learning-PyTorch-Scikit-Learn-scikit-learn-ebook-dp-B09NW48MR1/dp/B09NW48MR1/https://nostarch.com/machine-learning-and-ai-beyond-basicshttp://mng.bz/M96o
您的支持对我意义重大!非常感谢!

【转载】理解大语言模型

原文地址:
Understanding Large Language Model,by Sebastian Raschka, on 2023-04-16

理解大语言模型

快速入门必读的核心文献精选

大语言模型席卷了公众的目光——这并非双关。短短半个世纪,大语言模型(即Transformer)几乎彻底改变了自然语言处理领域。不仅如此,它们也开始掀起计算机视觉、计算生物学等领域的变革。

鉴于Transformer对所有人的研究方向都产生了如此深远的影响,我想整理一份简短的阅读清单(扩展版见https://www.linkedin.com/feed/update/urn:li:activity:7028449312300834816?commentUrn=urn%3Ali%3Acomment%3A%28activity%3A7028449312300834816%2C7028519126105030656%29&dashCommentUrn=urn%3Ali%3Afsd_comment%3A%287028519126105030656%2Curn%3Ali%3Aactivity%3A7028449312300834816%29),面向刚入门的机器学习研究者与从业者。

以下清单建议大致按时间顺序阅读,且我只聚焦于学术研究论文。当然,还有很多其他实用的资源,例如:

理解核心架构与任务

如果你刚接触Transformer/大语言模型,从最基础的内容入手最合理。

(1) 《通过联合学习对齐与翻译实现神经机器翻译》(2014)

作者:Bahdanau, Cho, Bengio
https://arxiv.org/abs/1409.0473

如果你时间有限,我推荐从这篇论文开始。它为循环神经网络(RNN)引入了注意力机制,以提升长序列建模能力。这让RNN能够更准确地翻译更长的句子——这也是后来原始Transformer架构诞生的核心动因。

figure01
来源:https://arxiv.org/abs/1409.0473

(2) 《注意力就是你所需的全部》(2017)

作者:Vaswani, Shazeer, Parmar, Uszkoreit, Jones, Gomez, Kaiser, Polosukhin
https://arxiv.org/abs/1706.03762

这篇论文提出了原始的Transformer架构,由编码器和解码器两部分组成,二者后来也成为各自独立的重要模块。此外,论文还提出了缩放点积注意力机制、多头注意力块、位置输入编码等概念,这些至今仍是现代Transformer的基础。

figure02
来源:https://arxiv.org/abs/1706.03762

(3) 《Transformer架构中的层归一化位置研究》(2020)

作者:Xiong, Yang, He, K Zheng, S Zheng, Xing, Zhang, Lan, Wang, Liu
https://arxiv.org/abs/2002.04745

尽管上面《注意力就是你所需的全部》中的Transformer示意图是对原始编解码架构的很好总结,但图中层归一化(LayerNorm)的位置至今仍是热议的话题。

比如,《注意力就是你所需的全部》中的Transformer示意图将层归一化放在残差块之间,这与论文配套的代码实现(https://github.com/tensorflow/tensor2tensor/commit/f5c9b17e617ea9179b7d84d36b1e8162cb369f25)并不一致。示意图里的这种变体被称为**后置层归一化Transformer(Post-LN Transformer),而实际代码默认采用的是前置层归一化(Pre-LN)**变体。

https://arxiv.org/abs/2002.04745 这篇论文指出,前置层归一化效果更好,能解决梯度问题,如下图所示。很多架构在实践中都采用了这种设计,但它也可能导致表示坍缩。

因此,尽管关于使用后置还是前置层归一化的讨论仍在继续,也有新论文提出兼顾二者优势的方案:《ResiDual:具备双残差连接的Transformer》(https://arxiv.org/abs/2304.14802);该方案在实践中是否有效还有待观察。

figure03
来源:https://arxiv.org/abs/1706.03762(左、中)与 https://arxiv.org/abs/2002.04745(右)

(4) 《学习控制快速权重记忆:动态循环神经网络的一种替代方案》(1991)

作者:Schmidhuber
https://www.semanticscholar.org/paper/Learning-to-Control-Fast-Weight-Memories%3A-An-to-Schmidhuber/bc22e87a26d020215afe91c751e5bdaddd8e4922

如果你对历史趣闻以及与现代Transformer本质相似的早期研究感兴趣,推荐这篇论文。

比如,在1991年——比上面那篇《注意力就是你所需的全部》Transformer论文早了约25年——Juergen Schmidhuber就提出了一种循环神经网络的替代方案,名为快速权重编程器(Fast Weight Programmers, FWP)。FWP方法包含一个前馈神经网络,它通过梯度下降缓慢学习,以此来编程另一个神经网络的快速权重变化。

这与现代Transformer的类比在这篇文章中有解释:>https://people.idsia.ch//~juergen/fast-weight-programmer-1991-transformer.html#sec2,内容如下:

在如今的Transformer术语中,FROM和TO分别被称为键(key)和值(value)。快速网络所作用的输入INPUT被称为查询(query)。本质上,查询由快速权重矩阵处理,而快速权重矩阵是键与值外积的和(忽略归一化和投影)。由于两个网络的所有运算都是可微的,我们通过加性外积或二阶张量积,就能对快速权重变化实现端到端可微的主动控制[FWP0-3a]。因此,慢速网络可以通过梯度下降学习,在序列处理过程中快速修改快速网络。这在数学上(除了归一化部分)等价于后来被称为线性化自注意力Transformer(或线性Transformer)的结构。

正如上面博客节选提到的,2020年arXiv上的两篇论文(https://arxiv.org/abs/2006.16236https://arxiv.org/abs/2009.14794)将这种方法命名为“线性Transformer”或“线性化自注意力Transformer”。
2021年,https://arxiv.org/abs/2102.11174 这篇论文进一步明确证明了线性化自注意力与90年代的快速权重编程器是等价的。

figure04
来源:基于https://people.idsia.ch//~juergen/fast-weight-programmer-1991-transformer.html#sec2 制作的注解图

(5) 《面向文本分类的通用语言模型微调》(2018)

作者:Howard, Ruder
https://arxiv.org/abs/1801.06146

从历史角度看,这是另一篇非常有意思的论文。尽管它发表于原始《注意力就是你所需的全部》Transformer论文发布一年之后,但它并没有涉及Transformer,而是聚焦于循环神经网络。不过它仍然值得关注,因为它实际上提出了语言模型预训练+下游任务迁移学习的思路。

虽然迁移学习在计算机视觉领域已经成熟,但在自然语言处理(NLP)领域还未普及。ULMFit是最早证明“对语言模型进行预训练,再在特定任务上微调,就能在众多NLP任务中取得最优结果”的论文之一。

ULMFit提出的语言模型微调三阶段流程如下:

  1. 在大规模文本语料上训练语言模型。
  2. 在任务特定数据上微调该预训练语言模型,使其适配文本的特定风格与词汇。
  3. 在任务特定数据上微调分类器,同时逐步解冻各层,以避免灾难性遗忘。

这种“在大规模语料上训练语言模型,再在下游任务上微调”的范式,正是BERT、GPT-2/3/4、RoBERTa等基于Transformer的模型以及各类基础模型的核心方法。

不过,ULMFit的关键部分——逐步解冻层,在Transformer架构的实践中通常不会常规使用,Transformer一般会同时微调所有层。

figure05
来源:https://arxiv.org/abs/1801.06146

(6) 《BERT:面向语言理解的深度双向Transformer预训练》(2018)

作者:Devlin, Chang, Lee, Toutanova
https://arxiv.org/abs/1810.04805

在原始Transformer架构之后,大语言模型研究开始分化为两个方向:

  • 编码器式Transformer:用于文本分类等预测建模任务;
  • 解码器式Transformer:用于翻译、摘要、文本生成等生成建模任务。

上面这篇BERT论文提出了掩码语言建模、下一句预测的原始概念,至今仍是最具影响力的编码器式架构。如果你对这一研究方向感兴趣,推荐进一步阅读https://arxiv.org/abs/1907.11692,它去掉了下一句预测任务,简化了预训练目标。

figure06
来源:https://arxiv.org/abs/1810.04805

(7) 《通过生成式预训练提升语言理解能力》(2018)

作者:Radford, Narasimhan
https://www.semanticscholar.org/paper/Improving-Language-Understanding-by-Generative-Radford-Narasimhan/cd18800a0fe0b668a1cc19f2ec95b5003d0a5035

这篇原始GPT论文提出了流行的解码器式架构,以及通过下一词预测进行预训练的方法。如果说BERT因其掩码语言模型预训练目标属于双向Transformer,那么GPT就是单向的自回归模型。尽管GPT的嵌入也可用于分类任务,但GPT方法是如今最具影响力的大语言模型(如ChatGPT)的核心。

如果你对这一研究方向感兴趣,推荐进一步阅读这两篇论文:
https://www.semanticscholar.org/paper/Language-Models-are-Unsupervised-Multitask-Learners-Radford-Wu/9405cc0d6169988371b2755e573cc28650d14dfe
以及 https://arxiv.org/abs/2005.14165。这两篇论文阐明了大语言模型具备零样本和少样本学习能力,凸显了大语言模型的涌现能力。GPT-3至今仍是训练ChatGPT等当前一代大语言模型的常用基线与基础模型——我们后面会单独介绍催生ChatGPT的InstructGPT方法。

figure07
来源:https://www.semanticscholar.org/paper/Improving-Language-Understanding-by-Generative-Radford-Narasimhan/cd18800a0fe0b668a1cc19f2ec95b5003d0a5035

(8) 《BART:面向自然语言生成、翻译与理解的去噪序列到序列预训练》(2019)

作者:Lewis, Liu, Goyal, Ghazvininejad, Mohamed, Levy, Stoyanov, Zettlemoyer
https://arxiv.org/abs/1910.13461

如前所述,BERT类编码器式大语言模型通常更适合预测建模任务,而GPT类解码器式大语言模型更擅长生成文本。为了兼顾二者优势,上面这篇BART论文结合了编码器与解码器两部分(和本清单第二篇的原始Transformer类似)。

figure08
来源:https://arxiv.org/abs/1910.13461

(9) 《在实践中发挥大语言模型的威力:ChatGPT及相关研究综述》(2023)

作者:Yang, Jin, Tang, Han, Feng, Jiang, Yin, Hu
https://arxiv.org/abs/2304.13712

这不是一篇研究论文,但可能是迄今最好的通用架构综述,清晰展现了不同架构的演进历程。除了讨论BERT式掩码语言模型(编码器)与GPT式自回归语言模型(解码器)之外,它还就预训练与微调数据提供了实用的讨论与指导。

figure09
现代大语言模型演进树,引自https://arxiv.org/abs/2304.13712

缩放定律与效率提升

如果你想了解更多提升Transformer效率的各类技术,我推荐先读https://arxiv.org/abs/2009.06732 这篇论文,再读https://arxiv.org/abs/2302.01107 这篇。

此外,下面这些论文我认为特别有意思,值得一读。

(10) 《FlashAttention:具备IO感知的快速、内存高效精确注意力》(2022)

作者:Dao, Fu, Ermon, Rudra, Ré
https://arxiv.org/abs/2205.14135

大多数Transformer论文都不会替换实现自注意力的原始缩放点积机制,但FlashAttention是我最近见过引用最多的一种机制。

figure10
来源:https://arxiv.org/abs/2205.14135

(11) 《Cramming:单GPU一天训练完成一个语言模型》(2022)

作者:Geiping, Goldstein
https://arxiv.org/abs/2212.14034

在这篇论文中,研究人员在单块GPU上用24小时训练了一个掩码语言模型/编码器式大语言模型(这里是BERT)。作为对比,2018年的原始BERT论文用了16块TPU训练了4天。一个有意思的发现是:更小的模型虽然吞吐量更高,但学习效率更低。因此,更大的模型达到特定预测性能阈值并不需要更长的训练时间。

figure11
来源:https://arxiv.org/abs/2212.14034

(12) 《LoRA:大语言模型的低秩适配》(2021)

作者:Hu, Shen, Wallis, Allen-Zhu, Li, L Wang, S Wang, Chen
https://arxiv.org/abs/2106.09685

在大规模数据集上预训练的现代大语言模型展现出涌现能力,在语言翻译、摘要、编程、问答等各类任务上表现优异。但如果我们想提升Transformer在领域特定数据与专业任务上的能力,对Transformer进行微调是很有价值的。

低秩适配(Low-Rank Adaptation,LoRA)是大语言模型参数高效微调中最具影响力的方法之一。尽管还有其他参数高效微调方法(见下面的综述),但LoRA尤其值得强调,因为它既优雅又具备很强的通用性,也可应用于其他类型的模型。

LoRA的作者指出,尽管预训练模型的权重在预训练任务上是满秩的,但当大语言模型适配新任务时,其“内在维度”很低。因此,LoRA的核心思想是将权重变化量ΔW分解为低秩表示,从而大幅提升参数效率。

figure12
LoRA示意图及其性能表现,引自https://arxiv.org/abs/2106.09685

(13) 《以小博大:参数高效微调指南》(2022)

作者:Lialin, Deshpande, Rumshisky
https://arxiv.org/abs/2303.15647

在大规模数据集上预训练的现代大语言模型展现出涌现能力,在语言翻译、摘要、编程、问答等各类任务上表现优异。但如果我们想提升Transformer在领域特定数据与专业任务上的能力,对Transformer进行微调是很有价值的。这篇综述梳理了40余篇参数高效微调方法的论文(包括前缀微调、适配器、低秩适配等流行技术),让微调的计算成本变得(极其)低廉。

figure13
来源:https://arxiv.org/abs/2303.15647

(14) 《大语言模型缩放:训练Gopher的方法、分析与洞见》(2022)

作者:Rae及同事(共78位作者!)
https://arxiv.org/abs/2112.11446

Gopher是一篇非常详实的论文,包含大量帮助理解大语言模型训练的分析。研究人员训练了一个2800亿参数、80层的模型,训练数据量达3000亿token。其中包含很多有意思的架构改进,比如用**均方根归一化(RMSNorm)**替代层归一化(LayerNorm)。层归一化和均方根归一化都优于批量归一化(BatchNorm),因为它们不依赖批次大小,也不需要同步,这在小批量的分布式训练场景中是一大优势。而均方根归一化通常被认为能让更深层架构的训练更稳定。

除了上面这些有趣的细节,这篇论文的核心是分析不同规模下的任务表现。对152个多样化任务的评估显示:增大模型尺寸对理解、事实核查、有害语言识别等任务提升最大;而逻辑推理、数学推理相关任务从架构缩放中获益较少。

figure14
来源:https://arxiv.org/abs/2112.11446 中的图

(15) 《训练计算最优的大语言模型》(2022)

作者:Hoffmann, Borgeaud, Mensch, Buchatskaya, Cai, Rutherford, de Las Casas, Hendricks, Welbl, Clark, Hennigan, Noland, Millican, van den Driessche, Damoc, Guy, Osindero, Simonyan, Elsen, Rae, Vinyals, Sifre
https://arxiv.org/abs/2203.15556

这篇论文提出了700亿参数的Chinchilla模型,在生成建模任务上表现超过了热门的1750亿参数GPT-3模型。而它最核心的结论是:当代大语言模型“训练程度严重不足”。

论文定义了大语言模型训练的线性缩放定律。比如,尽管Chinchilla的参数规模只有GPT-3的一半,但它的表现超过了GPT-3,因为它的训练token量达到了1.4万亿(而GPT-3只有3000亿)。换句话说,训练token的数量与模型规模同等重要。

figure15
来源:https://arxiv.org/abs/2203.15556

(16) 《Pythia:一套用于跨训练与缩放阶段分析大语言模型的工具集》(2023)

作者:Biderman, Schoelkopf, Anthony, Bradley, O’Brien, Hallahan, Khan, Purohit, Prashanth, Raff, Skowron, Sutawika, van der Wal
https://arxiv.org/abs/2304.01373

Pythia是一套开源大语言模型(参数规模从70M到12B),用于研究大语言模型在训练过程中的演化规律。

其架构与GPT-3类似,但包含一些改进,比如Flash Attention(见https://arxiv.org/abs/2302.13971)和旋转位置编码(见https://arxiv.org/abs/2204.02311)。Pythia的训练数据为https://arxiv.org/abs/2101.0027(825GB),训练量为3000亿token(在普通Pile数据集上约1个epoch,在去重Pile数据集上约1.5个epoch)。

figure16
Pythia模型系列,引自https://arxiv.org/abs/2304.01373

Pythia研究的主要结论如下:

  • 在重复数据上训练(由于大语言模型的训练方式,这意味着训练超过1个epoch)对性能没有提升也没有损害。
  • 训练顺序不影响记忆效果。这一点比较遗憾,因为如果反过来成立的话,我们就可以通过重排训练数据来缓解不好的逐字记忆问题。
  • 预训练词频会影响任务表现。比如,出现更频繁的词,少样本准确率往往更高。
  • 批次大小翻倍会让训练时间减半,但不会影响收敛效果。

对齐——让大语言模型朝着预期目标与方向发展

近年来,我们已经看到很多能力相当不错的大语言模型都能生成逼真的文本(比如GPT-3、Chinchilla等等)。似乎我们用常用的预训练范式已经摸到了天花板。

为了让语言模型更有用,减少错误信息与有害内容,研究者设计了额外的训练范式,对预训练好的基础模型进行进一步微调。

(17) 《利用人类反馈训练语言模型遵循指令》(2022)

作者:Ouyang, Wu, Jiang, Almeida, Wainwright, Mishkin, Zhang, Agarwal, Slama, Ray, Schulman, Hilton, Kelton, Miller, Simens, Askell, Welinder, Christiano, Leike, Lowe
https://arxiv.org/abs/2203.02155

在这篇被称为InstructGPT的论文中,研究者使用了人类参与的强化学习机制(RLHF)。他们以预训练的GPT-3基础模型起步,第一步先用人类生成的指令-响应对进行监督学习微调;第二步,让人类对模型输出进行排序,以此训练奖励模型;第三步,用奖励模型作为奖励信号,通过近端策略优化算法对经过预训练与微调的GPT-3模型进行强化学习更新。

顺带一提,这篇论文也被认为是ChatGPT背后的思路来源——根据近期传闻,ChatGPT就是InstructGPT的放大版本,在更大的数据集上完成了微调。

figure17
来源:https://arxiv.org/abs/2203.02155

(18) 《宪法AI:来自AI反馈的无害性》(2022)

作者:Yuntao, Saurav, Sandipan, Amanda, Jackson, Jones, Chen, Anna, Mirhoseini, McKinnon, Chen, Olsson, Olah, Hernandez, Drain, Ganguli, Li, Tran-Johnson, Perez, Kerr, Mueller, Ladish, Landau, Ndousse, Lukosuite, Lovitt, Sellitto, Elhage, Schiefer, Mercado, DasSarma, Lasenby, Larson, Ringer, Johnston, Kravec, El Showk, Fort, Lanham, Telleen-Lawton, Conerly, Henighan, Hume, Bowman, Hatfield-Dodds, Mann, Amodei, Joseph, McCandlish, Brown, Kaplan
https://arxiv.org/abs/2212.08073

在这篇论文中,研究者将对齐的思路更进一步,提出了一种打造“无害”AI系统的训练机制。与直接的人类监督不同,研究者提出了一种基于人类制定的规则清单的自训练机制。和上面提到的InstructGPT论文类似,该方法也采用了强化学习思路。

figure18
来源:https://arxiv.org/abs/2212.08073

(19) 《Self-Instruct:用自生成指令对齐语言模型》(2022)

作者:Wang, Kordi, Mishra, Liu, Smith, Khashabi, Hajishirzi
https://arxiv.org/abs/2212.10560

指令微调是我们从GPT-3这类预训练基础模型,得到ChatGPT这类能力更强的大语言模型的关键。而像https://github.com/databrickslabs/dolly/tree/master/data 这样的开源人类生成指令数据集,能帮助实现这一点。但我们要如何规模化?方法之一就是让大语言模型利用自身的生成结果进行自举。

Self-Instruct就是一种(几乎无需标注的)将预训练大语言模型与指令对齐的方法。

它的工作原理是什么?简而言之,这是一个四步流程:

  1. 用一组人工编写的指令(本例中为175条)构建种子任务池,并采样指令。
  2. 用预训练大语言模型(比如GPT-3)判断任务类别。
  3. 给定新指令,让预训练大语言模型生成回复。
  4. 对回复进行收集、修剪、过滤,再加入任务池。

figure19
Self-Instruct方法的注解版示意图,引自https://arxiv.org/abs/2212.10560

在实践中,从ROUGE分数来看,这种方法效果相当不错。
比如,经过Self-Instruct微调的大语言模型表现优于GPT-3基础模型(1),且能与在大规模人工编写指令集上预训练的大语言模型媲美(2)。同时,Self-Instruct也能让已经经过人类指令微调的大语言模型进一步获益(3)。

当然,评估大语言模型的黄金标准是人类评分。基于人类评估的结果显示,Self-Instruct的表现优于基础模型,也优于以监督方式在人类指令数据集上训练的模型(SuperNI、T0 Trainer)。但有意思的是,Self-Instruct的表现并没有超过通过人类反馈强化学习(RLHF)训练的方法。

人工生成指令数据集和自指令数据集,哪个更有前景?我认为两者都有价值。为什么不先从人工生成的指令数据集(比如Dolly的15000条指令,见https://github.com/databrickslabs/dolly/tree/master/data)起步,再用Self-Instruct进行规模化呢?

人类反馈强化学习(RLHF)

关于人类反馈强化学习(RLHF)的更多解释,以及实现RLHF的近端策略优化相关论文,请看我更详细的文章:
https://magazine.sebastianraschka.com/p/llm-training-rlhf-and-its-alternatives

https://substack.com/profile/27393275-sebastian-raschka-phd
·
2023年9月10日

https://magazine.sebastianraschka.com/p/llm-training-rlhf-and-its-alternatives

我在讨论大语言模型时,无论是研究资讯还是教程,都会频繁提到**人类反馈强化学习(Reinforcement Learning with Human Feedback, RLHF)**这个流程。RLHF是现代大语言模型训练流水线中不可或缺的一环,它能将人类偏好融入优化过程,从而提升模型的有用性与安全性。

https://magazine.sebastianraschka.com/p/llm-training-rlhf-and-its-alternatives

结语与延伸阅读

我尽量让上面的清单保持精简,聚焦于最核心的10篇论文(外加3篇RLHF相关的补充论文),帮助理解当代大语言模型背后的设计、局限与演进。

想要进一步阅读的话,建议参考上面提到的论文中的参考文献。或者,我再给你一些额外的方向(这些清单并不全面):

GPT的开源替代方案

ChatGPT替代方案

计算生物学中的大语言模型

这本杂志是我的个人兴趣项目。如果愿意支持我的话,可以考虑购买我的书:https://amzn.to/4fqvn0D 。(我相信你会从这本书里收获很多,因为它对大语言模型工作原理的讲解深度是其他地方找不到的。)

figure20

https://amazon.com/Build-Large-Language-Model-Scratch/dp/1633437167 现已在亚马逊上架

如果你读了这本书,并且能抽出几分钟时间,我会非常感谢你去亚马逊留下评价:https://www.amazon.com/Build-Large-Language-Model-Scratch/dp/1633437167 。这对我们作者帮助很大!

另外,我最近也在Substack上开通了付费订阅选项,可以直接支持这本杂志。

【转载】大语言模型3.0

原文地址:
Large Language Models 3.0,by Sebastian Raschka, on 2023-04-04

大语言模型3.0

大语言模型 1.0。距离初代Transformer模型、BERT、BLOOM、GPT-1到GPT-3等众多模型的出现,已经过去了大约五年时间。这一代大语言模型(LLM)以PaLM、Chinchilla和LLaMA为巅峰代表。第一代Transformer的共同特点是,它们都在大规模无标注文本语料库上完成预训练。

大语言模型 2.0。近期,我们看到许多预训练LLM在标注目标数据上进行微调,方式包括基于人类反馈的强化学习,或是更经典的监督学习目标——这一点我在上一期《Ahead of AI》中已有讨论。第二代LLM的典型代表包括InstructGPT和ChatGPT,还有Alpaca和Bard(本期通讯会讨论)。

大语言模型 3.0。思考第三代大语言模型会是什么样子,是件很有意思的事。近几个月的热门方向是参数高效微调,以及在领域特定数据上进行预训练(相关案例会在本期后面讨论)。但参数高效微调和领域特定数据预训练,本质上是让LLM的计算效率和数据效率更高的手段。而下一代LLM的核心,很可能会围绕多模态与多任务学习展开,为大语言模型带来全新的能力。我预计未来几个月这一方向会涌现更多研究。

本期通讯涵盖了近期围绕参数效率与多模态的大语言模型相关内容。值得一提的是,这个月开源AI领域的进展格外亮眼,因此本期的「开源亮点」部分会特别精彩。

文章与趋势

拓展LLaMA

上个月,Meta推出的LLaMA作为GPT-3的替代方案引发了巨大反响(我们在《Ahead of AI》第6期《训练方式之变》中介绍过LLaMA:https://magazine.sebastianraschka.com/p/ahead-of-ai-6-train-differently )。AI研究领域如今发展速度之快,体现在已经有大量项目基于LLaMA展开二次开发。

其中最受关注的项目之一是Alpaca。Alpaca是一个基于7B参数LLaMA模型、经过指令微调的7B语言Transformer。不过,它没有采用基于人类反馈的强化学习(RLHF,相关介绍见:https://magazine.sebastianraschka.com/p/ahead-of-ai-6-train-differently ),而是使用5.2万条指令-输出对进行监督式微调。

研究人员没有使用人工生成的指令-输出对,而是通过调用基于GPT-3的text-davinci-003模型来获取数据。因此,Alpaca本质上采用的是一种弱监督,或者说带有知识蒸馏风格的微调方式。值得注意的是,这种方式的效果可以媲美人工标注。例如在《Self-Instruct》论文(https://arxiv.org/abs/2212.10560)中,作者发现让模型基于自身生成的内容进行迭代提升,最终效果可以与InstructGPT相当。

figure01

Alpaca方法的截图,来源:https://crfm.stanford.edu/alpaca/

训练方案开源地址:https://github.com/tatsu-lab/stanford_alpaca 。据作者称,使用8张A100 GPU即可复现,预算约600美元。

如果作者正在撰写Alpaca的研究论文,这里有几个小小的期待点:

  • 为什么是5.2万条指令-输出对(而不是更多或更少)?这里的微调缩放定律是怎样的?
  • 这里的监督微调效果,与基于近端策略优化(PPO)的微调相比如何?
  • 如果把text-davinci-003换成ChatGPT的GPT-3.5或GPT-4,性能会有显著差异吗?

注意Alpaca官网(https://crfm.stanford.edu/alpaca/ )近期已下线,但项目仍可在GitHub获取:https://github.com/tatsu-lab/stanford_alpaca 。Alpaca下线的原因可见:https://www.theregister.com/2023/03/21/stanford_ai_alpaca_taken_offline/ ——原因是它“可能生成虚假信息、传播社会刻板印象,并产生有害语言”。

让微调更高效

传统上,我们微调大语言模型的方式要么是更新全部层,要么是只替换更新输出层——根据我的经验,更新全部层的计算量更大,但最终预测性能要好得多(我会在即将推出的《深度学习基础》课程第8单元中讲解这一点:https://lightning.ai/pages/courses/deep-learning-fundamentals/ )。

figure02

经典微调范式。

近期,研究者开始关注另一种更节省计算与显存的微调范式。这类范式通常被称为参数高效微调方法。本期我不展开详细讲解这些技术,但推荐上周发布的这篇出色综述:https://arxiv.org/abs/2303.15647 ,内容非常全面。

figure03

大语言模型的参数高效微调技术,来源:https://arxiv.org/abs/2303.15647

下面要介绍的LLaMA-Adapter,就是一项值得关注的新型参数高效微调技术。

用于LLM参数高效微调的LLaMA-Adapter

在论文《LLaMA-Adapter: Fine-tuning Language Models with ZeroInit Attention》(https://arxiv.org/abs/2303.16199)中,作者提出了一种适配器方法,可用于对LLaMA进行指令微调。

与前面提到的Alpaca方法(https://github.com/tatsu-lab/stanford_alpaca )不同,LLaMA-Adapter不会端到端地微调整个模型。相反,它在预训练、权重冻结的LLaMA模型(https://ai.facebook.com/blog/large-language-model-llama-meta-ai/)之上,只新增了120万参数的小型适配器。

使用与Alpaca相同的5.2万条指令跟随样本,最终效果与Alpaca相当。但Alpaca在8张A100上需要训练3小时,而LLaMA-Adapter的微调时间仅为其三分之一。(注:论文中提到效果相当,但我没找到具体的指标数据。)

为了在实际中取得良好效果,研究者还提出了一种初始化为全零的门控机制,防止训练初期适配器干扰预训练LLaMA模型的性能。

figure04

来自论文https://arxiv.org/abs/2303.16199的标注图表

这种适配器方法的特别之处在于,它允许我们接入其他输入模态,比如图像和视频token——这就引出了下一个话题:多模态LLM。

多模态或许是下一个风口:PaLM-E

大语言模型(LLM)的下一步是什么?遗憾的是,很难断言。我们看到纯文本模型的表现越来越好。但很难说我们是否正在接近纯文本LLM的能力上限——无论是在通用语料上预训练,还是在标注目标数据集上微调。

我非常确定,未来还会有大量研究和实验,致力于让纯文本模型表现更优——比如通过增加参数量、扩大数据集,或是改进架构与训练技术。

尽管如此,思考LLM未来发展的其他方向依然很有意思。比如,下一个趋势可能会聚焦于拓展视觉能力、其他模态,以及多任务训练。

去年,谷歌发布了PaLM(https://arxiv.org/abs/2204.02311 )——一个强有力的GPT竞品。大约一年后的现在,PaLM-E(https://arxiv.org/abs/2303.03378 )刚刚发布。我们来看看它的核心内容。

PaLM-E的研究重点是机器人操作规划。但有意思的是,当在多模态输入上训练后,该模型也展现出了视觉问答和图像字幕的涌现能力。当然,PaLM-E不是第一个支持图像输入的语言模型。但它的新颖之处在于,一张或多张图像可以灵活地嵌入到句子的任意位置。

需要说明的是,PaLM-E仍然是一个纯解码器架构的LLM,基于给定的前缀或提示自回归地生成文本补全。那么它们是如何让模型支持状态表示或图像输入的呢?很简单:它们预训练了专门的网络,将这些输入编码为嵌入向量。例如对于图像,他们实验了4B与22B参数的视觉Transformer(ViT)来生成嵌入向量,再通过线性投影匹配词元嵌入的维度。

训练时,为了构成多模态句子,它们使用特殊token(<img1><img2>等,如上图所示),之后再替换为嵌入后的图像(类似于词元通过嵌入层生成嵌入的方式)。

最值得探讨的问题是:我们是否应该冻结预训练LLM,只训练ViT嵌入网络?结果显示,微调LLM的效果更好,而“全混合”联合训练的性能更是提升了一倍以上。也就是说,这篇论文最大的结论是:与针对单个任务分别训练模型相比,多任务训练能提升性能。

figure05

来自PaLM-E论文的标注图,https://arxiv.org/abs/2303.03378

其他多模态LLM(MLLM)

当然,PaLM-E不是第一个、也不是唯一支持多模态的LLM(即MLLM)。其他近期或知名的例子包括:

从零开始训练大语言模型值得吗?

在领域特定数据上从零开始训练自己的大语言模型(LLM)是否值得?彭博社的研究者就这么做了,并且分享了一份详细的技术报告,介绍了数据集、模型配置和训练流程。根据我的经验,如果我们要把LLM应用在全新的数据源上(比如蛋白质氨基酸序列,相关研究见:https://academic.oup.com/bioinformatics/article/38/8/2102/6502274 等),这么做是有意义的。但对于金融文章这类相近领域的数据呢?

figure06

LLM预训练与微调的不同方式。

我们来详细聊聊这篇论文提出的模型:https://arxiv.org/pdf/2303.17564.pdf 。BloombergGPT是一个500亿参数的金融领域语言模型,在3630亿token的金融数据和3450亿token的公开通用数据集上训练而成。作为对比,GPT-3的参数量是它的3.5倍(1750亿参数),但训练token数仅为它的1/1.4(4990亿)。

当然,BloombergGPT在金融相关任务上的表现超过了其他LLM。有意思的是,它在通用语言任务上的表现也依然出色。我很想知道,如果采用两阶段预训练,或是在领域特定数据上做领域专属微调,会不会在领域数据上取得更好的效果。我猜作者没有做这些实验是出于成本考虑。

这就引出了下一个话题:这个模型是用什么硬件训练的?该模型在AWS上使用64组、每组8张A100 GPU,训练了约53天。粗略估算一下,假设A100 GPU的优惠价格是每小时1.1美元,那么总时长1274小时 × 1.1美元/小时 × 64×8张GPU = 70万美元——考虑到LLaMA论文(https://arxiv.org/abs/2302.13971)报道的训练成本是60万美元,这个数字听起来还不算太高。但需要注意的是,这个数字不包含超参数优化和失败的训练跑次。

为什么作者选择了“只有”500亿参数的架构,毕竟GPT-3是它的3.5倍大?答案很简单:他们采用了Chinchilla缩放定律,结合可用金融数据的规模,认为这个参数量是合适的。

在混合数据集上从零开始(预)训练LLM值得吗?从论文来看,模型在目标领域的表现非常好。但我们不知道它是否比以下两种方案更好:a)在预训练模型的基础上,用领域特定数据继续预训练;b)在预训练模型上做领域特定微调。

为什么他们没有基于BLOOM等现有LLM做微调或者继续训练?微调(通过RLHF或监督微调)可能更难自动化。而且他们可能不想基于现有模型继续训练,因为按照缩放定律,BLOOM模型的尺寸是它的3.5倍,太大了。

不过,如果你想采用混合预训练的方法,BloombergGPT提供了一份描述非常详尽的方案,包括架构、数据集和超参数的详细说明。

其他领域的模型

注意,BloombergGPT不是第一个从零开始在专有领域数据上训练的模型。已有大量在生物医学或法律文档上训练的模型案例。近期的一个例子是2月份分享的论文:https://arxiv.org/abs/2302.08091

figure07

来自https://arxiv.org/abs/2302.08091的标注截图

通用架构与训练改进:中间相遇

我之前提到过,纯语言模型会有更多架构和训练上的优化。这一类的其中一篇论文是https://arxiv.org/abs/2303.07295 。这篇论文提出了一种双向LLM,在预训练时利用完整序列信息,推理时利用双向上下文。

这里的“双向”不同于BERT风格的编码器——后者使用掩码语言建模来预测被掩码的词。相反,在“中间相遇”(Meet in the Middle, MiM)方法中,它们像双向LSTM那样,分别从左到右和从右到左处理序列。

乍一看,这个思路和BiLSTM很像。但其实是不同的方法:它不是把前向和后向的隐藏状态拼接起来。相反,MiM的核心是让两者达成一致。它们用一个正则项,强制两个方向生成相似的token。

这种方法没有额外的参数开销,因为前向和后向共享同一个解码器。而且,如果并行度足够,它甚至可以更快——如果两个模型生成的结果完全一致,每个模型只需要自回归生成一半的序列。

注意:我觉得对于“补全提示”类的查询,MiM在推理阶段可能不适用,但对于指令类查询,我看不出有什么问题。

推理时也可以丢弃后向路径——也就是说,训练时利用后向路径更好地利用数据,推理时只使用前向解码器。但根据消融实验,双向模型的表现还是优于单向模型。

figure08

来自https://arxiv.org/abs/2303.07295的标注图

机器学习竞赛格局

机器学习竞赛往往能很好地反映哪些技术在新数据集上真正实用。3月发布的这份全面报告《2022年机器学习竞赛现状》(https://mlcontests.com/state-of-competitive-machine-learning-2022/ )包含了很多有意思、甚至出人意料的发现!以下是几个核心结论。

不出所料,Transformer主导自然语言处理(NLP)领域。所有NLP相关的获奖方案都使用了Transformer。

卷积神经网络仍然主导计算机视觉领域。EfficientNet是计算机视觉最流行的预训练架构——大多数人都会微调预训练模型,而不是从零开始训练。

使用k折交叉验证的获奖方案,数量几乎是使用固定验证集的两倍。

Kaggle(勉强)仍是最受欢迎的竞赛平台。

几乎所有人都用Python。

在46个使用深度学习的获奖方案中,44个用了PyTorch,只有2个用了TensorFlow。

表格数据竞赛的一大意外:XGBoost的统治似乎结束了。虽然梯度提升仍然赢下了大多数表格竞赛,但LightGBM现在是更受青睐的方法,CatBoost紧随其后,XGBoost位列第三。

10场表格竞赛中,有7场的获胜方案使用了梯度提升,5场使用了深度神经网络(基于PyTorch实现),而且大多数获奖方案都是集成方法。

figure09

来自https://mlcontests.com/state-of-competitive-machine-learning-2022/的标注截图

研究亮点(两句话以内)

自从上一期《Ahead of AI》发布以来,还有很多其他精彩的新研究论文。遗憾的是,全部介绍的话这篇通讯就要变成一本书了。所以我决定新增一个「研究亮点」板块,只链接我觉得特别有意思的其他研究者论文。

自然语言处理

  • 《为长序列重振循环神经网络》https://arxiv.org/abs/2303.06349
    循环神经网络在长序列推理时效率很高,但训练速度慢,且难以优化。这篇论文提出了线性循环单元,证明经过精心设计的循环神经网络,在长序列任务上表现出色,同时训练速度也很可观。
  • 《单GPU实现大语言模型高吞吐量生成推理》https://arxiv.org/abs/2303.06865
    这篇论文介绍了FlexGen——一个专为显存有限的GPU运行LLM设计的高吞吐量生成引擎。
  • 《带人类偏好的语言模型预训练》https://arxiv.org/abs/2302.085
    该研究表明,在语言模型预训练阶段就融入人类反馈,相比“先预训练、再用反馈微调”的标准方案,能带来显著更优的偏好满足度——后者还涉及学习再遗忘不良行为的过程。结果表明,在语言模型预训练阶段就超越模仿学习、从一开始就纳入人类偏好,是更可取的做法。
  • 《Hyena层级结构:迈向更大的卷积语言模型》https://arxiv.org/abs/2302.10866
    Hyena是注意力的一种替代方案,它使用隐式参数化的长卷积和数据控制门控。在标准数据集(WikiText103和The Pile)上,Hyena为无注意力的稠密架构语言模型树立了新的业界标杆,在序列长度为2K时,达到Transformer的质量,同时训练计算量减少20%。
  • 《AI生成内容(AIGC)综合综述:从GAN到ChatGPT的生成式AI发展史》https://arxiv.org/abs/2303.04226
    一份数字内容生成的历史与综述,涵盖图像与文本,主题从GAN到ChatGPT应有尽有。
  • 《面向决策的基础模型:问题、方法与机遇》https://arxiv.org/abs/2303.04129
    预训练大语言模型有望为对话、自动驾驶、医疗、教育、机器人等应用打造强大的新系统。这篇论文概述了该领域的近期研究。

计算机视觉

  • 《一致性模型》https://arxiv.org/abs/2303.01469
    一致性模型是一类新型生成模型,无需对抗训练就能生成高质量样本。它们旨在克服扩散模型的局限,支持快速的单步图像生成。
  • 《面向文生图的GAN规模化》https://arxiv.org/abs/2303.05511
    GigaGAN实现了文生图的规模化,让模型能够利用大规模数据集。GigaGAN架构有诸多优势,包括推理速度大幅提升、生成高分辨率图像,以及支持多种潜空间编辑应用。
  • 《你的扩散模型其实是零样本分类器》https://arxiv.org/abs/2303.16203
    论文讨论了大规模文生图扩散模型带来的文本图像生成能力显著提升,这些模型还能提供条件密度估计,可用于图像生成之外的任务。最后,论文提出了一种名为扩散分类器的生成式分类方法,利用文生图扩散模型的密度估计,无需额外训练即可实现零样本分类。
  • 《视觉ChatGPT:用视觉基础模型对话、绘图与编辑》https://arxiv.org/abs/2303.04671v1
    视觉ChatGPT系统让用户能够同时使用语言和图像与ChatGPT交互,处理需要多个AI模型协作的复杂视觉问题或编辑指令。
  • 《迈向普惠化的联合嵌入自监督学习》https://arxiv.org/abs/2303.01986
    这篇论文旨在降低SimCLR这类图像自监督学习方法的门槛(我会在即将推出的《深度学习基础》课程第7单元讲解SimCLR:https://lightning.ai/pages/courses/deep-learning-fundamentals/ )。研究者简化了SimCLR,并证明仅用单个图像块作为负样本、仅用基础高斯噪声作为正样本对的数据增强,就可以训练SimCLR学到有价值的表示。
  • 《用于图文预训练的Sigmoid损失》https://arxiv.org/abs/2303.15343
    论文提出了一种简单的成对sigmoid损失用于图文预训练,不需要全局计算成对相似度来做归一化。通过这种方法,他们使用大模型和大批次,在两天内就在ImageNet零样本分类上取得了高精度。

头条新闻

去年12月ChatGPT首次推出时,仿佛真正打开了AI的闸门。从那以后,AI进入了大众视野,大语言模型的相关新闻仍然占据各大媒体头条。而且,每个月大语言模型的发展都在加速。由于很多公司最近才跟风开始训练自己的模型(见上文的BloombergGPT),而训练需要时间,我相信到今年年底,大语言模型会无处不在。

ChatGPT

ChatGPT竞品

AI监管

开源亮点

这个月对开源来说是格外丰收的一个月。此前人们担心AI发展正走向闭源(比如GPT-4),但开源领域如今重振旗鼓、势头向好,非常棒。

PyTorch 2.0

虽然2022年12月的PyTorch大会就已经公布过(并且在《Ahead of AI》第3期也有介绍:https://magazine.sebastianraschka.com/p/ahead-of-ai-3-ainnouncements ),但PyTorch 2.0正式版在3月15日终于发布了:https://pytorch.org/blog/pytorch-2.0-release/ 。正如之前宣布的,两大核心亮点是100%向后兼容,以及新增的可选功能torch.compile,用于编译模型计算图。

我最近用torch.compile微调了一个BLOOM模型(https://sebastianraschka.com/blog/2023/llm-grad-accumulation.html ),确实感受到了非常显著的速度提升(注意:训练时间越长,模型越能从编译中获益)。

figure10

来源:https://sebastianraschka.com/blog/2023/llm-grad-accumulation.html

Lightning 2.0:面向PyTorch的Trainer 2.0与Fabric加速训练

Lightning 2.0于本月发布,更新了开源的Lightning PyTorch模型库(https://lightning.ai/docs/pytorch/stable/common/trainer.html),以及全新的开源Fabric库(https://lightning.ai/docs/fabric/stable/ )——通过先进的多GPU训练范式、混合精度训练等特性,加速原生PyTorch训练循环。

figure11

使用Fabric修改后的PyTorch训练循环示意图

你可以在这里查看Lightning 2.0的更新日志:https://lightning.ai/docs/pytorch/stable/generated/CHANGELOG.html

最近我写了一篇博客《让你的PyTorch模型训练(大幅)提速的几个技巧》,用到了Trainer 2.0和Fabric,如果你想看微调大语言模型的实战案例,可以去看看。

figure12

博客文章截图

Lit-LLaMA

https://github.com/Lightning-AI/lit-llama 是Meta的LLaMA大语言模型(相关讨论见:https://magazine.sebastianraschka.com/i/106859367/smaller-large-language-models )的重写实现,基于nanoGPT(https://github.com/karpathy/nanoGPT )开发。重写的动机是:LLaMA官方仓库只包含推理代码,没有训练代码。此外,原版LLaMA代码采用GPL许可证,与其他多个开源许可证不兼容;而Lit-LLaMA采用宽松的Apachev2开源许可证。

figure13

Lit-LLaMA示例,来源:https://github.com/Lightning-AI/lit-llama

GPT4All

这个项目演示了如何使用Meta的LLaMA(https://github.com/facebookresearch/llama )训练大语言模型。团队还公开了他们收集的数据、数据处理流程、训练代码和最终模型权重。此外,他们还分享了模型的4比特量化版本,可以在笔记本CPU上运行。代码采用GPL许可证。

figure14

与GPT4All的交互,来源:https://github.com/nomic-ai/gpt4all

Twitter算法

正是Twitter官方开源了其推荐算法:https://github.com/twitter/the-algorithm 。有意思的是,代码库中同时使用了TensorFlow和PyTorch。此外,scikit-learn、TorchMetrics、matplotlib等流行库也出现在仓库中。

仔细看他们的信任与安全模型部分(https://github.com/twitter/the-algorithm/tree/main/trust_and_safety_models ),会发现大多数预测语言模型都基于BERT——这是一个非常通用的编码器风格语言模型,我自己也很喜欢用它来做各种预测建模任务。

figure15

Twitter算法的代码截图,来源:https://github.com/twitter/the-algorithm/blob/main/trust_and_safety_models/toxicity/load_model.py

MLxtend 0.23

MLxtend是我维护了近十年的机器学习工具函数库。上周末我发布了新版本,感谢社区的贡献带来了诸多改进。其中包括:为热门的plot_decision_regions函数新增多进程支持,以及全新的频繁模式挖掘算法H-Mine。更多内容见更新日志:https://rasbt.github.io/mlxtend/CHANGELOG/

名言

“对于这些架构为何有效,我们给不出任何解释;和其他一切一样,我们将它们的成功归于神的善意。”
——Noam Shazeer(初代Transformer论文的第二作者),出自论文https://arxiv.org/abs/2002.05202v1


这本杂志是我的个人热情项目,不提供直接报酬。不过,如果您愿意支持我,可以考虑购买我的书:https://sebastianraschka.com/books 。如果您觉得这些书有见地、有帮助,欢迎推荐给您的朋友和同事。

figure16

https://www.amazon.com/Machine-Learning-PyTorch-Scikit-Learn-scikit-learn-ebook-dp-B09NW48MR1/dp/B09NW48MR1/https://nostarch.com/machine-learning-and-ai-beyond-basics ,以及http://mng.bz/M96o

您的支持对我意义重大!非常感谢!

【转载】换个方式训练AI:我们需要基于人类反馈的强化学习(RLHF)吗?

原文地址:
TrAIn Differently: Do We Need Reinforcement Learning with Human Feedback (RLHF)?,by Sebastian Raschka, on 2023-03-07

换个方式训练AI:我们需要基于人类反馈的强化学习(RLHF)吗?

本月,深度学习与人工智能领域的研究工作高度聚焦于Transformer的新型或差异化训练范式。

本期通讯的第一部分将深入探讨如何将人类反馈整合到大语言模型中,以及其他聚焦于优化训练流程的研究论文。
接下来,我们将回顾本月的重大新闻头条,然后介绍值得关注的开源库与相关发布。
最后,我会分享我个人研读科研论文的方法,同时分析一篇探讨视觉Transformer扩展至百亿参数规模的论文。

附言:如果您看到的通讯内容有截断,那是因为部分邮件服务商可能会对较长的邮件进行删减。遇到这种情况,您可以访问 https://magazine.sebastianraschka.com/ 查看全文。

论文与行业趋势

在我们深入探讨最新发表的几篇论文之前,先来明确近期研究领域的核心背景与问题:如何利用人类反馈提升大语言模型(LLM)的输出效果。目前,强化学习是将人类偏好或反馈融入预训练大语言模型、实现模型进一步优化的最主流范式。

强化学习是机器学习的一个子领域,核心是训练智能体根据从环境中获得的奖励来做决策。在强化学习中,我们有一个策略(P),它将状态(S)映射为智能体采取的动作(A),并据此计算奖励(R)。目标是找到最优策略P*,以最大化累积奖励。在语言模型的场景下,我们可以把智能体看作大语言模型,包含输入词元与指令的集合构成状态空间S;所有可能的输出词元构成动作空间A;奖励则是来自人类反馈的对齐评分。最终,策略(P)本质上就是智能体针对给定状态决定采取何种动作的一套规则。

抛开上面这些强化学习的专业术语,我们可以将基于人类反馈的强化学习的大语言模型微调过程总结为下图所示的流程。

figure01

基于人类反馈的强化学习微调大语言模型的通用流程

在这里,人类反馈用于训练奖励模型(奖励模型本身的训练过程未在图中示出,它通常基于人类标注的标签,以常规监督学习的方式训练)。奖励模型通常是另一个语言模型,输出偏好标签、排序或分数。库尔贝克-莱布勒散度损失(KL损失)用于保证微调后的模型不会与原始预训练模型偏离过大。奖励模型对人类偏好进行编码,并为模型输出打上“内容质量”标签。最终,近端策略优化(PPO算法)根据奖励信号更新预训练大语言模型。

更多关于基于人类反馈的强化学习(RLHF)的学习资源

尽管基于人类反馈的强化学习(RLHF)或许无法彻底解决当前大语言模型存在的问题,但它仍是目前公认的最优方案之一。这一结论的依据是,ChatGPT等当前一代大语言模型的输出质量,相较于其底层基础模型(如GPT-3)有显著提升。未来我们很可能也会看到RLHF在大语言模型之外的更多领域得到更具创新性的应用。

鉴于RLHF至少在近期内都会是极具影响力的方法,在我们深入本月最新研究进展之前,我在下方分享五篇额外的科研论文,供想要进一步了解RLHF的读者参考。

(1) https://arxiv.org/abs/1602.01783 https://arxiv.org/abs/1602.01783 介绍了策略梯度方法,可作为深度强化学习中Q学习的替代方案。

(2) (https://arxiv.org/abs/1707.06347) (file:///Users/sebastian/Developer/github_rasbt/ahead-of-ai/issues_drafts/newsletter-6/)(https://arxiv.org/abs/1707.06347) 提出了一种改进的基于近端策略的强化学习流程,相比上述基础版策略优化算法,数据效率更高,可扩展性更强。

(3) https://arxiv.org/abs/1909.08593 https://arxiv.org/abs/1909.08593 阐述了将PPO与奖励学习应用于预训练语言模型的思路,其中加入了KL正则化,避免策略与自然语言偏离过远。

(4) https://arxiv.org/abs/2009.01325 https://arxiv.org/abs/2009.01325 介绍了广为流行的RLHF三步流程:

  1. 对GPT-3进行预训练
  2. 以监督学习方式对其进行微调
  3. 同样以监督学习方式训练奖励模型

随后,微调后的模型会借助该奖励模型,通过近端策略优化进行训练。
论文同时表明,相比单纯使用常规监督学习,结合近端策略优化的强化学习能得到效果更优的模型。

(5) (file:///Users/sebastian/Developer/github_rasbt/ahead-of-ai/issues_drafts/newsletter-6/)(https://arxiv.org/abs/2203.02155)( file:///Users/sebastian/Developer/github_rasbt/ahead-of-ai/issues_drafts/newsletter-6/)(https://arxiv.org/abs/2203.02155)(即知名的InstructGPT论文)采用了与上述类似的RLHF三步流程,但它的研究重点不是文本摘要,而是根据人类指令生成文本。此外,该研究使用标注者将输出从优到劣进行排序(而非仅对人类生成文本与AI生成文本做二元对比)。

RLHF的实践应用

如果你想动手实践RLHF,目前基于PyTorch的https://github.com/CarperAI/trlx 代码库似乎是最便捷的方案之一。

我们应该更早引入人类反馈吗?

尽管https://arxiv.org/abs/2203.02155 这篇论文(以及ChatGPT模型)去年已经证明,通过奖励模型利用人类反馈微调预训练大语言模型可以提升模型效果,但一个有趣的问题是:如果在预训练过程中(而非预训练之后)就引入奖励模型,是否能带来更大的收益?

答案是肯定的,确实可以!在2023年2月发表的https://arxiv.org/abs/2302.08582 中,研究人员发现,在预训练阶段就通过奖励模型融入人类偏好,最终得到的大语言模型生成的文本更符合人类偏好,即便遭受对抗性攻击时也是如此。

figure02

来源:https://arxiv.org/abs/2302.08582

我们真的需要RLHF吗?

但为什么最新的语言Transformer模型(比如ChatGPT等大语言模型)会选择用强化学习(RL)做微调,而不是常规的监督学习(SL)呢?

这个问题的产生很自然,因为RL范式(即RLHF,带人类反馈的强化学习)也需要标签来训练奖励模型。那为什么不直接用这些标签通过监督学习来微调模型呢?

(1) 在监督学习中,我们通常最小化真实标签与模型输出之间的差异。而这里的标签是特定提示对应回复的排序分数。因此,常规监督学习会让模型去预测排名,而不是生成针对查询的文本回复。实际上,InstructGPT中的奖励模型就是这样训练的,如下图所示。

figure03

InstructGPT论文中的奖励模型训练,来源:https://arxiv.org/abs/2203.02155

(2) 好吧,那我们为什么不把任务重新定义为一个约束优化问题,构造一个包含“输出文本损失”和“奖励分数”项的组合损失,再用监督学习联合优化呢?毕竟我和同事之前在提出https://arxiv.org/abs/1712.00321https://arxiv.org/abs/2001.00561 等研究时,就用过类似的方案。

figure04

通过反向传播,以监督学习方式用不同损失分量训练或微调模型

当然,如果我们只需要模型生成正确的问答对,这种方法是可行的。但ChatGPT需要实现连贯的对话,因此我们更需要累积奖励。

(3) 回到第一点提到的监督学习的词元级损失:在监督学习中,我们通过交叉熵优化损失。根据求和规则,修改单个单词(词元)对整段文本的整体损失影响微乎其微。但否定一个词却可能彻底改变文本的含义,因此交叉熵并不是这类问题的最优损失函数。

(4) 当然,用监督学习训练模型并非不可能,https://arxiv.org/abs/2009.01325 这篇论文就做过相关尝试。但从目前的结果来看,其效果不如带人类反馈的强化学习。换句话说,从经验上看,RLHF的表现通常优于监督学习。这是因为监督学习使用的是词元级损失(可以对整段文本求和或取平均),而强化学习会将整段文本作为一个整体来考量。

(5) 这并非非此即彼的选择:InstructGPT和ChatGPT两者都用了。二者的结合似乎才是关键。ChatGPT(对应论文https://arxiv.org/abs/2203.02155)首先通过监督学习微调模型,再通过强化学习做进一步更新。

figure05

来源:https://arxiv.org/abs/2009.01325

如今,得益于ChatGPT的成功,RLHF成为了微调最新大语言模型的主流方式,但它显然不是未来唯一有前景的方案,正如我们刚才讨论的,监督学习也始终是可选方案之一。

用监督学习微调大语言模型

2023年2月发表的https://arxiv.org/abs/2302.05206 表明,监督学习方法用于大语言模型微调同样可以取得很好的效果。该研究提出了一种基于重标记的监督微调方法,在12项BIG-bench任务(https://github.com/google/BIG-bench)上的表现超过了RLHF。

该研究提出的HIR(事后指令标注,Hindsight Instruction Labeling)是如何运作的?简而言之,HIR方法包含采样和训练两个步骤。在采样阶段,向大语言模型输入提示与指令,收集模型的回复。在训练阶段,根据对齐评分,在合适的情况下对指令进行重标记。随后,使用重标记后的指令与原始提示来微调大语言模型。通过这种重标记方法,研究人员有效地将失败案例(即大语言模型生成的输出不符合原始指令的情况)转化为监督学习的有用训练数据。

figure06

来源:https://arxiv.org/abs/2302.05206

需要注意的是,这项研究无法与InstructGPT中的RLHF研究直接对比,因为它似乎使用了启发式方法(“但由于大多数人类反馈数据难以收集,我们采用了脚本化反馈函数……”)。不过HIR事后方法的结果依然十分有吸引力。

“小尺寸”大语言模型

尽管Meta的这些新模型是https://arxiv.org/abs/2005.14165 这类不使用RLHF的“原生”竞品,但仍值得一提:Meta在2023年2月的https://arxiv.org/abs/2302.13971 中发布了全新的LLaMA模型。由于其推理代码是开源的,且模型权重可申请用于研究目的,它们非常适合作为RLHF实验的预训练基线模型。以下是我研读LLaMA论文的几点心得。

https://arxiv.org/abs/2203.15556 的启发,LLaMA论文提出了一组“小尺寸”大语言模型:仅用130亿参数(不到GPT-3 1750亿参数的十分之一),性能就超过了GPT-3;而更大的650亿参数版本性能超过了PaLM-540B。

总而言之,该论文提出了一系列基于公开数据训练的更小的开源模型,性能超过了近年来部分闭源大语言模型。

figure07

来源:https://arxiv.org/abs/2302.13971

性能超越GPT-3的LLaMA模型,为之前的开源模型(如https://arxiv.org/abs/2205.01068https://arxiv.org/abs/2211.05100,据称性能不及GPT-3)提供了一个不错的替代选择。它们实现这种性能提升用到了哪些方法?论文提到了三点:(1)预归一化;(2)SwiGLU激活函数;(3)旋转位置编码。由于这些是研究模型,我本希望能看到消融实验,分析这些修改分别带来了多少性能提升,这似乎是一个遗憾的缺失。

此外,训练损失随训练词元数量变化的曲线呈现出陡峭的负斜率。如果将模型训练超过1-2个轮次,结果会如何?

figure08

该模型的代码仓库以GNU GPL v3.0许可证发布在GitHub上:https://github.com/facebookresearch/llama。仓库中仅包含推理代码,模型权重需提交申请后方可用于研究目的。

图像模型方面呢?

由于这一部分都在讲语言模型,我想至少补充一个图像模型相关的内容(另一篇会在下文“研读科研论文”部分介绍)。在2023年2月的https://arxiv.org/abs/2302.12192 中,研究人员提出了一种微调方法,利用(没错,又是)人类反馈来对齐生成模型。

整体而言,该方法与https://arxiv.org/abs/2203.02155 有几分相似,只不过这是文本生成图像的模型,生成的是图像而非文本。

如下图总结的那样,研究人员收集人类反馈,评估模型输出与各类文本提示的对齐程度。随后,他们利用人类标注的图文数据集训练奖励模型,再用该奖励模型微调文生图模型。

figure09

来源:https://arxiv.org/abs/2302.12192

行业头条

学术与研究领域

https://cvpr2023.thecvf.com/ 录用结果已公布。今年CVPR共收到9155份投稿(较2022年增长12%),录用率约为25%。录用论文名单可能会在未来几周内公布在https://openreview.net/group?id=thecvf.com/CVPR/2023/Conference

https://neurips.cc/ 2023年的论文投稿截止日期为2023年5月17日。

https://www.zeta-alpha.com/post/must-read-the-100-most-cited-ai-papers-in-2022 盘点2022年引用量最高的100篇AI论文

ChatGPT相关

谷歌发布Bard相关更新(https://blog.google/technology/ai/bard-google-ai-search-updates/),其技术基于LaMDA(https://ai.googleblog.com/2022/01/lamda-towards-safe-grounded-and-high.html)。去年夏天,一名谷歌软件工程师声称该AI聊天机器人具有自我意识,引发了巨大争议(相关报道:https://www.theguardian.com/technology/2022/jul/23/google-fires-software-engineer-who-claims-ai-chatbot-is-sentient)。

百度股价大涨,此前有消息称百度将于3月推出类ChatGPT产品文心一言(https://www.bloomberg.com/news/articles/2023-02-07/baidu-surges-after-prepping-chatgpt-style-ernie-bot-for-march)。

微软宣布将AI技术融入必应搜索引擎(https://blogs.microsoft.com/blog/2023/02/07/reinventing-search-with-a-new-ai-powered-microsoft-bing-and-edge-your-copilot-for-the-web/

据CNBC报道(https://www.cnbc.com/2023/02/07/microsoft-will-offer-chatgpt-tech-for-companies-to-customize-source.html),微软将允许企业基于自身数据训练并创建定制版ChatGPT。

AI生成短篇小说泛滥,导致知名科幻杂志《克拉克世界》(Clarkesworld)暂停征稿(相关报道:https://www.pcmag.com/news/sci-fi-mag-pauses-submissions-amid-flood-of-ai-generated-short-stories)。

OpenAI推出ChatGPT与Whisper API(https://openai.com/blog/introducing-chatgpt-and-whisper-apis),定价为每千词元0.002美元,据称成本比此前同类服务的首个版本降低了90%。

开源亮点

Pandas 2.0候选版发布!

我超爱Pandas!十多年前我刚开始做机器学习时就一直在用它。本月,全新的Pandas 2.0版本发布(文档:https://pandas.pydata.org/pandas-docs/version/2.0/index.html)。根据更新说明(https://pandas.pydata.org/pandas-docs/version/2.0/whatsnew/v2.0.0.html),好消息是本次更新以修复bug为主,没有重大API变更,因此Pandas 2.0基本可以兼容我们现有的代码库。

不过除了bug修复之外,本次更新也有几个令人兴奋的新特性。比如全新的Arrow后端。(Arrow是一种开源、跨语言的列式数据格式,用于在内存中表示数据,支持进程间零拷贝数据共享。)

我试用了一下Arrow后端,相比Pandas原本的NumPy后端,性能提升非常显著!事实上,它现在的性能已经非常接近https://www.pola.rs/ ——这款近期大热的、基于Rust开发的Python DataFrame替代方案。

figure10

基准测试对比:Pandas全新PyArrow后端、传统Pandas NumPy后端,以及Rust编写的Polars DataFrame库。我的基准测试代码可在GitHub查看:https://github.com/rasbt/machine-learning-notes/blob/main/benchmark/pandas-pyarrow/pandas2-pyarrow.ipynb

你可以通过以下命令安装Pandas 2.0候选版:

conda install -c conda-forge/label/pandas_rc pandas==2.0.0rc0
pip install --upgrade --pre pandas==2.0.0rc0

如果你想体验全新的Arrow后端,可以按每个DataFrame为单位,通过dtype属性启用,示例如下:

import numpy as np
import pandas as pd
import pyarrow as pa
numbers = np.random.rand(1_000_000, 100)
df = pd.DataFrame(numbers, dtype="float64[pyarrow]")

或者,如果你想默认使用Arrow作为后端,可以在Python会话或脚本中执行以下命令:

pd.options.mode.dtype_backend = "pyarrow"

PicoGPT——用NumPy实现的极简GPT

https://github.com/jaymody/picoGPT 是用NumPy编写的极简GPT实现,仅60行代码——当然这是用于教学目的的项目。此外,该仓库还包含加载GPT-2权重并实际运行的代码。

figure11

运行picoGPT的截图(来源:https://github.com/jaymody/picoGPT

基于LLaMA的ChatGPT训练开源实现

如前所述,Meta近期发布了LLaMA——一系列“小尺寸”大语言模型(最高650亿参数),性能超越GPT-3。https://github.com/nebuly-ai/nebullvm/tree/main/apps/accelerate/chatllama 基于预训练LLaMA模型,为其添加了基于人类反馈的强化学习(RLHF)组件。

JupyterLab 3.6发布

JupyterLab 3.6正式发布(公告:https://discourse.jupyter.org/t/jupyterlab-3-6-0-is-released/17808),本次更新优化了渲染速度与标签页切换性能,还新增了通知弹窗,用于提示未来的JupyterLab更新。本次版本的最大亮点是重构了实时协作功能(文档:https://jupyterlab.readthedocs.io/en/stable/user/rtc.html)。

Lazy Predict

这不是一个新库,但我本月发现的一个很有意思的工具:https://github.com/shankarpandala/lazypredict 只需两行代码,就能在给定数据集上运行scikit-learn中所有主流的分类(或回归)模型。当你处理表格数据集,想要快速得到预测性能基线时,这个工具非常实用。

figure12

使用lazypredict库的截图(来源:https://github.com/shankarpandala/lazypredict

精彩语录

“先选定评估指标,再做建模选择。不要使用AIC、BIC这类基于模型假设的指标。”
—— 克里斯托夫·莫尔纳(Christoph Molnar)

我很喜欢这句话,因为评估指标不需要,也不应该等同于优化指标。此外,我们可以把机器学习算法和模型看作(机器学习)系统中可替换的组件。因此,以模型无关的方式定义评估指标是合理的,这样便于模型之间的对比与升级。

赤池信息量准则(AIC,https://en.wikipedia.org/wiki/Akaike_information_criterion)和贝叶斯信息量准则(BIC,https://en.wikipedia.org/wiki/Bayesian_information_criterion)适用于参数数量可数、且具有似然函数的模型。因此,如果我们使用XGBoost分类器,情况就会有点棘手。XGBoost的参数数量是多少?更何况,使用XGBoost时,我们的主要目标可能是最大化新数据上的预测准确率,而非得到一个能精确表征底层数据生成过程的统计模型。

学习与效率技巧:如何研读科研论文

自从我创办《Ahead of AI》以来,不少人问我研读科研论文的技巧。既然问的人足够多了,我想分享一下我的方法应该会对大家有帮助。

但首先要说明几点:没有放之四海而皆准的论文阅读方法。这完全取决于我们在对应领域的知识水平、专业程度,以及我们想从论文中获得什么。比如,评审论文和只是快速浏览论文获取超参数设置建议,对应的阅读方式完全不同。

另一个重要技巧:不要追求“读完所有内容”!我通常先读摘要,因为一篇写得好的摘要会简洁概括论文的主题、解决的问题以及核心结论。如果摘要看起来没什么价值,说明这篇文章不值得花时间读,跳过它去读别的就好,完全没问题。

我的方法简述

首先,正如刚才所说,我会先读摘要。
然后,浏览所有图表——看图,同时读图注。
接着,用同样的方式看表格。
快速浏览完这些之后,我会略读结论部分。

以上四个步骤能帮我了解论文的范围、结构、主要内容和核心结论。这个阶段可能只有部分图表能看懂,但我已经在脑子里建立了一个大致的框架,知道接下来深入阅读时要重点关注什么。

熟悉了论文的大致结构后,我会开始从头到尾通读全文。我会标注和划出重点内容,但会强迫自己先读完论文,不要中途被参考文献或者查资料分散注意力。

第一遍读完之后,我通常会根据划出的重点和笔记总结论文内容。如果想从中学到更多,我会去查那些没弄懂的地方,跟进或收藏感兴趣的重要参考文献,还会通读附录。

具体示例

本期通讯已经讲了太多大语言模型的内容,那我们就选一篇计算机视觉的论文,用具体例子来演示我上面说的方法:https://arxiv.org/abs/2302.05442

figure13

论文《将视觉Transformer扩展至220亿参数》的截图,来源:https://arxiv.org/abs/2302.05442

1. 摘要

从摘要中我们可以了解到,这篇论文研究的是一个220亿参数的视觉Transformer(ViT)——此前用于密集预测任务的ViT最多只有40亿参数。(“密集”是什么意思?我们可以标注下来,之后再研究。)此外,除了提出新架构,这篇论文的一大核心结论是:扩大ViT的模型规模可以提升预测性能(即便我们只在输出嵌入之上训练一个线性模型),同时也能提升与人类感知的对齐程度和公平性。

2. 图表

接下来,我们来看图表。

figure14

论文《将视觉Transformer扩展至220亿参数》的所有图表汇总,来源:https://arxiv.org/abs/2302.05442

图1显示,研究人员用了一个“技巧”来优化训练,即对键和查询进行归一化。

如果我们熟悉常规的ViT,从图2可以发现,研究人员提出了一种略有不同的架构设计:注意力层和多层感知机(MLP)层似乎被融合了——这是另一个提升预测性能或计算效率的技巧吗?

图3显示,他们使用了张量分片来提升计算性能,避免内存瓶颈。如果你感兴趣,我在《Machine Learning Q and AI》一书(https://leanpub.com/machine-learning-q-and-ai/)的“多GPU训练范式”相关问题中讲过这个知识点,免费试读部分就有。

图4提到了线性探测,意思大概是在输出嵌入之上训练一个线性层。我们能再次看到,ViT的性能随着模型规模增大而提升。有意思的是,这种提升在小尺寸图像(224×224像素)上比大尺寸图像(384×384像素)上更明显——这是为什么呢?

图5显示,更大的ViT在图像分类和目标检测任务上表现更好,同时微调也能给这些模型带来性能提升。

图6提到了“密集预测”——还记得摘要里的这个词吗?根据图中的示例,我们可以知道密集预测指的是逐像素的预测任务,比如语义分割和深度估计。

图7讨论了不同DP水平下的“去偏”效果。我们暂时还不知道DP水平是什么,但从图中可以看出,所有ViT在分析的两个性别(男性和女性)上的表现都存在不公平性。不过,更大的220亿参数ViT相比小模型,不公平程度更低。

图8显示,在所有分析的ViT中,220亿参数版本的形状偏差最高。不过研究人员也提到,这种形状偏差最接近人类的偏差,因此我们可以认为高形状偏差是件好事。

最后,图9是不同ViT的准确率与校准误差(ECE)关系图,从中可以看出220亿参数ViT在不需要温度重缩放的情况下,提升了帕累托前沿。帕累托前沿和ECE这些概念可以之后再去深入了解。

可以看到,仅仅浏览一遍图表,我们就已经能了解到很多关于论文提出的方法、实验和核心结论的信息了。

3. 表格

接下来,我会用同样的方式看表格:从头到尾快速浏览表格和表注。在这篇论文中,表1提供了更多关于所提出和对比的不同模型的超参数、具体规模的信息。

表2带来了一些有意思的发现:在预训练模型的嵌入上训练线性层,收益会呈现递减趋势。但线性层的性能几乎和其他微调后的模型差不多(要知道,在冻结的预训练模型上用线性层,成本通常比微调整个模型低得多)。

figure15

论文《将视觉Transformer扩展至220亿参数》中的标注表格,来源:https://arxiv.org/abs/2302.05442

从表3可知,该模型在零样本迁移场景下表现也很出色。表4和表5显示,220亿参数ViT在少样本语义分割和单目深度估计任务上也优于其他方法。表6说明该模型在视频分类上表现更佳,表7显示该ViT在可靠性基准测试中得分最高。最后,表8表明我们还可以将220亿参数模型蒸馏成更小的模型,且性能依然优于其他蒸馏参考模型(后面正文会提到,这里的小模型是略小一点的160亿参数版本)。

这些表格基本展示了所提出的220亿参数ViT能胜任的所有任务,并且该模型在各项基准测试中都优于更小的ViT。因此,到目前为止,这篇论文的一个核心结论是:ViT越大,性能越好。

4. 结论

熟悉了论文的主要结构后,我会读一下结论部分,这部分通常都不长。这篇论文的结论总结了我们刚才从图表中得到的信息:即更大的ViT在各类任务上都比之前的小模型表现更好,同时研究人员也用了一些技巧来提升计算性能。

5. 全文通读

现在可以通读全文了。我通常会从头到尾读一遍论文,了解模型实现和实验设计的细节。比如,我们会知道他们采用了三种技术来提升训练效率和稳定性:(1)并行层;(2)查询/键归一化;(3)移除偏置向量。举个例子,在并行层的设计中,他们将注意力头中的矩阵乘法与多层感知机部分的线性层融合,在不影响建模性能的前提下,将训练时的计算性能提升了15%,等等。(限于篇幅,我就不对论文做详细讨论了。)

6. 总结与拓展

详细读完论文后,我会整理笔记和划出的重点,写一篇简短的论文总结,收在我的笔记库里。我其实很少回头看这些笔记,但写总结是很好的脑力锻炼,能提升长期记忆效果。另外,我有时候会把想记住的通用知识点做成Anki卡片。

figure16

把想记住的有趣知识点录入Anki

这个阶段也非常适合去弄懂那些困惑或不清楚的点。比如,我们可能想查一下研究人员说的“形状偏差”到底是什么。随便搜一下就会知道:“形状偏差是指基于物体形状做出正确决策的比例。”也就是说,形状偏差是模型仅依靠物体形状进行预测的能力。而要测试形状偏差,我们需要设计实验,小心地去除图像中的其他信息,比如颜色和纹理。

最后,如果我们真的想搞懂论文的方方面面,解答脑子里的各种疑问,那现在就该读附录了。(我通常至少会略读一下附录,但这篇的附录差不多有20页,为了简洁起见这里就不展开了。)

偏好的论文阅读形式

当我需要非常仔细地读论文、吃透所有细节时,我通常会把论文打印出来,离开电脑阅读,这样能更专注。我只会对大约5%的论文这么做。70%的论文,我会把PDF导出到我的电子阅读器上读——我超爱用电子阅读器,不过可惜它是黑白的,有时候看特定的图表会有点麻烦(但这种情况很少)。剩下25%的情况,也就是快速浏览论文的时候,我就在电脑上直接看PDF。

希望这些内容对你有帮助,欢迎在评论区提问!

这本杂志是我个人的兴趣项目,没有直接的盈利。如果您愿意支持我,可以考虑购买我的书(https://sebastianraschka.com/books)。如果您觉得这些书有见解、有帮助,也欢迎推荐给您的朋友和同事。

figure17

https://www.amazon.com/Machine-Learning-PyTorch-Scikit-Learn-scikit-learn-ebook-dp-B09NW48MR1/dp/B09NW48MR1/ , https://nostarch.com/machine-learning-and-ai-beyond-basics , 以及 http://mng.bz/M96o

非常感谢您的支持!

【转载】思想的AI复兴:从下一代卷积神经网络到大语言模型

原文地址:RevAIval of Ideas: From Next-Generation Convolutional Neural Networks to LLMs, on 2023-02-06

思想的AI复兴:从下一代卷积神经网络到大语言模型

祝愿大家新年开局顺利,AI与深度学习研究领域也同样硕果颇丰。在本期《Ahead of AI》第5刊中,我希望重点展示计算机视觉领域的最新进展,而非仅仅赘述大语言模型日益走高的热度。本通讯旨在重拾经典思路,推动卷积神经网络迈上新高度。

不过不必担心,本月大语言模型的热点新闻,我也没有落下……

本期《Ahead of AI》涵盖内容:

  • 借助自监督学习进行卷积网络架构预训练的最新进展
  • 从零开始训练大语言模型的优势
  • 开源亮点
  • 训练数据有限时,监督学习的13种替代方案

文章与趋势

本章节我们首先讨论卷积神经网络的自监督学习,以及GAN与扩散模型的最新对比。短暂涉足计算机视觉领域后,我们将分析从零开始训练大语言模型的若干优势,最后以最新行业热点收尾(毕竟ChatGPT总是话题焦点)。

下一代卷积神经网络

自监督学习能够利用大规模无标注数据集进行监督式预训练,是语言与视觉Transformer背后成功的关键因素之一。然而,掩码自编码这类自监督学习技术,在卷积神经网络(CNN)中效果并不理想。即便在最优情况下,表现也差强人意:https://arxiv.org/abs/2208.00173

figure01

资料来源:《掩码自编码器是可扩展的视觉学习器》,https://arxiv.org/abs/2111.06377

那么,我们该如何借鉴语言与视觉Transformer中成熟的预训练技术,来改进纯卷积网络?答案就是稀疏卷积(详见https://arxiv.org/abs/1409.6070v1):这是一种仅选取部分输入特征图或权重进行计算的卷积操作,能够在捕捉数据核心特征的同时,减少计算量与内存消耗。

将掩码自编码式自监督学习应用于CNN

在CNN中使用前沿的自监督学习技术存在什么问题?传统CNN难以处理这种预训练方案下出现的、不规则的随机掩码输入图像。

常规卷积处理掩码像素会带来哪些问题?

  • 对掩码像素的计算属于冗余操作(效率低下)
  • 会打乱像素值的数据分布(见下图第2点)
  • 掩码特征图上的模式会消失(见下图第3点)

figure02

该标注图出自https://arxiv.org/abs/2301.03580,阐释了常规卷积处理稀疏(掩码)输入时存在的问题。

在最新发表的论文(https://arxiv.org/abs/2301.03580)中,研究人员提出用稀疏卷积来解决CNN处理掩码输入的难题,并提出了**SparK(分层稀疏掩码建模)**方法。

figure03

该标注图出自https://arxiv.org/abs/2301.03580,阐释了SparK卷积网络方案。

SparK可应用于任意卷积网络。例如,将其与ResNet、ConvNeXt结合后,使用128万张无标注图像对这些纯卷积网络进行预训练,在ImageNet上的预测性能最高可提升1.7%。

figure04

标注图出自https://arxiv.org/abs/2301.03580

这真的有效吗?

上面的数据看起来很有说服力,但论文中的结果有时无法很好地泛化到其他架构或问题上。因此,多参考一些佐证证据总是更稳妥的。

在另一篇最新的独立研究中,研究人员提出用稀疏卷积和全局响应归一化改进主流的ConvNeXt架构:https://arxiv.org/abs/2301.00808

这篇ConvNeXt v2论文通过两种机制,为自监督场景协同设计了一款纯卷积网络:

  1. 对高掩码率的稀疏块使用稀疏卷积
  2. 新增一种全局响应归一化层

figure05

资料来源:《ConvNeXt V2:与掩码自编码器协同设计并扩展卷积网络》中的标注图,https://arxiv.org/abs/2301.00808

(1)稀疏卷积的使用支持高掩码率,提升了训练效率。值得注意的是,在微调阶段,我们可以将稀疏卷积部分转换回标准卷积。
(2)全局响应归一化是一种新型归一化层,可替代批归一化和层归一化。如果没有全局响应归一化,(1)中的高掩码率会导致特征坍塌。研究人员发现,使用全局响应归一化能够促进特征多样性,这是取得良好预测性能的必要条件。全局响应归一化层是一种通用技术,未来它能否让其他架构也受益,值得期待。

和其前身ConvNeXt(我们在《Ahead of AI》第4期《AI大年》中曾介绍过,详见https://magazine.sebastianraschka.com/p/ahead-of-ai-4-a-big-year-for-ai)一样,ConvNeXt v2可用于图像分类、目标检测和实例分割任务。

figure06

资料来源:https://arxiv.org/abs/2301.00808

还记得GAN吗?

去年我曾开玩笑说GAN已经“凉了”,但本月GAN强势回归。

根据论文(https://arxiv.org/abs/2301.09515),研究人员打造了一款名为**StyleGAN-T**的GAN模型,在图像质量与生成速度上均超越了蒸馏扩散模型,成为文本生成图像领域的新标杆。

figure07

资料来源:https://arxiv.org/abs/2301.09515

我仍然认为扩散模型是计算机视觉领域生成式建模的未来,但我们也不该就此忽视GAN。毕竟,有竞争才有进步。

单GPU也能训练大语言模型(LLM)?

答案是肯定的!如今的PyTorch开源库让多GPU训练大模型变得轻而易举,但我们往往没有充足的硬件资源。问题在于,我们还能不能像早年那样,用单块GPU训练大型深度学习模型?

在论文(https://arxiv.org/abs/2212.14034<)中,研究人员用单块GPU花24小时训练了一个掩码语言模型/编码器型LLM(本次实验用的是BERT)。作为对比,原版BERT论文(https://arxiv.org/abs/1810.04805)是用16块TPU训练了4天。/p>

这个“极限压缩”项目的成果十分亮眼:研究人员训练出的BERT平均性能达到78.6(原版为80.9)——模型越大,提升效果越明显。

有哪些榨取性能的技巧?

  • 使用自动算子融合与32/16位混合精度训练
  • 禁用QKV注意力矩阵和全连接层中的偏置项
  • 将输入长度从512个token缩减至128个token

哪些方法没有效果?

  • 用FLASH注意力或傅里叶注意力替换原有的多头自注意力机制,没有带来收益
  • 将GELU激活函数换成其他类型,没有优势
  • 减少注意力头数会导致性能下降;保留原有的12个注意力头,是维持微调性能的关键

从预测性能的角度,研究人员还发现:

  • 三角型单周期学习率调度效果最佳
  • 由于训练数据集规模大且训练仅1个epoch,预训练阶段不需要使用dropout
  • 词表大小超过32k后,不会再提升GLUE基准的整体性能(但MNLI任务性能会提升)

figure08

标注图出自https://arxiv.org/abs/2212.14034

话说回来,如果资源有限,我们为什么不直接训练更小的模型?用这篇论文的结论来回答:虽然小模型的吞吐率更高,但学习效率也更低。因此,要达到特定的预测性能阈值,大模型所需的训练时间并不会更长。

编码器型LLM是什么?

我们再聊聊上面那篇“极限训练”论文里用到的编码器型模型。

近期大语言模型的热度,全都集中在解码器型LLM上——比如PaLM(https://ai.googleblog.com/2022/04/pathways-language-model-palm-scaling-to.html)、Chinchilla(https://arxiv.org/abs/2203.15556)以及GPT系列。这类模型通过下一词预测进行预训练,学习生成文本,有时也被称为**自回归模型**或**单向模型**,因为它们从左到右、逐token地处理文本。

相比之下,BERT这类编码器型LLM通过掩码语言建模进行预训练——我们将部分token隐藏或掩码,让LLM去预测。模型能看到完整的句子——当然,被掩码的词除外。这也被称为双向LLM

根据经验,解码器型LLM通常更适合生成式建模,而编码器型LLM更适合预测式建模(比如文本分类)。

figure09

虽然生成式建模通常看起来更酷炫、更有“魔法感”,也是社交媒体和新闻头条里的常客,但我认为,绝大多数真实商业场景的核心需求,其实都依赖预测式建模。

总之,如今已有数百种不同的大语言Transformer模型,很容易让人眼花缭乱。这种情况下,我强烈推荐收藏Xavier Amatriain整理的全面Transformer模型总结与谱系图:https://amatriain.net/blog/transformer-models-an-introduction-and-catalog-2d1e9039f376/

选哪款GPU?

顺便说一句,如果你想知道哪款GPU性价比最高,推荐看看Tim Dettmers最新更新的指南:https://timdettmers.com/2023/01/30/which-gpu-for-deep-learning/

另外,想根据计算预算找到最合适的LLM模型大小,可以试试这个实用的新工具:https://howmanyparams.com/

我们究竟为什么要从零训练LLM?

既然已经有很多现成的预训练模型,为什么还要自己预训练LLM?一方面是出于研究学习的目的,另一方面,你可能需要让模型适配新的语言或领域(比如蛋白质或DNA序列)。

由于语言具有一定的通用性,典型的工作流是:先在大规模通用语料上预训练模型,再在目标领域上微调——比如目标任务是股市分析的情感分类,就用财经文章做微调。但如果有大量领域专属文本,将这些数据也用于预训练可能效果更好。

例如,在一项研究(https://papers.ssrn.com/sol3/papers.cfm?abstract_id=4337182)中,研究人员发现,在180万篇财经新闻文章上进一步预训练的BERT模型(FinBERT,https://arxiv.org/abs/1908.10063),在财经领域情感分析任务上的表现优于所有其他模型。

学习生命的语言

另一个能说明预训练价值的例子,是近期发表在《自然》上的论文(https://www.nature.com/articles/s41587-022-01618-2)。研究人员用2.8亿条蛋白质序列训练了一个12亿参数的Transformer,用于生成新的蛋白质序列(蛋白质序列由单字母氨基酸字符串组成,比如“DIQMTQSPA…”)。

figure10

标注图出自https://www.nature.com/articles/s41587-022-01618-2

该LLM能够生成与现有蛋白质相似度不超过30%的、真实可信的蛋白质序列。而真正了不起的是,研究人员不止是用氨基酸序列训练了LLM,他们更进一步,合成了完整的基因,并在现实中表达出了这些蛋白质。这些人工蛋白质展现出了与天然蛋白质完全相同的功能。

从零训练LLM

厚着脸皮自荐一下:如果你对从零训练LLM感兴趣,我们最近开发并分享了一份仅需50行代码的实现方案。

figure11

https://lightning.ai


热点头条

1月AI圈大事不断,大语言模型的热度持续高涨。无法一一尽述,但这些内容仍有参考价值,因此我新增了“热点头条”板块,用简短一句话盘点科技领域值得关注的新闻——本月内容偏OpenAI和大语言模型,还请见谅。

学术与科研

ChatGPT相关

Stable Diffusion与生成式图像模型


深度学习基础课程 第4单元

很高兴和大家分享,我的《深度学习基础》课程(https://lightning.ai/pages/courses/deep-learning-fundamentals/)第4单元现已上线:https://lightning.ai/pages/courses/deep-learning-fundamentals/training-multilayer-neural-networks-overview/logistic-regression-for-multiple-classes-part-1-5/

在第4单元中,我们终于开始用PyTorch训练多层神经网络,还会讨论随机权重初始化等设计决策。

figure12

https://lightning.ai/pages/courses/deep-learning-fundamentals/


开源亮点

CIFAR-10超高速训练基准

该项目(https://github.com/tysam-code/hlb-CIFAR10/blob/main/main.py)提供了适合快速实验的PyTorch代码,用于在单GPU上训练卷积神经网络。在单块A100上,它能在10秒内将模型在CIFAR-10上训练到94%准确率。

用Lightning 1.9与Fabric扩展PyTorch模型

Lightning 1.9版本发布(https://github.com/Lightning-AI/lightning/releases/tag/1.9.0 ),带来大量更新。其中一大亮点是全新的**Fabric类**——它是比PyTorchTrainer类更轻量的替代工具与组件集。

和Trainer一样,Fabric仅需几行代码就能轻松扩展PyTorch模型,运行在分布式设备上。但与Trainer类不同的是,训练循环与优化逻辑完全由你掌控。

更多内容见文档:https://pytorch-lightning.readthedocs.io/en/stable/fabric/fabric.html

figure13

nanoGPT——GPT教学级代码库

Andrej Karpathy分享了nanoGPT(https://github.com/karpathy/nanoGPT),这是热门项目minGPT(https://github.com/karpathy/minGPT)的重写版本,目标是用不到600行代码(模型+训练循环合计)讲透GPT-2(解码器型大语言模型)的内部原理。

Ruff——极速Python代码检查工具

Ruff(https://github.com/charliermarsh/ruff)由Rust编写,比现有代码检查工具(包括热门的flake8:https://flake8.pycqa.org/en/latest/)快10到100倍。

代码检查工具的作用是排查代码中的潜在错误、不一致之处,以及是否符合编码规范,还能统一代码风格,这对多人协作的项目尤其有用。但在处理大型代码库时,这类工具有时会偏慢(尤其是用低配硬件检查GitHub提交时)。这种情况下,Ruff值得一试——它可以直接通过pip安装,非常方便!


机器学习问答

问: 假设我们绘制学习曲线后发现,机器学习模型存在过拟合,增加训练数据能改善效果。请列举在监督机器学习场景下,处理标注数据有限问题的不同方法。

figure14

答:
除了收集更多数据之外,在标注数据有限的情况下,我们还可以使用多种与常规监督学习相关的方法。

1)标注更多数据

收集更多训练样本通常是提升模型性能的最佳方法,但实际中往往难以实现。以下是各种替代方案。

2)数据增强与扩充

通过生成修改后的(增强版)或人工的(合成版)训练样本对数据进行“扩充”,有助于提升预测模型的性能。(为简洁起见,本通讯省略具体细节。)

当然,提升数据质量也能改善模型的预测性能。(以数据为中心的AI相关细节同样因篇幅原因略过。)

3)迁移学习

迁移学习指的是先在通用数据集(比如ImageNet)上训练模型,再在目标数据集上微调预训练模型(比如包含不同鸟类的特定数据集)。

迁移学习通常用于深度学习场景,因为深度学习模型的权重可以更新。这一点和树类方法不同——大多数决策树算法属于非参数模型,不支持迭代训练或参数更新。

figure15

4)自监督学习

和迁移学习类似,自监督学习也是先让模型在其他任务上预训练,再针对数据有限的目标任务进行微调。但与迁移学习不同的是,自监督学习通常依赖可以直接从无标注数据中自动提取的标签信息,因此也常被称为无监督预训练

常见例子包括语言建模中的“下一词预测”(比如GPT所用)和“掩码词预测”(比如BERT所用);计算机视觉中一个直观的例子是图像修复:预测图像中被随机移除的缺失部分。

figure16

5)主动学习

主动学习通常会在学习过程中引入人工标注者或用户提供反馈。但它不需要提前标注整个数据集,而是通过一套优先级排序机制,推荐那些能最大化模型性能提升的无标注数据点进行标注。

“主动学习”的名称来源于,模型会在过程中主动选择数据进行标注。例如,最简单的主动学习形式,是挑选预测不确定性高的数据点,交由人工标注者(也称为“预言机”)标注。

figure17

6)少样本学习

在少样本学习场景中,我们面对的数据集通常极小,每个类别只有少量样本。在研究中,1样本(每类1个样本)和5样本(每类5个样本)非常常见。

少样本学习的极端情况是零样本学习,即完全没有标注。近期热门的例子是GPT-3及相关语言模型:用户需要通过输入提示词提供所有必要信息,如下图所示。

figure18

7)元学习

元学习可以理解为“学会学习”——我们开发方法,让机器学习算法自己学习如何更好地从数据中学习。多年来,机器学习社区发展出了多种元学习方法。更复杂的是,元学习可以指代不同的过程。

元学习是上述少样本学习的主要子类别之一,其核心是学习一个优秀的特征提取模块。特征提取模块将支持集图像和查询集图像转换为向量表示,通过与支持集中的训练样本对比,来判断查询样本的预测类别。

元学习的另一个分支与上述少样本学习无关,它专注于从数据集中提取元数据(也叫元特征)用于监督学习任务。元特征是对数据集本身的描述,比如特征数量、各特征的统计量(峰度、极差、均值等)。

提取出的元特征可以为当前数据集选择合适的机器学习算法提供依据。这种方法能够缩小算法和超参数的搜索空间,在数据集较小时有助于缓解过拟合。

8)弱监督学习

弱监督学习是指利用外部标签源为无标注数据集生成标签的方法。通常,弱监督标注函数生成的标签,比人工或领域专家标注的标签噪声更大、准确率更低,“弱监督”因此得名。

在弱监督学习中,我们通常可以开发或采用基于规则的分类器来生成标签——但这些规则通常只能覆盖无标注数据集的一部分。

figure19

以邮件垃圾分类为例,这是一种基于规则的数据标注方法。在弱监督中,我们可以设计一个基于规则的分类器,通过邮件标题中的关键词“SALE”来识别一部分垃圾邮件。注意,我们可以用这条规则把某些邮件标注为垃圾邮件,但不能反过来把没有“SALE”的邮件都标为非垃圾邮件——这些邮件要么保持未标注,要么用其他规则处理。

简而言之,弱监督学习是一种增加训练集中标注样本数量的方法。因此,它和半监督学习、迁移学习、主动学习、零样本学习等其他技术完全兼容。

9)半监督学习

半监督学习和上面提到的弱监督学习密切相关:都是为数据集中的无标注样本生成标签。两者的主要区别在于标签的生成方式(半监督学习有时被视为弱监督学习的子类别,反之亦然)。

弱监督中,我们通过外部标注函数生成标签,这类函数通常噪声大、准确率低,或只能覆盖部分数据。而半监督学习不使用外部标注函数,而是利用数据本身的结构。

figure20

例如在半监督学习中,我们可以根据邻近标注数据点的密度,来给更多数据点打标签,如下图所示。

弱监督可以用于完全无标注的数据集,而半监督学习要求至少有部分数据是标注好的。实际应用中,可以先用弱监督标注一部分数据,再用半监督学习标注那些没被标注函数覆盖的样本。

10)自训练

自训练介于半监督学习和弱监督学习之间。在自训练中,我们训练一个模型(或采用现有模型)来给数据集打标签,这个模型也被称为伪标注器

由于自训练所用的模型不能保证标签准确,因此它和弱监督学习相关;同时,因为我们是用机器学习模型来做伪标注,所以它也和半监督学习相关。

11)多任务学习

多任务学习让神经网络同时学习多个任务(理想情况下是相关任务)。例如,假设我们训练一个分类器来检测垃圾邮件,那么垃圾邮件分类就是主任务。在多任务学习中,我们可以给模型增加一个或多个相关任务,这些额外任务也称为辅助任务。如果主任务是邮件垃圾分类,辅助任务可以是分类邮件的主题或语言。

通常,多任务学习通过多个损失函数实现,每个任务对应一个损失函数,需要同时优化。辅助任务起到归纳偏置的作用,引导模型优先选择能解释多个任务的假设。这种方法通常能让模型在未见过的数据上表现更好。

figure21

上图阐释了硬参数共享软参数共享的区别。硬参数共享中,只有输出层是任务专属的,所有任务共享相同的隐藏层和神经网络主干结构。相比之下,软参数共享为每个任务使用独立的神经网络,但通过参数层间距离最小化等正则化技术,来促进网络之间的相似性。

12)多模态学习

多任务学习是让模型用多个任务、多个损失函数训练,而多模态学习专注于融合多种类型的输入数据。

多模态学习的常见例子是同时接收图像和文本数据的架构。根据任务不同,我们可以使用匹配损失,强制相关图像和文本之间的嵌入向量相似,如下图所示。

figure22

上图中图像编码器和文本编码器是独立的组件。图像编码器可以是卷积主干或视觉Transformer,语言编码器可以是循环神经网络或语言Transformer。不过如今更常见的是用单个基于Transformer的模块,同时处理图像和文本数据。

如前图所示,优化匹配损失对于学习可用于多种任务(如图像分类、摘要生成)的嵌入很有帮助。但我们也可以直接优化目标损失,比如分类或回归损失,如下图所示。

figure23

直观来看,融合不同模态数据的模型通常比单模态模型表现更好,因为它们能利用更多信息。此外,近期研究表明,多模态学习成功的关键,在于提升了隐空间表征的质量。

13)归纳偏置

选择归纳偏置更强的模型,通过对数据结构做出假设,能够降低对数据量的需求。例如,正如第13问所讨论的,由于自身的归纳偏置,卷积网络比视觉Transformer需要的数据更少。

我们该用哪些技术?

我们已经介绍了多种降低数据需求的技术,那到底该用哪些呢?

收集更多数据、数据增强、特征工程等方法,和上面讨论的所有方法都兼容。同样,多任务学习和多模态输入也可以和其他学习策略结合使用。如果模型存在过拟合,还应该结合其他问答中提到的技术(通过模型修改缓解过拟合、通过数据集修改缓解过拟合)。

至于主动学习、少样本学习、迁移学习、自监督学习、半监督学习、弱监督学习这些方法,具体选择哪种高度取决于场景,下图提供了一个概览可以作为参考。

figure24

图中的黑框不是终止节点,而是会回流到“评估模型性能”步骤(为避免画面杂乱,箭头已省略)。


《机器学习问答·AI篇》

如果你喜欢上面的问答内容,想读更多,这其实是我的新书《Machine Learning Q & AI》的节选,书籍地址:https://leanpub.com/machine-learning-q-and-ai/

figure25

有一个面向《Ahead of AI》读者的限时优惠码,可享33%折扣:https://leanpub.com/machine-learning-q-and-ai/c/ahead-of-ai(优惠有效期至2月15日)。


金句精选

“我发现对AI最贴切的比喻是:它就像读写领域的计算器。”——Naval,https://twitter.com/naval/status/1615248290781745153?s=20&t=XUHYiNcjFll218cjrkhAJg

这句话很吸引我,和“计算机是思维的自行车”这个理念有异曲同工之妙。但仔细想想,这个类比有不足之处。计算器是确定性的、精确的,而如今的AI模型并非如此。更恰当的比喻是,把大语言模型看作同义词词典——只不过它针对的是整句、整段文字,而非单个单词。


学习与效率小贴士

研读教材或课程时,最值得投入时间的事情之一就是做习题和测验!当然,一路读下去往往感觉更高效——毕竟快得多。但做练习之所以重要,有以下几个原因:

  1. 检验理解,查漏补缺:做测验和习题时,我们能发现自己的知识漏洞。有时候卡壳了,就得反复回顾内容直到真正掌握。虽然这感觉不如直接进入下一章或下一单元有成就感,但如果想真正吃透内容,这一步必不可少。学习是马拉松,不是冲刺跑。
  2. 主动学习,理解更深:做习题和测验是主动参与的过程,和被动阅读或听讲相比,能促进对内容的深度理解。
  3. 获得动力,持续前进:前面说做练习有时不如往下学有成就感,我觉得这是因为我们总被灌输要多做事、快做事。快点读完一本书或学完一门课,就能快点打勾完事——谁的待办清单不是堆得老高呢?但实际上,完成习题和测验能给我们更强的成就感,激励我们继续学习。
  4. 对接实战,学以致用:习题和测验有时会模拟真实场景,帮助我们把学到的知识用到实际中——而这往往正是我们学习的初衷!

出好的习题和测验并不容易,我总跟学生说:
出卷比答卷难。

我会尽最大努力,在未来的课程和书籍中加入更多优质习题。


本通讯是个人兴趣项目,没有直接报酬。如果您愿意支持我,欢迎购买我的书籍:https://sebastianraschka.com/books。如果您觉得这些内容有启发、有帮助,也欢迎推荐给朋友和同事。

figure26

https://www.amazon.com/Machine-Learning-PyTorch-Scikit-Learn-scikit-learn-ebook-dp-B09NW48MR1/dp/B09NW48MR1/、https://nostarch.com/machine-learning-and-ai-beyond-basics、http://mng.bz/M96o

您的支持意义重大!非常感谢!

【转载】回望2022:AI的大年

原文地址:Looking Back at 2022: A Big Year For AI,by Sebastian Raschka, on 2023-01-02

回望2022:AI的大年

新年快乐!我很高兴看到《Ahead of AI》仅发行3期就收获了超过2万名订阅者。这是我持续写作的巨大动力,也祝愿大家2023年身体健康、顺遂圆满!

我踏入机器学习领域至今已有十年,但2022年无疑是最令人兴奋、大事频出的一年。机器学习与人工智能领域每天都有新的突破与进展,新趋势与新挑战也不断涌现。

为迎接新年,本期将盘点我2022年读过的十大论文。


Articles & Trends(文章与趋势)

2022年1月,扩散模型首次进入公众视野 https://twitter.com/rasbt/status/1487907110105006091?lang=en,我当时就预感一场大变革即将到来。但我从未料到,短短数月内,DALL·E 2、Imagen、Stable Diffusion等一众模型会接连问世。

同样,大语言模型也迎来了爆发式发展,近期ChatGPT的横空出世更是将这股热潮推向顶峰。这真是波澜壮阔的一年!

不过,我们已经在 https://magazine.sebastianraschka.com/p/ahead-of-ai-1-a-diffusion-of-innovations 中讨论过扩散模型,在 https://magazine.sebastianraschka.com/p/ahead-of-ai-2-transformers-fast-and 中探讨过各类语言模型,而且大家现在可能已经对“ChatGPT”这个词耳熟能详了,所以这部分我就长话短说。接下来,我们先来看12月的亮点研究,再解读麦肯锡发布的一份人工智能现状报告与行业调研,最后盘点今年5篇值得关注的论文。


December Highlights(12月亮点)

上文提到的那些里程碑式成果密集发布,后续很难超越。但这并不代表12月平淡无奇。简而言之,以下两篇论文吸引了我的注意。

What do vision transformers (ViTs) learn?(视觉Transformer(ViT)究竟学到了什么?)

https://arxiv.org/abs/2212.06727 研究表明,视觉Transformer学到的归纳偏置或特征,与卷积神经网络(CNNs)学到的内容相似。例如,视觉Transformer的浅层捕捉边缘与纹理,深层则学习更复杂的表征,以覆盖更宽泛的概念。

figure01

视觉Transformer从浅层(左)到深层(右)的视觉特征演进过程。来源:https://arxiv.org/abs/2212.06727

在生成建模方面,视觉Transformer生成的背景质量往往优于卷积神经网络。这引出了一个问题:在预测任务中,视觉Transformer是如何处理背景与前景的?研究发现,当移除背景时,视觉Transformer对目标类别的预测效果优于CNNs;移除前景时,其表现同样更优。这表明,视觉Transformer在依赖特征时更具选择性,会根据特征是否存在来调整权重,或者说它们整体鲁棒性更强。

论文:https://arxiv.org/abs/2212.06727

A diffusion model for generating proteins(用于生成蛋白质的扩散模型)

扩散模型在图像生成领域已取得突破性进展,那它能否用于生成蛋白质结构呢?研究人员开发了一款名为 https://www.biorxiv.org/content/10.1101/2022.12.09.519842v1 的扩散模型,用于从头合成蛋白质——这类蛋白质完全从零构建,而非衍生自自然界中已有的蛋白质。

figure02

来源:https://www.biorxiv.org/content/10.1101/2022.12.09.519842v1

需要明确区分的是:从头合成蛋白质是在实验室中利用无进化历史的氨基酸序列合成的;而AlphaFold、AlphaFold2这类系统是利用已有的氨基酸序列数据来预测蛋白质的三维结构。不过值得注意的是,该研究使用AlphaFold2来验证RDiffusion的生成结果。

论文:https://www.biorxiv.org/content/10.1101/2022.12.09.519842v1


Industry Trends(行业趋势)

作为研究人员,我们通常研究和关注的都是人工智能领域的前沿技术。但如今行业内实际应用的是什么技术呢?根据 https://www.mckinsey.com/capabilities/quantumblack/our-insights/the-state-of-ai-in-2022-and-a-half-decade-in-review ,答案并非大语言模型(transformers)。*

(*注:由于样本量与代表性的局限,该报告的结论可能无法准确反映所有企业的实际情况。)

figure03

来源:https://www.mckinsey.com/capabilities/quantumblack/our-insights/the-state-of-ai-in-2022-and-a-half-decade-in-review

我从上图中总结了几个有意思的发现:

  • 自然语言处理在行业中一直很受欢迎,但此前其应用规模远不及计算机视觉。而如今,计算机视觉与自然语言处理的应用规模几乎持平,这是有史以来第一次。
  • 自然语言文本理解(可能指文本分类*)的普及度几乎是自然语言“生成”的两倍。值得注意的是,自然语言生成往往占据新闻头条:GPT-3、Galactica、ChatGPT等模型皆属此类。
  • Transformer排名垫底。
  • 看来很多企业尚未采用BERT类语言模型编码器来做文本理解与分类(1),仍在使用基于词袋的分类器或循环神经网络。同样,GPT类模型解码器似乎也尚未广泛应用于语言生成,文本生成可能仍高度依赖循环神经网络等传统方法。

(*文本理解可能包含摘要。摘要本质上也属于“生成式”任务,因此我推测这里主要指类似分类的任务。另一方面,各类技术的范畴本身也存在重叠。)

Data set sizes, getting data to production, and model explainability(数据集规模、数据落地生产与模型可解释性)

我还从下图中发现了一些值得关注的洞见:

  • 利用“小数据”的能力至关重要(关键词:数据驱动型AI)。当数据不足时,生成合成数据的能力就很有价值。
  • 能否将数据快速整合到AI模型中,是区分头部企业与其他竞争者的核心。完善的软件框架与基础设施搭建对此可能至关重要。
  • 遗憾的是,大多数头部企业目前并不在意模型的可解释性。

figure04

figure05

来源:https://www.mckinsey.com/capabilities/quantumblack/our-insights/the-state-of-ai-in-2022-and-a-half-decade-in-review


Papers of the Year(年度论文)

以下是我2022年读过的前三甲论文,每篇都附上简短解读。当然,今年还有许许多多令人振奋、可能足以载入史册、影响深远的论文。

今年要选出“仅”前三甲尤其困难,因此我还在后面附上了拓展榜单,收录了我心目中前十的另外七篇论文。

1) ConvNeXt

https://arxiv.org/abs/2201.03545 这篇论文对我而言是一大亮点,因为作者设计出了一种纯卷积架构,其性能超越了主流的视觉Transformer,比如 https://arxiv.org/abs/2103.14030(当然也超越了此前所有的卷积神经网络)。

figure06

来源:https://arxiv.org/abs/2201.03545

这种名为ConvNeXt的架构,很可能成为卷积神经网络的新基准,不仅适用于图像分类,还可用于目标检测与实例分割——例如,它可以作为 https://arxiv.org/abs/1703.06870 的骨干网络。

正如作者在论文中提到的,他们的灵感来自现代视觉Transformer的训练范式,以及Swin Transformer混合架构所证明的一个事实:卷积层仍有其价值。这是因为纯视觉Transformer架构缺少一些有用的归纳偏置,比如平移等变性与参数共享(也就是卷积中的“滑动窗口”特性)。

为开发ConvNeXt,作者以 https://arxiv.org/abs/1512.03385 -50 为基础架构,采纳了现代视觉Transformer训练范式中的架构改进与训练方法。需要注意的是,这些技术本身并非首创,即便在卷积神经网络领域也早有应用。但本文的创新之处在于,作者将这些技术有效结合、深入分析并落地应用。

他们具体采用了哪些技术?清单很长,包括 https://medium.com/@zurister/depth-wise-convolution-and-depth-wise-separable-convolution-37346565d4ec、倒瓶颈层设计、https://arxiv.org/abs/1711.05101、https://arxiv.org/abs/1607.06450 等等。下图中做了总结。此外,作者还使用了现代数据增强技术,比如 https://arxiv.org/abs/1710.09412、https://arxiv.org/abs/1905.04899 等等。

figure07

带标注的版本改绘自 https://arxiv.org/abs/2201.03545 中的配图

2) MaxViT

尽管卷积神经网络凭借上文的ConvNeXt强势回归,但目前视觉Transformer才是万众瞩目的焦点(双关语,无意冒犯)。

https://arxiv.org/abs/2204.01697 这篇论文展现了视觉Transformer近年来的长足进步。早期的视觉Transformer存在二次复杂度的问题,而如今人们已经探索出诸多技巧,让视觉Transformer能以线性复杂度处理更大尺寸的图像。

figure08

MaxViT于9月发布,目前在ImageNet基准测试中处于顶尖水平。来源:https://arxiv.org/abs/2204.01697

在MaxViT中,这一突破是通过将注意力模块拆解为两部分、实现局部-全局交互达成的:

  • 局部注意力(“块注意力”);
  • 全局注意力(“网格注意力”)。

值得一提的是,MaxViT是一种卷积-Transformer混合架构,同时包含卷积层。

它既可用于预测建模(包括分类、目标检测、实例分割),也可用于生成建模。

figure09

带标注的版本改绘自 https://arxiv.org/abs/2204.01697 中的配图

顺带一提,https://scholar.google.de/scholar?as_ylo=2022&q=vision%20transformer&hl=en&as_sdt=0%2C5&utm_campaign=The%20Batch&utm_source=hs_email&utm_medium=email&_hsenc=p2ANqtz-8HbXG-ZkwAj82Nv49uUrBwOHz4zUj3mkyjIfEd5lU7h3JHZR0pEG5OpkUCPPqwWvqMbjWl 显示,仅2022年就有超过5000条关于视觉Transformer的研究结果。这个数字虽然可能包含误检,但也足以体现视觉Transformer的普及程度与受关注程度。

figure10

不过不用担心,视觉Transformer不会完全取代我们钟爱的卷积神经网络。相反,正如MaxViT所展现的,当前的趋势是将视觉Transformer与卷积网络融合为混合架构。

3) Stable Diffusion

在ChatGPT成为全场焦点之前不久,https://github.com/CompVis/stable-diffusion 曾刷屏全网与社交媒体。Stable Diffusion基于论文 https://arxiv.org/abs/2112.10752,该论文于2021年12月上传。但鉴于它在 https://cvpr2022.thecvf.com/ 上正式发表,并在8月随Stable Diffusion的开源爆火,我认为将它纳入2022年的榜单合情合理。

扩散模型(https://magazine.sebastianraschka.com/p/ahead-of-ai-1-a-diffusion-of-innovations)是一类概率模型,其原理是通过逐步对一个正态分布变量去噪,来学习数据集的分布。这一过程对应于学习一个长度为T的固定马尔可夫链的逆过程。

figure11

扩散模型示意图

与GANs不同——GAN通过生成器与判别器的极小极大博弈进行训练,扩散模型是基于似然的模型,通过极大似然估计(MLE)训练。这有助于避免模式崩溃等训练不稳定问题。

扩散模型其实早已存在(可参考 https://arxiv.org/abs/1503.03585),但此前无论是训练还是推理,采样成本都极其高昂。上述2022年那篇论文的作者提到,当时采样5万张图像需要5天的运行时间。

https://arxiv.org/abs/2112.10752 这篇论文的创新之处在于,它不再直接使用原始图像的全分辨率像素输入空间,而是利用预训练自编码器在隐空间中应用扩散过程。

figure12

来源:https://arxiv.org/abs/2112.10752

其训练过程可分为两个阶段:首先,预训练一个自编码器,将输入图像编码到低维隐空间以降低复杂度;其次,在预训练自编码器的隐表示上训练扩散模型。

在隐空间中运行大幅降低了扩散模型训练与推理的计算成本和复杂度,同时还能生成高质量的结果。

该论文的另一大贡献是提出了用于通用条件控制的交叉注意力机制。因此,除了无条件图像生成,这种隐扩散模型还能实现图像修复、类别条件图像合成、超分辨率以及文本生成图像——最后这项正是DALL·E 2与Stable Diffusion名声大噪的原因。

Seven Other Paper Highlights of 2022(2022年另外七篇亮点论文)

以下是我最初前十榜单中另外七篇论文的简要概述:


Open Source Highlights(开源亮点)

Scikit-learn 1.2

我最喜爱的机器学习库之一scikit-learn的1.2版本于12月发布 https://scikit-learn.org/1.2/whats_new/v1.2.html#changes-1-2。我最关注的亮点是HistGradientBoostingClassifier(它是LightGBM的一种实现)。

HistGradientBoostingClassifier现在支持:

  • 交互约束(在树中,沿特定路径出现的特征被视为“存在交互”);
  • 类别权重;
  • 类别特征的特征名称。

PaLM + RLHF – Pytorch (WIP)

https://github.com/lucidrains/PaLM-rlhf-pytorch 是在上述前十榜单提到的PaLM架构基础上,实现的带人类反馈的强化学习(RLHF)方案。它可能是首个开源的ChatGPT等效实现。但最大的限制是,它(目前)不包含预训练权重。

Echo

还记得 https://magazine.sebastianraschka.com/p/ahead-of-ai-1-a-diffusion-of-innovations 中提到的OpenAI的 https://github.com/openai/whisper 模型吗?Whisper(同样入选了前十论文榜单)是一款用于生成高质量字幕的大语言模型。

这些年我试过很多字幕生成工具,Whisper生成的字幕质量真的让我惊艳。我甚至用它为 https://lightning.ai/pages/courses/deep-learning-fundamentals/ 课程生成了字幕!(补充一句:它也是少数能很好处理非母语口音的模型之一!)

上个月我们发布了 https://lightning.ai/echo/,它为Whisper提供了友好的用户界面,你可以直接从电脑拖拽视频文件使用。和运行Stable Diffusion的 https://lightning.ai/app/HvUwbEG90E-Muse 一样,Echo是又一个将大模型落地生产、借助Lightning AI框架实现多用户扩展的范例。

figure13

当然,Echo是完全开源的。查看 https://lightning.ai/pages/community/tutorial/deploy-openai-whisper/ 教程可以了解它的构建过程。


Notable Quote(金句)

任何事,只要你潜心钻研十年,都能成为专家。(这差不多是拿到两个硕士学位和一个博士学位的时间。)
——伊丽莎白·吉尔伯特


Announcement: Deep Learning Fundamentals, Unit 3(公告:深度学习基础课程 第3单元)

我一直在全力筹备 https://lightning.ai/pages/courses/deep-learning-fundamentals/

这门免费课程从零开始教你深度学习,从机器学习基础,到用PyTorch在多GPU上训练前沿深度神经网络,应有尽有。

我很高兴地宣布 https://lightning.ai/pages/courses/deep-learning-fundamentals/3-0-overview-model-training-in-pytorch/ 现已上线。在第2单元中,我们介绍了作为张量/数组库的PyTorch。在第3单元中,我们更进一步,讲解自动微分!

figure14

欢迎大家反馈!https://twitter.com/rasbt/status/1600181629145665537?s=20&t=Sgp0F-It9XuWU7PrNf4ySA 或者 https://github.com/Lightning-AI/dl-fundamentals/discussions,期待听到你的声音!


Study & Productivity Tips(学习与效率技巧)

A Yearly Review(年度复盘)

让我保持心态平和的方法之一,就是每周做复盘(以后的通讯再详聊)。恰逢年末,我想借此机会分享一下我的年度复盘流程——我通常在新年前夜做这件事。

这个练习既能回顾成就(希望能带来动力),也能规划来年目标(帮你保持专注)。

Step 1: Looking Back(第一步:回望过去)

首先,我会收集各项数据,比如复盘整体财务状况(支出、收入、储蓄)、引用量、网站访问量等等,和上一年做对比。我也会回顾这一年读过的书、上过的课。

其次,我会翻一遍日历和项目文件夹(这个话题以后的通讯再讲,我之前也在博客里写过:https://sebastianraschka.com/blog/2021/project-management.html),为每个月写下2-4件高光事件。

第三,我会浏览这一年拍的所有照片,每个月挑1-2张,做成一本小小的日记/相册并打印出来(记录关键事件、旅行等),留下一份简洁清晰的年度总结。

第四,我会花时间反思,回想这一年所有顺利的事和不尽如人意的事,然后为新的一年写下一条关键经验。

Step 2: Looking Forward(第二步:展望未来)

复盘完成后,我会花时间思考这一年最想达成的事。这是年度复盘最有挑战的部分,我建议多花点时间。

对我来说,定下2-3个年度核心目标是保持专注的绝佳方法。一年下来,我总会积攒很多细碎但有意思的项目和事务,比如维护一些小型的业余开源项目。放手很难,但有时候腾出空间才能容纳新事物,这很重要。

在这个过程中,我也会规划全年的学习计划,通常包括想读的教科书和想上的课程。我总是对自己能完成的量过于乐观,但有计划总归是好事。

这本杂志是我的个人兴趣项目,没有直接报酬。不过,如果大家愿意支持我,可以考虑购买 https://sebastianraschka.com/books。如果你觉得这些内容有洞见、有帮助,也欢迎推荐给你的朋友和同事。

figure15

https://www.amazon.com/Machine-Learning-PyTorch-Scikit-Learn-scikit-learn-ebook-dp-B09NW48MR1/dp/B09NW48MR1/、https://nostarch.com/machine-learning-and-ai-beyond-basics、以及 http://mng.bz/M96o

你的支持对我意义重大!非常感谢!

【转载】大语言模型的发布与开源软件

原文地址:Launching Large Language Models and Open Source Software, on 2022-12-08

大语言模型的发布与开源软件

兼论Galactica的兴衰

让我以两则声明开启第三期《Ahead of AI》:

感谢大家迄今为止对这份通讯的积极反馈。我已经联系了部分读者,询问可以改进的方面。最主要的一点是内容很棒,但篇幅稍长。我同意这一点,也会尽量精简(如果做得到的话!)。删减内容其实很难。因此,往后我们会每月交替推出“机器学习问答”和“研究深度解读”板块。

如果你是《Revue》的老订户,可能已经注意到这份通讯已经迁移到Substack平台,原因参见:https://www.theinformation.com/briefings/twitter-will-shut-down-newsletter-product-revue-by-year-end 。好在(在我看来)Substack的排版效果要好得多。现在也新增了评论区,欢迎大家留下反馈或问题!

文章与趋势

大语言模型的发布

由Papers With Code与Facebook母公司Meta联合推出的Galactica(https://arxiv.org/abs/2211.09085v1)在上个月引发了巨大轰动。

figure01
Galactica 演示页面,https://galactica.org/

什么是Galactica?

Galactica是一款基于Transformer架构的大语言模型(LLM),定位是撰写科研论文与维基百科条目。它和此前其他文本生成类大语言模型的区别在于,其训练数据是4800万篇科研论文与教科书,而非从互联网抓取的各类通用文本语料。

有意思的是,尽管训练数据全部为科学著作,它在通用语言建模基准测试(如https://github.com/google/BIG-bench )中的表现却优于GPT-3(https://en.wikipedia.org/wiki/GPT-3)等更大规模的模型,相关对比参见:https://arxiv.org/abs/2211.05100。

figure02
GAL = Galactica。资料来源:Galactica研究论文,https://arxiv.org/abs/2211.09085v1

Galactica为何被下架?

在社交媒体的强烈抵制与激烈讨论中,Meta与Papers With Code仅上线三天就关停了https://galactica.org/ 网站。

核心担忧在于,Galactica可能会降低生成伪科学的门槛,放大学术不端行为。凸显这一问题的典型案例是一篇鼓吹“食用碎玻璃有益”的文章,相关推文参见:https://twitter.com/mrgreene1977/status/1593274906707230721?s=20&t=k5AFVj-GI1xO5km_pBAAYA

figure03
Galactica生成的一篇维基百科风格的文章

公平地说,这类文章人类也能写出来并传播。但争议的核心在于,Galactica会降低这类内容的生成门槛,并放大问题的规模。

支持与反对Galactica的观点,在这两条Twitter线程中总结得最为到位:https://twitter.com/ylecun/status/1593293058174500865?s=20&t=dkoG4zWYeMGSM0KqN5shLQhttps://twitter.com/Michael_J_Black/status/1594945693524938752?s=20&t=dkoG4zWYeMGSM0KqN5shLQ

我如何看待Galactica?

一方面,出于科学发展的考量(无论是象征意义还是实际层面),我支持开放大语言模型。另一方面,作为arXiv计算机科学分类(https://arxiv.org/list/cs.LG/recent)的前版主,我也认同这些担忧。尽管arXiv不进行同行评审,但版主们每天都在牺牲自己的业余时间,处理上传到平台的问题文章——从剽窃到伪科学,各类问题都有。

双方的观点可能都过于极端。我不反对技术进步,也认为存在妥协的空间。比如,技术进步本身是好事,但大语言模型的宣传与营销方式还有改进空间。举个例子:与其开发号称能写完一整篇文章、连事实都能自动生成的系统,为什么不做一个论文模板生成器供科研人员使用呢?

大语言模型的局限性

大语言模型擅长生成读起来像人类手笔的流畅文本。但在文本理解任务上,这些模型仍有很大提升空间。原因在于,很难设计出直接针对理解能力优化的训练目标。

比如Galactica之所以会被滥用来生成虚假事实,问题就在于其训练目标并没有明确优化生成内容的事实准确性。

作为对话代理的大语言模型未能抓住沟通的核心要义

在最新论文《大语言模型不是零样本沟通者》(https://arxiv.org/abs/2210.14986)中,Ruis等人探讨了大语言模型作为对话代理存在的问题。参考论文中给出的例子:

用户:“你看到我的手机了吗?”
InstructGPT:“是的,我看到你的手机了。”

InstructGPT这类大语言模型可能会给出语法正确的答案,但却没什么实际用处(相比之下,有用的回答应该是“看到了,在厨房桌子上”)。此外,当测试大语言模型通过文本进行二元是非推断的能力时,其表现接近随机水平。

figure04
论文《大语言模型不是零样本沟通者》截图,https://arxiv.org/abs/2210.14986

GPT-4进展如何?

说到大语言模型的局限性,热门模型GPT-3的继任者GPT-4会带来哪些突破,值得期待。据报道(https://analyticsindiamag.com/gpt-4-is-almost-here-and-it-looks-better-than-anything-else/),GPT-4将于2022年12月至2023年2月之间发布。

值得注意的是,OpenAI近期发布了基于GPT-3的text-davinci-003模型(https://beta.openai.com/docs/models/overview),相比初代GPT-3,它的写作质量更高,还支持长文本生成。(这会不会是GPT-4的预热?)

ChatGPT

在text-davinci-003发布之后,OpenAI几天前又推出了ChatGPT(https://openai.com/blog/chatgpt/)。你可以在这里试用演示版:https://chat.openai.com/ 。ChatGPT是一款聊天机器人,能够以真实自然的对话方式与用户互动。它生成的回复质量极高,以至于有人认为它足以和主流搜索引擎抗衡。在某种程度上,它正在解决前文提到的InstructGPT存在的问题。该模型刚发布不久,还需要更多时间来全面了解其能力与局限。

figure05
ChatGPT的查询与输出示例

没错,ChatGPT也在不到一周的时间里引发了(甚至更大的)轰动,相关推文参见:https://twitter.com/sama/status/1599668808285028353?s=20&t=u1o-jYqar9BDTb1GwgB2pQ


更多生成式模型

用Stable Diffusion 2.0生成更高质量的图像

Stability AI为其Stable Diffusion模型发布了2.0版本(官方博客:https://stability.ai/blog/stable-diffusion-v2-release),该模型我们曾在两个月前的文章中讨论过(https://magazine.sebastianraschka.com/p/ahead-of-ai-1-a-diffusion-of-innovations)。

https://stability.ai/blog/stable-diffusion-v2-release

  • 采用了全新的文本编码器OpenCLIP(https://github.com/mlfoundations/open_clip),替代了此前的OpenAI CLIP文本编码器(https://github.com/openai/CLIP);
  • 可生成更高分辨率的图像;
  • 在经过NSFW内容过滤后的美学数据集子集上进行了预训练;
  • 内置防护机制,避免用户直接模仿特定艺术家的风格。

更多细节可参见GitHub仓库:https://github.com/Stability-AI/stablediffusion

https://twitter.com/karpathy/status/1595954036498649088?s=20&t=-rHWvx-3AGB8va-Ky7_bFg 提到,生成效果看起来比前代模型稍差。这可能是因为“数据清理”力度更大。就我个人而言,用任意查询同时运行Stable Diffusion 1.5和2.0,我也认同这一看法。如下图所示,Stable Diffusion 2.0的图像质量(分辨率层面)更高,但内容质量(与提示词的匹配度)有所下降。

figure06

公平地说,不少用户反馈,使用负向提示词(negative prompt)时Stable Diffusion的表现会更好,相关介绍参见:https://minimaxir.com/2022/11/stable-diffusion-negative-prompt/


开源亮点

PyTorch 2.0

PyTorch 2.0于上周在PyTorch大会上正式公布(大会介绍:https://pytorch.org/blog/announcing-pytorch-conference-2022/)。

那么,新版本有哪些变化?首先,让我松了口气的是核心API保持不变。其次,新版本的核心目标是进一步提升PyTorch的运行效率。与此同时,PyTorch团队正在将代码从C++向Python迁移,让框架对开发者更友好。

好消息是PyTorch的速度将大幅提升。更好的消息是,不会出现破坏性变更!太棒了!

改动主要集中在底层,新增了一个可选的torch.compile函数,用于计算图编译,从而提升模型效率。后续还将支持把整个训练循环都包裹在torch.compile中。

基于对来自TIMM、Huggingface和TorchBench的163个开源模型的测试,torch.compile已经可以兼容其中93%的模型,无需修改任何代码。当然,用户依然可以使用PyTorch的动态图(eager)模式。但需要注意,对于某些模型,动态图模式会成为性能瓶颈——尤其是使用高带宽GPU时。这种情况下,通过编译可以获得额外的速度提升。想试试吗?只需要一行代码:

compiled_model = torch.compile(model)

torch.compile已在PyTorch每日构建版中提供,并将纳入即将发布的PyTorch 1.14版本。PyTorch 2.0正式稳定版计划于2023年3月发布。

PyTorch团队的详细解读参见:https://pytorch.org/get-started/pytorch-2.0/

figure07
PyTorch大会现场截图,https://www.youtube.com/watch?v=vbtGZL7IrAw

Lovely tensors——更适合人类阅读的张量

神经网络一年比一年庞大、复杂。调试代码的时候,谁不希望能有点帮手呢?我最近偶然发现了一个面向PyTorch的库:https://github.com/xl0/lovely-tensors/ ,它能让庞大的张量对人类更友好。

figure08
lovely tensors库截图,https://github.com/xl0/lovely-tensors/


研究深度解读

大语言模型如此成功的原因之一是自注意力机制,另一个则是自监督学习。除了自然语言处理领域,自监督学习也已经成为计算机视觉的基石。但如果是表格数据集,自监督学习的表现又如何呢?

再探表格数据深度学习的预训练目标

正如Rubachev等人2022年的论文《再探表格数据深度学习的预训练目标》(https://arxiv.org/abs/2207.03208)中所述,自监督学习同样能为深度表格模型带来增益。

figure09
资料来源:https://arxiv.org/abs/2207.03208

自监督学习与预训练

和大多数基于树的方法(比如梯度提升机的默认实现)不同,深度神经网络可以迭代训练,并且支持通过自监督学习进行预训练。

自监督学习指的是训练目标标签从数据集本身获取的训练方式。自然语言处理领域的典型例子是掩码语言模型——模型的任务是预测被掩码的单词。在计算机视觉领域,我们也有类似的做法:掩码像素——模型需要预测缺失的像素。

自监督学习通常用于在微调目标任务之前对模型进行预训练。其逻辑在于,我们有大量未标注数据集,可以通过自监督学习加以利用。和用于预训练的未标注数据集相比,有标注的目标数据集通常规模很小——往往小到不足以从零训练一个深度神经网络。

无需额外数据的预训练

研究人员可以很轻松地从互联网收集未标注的图像和文本,因此预训练在计算机视觉和自然语言处理领域已经成为标准操作。但对于表格数据方法,预训练还不那么普遍。这可能是因为表格数据集往往很难获取额外数据(哪怕是未标注的)。

在这项研究中,作者没有使用额外的未标注数据,而是直接用目标数据集本身进行预训练。(这模拟了无法获取未标注表格数据的场景。)预训练阶段,作者将目标数据集视为无标注数据,同时也探索了利用目标标签的方案——我们稍后会详细讨论这一点。

总体而言,这项研究涵盖了11个不同的数据集,训练样本量从6000到72.3万不等,特征数量从6到136个不等。数据集同时覆盖分类与回归任务,以及数值型与类别型特征。

figure10
实验所用数据集。资料来源:https://arxiv.org/abs/2207.03208

自预测与对比学习

自监督学习主要分为两大类:自预测(self-prediction)和对比学习(contrastive learning)。

在对比学习中,我们对训练样本进行扰动(比如通过数据增强),模型的任务是学习一个相似度函数。原始样本x和扰动(“损坏”)后的样本x’之间应该具有高相似度;同时,x和任意其他不同训练样本之间的相似度应该很低。

figure11
对比学习简化示意图

在自预测中,标签从数据集本身获取,比如前文提到的掩码单词预测任务。

figure102
两种自预测过程的简化示意图。左:模型从扰动后的样本预测原始训练样本。右:模型根据扰动后的样本预测扰动掩码。

figure13
资料来源:https://arxiv.org/abs/2207.03208

在计算机视觉领域,自预测的效果通常优于对比学习,这一点从下表2中加粗的最优结果数量也能看出来:自预测预训练任务(“rec”和“mask”)的表现优于对比预训练任务(“contrastive”)。

注:MLP指普通的(“香草版”)多层感知机。MLP-PLR和MLP-T-LR指的是基于数值特征嵌入而非原始特征运行的多层感知机。

预训练中引入目标信息

由于作者在预训练时使用了原始训练集,这就引出了一个问题:如果预训练时就使用目标信息,预测性能会不会进一步提升?

为了回答这个问题,作者进行了多组实验。为简洁起见,我仅介绍其中一部分实验设置。

  • “sup”:以监督方式在扰动数据集上进行预训练,然后在未扰动数据集上微调。
  • “rec + target”:对之前基于重构的自预测任务的改进版本。首先对目标标签进行独热编码;然后将编码后的目标与模型主干输出的嵌入向量拼接;最后模型头需要从拼接后的向量中预测原始(未扰动)的训练样本。

figure14
改进后的、感知目标的“sup”与“rec + target”预训练目标示意图

从下表3的结果来看,没有哪一种组合能在所有数据集上都取得最优效果。不过,虽然没有明确的最优解,但基于嵌入的多层感知机(即MLP-PLR和MLP-T-LR)整体表现优于普通多层感知机。并且,感知目标的预训练效果要优于不感知目标的预训练。

figure15
表2的标注版,来自https://arxiv.org/abs/2207.03208

注:“mask + target”和“rec + target”原理类似。区别在于,它是把目标信息加入到基于掩码的自预测任务中,而非重构任务。

与梯度提升的对比

前述结果表明,预训练对多层感知机有增益,引入目标信息还能进一步提升效果。接下来的问题是:这些基于深度学习的方法和传统机器学习方法(也就是梯度提升)相比表现如何?

figure16
表4的标注版,来自https://arxiv.org/abs/2207.03208

大多数情况下,采用感知目标的掩码式(自预测)预训练、基于数值嵌入的多层感知机表现最优。仅有两个数据集上,梯度提升方法(XGBoost和CatBoost)的表现超过了预训练多层感知机。

核心结论

  • 深度神经网络通常都能从预训练中获益。根据论文呈现的结果,在处理表格数据集时同样如此。
  • 普通多层感知机从预训练中获益最大(表2)。但我们通常更关注最优的预测性能,这种情况下,应该考虑基于数值嵌入运行的多层感知机:MLP-PLR和MLP-T-LR。并且在大多数数据集上,感知目标的掩码式自预测(“mask + target”)表现最佳。

如果你想动手实验代码,作者已经在GitHub上开源了相关代码:https://github.com/puhsu/tabular-dl-pretrain-objectives


名言精选

“科研经费并不充裕,社会和科学家都不该浪费资源去追逐基于伪论文的死胡同。”
——https://twitter.com/Michael_J_Black/status/1594945705721974785?s=20&t=O_8J3dJdtgownS_er_gOUw


学习与效率技巧

一个简单技巧,解放你的大脑

我最喜欢的效率技巧之一就是把事情写下来。我说的“写下来”是什么意思呢?很多时候,当我在工作、散步、学习,或者只是读小说的时候,会突然冒出一个很棒的想法,或者想到某件该做的事。如果不立刻写下来,这个念头就会一直在脑子里打转,干扰我当下做的事。

眼不见,心不烦

把想法写下来能让大脑停止反复回想,但前提是你得把它记在一个你会定期查看的地方。否则,你可能会把“回复杰克婚礼的出席邀请”这种事,换成“去翻翻我冬装里的口袋笔记本”(而那本里刚好也写着要回复杰克婚礼的事)。

把你的想法和念头写在你每天至少会看一次的地方。因为随机冒出来的想法也可能有时间敏感性,比如“在今晚截止前催一下合著者给新摘要的反馈”,或者“晚上7点前去趟超市买咖啡豆”。我学习的时候,也会把之后想用到或想查阅的关键点记下来,这样能保持阅读的流畅度。

工具重要,也不重要

你需要把想法记在一个你会定期回头处理的地方。但同时,记录想法的工具和设备其实并不重要,只要是你常看的东西就行。比如,如果你有每日日程清单,可以在右下角留出一块地方专门记这些。

如果你是个经常查收邮件的人,可以用一个给自己发邮件的应用。iOS和macOS上的“给自己记笔记”(https://apps.apple.com/us/app/note-to-self-mail/id113553707)就很好用——当然安卓和Windows肯定也有类似的应用。它的好处是散步的时候也能拿出来随手记,不会显得奇怪。(当然,你也可以用系统自带的备忘录应用。我试过,但可惜我回到电脑前的时候,通常都会忘了去看那个应用。)

figure17
随手给自己发的笔记截图

索尼的数码录音笔(https://www.sony.com/en-ly/electronics/voice-recorders/icd-ux560f)也是长途散步的好伴侣。开车或者散步的时候也特别好用(尤其是如果你喜欢开着“勿扰模式”散步、专注当下的话)。

长话短说,你需要找到最适合自己的方式,而且也不必全程只用同一种工具。

我在办公桌前的时候,喜欢把想法写在每日日程页上(这个以后再聊)。出门在外的时候,我通常用手机上的“给自己记笔记”应用。而散步或者开车的时候,我更偏爱录音笔。


这份杂志是我的个人兴趣项目,不提供直接报酬。但如果您愿意支持我的创作,可以考虑购买我的一本著作:https://sebastianraschka.com/books 。如果您觉得这些书有见地、有帮助,也欢迎推荐给您的朋友和同事!

figure18
https://www.amazon.com/Machine-Learning-PyTorch-Scikit-Learn-scikit-learn-ebook-dp-B09NW48MR1/dp/B09NW48MR1/https://nostarch.com/machine-learning-and-ai-beyond-basics ,以及http://mng.bz/M96o

您的支持对我意义重大!非常感谢!

【转载】Transformer的快慢之道:语言处理领域的新进展

原文地址:Transformers, Fast and Slow: New Developments in Language Processing, on 2022-11-11

Transformer的快慢之道:语言处理领域的新进展

文章与趋势

本期我们将聚焦基于Transformer架构的大语言模型——它是现代深度学习与人工智能领域的另一大支柱,与扩散模型齐名。

想必不少读者都还有印象,自然语言处理(NLP)领域曾长期由循环神经网络(RNN)主导。而基于自注意力机制的神经网络(例如论文https://arxiv.org/abs/1706.03762 提出的初代Transformer架构)问世后,彻底革新了整个领域。

figure01

语言模型响应提示的示例。

(冷知识:早在自注意力机制出现之前,论文https://arxiv.org/abs/1409.0473 就已经研究了注意力机制。正如我在拙著https://www.amazon.com/Machine-Learning-PyTorch-Scikit-Learn-scikit-learn-ebook-dp-B09NW48MR1/dp/B09NW48MR1/ 中详细介绍的,RNN会在编码器与解码器的编码结果之间使用注意力机制。而在Transformer中,之所以叫“自注意力”,是因为注意力计算作用于同一序列内的所有元素。)

好了,这些都已是过往,注意力机制的发展沿革大可以改日再聊。我们进入正题,来看看有哪些新动向?

与现代机器学习模型交互

提示工程(Prompt Engineering)

基于Transformer的生成式语言模型,和上期讨论的图像扩散模型有一个共同点:它们都需要一定程度的提示工程。所谓提示工程,就是调整输入序列(即“提示”)以获得期望的输出。

听起来很复杂?其实大可不必,提示工程这事儿从互联网诞生之初大家就一直在用——无非就是反复调整谷歌搜索的关键词,直到搜到想要的结果,本质上是一回事。

想深入了解提示工程?可以看看Rick Neubig整理的这份极佳的提示方法分类体系:

figure02

提示方法分类体系。图片来源:https://docs.google.com/presentation/d/1YfSkqvFVtRkFBpQ4SKuBlqkhJrzWEERluivYjleB6a4/edit#slide=id.p)

内容毒性(Toxicity)

Transformer和扩散模型的另一个共同点是都可能产生有害影响——比如被滥用来生成不良内容。在近期的一篇论文(https://arxiv.org/abs/2210.03162 )中,研究者探究了提示压缩的效果。他们发现,对提示进行压缩、同时保留其中的抽象信息,能够降低生成文本的毒性。

Transformer有哪些实际用途?

凭借出色的文本生成能力,Transformer爆火出圈,甚至引发了诸如https://www.washingtonpost.com/technology/2022/06/11/google-ai-lamda-blake-lemoine/ 报道的相关事件。但除了生成文本之外,Transformer在现实世界中还有哪些“真正”实用的应用场景?

语言翻译

除了补全“Twitter的未来是什么?”这类提示、生成通顺的文本之外,语言翻译才是Transformer真正大放异彩的领域。

近期代表性的模型包括Meta的https://ai.facebook.com/blog/nllb-200-high-quality-machine-translation/ ——这是一个支持200种语言互译的Transformer模型。

蛋白质折叠

你或许听说过DeepMind的https://www.nature.com/articles/s41586-021-03819-2 ,它在两年前斩获了https://en.wikipedia.org/wiki/Critical_Assessment_of_protein_Structure_Prediction 赛事的奖项。没错,和初代https://github.com/deepmind/deepmind-research/tree/master/alphafold_casp13 不同,AlphaFold2采用的正是语言Transformer的架构。

近期,Meta发布了https://esmatlas.com/explore?at=1%2C1%2C21.99999344348925 ,包含由ESMFold蛋白质折叠模型生成的6.2亿个宏基因组蛋白质结构。相关介绍见https://ai.facebook.com/blog/protein-folding-esmfold-metagenomics/

figure03

宏基因组图谱截图。来源:https://esmatlas.com/explore.

这项成果非常出色,是一个重要的里程碑。尤其是它的规模和速度,令人印象深刻。不过我还是期待看到CASP15竞赛的结果,好判断这个模型在预测新结构时的准确率如何。

另外值得一提的是,AlphaFold2和ESMFold都是从蛋白质序列数据出发,生成准确的结构。但它们并没有解决真正的“蛋白质折叠”过程本身。打个比方:这些模型就像是拿到一份食材清单,就能预测出对应的菜品(比如意大利肉酱面)。但这些基于Transformer的模型并没有学习做菜的配方和流程——它们直接从食材跳到了成品。放在不同语境下,你可以把这看作优势,也可以看作局限。

问答系统

Transformer另一个具备实际落地潜力的领域是问答系统。比如亚马逊近期发布了多语言数据集https://github.com/amazon-science/mintaka 。Mintaka可以作为下一代问答系统的训练数据。我希望未来的系统能比现在的技术更实用、更智能——毕竟谁喜欢和现在这种水平的聊天机器人交互呢?

迈向通用人工智能(AGI)了吗?

在我看来,通用人工智能(AGI)还远未到来,也绝非触手可及。但与此同时,正如上文所见,近期的语言模型在文本生成、翻译、蛋白质结构预测等方面的能力确实令人惊叹。不过,对部分读者来说可能值得关注的是,研究者正在探索让Transformer实现自我提升的机制:通过一种基于强化学习的预训练方法,叫做“算法蒸馏”(Algorithm Distillation),相关论文见https://arxiv.org/abs/2210.11610

自注意力效率与碳足迹

研究者普遍认为,初代自注意力机制(又称缩放点积注意力)效率很低——因为它的内存需求随输入序列长度呈二次方增长。多年来,研究者提出了很多更高效、呈线性增长的替代方案。但这些稀疏注意力机制始终非常冷门,相关讨论见https://twitter.com/rasbt/status/1542872768378724352?s=20&t=PC0uHqQN3z0WcxRoBR_1Wg

近期发布的https://www.stateof.ai/ 报告也提到了自注意力优化方案遇冷的现象,观察到了类似的趋势:

figure04

各类高效自注意力机制。来源:https://www.stateof.ai.

这就引出了另一个问题:大语言模型的环境成本到底是多少?在近期的论文https://arxiv.org/abs/2211.02001 中,研究者发现训练BLOOM模型需要1,082,990个GPU小时(使用最先进的英伟达A100显卡),总计排放约50.5吨二氧化碳!作为对比,可以参考这篇文章:https://www.sciencefocus.com/future-technology/how-many-cars-equal-the-co2-emissions-of-one-plane/

更多学习资源

想深入学习语言Transformer?以下是整理好的实用资源列表:

https://sebastianraschka.com/blog/2021/dl-course.html#l18-introduction-to-generative-adversarial-networks
https://github.com/rasbt/machine-learning-book/blob/main/ch16/ch16-part1-self-attention.ipynb ——出自我的图书,分步讲解自注意力机制
Lucas Beyer的讲解视频:https://www.youtube.com/watch?v=UpfcyzoZ644
Andrej Karpathy实现的OpenAI GPT(生成式预训练Transformer)迷你版本:https://github.com/karpathy/minGPT

研究深度解读

在这个部分,我会精选一篇研究论文进行解读。既然本期通讯的主题是Transformer,我选的当然是一篇大语言模型相关的论文:https://arxiv.org/abs/2210.06280

GReaT(Generation of Realistic Tabular data,真实表格数据生成)方法使用基于自注意力的自回归生成式大语言模型,来生成合成表格数据集。具体来说,作者使用了预训练的Transformer解码器网络(包括https://openai.com/blog/better-language-models/ 中的模型,以及更小的Distil-GPT-2——后者是类似论文https://arxiv.org/abs/1910.01108 中思路的“蒸馏”缩小版本)。

基于预训练的解码器式Transformer,GReaT流程包含两个步骤:(1)微调;(2)采样。

在第一步的微调阶段,GReaT执行以下操作:(1)将特征向量转换为文本;(2)打乱特征顺序,以编码顺序无关性;(3)用转换后的文本对Transformer进行微调。

figure05

微调阶段示意图(标注版),基于论文https://arxiv.org/abs/2210.06280

第二步(采样)的流程如下:(1)将(不完整的)输入送入微调后的Transformer;(2)从Transformer得到文本格式的完整特征向量;(3)将特征文本转换为表格格式。

figure06

采样阶段示意图(标注版),基于论文https://arxiv.org/abs/2210.06280

在“机器学习效率”实验中,研究者发现,用GReaT生成的合成数据训练分类器,效果比用其他方法生成的合成数据更好,也更接近原始数据的表现。

figure07

机器学习效率实验结果表(标注版),基于论文https://arxiv.org/abs/2210.06280

为评估合成数据与原始数据的相似度,“到最近记录的距离”图表显示,GReaT并没有照搬训练数据。此外,作者还做了一项“判别器度量”研究:他们将原始数据和合成数据混合,给每条数据打上标签,0代表原始,1代表合成。在这些数据集上训练的分类器平均准确率为70%——也就是说它们在一定程度上能分辨出合成数据。但GReaT的表现远优于其他合成数据方法(其准确率在75%到88%之间)。

figure08

判别器度量实验结果表(标注版),基于论文https://arxiv.org/abs/2210.06280

开源亮点

Scikit-learn 1.2.0:流水线终于可以返回Pandas DataFrame了

我最喜欢的机器学习库出了新版本,带来了很多有趣的新特性。但最大的亮点当属新增的 .set_output() 方法,可以配置流水线返回DataFrame对象:

举个例子
scalar = StandardScaler().set_output(transform=”pandas”) scalar.fit(X_df) ​ # X_trans_df is a pandas DataFrame X_trans_df = scalar.transform(X_df)

或者
log_reg = make_pipeline(    SimpleImputer(), StandardScaler(), LogisticRegression()) log_reg.set_output(transform=”pandas”)

以后我们再需要传递列名的时候,就不用写很多变通代码了。

更多新特性可以查看官方说明:https://scikit-learn.org/dev/whats_new/v1.2.html

虽然还没有正式发布,但你已经可以通过安装每日构建版来体验sklearn 1.2dev0版本:
pip install –pre –extra-index https://pypi.anaconda.org/scipy-wheels-nightly/simple scikit-learn

Embetter:适配Scikit-Learn的嵌入工具

我最近偶然发现了https://github.com/koaning/embetter ——一个小巧的、兼容scikit-learn的库,主打计算机视觉和文本的嵌入表示。用embetter,只需要4行代码,就能构建一个分类流水线,基于Transformer的句子嵌入训练逻辑回归模型:

text_emb_pipeline = make_pipeline(  ColumnGrabber(“text”),  SentenceEncoder(‘all-MiniLM-L6-v2’)  LogisticRegression() )

它可能不会刷新性能榜单,但在处理文本和图像数据集时,用来快速搭建一个性能基线非常方便好用。

Lightning 1.8:面向大Transformer的Colossal AI

Lightning(原PyTorch Lightning)发布新版本了!正好契合本期大语言模型的主题,它带来了一个全新的训练器策略:Colossal-AI。

选择带有良好默认配置的策略 trainer = Trainer(strategy=”colossalai”)

顾名思义,Colossal-AI通过实现多种并行算法,让我们能够训练超大规模的Transformer模型:

  • 数据并行
  • 流水线并行
  • 1D、2D、2.5D、3D张量并行
  • 序列并行
  • 零冗余优化

(这些都是什么?又是怎么工作的?这可是机器学习问答板块的绝佳话题!)

更多Lightning 1.8的新特性可以查看发布说明:https://github.com/Lightning-AI/lightning/releases/tag/1.8.0

PyTorch 1.13中的更优Transformer

下个月的PyTorch大会前夕,PyTorch也发布了1.13版本:https://pytorch.org/blog/PyTorch-1.13-release/ !其中一大亮点是BetterTransformer正式版——此前它在1.12中还是测试版。BetterTransformer面向生产环境的Transformer推理做了优化。更多信息可以看这个教程:https://pytorch.org/tutorials/beginner/bettertransformer_tutorial.html

Muse:生产环境中的扩散模型

我所在的Lightning AI团队推出了https://lightning.ai/muse ,展示了如何将Stable Diffusion这样的大模型部署到生产环境。项目仓库见https://github.com/Lightning-AI/stable-diffusion-deploy

figure09

这个应用配套了一篇分步讲解的文章(https://lightning.ai/pages/community/tutorial/deploy-diffusion-models/ ),分享了模型扩缩到数千用户规模时的经验和注意事项,涵盖自动扩缩容、动态批处理等方方面面。

机器学习问答

你是想学习新知识、练练手,还是准备面试?这个板块的问题说不定能帮上忙!

使用多GPU并行训练大机器学习模型,有哪些不同的机制?(提示:至少有5种!)这些多GPU训练范式各自的优缺点是什么?

上周问题解答

问题1:NLP中的分布假说是什么?应用在哪些地方?适用程度如何?

分布假说认为,出现在相同语境中的词,词义往往相近(原始出处:Zellig S. Harris 1954年的论文,https://doi.org/10.1080/00437956.1954.11659520 )。换句话说,两个词的词义越相似,它们出现在相似语境中的频率就越高。比如“猫”和“狗”经常出现在相似的语境中,关联性更强(都是哺乳动物,都是宠物),而“猫”和“三明治”的关联性就弱很多。在大规模数据集上,这个假说大体成立,但也很容易举出反例。

分布假说是https://en.wikipedia.org/wiki/Word2vec 背后的核心思想,很多自然语言Transformer模型也基于这个理念——比如https://en.wikipedia.org/wiki/BERT_(language_model) 中的掩码语言模型,以及https://en.wikipedia.org/wiki/GPT-3 采用的下一词预训练任务。

问题2:无状态训练和有状态训练的区别是什么?分别在什么时候用?

无状态(重新)训练和有状态训练,是生产模型的两种不同训练方式。无状态训练就像一个滑动窗口,在数据流的不同片段上反复重新训练模型。而在有状态训练中,我们先用初始批次的数据训练模型,之后有新数据到来时,定期更新模型(而不是重新训练)。

figure10

有状态训练 vs 无状态训练

两种范式没有绝对的优劣之分。不过有状态训练的一个优势是不需要永久存储数据。但反过来,如果条件允许,存储数据依然是个好主意——因为模型可能会遇到“糟糕”的更新,这时候(临时)切回无状态重新训练会更稳妥。

问题3:递归和动态规划的区别是什么?

递归和动态规划都是算法编程技术。

递归中,我们以迭代的方式将问题拆分为更小的子问题,通常称为“分治”。

动态规划则通过将子问题的解存储在支持快速(常数时间)查找的数据结构(比如字典)中,避免重复计算相同的子问题。存储子问题解的做法也常被称为“记忆化”(memoization,注意和“记忆”memorization不是一回事)。

实际应用中,我们经常把动态规划用在递归算法上。

名言佳句

人工智能/机器学习这个领域发展得太快了。聊到某些方法的时候,我都开始说“想当年我读研究生的时候”了……搞得我像个60岁的老太太。可我明明才毕业两年啊,哈哈。
—— https://twitter.com/adjiboussodieng/status/1582848642347503616?s=20&t=49xrbvxByg7lsKcC2Shjuw

近期活动

https://neurips.cc/ (顶级机器学习与人工智能会议)即将召开:2022年11月28日至12月1日。

如果你去参会的话,欢迎过来打个招呼!我会联合主持一场主题为“产业、学术与中间地带”(即从学术界到产业界的转型)的工作坊社交活动。到时候会有很多有意思的话题可以聊!

figure11

更多详情可以查看:https://sites.google.com/lightning.ai/neurips-scl-academia-industry/

https://pytorch.org/blog/announcing-pytorch-conference-2022/ 将于2022年12月2日在新奥尔良举办,是NeurIPS的卫星会议。如果你打算去的话,我也会在——欢迎过来打个招呼!

学习与效率小贴士

说到效率工作流,我有很多想分享的。但很多人问我的一个话题是:我怎么跟上机器学习与人工智能领域的发展?怎么找到有意思的论文?

2018到2021年,我担任https://arxiv.org/list/cs.LG/new 板块的版主。每周好几次,我都会浏览每天上传的100到300篇机器学习论文的标题。我可以说,问题从来不是找不到有意思的论文,而是怎么避免分心——怎么做好优先级排序和时间管理。

互联网很精彩,有意思的东西太多了。但残酷的真相是,我们根本看不完。机器学习领域尤其如此,发展太快,有意思的细分方向太多了:激活函数、自动机器学习、校准、因果推断、CNN架构……

我应对“错过焦虑”的方法是做列表。每个我感兴趣的大类别,我都建一个列表。有意思的类别可太多了!

figure12

每个列表里,我会收集有意思的书籍、研究论文、博客文章、视频、Reddit讨论,有时候甚至还有Twitter的帖子。我会全看完吗?当然不会——全跟上的话就得全职干这个了。我只收录其中一部分有意思的内容。通常我只关注能帮我学到新东西的资源,而不是去搭建宽泛的知识库、复刻一个个人维基百科。

然后我会挑出一些本周想读的资源(每周复盘的习惯可以改天再说)。这么做我发现,我收录的内容里95%都没那么重要——和你当前项目相关的高优先级内容才是重点。所以,忽略一些资源不代表你懒或者错过了什么,而是我们在明确优先级,做最重要的事。(对了,保持这些列表很有用,有时候写东西或者做研究项目的时候特别方便!)

我常用和常看的资源有哪些?

(注:上面的截图里,你可能注意到我用https://www.onenote.com/ 来做这些列表。为什么用OneNote?其实和很多场景一样,工具不重要,重要的是习惯和工作流。我选OneNote只是因为复制粘贴最省事——Markdown保存和插入截图总要多一步。而且它多设备同步——当你在常去的茶馆或者咖啡店,聊到兴头上想查点东西的时候,这个功能就很实用。当然,还有很多其他工具也很好用,或者各有取舍。但还是那句话,工具不重要,选适合自己的就行。)

这份通讯是我的个人兴趣项目,没有直接的报酬。但如果你愿意支持我,可以考虑购买我出版的书:https://sebastianraschka.com/books 。如果你觉得内容有启发、有帮助,也欢迎推荐给你的朋友和同事。

figure13

https://www.amazon.com/Machine-Learning-PyTorch-Scikit-Learn-scikit-learn-ebook-dp-B09NW48MR1/dp/B09NW48MR1/https://nostarch.com/machine-learning-and-ai-beyond-basics ,以及http://mng.bz/M96o

非常感谢你的支持!