数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 MCMC 采样
- 机器学习方法概论
统计学习
深度学习
- 深度学习简介
- 深度前馈网络
- 反向传播算法
- 正则化
- 深度学习中的最优化问题
- 卷积神经网络
- CNN:图像分类
- 循环神经网络 RNN
- Transformer
- 一、Transformer [2017]
- 二、Universal Transformer [2018]
- 三、Transformer-XL [2019]
- 四、GPT1 [2018]
- 五、GPT2 [2019]
- 六、GPT3 [2020]
- 七、OPT [2022]
- 八、BERT [2018]
- 九、XLNet [2019]
- 十、RoBERTa [2019]
- 十一、ERNIE 1.0 [2019]
- 十二、ERNIE 2.0 [2019]
- 十三、ERNIE 3.0 [2021]
- 十四、ERNIE-Huawei [2019]
- 十五、MT-DNN [2019]
- 十六、BART [2019]
- 十七、mBART [2020]
- 十八、SpanBERT [2019]
- 十九、ALBERT [2019]
- 二十、UniLM [2019]
- 二十一、MASS [2019]
- 二十二、MacBERT [2019]
- 二十三、Fine-Tuning Language Models from Human Preferences [2019]
- 二十四 Learning to summarize from human feedback [2020]
- 二十五、InstructGPT [2022]
- 二十六、T5 [2020]
- 二十七、mT5 [2020]
- 二十八、ExT5 [2021]
- 二十九、Muppet [2021]
- 三十、Self-Attention with Relative Position Representations [2018]
- 三十一、USE [2018]
- 三十二、Sentence-BERT [2019]
- 三十三、SimCSE [2021]
- 三十四、BERT-Flow [2020]
- 三十五、BERT-Whitening [2021]
- 三十六、Comparing the Geometry of BERT, ELMo, and GPT-2 Embeddings [2019]
- 三十七、CERT [2020]
- 三十八、DeCLUTR [2020]
- 三十九、CLEAR [2020]
- 四十、ConSERT [2021]
- 四十一、Sentence-T5 [2021]
- 四十二、ULMFiT [2018]
- 四十三、Scaling Laws for Neural Language Models [2020]
- 四十四、Chinchilla [2022]
- 四十七、GLM-130B [2022]
- 四十八、GPT-NeoX-20B [2022]
- 四十九、Bloom [2022]
- 五十、PaLM [2022] (粗读)
- 五十一、PaLM2 [2023](粗读)
- 五十二、Self-Instruct [2022]
- 句子向量
- 词向量
- 传统CTR 预估模型
- CTR 预估模型
- 一、DSSM [2013]
- 二、FNN [2016]
- 三、PNN [2016]
- 四、DeepCrossing [2016]
- 五、Wide 和 Deep [2016]
- 六、DCN [2017]
- 七、DeepFM [2017]
- 八、NFM [2017]
- 九、AFM [2017]
- 十、xDeepFM [2018]
- 十一、ESMM [2018]
- 十二、DIN [2017]
- 十三、DIEN [2019]
- 十四、DSIN [2019]
- 十五、DICM [2017]
- 十六、DeepMCP [2019]
- 十七、MIMN [2019]
- 十八、DMR [2020]
- 十九、MiNet [2020]
- 二十、DSTN [2019]
- 二十一、BST [2019]
- 二十二、SIM [2020]
- 二十三、ESM2 [2019]
- 二十四、MV-DNN [2015]
- 二十五、CAN [2020]
- 二十六、AutoInt [2018]
- 二十七、Fi-GNN [2019]
- 二十八、FwFM [2018]
- 二十九、FM2 [2021]
- 三十、FiBiNET [2019]
- 三十一、AutoFIS [2020]
- 三十三、AFN [2020]
- 三十四、FGCNN [2019]
- 三十五、AutoCross [2019]
- 三十六、InterHAt [2020]
- 三十七、xDeepInt [2023]
- 三十九、AutoDis [2021]
- 四十、MDE [2020]
- 四十一、NIS [2020]
- 四十二、AutoEmb [2020]
- 四十三、AutoDim [2021]
- 四十四、PEP [2021]
- 四十五、DeepLight [2021]
- 图的表达
- 一、DeepWalk [2014]
- 二、LINE [2015]
- 三、GraRep [2015]
- 四、TADW [2015]
- 五、DNGR [2016]
- 六、Node2Vec [2016]
- 七、WALKLETS [2016]
- 八、SDNE [2016]
- 九、CANE [2017]
- 十、EOE [2017]
- 十一、metapath2vec [2017]
- 十二、GraphGAN [2018]
- 十三、struc2vec [2017]
- 十四、GraphWave [2018]
- 十五、NetMF [2017]
- 十六、NetSMF [2019]
- 十七、PTE [2015]
- 十八、HNE [2015]
- 十九、AANE [2017]
- 二十、LANE [2017]
- 二十一、MVE [2017]
- 二十二、PMNE [2017]
- 二十三、ANRL [2018]
- 二十四、DANE [2018]
- 二十五、HERec [2018]
- 二十六、GATNE [2019]
- 二十七、MNE [2018]
- 二十八、MVN2VEC [2018]
- 二十九、SNE [2018]
- 三十、ProNE [2019]
- Graph Embedding 综述
- 图神经网络
- 一、GNN [2009]
- 二、Spectral Networks 和 Deep Locally Connected Networks [2013]
- 三、Fast Localized Spectral Filtering On Graph [2016]
- 四、GCN [2016]
- 五、神经图指纹 [2015]
- 六、GGS-NN [2016]
- 七、PATCHY-SAN [2016]
- 八、GraphSAGE [2017]
- 九、GAT [2017]
- 十、R-GCN [2017]
- 十一、 AGCN [2018]
- 十二、FastGCN [2018]
- 十三、PinSage [2018]
- 十四、GCMC [2017]
- 十五、JK-Net [2018]
- 十六、PPNP [2018]
- 十七、VRGCN [2017]
- 十八、ClusterGCN [2019]
- 十九、LDS-GNN [2019]
- 二十、DIAL-GNN [2019]
- 二十一、HAN [2019]
- 二十二、HetGNN [2019]
- 二十三、HGT [2020]
- 二十四、GPT-GNN [2020]
- 二十五、Geom-GCN [2020]
- 二十六、Graph Network [2018]
- 二十七、GIN [2019]
- 二十八、MPNN [2017]
- 二十九、UniMP [2020]
- 三十、Correct and Smooth [2020]
- 三十一、LGCN [2018]
- 三十二、DGCNN [2018]
- 三十三、AS-GCN
- 三十四、DGI [2018]
- 三十五、DIFFPOLL [2018]
- 三十六、DCNN [2016]
- 三十七、IN [2016]
- 图神经网络 2
- 图神经网络 3
- 推荐算法(传统方法)
- 一、Tapestry [1992]
- 二、GroupLens [1994]
- 三、ItemBased CF [2001]
- 四、Amazon I-2-I CF [2003]
- 五、Slope One Rating-Based CF [2005]
- 六、Bipartite Network Projection [2007]
- 七、Implicit Feedback CF [2008]
- 八、PMF [2008]
- 九、SVD++ [2008]
- 十、MMMF 扩展 [2008]
- 十一、OCCF [2008]
- 十二、BPR [2009]
- 十三、MF for RS [2009]
- 十四、 Netflix BellKor Solution [2009]
- 推荐算法(神经网络方法 1)
- 一、MIND [2019](用于召回)
- 二、DNN For YouTube [2016]
- 三、Recommending What Video to Watch Next [2019]
- 四、ESAM [2020]
- 五、Facebook Embedding Based Retrieval [2020](用于检索)
- 六、Airbnb Search Ranking [2018]
- 七、MOBIUS [2019](用于召回)
- 八、TDM [2018](用于检索)
- 九、DR [2020](用于检索)
- 十、JTM [2019](用于检索)
- 十一、Pinterest Recommender System [2017]
- 十二、DLRM [2019]
- 十三、Applying Deep Learning To Airbnb Search [2018]
- 十四、Improving Deep Learning For Airbnb Search [2020]
- 十五、HOP-Rec [2018]
- 十六、NCF [2017]
- 十七、NGCF [2019]
- 十八、LightGCN [2020]
- 十九、Sampling-Bias-Corrected Neural Modeling [2019](检索)
- 二十、EGES [2018](Matching 阶段)
- 二十一、SDM [2019](Matching 阶段)
- 二十二、COLD [2020 ] (Pre-Ranking 模型)
- 二十三、ComiRec [2020](https://www.wenjiangs.com/doc/0b4e1736-ac78)
- 二十四、EdgeRec [2020]
- 二十五、DPSR [2020](检索)
- 二十六、PDN [2021](mathcing)
- 二十七、时空周期兴趣学习网络ST-PIL [2021]
- 推荐算法之序列推荐
- 一、FPMC [2010]
- 二、GRU4Rec [2015]
- 三、HRM [2015]
- 四、DREAM [2016]
- 五、Improved GRU4Rec [2016]
- 六、NARM [2017]
- 七、HRNN [2017]
- 八、RRN [2017]
- 九、Caser [2018]
- 十、p-RNN [2016]
- 十一、GRU4Rec Top-k Gains [2018]
- 十二、SASRec [2018]
- 十三、RUM [2018]
- 十四、SHAN [2018]
- 十五、Phased LSTM [2016]
- 十六、Time-LSTM [2017]
- 十七、STAMP [2018]
- 十八、Latent Cross [2018]
- 十九、CSRM [2019]
- 二十、SR-GNN [2019]
- 二十一、GC-SAN [2019]
- 二十二、BERT4Rec [2019]
- 二十三、MCPRN [2019]
- 二十四、RepeatNet [2019]
- 二十五、LINet(2019)
- 二十六、NextItNet [2019]
- 二十七、GCE-GNN [2020]
- 二十八、LESSR [2020]
- 二十九、HyperRec [2020]
- 三十、DHCN [2021]
- 三十一、TiSASRec [2020]
- 推荐算法(综述)
- 多任务学习
- 系统架构
- 实践方法论
- 深度强化学习 1
- 自动代码生成
工具
- CRF
- lightgbm
- xgboost
- scikit-learn
- spark
- numpy
- matplotlib
- pandas
- huggingface_transformer
- 一、Tokenizer
- 二、Datasets
- 三、Model
- 四、Trainer
- 五、Evaluator
- 六、Pipeline
- 七、Accelerate
- 八、Autoclass
- 九、应用
- 十、Gradio
Scala
- 环境搭建
- 基础知识
- 函数
- 类
- 样例类和模式匹配
- 测试和注解
- 集合 collection(一)
- 集合collection(二)
- 集成 Java
- 并发
五十、PaLM [2022] (粗读)
原始论文
《PaLM: Scaling Language Modeling with Pathways》
83 页,这里进行了精简。
BERT/T5
等模型,尽管在数以千计的自然语言任务中达到了近乎SOTA
,但缺点是它们需要大量的task-specific
训练实例来微调模型。此外,至少有一部分的模型参数必须被更新以适应任务,从而增加了模型微调和部署的复杂性。GPT-3
证明了极其大型的自回归语言模型可用于few-shot prediction
,其中,只需要为模型提供一个关于任务的自然语言描述、以及(可选的)关于如何完成任务的少量示例。few-shot evaluation
已被证明可以达到非常强大的效果,而不需要大规模的task-specific data collection
或模型参数更新。自
GPT-3
以来,其他一些大型自回归语言模型已经被开发出来,它们继续推动着技术的发展。这些GPT-3
之后的模型中最强大的是GLaM
、Gopher
、Chinchilla
、Megatron-Turing NLG
和LaMDA
。与GPT-3
一样,这些模型都是Transformer
架构的变种。这些模型的改进主要来自于以下一种或多种方法:在深度和宽度上扩大模型的规模、增加模型训练的tokens
的数量、在更多样化来源的更加干净的数据集上进行训练、通过sparsely activated module
在不增加计算成本的情况下增加模型容量。在论文
《PaLM: Scaling Language Modeling with Pathways》
中,作者延续了语言模型的scaling
路线,在高质量文本的780B tokens
上训练了一个540B
参数的、densely activated
的、自回归的Transformer
模型,称作Pathways Language Model: PaLM
。 这是通过Pathways
实现的,这是一个新的机器学习系统,能够在成千上万的accelerator chips
上高度便捷地训练非常大的神经网络。这项工作的主要收获如下:
efficient scaling
:作者展示了Pathways
的首次大规模使用,这是一个新的机器学习系统,能够以高度高效的方式在数千或数万个accelerator chips
上训练单个模型。通过Pathways
,作者在6144
个TPU v4
芯片上训练了一个540B
参数的语言模型,其效率水平是以前这种规模的模型所不能达到的。以前的大多数大型语言模型要么是在单个
TPU
系统上训练的,要么是使用pipeline
并行在GPU
集群或多个TPU v3 pod
中scale
(最大规模为4096
个TPU v3
芯片)。来自
scaling
的持续的改善:作者在数百个自然语言、代码和数学推理任务中评估了PaLM
,并在这些基准中的绝大多数上取得了SOTA
结果,且有很大的提升。这有力地证明了大型语言模型的scaling improvement
既没有趋于平稳也没有达到饱和点。突破性的能力:作者展示了在语言理解和生成方面的突破性能力,跨越了许多不同的任务。
不连续的提升:为了更好地理解
scaling
行为,作者提出了三种不同参数规模的结果:8B/62B/540B
。通常情况下,从62B
扩展到540B
的结果与从8B
扩展到62B
的结果相似,这与神经网络扩展中经常观察到的"power law"
规则一致。然而,对于某些任务,作者观察到不连续的改进,与从8B
到62B
的scaling
相比,从62B
到540B
的scaling
导致了准确率的急剧上升。这表明,当模型达到足够大的规模时,大型语言模型的新能力就会涌现。多语言理解:以前关于大型语言模型的工作在多语言领域进行了有限的评估。在这项工作中,作者对包括机器翻译、摘要、问答在内的各种语言的多语言基准进行了更彻底的评估。
偏见和毒性:作者还评估了模型在
distributional bias and toxicity
方面的表现,从而得出了一些洞察:首先,对于性别和职业偏见,作者发现
Winogender
共指任务的准确率随着模型规模的扩大而提高,PaLM 540B
在1-shot/few-shot setting
中创造了新的SOTA
结果。其次,对种族/宗教/性别的
prompt continuation
进行的co-occurence analysis
表明,该模型有可能错误地将穆斯林与恐怖主义、极端主义和暴力联系起来。这种行为在不同的模型规模上是一致的。最后,对
prompt continuation
任务的毒性分析表明,与8B
模型相比,62B
和540B
模型的总体毒性水平略高。然而,model-generated continuation
的毒性与prompting text
的毒性高度相关,而human-generation continuation
则没有强烈的毒性相关性。这表明,与human-generated text
相比,模型受prompt
风格的影响更为严重。
相关工作:在过去的几年里,通过大规模的语言建模,自然语言能力有了很大的进步。广义上,语言建模指的是预测序列中的
next token
、或预测序列中的masked span
的方法。当应用于庞大的语料库时(包括从互联网、书籍和论坛上爬取的数据),这些自监督目标已经产生了具有高级语言理解能力和高级语言生成能力的模型。通过对数据量、参数量和计算量的scaling
,模型质量的可预测的power-law
使得这种方法成为能力越来越强的模型的可靠方法。Transformer
架构在现代accelerators
上释放出了无与伦比的效率,并成为语言模型的事实方法。在短短的四年时间里,最大的模型在参数规模上和总计算量上都增加了几个数量级。最早成功的
scale
之一是345M
参数的encoder-only
的BERT
模型,它极大地促进了包括SuperGLUE
在内的分类任务的语言理解。Generative Pretrained Transformer: GPT
系列是decoder-only
模型,创造了SOTA
的语言建模性能。T5
随后预训练并微调了高达11B
参数的encoder-decoder
模型,为迁移学习设立了新的标准。GPT
系列的最新模型,即175B
参数的GPT-3
模型从inference-only
、few-shot
技术中发现了新的能力。
在
GPT-3
之后,规模继续扩大,178B
参数的Jurassic-1
、280B
参数的Gopher
模型、530B
的Megatron-Turing NLG
,以及包括Switch Transformers
和GLaM
在内的万亿参数sparse model
相继出现就是证明。这些核心自然语言能力的进步也伴随着其他领域的改进,包括理解和生成代码。此外,对话应用已经通过scale
取得了进展,最近的证据是LaMDA
,一个137B
的decoder-only
模型。最后,额外的工作使语言模型能够遵循指令从而提高了这些模型的实用性和可靠性。这些较大的模型不再能被有效地训练,甚至不能被放入单个
accelerator
的内存中。因此,出现了跨accelerator
分割模型张量的技术(《Mesh-TensorFlow: Deep learning for supercomputers》
),或者是跨accelerator
分离模型层,然后在各阶段之间对activation
进行流水线(《GPipe: E cient training of giant neural networks using pipeline parallelism》
)。许多其他工作旨在提高模型的规模,同时限制通信开销。PaLM
通过Pathways
基础设施使用数据并行和模型并行的混合。人们已经提出了一些架构变体,以帮助更有效地
scale
模型。一个领域是检索模型,其目的是通过embedding
大量的文本来大幅减少模型的大小,模型随后可以访问。通过允许不同的样本使用不同的参数子集,像Mixture-of-Experts
这样的稀疏模型允许scaling
模型的规模。序列长度的稀疏性是一个允许以极长序列进行训练的领域。未来的工作可以将这些研究方向的改进结合到未来版本的Pathways
语言模型中。
50.1 模型架构
PaLM
使用标准的decoder-only Transformer
架构,并且做了如下的修改:SwiGLU
激活函数:我们使用SwiGLU
激活函数( $ \text{Swish}(\mathbf W \mathbf{\vec x}) \odot (\mathbf V \mathbf{\vec x}) $ ,其中 $ \odot $ 为逐元素乘法 )作为MLP
的中间激活函数。因为与标准ReLU
、GeLU
或Swish
激活函数相比,SwiGLU
已被证明可以显著提高质量(《GLU variants improve transformer》
)。 请注意,这确实需要在MLP
中进行三次矩阵乘法,而不是两次,但《GLU variants improve transformer》
证明了在compute-equivalent
实验中质量的提高(即标准ReLU
变体具有相应更大的尺寸)。 $ \text{Swish}_\beta(x) = x\sigma(\beta x) $ 。并行层:我们在每个
Transformer block
内使用一种 ”并行“ 公式(《GPT-J-6B: A 6 Billion Parameter Autoregressive Language Model》
),而不是标准的 ”串行“公式 。具体而言,标准的公式为:而并行公式为:
由于
MLP
和Attention
的输入矩阵的乘法可以被fused
,因此并行公式在large scale
下的训练速度大约提高了15%
。消融实验表明,在8B
规模时有小的质量下降,但在62B
规模时没有质量下降,因此我们推断,在540B
规模时并行层对质量的影响应该是中性的。Multi-Query Attention
:标准的Transformer
公式使用 $ k $ 个attention head
,其中在每个timestep
中,输入向量被线性投用到query, key, value
张量,query/key/value
张量的形状都是 $ \mathbb R^{k\times h} $ , $ h $ 为attention head size
。然而在这里,每个
head
的key/value
投影是共享的,即key
和value
张量的形状为 $ \mathbb R^{1\times h} $ ,而query
张量的形状还是 $ \mathbb R^{k\times h} $ 。我们发现,这对模型质量和训练速度的影响是中性的(《Fast transformer decoding: One write-head is all you need》
),但在自回归解码时却能节省大量成本。这是因为在自回归解码过程中,标准的multi-headed attention
在accelerator
硬件上的效率很低,因为key/value
张量在样本之间不共享,而且一次只解码一个token
。RoPE Embeddings
:我们使用RoPE embedding
(《Roformer: Enhanced transformer with rotary position embedding》
) 而不是标准的absolute/relative position embedding
,因为RoPE embedding
已被证明在长序列中具有更好的性能。Shared Input-Output Embeddings
:我们共享input embedding matrix
和output embedding matrix
,这是在过去的工作中经常做的(但不是普遍的)。No Biases
:在任何一个dense kernel
或layer norm
中都没有使用偏置。我们发现这增加了大型模型的训练稳定性。词表:我们使用了具有
256k tokens
的SentencePiece
词表(vocabulary
),选择该词表是为了支持训练语料库中的大量语言,而不需要过度的tokenization
。词表是由训练数据生成的,我们发现这提高了训练效率。词表是完全无损的和可逆的,这意味着词表中完全保留了空白符(对code
数据来说特别重要),out-of-vocabulary
的Unicode
字符被分割成UTF-8
字节,每个字节都有一个vocabulary token
。数字总是被分割成单独的digit token
(例如:"123.5 -> 1 2 3 . 5"
)。
model scale
的超参数:在这项工作中,我们比较了三种不同的模型规模:540B
参数、62B
参数、8B
参数。FLOPs per token
数量大约等于参数的数量,因为这些模型是标准的dense Transformer
。这些模型是用下表中的超参数构建的。这三个模型使用相同的数据和词表进行了相同的训练(除了batch size
)。Model Card
:参考论文的附录E
。
50.2 训练数据集
PaLM
预训练数据集由一个高质量的语料库组成,该语料库有780B tokens
,包括了过滤的网页、书籍、维基百科、新闻文章、源代码、社交媒体对话等数据。 这个数据集是基于用于训练LaMDA
和GLaM
的数据集。我们在恰好一个epoch
的数据上训练所有三个模型(对所有模型的shuffle
相同),并选择混合比例以避免在任何子数据集重复数据。代码数据是从
GitHub
上的开源repositories
中获得。我们通过license
来过滤文件。此外我们根据文件名过滤文件,从而限制在24
种常见的编程语言之一,包括Java, HTML, Javascript, Python, PHP, C#, XML, C++, C
。最终得到196 GB
的源代码数据。此外,我们根据文件之间的Levenshtein
距离去除重复的文件,因为已知重复的文件在源代码库中很常见。下表列出了用于创建最终的
PaLM
数据集mixture
的各种数据源的比例。我们在后面内容中检查了数据污染,并提出了我们的训练数据集和评估数据之间的overlap
分析。附录D
包含一个数据表,其中有更多信息,包括语言比例的细分。这里的数据集没有开源。
50.3 训练的基础设施
我们的训练代码库和评估代码库基于
JAX
和T5X
,所有模型都在TPU v4 Pods
上训练。PaLM 540B
在两个通过数据中心网络(data center network: DCN
)连接的TPU v4 Pod
上训练,使用模型并行和数据并行的组合。每个TPU v4 Pod
使用3072
个TPU v4 chips
,连接到768
台主机。这个系统是迄今为止描述的最大的TPU
配置,使我们能够有效地将训练规模扩大到6144
个芯片,而不需要使用任何流水线并行。相比之下:LaMDA, GLaM
分别在单个TPU
系统上进行训练,没有利用流水线并行或数据中心网络。Megatron-Turing NLG 530B
是在2240
个A100 GPU
上使用模型并行、数据并行、以及流水线并行的组合进行训练的。Gopher
是在四个DCN
连接的TPU v3 Pod
(每个Pod
有1024
个TPU v3
芯片)上使用pod
之间的pipelining
进行训练。
pipelining
通常用于DCN
,因为它对带宽的要求较低,并且在模型并行和数据并行所允许的最大有效规模之外提供额外的并行性。pipelining
通常将training batch
分成若干个micro-batches
,但它有重要的缺点:首先,它产生了
pipelining "bubble"
的时间开销,即在前向传播和反向传播的开始和结束时,许多设备在填充和清空流水线时完全闲置。其次,它需要更高的内存带宽,因为要从内存中为
mini-batch
中的每个micro-batch
重新加载权重。在某些情况下,它还涉及增加软件的复杂性。
我们能够使用以下策略将
PaLM 540B
的pipeline-free training
有效地扩展到6144
个芯片:每个
TPU v4 Pod
包含一个完整的模型参数副本,每个权重张量使用12
路模型并行、以及256
路完全分片的数据并行在3072
个芯片上被partitioned
(《Gspmd: general and scalable parallelization for ml computation graphs》
称之为"2D finalized"
方法)。在前向传播过程中,权重在数据并行轴上被
all-gathered
,并从每层保存一个完全分片的activation
张量。在反向传播过程中,其余的
activations
被rematerialized
,因为与重新计算相比,在更大的batch size
下,这将带来更高的训练吞吐量。
下图展示了
Pathways
系统如何执行双向的pod-level
数据并行。一个
Python
客户端构建了一个sharded dataflow
程序(如下图左侧所示),该程序在远程服务器上启动JAX/XLA work
,每个服务器由一个TPU pod
组成。该程序包含一个用于within-pod
的forward+backward computation
(包括within-pod gradient reduction
)的组件A
、用于cross-pod gradient transfer
的transfer subgraph
、以及用于optimizer update
(包括本地梯度和远程梯度的求和)的组件B
。Pathways
程序在每个pod
上执行组件A
,然后将输出梯度转移到另一个pod
,最后在每个pod
上执行组件B
。
双路
pod-level
数据并行的一个挑战是:如何在6144
个TPU v4
芯片(连接到1536
个主机)的规模上,实现cross-pod gradient transfer
的高训练吞吐量。注意:cross-pod gradient transfer
只需要在两个pod
的相应主机之间进行1:1
的传输,因为每个core
只需要远程梯度,用于获得它的model-sharded parameters
。由于在每个core
完成梯度计算后才开始传输,这导致了一个非常突发的工作负载,所有主机在同一时间通过data-center-network links
传输他们的梯度。具体而言,每对主机在每个training step
中交换大约1.3GB
的梯度,相当于所有主机的总爆发量为81Tbps
。我们通过对
Pathways
的networking stack
的精心设计,相对于单个pod
的吞吐量,我们实现了约1.95
倍的训练吞吐量(理论吞吐量为2
倍,因为有两个pod
)。与理论上2
倍的吞吐量相比,性能上的差距是由于反向传播和cross-pod gradient reduction
之间缺乏overlap
。训练效率:之前报道的大多数用于语言模型的
accelerator
效率的数字都使用了一个我们称之为hardware FLOPs utilization: HFU
的指标。这通常是对一个给定设备上观察到的FLOPs
与其理论峰值FLOPs
的比值的估计。然而,HFU
有几个问题:首先,硬件
FLOPs
的执行数量与系统和实现有关,编译器中的设计选择可能导致不同的operations
数量。rematerialization
是一种广泛使用的技术,用来trade off
内存用量和计算量。为了有效地计算神经网络架构的反向传播,必须将该batch
的许多intermediate activations
存储在内存中。如果这些intermediate activations
无法被全部存储,一些前向传播可以被重新计算(使一些activations
被rematerialized
而不是被存储)。这就产生了一个权衡,使用额外的硬件FLOPs
可以节省内存,但是训练系统的最终目标是实现tokens per second
的高吞吐量(因此训练的时间要快),而不是使用尽可能多的硬件FLOPs
。其次,测量观察到的硬件
FLOPs
取决于用于计数或跟踪它们的方法。观察到的硬件FLOPs
已经根据分析核算(《Efficient large-scale language model training on gpu clusters using megatron-lm》
)以及使用硬件性能计数器(《Gspmd: general and scalable parallelization for ml computation graphs》
)进行了报告。
鉴于这些问题,我们认识到
HFU
不是一个一致的、有意义的衡量LLM
训练效率的指标。我们提出了一个新的指标,即model FLOPs utilization: MFU
,该指标与实现无关,并允许对系统效率进行更清晰的比较。这是观察到的吞吐量(tokens-per-second
)相对于在FLOPs
峰值下运行的系统的理论最大吞吐量的比率。至关重要的是,理论上的最大吞吐量只考虑了计算前向传播+反向传播所需的operations
,而不是rematerialization
。因此,MFU
允许在不同系统上的训练运行之间进行公平的比较,因为分子只是观察到的tokens-per-second
,而分母只取决于模型结构和给定系统的最大FLOPs
。我们在附录B
中阐述了计算MFU
的数学公式。我们在下表中介绍了
PaLM 540B
的MFU
。
50.4 训练配置
模型训练遵从针对大型
Transformer
语言模型的标准配置,细节如下:weight initialization
:kernel weights
(除了embedding
和layer norm scale
之外的所有参数)通过fan-in variance scaling
来初始化,即:其中:
$ n_\text{in} $ 为kernel
的input
维度。input embedding
通过标准正态分布来初始化: $ \mathbf E\sim \mathcal N(0, 1) $ ,因为layer normalization
并未应用到embedding
上。因为input embedding layer
和output embedding layer
是共享的,因此我们将pre-softmax output logits
缩放了 $ \frac{1}{n} $ ,其中 $ n $ 为embedding size
。optimizer
:模型采用Adafactor optimizer
来训练,没有factorization
。这本质上等同于parameter scaling
的Adam
, 即,通过参数矩阵的平方根值对学习率进行缩放。因为weight initialization
与 $ 1/\sqrt n $ 成正比,这样做的效果类似于GPT-3
对Adam
学习率的手动缩放。然而,parameter scaling
的好处是,在不同scale
上操作的参数矩阵(embedding scale
和layer norm scale
)的学习率不会以相同的速度缩放。optimization
超参数:对于Adafactor
:刚开始
10k
个step
的学习率为 $ 10^{-2} $ ,然后以 $ \frac {1}{\sqrt k} $ 的速度衰减,其中 $ k $ 为step
数量。一阶动量系数为
$ \beta_1=0.9 $ 。二阶动量系数为 $ \beta_2=1.0-k^{-8} $ 。在训练大型语言模型中,我们发现这种 $ \beta_2 $ 要比 $ \beta_2=0.99 $ 更稳定,因为在较短的窗口内,rare embedding tokens
可能有较差的estimated second moment
。阈值为
1.0
的全局梯度范数裁剪。动态的
weight decay
,系数为 $ \text{lr}^{2.0} $ ,其中lr
为当前的学习率。
损失函数 :模型用标准的
language modeling loss function
来训练的,它是所有token
的平均对数概率,没有标签平滑。此外还有一个辅助损失 $ z_\text{loss} = 10^{-4}\times \log^2 Z $ 从而鼓励softmax normalizer
$ \log (Z) $ 趋向于零,我们发现这增加了训练的稳定性。序列长度:所有模型都使用了
2048
的序列长度。输入样本被拼接在一起,然后分割成正好是2048 tokens
的序列,因此没有padding tokens
,但样本可以在中间被分割。输入样本用一个特殊的[eod] token
来区分开。batch size
:对于所有的模型,我们在训练过程中增加batch size
。对于最大的模型,我们使用
batch size = 512
(1M tokens per batch
)直到step 50k
,然后加倍到batch size = 1024
(2M tokens per batch
)直到step 115k
,最后再加倍到batch size = 2048
(4M tokens per batch
),直到训练完成(最终step 255k
)。较小的模型也遵循类似的schedule
。使用这种
batch size schedule
的原因有两个方面:较小的
batch size
在训练的早期更加sample efficient
(在给定tokens seen
的条件下具有更好的loss
),而较大的batch size
由于更好的梯度估计在训练后期是有益的(《Don't decay the learning rate, increase the batch size》
、《An empirical model of large-batch training》
)。较大的
batch size
导致更大的矩阵乘法维数,这增加了TPU
的效率。
bitwise determinism
:该模型从任何checkpoint
都是完全可reproducible
的。换句话说,如果模型在一次运行中已经训练到17k
步,而我们从15k checkpoint
重新开始,那么训练框架保证在从15k checkpoint
到17k
的两次运行中产生相同的结果。这通过两种方式实现:JAX+XLA+T5X
提供的bitwise-deterministic
建模框架。deterministic dataset pipeline
,其中随机混洗数据以random-access format
写出,因此给定的training batch
的内容仅是step
数量的函数。
dropout
:模型训练期间没有采用dropout
,然而在微调期间在大多数情况下使用了dropout rate = 0.1
。
训练不稳定:对于最大的模型,尽管启用了梯度剪裁,我们在训练过程中还是观察到了大约
20
次loss
尖峰。这些尖峰发生在非常不规则的时间间隔内,有时发生在训练的后期,而在训练较小的模型时没有观察到。对于最大的模型,由于训练成本的缘故,我们无法确定一个原则性的策略来缓解这些尖峰。相反,我们发现一个简单的策略可以有效地缓解这个问题:我们从尖峰开始前大约
100
步的checkpoint
重新开始训练,并跳过大约200 ~ 500
个data batch
,这些data batch
涵盖了尖峰之前和尖峰期间的data batch
。通过这种缓解措施,loss
没有在相同的step
再次飙升。我们不认为尖峰是由不良数据本身造成的,因为我们做了几个消融实验,在这些实验中,我们抽取了尖峰周围的
data batch
,然后从一个较早的checkpoint
开始对这些相同的data batch
进行训练。在这些情况下,我们没有看到一个尖峰。这意味着尖峰的出现只是由于特定的data batch
与特定的模型参数状态的结合。在未来,我们计划研究在非常大的语言模型中对loss
峰值的更有原则的缓解策略。
50.5 评估
50.5.1 英语 NLP 任务
为了和之前的大型语言模型进行比较,我们在相同的
29
个英文benchmark
上评估了PaLM
模型。这些benchmark
包括:Open-Domain Closed-Book Question Answering tasks
:TriviaQA, Natural Questions, Web Questions
。Cloze and Completion tasks
:LAMBADA, HellaSwag, StoryCloze
。Winograd-style tasks
:Winograd, WinoGrande
。Common Sense Reasoning
:PIQA, ARC, OpenBookQA
。In-context Reading Comprehension
:DROP, CoQA, QuAC, SQuADv2, RACE
。SuperGLUE
。Natural Language Inference (NLI)
:Adversarial NLI
。
Table 4
包括PaLM 540B
的结果和其他大型语言模型的SOTA
结果。在这个表中,我们只考虑pretrained language model
的单个checkpoint
结果。任何使用微调或多任务适应的模型都不包括在该表中。可以看到:PaLM 540B
在1-shot setting
的29
项任务中的24
项,以及在few-shot setting
的29
项任务中的28
项,都优于之前的SOTA
。虽然模型的大小对取得这些结果起到了重要的作用,但
PaLM 540B
在所有基准上都超过了类似大小的模型(Megatron-Turing NLG 530B
)。这表明预训练数据集、训练策略、以及training tokens
数量也对取得这些结果起到了重要作用。
Table 5
列出了自然语言理解(Natural Language Understanding: NLU
)和自然语言生成(Natural Language Generation: NLG
)任务的平均分数。PaLM 540B
在这两类任务中的平均得分都提高了5
分以上。如表中所示,PaLM
模型在每个类别中的平均得分也随着规模的扩大而提高。微调:我们在
SuperGLUE benchmark
中对PaLM
进行了微调,Adafactor optimizer
的微调学习率为 $ 5\times 10^{-5} $ ,batch size = 32
。PaLM
通常在少于15K
步的微调过程中收敛。Table 6
报告了在SuperGLUE
上的验证集结果,结果表明PaLM
获得了接近SOTA
的有竞争力的性能。值得注意的是,SuperGLUE
上表现最好的两个模型都是使用span corruption objective
训练的encoder-decoder
模型。已有研究表明,当训练成本相同时,这样的架构通常会在分类任务微调方面优于仅有自回归的decoder-only
模型。这些结果表明,规模可以帮助缩小差距。Table 7
还表明,在few-shot
和微调的结果之间仍有很大的差距。最后,
Table 8
报告了SuperGLUE
排行榜的测试集的结果。我们表明,PaLM
与SOTA
模型相比是有竞争力的,同时比排行榜上最好的decoder-only
自回归语言模型的表现要好得多。
50.5.2 BIG-bench
BIG-bench
是一个collaborative benchmark
,旨在为大型语言模型制作具有挑战性的任务。它包括150
多个任务,涵盖了各种语言建模任务,包括逻辑推理、翻译、问答、数学和其他。这里我们介绍并分析了PaLM
模型系列在BIG-bench
上的few-shot
评估结果。BIG-bench
包括文本性的任务(textual task
)和程序性的任务(programmatic task
)。在这次评估中,只考虑了文本性的任务。BIG-bench
中,最佳人类表现是用每个样本中指标得分最高的人类生成的答案来计算的,而平均人类表现是用所有人类生成的答案的平均指标得分来计算的。下图左侧为在
BIG-bench
上评估PaLM
系列模型的结果,并与之前公布的结果进行了比较。由于Gopher, Chinchilla, GPT-3
都评估了的任务只有58
个,因此这里仅介绍了这58
个任务的结果。下图右侧显示了PaLM
在BIG-bench
文本性任务(150
个任务)上的结果。PaLM
明显优于GPT-3
、Gopher
和Chinchilla
,而且5-shot PaLM 540B
取得了比人类平均分更高的分数。、
下图给出了这
58
个任务的详细结果。PaLM 540B 5-shot
在58
个常见任务中的44
个任务上的表现优于之前的SOTA
。接下来我们详细描述一些任务,在这些任务中,
PaLM
具有特别有趣的性能特征,如下图所示。goal step wikihow
:目标是推理事件之间的goal-step
关系。例子:为了 "清洗银器",应该先做哪个步骤?
(a)
擦干银器;(b)
手洗银器。答案:(b)
。logical args
:目标是根据一段话预测正确的逻辑推理。例子: 输入:学生们告诉代课老师他们正在学习三角几何。代课老师告诉他们,与其教他们关于三角几何的无用事实,不如教他们如何处理概率问题。他在暗示什么?
(a)
他认为数学不需要有用也可以有趣;(b)
他认为理解概率比三角几何更有用;(c)
他认为概率论是一个无用的学科。答案:(b)
。english proverbs
:目标是猜测哪个谚语最能描述一段文字。例子:凡妮莎多年来一直在当地的无家可归者援助中心利用周末时间帮忙。最近,当她失去工作时,该中心准备马上给她一份新工作。以下哪句谚语最适用于这种情况?
(a) Curses, like chickens, come home to roost
;(b) Where there is smoke there is fire
;(c) As you sow, so you shall reap
。答案:(c)
。logical sequence
:目标是将一组 "东西"(月份、行动、数字、字母等)按其逻辑顺序排列。例子:输入: 以下哪个列表的时间顺序是正确的?
(a)
喝水,感到口渴,关闭水瓶,打开水瓶;(b)
感到口渴,打开水瓶,喝水,关闭水瓶;(c)
关闭水瓶,打开水瓶,喝水,感到口渴 。答案:(b)
。navigate
:目标是遵循一组简单的导航指令,并找出你最终会到达的地方。例子: 输入: 如果你按照这些指令,你是否会回到起点?始终面向前方;向左走
6
步;向前走7
步;向左走8
步;向左走7
步;向前走6
步;向前走1
步;向前走4
步。答案:否。mathematical induction
:目标是进行逻辑推理数学归纳法规则,即使它们与现实世界的数学相矛盾。例子: 输入: 众所周知,在任何奇数上加
2
会产生另一个奇数。2
是一个奇数整数。因此,6
是一个奇数。这是不是一个正确的归纳论证(尽管有些假设可能不正确)?答案:是。
在下图,我们显示了在比较
PaLM 540B
和人类评价的平均性能得分时,得到改进的任务的分布。我们可以看到,尽管PaLM 540B
在总体上超过了人类的平均表现,但在35%
的单个任务上,人类的平均表现仍然高于PaLM 540B
。最后,下图展示了对
BIG-bench Lite
的详细评估结果,这是24
个BIG-bench
任务的一个精心策划的子集,作为一个轻量级的评估目标。与人类评估的最佳性能得分相比,虽然有些BIG-bench Lite
任务已经解决或接近解决,但其他任务仍远未解决。我们采取了几个步骤来确定这些结果的有效性,特别是排除了模型通过记忆
BIG-bench
数据来实现这些结果的可能性。首先,
BIG-bench
任务文件包括一个独特的canary string
;我们确保这个字符串不会出现在PaLM
训练数据中。其次,在收集训练数据时,互联网上没有
BIG-bench
数据集,而且绝大多数BIG-bench
任务是由任务作者专门为纳入BIG-bench
而构建的全新benchmark
。最后,我们抽查了模型在几个任务中的输入和输出,在这些任务中,模型表现出很强的性能,并手工验证了在解码过程中没有从
gold labels
中泄露信息。
50.5.3 Reasoning
我们在一组推理任务上评估了
PaLM
,这些任务需要多步骤的算术的或常识的逻辑推理来产生正确答案。算术推理(
arithmetic reasoning
):这些任务往往涉及小学水平的自然语言数学问题,需要多步骤的逻辑推理。数学本身通常是简单的,困难的部分是将自然语言转化为数学方程式。在这项工作中,我们评估了计算器形式和直接推理形式。例如:输入:罗杰有
5
个网球,他又买了两罐网球,其中每罐有3
个网球。他现在有多少个网球?答案是:11
。常识推理(
commonsense reasoning
):这些任务是问答任务,需要很强的世界知识(world knowledge
)。例如:输入:肖恩急着回家,但红灯变黄了,他被迫做什么?答案选项:
(a)
花时间;(b)
闲逛;(c)
慢慢走;(d)
海洋;(e)
减速。答案:(e)
。
我们使用
chain-of-thought: COT
来改善模型的输出。下图给出了chain-of-thought prompting
的例子。在这项工作中,我们展示了一个引人注目的结果:模型规模和
COT prompting
足以在各种算术推理和常识性推理任务中达到SOTA
的准确性。在7
个推理数据集中,PaLM 540B + COT
的8-shot prediction
在四个任务中达到了SOTA
的准确率,在其它三个任务重接近SOTA
。我们还可以看到,COT
和模型scaling
对所有的任务都有很大的帮助,因为如果没有这两种技术,PaLM
只能在一个任务(SVAMP
)上取得SOTA
。我们分析了
PaLM 62B
模型在GSM8K
数据集上出错的问题,发现它们通常属于以下几类:语义理解、单步缺失、以及其他错误。如下图所示,扩大到540B
模型的规模后,这些错误的数量就多了起来。
50.5.4 Code 任务
在这一节中,我们表明
PaLM
模型在各种coding
任务上取得了出色的成绩:text-to-code
:我们考虑了三个任务,其目标是根据自然语言描述来编写代码。在
HumanEval
和MBPP
数据集中,模型被馈入一个英语描述(由一些句子和少量的input-output
示例组成),目标是生成一个简短的Python
程序(通常是单个函数)。我们还介绍了
GSM8K-Python
任务,它来自GSM8K
数据集。GSM8K
数据集由mathematics word
问题组成。GSM8K-Python
是这个任务的一个变种,其目标不是产生正确的答案,而是产生一个能返回正确答案的Python
程序。
code-to-code
:TransCoder
是一项涉及将C++
程序翻译成Python
的任务。我们从GitHub
上下载了TransCoder
的数据,并收集了同时出现在数据集的Python
和C++
子目录下的函数。我们还对
DeepFix
的代码修复任务进行评估。从学生编写的无法编译的C
语言程序开始,目标是修改程序,使其能够成功编译。
我们使用
pass@k
指标报告结果:对于测试集中的每个问题,从模型中抽取k
个源代码样本,如果有任何样本解决了问题,则算作解决了。我们将PaLM
模型与几种用于代码的不同的语言模型进行比较:LaMDA 137B
、Codex 12B
。为了获得Codex
在除了HumanEval
之外的其它数据集上的结果,我们调用了OpenAI Davinci Codex API
。不幸的是,关于Davinci Codex
模型,有许多事情是不公开的:我们不知道这个模型的规模、它是单个模型还是一个ensemble
、它的训练数据有多少、对模型的输出做了什么(如果有的话)后处理,以及Davinci Codex
训练数据与我们评估数据集的污染程度如何。数据集:
PaLM
模型的训练集包括GitHub
代码。由于我们的评估数据集大多是测试Python
编程技能的,所以我们额外收集了一个专门的Python
代码数据集。这个额外的数据集,我们称之为ExtraPythonData
,包含了来自GitHub repository
的5.8B tokens
,这些tokens
在预训练中没有使用。Table 10
总结了所使用的code training data
的数量:PaLM 540B
行显示了用于预训练的tokens
数量,而PaLM-Coder 540B
显示了预训练和微调数据的token
总数。Table 27
显示了数据中编程语言的分布。最常见的语言是Java, HTML, Javascript, Python, C, PHP, C#, C++
。PaLM 540B
:下表显示了PaLM
模型在0-shot prompts
到4-shot prompts
下的性能。首先,
LaMDA
模型在所有的任务中都有非零的表现,尽管它没有在GitHub
代码上进行训练。这表明LaMDA
训练中使用的code web documents
对这些任务来说是有参考价值的。其次,
PaLM
模型在所有任务中的表现都比LaMDA
好,而且在HumanEval
上的表现与Codex 12B
相当。
PaLM-Coder
:现在我们评估进一步微调对coding
任务的影响,类似于Codex
的做法,微调得到的模型称作PaLM-Coder
。微调是两阶段的:
首先,对
mixture
数据进行微调,其中60%
来自ExtraPythonData
的python
代码、30%
来自跨语言的代码(与预训练的代码数据来源相同,但不包括在预训练中)、以及10%
的自然语言。然后 ,对
ExtraPythonData
中更多的Python
代码进行了额外的1.9B tokens
的微调。
在这两个阶段中,微调数据包含
7.75B tokens
,其中5.9B
是Python
。而预训练加微调的总数据量,参考Table 10
。PaLM-Coder 540B
的性能进一步提高,参考Table 11
。下图显示了从
8B
到62B
以及最后到540B
模型的性能扩展。在所有的数据集中,规模的每一次增加都会带来性能的提高,而且规模对性能的影响似乎并没有达到饱和。DeepFix Code Repair
:图13
和14
显示了DeepFix
问题的例子和PaLM-Coder
的成功预测。对于
code repair
,评估模型所改变的代码的数量是很重要的。通常我们只想修改一小部分的broken code
。不同模型所改变的代码的数量如下表所示。与Codex
相比,PaLM-Coder
倾向于改变分布在更多行中的更少的字符。我们在预测中观察到这种行为,其中PaLM-Coder
比Codex
更有可能做出微小的风格上的改变,例如将i = i + 1
改为i++
,将int a;\n int b;
改为int a, b;
,而Codex
更有可能大幅度改变行。讨论:当在软件开发中部署基于
LM
的系统时,一个关键的风险是生成的代码可能是不正确的,或者引入微妙的bug
。 鉴于对代码补全系统的数据集中毒攻击的发现,以及观察到当prompts
中存在错误代码时,LM
更有可能产生错误代码,这是一个特别紧迫的问题。功能正确性只是源代码质量的一个方面;
LM
产生的建议还必须是可读的、鲁棒的、快速的和安全的。DeepFix
说明了PaLM-Coder
目前预测的一个问题:在Figure 13
和Figure 14
中,程序可以编译,但不一定安全,因为它们依赖于对输入的格式和大小的假设。DeepFix
的数据集来自于学生写的C
语言编程课程的练习,学生被允许做这样的假设。这样的建议在一个更普遍的环境中可能是不可取的。
50.5.5 翻译
与其他大型翻译工具一样,
PaLM
没有明确地在平行语料上进行训练,尽管在我们的训练语料库中可能会自然存在一些这样的数据。我们专注于WMT
提供的训练集和验证集,特别是以下三种类型的language pair
:以英语为中心的的
language pair
,涉及以英语为source language
或target language
,并有一些不同程度的平行数据可用。根据language pair
中的non-English
语言,翻译任务可能是高资源(>10M
的样本)、中等资源(<10M,>1M
的样本)或低资源(<1M
的样本)。这里我们使用WMT'14 English-French (high), WMT'16 English-German (mid), WMT'16 English-Romanian (low)
。直接的
language pair
,即直接在任何一对语言之间进行翻译,而不涉及英语。在机器翻译中,即使英语不是source language
或target language
,也可以参与翻译,因为机器翻译系统经常通过英语进行"pivot"
,例如,French -> English -> German
。我们将使用WMT'19 French-German language pair
来测试直接翻译能力。极低资源的
language pair
,在这项工作中,我们选择哈萨克语作为我们的低资源语言。作为比较,虽然法语和德语在我们的训练集中分别有大约24B tokens
和26B tokens
,但哈萨克语只有大约134M tokens
。对于评估,我们将使用WMT'19 English-Kazakh
。
以英语为中心的的
language pair
的评估:PaLM
优于所有的基线。直接的
language pair
和极低资源的language pair
的评估:我们将我们的结果提炼为以下一组观察:
在从某种语言翻译成英语的时候,翻译质量比从英语翻译成某种语言的时候要好。这是在所有以英语为中心的语言模型中观察到的一个共同模式,在检查
PaLM
的性能时也出现了类似的情况。我们怀疑优先考虑多语言数据会减轻这种情况。prompts
可以提供比单个示例更多的价值。我们发现,在大多数情况下,使用语言名称来诱导翻译(0-shot setting
)比只使用input-output
示例(one-shot/few-shot setting
)提供更强的性能,与以前的工作一致(《Association for Computing Machinery》
)。仅仅依靠自监督的通用模型可以在较小的范围内与专用模型相匹配。我们考虑的大多数专用翻译
baseline
都在1B
参数以下,这比我们最大的PaLM
构架要小两个数量级。另一方面,我们也看到,大型翻译模型可以适应各种下游任务,这表明专家也可以作为通才。这就提出了一个问题:在资源丰富的情况下(如多语言翻译),我们应该培训专家还是通才?
50.5.6 Multilingual 自然语言生成
自然语言生成以给定文本或非语言信息(如文档、表格、或其他结构化数据)的条件下,自动生成可理解的文本。对于类似规模的模型,过去还没有探索过
few-shot
的条件自然语言生成。通常情况下,generation evaluation
仅限于生成式的问答和multiple-choice
的语言模型任务,这些任务不需要生成完整的句子或段落。因此,我们的工作提出了第一个大型语言模型的基准,从而用于条件自然语言生成任务的few shot
建模。数据:我们在来自
Generation Evaluation and Metrics benchmark
的三个摘要任务、以及三个data-to-text generation
任务上评估了PaLM
。这些数据集包括Czech (cz), English (en), German (de), Russian (ru), Spanish (es), Turkish (tr), Vietnamese (vi)
等语言。MLSum
:用多个句子总结一篇新闻文章([de/es]
)。WikiLingua
:用非常简洁的句子总结WikiHow
的step-by-step
指令([en/es/ru/tr/vi -> en]]
)。XSum
:用一句话总结一篇新闻文章([en]
)。Clean E2E NLG
:给定一组键值属性对,用一两句话描述一家餐厅([en]
)。Czech Restaurant response generation
:给定一个对话上下文、以及对话行为representation
,生成智能助理将提供的响应([cz]
)。WebNLG 2020
:在一个或多个句子中以语法的和自然的方式口语化 ”主语-谓语-宾语“ 三要素([en/ru]
)。
Few-shot
评估方法:为了将PaLM
用于few-shot inference
,我们将一个任务特定的prompt
拼接到输入中,并将output prompt
添加到输出中。为了处理经常出现的非常长的输入以进行摘要,它们被截断为2048 tokens
。few-shot
示例通过双线分隔,这也被用来截断output predictions
从而用于评估。few-shot
示例都是从训练语料库中随机抽出的。微调方法:为了在微调期间使用
decoder-only
结构,inputs
和targets
被拼接起来,但损失只在序列的targets
部分计算。拼接后的序列被截断为2048 tokens
,即预训练期间使用的训练环境,其中512 tokens
保留给targets
。只有摘要任务需要input truncation
。为了对
PaLM
进行微调,我们使用了一个恒定的学习率 $ 5\times 10^{-5} $ ,比预训练期间小20
倍,并重置了优化器(Adafactor
)的accumulator
。每个数据集的最佳model checkpoint
是由验证集上ROUGE-1
、ROUGE-2
和ROUGE-L
得分的最佳表现的几何平均值来选择的。推断是使用 $ k=10 $ 的top-k
采样进行的。T5 XXL
基线使用与PaLM
相同的参数进行微调,并使用beam size = 4
的beam-search
来解码。Table 15
给出了1-shot
和微调的实验结果。微调的有效性:总的来说,
540B finetuned PaLM
在所有英语生成任务上接近或超过了之前报告的最佳结果。这表明PaLM
可以通过其大幅增加的规模来弥补其架构上的劣势。我们确实认识到,当存在大量特定任务的训练数据时,decoder-only LM
的微调可能不是所有任务的computationally optimal
的方法,但是我们相信它可以作为few-shot prediction
的重要上限。英语生成与非英语生成的质量:
PaLM
为生成英语文本的6
个摘要任务中的5
个任务实现了新的finetuning SOTA
的结果,即使input
是非英语的。然而,非英语概要(MLSum
)的微调不能实现SOTA
,并且对于非英语生成,few shot
和微调之间的相对差异更大。这表明PaLM
在处理non-English input
方面比生成non-English output
更好,这可能会在未来通过对大部分非英语文本进行预训练而得到改善(在当前模型中为22%
)。1-shot vs finetuning gap
:查看Data-to-Text
的结果,1-shot
结果遵循与摘要相似的趋势,但是与最佳微调结果的差距急剧缩小。我们注意到,Data-to-Text
任务作为微调基准的价值有限,因为它们的规模很小,并且与预训练语料库显著不匹配。1-shot
摘要:当比较各种PaLM
规模上的1-shot
摘要结果时,我们发现从8B -> 62B
有一个很大的改进,而从62B -> 540B
有一个较小但显著的改进。
50.5.7 多语言问答
我们使用
TyDiQA-GoldP benchmark
在多语言问答任务上评估我们的模型。实验结果如下表所示。不足为奇的是,我们发现平均而言,在few-shot
和微调的质量之间存在很大的差距。我们表明
PaLM 540B
在这项任务上取得了非常有竞争力的结果,尽管没有在那么多的非英语数据上进行训练(占780B
训练tokens
的22%
)。
50.5.8 分析
这里,我们深入分析
PaLM
的few-shot
性能。我们首先研究了三个不同的模型(
8B, 62B, 540B
)在5
个不同的任务上的性能:RTE, Natural Questions, Lambada, Story Cloze, Trivia QA
。结果如下图所示。在几乎所有的任务和模型中,当模型被呈现出更多的示例时,性能就会提高。然后我们评估了
StoryCloze, Natural Questions, Web Questions benchmarks
,few-shot learning
性能的差异。 在预训练期间,我们采取了15
个不同的均匀间隔的model checkpoints
。然后我们用1-shot learning
来评估所有不同的checkpoints
。鉴于每个检查点只相差2B pre-training tokens
,我们期望模型质量不受影响。结果如下图所示。
50.6 Memorization
众所周知,神经网络能够记忆训练数据。事实上,这就是过拟合的定义。通常情况下,这种类型的记忆发生在模型对一个小的训练集进行多次训练时。然而,在我们的案例中,
PaLM
是在一个780B
的语料库上进行single pass
训练的。另一方面,我们的模型也有非常大的容量,所以即使是single pass
也可以记住训练数据的很大一部分。此外,由于web-derived
语料库中存在近乎重复的文本,一些段落(有微小的变化)在训练中会出现多次。在本节中,我们分析了PaLM
模型对训练数据的记忆程度。为了评估这一点,我们从训练样本中随机选择了
100
个token sequences
,并且采用前50 tokens
来prompt
模型。我们运行贪婪解码,并测量模型产生的token
与训练样本(first 50 tokens
之后的内容)完全匹配的频率。该方法遵循《Quantifying memorization across neural language models》
的做法,他们试验了50 ~ 500 tokens
的prompt
长度。图
18(a)
显示了三种模型规模的记忆匹配率。图
18(b)
显示了记忆率与训练数据中确切看到的训练样本的次数的关系。请注意,之所以会有重复率如此之高的例子,是因为我们的训练只对完整的文档进行去重,而在这里我们对100 tokens
的span
来评估记忆。图
18(c)
显示了按训练数据语料库细分的三种模型的记忆率。由于code
语料库中有大量的模版的license
字符串、拷贝的代码、以及自动生成的代码,因此记忆率较高。book
语料库主要包含真正独特的文字串。
从这些结果中,我们可以得出以下关于记忆的结论:
较大的模型比较小的模型有更高的记忆率。对数线性拟合的斜率与之前
《Quantifying memorization across neural language models》
观察到的非常接近(我们发现PaLM
的斜率为0.002
且 $ R^2=0.976 $ ,而该论文发现GPT-Neo
模型系列的斜率为0.002
且 $ R^2=0.965 $ )。正如
holdout
的结果所显示的那样,一定量的 "记忆" 是可以预期的,因为该模型会对常见的模板和模板产生exact match continuation
。然而,训练数据的记忆率明显高于heldout
数据,这表明该模型确实真正记住了数据的某些部分。一个样本被记住的机会与它在训练中的
uniqueness
密切相关。只见过一次的样本比见过很多次的样本,被记住的可能性小得多。这与以前的工作一致。
记忆是否是个问题,取决于数据集的属性和目标应用。因此,在为大型语言模型选择下游应用时,应始终小心谨慎。一个计算效率高,但
memory-intensive
的方法是在训练数据上实现Bloom filter
,并限制在训练数据集中逐字出现的序列被生成。虽然这种方法会去除确切的记忆内容,但仍然可以产生近似的记忆内容(与训练集文本仅有一两个字差异的generations
)。
50.7 数据集的污染
以前的工作报告了
benchmark evaluation set
和训练数据之间非常高的数据重合率。这些以前的工作只是看了完整的evaluation example text
和训练数据之间的高阶n-grams
(如13-grams
)的出现,并认为任何有重叠的样本都是污染的。在这里,我们没有简单地寻找高阶n-gram
重叠,而是计算了29
个主要英语NLP
基准任务的统计数据,并手动检查了每个任务的大量例子,以确定哪些例子的污染比例高。我们可以粗略地将
29
个基准任务分为四类:批量污染:数据集本身有很大一部分出现在公开网络上。我们认为这些是被污染的。例子:
SQuADv2, Winograd
。从互联网构建:数据集的问题+答案(或
prefix+continuation
)是自动从公开的互联网中提取的,因此许多评估实例可能在我们的训练数据中。我们认为这些被污染了。例子:Web Questions, ReCoRD, Lambada
。互联网上的
Context
:问答数据集的上下文来自互联网,但问题不是。我们不认为这些是被污染的。例子:BoolQ, Multirc, ANLI
。没有明显的重叠:数据集与我们的训练数据没有明显的重叠。例子:
StoryCloze, OpenbookQA
。
我们能够根据问题、
prompt
、或target
中至少70%
的8-gram
是否在我们的训练数据中出现过一次,将每个数据集分成一个 "污染" 和 "干净"子集。我们在Table 17
中报告了干净部分与full set
的结果。我们可以看到,对于干净的子集,正向、负向的子集数量几乎相等,这意味着数据污染不会对我们的报告结果造成有意义的影响。我们对机器翻译进行了类似的分析,结果显示在
Table 18
中。
50.8 探索解释性
前面我们实证了
chain-of-thought prompting
如何大幅提高多步骤推理任务的预测准确性。在这种情况下,模型生成的reasoning chain
在评估时没有被使用。当然,这种explanatory generation
的作用除了提高准确率外,还有其他原因。首先,了解模型是否因为正确的原因而产生了正确的答案,而不仅仅是进行表面上的统计推断,是非常有科学意义的。
第二,该解释有可能被展示给系统的终端用户,以增加或减少他们对某一预测的信心。
第三,在许多情况下(例如,解释一个笑话),解释本身就是期望的输出。
本节的目标是展示
PaLM
的能力,即通过chain-of-thought prompting
来生成explanatory language generation
。下图给出了这些任务的例子。虽然我们承认这些结果并不等同于彻底的定量分析,但我们要说的是,我们相信这展示了一个真正了不起的深度语言理解水平。
50.9 代表性的 bias 分析
性别和职业偏见:
Winogender
的整体结果如下图所示。我们发现,准确率随着模型规模的扩大而提高,PaLM 540B
在1-shot/few-shot setting
创造了新的SOTA
。与之前的工作一样,我们还报告了分类的准确性,将
Winogender
分成了刻板印象或被骗子集(gotcha subset
)。下图给出了分类的准确率,并按性别进一步细分。我们发现,在刻板印象的例子上,准确率比被骗的例子高;而在被骗的例子上,女性的准确率最低。毒性和偏见:按照
GPT-3
描述的类似程序,我们分析了在给出"{term} was very... "
这样的prompt
时,model continuation
中常见的共现词,其中被替换的词提到了性别、宗教或种族和民族身份。种族身份共现分析揭示了几个方面的情况:首先,种族身份术语经常相互共现,这就提出了关于在它们出现的句子中各身份之间的关系(如果有的话)的问题。
其次,
prompt language
的微小变化导致了结果的急剧变化。
除了计算共同出现次数之外,我们还使用
Perspective API
来对continuations
的毒性进行分类。下图报告了按不同宗教团体划分的模型输出中的毒性概率分布。开放式生成中的毒性:毒性退化(
toxicity degeneration
)对应于generation
可被语言模型感知为有毒的文本。我们使用Perspective API
为continuation
分配一个毒性概率。然后,我们研究在prompt
是有毒的各种可能性下,毒性概率在model continuations
中的分布。Figure 23
显示了在不同的模型规模下,续篇的平均毒性概率(toxicity probability of the continuation: TPC
)与prompt
的分桶毒性概率(binned toxicity probability of the prompt: TPP
)的比例关系图。可以看到:TPC
随着TPP
的增加而增加,同时一直低于prompt
毒性和人类基线(除了在prompt
毒性的最高水平)。相比较于
8b
模型,两个更大的模型(62B
和540b
)的毒性概率明显增加。这表明毒性水平和模型大小之间存在相关性,但鉴于62B PaLM
和540B PaLM
模型的毒性非常相似,只能有一定程度上的相关性。模型的
TPC
与TPP
比人类的TPC
更一致。 这表明模型受到prompt
风格的强烈影响,并有可能产生与prompt
相似的毒性水平的continuation
。
下表中,我们报告了在第一句、以及
128-decode step
中,在毒性prompt
和无毒prompt
下,产生至少一个有毒prompt
的概率。局限性:本节介绍的公平性分析的一个主要限制是,它们只在英语语言数据上进行,而
PaLM
是在多语言数据上进行训练并在多语言语言处理任务上进行评估。此外,需要注意的是,尽管调查英语语言技术中的偏见的工作越来越多,但缺乏公平性基准的标准化,缺乏对
NLP
中不同bias
测量的危害的理解,也缺乏对身份的统一、全面覆盖。此外,偏见可能充斥着一个系统,这取决于具体的下游应用、其具体的
training pipeline
和应用层面的保护(例如安全的过滤器)。
50.10 伦理方面的考虑
详细内容参考原始论文。
50.11 Scaling 的开放问题
在我们的
Introduction
章节中,我们描述了四个主要的方向,这些方向导致了大型LM
在few-shot learning
中的显著质量改进:模型的深度和宽度、training tokens
数量、训练语料的质量、在不增加计算量的情况下增加模型容量(即,sparse
模型)。我们在PaLM
的背景下讨论这些结果。尽管Chinchilla
报告的许多基准任务与PaLM
评估的任务不重叠,但我们可以比较那些重叠的基准任务的结果。Table 20
显示了9
个英语NLP
基准任务的具体结果。在
Figure 24
中,我们展示了两组任务的综合结果,作为总训练FLOPs
数的函数。然而,我们不能使用这些结果来推断我们关键的
scaling question
的答案:与PaLM 540B
相比,一个在Y tokens
上训练的大小为X
的模型的效果如何?有几个原因可以解释为什么这是一个难以回答的问题:为了得出强有力的结论,这样的实验必须逐个
scale
地进行,这有很大的计算成本。如果较小的模型使用比较大的模型更少的
TPU
芯片进行训练,这将按比例增加训练的wall-clock time
,因为总的training FLOPs
数是相同的。如果使用相同数量的TPU
芯片进行训练,在不大幅增加batch size
的情况下保持TPU
的计算效率将是非常困难的。虽然网络上有大量的非常高质量的文本数据,但也不是无限量的。对于
PaLM
所选择的语料库混合比例来说,在我们的一些子语料库中,数据在780B tokens
之后开始重复,这就是为什么我们选择这个作为训练的endpoint
。目前还不清楚在大规模语言模型训练中,重复数据的价值与未见过的数据相比如何。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论