GPT-1(Improving Language Understanding by Generative Pre-Training)论文阅读
1. 论文阅读
1.1 背景介绍
在GPT(Generative pre-trained transformer)大火的今天回去重读了GPT在18年的开山之作【Improving Language Understanding by Generative Pre-Training】。在面对NLP众多种类任务(自然语言推理/问答/文档分类)时有大量无标注语料,相对而言,有标注的语料非常少。
为此论文提出一个新的训练思路: 先基于海量无标注语料进行通用的生成式预训练,然后针对下游任务使用有标注的数据进行finetune。这算是一个两阶段的半监督训练方法, 先后融合了无监督的预训练和有监督的finetune训练。
GPT-2(Language Models are Unsupervised Multitask Learners)论文阅读
1. 论文阅读
1.1 背景介绍
2019年OpenAI发布的模型,OpenAI在2018年的GPT1中给出了一种半监督的训练方法,在GPT2中针对如下问题做了升级: * 以前机器学习训练代价大,往往先要指定训练任务和高质量的标注数据集,且要保证训练数据和测试数据的分布相同,不同任务间无法复用;GPT2实现一个更通用的系统,支持多种NLP任务的学习,实现了Zero Shot。 * 大模型训练往往需要海量数据,准备高质量的标注数据集明显是不现实的;GPT2中支持使用网上公开的无标注的数据进行训练。
CLIP(Contrastive Language–Image Pre-training)论文阅读
1. 简介
CLIP(Contrastive
Language–Image
Pre-training)是OpenAI第一篇关于多模态的论文,在2021年1月跟DALL・E一起发布。其中DALL・E用于文本生成图像,CLIP用于图像分类。CLIP跟之前常用的有监督图像分类相比不同,学习中结合了文本的语义信息(natural language supervision
),可以实现类似GPT-3的zero-shot的能力。
CLIP有以下两个优势: * 大幅降低标注成本。之前标注都需要人手工标注大量高质量样本,现在通过搜索引擎自动构建4亿条图像-文本对用于训练。 * 迁移泛化能力强。做为预训练模型,跟特定任务解耦(task-agnostic),可以实现类似zero-shot的效果。
ViT(Vision Transformer)论文阅读
1. ViT简介
ViT是2020年的一篇paper,目前(2023年2月)在google引用超11000次,CV图像领域中被广泛使用。在ViT出来之前,Transformer架构已经在NLP领域大显身手,在CV领域还是用的CNN,通过ViT这篇paper在CV中正式引入Transormer,且效果不错。
pytorch分布式训练使用Dataloader/WebDataset进行数据并行加载
1. 使用pytorch原生的DistributedSampler
在pytorch DDP数据并行时会对数据集进行切分,每个rank节点只处理部分数据。使用DistributedSampler来会把dataset数据集采样为一个子数据集。定义如下:
1 | torch.utils.data.distributed.DistributedSampler(dataset, num_replicas=None, rank=None, shuffle=True, seed=0, drop_last=False) |
- dataset:用于采样的数据集
- num_replicas (int,
optional):分布式训练总的进程数。默认对应取process_group中的
world_size
- rank (int,
optional):当前进程的rank号。默认对应取process_group中的
rank
- shuffle (bool, optional)
:为True表示对indices进行随机打乱。注意使用
DistributedSampler
时,torch.util.data.Dataloader创建时的shuffle参数,相当于把随机的功能交给了DistributedSampler
。默认为True - seed (int, optional):随机种子,默认为0
- drop_last (bool, optional):
为True的话会丢弃结尾的数据,保证数据大小可以被
num_replicas
整除;为False的话Sampler为增加额外的indices;默认为False
Rotary Position Embeddings论文阅读
1. 论文
1.1 Transformer中的position embedding
- Transformer中模型不涉及RNN的循环和CNN的卷积,为了学习到sequence中的前后顺序关系,增加了
position embedding
, embedding的方法采用了sinine和cosine来进行。
- 示例如下, 对
I am a robot
进行编码:
- 编码过程中d_model=4, 论文中的10000对应改为100,结果如下:
RMSNorm论文阅读
1. 论文
1.1 RMSNorm介绍
RMSNorm论文中对LayerNorm的公式做了改造。在原有LayerNorm中借助了每个layer统计的mean和variance对参数进行了调整,但RMSNorm认为re-centering invariance property
是不必要的,只用保留re-scaling invariance property
。
LayerNorm的计算如下:
改造后的RMSNorm如下:
RMS中去除了mean
的统计值的使用,只使用root mean square(RMS)
进行归一化。
LLaMA(Large Language Model Meta AI)论文阅读
0. 简介
LLaMA 训练了从7B到65B不同参数量的模型,从Hoffmann的论文【Training compute-optimal large languag】中证明了在有限计算代价的情况下(给定总的FLOPs大小),表现最好的不是参数量最大的模型,而是在更多数据上训练的稍小的模型。
LLaMA实现了两个目标: 1. LLaMA-13B跟GPT-3相比, 参数量小了10倍,但效果更好;LLaMA-65B比Chinchilla-70B和PaLM-540B更好。 2. 只依赖公开的开源数据集也可以达到最好的SOTA效果。