当前位置: 首页 > news >正文

大语言模型-GPT-Generative Pre-Training

一、背景信息:

GPT是2018 年 6 月由OpenAI 提出的预训练语言模型。
GPT可以应用于复杂的NLP任务中,例如文章生成,代码生成,机器翻译,问答对话等。
GPT也采用两阶段的训练过程,第一阶段是无监督的方式来预训练生成式的语言模型,第二阶段根据特定任务进行微调。
GPT的网络架构使用的是多层Transformer Decoder改的结构。

二、整体结构:

GPT 使用Transformer的 Decoder 结构,并进行了一些改动,GPT 中的Decoder只保留了原Decoder中的第一个Attention模块Mask Multi-Head Attention。

GPT堆叠了12个Transformer的Decoder模块作为解码器,然后通过全连接得到输出的概率分布。
GPT中采用的是单向的语言模型,即通过上文预测当前的词,而Decoder中的Masked Multi Self-Attention可以起到遮掩待预测的下文内容的效果。

GPT 处理不同任务时的输入变换

GPT模型由输入嵌入层多层Transformer Decoder以及输出层这三个部分组成。
其中
1、输入嵌入层: 将输入的文本序列转换为词向量、位置向量并将二者相加得到输入向量。
2、多层Transformer Decode: 其中每一层由以残差和的方式做LayerNorm的掩码多头自注意力机层与以残差和的方式做LayerNorm的双层前馈神经网络组成。
X o u t p u t = X o u p u t − o r i ⊗ X M a s k X = L a y d e r N o r m ( X o u t p u t + M a s k M u l t i H e a d A t t e n t i o n ( X o u p u t ) ) X = F e e d F o r w o r d ( X ) = m a x ( 0 , X W 1 + b 1 ) W 2 + b 2 \begin{matrix} \\X_{output}=X_{ouput-ori }\otimes X_{Mask} \\X = LayderNorm(X_{output} + MaskMultiHeadAttention(X_{ouput})) \\X = FeedForword(X) = max(0, XW_{1} + b_{1})W_{2} + b_{2}\begin{matrix}\end{matrix} \end{matrix} Xoutput=XouputoriXMaskX=LayderNorm(Xoutput+MaskMultiHeadAttention(Xouput))X=FeedForword(X)=max(0,XW1+b1)W2+b2
3、输出层: GPT模型的输出层通常为一个全连接层,将多层解码器的输出转换为对应的单词概率分布。

  • 分类任务(Classification):将起始和终止token加入到原始序列两端,输入transformer中得到特征向量,最后经过一个全连接得到预测的概率分布。
  • 自然语言推理(Entailment):将前提(premise)和假设(hypothesis)通过分隔符(Delimiter)隔开,两端加上起始和终止token。再依次通过Transformer多层Decoder和全连接得到预测结果。
  • 语义相似度(Similarity):输入的两个句子,正向和反向各拼接一次,然后分别输入给Transformer多层Decoder,得到的特征向量拼接后再送给全连接得到预测结果;
  • 多项选择(MutipleChoice):将n个选项的问题抽象化为n个二分类问题,即每个选项分别和内容进行拼接,然后各送入Transformer多层Decode和全连接中,最后选择置信度最高的作为预测结果。
    在这里插入图片描述

三、GPT训练

GPT的训练包含无监督预训练有监督fine-tune两个阶段。

GPT的无监督预训练:

假设未标注的词汇集合为 U = { u 1 , u 2 , . . . u n } U = \left \{ {{u_{1},u_{2},...u_{n}}}\right \} U={u1,u2,...un},GPT模型的优化目标是对参数进行最大似然估计:
L 1 ( U ) = ∑ i l o g P ( u i ∣ u 1 , . . . , u k − 1 ; Θ ) L_{1}(U) = \sum_{i}^{} log P(u_{i}|u_{1},...,u_{k-1};\Theta ) L1(U)=ilogP(uiu1,...,uk1;Θ)
其中,k是滑动窗口的大小, P 为条件概率, Θ \Theta Θ为条件概率的参数, 参数更新采用随机梯度下降(SGD)方法。
下面是整个过程的公式示例:
{ h 0 = U W e + W p h l = T r a n s f o r m e r D e c o d e r B l o c k ( h l − q ) P ( u ) = s o f t m a x ( h n W e T ) \left\{\begin{matrix}h_{0} = UW_{e} + W{p} \\h_{l} = TransformerDecoderBlock(h_{l-q}) \\P(u) = softmax(h_{n}W_{e}^{T} ) \end{matrix}\right. h0=UWe+Wphl=TransformerDecoderBlock(hlq)P(u)=softmax(hnWeT)

  1. 输入嵌入层: W e W_{e} We是token的词向量Embedding矩阵, W p W_{p} Wp是位置编码的Embedding矩阵,二者求和得到输入向量矩阵 h 0 h_{0} h0
  2. 多层Transformer Decode:TransformerDecoderBlock指多层Decoder模块
  3. 输出层:通过Softmax函数将输出的词向量转换为对应的单词概率分布

GPT的有监督fine-tune:

预训练后,需要针对特定任务进行有监督Fine-Tuning。
这里以一个文本分类任务举例,展示GPT在某一任务有监督微调的过程。
假设带标注的数据集C中的输入序列X为 [ x 1 , . . . , x m ] [x^{1},..., x^{m}] [x1,...,xm];模型的输出y是一个分类标签; h l m h_{l}^{m} hlm代表Decoder层最后的输出; W y W_{y} Wy代表输出层的Softmax参数。 L 2 ( C ) L_{2}(C) L2(C)是分类任务的最大似然函数, L 3 ( C ) L_{3}(C) L3(C)是整体的最大似然函数;GPT 在微调的时候需要同时考虑预训练的损失函数,因此微调的训练目标是最大化似然函数 L 3 ( C ) L_{3}(C) L3(C).
{ P ( y ∣ x 1 , . . . , x m ) = s o f t m a x ( h l m W y ) L 2 ( C ) = ∑ x , y l o g P ( y ∣ x 1 , . . . , x m ) L 3 ( C ) = L 2 ( C ) + λ × L 1 ( C ) \left\{\begin{matrix}P(y|x^{1},..., x^{m}) = softmax(h_{l}^{m}W_{y}) \\L_{2}(C) = \sum_{x,y}^{} log P(y|x^{1},..., x^{m}) \\L_{3}(C) = L_{2}(C) + \lambda \times L_{1}(C) \end{matrix}\right. P(yx1,...,xm)=softmax(hlmWy)L2(C)=x,ylogP(yx1,...,xm)L3(C)=L2(C)+λ×L1(C)

Reference

1.Attention Is All You Need
2.BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
3.Improving Language Understanding by Generative Pre-Training

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 通过 EMR Serverless Spark 提交 PySpark 流任务
  • 基于FPGA的以太网设计(3)----详解各类xMII接口
  • vite环境下使用bootstrap
  • 软件测试---测试需求分析
  • 通过libx246 libfaac转换推送RTMP音视频直播流
  • 【BUG】已解决:ValueError: All arrays must be of the same length
  • Flutter - 安卓一次打包不同包名的apk
  • springMVC是如何做url映射到controller的?
  • HTML(六)——HTML表单和框架
  • 数据结构从入门到精通二 ~ 数组和链表
  • 一线大厂java面试题
  • go语言Gin框架的学习路线(九)
  • 构造+位运算,CF 1901C - Add, Divide and Floor
  • mac M1安装换脸Roop教程及所遇到的问题
  • 微信小程序:多图片显示及图片点击放大,多视频显示
  • @jsonView过滤属性
  • [LeetCode] Wiggle Sort
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • Idea+maven+scala构建包并在spark on yarn 运行
  • javascript面向对象之创建对象
  • JavaScript设计模式系列一:工厂模式
  • js 实现textarea输入字数提示
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • js作用域和this的理解
  • laravel5.5 视图共享数据
  • Making An Indicator With Pure CSS
  • React-生命周期杂记
  • Spring Cloud中负载均衡器概览
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • Vue ES6 Jade Scss Webpack Gulp
  • Yii源码解读-服务定位器(Service Locator)
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 配置 PM2 实现代码自动发布
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​2021半年盘点,不想你错过的重磅新书
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ​渐进式Web应用PWA的未来
  • #Datawhale AI夏令营第4期#多模态大模型复盘
  • #微信小程序(布局、渲染层基础知识)
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • $(function(){})与(function($){....})(jQuery)的区别
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (02)Hive SQL编译成MapReduce任务的过程
  • (20)docke容器
  • (c语言)strcpy函数用法
  • (ZT)薛涌:谈贫说富
  • (蓝桥杯每日一题)love
  • (三)c52学习之旅-点亮LED灯
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (转)nsfocus-绿盟科技笔试题目
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • .NET HttpWebRequest、WebClient、HttpClient
  • .NET 表达式计算:Expression Evaluator