学习记录--Bert、Albert、RoBerta

目录

Bert

1:输入

2:Bert结构

3:模型预训练

Albert

1:SOP任务

2:embedding因式分解

3:参数共享

RoBerta


参考:

BERT原理和结构详解_bert结构-CSDN博客

[LLM] 自然语言处理 --- ALBERT 介绍_albert模型-CSDN博客

ALBERT:更轻更快的NLP预训练模型_AI&大模型_小Dream哥_InfoQ精选文章


Bert

 BERT,基于transformer的双向编码表示,它是一个预训练模型,模型训练时的两个任务是预测句子中被掩盖的词以及判断输入的两个句子是不是上下句。在预训练好的BERT模型后面根据特定任务加上相应的网络,可以完成NLP的下游任务,比如文本分类、机器翻译等。

它的整体框架是由多层transformer的encoder堆叠而成的。每一层的encoder则是由一层muti-head-attention和一层feed-forword组成,大的模型有24层,每层16个attention,小的模型12层,每层12个attention。每个attention的主要作用是通过目标词与句子中的所有词汇的相关度,对目标词重新编码。所以每个attention的计算包括三个步骤:计算词之间的相关度,对相关度归一化,通过相关度和所有词的编码进行加权求和获取目标词的编码。

1:输入

详细解释这三个embedding:BERT的嵌入层是如何实现的?看完你就明白了 (qq.com)

2:Bert结构

其实就是Transformer里面的Encoder,省略,想看可以去:
学习记录--Transformer(学习记录,大部分copy)-CSDN博客

补充(Batch Normalization和Layer Normalization的区别):

Batch Normalization是在batch间选择同一个位置的值做归一化,相当于是对batch里相同位置的字或者单词embedding做归一化,Layer Normalization是在一个Batch里面的每一行做normalization,相当于是对每句话的embedding做归一化。显然,LN更加符合我们处理文本的直觉。

3:模型预训练

(1)masked language model

         随机掩盖掉一些单词,然后通过上下文预测该单词。BERT中有15%的wordpiece token会被随机掩盖,这15%的token中80%用[MASK]这个token来代替,10%用随机的一个词来替换,10%保持这个词不变。这种设计使得模型具有捕捉上下文关系的能力,同时能够有利于token-level tasks例如序列标注。

Q:为什么选中的15%的wordpiece token不能全部用 [MASK]代替,而要用 10% 的 random token 和 10% 的原 token

       [MASK] 是以一种显式的方式告诉模型『这个词我不告诉你,你自己从上下文里猜』,从而防止信息泄露。如果 [MASK] 以外的部分全部都用原 token,模型会学到『如果当前词是 [MASK],就根据其他词的信息推断这个词;如果当前词是一个正常的单词,就直接抄输入』。这样一来,在 finetune 阶段,所有词都是正常单词,模型就照抄所有词,不提取单词间的依赖关系了。

        以一定的概率填入 random token,就是让模型时刻堤防着,在任意 token 的位置都需要把当前 token 的信息和上下文推断出的信息相结合。这样一来,在 finetune 阶段的正常句子上,模型也会同时提取这两方面的信息,因为它不知道它所看到的『正常单词』到底有没有被动过手脚的。

Q:最后怎么利用[MASK] token做的预测?

       最终的损失函数只计算被mask掉的token的,每个句子里 [MASK] 的个数是不定的。实际代码实现是每个句子有一个 maximum number of predictions,取所有 [MASK] 的位置以及一些 PADDING 位置的向量拿出来做预测(总共凑成 maximum number of predictions 这么多个预测,是定长的),然后再用掩码把 PADDING 盖掉,只计算[MASK]部分的损失。

(2)next sentence prediction

        语料中50%的句子,选择其相应的下一句一起形成上下句,作为正样本;其余50%的句子随机选择一句非下一句一起形成上下句,作为负样本。这种设定,有利于sentence-level tasks,例如问答。注意:作者特意说了语料的选取很关键,要选用document-level的而不是sentence-level的,这样可以具备抽象连续长序列特征的能力。


Albert

总体来说,ALBERT有意义的创新主要有:

  1. 修正了句子预测这一一直被诟病的预训练任务,改为了预测句子之间的连贯性

  2. Embedding进行因式分解

  3. 跨层参数共享

1:SOP任务

BERT在提出的时候提供了两种预训练任务,一个是遮蔽语言模型,即以一定比例随机遮蔽一定比例的输入标记,然后预测那些被遮蔽的标记的预训练任务(PS:ALBERT也不是直接做这个任务,而是换成N-gram的预测任务),另一个则是预测第二个句子是不是第一个句子的下一句。但在随后的实践中,第二个任务被证明并没有给模型带来受益,主要由于这个任务过于简单。于是,在ALBERT中这个任务被换成了预测句子间的顺序,增加模型学会这种任务的能力

2:embedding因式分解

词向量只是记忆了相对少量的词语的信息,更多的语义和句法等信息时由隐藏层记忆的。因此,他们认为,词嵌入的维度可以不必与隐藏层的维度一致,可以通过降低词嵌入的维度的方式来减少参数量。假设词表的大小为 V,词嵌入的维度为 E,隐藏层的维度为 H。BERT 的情况是,E=H;ALBERT 的方案是,将 E 降低,在词嵌入和隐藏层之间加入一个 project 层,连接两个层。我们来分析一下,两种情况嵌入层的参数量。

3:参数共享

BERT_base 中,包含 12 层中间的隐藏层;BERT_large 中,包含 24 层中间的隐藏层;各层之间的参数均不共享。

参数共享可以显著减少参数数量,参数共享可以分为全连接层注意力层的参数共享;在 ALBERT 中,全连接层、注意力层的参数均是共享的,也就是 ALBERT 依然有多层的深度连接,但是各层之间的参数是一样的。很明显的,通过这种方式,ALBERT 中隐藏层的参数量变为原来的 1/12 或者 1/24。

总结:总的来说,ALBERT 利用词嵌入参数因式分解和隐藏层间参数共享两种手段,在显著减少了模型的参数量的同时,基本没有损失模型的性能


RoBerta

在模型规模、算力和数据上,与BERT相比主要有以下几点改进:

  • 更大的模型参数量(论文提供的训练时间来看,模型使用 1024 块 V100 GPU 训练了 1 天的时间)
  • 更大bacth size。RoBERTa 在训练过程中使用了更大的bacth size。尝试过从 256 到 8000 不等的bacth size。
  • 更多的训练数据(包括:CC-NEWS 等在内的 160GB 纯文本。而最初的BERT使用16GB BookCorpus数据集和英语维基百科进行训练)

RoBERTa在训练方法上有以下改进:

  • 去掉下一句预测(NSP)任务
  • 动态掩码。BERT 依赖随机掩码和预测 token。原版的 BERT 实现在数据预处理期间执行一次掩码,得到一个静态掩码。 而 RoBERTa 使用了动态掩码:每次向模型输入一个序列时都会生成新的掩码模式。这样,在大量数据不断输入的过程中,模型会逐渐适应不同的掩码策略,学习不同的语言表征。
  • 文本编码。Byte-Pair Encoding(BPE)是字符级和词级别表征的混合,支持处理自然语言语料库中的众多常见词汇。原版的 BERT 实现使用字符级别的 BPE 词汇,大小为 30K,是在利用启发式分词规则对输入进行预处理之后学得的。Facebook 研究者没有采用这种方式,而是考虑用更大的 byte 级别 BPE 词汇表来训练 BERT,这一词汇表包含 50K 的 subword 单元,且没有对输入作任何额外的预处理或分词。

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

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

相关文章

鸿蒙华为登录(以及导航页面跳转)

//登录华为登录界面以及跳转 //切记一定要写路径,不写路径,容易报错,还有一定要记得导一下包(Arouter) //接下来是鸿蒙界面导航跳转 //进行跳转 TabContent组件不支持设置通用宽度属性,其宽度默认撑满Tab…

在spyder中使用arcgis pro的包

历时2天终于搞定了 目标:在anconda中新建一个arcpyPro环境,配置arcgispro3.0中的arcpy 一、安装arcgispro3.0 如果安装完之后打开arcgispro3.0闪退,就去修改注册表(在另一台电脑安装arcgispro遇到过) 安装成功后可…

MySQL聚合函数(DQL)

先看一下我的表内容和数据,再做接下来的例子和讲解 1.聚合函数的基本语法 SELECT 聚合函数(表中的某个字段)FROM 表名; 2. 常见的聚合函数 举例 1.统计该企业的数量 select count(idcard) from emp; 2.统计该企业员工的平均年龄 select…

Mindspore框架循环神经网络RNN模型实现情感分类|(二)RNN模型构建

Mindspore框架循环神经网络RNN模型实现情感分类 Mindspore框架循环神经网络RNN模型实现情感分类|(一)IMDB影评数据集准备 Mindspore框架循环神经网络RNN模型实现情感分类|(二)RNN模型构建 Mindspore框架循环神经网络RNN模型实现情…

【C++】详解 set | multiset

目录 1.集合类 set 0.引入 1.set 介绍 1. 构造 2.Insert 插入 3.find 查找 4.count 判断是否在 5.erase 删除 6.lower_bound 和 upper_bound 区间查找 拓展:lower_bound 函数底层实现 equal_range 值区间 2.multiset 类 0.引入:不去重的 se…

Xlua原理 二

一已经介绍了初步的lua与C#通信的原理,和xlua的LuaEnv的初始化内容。 这边介绍下Wrap文件。 一.Wrap介绍 导入xlua后可以看到会多出上图菜单。 点击后生成一堆wrap文件,这些文件是lua调用C#时进行映射查找用的中间代码。这样就不需要去反射调用节约性…

Anaconda下安装配置Jupyter

Anaconda下安装配置Jupyter 1、安装 conda activate my_env #激活虚拟环境 pip install jupyter #安装 jupyter notebook --generate-config #生成配置文件提示配置文件的位置: Writing default config to: /root/.jupyter/jupyter_notebook_config.py检查版本&am…

Ai绘画变现的14种途径 学习Stablediffusion midjourney用途

AIGC,一个在当代社会中不可忽视的词汇,指的是利用人工智能技术生成创作内容。近年来,全球范围内涌现出50个热门的AI工具,其中,以140亿次访问量雄踞榜首的“GBT”,无疑是AI领域的领头羊。在这些工具中&#…

三、GPIO按键读取

在上一篇文章中,我们详细讲解了GPIO的写函数。万事万物都具有一定的相对性,GPIO的操作也不例外。既然有写操作,那么必然也有读操作。有了上一篇文章的基础,理解本篇内容将会更加容易。 一、这篇文章能了解什么 本篇文章将基于上一…

vue3.0学习笔记(二)——生命周期与响应式数据(ref,reactive,toRef,toRefs函数)

1. 组合API-setup函数 使用细节: setup 是一个新的组件选项,作为组件中使用组合API的起点。从组件生命周期来看,它的执行在组件实例创建之前vue2.x的beforeCreate执行。这就意味着在setup函数中 this 还不是组件实例,this 此时是…

ES中的数据类型学习之Aggregate metric(聚合计算)

Aggregate metric field type | Elasticsearch Guide [7.17] | Elastic 对于object类型的字段来说,可以存子字段为 min/max/sum/value_count PUT my-index {"mappings": {"properties": {"my-agg-metric-field": { -- 字段名"ty…

【测开能力提升-fastapi框架】fastapi能力提升 - 中间件与CORS

1. 中间件 1.1 介绍(ChatGPT抄的,大致可以理解) 一种机制,用于在处理请求和响应之前对其进行拦截、处理或修改。中间件可以在应用程序的请求处理管道中插入自定义逻辑,以实现一些通用的功能,如身份验证、…

idea部分常用模板

idea部分常用模板 —2020年06月09日 psvm(main方法) //模板一:psvmpublic static void main(String[] args) {}sout(输出) //模板二:soutSystem.out.println("hello!");//变形: s…

React中的无状态组件:简约之美

🎉 博客主页:【剑九 六千里-CSDN博客】 🎨 上一篇文章:【掌握浏览器版本检测:从代码到用户界面】 🎠 系列专栏:【面试题-八股系列】 💖 感谢大家点赞👍收藏⭐评论✍ 引言…

前言及汇编(30小时精通C++和外挂实战)

前言及汇编(30小时精通C和外挂实战) 1,前言2,汇编的重要性(1)网上流传的谬论(2)国内技术氛围(3)学习建议(4)代码本质挖掘(…

C语言之宏详解(超级详细!)

目录 一、用宏前须知-#define相关知识 大致结构: 对预定义符号的补充: 二、用#define定义宏 什么是宏? #define的替换规则: 三、常用的宏定义 1、宏定义常量 2、定义一个宏语句 3、宏定义函数 宏与函数的对比: …

【Linux 驱动】IMX6ULL eLCDIF驱动

1. eLCDIF设备树 lcdif: lcdif021c8000 {compatible "fsl,imx6ul-lcdif", "fsl,imx28-lcdif"; //属性reg <0x021c8000 0x4000>; //起始地址 地址大小interrupts <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>; …

[路由器]IP-MAC的绑定与取消

背景&#xff1a;当公司的网络不想与外部人员进行共享&#xff0c;可以在路由器页面配置IP-MAC的绑定&#xff0c;让公司内部人员的手机和电脑的mac&#xff0c;才能接入到公司。第一步&#xff1a;在ARP防护中&#xff0c;启动IP-MAC绑定选项&#xff0c;必须启动仅允许IP-MAC…

Modbus转BACnet/IP网关快速对接Modbus协议设备与BA系统

摘要 在智能建筑和工业自动化领域&#xff0c;Modbus和BACnet/IP协议的集成应用越来越普遍。BA&#xff08;Building Automation&#xff0c;楼宇自动化&#xff09;系统作为现代建筑的核心&#xff0c;需要高效地处理来自不同协议的设备数据&#xff0c;负责监控和管理建筑内…

双边性:构建神经网络的新方法

正如承诺的那样&#xff0c;这是最近我遇到的最有趣的想法之一的第二部分。如果你错过了&#xff0c;请务必观看本系列的第一部分 - 神经科学家对改进神经网络的看法 - 我们讨论了双边性的生物学基础以及我们大脑的不对称性质如何带来更高的性能。 在这篇文章中&#xff0c;我…