URL
- paper(en): https://arxiv.org/abs/2303.18223
- paper(cn):https://github.com/RUCAIBox/LLMSurvey/blob/main/assets/LLM_Survey_Chinese.pdf
TL;DR
- 一篇关于大模型的综述,截止到 2023 年 9 月 ,对现有的大模型做了较为详细的梳理。
Survey
1. Introduction
LLM (large language model)
和PLM (pretrain language model)
主要有三个区别:LLM
表现出一些令人惊讶的涌现能力,这些能力可能在以前较小的PLM
中没有观察到。LLM
将彻底改变人类开发和使用人工智能算法的方式,与小型PLM
不同,访问LLM
的主要方法是通过提示接口(例如GPT-4 API
)。LLM
的发展不再明确区分研究和工程。训练LLM
需要在大规模数据处理和分布式并行训练方面具有丰富的实践经验。
本文主要从四个方面介绍
LLM
的进展:预训练:如何训练出一个有能力的
LLM
适配微调:如何从有效性和安全性两个角度有效地微调预训练的
LLM
使用:如何利用
LLM
解决各种下游任务能力评估:如何评估 LLM 的能力和现有的经验性发现
2. Overview
2.1 大语言模型的涌现能力
LLM
的涌现能力(Emergent Abilities
)被正式定义为:在小型模型中不存在但在大型模型中产生的能力,这里介绍三种典型涌现能力:
In-context learning
:上下文学习。ICL
能力是由GPT-3
正式引入的:假设已经为语言模型提供了一个自然语言指令和/或几个任务演示,它可以通过完成输入文本的单词序列的方式来为测试实例生成预期的输出,而无需额外的训练或梯度更新。Instruction following
:指令遵循。通过使用自然语言描述的混合多任务数据集进行微调(称为指令微调),LLM
在未见过的以指令形式描述的任务上表现出色。Step-by-step reasoning
:逐步推理。通过使用思维链(Chain-of-Thought, CoT
)提示策略,LLM
可以通过利用包含中间推理步骤的提示机制来解决这类任务,从而得出最终答案。
2.2 大语言模型的关键技术
LLM
的关键技术主要分为以下五个方面:
Scaling
(扩展):Transformer
语言模型存在明显的扩展效应,更大的模型/更大的数据规模/更多的训练计算通常会导致模型能力的提升。Training
(训练):分布式训练算法是学习LLM
网络参数所必需的,其中通常联合使用各种并行策略。为了支持分布式训练,已经发布了一些优化框架来促进并行算法的实现和部署,例如DeepSpeed
和Megatron-LM
。此外,优化技巧对于训练稳定性和模型性能也很重要,例如预训练以克服训练损失激增和混合精度训练等。Ability eliciting
(能力引导):在大规模语料库上预训练之后,LLM
具备了作为通用任务求解器的潜在能力。然而,当LLM
执行一些特定任务时,这些能力可能不会显式地展示出来。作为技术手段,设计合适的任务指令或具体的ICL
策略可以激发这些能力。Alignment tuning
(对齐微调):InstructGPT
设计了一种有效的微调方法,使LLM
能够按照期望的指令进行操作,其中利用了 基于人类反馈的强化学习技术(RLHF),采用精心设计的标注策略,它将人类反馈纳入训练循环中。Tools manipulation
(操作工具):利用外部工具可以进一步扩展LLM
的能力。例如,LLM
可以利用计算器进行准确计算,利用搜索引擎检索未知信息,这种机制可以广泛扩展LLM
的能力范围。
2.3 GPT 系列模型的演进
GPT-1
: 2018 年2018
年,OpenAI
发布了GPT-1
,代表生成式预训练(Generative Pre-Training
)。GPT-1
是基于生成型的、仅含有解码器的Transformer
架构开发的,并采用了无监督预训练和有监督微调的混合方法。GPT-1
为GPT
系列模型建立了核心架构,并确立了对自然语言文本进行建模的基本原则,即预测下一个单词。
GPT-2
: 2019 年将参数规模增加到了
15
亿,并使用大规模的网页数据集WebText
进行训练。它旨在通过无监督语言建模来执行任务,而无需使用标记数据进行显式微调。
尽管
GPT-2
旨在成为一个无监督的多任务学习器,但与监督微调的SOTA
方法相比,其整体性能仍然较差。
GPT-3
: 2020 年参数规模增加到了
175
亿,引入了ICL
的概念,它是以小样本或零样本的方式使用LLM
。ICL
可以指导LLM
理解以自然语言文本的形式给出的任务。GPT-3
不仅在各种NLP
任务中表现出色,而且在一些需要推理或领域适配能力的特殊设计的任务中也表现出色。GPT-3
可以被视 为从PLM
到LLM
进化过程中的一个重要里程碑。它通过实证证明,将神经网络扩展到大的规模可以大幅增加模型的能力。OpenAI
为了提高GPT-3
的性能,使用了两种策略:使用代码数据进行训练:
- 原始的
GPT-3
模型(在纯文本上进行预训练)的一个主要限制在于缺乏复杂任务的推理能力,例如完成代码和解决数学问题。 OpenAI
在2021.07
推出了Codex
,这是一个在大量GitHub
代码上微调的GPT
模型,Codex
可以解决非常困难的编程问题,并且在数学问题上有显著的性能提升。- 实际上,
GPT-3.5
模型是在基于代码的GPT
模型(code-davinci-002
)的基础上开发的。
- 原始的
与人类对齐:
InstructGPT
在2022.01
提出,以改进GPT-3
模型与人类对齐能力,正式建立了一个三阶段的基于人类反馈的强化学习(RLHF
)算法。- 除了提高指令遵循能力之外,
RLHF
算法对于缓解有害或有毒内容的生成问题十分有效,这对于LLM
在实践中的安全部署至关重要。 OpenAI
在对齐研究中的方法,总结了三个有前途的方向:- 使用人类反馈训练
AI
系统 - 协助人类评估
- 做对齐研究
- 使用人类反馈训练
ChatGPT
: 2022 年- 它是以类似
InstructGPT
的方式进行训练的(在原始文章中称为“InstructGPT 的姊妹模型”),但专门针对对话能力进行了优化。 ChatGPT
训练数据是通过将人类生成的对话(扮演用户和AI
两个角色)与InstructGPT
数据集结合起来以对话形式生成。ChatGPT
在与人类的交流中表现出卓越的能力:- 拥有丰富的知识库
- 擅长解决数学问题
- 准确追踪多轮对话中的上下文
- 与人类的价值观保持一致以确保被安全使用
ChatGPT
支持了插件机制,进一步通过已有工具或应用扩展了ChatGPT
的功能。
- 它是以类似
GPT-4
: 2023 年- 将文本输入扩展到多模态信号,性能有大幅提升。
GPT-4
对于具有恶意或挑衅的提问的响应更加安全,并采用了多种干预策略来减轻语言模型的可能问题,如幻觉、隐私和过度依赖。
3. 大语言模型公开可用资源
3.1 公开可用的模型检查点或 API
3.2 常用预训练语料库
常用的用于预训练的语料库有:
Books
BookCorpus
是之前小规模模型(如GPT
和GPT-2
)中常用的预训练数据集,包含超过11,000
本电子书,涵盖广泛的主题和类型(如小说和传记)。Gutenberg
是更大的数据语料库,包含超过70,000
本文学作品,包括小说、散文、诗歌、戏剧、历史、科学、哲学和其他公共领域的作品。在
GPT-3
中使用到的Books1
和Books2
是比Gutenberg
大的多的语料库,但并未开源。
CommonCrawl
CommonCrawl
是最大的开源网络爬虫数据库之一,能力达到了百万亿字节级别,已经被广泛运用于训练LLM
。由于网络数据中存在大量的噪音和低质量信息,因此使用前需要进行数据预处理。目前有四个较为常用的基于
CommonCrawl
的过滤数据集:C4
CC-Stories
CC-News
RealNews
Reddit Link
Reddit
是一个社交媒体平台,用户可以在上 面提交链接和帖子,其他人可以通过“赞同”或“反对”投票。高赞的帖子通常被认为对多数用户是有帮助的,可以用来创建高质量的数据集。WebText
就是一个著名的基于Reddit
的 语料库,它由Reddit
上高赞的链接组成,但尚未公开。作为替代,有一个易于获取的开源替代品叫做
OpenWebText
。另一个从
Reddit
中提取的语料库是PushShift.io
.
Wikipedia
Wikipedia
是一个在线百科全书,包含大量高质量的文章,涵盖各种主题。其中大部分文章都采用解释性写作风格(并支持引用),覆盖了多种不同语言和广泛的知识领域。
Code
为了收集代码数据,现有工作主要是从互联网上爬取有开源许可证的代码。代码数据有两个主要来源:
包括开源许可证的公共代码库(例如
GitHub
)与代码相关的问答平台(例如
StackOverflow
)
Google
公开发布了BigQuery
数据集,其中包括各种编程语言的大量开源许可证代码片段, 是一个典型的代码数据集。
Other
The Pile
是一个大规模、多样化、开源的文本数据集,有超过800GB
数据,内容包括书籍、网站、代码、科学论文和社交媒体平台等。它由22
个多样化的高质量子集构成。ROOTS
由各种较小的数据集(完全为1.61 TB
的文本)组成,涵盖了59
种不同的语言(包含自然语言和传统语言)。
经典模型使用的预训练语料库:
GPT-3(175B)
是在混合数据集(共3000
亿token
)上进行训练的,包括:CommonCrawl
WebText2
Books1
Books2
Wikipedia
PaLM(540B)
使用了共包含7800
亿token
的数据集,包括:社交媒体对话
过滤后的网页
书籍
Github
多语言维基百科
新闻
LLaMA
使用了更多的数据预训练,其中LLaMA(6B)
和LLaMA(13B)
的训练数据大小为1.0
万亿token
,而LLaMA(32B)
和LLaMA(65B)
使用了1.4
万亿token
,包括:CommonCrawl
C4
Github
Wikipedia
书籍
ArXiv
StackExchange
3.3 常用 Fine-tuning
语料库
instrction tuning
(指令微调) 常用数据集instrction tuning
(指令微调) 过程可将预训练好的多任务模型在Zero-shot
任务上表现更好。NLP task dataset
P3 (Public Pool of Prompts)
一个涵盖各种自然语言处理任务的
Prompted
英文数据集集合,Prompt
是输入模板和目标模板的组合。模板是将数据示例映射到自然语言输入和目标序列的函数。例如,在自然语言推理(
NLI
)数据集的情况下,数据示例将包括Premise
(前提)、Hypothesis
(假设)和Label
(标签)字段。输入模板可以定义为:“如果
{Premise}
为真,则{Hypothesis}
也为真吗?”,而目标模板可以定义为:选择的选项为Choices[label]
。这里的Choices
是特定于Prompt
的元数据,包含对应于标签为包含(0)、中性(1)或矛盾(2)的选项yes
、maybe
、no
。
FLAN
使用的instrction tunning
数据集FLAN
实际上是google
的 《Finetuned Language Models Are Zero-Shot Learners》提出的模型,该模型用了大量的自然语言理解(NLU
)和自然语言生成(NLG
)任务数据集做指令微调。指令微调后的模型在
Zero-shot
任务上表现更好。
Daily chat dataset
ShareGPT
:由用户资源上传的和ChatGPT
或GPT4
的对话,总量大约90,000
组对话。OpenAssistant
:多语言的人类和AI
助手的对话,包含35
种语言,66,497
组对话和461,292
个人类标注。Dolly
:由Databricks
公司制作的15,000
条英文人类对话,包含7
大子类:- 头脑风暴
- 内容生成
- 信息提取
- 摘要
- 分类
- 开卷考试的质量保证 (
closed-book quality assurance
) - 闭卷考试的质量保证 (
open-book quality assurance
)
合成数据
Self-Instruct-52K
:一个由Self-Instruct
框架生成的指令遵循数据集,共82,000
个实例包含约52,000
条指令。Alpaca
:一个用于训练和评估指令遵循型语言模型的集合,它包含了52,000
条独特的指令和相应的输出,这些数据是基于OpenAI
的text-davinci-003
模型自动生成的。Baize
:是一个开源的多轮对话数据集,它通过让ChatGPT
自我对话生成,旨在为训练和评估对话模型提供高质量的语料资源。对话全部为英文,共包含111.5K
个实例。
Alignment
(对齐) 常用数据集Alignment
(对齐)过程的目的是让LLM
对齐人类的价值观和偏好。Alignment
数据集需要是高质量的、有帮助的、诚实的、无害的。HH-RLHF
:是由 Anthropic 公司收集的,用于训练和评估强化学习中的偏好(或奖励)模型的数据集,包含约169K
实例。这个数据集包含两部分:有益和无害性的人类偏好数据
红队对抗数据
SHP
:包含385,000
条人类偏好的数据集,这些偏好是对18
个不同主题领域中问题/指令的回答进行的。PKU-SafeRLHF
:由北京大学团队开发的,用于支持和推动安全强化学习(RLHF
)技术的研究和发展的数据集。这个数据集是目前为止最大的多轮RLHF
数据集之一,规模达到100
万条,包含了一系列安全偏好的标注,这些标注覆盖了侮辱、歧视、犯罪、心理伤害、悲观情绪、色情、隐私等多种维度,用于对RLHF
技术进行细粒度的约束价值对齐。Stack Exchange Preferences
:是一个从Stack Overflow
数据转储中提取的问答对数据集,它被设计用于偏好学习(preference learning
)。这个数据集包含了大量的问题和答案,其中答案基于得票数进行了评分。数据集的大小超过了20GB
,并且包含了数百万条问题和答案对。Sandbox Alignment Data
是一个由大型语言模型(LLM
)生成的对齐数据集,包含约169K
个实例,它包含了来自模拟社交互动环境SANDBOX
的反馈。在SANDBOX
中,模型模拟了人类社会中的交互,通过这种方式生成的对话数据被用来训练和评估语言模型,使其更好地符合人类的价值观和社交规范。
3.4 常用代码库资源
Transformers
:一个使用Transformer
架构构建模型的开源Python
库,由Hugging Face
开发和维护。它具有简单和用户友好的API
,方便使用和定制各种预训练模型。DeepSpeed
:由Microsoft
开发的深度学习优化库(与PyTorch
兼容),已用于训练多个LLM
,例如MTNLG
和BLOOM
。它提供了各种分布式训练优化技术的支持,例如内存优化(ZeRO
技术、梯度检查点)和管道并行。Megatron-LM
:由NVIDIA
开发的深度学习库,用于训练LLM
。它提供了丰富的分布式训练优化技术,包括模型和数据并行、混合精度训练和FlashAttention
。这些优化技术可以大大提高训练效率和速度,并实现GPU
间的高效分布式训练。JAX
:由Google
开发的用于高性能机器学习算法的Python
库,允许用户在带有硬件加速(例如GPU
或TPU
)的情况下进行数组的高效运算。它可以在各种设备上进行高效计算,还支持自动微分和即时编译等特色功能。Colossal-AI
:由HPC-AI Tech
开发的用于训练大规模人工智能模型的深度学习库。它基于PyTorch
实现,并支持丰富的并行训练策略。BMTrain
:由OpenBMB
开发的用于以分布式方式训练大规模参数模型的高效库,强调代码简洁、低资源占用和高可用性。FastMoE
:一种专门用于MoE
(即混合专家)模型的训练库。vLLM
:一个快速、内存高效、易用的LLM
代码库,用于LLM
的推理和服务。DeepSpeed-MII
:DeepSpeed Model Implementations for Inference
,一个比vLLM
更快的模型推理服务框架。DeepSpeed-Chat
:基于DeepSpeed
的一键式训练RLHF
,提速15
倍。
4. 预训练
预训练为 LLM
的语言理解和生成能力奠定了基础。
4.1 数据收集和处理
数据来源
通用文本数据
Webpages
Conversation text
Books
专用文本数据
多语音文本
科学文本
代码
数据处理
一个好用的数据处理代码库是
Data-Juicer
质量过滤
为删除语料库中的低质量数据,通过有两种方式:基于分类器的方法 和 基于启发式的方法
基于分类器的方法
通常采用高质量文本(例如
wikipedia
)作为正样本,候选文本作为负样本,训练二分类器,用于给出一个文本的质量分数。预计分类器的质量过滤方法可能会 无意识的删除口语化、方言、社会语音的文本。
基于启发式的方法
启发式方法通常采用一系列预设的规则来过滤低质量文本,具体的方法有:
基于语言的过滤:例如删除小语种文本等。
基于度量的过滤:例如基于困惑度(
perplexity
)来检测和删除不自然的文本。基于统计的过滤:例如根据标点符号的分布、符合和单词的比例等删除。
基于关键词的过滤:例如删除
HTML
标签、超链接、模板等。
数据去重
现有研究表明,重复数据会降低语料库的多样性,可能导致训练过程不稳定,从而影响模型性能。
三种粒度的数据去重:
句子级
文档级
数据集级
隐私去除
预训练数据大多来自网络,可能包含敏感隐私信息,存在隐私泄露风险。因此需要从数据集中删除
personally identifiable information
(可识别个人信息,PII
)。一种有效的删除方法是通过规则(例如:关键字识别)来检测和删除可识别各人信息(例如:姓名、电话、地址等)。
现有研究表明,
LLM
在隐私攻击下的脆弱性可能归因于预训练数据中存在重复的可识别个人信息。
分词(
Tokenization
)分词也是数据预处理的关键步骤,它的目的是将原始文本分割成词序列,随后用作
LLM
的输入。常用的分词方式有以下三种:BPE (Byte-Pair Encoding tokenization)
字节对编码,计算过程如下:首先将文本拆分成字母和分隔符,并统计每个字母或分隔符出现的频率。
计算任意两个字母/分隔符合并后出现的频率,找到最高频的字母/分隔符对合并,重新统计词频并更新词表。
重复第二步,直到词表大小满足要求。
特点:
简单高效
贪心算法,每一步都选择频数最大的相邻字符进行合并,这种做法可能不一定是全局最优、频数也不一定是最好的合并指标。
适合拉丁字母组成的语言,不适合汉字、日韩文字等。
WordPiece tokenization
,计算过程如下:首先将文本拆分成字母和分隔符。
不同于
BPE
选择合并后词频最大的词作为Subword
,WordPiece
基于语言模型似然概率的最大值生成新的Subword
,具体的基于语言模型似然概率的定义如下:$S=(t_1,t_2,…,t_n)$,句子
S
由n
个子词组成。则句子
S
的似然概率定义为:$log P(S)=\sum_{i=1}^n logP(t_i)$其中
P()
表示一个训练好的语言概率模型。
找到合并后可以使得句子的似然概率最大的子词合并,更新词表,重复这个过程。
Unigram LM
,计算过程如下:Unigram
和BPE
以及WordPiece
有个很大的不同是:BPE
和WordPiece
都是初始化小词表逐步变大直到满足词表大小要求。Unigram LM
是初始化大词表逐步删词直到满足词表大小要求。
Unigram LM
删词的根据和WordPiece
一致,都是基于语言模型似然概率
预训练数据对大语言模型的影响
与小规模的
PLM
不同,由于对计算资源的巨大需求,通常不可能对LLM
进行多次预训练迭代。因此,在训练LLM
之前构建一个准备充分的预训练语料库尤为重要。目前,不同的
LLM
模型预训练采用不同的预训练策略,下图是一些模型的预训练数据分布图:不过,存在几个有效的混合策略:
增加数据的多样性(
diversity
)预训练阶段,数据的多样性比数据的质量更重要,有实验表明,删除语料库中的多样性数据(例如:
Webpages
)比删除语料库中的高质量数据(例如:学术语料库)对模型的影响更大。可以通过数据混合实验优化数据混合策略
在大模型上做数据混合实验是非常昂贵且耗时的,通过会在小模型上测试不同的数据混合策略的优劣,再将小模型测试得到的结果用在大模型上。
但小模型得到的数据混合策略结论在大模型上可能是不成立的,越大的小模型得出来结论越可信。
先用
general
数据训练模型通用能力,再用skill-spcific
数据训练模型专业能力不同的数据训练的模型有不同的能力,比如:
用代码训练的模型对数学和编程更擅长。
用书籍训练的模型更擅长从文本中捕捉长期依赖。
先训练
basic skill
再训练target skill
比直接训练target skill
模型表现更好
4.2 网络结构
典型结构
Casual Decoder
结构- 参考
GPT
博客中的Hello, world!
续写例子
- 参考
Encoder-Decoder
结构- 参考
T5
博客中的Hello, world!
英语翻译法语的例子
- 参考
Prefix Decoder
结构是对
Encoder-Decoder
和Casual Decoder
的折中,在Encoder
中使用双向注意力,在Decoder
中使用单向注意力用到
Prefix Decoder
的模型有:U-PaLM
GLM
等
Mixture-of-Experts
(混合专家)结构优势:是一种灵活的模型参数扩展方法;性能提高明显;
劣势:由于路由操作复杂等原因,训练容易不稳定;
传言
GPT-4
使用了MOE
结构
Emergent Architectures
(新兴结构)现有架构存在的问题:
Transformer
架构一个很大的问题是推理时复杂度较高,每一个token
需要计算和之前的每一个token
计算相关性相比之下,
RNN
架构推理的复杂度就很低,每一个token
只需要和上一个token
以及一个不断更新的hidden state
计算相关性(本质是hidden state
在某种程度上存储了之前所有token
的信息)但
RNN
数据依赖问题非常强,导致训练难以并行化,且通常效果较差
一些新兴架构包括:
- H3/S4
- RWKV
- Hyena
- Mamba
- RetNet
这些新兴架构几乎无一例外的想做同一件事:像
Transformer
一样可以并行训练 + 像RNN
一样高效推理,且效果可以和Transformer
媲美
配置细节
归一化方法
LayerNorm
LayerNorm
和BatchNorm
只有两个差别,为了简化,假设Channel = 1
即feature shape = N, 1, H, W
:训练时差别:
BatchNorm
统计整个feature map
的均值和标准差(scalar
),然后在整个feature map
做标准正态化;同时记录(滑动平均算法)到running_mean / running_var
参数中LayerNorm
统计每一个样本的均值和标准差(长度为N
的vector
),然后每个样本逐个做标准正态化;均值标准差用完即扔,无需记录
推理时差别:
BatchNorm
推理时不需要计算feature
的均值和标准差,而是使用训练统计得到的running_mean / running_var
,因此是个静态行为,可以被前面的Conv2d
运算吸收LayerNorm
推理阶段和训练阶段运算方式基本一致
RMSNorm
假设输入
shape
为N, C, L
分别表示batch / feature_dim / seq_length
$RMS(x_c)=\sqrt{\frac{1}{C}\sum_{n=1}^N\sum_{l=1}^Lx_{nl}^2}\\RMSNorm(x_c)=\frac{x_c}{RMS(x_c)}*k+b$
其中,
k / b
都是可学习的per channel
向量和
LayerNorm
相比RMSNorm
有如下优势:- 更小的计算开销:
RMSNorm
不需要计算输入数据的均值,因此减少了计算量,使得模型训练更加高效。 - 训练速度更快:由于减少了计算量,
RMSNorm
在训练过程中的速度通常比LayerNorm
更快。 - 性能相当或更好:尽管
RMSNorm
的计算更简单,但它在保持与LayerNorm
相当性能的同时,甚至可能在某些情况下提供更好的性能。 - 保留重要的不变性:
RMSNorm
保留了输入数据的均方根比例不变性,这有助于模型在面对不同尺度的输入数据时保持一致的性能。 - 隐式学习率适应:
RMSNorm
通过归一化输入数据的RMS
,为模型提供了一种隐式的学习率适应能力,有助于模型在训练过程中更好地调整参数。
- 更小的计算开销:
DeepNorm
DeepNorm
可以看做是一种增强型LayerNorm
,对LayerNorm
改动较小,但效果惊人,DeepNorm
用在Post-LN
架构上替代传统LayerNorm
运算,可稳定训练,可训练深度超过 1,000 层的Transformer
DeepNorm
对LayerNorm
的改动如下:$LayerNorm (x + f(x)) \rightarrow LayerNorm(x*\alpha + f(x))$
归一化位置
Pre-LN
Pre-LN
是一种Transformer
架构,计算公式是:$x=x+MHA(LayerNorm(x))\\x=x+FFN(LayerNorm(x))\\x = LayerNorm(x)$
Post-LN
Post-LN
是另外一种Transformer
架构,计算公式是:$x=LayerNorm(x+MHA(x))\\x=LayerNorm(x+FFN(x))$
Sandwich-LN
Sandwich-LN
是Pre-LN
的改进,公式为:$x=x+LayerNorm(MHA(LayerNorm(x)))\\x=x+LayerNorm(FFN(LayerNorm(x)))\\x = LayerNorm(x)$
激活函数
GeLU
$GeLU(x)=0.5x*(1+erf(\frac{x}{\sqrt 2}))\\erf(x)=\frac{2}{\sqrt \pi}\int_0^xe^{-t^2}dt$
其中
erf
表示高斯误差函数,值域是[-1, 1]
GeLU
是LLM
中使用最广泛的激活函数
Swish
$Swish(x) = x*sigmoid(x)$
SwiGLU
$SwiGLU(x_1, x_2) = Swish(x_1) * x_2$
GeGLU
$GeGLU(x_1, x_2)=GeLU(x_1) * x_2$
位置编码
绝对位置编码
用在传统
Transformer
上,有两种:位置编码(
position encoding
):使用正弦得到位置编码可学习位置编码(
position embedding
):使用可学习的embedding
编码
相对位置编码