transformer bert GPT(未完)

原文标题:⼤规模⽆监督预训练语⾔模型与应⽤(中)

文章目录

  • 1 transformer
    • 1.1 encoder部分
      • 1.1.1 Attention定义
      • 1.1.2 Multi-head Attention
      • 1.1.3 position-wise feed-forward networks
      • 1.1.4 positional encoding
      • 1.1.5 残差链接
      • 1.1.6 layer norm
    • 1.2 decoder部分
    • 1.3 transformer block
  • 2 bert
    • 2.1 Masked Language Model
    • 2.2 框架
    • 2.2 Bert升级版本
      • 2.2.1 RoBERTa:更强⼤的BERT
      • 2.2.2 ALBERT:参数更少的BERT
      • 2.2.3 DistilBERT:轻量版BERT
      • 2.2.4 Patient Distillation
      • 2.2.5 ELECTRA
  • 3 OpenAI GPT

1 transformer

论文Attention Is All You Need,这是一篇刷爆朋友圈的论文。因为它的效果基于现有效果有了较大幅度的提升。
transformer与之前一些结构的不同在于:

  • 双向LSTM:一个模型想要包含当前位置的信息,前一个位置的信息,后一个位置的信息
  • CNN:一个位置包含的信息取决于kernel size大小
  • transformer:可以得到全局信息

在这里插入图片描述

这个结构是由encoder和decoder组成。

1.1 encoder部分

encoder部分是有6个重复的结构组成。每一个重复结构一样,但是参数不同,每一层结果是512维的。后面有人改进:每一层结构一样,参数相同。
每一个重复 = 层正则化(残差(multi head attention)) + 层正则化(残差(前向神经网络))

1.1.1 Attention定义

Attention是利用一组(q,k)对,计算得到加权值,对一组value进行加权平均。称为scaled dot-product attention。
Attention(Q,K,V)=softmax(QKTdk)VAttention(Q, K, V ) = softmax(\dfrac{QK^T}{\sqrt[]d_k})VAttention(Q,K,V)=softmax(dkQKT)V

dkd_kdk是key向量的维度。
为什么除以dk\sqrt[]{d_k}dk?是为了保证计算的值方差不会很大。
为什么不除以dk,而是除以dk\sqrt[]{d_k}dkdk\sqrt[]{d_k}dk消耗资源还多?dot(a,b)的标准差 = dk\sqrt[]{d_k}dk

1.1.2 Multi-head Attention

在这里插入图片描述

不是对输入做一个Attention,而是需要做多个Attention。
假如每个单词512维度,这里有h个scaled dot-product attention。每一套可以并行计算。 Q K V 做了不同的affine变换,投射到不同的空间,得到不同的维度,也就是WX+b变换。(这里的描述与之前的文章不同,应该这里的描述是正确的,因为论文里面是这样写的)
之后过一个scaled dot-product attention。
h个结果concat
然后再做Linear
论文中h=8,dk=dv=dmodel/h=64d_k=d_v=d_{model/h}=64dk=dv=dmodel/h=64
做Attention,Q K V 形状是不会发生变化的,每个的形状还是 seq_length,x,hidden_size

1.1.3 position-wise feed-forward networks

FFN(x) = max(0, xW1 + b1 )W2 + b2
之所以成为position-wise,是因为每个位置都做了一个这样的变换

1.1.4 positional encoding

每个位置都定义了一个encoding。 在transformer中一直在做加权平均,没有前后顺序,这就会成为bag of words。

在这里有些位置用sin,有些位置用cos,表示位置信息。每个位置的encoding是什么样子并不重要。重要的是每个位置的encoding不一样

位置信息encoding之后 与 词向量相加,也就是 embed(word) + embed(position),整体作为输入送入到encoder。
在这里插入图片描述

在这里插入图片描述

按照偶数位sin,奇数位cos的方式,得到的结果确实是i,j越接近,pm.pnp_m.p_npm.pn越大。相对位置越远,点乘的结果越⼩。
在这里插入图片描述

1.1.5 残差链接

残差链接是这样的。
将输入x加到multi-head或者feed network的输出h上。这样可以加快训练。
这一步得到的结果记为h1′,h2′,h3′,h4′h_1',h_2',h_3',h_4'h1,h2,h3,h4

1.1.6 layer norm

层正则化,是对残差链接的结果做正则化。

h1′,h2′,h3′,h4′h_1',h_2',h_3',h_4'h1,h2,h3,h4这4个向量分别计算每个向量的均值μ\muμ和方差σ\sigmaσ
在这里插入图片描述
γ\gammaγβ\betaβ是共享的参数,在模型中需要训练。
γ\gammaγβ\betaβ可以在一定程度上抵消掉正则的操作。为什么正则了又要抵消呢?
这样做可以让每一个时间步的值更平均一些,差异不会特别大。
这一步的输出是h1′′,h2′′,h3′′,h4′′h_1'',h_2'',h_3'',h_4''h1,h2,h3,h4

1.2 decoder部分

解码器和编码器差不多。
解码器有一个master multi head attention。就是说在解码的时候,每一个时间步只能看到它前面的状态。例如在计算x2x_2x2的参数时候,x2x_2x2作为query,能作为key和value的只有x1x_1x1

还有一点不同是
在这里插入图片描述

这里是以解码器的输出作为key和value,这一时间步的输出作为query计算attention。

1.3 transformer block

在这里插入图片描述

在bert与GPT模型中,有些时候会把layer norm放在self attention前面,称为pre-norm,这样效果更好。

2 bert

BERT:Masked Language Modeling预训练模型
论⽂地址:https://arxiv.org/pdf/1810.04805.pdf
中⽂翻译:https://zhuanlan.zhihu.com/p/59775981
参考地址

2.1 Masked Language Model

Masked Language Model实际在做一个完形填空。将一句话中的部分单词随机mask。然后预测这些位置的单词应该是什么。

人们总想预训练出一些模型,用来提升自然语言处理的其他任务的性能。这些模型一般有2种策略。一种是feature based,例如ELMo。一种是fine-tuning,例如transformer。bert使用的是fine-tuning。

bert分为pre-training和fine-tuning两部分。
预训练是在未标注的数据集上训练的。
在fine-tuning阶段,bert会使用预训练阶段的数据初始化参数,在下游nlp任务的标注数据集上训练参数。

2.2 框架

在这里插入图片描述

在这里插入图片描述

bert 是一个multi-layer bidirectional Transformer encoder。
bert 的base框架 中L=12,H=768,A=12:有L=12层,hidden_size=768,自注意力机制的头有12个。
bert使用的架构和transformer是一样的。上图中每一个Trm是就是一个Transformer的encoder。

bert使用wordpiece embedding,词库量是3万。
每个句子的第一个token是CLS。我们可以使用CLS的向量表示一句话。
对于输入是句子对形式的打包成一个句子,句子之间好用SEP隔开。:[CLS] I study at [MASK] . [SEP] I love [MASK] language processing . [SEP]

E表示input embedding
C表示CLS的hidden state
TiT_iTi表示第i个token的hidden state

输入表示:
BERT的输入的编码向量(长度是512)是3个嵌入特征的单位和,这三个词嵌入特征是:

WordPiece 嵌入:WordPiece是指将单词划分成一组有限的公共子词单元,能在单词的有效性和字符的灵活性之间取得一个折中的平衡。例如图4的示例中‘playing’被拆分成了‘play’和‘ing’;
位置嵌入(Position Embedding):位置嵌入是指将单词的位置信息编码成特征向量,位置嵌入是向模型中引入单词位置关系的至关重要的一环。位置嵌入的具体内容参考我之前的分析;
分割嵌入(Segment Embedding):用于区分两个句子,例如B是否是A的下文(对话场景,问答场景等)。对于句子对,第一个句子的特征值是0,第二个句子的特征值是1。
在这里插入图片描述

Bert的预训练任务是由2个任务组成的:Masked LM 和Next Sentence Prediction。

任务Masked LM:随机的mask掉一些单词,然后预测这些单词。在实验中,每个句子隐藏了15%的词(词库总量是3万。这里的词并不是一个单词,而可能是单词的一部分,因为bert使用的是wordpiece)。在预测的时候预测被隐藏的这部分内容。
因为下游任务中并不会有[MASK]标签。所以在被隐藏的位置中,有80%是[MASK],有10%是一个随机的token,有10%是token原来自己,不会变。
I study at July.如果July是被选择要隐藏的部分。那么有80%的情况,句子会被变成: I study at [MASK]。有10%的机会,会变成: I study at pear. 有10%的机会保持原样: I study at July.
然后TiT_iTi使用交叉熵损失来预测原始的token。

任务下一句话预测:许多重要的下游任务如问答自然语言推断都基于对两句话关系的理解,但这并不能直接由语言模型学到。为了能训练一个可以理解句子关系的模型,我们训练了一个二分类的下一句话预测任务,数据很容易获取。值得注意的是,当选择句子A和B作为预训练样本时,50%的时候B时真的A的下一句,50%的时候是一个随机的句子(即负样本)。

代码实现 google-research/bert
老师讲的代码 huggingface/transformers modeling_bert

bert wordpiece
elmo:字符
transformer:单词
bert:wordpiece

两篇论文 两篇代码看一下,代码重点是 bertselfAttention部分

如何同时做两个任务: total_loss = masked_ml_loss + next_sentecne_loss

为什么bert的特征提取器比bi-lstm好?
bert:训练一般1天,一般12层-24层
bi-lstm:训练量大,耗时时一般一个月
只能说因为训练量大小不同,在相同数据集,训练相同之间内bert效果要好。如果给予bi-lstm足够的时间,应该能拿到一样,或者更好的效果。

2.2 Bert升级版本

中文bert https://github.com/ymcui/Chinese-BERT-wwm

2.2.1 RoBERTa:更强⼤的BERT

论⽂地址:https://arxiv.org/pdf/1907.11692.pdf
特点是:

  • 加⼤训练数据 16GB -> 160GB,更⼤的batch size,训练时间加⻓
  • 不需要NSP Loss: natural inference
  • 使⽤更⻓的训练 Sequence
  • 模型训练成本在6万美⾦以上(估算)

2.2.2 ALBERT:参数更少的BERT

论⽂地址:https://arxiv.org/pdf/1909.11942.pdf
⼀个轻量级的BERT模型
核⼼思想:

  • 共享层与层之间的参数 (减少模型参数)
  • 增加单层向量维度
  • 实际训练时间更长

2.2.3 DistilBERT:轻量版BERT

一个tearcher框架,一个student框架。训练student框架的时候从teacher框架学东西。

2.2.4 Patient Distillation

论文
在这里插入图片描述
bert是12层的,训练一个6层的模型。
引入Patinet loss。在训练中还需要考虑每一层的输出尽量接近。因为新模型的层数少,比较的时候可以是隔一层比较一次,也可以是比较最后6层。

2.2.5 ELECTRA

3 OpenAI GPT

GPT
Radford et. al., Improving Language Understanding by Generative Pre-Training
这篇⽂章推出了generative pre-training + discriminative fine-tuning的⽅法,后来也被BERT沿⽤。task-aware input transformation也是BERT借⽤的⼀个点。

代码解读
https://github.com/ZeweiChu/gpt-2/blob/master/src/model.py
huggingface代码
https://github.com/huggingface/transformers/blob/master/src/transformers/modeling_gpt2.py

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

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

相关文章

spring mvc学习(42):restful的编辑功能实现

上图是目录结构&#xff0c;本节是有问同学的&#xff0c;当好好总结 pom.xml <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"http://maven.apache.org/POM/4.0.…

那些年用过的Redis集群架构(含面试解析)

引言 今天&#xff0c;我接到了高中同学刘有码面试失利的消息。 他面试的时候&#xff0c;身份是某知名公司的小码农一枚&#xff0c;却因为不懂自己生产上Redis是如何部署的&#xff0c;导致面试失败&#xff01; 人间惨剧&#xff0c;莫过于此。 接到他面试失利的消息&#x…

再谈BERT

三次讲到了BERT。第一次是nlp中的经典深度学习模型(二)&#xff0c;第二次是transformer & bert &GPT&#xff0c;这是第三次。 文章目录1 关于预训练模型1.1预训练概念1.2 再谈语言模型1.3 ELMo1.4 GPT2 BERT2.1 BERT特点2.2架构2.3 预训练任务2.3.1 masked language …

第一百三十三期:MySQL锁会不会,你就差看一看咯

本文章向大家介绍MySQL锁详细讲解&#xff0c;包括数据库锁基本知识、表锁、表读锁、表写锁、行锁、MVCC、事务的隔离级别、悲观锁、乐观锁、间隙锁GAP、死锁等等&#xff0c;需要的朋友可以参考一下。 作者&#xff1a;php自学中心 本文章向大家介绍MySQL锁详细讲解&#xff…

[导入][你必须知道的.NET]第十回:品味类型---值类型与引用类型(下)-应用征途...

摘要: 本文将值类型和引用类型的讨论从应用示例角度来进一步做以延伸&#xff0c;可以看作是对前两回的补充性探讨。我们从类型定义、实例创建、参数传递、类型判等、垃圾回收等几个方面来简要的对上两回的内容做以剖析&#xff0c;并以一定的IL语言和内存机制来说明&#xff0…

云开发新能力,支持 HTTP 调用 API

今天来上班打开电脑&#xff0c;总感觉微信开发文档哪里有点不太一样&#xff0c;研究了半天原来是云开发又多了神级功能——HTTP API&#xff01; HTTP API是什么&#xff1f;简单来说就是通过云开发HTTP API&#xff0c;可以不需要通过微信小程序或云开发控制台&#xff0c;就…

mac下pip install 安装只能选择python2.7的问题

mac自带python2.7。 我用brew install安装过python3:brew install python3 我安装了anaconda3。因为它自带了很多包。所以我无论是用pycharm编程还是jupyter notebook一直都用的是anaconda3带的python。 后来发现用pip install 安装的包&#xff0c;在pycharm工程中用不了。更有…

第一百三十四期:MySQL分页查询方法及优化

在MySQL中&#xff0c;分页查询一般都是使用limit子句实现&#xff0c;limit子句声明如下&#xff1a;LIMIT子句可以被用于指定 SELECT 语句返回的记录数。 作者&#xff1a;青芽草 分页查询方法&#xff1a; 在MySQL中&#xff0c;分页查询一般都是使用limit子句实现&#x…

One2One主键关联的实现

主键关联&#xff0c;产生主键的是A类&#xff0c;与A相同主键的是B类 主键对应的A类&#xff0c;hbm.xml文件与.cs文件均无任何特别&#xff0c;与单表相同 与A相同的主键B类&#xff0c; Hbm.xml文件&#xff1a; <id name"Id"column"ID"type"Gu…

scroll

因为想赶紧开始敲考核任务的&#xff0c;所以就跳着来学 1. window.pageYOffset可以获取滚动了的高度 2.转载于:https://www.cnblogs.com/lijingjaj/p/11206841.html

第一百三十五期:如何模拟一次阿里双11秒杀场景的实现?程序员必看

秒杀活动可以说在互联网上随处可见&#xff0c;从12306抢票&#xff0c;到聚划算抢购&#xff0c;我们生活的方方面面都可以看到秒杀的身影。 作者&#xff1a;IT技术管理那些事儿 秒杀活动可以说在互联网上随处可见&#xff0c;从12306抢票&#xff0c;到聚划算抢购&#xf…

什么是“中台”

“中台”概念起源于军事范畴&#xff0c;其精髓是“大平台支撑精兵作战”&#xff0c;即前线小团队作战&#xff0c;后方建设强大的火力平台和信息化指挥系统机动支撑。企业中台战略随着Supercell、阿里巴巴、腾讯、华为等国内外科技巨头的应用和宣传&#xff0c;近年来在国内被…

第一百三十六期:详细讲解 Redis 的两种安装部署方式

Redis 是一款比较常用的 NoSQL 数据库&#xff0c;我们通常使用 Redis 来做缓存&#xff0c;这是一篇关于 Redis 安装的文章&#xff0c;所以不会涉及到 Redis 的高级特性和使用场景&#xff0c;Redis 能够兼容绝大部分的 POSIX 系统。 作者&#xff1a;平头哥 Redis 是一款比…

知识图谱需要解决的问题

1 知识图谱应用场景 1、数据可视化 2、基于图谱的问答系统 3、基于图谱的关系推理 4、便捷的关系查询&#xff0c;给模型提供更多数据特征 2 知识图谱的构建 非结构化数据源中的实体识别&#xff1a;一般来说是一个sequence labeling的任务。 非结构化数据源中的关系抽取&am…

spring mvc学习(43):处理静态资源

上图是目录结构&#xff0c;本节是有问同学的&#xff0c;当好好总结 pom.xml <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"http://maven.apache.org/POM/4.0.…

每天学一点flash(14) as3.0 处理xml (官方)

把官方的教程贴上来&#xff0c;我觉得还是不错的说得很有条理&#xff1a; 转载于:https://www.cnblogs.com/guoyiqi/archive/2007/08/21/2069585.html

Spring AOP学习笔记

需明确的几个概念: l 通知(Advice)&#xff1a;用于告知系统将有哪些新的行为。l 切入点(Pointcut):定义了通知应该在应用到那些连接点。l 目标对象(Target)&#xff1a;被通知的对象。l 代理(Proxy)&#xff1a;将通知应用到目标对象后创建的…

spring mvc学习(44):springMVC运行原理

springMVC处理请求的流程 SpringMVC的工作原理图&#xff1a; SpringMVC流程 1、 用户发送请求至前端控制器DispatcherServlet。 2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。 3、 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找)&…

一段按页自动滚动文字或图片的Js代码

<div iddemo style"position:relative;padding:10px;border:solid 1px green;BACKGROUND: #ffffff; OVERFLOW: hidden; WIDTH: 510px; COLOR: red; HEIGHT: 100px"><div id"demo1"style"position:relative;">您的图片或者要滚动的内…

spring mvc学习(45):springMVC的三大组件

SpringMvc框架结构图 处理器映射器&#xff1a;用户请求路径到Controller方法的映射处理器适配器&#xff1a;根据handler(controlelr类&#xff09;的开发方式&#xff08;注解开发/其他开发&#xff09; 方式的不同区寻找不同的处理器适配器 视图解析器&#xff1a;根据hand…