大语言模型基础

大语言基础

GPT : Improving Language Understanding by Generative Pre-Training
提出背景

从原始文本中有效学习的能力对于减轻自然语言处理中对监督学习的依赖至关重要。很多深度学习方法需要大量人工标注的数据,限制了它们在很多领域的应用,收集更多的人工标注数据耗时且费钱。而且在有大量标注数据情况下,无监督学习到的好的向量表示能表现的更好。

但是从无标注的文本中利用信息有下面两个挑战

  1. 不清楚那种优化目标能最有效的向量表示,NLP中不同的任务(文本推理、文本问答、文本相似度评估等)用不同的目标,使得在仅在当前任务得到最优结果。
  2. 将学习到的文本表示迁移到目标任务上面的最有效的方法还没有共识,有的改模型结构,有的增加辅助目标。

GPT使用无监督的预训练(pre-training)和有监督的精调(fine-tuning)这种半监督的方式来解决这个问题,目标就是学习一个通用的向量表示,大量的下游任务仅需要做一点调整即可。

评估

四类语音理解任务:自然语言推断、问答、语义相似性、文档分类。

方案详情

两阶段,第一阶段在一个大的文本语料库上面学习一个大容量的语言模型,第二阶段针对下游具体任务精调。

第一阶段:Unsuperviserd pre-training
对于token语料库 U = { u 1 , u 2 , . . . , n n } \mathcal {U}=\{u_1,u_2, ..., n_n\} U={u1,u2,...,nn},用标准的语言建模目标最大化下面的似然函数
L 1 ( U ) = ∑ i log ⁡ P ( u i ∣ u i − k , . . . , u i − 1 ; Θ ) L_1(\mathcal{U} ) = \sum_i \log P(u_i|u_{i-k}, ..., u_{i-1};\Theta) L1(U)=ilogP(uiuik,...,ui1;Θ)
这里 k k k表示上下文窗口size大小,模型参数 Θ \Theta Θ,使用SGD训练。

U = ( u − k , . . . , u − 1 ) U=(u_{-k},...,u_{-1}) U=(uk,...,u1)表示上下文token向量, n n n表示decoder层数, W e W_e We表示token的Embedding矩阵, W p W_p Wp表示位置向量矩阵
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 ) h_l=\mathrm{transformer\_block}(h_{l-1}) hl=transformer_block(hl1)
P ( u ) = s o f t m a x ( h n W e T ) P(u)=\mathrm{softmax}(h_nW_e^T) P(u)=softmax(hnWeT)

GPT参数量计算,参考Attention机制

使用Transformer的decoder,因为没有encoder,这里去掉了decoder里面需要encoder输入的multi-head attention模块,保留了masked multi-head attention。层数6->12,embedding维度512->768,注意力头数head_num 8->12,FFN层的隐层维度1024->3072。

在这里插入图片描述

这里 N = 4 , d = 768 , V = 40000 N=4,d=768,V=40000 N=4d=768V=40000
GPT预训练模型大小为
12 ∗ ( ( 4 + 2 ∗ 4 ) ∗ 76 8 2 + ( 5 + 4 ) ∗ 768 ) + 40000 ∗ 768 = 115737600 = 115 M 12*((4+2*4)*768^2+(5+4)*768)+40000*768=115737600=115\mathrm M 12((4+24)7682+(5+4)768)+40000768=115737600=115M
GPT还有最后的一个线性输出层,参数量为 d ∗ V d*V dV,加上精调线性层的任务参数,总量为
12 ∗ ( ( 4 + 2 ∗ 4 ) ∗ 76 8 2 + ( 5 + 4 ) ∗ 768 ) + 40000 ∗ 768 + 768 ∗ 40000 + 768 ∗ 40000 = 146457600 = 146 M 12*((4+2*4)*768^2+(5+4)*768)+40000*768 + 768*40000 + 768*40000 =146457600=146\mathrm M 12((4+24)7682+(5+4)768)+40000768+76840000+76840000=146457600=146M

第二阶段:fine-tuning
精调阶段的线性层

P ( y ∣ x 1 , . . . , x m ) = s o f t m a x ( h l W y ) P(y|x^1,...,x^m)=\mathrm{softmax}(h_lW_y) P(yx1,...,xm)=softmax(hlWy)
精调阶段最大化下面的似然函数
L 2 ( C ) = ∑ ( x , y ) log ⁡ P ( y ∣ x 1 , . . . , x m ) L_2(C)=\sum_{(x,y)} \log P(y|x^1,...,x^m) L2(C)=(x,y)logP(yx1,...,xm)
最终的似然函数

L 3 = L 2 + L 1 L_3 = L_2 + L_1 L3=L2+L1

模型结构
在这里插入图片描述
所有任务,都需要插入开始和结束符;
对于文本推断任务,把前提和假设用分隔占位符concat起来;
对于语义相似评估任务,因为没有顺序,所以讲text1和text2连接起来作为一个输入,同时将text2和text1连接起来作为输出,经过各个的Transformer后concat起来;
多项选择任务,把context和各个候选答案分别concat起来作为输入;

实验

数据集:BookCorpus,超过7000本书,
在这里插入图片描述

预训练参数配置
在这里插入图片描述
精调参数配置
在这里插入图片描述

在文本推断任务的表现
在这里插入图片描述
在问答任务的表现
在这里插入图片描述
在文本分类任务的表现
在这里插入图片描述
Transformer层数的影响(下面左图),层数越大效果越好;比较Zero-shot的表现,和LSTM比较,Transformer随更新步数增长效果更好,LSTM就差很多,预训练的模型容量比较重要。
在这里插入图片描述
消融分析
精调阶段使用/不使用辅助的LM目标(aux LM);去掉预训练;相同层数的LSTM(单层2048个unit);
在这里插入图片描述

BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
提出背景

GPT是从左到右单向的语言模型,ELMo也是单向的(单向的从左到右和单向的从右到左,然后concat到一起),单向的语言模型会限制它在下游的表现。
BERT提出双向的Transformer模型

方案详情

示意图如下
在这里插入图片描述
BERT的输入包括三部分,Token Embedding、Segment Embedding(句子pair中的句子A还是句子B)、Position Embedding
在这里插入图片描述

和其他结构比较
在这里插入图片描述
BERT是双向的Self-Attention,既可以看到前面的token,也可以看到后面的token,BERT的目标与GPT不一样了,GPT是根据前面的词预测后面的词,BERT是根据前后的词预测当前位置的词,类似于完形填空。

为此BERT引入了掩码语言任务(Masked LM),随机mask一个token,然后根据这个token之前及之后的token来预测这个token;mask的token用[MASK]占位符替代,在每个sequence里面随机mask15%的比例的token。但是[MASK]这个token并不在fine-tuning阶段出现,为了缓解预训练和精调之间这种不一致,预训练在mask的时候并不总是用[MASK]这个token代替,80%的概率用[MASK]代替,10%的概率随机选择一个token代替,10%的概率就用原来的token不做替换。
这里mask策略也是调参调出来的
在这里插入图片描述

示意图如下:
在这里插入图片描述
这里最上面是 MLM 的多分类任务,多出的这个线性层矩阵 W ∈ R d i m ∗ V W \in R^{dim*V} WRdimV是和输入的词汇表 embedding 矩阵共享的,就是多了一个偏置 b ∈ R 1 ∗ V b \in R^{1* V} bR1V,也就是此处多了 V V V个模型参数。

很多NLP的任务像问答、推断都是理解两个句子的关系,语言模型不容易直接识别到时哪种任务,为了使模型理解两个句子之间的关系,引入了下一个句子预测任务(Next Sentence Prediction , NSP),构造样本的时候,句子A后面50%的概率是后面接着的句子B(label标记为IsNext),50%的概率从语料库从语料库随机选(label标记为NotNext)
最上面是个二分类任务,有一个线性矩阵 W ∈ R d i m ∗ 2 W \in R^{dim*2} WRdim2 来表示。

fine-tuning细节和GPT一致

实验

实验配置, B E R T B A S E \mathrm {BERT_{BASE}} BERTBASE 为了和GPT对比,和GPT的参数配置几乎完全一样。
B E R T B A S E \mathrm {BERT_{BASE}} BERTBASE L=12,H=768,A=12
B E R T L A R G E \mathrm {BERT_{LARGE}} BERTLARGE L=24,H=1024,A=16

token数量(V)和GPT不一样,其他一致, N = 4 , d = 768 , V = 32000 N=4,d=768,V=32000 N=4d=768V=32000,不算后面fine-tuning阶段线性层的参数
B E R T B A S E \mathrm {BERT_{BASE}} BERTBASE预训练模型大小为(加上每个位置的 embedding 512768、NSP 二分类任务参数 7682、MLM 多分类任务参数 32000(分类任务权重矩阵和词表 embedding 矩阵共享,但是有独立的偏置,参数量32000))
12 ∗ ( ( 4 + 2 ∗ 4 ) ∗ 76 8 2 + ( 5 + 4 ) ∗ 768 ) + 32000 ∗ 768 + 512 ∗ 768 + 768 ∗ 2 + 32000 = 110020352 = 110 M 12*((4+2*4)*768^2+(5+4)*768)+32000*768 + 512*768+768*2 + 32000=110020352=110\mathrm M 12((4+24)7682+(5+4)768)+32000768+512768+7682+32000=110020352=110M
B E R T L A R G E \mathrm {BERT_{LARGE}} BERTLARGE预训练模型大小为
24 ∗ ( ( 4 + 2 ∗ 4 ) ∗ 102 4 2 + ( 5 + 4 ) ∗ 1024 ) + 32000 ∗ 1024 + 512 ∗ 1024 + 1024 ∗ 2 + 32000 = 335537408 = 335 M 24*((4+2*4)*1024^2+(5+4)*1024)+32000*1024 + 512*1024 + 1024*2 + 32000=335537408=335\mathrm M 24((4+24)10242+(5+4)1024)+320001024+5121024+10242+32000=335537408=335M
实验效果
在这里插入图片描述

RoBERTa: A Robustly Optimized BERT Pretraining Approach

BERT的升级优化版本

提出背景

BERT训练不充分,还有很大的空间
提升措施:

  1. 让模型训练的更久、使用更大的batch size,使用更多的数据
  2. 去除下一个句子预测任务NSP
  3. 在更长的sequence序列上面训练
  4. 在训练数据中动态改变mask方式
方案详情

增加语料库

  1. BOOKCORPUS加上英语WIKIPEDIA,这是BERT用的语料库(16GB)
  2. CC-NEWS,这是RoBERTa从CommonCrawl新闻数据集手机的,包含6300万英语新闻文章(2016年至2019年)(76GB)
  3. OPENWEBTEXT开源的WebText语料库,从Reddit上面根据URL抽取的web内容(38GB)
  4. STORIES包含了过滤的CommonCraw数据子集(31GB)

下游任务评估基准
GLUE:The General Language Understanding Evaluation,包含9个数据集来评估自然语言理解。
SQuAD:The Stanford Question Answering Dataset 提供一个上下文的段落及以问题,任务是通过抽取上下文回答问题。
RACE:The ReAding Comprehension from Examinations 大规模的阅读理解数据集,包含28000篇文章和100000个问题,来自中国的中学英文考试题目。

改进BERT
配置和 B E R T B A S E \mathrm {BERT_{BASE}} BERTBASE一样 (L=12, H=768, A=12, 110M参数量)
BERT模型在数据预处理的时候就mask好了,称为静态mask(static masking)数据复制了10份,在40个epoch里面,每份训练数据会相同mask4次。这里采用动态mask(dynamic masking)训练数据每次都是动态mask,保证训练时不会有重复的mask数据。动态masking效果更好,后面的评测均用动态masking。
在这里插入图片描述
原始BERT里面有个NSP任务,预测下一个句子的任务,去掉NSP会影响效果,但是有很多质疑的研究,起作用的主要是MLM,并不是NSP,为此做了一些消融实验来验证。

SEGMENT-PAIR+NSP:原始的BERT的方式,每个输入是一个Segment pair对,每个Segment可以包含多个自然句子,多个句子的总长度不超过512个tokens。
SENTENCE-PAIR+NSP:每个输入是一个自然句子pair对,因为这些句子显著低于512个tokens,因此增大batch size使得batch内总的token数量与SEGMENT-PAIR+NSP相似,也有NSP loss。
FULL-SENTENCES:每个输入是从一个或者多个文档中连续采样得来的,每个输入最多512个tokens,输入可能跨文档,如果跨文档,增加一个额外的分割token在里面,同时去除NSP loss。
DOC-SENTENCES:构造方式和FULL-SENTENCES类似,就是句子不跨文档。那么采样文档末尾的句子的时候,token长度可能小于512个,那就动态增加batch size,使得batch内的token和FULL-SENTENCES相似。

结果如下:
SEGMENT-PAIR+NSP vs SENTENCE-PAIR+NSP 说明使用单个句子模型没法学习到长距离依赖关系。
FULL-SENTENCES vs SEGMENT-PAIR+NSP:说明去除NSP loss会提升下游任务表现
FULL-SENTENCES vs DOC-SENTENCES:限制sequence来自同一个文档有轻微提升,但是batch size是动态的,为了对比方便,后面都使用FULL-SENTENCES这一组。
在这里插入图片描述
更大的batch size
更大的batch size带来更好的效果
在这里插入图片描述
文本编码方式
Byte-Pair Encoding(BPE)是字符级和单词级表示的混合,该编码方案可以处理自然语言语料库中常见的大量词汇。BPE不依赖于完整的单词,而是依赖于子词(sub-word)单元,这些子词单元是通过对训练语料库进行统计分析而提取的,其词表大小通常在 1万到 10万之间。
原始的BERT使用的是字符级的编码,词汇量30K,RoBERTa使用BPE编码,词汇量50K,相对 B E R T B A S E \mathrm {BERT_{BASE}} BERTBASE B E R T L A R G E \mathrm {BERT_{LARGE}} BERTLARGE会多出15M到20M的参数量。

实验效果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/42334.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cs231n作业2 双层神经网络

双层神经网络 我们选用ReLU函数和softmax函数: 步骤: 1、LOSS损失函数(前向传播)与梯度(后向传播)计算 Forward: 计算score,再根据score计算loss Backward:分别对W2、b2、W1、b1求…

multisim中关于74ls192n和DSWPK开关仿真图分析(减法计数器)

🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&…

直播预告 | VMware大规模迁移实战,HyperMotion助力业务高效迁移

2006年核高基专项启动,2022年国家79号文件要求2027年央国企100%完成信创改造……国家一系列信创改造政策的推动,让服务器虚拟化软件巨头VMware在中国的市场份额迅速缩水。 加之VMware永久授权的取消和部分软件组件销售策略的变更,导致VMware…

什么时候考虑将mysql数据迁移到ES?

文章目录 对ES的一些疑问问题1:ES相比mysql本身有哪些优势?问题2:哪些场景适合用ES而不是mysql?问题3:mysql逐行扫描,根据过滤条件检查记录中对应字段是否满足要求属于正排索引,根据二叉树索引检索记录的方式属于正排索引还是倒排…

SpringBoot整合DataX数据同步(自动生成job文件)

SpringBoot整合Datax数据同步 文章目录 SpringBoot整合Datax数据同步1.简介设计理念 DataX3.0框架设计DataX3.0核心架构核心模块介绍DataX调度流程 2.DataX3.0插件体系3.数据同步1.编写job的json文件2.进入bin目录下,执行文件 4.SpringBoot整合DataX生成Job文件并执…

生产力工具|VS Code安装及使用指南

一、VS Code介绍 (一)软件介绍 Visual Studio Code(简称VS Code)是由Microsoft开发的免费开源代码编辑器,适用于Windows、macOS和Linux操作系统。它支持多种编程语言,如JavaScript、Python、C等&#xff0…

知识社区在线提问小程序模板源码

蓝色的知识问答,问答交流,知识社区,在线提问手机app小程序网页模板。包含:社区主页、提问、我的、绑定手机,实名认证等。 知识社区在线提问小程序模板源码

品质至上!中国星坤连接器的发展之道!

在电子连接技术领域,中国星坤以其卓越的创新能力和对品质的不懈追求,赢得了业界的广泛认可。凭借在高精度连接器设计和制造上的领先地位,星坤不仅获得了多项实用新型专利,更通过一系列国际质量管理体系认证,彰显了其产…

【Qt5.12.9】程序无法显示照片问题(已解决)

问题记录:Qt5.12.9下无法显示照片 我的工程名为03_qpainter,照片cd.png存放在工程目录下的image文件夹中。 /03_qpainter/image/cd.png 因为这是正点原子Linux下Qt书籍中的例程,在通过学习其配套的例程中的项目,发现我的项目少…

【Python】搭建属于自己 AI 机器人

目录 前言 1 准备工作 1.1 环境搭建 1.2 获取 API KEY 2 写代码 2.1 引用库 2.2 创建用户 2.3 创建对话 2.4 输出内容 2.5 调试 2.6 全部代码 2.7 简短的总结 3 优化代码 3.1 规范代码 3.1.1 引用库 3.1.2 创建提示词 3.1.3 创建模型 3.1.4 规范输出&#xf…

西门子1200高速计数器编码器的应用 接线 组态 编程 调试 测距测速

编码器的应用、接线、组态、博途1200编程与调试:高速计数器,用于给PLC发高速脉冲,接I点 用来例如:检测电机转速,皮带输送机运行的距离 (粗略定位) 360:代表转一圈会对外发360个脉冲&…

系统化学习 H264视频编码(02) I帧 P帧 B帧 引入及相关概念解读

说明:我们参考黄金圈学习法(什么是黄金圈法则?->模型 黄金圈法则,本文使用:why-what)来学习音H264视频编码。本系列文章侧重于理解视频编码的知识体系和实践方法,理论方面会更多地讲清楚 音视频中概念的…

Vue3+.NET6前后端分离式管理后台实战(二十八)

1,Vue3.NET6前后端分离式管理后台实战(二十八)

【Linux进阶】文件系统6——理解文件操作

目录 1.文件的读取 1.1.目录 1.2.文件 1.3.目录树读取 1.4.文件系统大小与磁盘读取性能 2.增添文件 2.1.数据的不一致(Inconsistent)状态 2.2.日志式文件系统(Journaling filesystem) 3.Linux文件系统的运行 4、文件的删…

干货 | 2024大模型场景下智算平台的设计与优化实践(免费下载)

诚挚邀请您微信扫描以下二维码加入方案驿站知识星球,获取上万份PPT/WORD解决方案!!!感谢支持!!!

【C++】string的底层原理及实现

文章目录 string类的存储结构默认成员函数构造函数析构函数拷贝构造函数赋值重载 容量操作size()capacity()reserve()resize()clear() 遍历与访问operator[ ]迭代器范围与for 增删查改push_back()pop_back()append()operatorinsert()erase()c_str()find()substr() 非成员函数op…

力扣考研经典题 反转链表

核心思想 头插法: 不断的将cur指针所指向的节点放到头节点之前,然后头节点指向cur节点,因为最后返回的是head.next 。 解题思路 1.如果头节点是空的,或者是只有一个节点,只需要返回head节点即可。 if (head null …

Echarts中的热力图和漏斗图(在Vue中使用热力图和漏斗图)

热力图 (Heatmap) Echarts的热力图用于展示两个维度数据矩阵中的值分布情况。它通过在平面上划分成多个矩形区域,并用不同的颜色填充这些区域来表示数据的大小或强度。颜色渐变从浅到深通常映射着数值从小到大,从而直观展示数据的集中程度和分布模式。热…

半同步主从复制

半同步主从复制的概念 半同步主从复制(Semisynchronous Replication, SBR)是MySQL数据库中的一种数据复制方式,它在异步复制的基础上增加了一定程度的同步性,旨在提高数据安全性,减少数据丢失的风险。 半同步主从复制…

阶段三:项目开发---大数据开发运行环境搭建:任务8:安装配置Redis

任务描述 知识点:安装配置Redis 重 点: 安装配置Redis 难 点:无 内 容: Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可…