赞
踩
ChatGPT (Generative Pre-Trained Transformer) 是由OpenAI团队与2022年11月基于GPT-3.5 (目前已经开放基于GPT-4的ChatGPT模型)开发出来的一个大语言聊天机器人模型。GPT基于Transformer模型结构,ChatGPT通过对输入的指令 (prompt) 来生成文本,更适应聊天机器人,客服等这类型对话应用。模型基于大量的对话语料进行训练,包括网站,书籍,社交媒体等文本语料,目前ChatGPT支持理解生成多种语言的文本,包括英语,中文,法语,德语等。
要了解ChatGPT是怎么工作的,首先我们需要来看下ChatGPT是怎么训练出来的,ChatGPT工作阶段主要有如下几个过程:
预训练 (Pre-training) 阶段
在预训练阶段,ChatGPT使用了来自互联网上的大规模的文本数据集进行训练,这些数据包含了广泛的内容:新闻,维基百科,书籍,网络文本信息等。预训练的目标是让ChatGPT学习自然语言的语法,语义以及常识知识。ChatGPT采样的是Transformer结构作为模型的基础,通过采用自注意力机制 (self-attention) 来捕捉输入序列中单词之间的关系,通过预训练过程,ChatGPT学会了上下文的理解以及句子结构等。在预训练过程中,ChatGPT通过自回归 (autoregressive) 的方式进行训练,通过将输入序列中的一部分作为上下文,预测下一个单词或者标记,通过这种方式,模型逐渐学习到了语言的统计规律和潜在的语义含义。
微调 (Fine-tuning) 阶段
在预训练完成后,ChatGPT需要经过微调来适应特定的任务或应用场景。微调阶段需要特定的对话数据集,这些数据集用于模型进行监督训练。在微调阶段,模型可以学习如何根据上下文生成连贯和有意义的回复,在微调的过程中通常会使用一些技术来引导模型的生成,比如加权重要性采样 (weighted importance sampling) 或使用特定的响应样本作为模型输出的参考。这些技术可以帮助改善模型生成的质量和准确性。
预测 (predict) 阶段
一旦ChatGPT完成了训练过程,输入一个指令或者一个问题,ChatGPT就可以生成像人类一样的回答。ChatGPT主要基于学到的知识以及对语言的理解进行生成回答,通过给定的上下文输入,ChatGPT从模型中的词汇概率分布中采用生成。ChatGPT可以提供有帮助的有信息的回答,但是毕竟是AI模型,还是可能存在生成不准确或者不可靠的信息。所以有时候需要从可靠的资源信息里确认模型生成的信息是否可靠。
ChatGPT在许多领域有很多的应用,其中最常见的应用可以归纳如下:
ChatGPT有很多益处和应用,但是它也有一些限制,如下是目前ChatGPT的一些问题:
所以,我们可以把ChatGPT当做一个提供信息和协助的工具,能够意识到ChatGPT的局限性,对ChatGPT提供的回答需要做严格的评估。
Improving Language Understanding by Generative Pre-Training
2018年发表,训练数据40GB,模型参数大小1.3B。
基于大量的语料进行无监督学习,无监督学习建模目标如下:
给定无监督语料的上下文tokens
U
=
{
u
1
,
u
2
,
.
.
.
,
u
n
}
U=\{u_1,u_2,...,u_n\}
U={u1,u2,...,un},使用标准的语言模型目标函数是最大化如下似然函数:
L
1
(
U
)
=
∑
i
log
P
(
u
i
∣
u
i
−
k
,
.
.
.
,
u
i
−
1
;
θ
)
L_1(U) = \sum_i \log P(u_i|u_{i-k},...,u_{i-1};\theta)
L1(U)=i∑logP(ui∣ui−k,...,ui−1;θ)
其中
k
k
k表示的是文本窗口大小,条件概率
P
P
P是一般是由参数为
θ
\theta
θ的神经网络建模预测得到。而在GPT-1算法里,使用的是多层Transformer decoder 作为语言模型,这个模型对输入的上下文tokens通过使用multi-head的self-attention产生目标tokens的向量表征:
h
0
=
U
W
e
+
W
p
h_0 = UW_e + W_p
h0=UWe+Wp
h
l
=
t
r
a
n
s
f
o
r
m
e
r
b
l
o
c
k
(
h
l
−
1
)
∀
i
∈
[
1
,
n
]
h_l = transformer_{block}(h_{l-1}) \forall i \in [1,n]
hl=transformerblock(hl−1)∀i∈[1,n]
P
(
u
)
=
s
o
f
t
m
a
x
(
h
n
W
e
T
)
P(u) = softmax(h_nW_e^T)
P(u)=softmax(hnWeT)
其中
U
=
(
u
−
k
,
.
.
.
,
u
−
1
)
U = (u_{ -k}, ...,u_{-1})
U=(u−k,...,u−1)是上下文tokens的索引向量,
n
n
n代表模型层数,
W
e
W_e
We是tokens向量矩阵,
W
p
W_p
Wp是位置向量矩阵。
基于上述的pre-train训练完后,接下来就是基于有标签的数据进行fine-tune。每一个样本由输入序列
x
1
,
.
.
.
,
x
m
{x^1,...,x^m}
x1,...,xm以及对应的标签
y
y
y组成,输入经过我们Pre-trained的模型获得最后的transformer block提取的向量
h
l
m
h_l^m
hlm,然后将其输入到一层参数为
W
y
W_y
Wy的线性输出层预测
y
y
y值:
P
(
y
∣
x
1
,
.
.
.
,
x
m
)
=
s
o
f
t
m
a
x
(
h
l
m
W
y
)
P(y|x^1,...,x^m) = softmax(h_l^mW_y)
P(y∣x1,...,xm)=softmax(hlmWy)
目标函数是最大化如下函数:
L
2
(
C
)
=
∑
(
x
,
y
)
l
o
g
P
(
y
∣
x
1
,
.
.
.
,
x
m
)
L_2(C) = \sum_{(x,y)}logP(y|x^1,...,x^m)
L2(C)=(x,y)∑logP(y∣x1,...,xm)
论文中发现加入语言模型建模作为辅助任务有利于提升fine-tune阶段的模型的泛化能力以及加速模型的收敛速度。所以,在fine-tune阶段,加入了语言模型的学习辅助任务,所以最终的目标函数如下:
L
3
(
C
)
=
L
2
(
C
)
+
λ
×
L
1
(
C
)
L_3(C) = L_2(C) + \lambda \times L_1(C)
L3(C)=L2(C)+λ×L1(C)
在Fine-tune阶段,我们只需要fine-tune的参数是
W
y
W_y
Wy以及分隔符tokens的词向量。整体结构如下所示:
其中fine-tune过程的任务有文本分类,语言推理,句子相似性,问答任务,如上图所示,详细细节如下:
Natural Language Inference (NLI): 也被称为文本蕴涵识别,任务旨在评估计算机系统对于理解和推断自然语言文本之间关系的能力。具体而言,NLI 要求系统阅读一对句子(通常是前提和假设),并判断这两个句子之间的关系,这个关系通常被归为三类:
蕴涵(Entailment): 如果一个句子的意义包含在另一个句子中,那么这两个句子之间存在蕴涵关系。
矛盾(Contradiction): 如果一个句子的意义与另一个句子的意义相矛盾,那么这两个句子之间存在矛盾关系。
中性(Neutral): 如果两个句子之间没有蕴涵关系,也没有矛盾关系,那么它们被认为是中性的,即彼此之间的关系是中立的。
NLI 是自然语言处理领域中一个重要的任务,它涉及到语义理解和推理,对于许多应用,如问答系统、机器翻译和对话系统等,都具有关键性的作用。
Question answering and commonsense reasoning:
Question Answering (QA): 问题回答任务旨在使计算机系统能够理解和回答自然语言中提出的问题。这包括阅读理解任务,其中系统需要从给定的文本中提取信息来回答问题,以及开放领域的问答任务,其中系统需要回答用户提出的任意问题。
Commonsense Reasoning: Commonsense reasoning 是指计算机系统理解和应用常识知识来推理和解决问题的能力。这涉及到对于日常情境和人类行为的理解,而这些情境和行为可能在文本中没有直接提及,但是基于常识知识可以进行推断。
Semantic Similarity: 预测两个句子是否是语义等同,这一概念涉及到对语言意义的理解,而不仅仅是表面的语法结构。
Classification: 文本分类任务是比较常见的,论文基于两种不同的语料库进行了两种文本分类任务。一种是基于CoLA语料库判断一个句子是不是语法正确的,另外一个分类任务是基于SST-2语料库的情感分类。
无监督学习的训练语料来自BooksCorpus dataset书籍语料库文本信息,包括冒险,科幻,浪漫等题材7000多本书籍。
论文对比了几种试验变量的效果对比,整体试验结论如下:
在fine-tune阶段,将pre-train阶段学习的模型层数参数迁移越多效果越好
生成性预训练有效性验证
论文给出了只用pre-training的模型观察试验效果的表现,发现预训练模型在训练过程中预测也稳步增加,表明生成性预训练支持学习广泛的与任务相关的功能,试验结果如下:
Language Models are Unsupervised Multitask Learners
2019年发表,GPT-2有1.5B (billion 十亿)也就是15亿的参数,训练样本40G。从paper内容来看,GPT-2相比GPT核心变化点如下:
训练数据重点是来自网上高质量信息,包含了45 million个链接,抽取了800w的文本,大概有40G的文本量。
论文中探测了训练集与测试集重合度对模型表现的影响。论文提出了Bloom filters,给定一个数据集,通过计算8-grams与WebText数据集的重合比率来判断测试集和训练集重合度情况
证明了预训练模型不做进一步有监督的调整在具体的任务中也可以取到不错的效果,基于无监督的pre-train学习是一个很值得探索的一个研究领域。
Language Models are Few-Shot Learners
2020年发表,训练数据数十TB数据,模型参数大小175B。如下是论文作者公开训练GPT-3的数据来源:
其中最主要数据来源是Common Crawl数据。
在GPT-3论文中,作者给出了一些一些比较有意思的试验发现。
模型越大,对于in-context learning效果越明显,如下图所示:
模型越大,对于few-shot学习效果增速更快,如下图所示:
如下是对few-shot, one-shot, zero-shot学习的一个示例图:
few-shot学习通过给模型一些例子进行推测,但不更新模型的参数,few-shot学习最主要的优点是可以减少了对任务特定数据的需求,并降低了从大而狭窄的微调数据集中学习过于狭隘分布。
数据清洗(Common Crawl Filtering):
数据主要来自网上数据,所以需要对数据质量进行清洗,论文作者给出了几个方案:
生成一个自动过滤低质量文本器,训练一个能够判断文档是高质量还是低质量文本的分类器
(正样本是:WebText,Wikiedia,and our web books corpu,负样本: unfiltered Common Crawl)
特征使用Spark’s standard tokenizer and HashingTF。
基于帕累托分布采样如下:
其中a=9。
为了加强模型的鲁棒性避免模型过拟合,作者将文档与其它文档重合度高的进行删除,使用spark中的MinHashLSH进行判别,同时将WebText内容从CommonCrawl库中删除。
Training language models to follow instructions with human feedback
在openAI的官网里面,写了这一段内容:
We’ve trained a model called ChatGPT which interacts in a conversational way. The dialogue format makes it possible for ChatGPT to answer followup questions, admit its mistakes, challenge incorrect premises, and reject inappropriate requests. ChatGPT is a sibling model to InstructGPT, which is trained to follow an instruction in a prompt and provide a detailed response.
所以可以看出chatgpt(gpt-3.5)与InstructGPT是一对孪生姐妹模型,训练方式和模型结构完全一致,只是在采集训练数据的时候不一样。
相比上述的GPT-1,GPT-2, GPT-3,论文摘要里就指出无监督的大语言模型给出的结果存在不真实以及对用户无用的回答等,所以在InstructGPT用不同任务的有监督数据对GPT-3进行fine-tune,同时用用户的反馈基于强化学习对模型进一步fine-tune。论文指出经过fine-tune只有1.3B参数InstructGPT比175B参数的GPT-3效果好,虽然参数少了100倍多。作者给出的结论是:基于用户反馈对大模型进行fine-tune是一个很用潜力值得研究的方向。
如下图是各模型的对比结果:
其中GPT, GPT(prompted)都是基于GPT-3作为baseline,SFT (175B的GPT-3进行Supervised Fine-Tune)。PPO-ptx (InstructGPT),PPO (无pretrain)。
如下是论文给出的训练模型流程步骤说明:
论文也给出了试验中的一些发现和总结如下:
InstructGPT比GPT-3在答案的真实性上有提高
通过修改我们的RLHF(Reinforcement Learning with Human Feedback)微调,可以最小化在公共自然语言处理数据集上的性能退化
尽管instructions与在RLHF微调阶段的分布不一样,InstructGPT也表现出很强的范化能力,这表明模型能够根据"给的instruction"自己产生出一些概念。
InstructGPT也会犯一些小的错误
训练InstructGPT的流程如下:
Step 1:用人工标注的数据在预训练GPT-3上进行fine-tune。
Step 2:对多个模型输出的结果(选择模型个数K=4,K=9),用标注人员对其模型产出结果排序,然后训练一个奖励模型预测两两对比的效果,具体一点的奖励模型的损失函数如下:
l
o
s
s
(
θ
)
=
−
1
(
2
k
)
E
(
x
,
y
w
,
y
l
)
∼
D
[
l
o
g
(
σ
(
r
θ
(
x
,
y
w
)
−
r
θ
(
x
,
y
l
)
)
)
]
loss(\theta)=-\frac{1}{(^k_2)}E_{(x,y_w,y_l)} ∼D[log(\sigma(r_{\theta}(x,y_w)-r_{\theta}(x,y_l)))]
loss(θ)=−(2k)1E(x,yw,yl)∼D[log(σ(rθ(x,yw)−rθ(x,yl)))]
其中
r
θ
(
x
,
y
)
r_{\theta}(x,y)
rθ(x,y)是奖励模型对于prompt x以及基于
θ
\theta
θ参数的模型y,对于pair对
y
θ
y_{\theta}
yθ以及
y
w
y_w
yw,其中
y
w
y_w
yw是更高的排序输出。D是基于人对比出来的数据集。
Step 3:使用PPO (Proximal Policy Optimization) 算法优化策略。
从论文研究中,作者给出了一些工作结论如下:
通常对齐技术是将模型产出的结果更加符合人的偏好。在论文工作中,给出的对齐尝试如下:
总而言之,设置一个公平、透明,并且合适的问责机制的对齐过程是十分困难的。这篇论文的目标是展示这种对齐技术可以与特定人类参考群体在特定应用中保持一致。
GPT-4 Technical Report 升级GPT-4没有在训练数据集以及模型结构和大小上公开,但是作为一个多模态模型,可以接收文本和图片信息然后产出文本信息。从论文试验结果看出GPT-4在很多的测试任务中,都比GPT-3.5效果好,如下是一个试验数据对比:
在GPT-4中,作者给出了用GPT-4基础版与GPT-4经过强化学习后的性能在基准测试中的比较。基础模型的平均分数为73.7%,而经过强化学习后的模型的平均分数为74.0%,发现经过强化学习训练并未显著改变基础模型的能力 (在GPT-3.5中RLHF却效果显著啊),试验数据如下:
GPT-4显示出了很强的图片理解能力,如下例子所示:
也能够很好的解读pdf内容:
模型 | 发表年份 | 模型参数 | 训练数据 | 主要改进点 |
---|---|---|---|---|
GPT-1 | 2018 | 1.3B | 40GB | 引入了Transformer模型,并使用自回归生成的方式进行预训练 |
GPT-2 | 2019 | 1.5B | 40GB | 增加了模型规模,引入了更多的参数,提高训练文本的质量 |
GPT-3 | 2020 | 175B | 数十TB | 在规模上进一步提升,引入了更多的参数,并采用了更多的数据进行训练 |
GPT-3.5 | 2022 | 175B | 数十TB | 引入用户反馈的强化学习(RLHF)进行微调 |
GPT-4 | 2023 | 未公开 | 未公开 | 未公开 |
How ChatGPT actually works
How does Chat GPT work?
Proximal Policy Optimization (PPO)
Chatbots to ChatGPT in a Cybersecurity Space
Scaling Laws for Neural Language Models
Emergent Abilities of Large Language Models
Proximal Policy Optimization Algorithms
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。