估计GPT1模型的参数

Transformer模型和GPT模型

Transformer模型运行过程是这样的:

展开一点,如下图所示:

GPT-1 模型更加简单,其模型架构如下图所示,其主体部分堆叠了 12 个 Transformer Decoder 层,并根据不同的下游任务进行微调:

GPT-1 的参数 量为 117M,使用 BookCorpus Dataset进行训练,语料大小约 1 Billon Tokens,共训练了 100 个 Epoch。GPT-1 的一些工程实现细节如下:

● 堆叠了 12 层 Transformer Decoder,并在每层使用 Masked Multi-Head Attention;其中,Embedding 维度为 768,采用了 12 个注意力头;

● Feed Forward Network 大小为 3072 维;

● 使用 Adam Optimizer 进行训练,最大学习率为 2.5*e−4 。LR-Scheduler 策略为:在前 2000 个 batch,学习率从 0 线性增加最大值,然后使用 Cosine LR Scheduler 退火到 0;

● 设置 MiniBatch 大小为 64,context window 大小为 512;

● 应用了 Layer Norm,使用 N(0,0.02) 进行网络权重初始化;

● 使用 BPE(Byte Pair Encoding)编码,vocabulary size = 40000;

● 设置 dropout rate = 0.1 以进行正则化;

● 激活函数使用高斯误差线性单元(GELU)。

● 在数据预处理上,使用 ftfy library 来清理 BooksCorpus 中的原始文本,标准化一些标点符号和空格,并使用 spaCy 分词器进行分词 可以看到GPT是对Transformer模型做了简化,只用到了Decoder部分,主要核心还是Attention算法层和FeedForward算法层。

Attention算法模型

背景知识:

● 词向量,用一个向量表示一个单词,比如 like = [ 0.11 0.22 0.33 … ]

首先对输入做分词,然后对每个词做Embedding编码得到词向量,然后把词向量和每个词位置编码相加作为输入矩阵X。然后Linear层用输入分别乘以矩阵Wk、Wq、Wv,得到向量K0、Q0、V0,经过矩阵点乘处理方法最后得到向量Z0,最后再把Z0经过Linear层乘以矩阵W0得到输出Z,如下图所示。

这里面的参数 主要是K、Q、V变换矩阵和Linear转换,参数 数量是:

d(model) * d(query) * (d(k,q,v) + d(linear) )

Multi-Head是指同时进行多次Attention处理,所以最后参数 量再乘以Head 通过Attention算法层之后,可以生成对出入词向量新的向量表示,这个新的表示捕获了一些语义信息。为了增强输出向量的信息表达能力,后面又增加了一层全连接层FeedForward层。

FeedForward算法层

FeedForward层是一个两层的全连接的神经网络,如下图所示:

首先经过第一次Linear层,将输入Z变换成全连接层的维度M(ff),然后经过激活函数,输出还是全连接层的维度N(ff),最后在经过第二次Linear层,维度变换成模型的维度,和输入维度保持以后,后续可以再叠加Decoder层。 这里的参数 主要是两次变换,主要是变换矩阵W和常量B:

(d(model) + 1) * d(ff) + (d(ff) + 1) * d(model) 

预测输出

最后输出层其实比较简单,就是通过Linear转换成整体的vocabulary词向量大小,再通过softmax计算每个词的概率,最后选择一个词作为输出。

这里的参数 就是Linear层的参数

(d(model) + 1) * d(vocab) 

参数 计算

基于官方数据:

● 堆叠了 12 层 Transformer Decoder,并在每层使用 Masked Multi-Head Attention;其中,Embedding 维度为 768,采用了 12 个注意力头;

● Feed Forward Network 大小为 3072 维;

● 使用 BPE(Byte Pair Encoding)编码,vocabulary size = 40000;

● 假设KQV向量维度是64

Attention层:

● 1层

Multi-head Attention:d(model) * d(query) * (d(k,q,v) + d(linear) )* count(head)= 768 * 64 * 4 * 12 = 2,359,296

FeedForward:(d(model) + 1) * d(ff) + (d(ff) + 1) * d(model) = (768 + 1) * 3072 + (3072 + 1 ) * 768 = 4,722,432

● 12层:

Multi-head Attention:2,359,296 * 12 = 28,311,552

FeedForward:4,722,432 * 12 = 56,669,184

输出层: lineaer: (d(model) + 1) * d(vocab) = (768 + 1) * 40000 = 30,760,000

合计: 28,311,552 + 56,669,184 + 30,760,000 = 115,740,736

关于参数 的思考

参数 主要在Attention层和输出层,其中Attention层在训练中主要捕获的是语言学知识,参数 主要反应词与词之间的关系模型,FeedForward和Linear输出层主要捕获的是世界知识,参数 主要反应的是知识的结构化表达。

随着模型规模不断扩大,出现了一种在较小的模型中不出现,而在较大的模型中出现的能力,被称为涌现能力。 在GPT-3的规模突破2 · 10^22 training FLOPs (13B参数 ),LaMDA的规模突破10^23 training FLOPs (68B参数 ),模型的表现开始快速上升,出现涌现能力。

参考:

1 https://jalammar.github.io/illustrated-transformer/

2 <https://zhuanlan.zhihu.com/p/611984077 >

3 GPT1模型: <https://www.cs.ubc.ca/~amuham01/LING530/papers/radford2018improving.pdf >

4 Attention机制:https://arxiv.org/abs/1706.03762

5 涌现能力:https://zhuanlan.zhihu.com/p/609339534



请遵守《互联网环境法规》文明发言,欢迎讨论问题
扫码反馈

扫一扫,反馈当前页面

咨询反馈
扫码关注
返回顶部