【大模型】Transformer、GPT1、GPT2、GPT3、BERT 的论文解析
前言
在自然语言处理(NLP)和深度学习的快速发展中,Transformer模型和 GPT系列模型扮演了至关重要的角色。本篇博客旨在对这些开创性的论文进行介绍,涵盖它们的提出时间、网络结构等关键信息,能够快速的理解这些模型的设计理念和工作原理。本博客不会涉及具体的工程训练细节,而是侧重于理论分析和模型架构的解读。
- Transformer模型
Transformer模型由Ashish Vaswani等人在2017年提出,其论文《Attention is All You Need》彻底改变了序列到序列学习的方法。该模型完全基于注意力机制,摒弃了传统的循环神经网络(RNN)结构,使得模型能够并行处理序列数据,显著提高了训练效率。Transformer模型的核心是自注意力机制,它允许模型在处理序列时动态地聚焦于输入序列的不同部分,从而更好地捕捉长距离依赖关系。- GPT系列模型
GPT(Generative Pre-trained Transformer)系列模型由OpenAI提出,是一系列基于Transformer架构的预训练语言模型。GPT模型通过在大规模文本数据上进行预训练,学习语言的通用表示,然后在特定任务上进行微调。GPT系列模型的发展历程包括GPT、GPT-2和GPT-3等,每个版本都在模型规模和性能上有所提升。GPT-3尤其引人注目,展现了强大的语言理解和生成能力。(当然现在已经 GPT-4了,本篇没记录)
全面对比速览
特性 GPT-1 BERT GPT-2 GPT-3 提出时间 2018年 2018年 2019 年 2020 年 架构 Transformer解码器 Transformer编码器 Transformer解码器 Transformer解码器 参数数量 1.1亿 1.1亿(base),3.4亿(large) 15亿 1750亿 数据集 BooksCorpus BooksCorpus + Wikipedia WebText Common Crawl, WebText2, Books1/2, Wikipedia 预训练目标 生成下一个单词 掩码语言模型(MLM),下一个句子预测(NSP) 生成下一个单词 生成下一个单词 微调 有监督微调 有监督微调 无需任务特定微调 少样本、单样本、零样本学习 主要优势 简单且有效的生成预训练 双向上下文理解能力 强大的文本生成能力 极强的少样本学习能力 应用场景 文本分类、问答、相似性判断 自然语言理解(NLP) 文本生成、翻译、问答 文本生成、翻译、编程、对话等 创新点 生成预训练,Transformer解码器 双向Transformer编码器,MLM和NSP 大规模生成预训练,无监督多任务学习 极大规模的生成预训练,少样本学习
一、Transformer
Transformer模型是Vaswani等人在2017年提出的,用于解决自然语言处理任务中的序列到序列问题。以下是对Transformer论文《Attention Is All You Need》的详细介绍和核心内容。
【论文概要】
- 标题:Attention Is All You Need
- 作者:Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Łukasz Kaiser, Illia Polosukhin
- 发表时间:2017年
- 会议:NIPS 2017
【核心内容】
- 背景与动机
传统的序列模型(如RNN和LSTM)在处理长距离依赖时存在诸多问题,如训练时间长、难以并行化等。Transformer通过完全基于注意力机制的方法解决了这些问题,显著提高了计算效率和效果。- 模型架构
Transformer模型由编码器(Encoder)和解码器(Decoder)组成,两者都是由堆叠的层组成。
- 编码器(Encoder)
编码器由6层相同的子层组成,每层包含两个子层:
- 多头自注意力机制(Multi-Head Self-Attention Mechanism):
输入序列经过嵌入后,通过多个注意力头并行计算自注意力(self-attention)。
计算查询(Query)、键(Key)和值(Value)矩阵:
Q = X W Q K = X W K V = X W V Q = XW_Q \\ K = XW_K \\ V = XW_V Q=XWQK=XWKV=XWV这里的 X X X 是一个输入矩阵,它可能代表了一系列数据点或特征。而 W Q , W K , W V W_Q, W_K, W_V WQ,WK,WV 是三个不同的权重矩阵,它们分别用于生成查询(Query)、键(Key)和值(Value)矩阵,这在注意力机制(如Transformer模型中的自注意力层)中非常常见。
我们可以将输入 X X X 转换为三个不同的表示( Q , K , V Q, K, V Q,K,V),这些表示在注意力机制中起着关键作用,使得模型能够处理复杂的序列数据并捕捉其中的依赖关系。- 计算注意力分数(Attention Scores): Scores = Q K T d k \text{Scores} = \frac{QK^T}{\sqrt{d_k}} Scores=dkQKT
通过 softmax 函数计算注意力权重: Attention Weights=softmax(Scores) \text{Attention Weights=softmax(Scores)} Attention Weights=softmax(Scores)
计算加权求和值:
Output=Attention Weights×V \text{Output=Attention Weights×V} Output=Attention Weights×V- 前馈神经网络(Feed-Forward Neural Network, FFN):
两层线性变换,中间有一个 ReLU 激活函数。
FFN(x) = m a x ( 0 , x W 1 + b 1 ) W 2 + b 2 \text{FFN(x)}=max(0,xW _1 +b_1 )W_2 +b_2 FFN(x)=max(0,xW1+b1)W2+b2- 层归一化和残差连接(Layer Normalization and Residual Connection):
在每个子层后应用残差连接和层归一化: LayerNorm ( x + SubLayer ( x ) ) \text{LayerNorm}(x+\text{SubLayer}(x)) LayerNorm(x+SubLayer(x))- 解码器(Decoder)
解码器与编码器类似,但多了一个注意力层,用于将编码器的输出和解码器的输入结合:
- mask 多头自注意力(Masked Multi-Head Self-Attention ):
类似于编码器的自注意力,但在解码过程中对未来位置进行遮蔽(mask),确保每个位置只能关注到它之前的位置。- 编码器-解码器注意力(Encoder-Decoder Attention):
解码器的输入通过注意力机制关注编码器的输出,捕捉源语言和目标语言之间的依赖关系。- 注意力机制(Attention Mechanism)
- 点积注意力(Scaled Dot-Product Attention)
计算查询、键和值矩阵,得到注意力分数和加权求和值。- 多头注意力(Multi-Head Attention)
将输入通过不同的线性变换得到多组查询、键和值矩阵,分别计算注意力,并将结果拼接在一起:
MultiHead(Q,K,V) = Concat ( h e a d 1 , h e a d 2 , … , h e a d h ) W O \text{MultiHead(Q,K,V)}=\text{Concat}(head_1,head_2,…,head_h)W_O MultiHead(Q,K,V)=Concat(head1,head2,…,headh)WO其中, h e a d i = A t t e n t i o n ( Q W Q i , K W K i , V W V i ) head_i =Attention(QW_{Q_i},KW_{K_i},VW_{V_i}) headi=Attention(QWQi,KWKi,VWVi)- 位置编码(Positional Encoding)
由于Transformer没有内置的顺序信息,通过加入位置编码将位置信息融入到词嵌入中:
PosEmb ( i , 2 j ) = sin ( i 1000 0 2 j / d ) ,PosEmb ( i , 2 j + 1 ) = cos ( i 1000 0 2 j / d ) \text{PosEmb}(i,2j)= \sin(\frac{i}{10000^{2j/d}}),\text{PosEmb}(i,2j+1)= \cos(\frac{i}{10000^{2j/d}}) PosEmb(i,2j)=sin(100002j/di),PosEmb(i,2j+1)=cos(100002j/di)
其中,𝑖 是位置,𝑗 是维度的一半,𝑑 是嵌入维度。- 训练与优化
- 损失函数:使用交叉熵损失函数。
- 优化器:使用 Adam 优化器,并对学习率进行调度。
- 正则化:使用 Dropout 技术进行正则化。
【实验与结果】
Transformer 在机器翻译任务(如英德翻译和英法翻译)上表现出色,显著超越了当时的最先进模型。论文中的实验结果表明,Transformer 在BLEU得分上显著优于RNN和LSTM等模型,并且在训练时间和并行计算效率上具有明显优势。
【总结】
Transformer 模型通过完全基于注意力机制的方法,解决了传统序列模型在处理长距离依赖时的诸多问题。其核心创新点包括多头自注意力机制、位置编码和高效的并行计算。Transformer 的成功不仅在机器翻译任务中取得了突破,也为后续的预训练语言模型(如 BERT 和 GPT 系列)奠定了基础。
二、GPT-1
GPT-1的论文《Improving Language Understanding by Generative Pre-Training》于2018年发布,由OpenAI团队撰写。该论文介绍了通过生成预训练提高语言理解的创新方法,标志着GPT系列的开端。以下是该论文的详细介绍和核心内容。
【论文概要】
- 标题:Improving Language Understanding by Generative Pre-Training
- 作者:Alec Radford, Karthik Narasimhan, Tim Salimans, Ilya Sutskever(AlexNet的二作,去了OpenAI当CTO)
- 发表时间:2018年
- 论文背景:在自然语言处理领域,标注数据相对匮乏。传统的深度学习模型通常需要大量的标记数据来进行训练,这限制了它们在很多缺乏标注资源的领域的应用。
- 主要贡献:提出了生成预训练(Generative Pre-Training, GPT)的方法,通过在大规模未标注文本数据上进行预训练,然后在特定的下游任务上进行微调,从而减少对标记数据的依赖,显著提高了自然语言处理(NLP)任务的性能。
克服难点:
【核心内容】
- 模型架构
- Transformer和RNN的选择:前者具有更结构化的信息,使得在更长的句子段落上的信息提取更佳
- GPT-1模型基于Transformer架构,主要仅保留了Transformer的解码器部分。这种架构使得GPT-1可以专注于单序列文本的生成式任务。
- GPT-1模型由12层Transformer Decoder的变体组成:其中嵌入维度的大小为768,Attention的头数为12,Feed Forward层的隐层维数为3072,总参数达到1.5亿。
- 每层包含以下组件:
- Masked Multi-Head Self-Attention:在计算自注意力时,遮盖(mask)未来的单词,使得每个单词只能关注到它之前的单词。自注意力层主要负责捕获输入序列内部各元素之间的依赖关系。
- Position-wise Feed-Forward Networks:逐位感知前馈层。每个位置的向量单独通过前馈神经网络进行非线性变换。FFN则基于自注意力层提供的上下文进行深度特征变换和提取
- Residual Connections and Layer Normalization:在每个子层之后应用残差连接和层归一化。
- 无监督预训练
- 目标:最大化生成模型预测下一个单词的概率,即给定前面词的情况下预测下一个词。
- 数据集:使用BooksCorpus数据集,该数据集包含约7000本书,共计8亿词。
- 方法:
- 输入:序列经过词嵌入(word embeddings)和位置嵌入(positional embeddings)相加后传入模型。
词嵌入:将输入的每个单词转换为一个固定维度的向量。
位置嵌入:由于Transformer没有顺序信息,位置嵌入加入了位置信息,将每个单词的位置编码成一个向量。- 输出:给定输入序列 生成下一个词的概率分布,通过 softmax 层计算。
- 前向传播:模型通过多层自注意力机制和前馈神经网络进行处理。 h 0 = U W e + W p h l = transformer_block ( h l − 1 ) ∀ i ∈ [ 1 , n ] P ( u ) = softmax ( h n W e T ) \begin{aligned} h_0&=UW_e+W_p\\ h_l&=\text{transformer\_block}(h_{l-1})\forall_i\in[1,n] \\ P(u)&=\text{softmax}(h_nW_e^T) \end{aligned} h0hlP(u)=UWe+Wp=transformer_block(hl−1)∀i∈[1,n]=softmax(hnWeT)
- 训练过程:通过最大化对数似然(log-likelihood)进行训练:
L 1 ( U ) = ∑ i log P ( u i ∣ u i − k , . . . , u i − 1 ; Θ ) L_1(U)=\sum_i\text{log}P(u_i | u_{i-k}, ..., u_{i-1}; \Theta) L1(U)=i∑logP(ui∣ui−k,...,ui−1;Θ) k k k 为上下文的窗口大小, u i u_i ui 表示序列中的第 𝑖 个单词, θ \theta θ 表示模型参数。- 有监督微调
- 目标:在特定任务上微调预训练模型,以提升任务性能。
- 数据集:在不同的下游任务上使用有标注的数据集。
- 训练过程:将预训练模型的最后一层输出传递给特定任务的分类头,然后通过标准的交叉熵损失函数进行微调。具体的为:
假设有一个标注的数据集C:每组数据包含:一个长度为m的输入tokens序列 x 1 , . . . , x m x^1, ..., x^m x1,...,xm,一个标签y。
- 前向计算:[输入] 经过 [预先训练过的模型] 来获得激活 h h h,然后再送到一个 [参数为 W y W_y Wy的线性输出层] 预测输出 y y y: P ( y ∣ x 1 , . . . , x m ) = softmax ( h l m W y ) (3) P (y |x^1, ..., x^m)=\text{softmax}(h_l^m W_y)\tag{3} P(y∣x1,...,xm)=softmax(hlmWy)(3)
- 最大化目标为: L 2 ( C ) = ∑ x , y log P ( y ∣ x 1 , . . . x m ) (4) L_2(C)=\sum_{x,y}\text{log}P(y|x^1,...x^m)\tag{4} L2(C)=x,y∑logP(y∣x1,...xm)(4)
- 此外,我们还发现,将语言建模作为微调的辅助目标有助于学习 (a) 改进监督模型的泛化;(b)加速收敛。具体来说,我们优化了以下目标(权重为 λ \lambda λ ) :
L 3 ( C ) = L 2 ( C ) + λ ∗ L 1 ( C ) (5) L_3(C) = L_2(C) + \lambda * L_1(C)\tag{5} L3(C)=L2(C)+λ∗L1(C)(5)
总的来说,微调期间需要额外增加参数是 W y W_y Wy,和分隔符token的嵌入- 实际任务上的使用:
不同任务会具有不同的输入形式,比如
- 在“相似性任务”上,输入为两段文字前后掉转位置,通过预训练模型后相加,在经过线性层,得到输出表达是否相似。
- 在“多选题”上,如果问题有n个答案,就构造n个输入为【起始符、问题、间隔符、答案i、结束符】,分别通过预训练模型+线性层,最后经过softmax得到得分。
- 实验结果
论文在多个自然语言理解任务上进行了实验,包括文本分类、相似性判断和问答任务。主要结果如下:
- 文本分类:在情感分析和主题分类任务上,GPT-1显著超过了之前的最先进模型。
- 相似性判断:在STS-Benchmark和SICK-Relatedness任务上,GPT-1的性能表现出色。
- 问答任务:在RACE和Story Cloze Test任务上,GPT-1也展示了强大的理解和推理能力。
- 讨论与未来工作
论文最后讨论了生成预训练的优势,包括:
- 泛化能力:预训练的生成模型能够很好地泛化到不同的下游任务。
- 数据效率:通过预训练,可以在较少的有标注数据上实现良好的性能。
作者还提出了未来工作的方向,包括进一步扩大模型规模和预训练数据集,以及探索更多的预训练方法和架构改进。
【总结】
- GPT-1的论文通过提出生成预训练的方法,在NLP领域取得了显著进展。该方法在未标注数据上进行预训练,然后在下游任务上进行微调,大大提高了模型的性能和泛化能力。GPT-1为后续的GPT-2和GPT-3奠定了基础,开创了NLP模型预训练的新范式。
三、 GPT-2
GPT-2 是由 OpenAI 于 2019 年发布的,它在 GPT-1 的基础上进行了大幅度的扩展和改进。
【论文概要】
- 标题:Language Models are Unsupervised Multitask Learners
- 作者:Alec Radford, Jeffrey Wu, Rewon Child, David Luan, Dario Amodei, Ilya Sutskever。仅第一个和最后一个作者没有变,也就是老板和主要干事的仍在,其他队员都换了一波 >_<
- 发表时间:2019 年
- 主要卖点:下游任务的 zero-shot。
GPT-1微调时候,会在输入当中增加 “开始符、间隔符、结束符”,让网络认识这些预训练时未见过的符号。在GPT-2中要做zero-shot,所以在做下游任务时模型不能够被调整,若此时引入模型未见的符号,模型就会困惑无法得到预期结果,所以就要求模型在下游任务的输入 和预训练时候的输入要风格一致。此时输入的形式可构造成更像自然语言:
- 机器翻译:(“翻译成法语”,“具体的文本”,“翻译后的法语文本”)
- 阅读理解:(“回答这个问题”,“阅读的文本”,“具体的问题”,“答案”)
【核心内容】
- 模型架构
GPT-2 基于 Transformer 的解码器架构,并在 GPT-1 的基础上进行了扩展:
- 更大规模:GPT-2 有 15 亿个参数,而 GPT-1 只有 1.1 亿个参数。
- 更多层数:GPT-2 中有多个大小的版本,最大的有 48 层 Transformer 解码器,每层包含 12 个注意力头,嵌入维度为 1600。
- 自回归模型:GPT-2 沿用了Transformer的解码器Self Attention机制,使用自回归的方式进行文本生成,即每个时刻的信息表征只能依赖于当前词及其之前的信息,也就是预测序列中的下一个单词。
- 预训练任务
- 数据集:WebText数据集,从 Reddit 上评分最高的链接中抓取的文本,包含800万文本,约 40GB 数据。(Common Crawl数据集,公开的网页抓取的WebText,但信噪比比较低,所以这里使用的是Reddit 中高质量的文本数据)
- 目标(类似GPT-1):最大化给定上下文下一个词的概率,自回归语言模型。
- 方法:
- 输入:词嵌入和位置嵌入相加。
- 输出:生成下一个词的概率分布,通过 softmax 层计算。
- 训练过程:GPT-2 的预训练目标与 GPT-1 相同,即最大化语言模型的对数似然:
L 1 ( θ ) = ∑ i = 1 N log P ( x i ∣ x < i ; θ ) L_1(\theta) = \sum_{i=1}^{N} \log P(x_i \mid x_{<i}; \theta) L1(θ)=i=1∑NlogP(xi∣x<i;θ) x i x_i xi 表示序列中的第 𝑖 个单词, θ \theta θ 表示模型参数。- 无监督多任务学习
- GPT-2 采用了完全的无监督多任务学习方式,在不进行任务特定微调的情况下,在多个 NLP 任务上表现出色(文本生成、翻译、问答、摘要(略差点))。
- 实验结果
GPT-2 在多个基准任务上展示了优异的性能:
- 文本生成:GPT-2 生成的文本质量和一致性得到了显著提升,展示了极强的文本生成能力。
- 任务性能:在翻译、问答和摘要任务上,GPT-2 在没有进行任务特定微调的情况下,仍然取得了接近甚至超过部分现有方法的表现。
- Zero-shot 学习:GPT-2 展示了零样本学习的能力,即在没有特定任务训练数据的情况下,通过生成预训练实现任务性能提升。
- 讨论与未来工作
论文最后讨论了 GPT-2 的几个关键点和未来的研究方向:
- 模型规模:GPT-2 展示了随着模型规模增加,性能显著提升的趋势。
- 生成质量:GPT-2 在生成质量和一致性方面取得了突破,但仍存在某些生成内容不一致或不合理的情况。
- 扩展与改进:未来工作可以探索更大规模的模型、更长的训练时间和更多样化的预训练数据,以进一步提升模型性能。
【总结】
- GPT-2 论文通过展示大规模生成预训练模型在多个 NLP 任务上的优异性能,强调了预训练和生成方法的重要性。GPT-2 的无监督多任务学习能力和零样本学习能力为自然语言处理领域带来了新的视角和方法,推动了生成模型的进一步发展。GPT-2 的成功为后续的 GPT-3 和其他大型生成模型奠定了坚实的基础,并对未来的研究方向提供了宝贵的参考。
四、 GPT-3
GPT-3 (Generative Pre-trained Transformer 3) 是由 OpenAI 于 2020 年发布的一种大型语言模型。该模型在自然语言处理(NLP)领域取得了显著进展,拥有 1750 亿个参数,是当时规模最大的语言模型。
【论文概要】
标题:Language Models are Few-Shot Learners
作者:Tom B. Brown, Benjamin Mann, Nick Ryder, Melanie Subbiah, Jared D. Kaplan, Prafulla Dhariwal, Arvind Neelakantan, Pranav Shyam, Girish Sastry, Amanda Askell, Sandhini Agarwal, Ariel Herbert-Voss, Gretchen Krueger, Tom Henighan, Rewon Child, Aditya Ramesh, Daniel M. Ziegler, Jeffrey Wu, Clemens Winter, Christopher Hesse, Mark Chen, Eric Sigler, Mateusz Litwin, Scott Gray, Benjamin Chess, Jack Clark, Christopher Berner, Sam McCandlish, Alec Radford, Ilya Sutskever, Dario Amodei。…只有老板没变,其他成员大换血。发表时间:2020 年
以往工作的问题:
- 需要一个大数据时,就需要对其标注;
- 最终模型表现较好的原因,有可能是来源于微调,预训练模型本身的好坏对结果影响差别不大;
- 对标人类的话,无需要再对具体的下游任务采集成千上万的数据去适应学习
GPT-3提出的方案:
- Few-Shot、one-shot、zero-Shot :这种能力使得 GPT-3 可以在没有进行任务特定微调的情况下,处理各种 NLP 任务,展现了强大的学习能力。
能生成新闻文章,并且人类较难读出是AI生成
【核心内容】
Few-Shot, One-Shot, Zero-Shot 学习
这里仍然无需微调训练,而是在使用时 给予对应的示例作为提示,让模型在前向推理时,通过自身的注意力机制,从长句子中提取到有用的信息,从而做下游任务。
- Zero-Shot 学习:不给模型提供示例,直接通过提示词完成任务。
- One-Shot 学习:给模型提供一个示例,模型即可在任务中表现良好。
- Few-Shot 学习:给模型提供几个示例,模型即可在任务中表现良好。但这样的工作也会存在问题,当使用Few-Shot 时,即使前后的问题是相近的,示例也需要每次都参与到输入中,这为使用带来了不便和略微的僵硬
模型架构
GPT-3 的规模显著超过了 GPT-2(15 亿参数),使得模型能够学习到丰富的语言知识和上下文信息,以及更强的生成能力。
- 模型参数上:
- GPT-3 Small:参数的设置与GPT-2相同
- GPT-3 Medium:参数与Bert-large相同
- GPT-3系列模型越来越浅一些、宽一些,整体来说GPT-3 175B 的模型更扁一些 (96/12 << 12288/768)。
- GPT-3 基于 Transformer 架构,最大的模型参数有:层数96 层;注意力头 每层 96 个;嵌入维度12288;参数总量:1750 亿。
- batchsize上:
- 选择较大batch:分布式训练时每台机器运行速度更高,通讯量也降低;大的模型里面噪声减小对训练影响无需特别关注;较大的批量大小并不一定意味着可以使用较大的学习率。相反,为了保持训练的稳定性和收敛性,通常会采用较小的学习率来配合较大的批量大小。
- 补充:小模型上更容易过拟合。所以小模型建议使用小的批量,这样数据里面的噪声比较多,有利于模型的抗噪。
训练数据
- GPT-3 总的训练数据量约为 570GB。是在一个混合的大规模文本数据集上进行训练,该数据集涵盖了多种来源和内容。
- 数据集在使用时,认为Common Crawl为质量偏差的数据集(尽管做了过滤),故训练时采样的比例进行了设置,降低该数据集的采样比例。
- 该数据集包括:
- a) Common Crawl:经过过滤和处理的网络抓取数据。
- gpt2中的WebText数据集作为正例,Common Crawl数据集作为负例,训练一个简单的二分类,然后对Common Crawl的数据集进行预测,为正类则保留,负类则滤除。
- 文本去重:lsh算法,Information Retrieval (IR,信息检索是计算机科学的一个领域,专注于开发从结构化或非结构化数据集中检索和获取信息的有效方法) 中的技术。
- b) WebText2:一个扩展版本的 WebText 数据集。
- c) Books1 和 Books2:两个大规模的书籍数据集。
- d) Wikipedia:完整的英文维基百科。
预训练目标
与 GPT-1 和 GPT-2 类似,GPT-3 的预训练目标是自回归语言建模,最大化给定上下文下一个词的概率: L 1 ( θ ) = ∑ i = 1 N log P ( x i ∣ x < i ; θ ) L_1(\theta) = \sum_{i=1}^{N} \log P(x_i \mid x_{<i}; \theta) L1(θ)=i=1∑NlogP(xi∣x<i;θ) x i x_i xi 表示序列中的第 𝑖 个单词, θ \theta θ 表示模型参数。实验与结果
GPT-3 在多个基准任务上进行了评估,展示了其强大的性能和多任务处理能力。原论文中主要实验:语言建模、阅读理解、翻译、其他任务(文本生成、总结、回答问题、代码生成)。这里细节不做详述。当然原论文中也做了更多的讨论:如偏见、大模型在社会中的安全性(可能会发布虚假信息、论文造假等)等,这里也不做赘述。
【总结】
- GPT-3 论文展示了大规模语言模型在预训练和少样本学习方面的强大能力,通过增加模型规模和训练数据,显著提升了模型在各种 NLP 任务上的性能。GPT-3 展示了在 Few-Shot、One-Shot 和 Zero-Shot 学习中的强大能力,使其能够在没有任务特定微调的情况下,处理广泛的 NLP 任务。GPT-3 的成功为未来更大规模的语言模型研究提供了宝贵的经验和方向,并对自然语言处理领域产生了深远的影响。
五、 BERT
BERT(Bidirectional Encoder Representations from Transformers)是由Google AI Language团队在2018年提出的一种预训练语言表示模型。BERT模型在自然语言处理(NLP)任务中取得了显著的性能提升,开创了基于Transformer的双向语言表示学习的新范式。
【论文概要】
- 标题:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
- 作者:Jacob Devlin, Ming-Wei Chang, Kenton Lee, Kristina Toutanova
- 发表时间:2018年
- 发表会议:NAACL-HLT 2019
- 背景与动机:在BERT之前,大多数预训练语言模型(如GPT、ELMo)都是基于单向或浅层双向的语言模型。这些模型在处理上下文信息时存在一定的局限性。BERT通过引入双向Transformer编码器,实现了更深层次的双向上下文理解,从而大幅提升了NLP任务的性能。
【核心内容】
- 模型架构
BERT模型具体包括以下几个部分:
- BERT使用了BERT只使用Transformer的编码器部分,不使用解码器。
- BERT使用了Transformer编码器的双向变体,能够同时从左右两个方向理解上下文信息。
- BERT-base包含12层Transformer编码器,每层有12个注意力头,嵌入维度为768,总参数数量为1.1亿。
- BERT-large包含24层Transformer编码器,每层有16个注意力头,嵌入维度为1024,总参数数量为3.4亿。
- 预训练任务
目标:通过双向 Transformer 编码器进行语言表示预训练。
数据集:BooksCorpus 和英文维基百科,合计 33 亿词。
方法:
- 输入:词嵌入、段嵌入和位置嵌入相加,得到最终的输入表示。
词嵌入:使用WordPiece分词,将输入的每个词转换为子词(subword)表示,并将每个子词转换为固定维度的向量。
段嵌入:表示输入句子的不同段(A段和B段),用于NSP任务。
位置嵌入:编码每个子词的位置。- 模型输出:
- 掩码语言模型(MLM)输出:对被掩盖的单词进行预测,通过 softmax 层生成掩盖位置的词汇概率分布。
- 下一个句子预测(NSP)输出:通过分类层输出句子对是否连续的概率。
- BERT的预训练包括两个主要任务:
- 掩码语言模型(Masked Language Model, MLM):
- 通过随机遮盖(mask)输入序列中的一些单词,然后预测这些被遮盖的单词。
- 这种方法使模型能够从双向上下文中学习单词表示。
- 掩码策略:在输入序列中随机选择15%的词进行遮盖,其中80%的词用[MASK]标记替换,10%的词用随机词替换,10%的词保持不变。
- 下一句预测(Next Sentence Prediction, NSP):
- 用于建模句子间的关系。
- 给定一对句子,模型需要预测第二个句子是否是第一个句子的下一个句子。
- 在预训练过程中,50%的句子对是真实的连续句子对,50%是随机选取的句子对。
- 微调
BERT通过在不同下游任务上进行微调,进一步提升性能。微调过程如下:
- 任务适配:将预训练好的BERT模型应用到具体的下游任务上,如文本分类、问答、命名实体识别等。
- 添加任务特定层:在BERT的顶层添加任务特定的输出层,如分类头或序列标注层。
- 端到端训练:在下游任务的训练数据上,进行端到端的微调训练,优化整个模型的参数。
- 实验与结果
论文在多个基准测试上验证了BERT的性能,包括GLUE(General Language Understanding Evaluation)、SQuAD(Stanford Question Answering Dataset)和SWAG(Situations with Adversarial Generations)。主要结果如下:
- GLUE基准:在所有子任务上BERT均取得了最先进的结果,显著超越了之前的模型。
- SQuAD问答:在SQuAD 1.1和SQuAD 2.0上,BERT的性能达到了人类水平,并在多个测评指标上刷新了纪录。
- SWAG推理:在SWAG数据集上的表现也优于之前的最先进模型。
- 局限性
- BERT在预训练时会出现特殊的[MASK]标记,但在下游的微调任务中不会出现,这可能导致预训练阶段和微调阶段的不一致。
- BERT在分词后做[MASK]可能会产生一些问题,例如,为了解决OOV(out-of-vocabulary)问题,BERT会将一个词切分成更细粒度的WordPiece,这可能会影响模型的表现。
- 讨论与未来工作
论文讨论了BERT的几个关键贡献和未来的研究方向:
- 双向上下文的优势:BERT通过双向编码器实现了更好的上下文理解,提升了模型的表现。
- 预训练任务的选择:MLM和NSP任务在捕捉语言特征方面起到了重要作用。
- 扩展与改进:未来工作可以探索更大的模型、更长的训练时间和更多样化的预训练任务。
【总结】
- BERT论文提出了基于Transformer编码器的双向语言表示模型,通过掩码语言模型和下一个句子预测任务进行预训练,然后在下游任务上进行微调。BERT在多个NLP任务上取得了最先进的性能,证明了双向上下文理解和预训练方法的有效性。BERT模型开创了基于Transformer的预训练语言模型的新范式,对自然语言处理领域产生了深远的影响。
相关文章:
【大模型】Transformer、GPT1、GPT2、GPT3、BERT 的论文解析
前言 在自然语言处理(NLP)和深度学习的快速发展中,Transformer模型和 GPT系列模型扮演了至关重要的角色。本篇博客旨在对这些开创性的论文进行介绍,涵盖它们的提出时间、网络结构等关键信息,能够快速的理解这些模型的设…...
Android 手机启动过程
梳理 为了梳理思路,笔者画了一幅关于 Android 手机启动的过程图片内容纯属个人见解,如有错误,欢迎各位指正...
【redis】hash基本命令和内部编码
文章目录 表示形式命令HSET 和 HGET HEXISTSHDELHKEYSHVALSHGETALLHMGETHLENHSETNXHINCRBYHINCRBYFLOAT命令小结内部编码 表示形式 Redis 自身已经是键值对结构了 Redis 自身的键值对就是通过哈希的方式来组织的 把 key 这一层组织完成之后,到了 value 这一层&…...
统计数字字符个数(信息学奥赛一本通-1129)
【题目描述】 输入一行字符,统计出其中数字字符的个数。 【输入】 一行字符串,总长度不超过255。 【输出】 输出为1行,输出字符串里面数字字符的个数。 【输入样例】 Peking University is set up at 1898. 【输出样例】 4 【输出样例】 #in…...
基于javaweb的SSM+Maven网上选课管理系统设计与实现(源码+文档+部署讲解)
技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…...
算法及数据结构系列 - BFS算法
文章目录 框架思路经典题型111. 二叉树的最小深度752. 打开转盘锁 框架思路 BFS 的核心思想应该不难理解的,就是把一些问题抽象成图,从一个点开始,向四周开始扩散。一般来说,我们写 BFS 算法都是用队列这种数据结构,每…...
深入剖析 MetaSpace OOM 问题:根因分析与高效解决策略
目录 一、MetaSpace 区 OOM:概述 (一) MetaSpace的变革与挑战 (二)MetaSpace OOM的影响 (三) 为什么要关注MetaSpace OOM 二、MetaSpace 区 OOM的根本原因 (一)Met…...
java自带日志系统介绍(JUL)以及和Log4j 2、Logback、SLF4J不同日志工具的对比
Java 日志系统是开发中用于记录应用程序运行时信息的重要工具。以下是 Java 日志系统的核心组件及其使用场景、配置参数的详细介绍,以及不同日志系统的对比分析。 Java 日志系统核心组件 1. 日志记录器(Logger) 作用:负责生成日…...
Kubernetes 中metrics-server的采集周期,采集链路是什么样的?
0. 运维干货分享 软考高级系统架构设计师备考学习资料软考高级网络规划设计师备考学习资料Kubernetes CKA认证学习资料分享信息安全管理体系(ISMS)制度模板分享免费文档翻译工具(支持word、pdf、ppt、excel)PuTTY中文版安装包MobaXterm中文版安装包ping…...
一分钟了解深度学习
一分钟了解深度学习 A Minute to Know About Deep Learning By JacksonML 1. 什么是深度学习? 深度学习(Deep Learning) 是机器学习的一个子集,都属于人工智能的范畴;它使用多层神经网络(称为深度神经网络)来模拟人…...
Git LFS (Large File Storage) 简介
目录 Git LFS (Large File Storage) 简介 1. 什么是 Git LFS? 2. 为什么需要 Git LFS? 3. Git LFS 的工作原理 4. 如何使用 Git LFS? 4.1 安装 Git LFS 4.2 配置 Git LFS 5. Git LFS 的优缺点 优点 缺点 6. 适用场景 7. 结论 1. …...
前端权限系统
前端权限系统是为了确保用户只能访问他们有权限查看的资源而设计的。在现代前端开发中,权限控制不仅仅是简单的显示或隐藏元素,还涉及到对路由、组件、数据和操作权限的细致控制。下面是前端权限系统的常见设计方案和实现步骤。 前端权限系统的组成部分 …...
【蓝桥杯速成】| 4.递归
递归 题目一:最大公约数 问题描述 1979. 找出数组的最大公约数 - 力扣(LeetCode) 给你一个整数数组 nums ,返回数组中最大数和最小数的 最大公约数 。 两个数的 最大公约数 是能够被两个数整除的最大正整数。 解题步骤 需要…...
QEMU源码全解析 —— 块设备虚拟化(4)
接前一篇文章:QEMU源码全解析 —— 块设备虚拟化(3) 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《QEMU/KVM源码解析与应用》 —— 李强,机械工业出版社 类模板是创建类的模式_创建类是的模版-CSDN博客<...
92.HarmonyOS NEXT开发学习路径与最佳实践总结:构建高质量应用
温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦! HarmonyOS NEXT开发学习路径与最佳实践总结:构建高质量应用 文章目录 HarmonyOS NEXT开发学习路径与最佳实践总结:构建高质…...
【004】deepseek本地化部署后,python的调用方式_#py
python调用本地deepseek 1 本地化部署deepseek2 python调用方式 1 本地化部署deepseek 已经有很多大佬们说了不少部署本地化部署deepseek的工作了,我就不过多重复了。 先安装Ollama软件,再通过Ollama获取deepseek的模型文件,大家根据电脑的配…...
基于Python+Flask+MySQL+HTML的爬取豆瓣电影top-250数据并进行可视化的数据可视化平台
FlaskMySQLHTML 项目采用前后端分离技术,包含完整的前端,以flask作为后端 Pyecharts、jieba进行前端图表展示 通过MySQL收集格列数据 通过Pyecharts制作数据图表 这是博主b站发布的详细讲解,感兴趣的可以去观看:【Python爬虫可…...
【Prometheus01】可观测性系统之Prometheus简介、优缺点对比、组件介绍、数据采集流程、TSDB简介
监控工具对比、黑盒监控与盒白盒监控、Kubernetes监控简介 监控简介: 监控的价值: 长期趋势分析:通过对监控样本数据的持续收集和统计,对监控指标进行长期趋势分析。例如,通过对磁盘空间增长率的判断,我们…...
Postman下载安装及简单入门
一.Postman简介 Postman是一款API测试工具,可以帮助开发、测试人员发送HTTP请求,与各种API进行交互,并分析响应 二.下载与安装 访问Postman官网(https://www.postman.com/),下载适…...
记第一次跟踪seatunnel的任务运行过程三——解析配置的具体方法getLogicalDag
前绪 记第一次跟踪seatunnel的任务运行过程二——ClientJobExecutionEnvironment的execture方法 从这里开始,就是使用seatunnel-2.3.9的源码了。前面部分没有变化,2.3.X版本都是通用的。 建议打开源码,边读文章,边阅读源码 正文…...
Maven 的核心包
由于前端项目不是核心,阅读 nexus-public 源代码似乎绕远路了。nexus-oss 社区版主要就是集成 maven 的上传包、认证、包解析、包存储这几个核心功能,前端实现重新可以使用新的现代前端工具来提高生产力。故重新疏理一下 maven 的核心机制,即…...
上位机数据可视化:使用QtCharts绘制波形图
工程配置 CMake文件 find_package(Qt5 COMPONENTS Charts REQUIRED)target_link_libraries(zhd-desktop PRIVATE Qt5::Charts)包含头文件以及名称空间(这个很重要,没有包含名称空间编译器会提示找不到相关的类型) #include <QtCharts&g…...
制造业数字化转型,汽车装备制造企业数字化转型案例,智能制造数字化传统制造业数字化制造业数字化转型案例
《某制造业企业信息化整体解决方案》PPT展示了一个汽车装备企业的整体信息化解决方案,阐述了该企业的业务特点和现状,主要包括按订单生产、多级计划和产品跟踪等,分析了信息化建设的主要困难,如信息管理手工化、过程数据追溯困难、…...
网络安全常识科普(百问百答)
汪乙己一到店,所有喝酒的人便都看着他笑,有的叫道,“汪乙己,你又监控员工隐私了!”他不回答,对柜里说,“来两个fofa。”便排出三个比特币。他们又故意的高声嚷道,“你一定又在电报群…...
P2512糖果传递 P4447分组 P1080国王游戏 P4053建筑抢修
P2512 [HAOI2008] 糖果传递 题目描述 有 n n n 个小朋友坐成一圈,每人有 a i a_i ai 个糖果。每人只能给左右两人传递糖果。每人每次传递一个糖果代价为 1 1 1。 输入格式 小朋友个数 n n n,下面 n n n 行 a i a_i ai。 输出格式 求使所…...
SpringMVC(七)数据校验+VO++脱敏
目录 一 基础原理 1 先将数据校验的依赖导入 2 在JavaBean中编写校验注解 3 使用Valid告诉SpringMVC进行校验(校验不通过,方法通知执行) 4 在Valid参数后面加上一个BindingResult参数,获取校验结果。 二 改进方案 1 没写全…...
使用OpenResty(基于Nginx和Lua)优化Web服务性能
引言 1.1 OpenResty简介 OpenResty 是一个基于 Nginx 和 Lua 的高性能 Web 应用平台。它通过将 Lua 脚本嵌入到 Nginx 中,提供了强大的动态处理能力,适用于构建高性能的 Web 服务、API 网关、动态内容生成等场景。 1.2 Nginx与Lua结合的优势 高性能:Nginx 本身就是一个高…...
32、构造函数
1、用构造函数反复创建多个相同结果的对象 问题 如果想反复创建多个相同结构,但是内容不同的对象时,用{}创建会代码重复,及其不便于维护! 解决 今后只要想反复创建同一类型的多个相同结构不同内容的对象时,都用构造函…...
蓝桥与力扣刷题(蓝桥 星期计算)
题目:已知今天是星期六,请问 20^22 天后是星期几? 注意用数字 1 到 7 表示星期一到星期日。 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 解题思路+代码: 代码࿱…...
【leetcode hot 100 230】二叉搜索树中第K小的元素
解法一:从小到大输出到list中,取list[k-1]就是第k小的元素 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val;…...
六种最新优化算法(TOC、MSO、AE、DOA、GOA、OX)求解多个无人机协同路径规划(可以自定义无人机数量及起始点),MATLAB代码
一、算法简介 (一)阿尔法进化(Alpha Evolution,AE)算法 阿尔法进化(Alpha Evolution,AE)算法是2024年提出的一种新型进化算法,其核心在于通过自适应基向量和随机步长的…...
python离线安装
Python Releases for Windows | Python.org 下载包地址widows一般是64bit的包 下载完成后双击,在弹出的首个页面会看到下面的图 第一步:建议手动安装 第二步:一定要勾选把版本加入到Path路径 然后就是无脑下一步,到这一步就可…...
【每日学点HarmonyOS Next知识】状态栏字体、生命周期、自定义对话框屏幕中间、透明度、tab居中
1、HarmonyOS 单页面如何控制状态栏字体颜色? 状态栏字体颜色可通过设置statusBarContentColor修改,参考文档如下: https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-window-V5 参考代码: import…...
C# GeneticSharp包
可以直接从nuget安装GeneticSharp包 GeneticSharp 遗传算法类库 GeneticSharp 是什么 GeneticSharp 是一个C#的遗传算法类库, 遗传算法Java著名的JMetal, Python也有JMetalPy和PyMoo, C#相对差一截, 稍微有名的是GeneticSharp库. GeneticSharp 的弱点: 不支持多目标优化没…...
大模型中的常用名词介绍八:【特征与数据处理、伦理与公平性等】【建议收藏】
本文总结了大模型领域有关特征与数据处理、伦理与公平性等其他部分的名词,并解释其含义。跳出浩如烟海的大模型知识圈层,从概念上理清大模型的基础脉络! 序号模块分组说明快捷访问1 模型架构与基础概念 介绍了【模型架构与基础概念】相关的常…...
HTML5 drag API实现列表拖拽排序
拖拽API(Drag and Drop API)是HTML5提供的一组功能,使得在网页上实现拖放操作变得更加简单和强大。这个API允许开发者为网页元素添加拖拽功能,用户可以通过鼠标将元素拖动并放置到指定的目标区域。 事件类型 dragstart࿱…...
HTTPS建立连接过程
一、混合加密 通过混合加密的方式可以保证信息的机密性,解决了窃听的风险。 HTTPS采用的是对称加密和非对称加密结合的混合加密方式: (1) 在通信建立前采用非对称加密的方式交换会话密钥,后续就不再使用非对称加密。 &…...
deepseek GRPO算法保姆级讲解(数学原理+源码解析+案例实战)
文章目录 什么是GRPO群组形成(Group Formation):让大模型创建多种解决方案偏好学习(Preference Learning):让大模型理解何为好的解答组内相对优势 优化(optimization): 让大模型从经验中学习(learning from experience)目标函数 GRPO算法的伪码表示GRPO算法的局限与…...
【WEB APIs】DOM-节点操作
1. 日期对象 1.1 实例化 <script>// 实例化// 1.得到当前时间const date new Date()console.log(date);// 2.得到指定时间const date1 new Date(2025-3-14)console.log((date1));</script> 1.2 日期对象方法 千万不要忘记加小括号 // 获得日期对象const date2 …...
VSTO(C#)Excel开发7:自定义任务窗格
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…...
Qemu 详解与 ARM 虚拟机搭建指南
1. Qemu 是什么? Qemu(Quick Emulator)是一款开源的机器模拟器和虚拟化工具,支持多种硬件架构(如 x86、ARM、PowerPC 等)。它的核心功能包括: 动态指令翻译:将不同架构的指令实时翻…...
Windows编译Flash-attention模块
博主的环境配置:windows11操作系统,cuda11.8.r11.8, cudnn8.9.7, git2.47.1,cmake4.0.0-rc4,ninja1.12.1, vs_buildTools17.4.21, cl19.34.31948, torch2.3.1 编译flash-attention的环境依赖如下图 #mermaid-svg-SZBhH41EsJGfu…...
《Python深度学习》第三讲:神经网络
在前面的课程里,我们已经了解了深度学习的数学基础,也用一个简单的例子展示了神经网络的强大能力。本讲我们要更深入地探讨神经网络的结构、训练过程,以及如何用它解决实际问题。 3.1 神经网络剖析 先来聊聊神经网络的核心组件:层…...
编程题《牛牛的链表删除》的python可以用非链表的方式
描述 牛牛从键盘输入了一个长度为 n 的数组,把这个数组转换成链表然后把链表中所有值是 x 的节点都删除。 输入描述: 第一行输入两个正整数 n 和 x 表示数组的长度和要删除的链表节点值 x 。 第二行输入 n 个正整数表示数组中每个元素的值。 输出描述&am…...
传统RAG vs 知识图谱:大模型时代的知识管理革命
引言:为什么需要突破传统RAG? 在大模型应用落地的浪潮中,检索增强生成(RAG)技术通过连接外部知识库,有效缓解了模型的幻觉问题。然而,当面对复杂关系推理、多文档关联分析等场景时,…...
【Go语言圣经2.6】
目标 概念 GOPATH模型 GOPATH:GOPATH 是一个环境变量,指明 Go 代码的工作区路径。工作区通常包含三个目录: src:存放源代码,按照导入路径组织。例如,包 gopl.io/ch2/tempconv 应存放在 $GOPATH/src/gopl.i…...
多时间尺度的配电网深度强化学习无功优化策略的Python示例代码框架
以下是一个简单的多时间尺度的配电网深度强化学习无功优化策略的Python示例代码框架,用于帮助你理解如何使用深度强化学习(以深度Q网络 DQN 为例)来处理配电网的无功优化问题。在实际应用中,你可能需要根据具体的配电网模型和需求…...
0CTF 2016 piapiapia 1
#源码泄露 #代码审计 #反序列化字符逃逸 #strlen长度过滤数组绕过 www.zip 得到源码 看到这里有flag ,猜测服务端docker的主机里,$flag变量应该存的就是我们要的flag。 于是,我们的目的就是读取config.php 利用思路 这里存在 任意文件读取…...
ArcGIS Pro将有文字标注底图切换为无标注底图(在线地图图源)
今天介绍一下在ArcGIS Pro将有标注的地形底图换成无标注的底图。 大家在这项目底图时候会经常调用ArcGIS Pro自带的地形图,但是这个地形图自带是有注记的,如下图。 如何更改,才可以调用无文字注记的呢? 对于一个已经切好图的有注记…...
股指期货有卖不出去的时候吗?
在股指期货的交易世界里,很多人都有这样的疑问:股指期货会不会有卖不出去的时候呢?答案是会的,下面咱们就来详细唠唠为啥会出现这种情况。 市场极端行情下难以卖出 1.跌停限制:股指期货和股票一样,也有涨…...