大语言模型基础

news2025/1/3 1:14:25

大语言基础

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.coloradmin.cn/o/1905606.html

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

相关文章

Learn To Rank

在信息检索中,给定一个query,搜索引擎召回一系列相关的Documents,然后对这些Documents进行排序,最后将Top N的Documents输出。 排序问题最关注的是各Documents之间的相对顺序关系,而不是各个Documents的预测分最准确。…

如何优化 PostgreSQL 中对于自关联表的查询?

文章目录 一、理解自关联表查询二、分析性能问题的可能原因(一)缺少合适的索引(二)大量数据的笛卡尔积(三)复杂的查询逻辑 三、优化策略及解决方案(一)创建合适的索引(二…

Rejetto HFS 服务器存在严重漏洞受到攻击

AhnLab 报告称 ,黑客正在针对旧版本的 Rejetto HTTP 文件服务器 (HFS) 注入恶意软件和加密货币挖矿程序。 然而,由于存在错误, Rejetto 警告用户不要使用 2.3 至 2.4 版本。 2.3m 版本在个人、小型团队、教育机构和测试网络文件共享的开发…

7.pwn 工具安装和使用

关闭保护的方法 pie: -no-pie Canary:-fno-stack-protector aslr:查看:cat /proc/sys/kernel/randomize_va_space 2表示打开 关闭:echo 0>/proc/sys/kernel/randomize_va_space NX:-z execstack gdb使用以及插件安装 是GNU软件系统中的标准调试工具,此外GD…

2024/7/7周报

文章目录 摘要Abstract文献阅读题目问题本文贡献问题描述图神经网络Framework实验数据集实验结果 深度学习MAGNN模型相关代码GNN为什么要用GNN?GNN面临挑战 总结 摘要 本周阅读了一篇用于多变量时间序列预测的多尺度自适应图神经网络的文章,多变量时间序…

Windows密码凭证获取

Windows HASH HASH简介 hash ,一般翻译做散列,或音译为哈希,所谓哈希,就是使用一种加密函数进行计算后的结果。这个 加密函数对一个任意长度的字符串数据进行一次数学加密函数运算,然后返回一个固定长度的字符串。…

C# 异步编程Invoke、beginInvoke、endInvoke的用法和作用

C# 异步编程Invoke、beginInvoke、endInvoke的用法和作用 一、Invoke Invoke的本质只是一个方法,方法一定是要通过对象来调用的。 一般来说,Invoke其实用法只有两种情况: Control的Invoke Delegate的Invoke 也就是说,Invoke前…

动态规划|剑指 Offer II 093. 最长斐波那契数列

如果数组 arr 中存在三个下标 i、j、k 满足 arr[i]>arr[j]>arr[k] 且 arr[k]arr[j]arr[i],则 arr[k]、arr[j] 和 arr[i] 三个元素组成一个斐波那契式子序列。由于数组 arr 严格递增,因此 arr[i]>arr[j]>arr[k] 等价于 i>j>k。 把这道题…

7.7作业

搭建一个场景: 将学生的信息,以顺序表的方式存储(堆区),并且实现封装函数 : 1】顺序表的创建 2】判满 3】判空 4】往顺序表里增加学生 5】遍历 6】任意位置插入学生 7】任意位置删除学生 8】修改 9】查找&a…

刷题之删除有序数组中的重复项(leetcode)

删除有序数组中的重复项 这题简单题&#xff0c;双指针&#xff0c;一个指针记录未重复的数的个数&#xff0c;另一个记录遍历的位置。 以下是简单模拟&#xff0c;可以优化&#xff1a; class Solution { public:int removeDuplicates(vector<int>& nums) {int l0…

PyTorch中的多进程并行处理

PyTorch是一个流行的深度学习框架&#xff0c;一般情况下使用单个GPU进行计算时是十分方便的。但是当涉及到处理大规模数据和并行处理时&#xff0c;需要利用多个GPU。这时PyTorch就显得不那么方便&#xff0c;所以这篇文章我们将介绍如何利用torch.multiprocessing模块&#x…

含并行连结的网络

一、Inception块 1、白色部分通过降低通道数来控制模型复杂度&#xff0c;蓝色做特征提取工作&#xff0c;每条路上的通道数可能不同&#xff0c;大概我们会把更重要的那部分特征分配更多的通道数 2、Inception只改变高宽&#xff0c;不改变通道数 3、在不同的情况下需要选择…

渐开线花键测量学习笔记分享

大家好&#xff0c;继续渐开线花键的相关内容&#xff0c;本期是渐开线花键测量相关的学习笔记分享&#xff1a; 花键检测项目有花键大径和小径检验&#xff1b;内花键齿槽宽和外花键齿厚&#xff0c;以及渐开线终止圆 和起始圆直径检测&#xff1b;齿距累计误差 、齿形误差 、…

MySQL—统计函数和数学函数以及GROUP BY配合HAVING

合计/统计函数 count -- 演示 mysql 的统计函数的使用 -- 统计一个班级共有多少学生&#xff1f; SELECT COUNT(*) FROM student -- 统计数学成绩大于 90 的学生有多少个&#xff1f; SELECT COUNT(*) FROM student WHERE math > 90 -- 统计总分大于 250 的人数有多少&…

Centos新手问题——yum无法下载软件

起因&#xff1a; 最近在学习centos7&#xff0c;在VM上成功安装后&#xff0c;用Secure进行远程登陆。然后准备下载一个C编译器&#xff0c;看网络上的教程&#xff0c;都是用yum来下载&#xff0c;于是我也输入了命令&#xff1a; yum -y install gcc* 本以为会自动下载&a…

数据统计与数据分组18-25题(30 天 Pandas 挑战)

数据统计与数据分组 1. 知识点1.18 分箱与统计个数1.19 分组与求和统计1.20 分组获取最小值1.21 分组获取值个数1.22 分组与条件查询1.23 分组与条件查询及获取最大值1.24 分组及自定义函数1.25 分组lambda函数统计 2. 题目2.18 按分类统计薪水&#xff08;数据统计&#xff09…

《python程序语言设计》2018版第5章第52题利用turtle绘制sin函数

这道题是送分题。因为循环方式已经写到很清楚&#xff0c;大家照抄就可以了。 但是如果说光照抄可是会有问题。比如我们来演示一下。 import turtleturtle.penup() turtle.goto(-175, 50 * math.sin((-175 / 100 * 2 * math.pi))) turtle.pendown() for x in range(-175, 176…

5款屏幕监控软件精选|电脑屏幕监控软件分享

屏幕监控软件在现代工作环境中扮演着越来越重要的角色&#xff0c;无论是为了提高员工的工作效率&#xff0c;还是为了保障企业数据的安全&#xff0c;它们都成为了不可或缺的工具。 下面&#xff0c;让我们以一种新颖且易于理解的方式&#xff0c;来介绍五款备受好评的屏幕监…

前端JS特效第21集:HTML5响应式多种切换效果轮播大图切换js特效代码

HTML5响应式多种切换效果轮播大图切换js特效代码&#xff0c;先来看看效果&#xff1a; 部分核心的代码如下(全部代码在文章末尾)&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-t…

灵活视图变换器:为扩散模型设计的革新图像生成架构

在自然界中&#xff0c;图像的分辨率是无限的&#xff0c;而现有的图像生成模型在跨任意分辨率泛化方面存在困难。虽然扩散变换器&#xff08;DiT&#xff09;在特定分辨率范围内表现出色&#xff0c;但在处理不同分辨率的图像时却力不从心。为了克服这一限制&#xff0c;来自上…