深度学习笔记之BERT(一)BERT的基本认识

深度学习笔记之BERT——BERT的基本认识

引言

从本节开始,将介绍 BERT \text{BERT} BERT系列模型以及其常见的变种形式,主要以逻辑认识为主;并将过去的关于 Transformer \text{Transformer} Transformer的相关内容结合起来,形成通顺逻辑即可。

回顾:Transformer的策略

在Transformer系列文章中介绍了 Transformer \text{Transformer} Transformer的模型架构,而它的策略 Seq2seq \text{Seq2seq} Seq2seq基本相同: t t t时刻状态下,解码器最终预测 t + 1 t +1 t+1时刻词汇的概率分布,并选择我概率最高的词作为输出
P ( o t + 1 ∣ o 1 , o 2 , ⋯ , o t ) \mathcal P(o_{t+1} \mid o_1,o_2,\cdots,o_t) P(ot+1o1,o2,,ot)
因而需要让预测的概率分布和实际概率分布之间的差异最小化,使用交叉熵( Cross Entropy \text{Cross Entropy} Cross Entropy)损失函数即可实现策略的分类任务。

回顾:Word2vec的策略和局限性

在Word2vec的介绍中,提到了 Word2vec \text{Word2vec} Word2vec中两个模型结构: Skipgram,CBOW \text{Skipgram,CBOW} Skipgram,CBOW的构建逻辑。基于长度为 T \mathcal T T语料库 D = { w 1 , w 2 , ⋯ , w T } \mathcal D = \{w_1,w_2,\cdots,w_{\mathcal T}\} D={w1,w2,,wT},需要对联合概率分布 P ( w 1 , w 2 , ⋯ , w T ) \mathcal P(w_1,w _2,\cdots,w_{\mathcal T}) P(w1,w2,,wT)进行建模:
P ( w 1 , w 2 , ⋯ , w T ) = P ( w t ∣ w 1 , ⋯ , w t − 1 , w t + 1 , ⋯ , w T ) ⋅ P ( w 1 , ⋯ , w t − 1 , w t + 1 , ⋯ , w T ) t ∈ { 1 , 2 , ⋯ , T } \mathcal P(w_1,w_2,\cdots,w_{\mathcal T}) = \mathcal P(w_t \mid w_1,\cdots,w_{t-1},w_{t+1},\cdots,w_{\mathcal T}) \cdot \mathcal P(w_1,\cdots,w_{t-1},w_{t+1},\cdots,w_{\mathcal T}) \quad t \in \{1,2,\cdots, \mathcal T\} P(w1,w2,,wT)=P(wtw1,,wt1,wt+1,,wT)P(w1,,wt1,wt+1,,wT)t{1,2,,T}
很明显作为自然语言处理任务, D \mathcal D D的规模必然是不小的;对应联合概率分布的计算也是既复杂的。针对这种情况,使用 3 3 3假设对任务进行约束:

  • 假设 1 1 1:中心词 w t ( t = 1 , 2 , ⋯ , T ) w_t(t=1,2,\cdots,\mathcal T) wt(t=1,2,,T)仅能对其前后 C \mathcal C C个上下文词语产生影响。基于该假设,可以对条件概率 P ( w t ∣ w 1 , ⋯ , w t − 1 , w t + 1 , ⋯ , w T ) \mathcal P(w_t \mid w_1,\cdots,w_{t-1},w_{t+1},\cdots,w_{\mathcal T}) P(wtw1,,wt1,wt+1,,wT)进行化简:
    为了数据有意义,同样需要满足: t − C ≥ 0 ; t + C ≤ T t-\mathcal C \geq 0;t+ \mathcal C \leq \mathcal T tC0;t+CT
    P ( w t ∣ w 1 , ⋯ , w t − 1 , w t + 1 , ⋯ , w T ) ≈ P ( w t ∣ w t − C , ⋯ , w t − 1 , w t + 1 , ⋯ , w t + C ) \mathcal P(w_t \mid w_1,\cdots,w_{t-1},w_{t+1},\cdots,w_{\mathcal T}) \approx \mathcal P(w_t \mid w_{t-\mathcal C},\cdots,w_{t-1},w_{t+1},\cdots,w_{t+\mathcal C}) P(wtw1,,wt1,wt+1,,wT)P(wtwtC,,wt1,wt+1,,wt+C)
  • 假设 2 2 2:各似然结果 P ( w t ∣ w t − C , ⋯ , w t − 1 , w t + 1 , ⋯ , w t + C ) t ∈ { 1 , 2 , ⋯ , T } \mathcal P(w_t \mid w_{t-\mathcal C},\cdots,w_{t-1},w_{t+1},\cdots,w_{t+\mathcal C}) \quad t \in \{1,2,\cdots,\mathcal T\} P(wtwtC,,wt1,wt+1,,wt+C)t{1,2,,T}之间相互独立。可以将完整似然结果表示为:
    均值 1 T \frac{1}{\mathcal T} T1只会影响似然结果变化的范围,而不会影响趋势;
    1 T ∑ t = 1 T log ⁡ P ( w t ∣ w t − C , ⋯ , w t − 1 , w t + 1 , ⋯ , w t + C ) \frac{1}{\mathcal T} \sum_{t=1}^\mathcal T \log \mathcal P(w_t \mid w_{t-\mathcal C},\cdots,w_{t-1},w_{t+1},\cdots,w_{t+\mathcal C}) T1t=1TlogP(wtwtC,,wt1,wt+1,,wt+C)
  • 假设 3 3 3:中心词 w t ( t = 1 , 2 , ⋯ , T ) w_{t}(t=1,2,\cdots,\mathcal T) wt(t=1,2,,T)确定的条件下,作为条件的各词之间同样相互独立。假设 2 2 2中的结果可以继续分解:
    J ( θ ) = 1 T ∑ t = 1 T log ⁡ ∏ i = − C ( ≠ 0 ) C P ( w t ∣ w t + i ) = 1 T ∑ t = 1 T ∑ i = − C ( ≠ 0 ) C log ⁡ P ( w t ∣ w t + i ) \begin{aligned} \mathcal J(\theta) & = \frac{1}{\mathcal T} \sum_{t=1}^{\mathcal T} \log \prod_{i=-\mathcal C(\neq0)}^{\mathcal C} \mathcal P(w_t \mid w_{t+i}) \\ & = \frac{1}{\mathcal T} \sum_{t=1}^{\mathcal T} \sum_{i=-\mathcal C(\neq 0)}^{\mathcal C} \log \mathcal P(w_t \mid w_{t+i}) \end{aligned} J(θ)=T1t=1Tlogi=C(=0)CP(wtwt+i)=T1t=1Ti=C(=0)ClogP(wtwt+i)

上面对应的是 CBOW \text{CBOW} CBOW架构的策略。很明显: 3 3 3个假设都非常苛刻,并且不合语言常理

  • 关于假设 1 1 1:中心词与上下文之间存在关联这个理念没有错,但是将上下文约束在固定大小的范围(窗口) ( − C , C ) (-\mathcal C,\mathcal C) (C,C)显得过于生硬;
  • 关于假设 2 2 2假设 3 3 3窗口内的词中心词后验概率均相互独立,这本身也是对上下文这个概念的一种破坏。

通常也称 Word2vec \text{Word2vec} Word2vec系列模型为静态模型、无上下文模型

BERT \text{BERT} BERT的基本理念

抽象的双向

BERT \text{BERT} BERT( Bidirectional Encoder Representation from Transformers \text{Bidirectional Encoder Representation from Transformers} Bidirectional Encoder Representation from Transformers,基于 Transformer \text{Transformer} Transformer的双向编码器表示) 是针对一般语言的理解任务,使用深层双向 Transformer \text{Transformer} Transformer用来做预训练的模型。该模型的优势之处在于:对于预训练好的 BERT \text{BERT} BERT模型,仅需要增加一个额外的输出层,就可以在 NLP \text{NLP} NLP的相关任务中得到一个不错的结果。

BERT \text{BERT} BERT之所以成功的一个重要原因在于:它是一个基于上下文的嵌入模型。和 Transformer \text{Transformer} Transformer相同,它使用自注意力机制去分析完整句子内各词之间的关联关系,而相反 Word2vec \text{Word2vec} Word2vec这种静态模型,即便存在考虑上下文信息的想法,但各种苛刻、不合理的假设,让上下文信息几乎失去了意义

那么 BERT \text{BERT} BERT是如何实现双向表示的呢 ? ? ? 提到双向,在 Seq2seq \text{Seq2seq} Seq2seq注意力机制执行过程一节中,将编码器部分设置为双向 GRU \text{GRU} GRU结构。当然,无论是双向 GRU \text{GRU} GRU还是双向 LSTM \text{LSTM} LSTM,其本质是两个学习顺序相反的独立结构双向LSTM示例
最终将每个结构产生的特征信息进行拼接,从而得到一个新的融合特征,并基于该特征执行后续步骤。
h u p d a t e = [ h L ; 1 , h L ; 2 , ⋯ , h L ; T ; h L ; 1 , h L ; 2 , ⋯ , h L ; T ] h_{update} = [h_{\mathcal L;1},h_{\mathcal L;2},\cdots,h_{\mathcal L;\mathcal T};h_{\mathcal L;1},h_{\mathcal L;2},\cdots,h_{\mathcal L;\mathcal T}] hupdate=[hL;1,hL;2,,hL;T;hL;1,hL;2,,hL;T]

BERT \text{BERT} BERT中的描述的双向不同于上述结构,它所描述的双向仅是:仅使用 Transformer \text{Transformer} Transformer中的编码器部分作为模型的架构。在 Transformer \text{Transformer} Transformer模型架构一节中编码器部分的多头注意力机制中,其输出的任意头的注意力矩阵 A ( i ) \mathcal A^{(i)} A(i),其矩阵內部的信息是完整的。也就是说:句子中的任意一个词,和句子中的其他词(包含自身),均存在相应的注意力映射关系。自然包含某个被 Mask \text{Mask} Mask词的前向、后向的词。
是个有点抽象意义上的双向~
{ att [ Q ( i ) , K ( i ) ] = Q ( i ) [ K ( i ) ] T d A ( i ) = Softmax { att [ Q ( i ) , K ( i ) ] } V ( i ) \begin{cases} \begin{aligned} & \text{att} \left[\mathcal Q^{(i)},\mathcal K^{(i)} \right] = \frac{\mathcal Q^{(i)} \left[ \mathcal K^{(i)} \right]^T}{\sqrt{d}} \\ & \mathcal A^{(i)} = \text{Softmax} \left\{ \text{att} \left[\mathcal Q^{(i)},\mathcal K^{(i)}\right] \right\} \mathcal V^{(i)} \end{aligned} \end{cases} att[Q(i),K(i)]=d Q(i)[K(i)]TA(i)=Softmax{att[Q(i),K(i)]}V(i)

既然有双向,那自然也有单向。单向自然指 Transformer \text{Transformer} Transformer中的解码器部分。解码器模块中的 Masked Multi-Head Attention \text{Masked Multi-Head Attention} Masked Multi-Head Attention模块,由于需要预测后一个词的概率分布,所以其对应的注意力矩阵是一个 mask \text{mask} mask一半的三角矩阵

BERT的预训练策略

BERT \text{BERT} BERT的预训练策略包含两种:

  • 掩码语言模型训练
    两个示例句子: Paris is a beautiful city  I love Paris \text{Paris is a beautiful city \quad I love Paris} Paris is a beautiful city I love Paris
    将两个句子处理成预期格式:
    分词;第一句开头添加 [ CLS ] [\text{CLS}] [CLS]每个分句后添加 [ SEP ] [\text{SEP}] [SEP]
    tokens = [[CLS], Paris, is, a, beautiful, city, [SEP], I, love, Paris, [SEP]] \text{tokens = [[CLS], Paris, is, a, beautiful, city, [SEP], I, love, Paris, [SEP]]} tokens = [[CLS], Paris, is, a, beautiful, city, [SEP], I, love, Paris, [SEP]]
    在上述 token \text{token} token中随机选择一部分词语进行掩码标记,标记方式为:使用 [ MASK ] [\text{MASK}] [MASK]对被掩码词语进行替换。被选择词语数量与 token \text{token} token长度相关,控制在 token \text{token} token长度的 15 15 15%,这里仅以一个词为例: city \text{city} city
    tokens = [[CLS], Paris, is, a, beautiful, [MASK], [SEP], I, love, Paris, [SEP]] \text{tokens = [[CLS], Paris, is, a, beautiful, [MASK], [SEP], I, love, Paris, [SEP]]} tokens = [[CLS], Paris, is, a, beautiful, [MASK], [SEP], I, love, Paris, [SEP]]
    在论文中,为了优化 BERT \text{BERT} BERT预训练模式下游任务微调模式之间由于掩码标记导致不匹配的问题而提出 80-10-10 规则。即: 80 80 80%的 token \text{token} token使用掩码标记进行替换; 10 10 10%的 token \text{token} token使用随机标记替换,即使用词表中的随机词替换被掩码的词语。这里选择用 love \text{love} love 替换 city \text{city} city
    人为增加噪声提升模型鲁棒性的操作~
    tokens = [[CLS], Paris, is, a, beautiful, love, [SEP], I, love, Paris, [SEP]] \text{tokens = [[CLS], Paris, is, a, beautiful, love, [SEP], I, love, Paris, [SEP]]} tokens = [[CLS], Paris, is, a, beautiful, love, [SEP], I, love, Paris, [SEP]]
    最后 10 10 10%的 token \text{token} token保持不变。将处理好的 token \text{token} token对应的各类 Embedding \text{Embedding} Embedding送入到 BERT \text{BERT} BERT中,对 [ MASK ] [\text{MASK}] [MASK]位置对应的 BERT \text{BERT} BERT输出 R [ MASK ] \mathcal R_{[\text{MASK}]} R[MASK]进行预测:
    R [ MASK ] = P ( [MASK] ∣ Paris,is,a , ⋯ , love,Paris ) \mathcal R_{[\text{MASK}]} = \mathcal P(\text{[MASK]} \mid \text{Paris,is,a},\cdots,\text{love,Paris}) R[MASK]=P([MASK]Paris,is,a,,love,Paris)
    这明显是一个多分类任务。使用 Softmax \text{Softmax} Softmax从当前词表中选择一个概率最高的值对 [ MASK ] [\text{MASK}] [MASK]进行预测,因而对应的策略使用交叉熵损失函数

  • 下句预测
    顾名思义,即 token \text{token} token内的句子之间是否存在前后因果关系。示例 token \text{token} token中自然是满足条件的,具体判断方式是对 [CLS] \text{[CLS]} [CLS]对应的 BERT \text{BERT} BERT输出 R [ CLS ] \mathcal R_{[\text{CLS}]} R[CLS]使用 Softmax \text{Softmax} Softmax进行二分类(有关联/无关联)任务。对应的策略同样是交叉熵损失函数

Transformer \text{Transformer} Transformer相比,虽然都是分类任务, Transformer \text{Transformer} Transformer最终求得的后验概率仅包含正向(单向)顺序;而 BERT \text{BERT} BERT不仅是双向顺序,并且是两种策略共同对权重参数进行反向传播更新。

预训练与微调

  • 在整个预训练过程中,我们使用未标注的数据对词语的 Embedding \text{Embedding} Embedding进行优化,并获取相应对应预训练的权重
    但是这个部分还是交给各个大厂和顶级研究院吧~我们连电费交不起

  • 在后期微调时,我们针对一些具体的下游任务,如文本分类、命名实体识别等,我们新建一个 BERT \text{BERT} BERT模型,并且初始化权重参数是之前预训练得到的参数,而数据是我们自己标注过的数据,针对具体任务,对下游神经网络权重、 BERT \text{BERT} BERT內部权重进行进一步调整(微调),从而得到该任务的BERT版本

Reference \text{Reference} Reference
BERT \text{BERT} BERT论文逐段精读
《BERT基础教程——Transformer大模型实战》

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

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

相关文章

二:Linux学习笔记(第一阶段)-- Linux命令

目录 Linux注意事项: Linux目录 Linux系统基础命令 1. 文件和目录操作 2. 文件查看和编辑 3. 文件权限和所有权 4. 系统信息 5. 网络命令 6. 文件查找 7. 压缩和解压缩 8. 系统管理 Linux注意事项: 严格区分大小写一切皆文件windows下的程序不…

基于 Java 语言双代号网络图自动绘制系统

基于Java语言双代号网络图自动绘制系统研究与实现 一、摘要 网络计划技术已被广泛应用于工业、农业、国防、科学研究等多个领域中的项目计划与管理,以缩短项目周期,提高资源的利用效率。在网络计划技术中,绘制网络图是网络计划技术的基础工…

多模态大模型微调实践!PAI+LLaMA Factory搭建AI导游

一、引言 AI的快速发展推动了各行各业的智能化转型和创新,随之而来的是对AI应用的迫切需求。 如何微调大模型、高效搭建AI应用成为了开发者们广泛关注的技术方向。阿里云人工智能平台PAI,联合开源低代码大模型微调框架LLaMA Factory ,共同打…

设计模式-单例模型(单件模式、Singleton)

单例模式是一种创建型设计模式, 让你能够保证一个类只有一个实例, 并提供一个访问该实例的全局节点。 单例模式同时解决了两个问题, 所以违反了单一职责原则: 保证一个类只有一个实例。 为什么会有人想要控制一个类所拥有的实例…

基于SSM+微信小程序的社团登录管理系统(社团1)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 2、项目技术 3、开发环境 4、功能介绍 1、项目介绍 基于SSM微信小程序的社团登录管理系统实现了管理员及社团、用户。 1、管理员实现了首页、用户管理、社团管理、社团信息管理、社…

DAYWEB69 攻防-Java 安全JWT 攻防Swagger 自动化算法签名密匙Druid 泄漏

知识点 1、Java安全-Druid监控-未授权访问&信息泄漏 2、Java安全-Swagger接口-文档导入&联动批量测试 2、Java安全-JWT令牌攻防-空算法&未签名&密匙提取 Java安全-Druid监控-未授权访问&信息泄漏 Druid是阿里巴巴数据库事业部出品,为监控而…

SMO算法 公式推导

min ⁡ α 1 2 ∑ i 1 N ∑ j 1 N α i α j y i y j K ( x i ⋅ x j ) − ∑ i 1 N α i s.t. ∑ i 1 N α i y i 0 0 ≤ α i ≤ C , i 1 , 2 , ⋯ , N (9-69) \begin{aligned} & \min_{\alpha} \quad \frac{1}{2} \sum_{i1}^{N} \sum_{j1}^{N} \alpha_i \alpha_j…

OpenCV系列教程六:信用卡数字识别、人脸检测、车牌/答题卡识别、OCR

文章目录 一、信用卡数字识别1.1 模板匹配1.2 匹配多个对象1.3 处理数字模板1.4 预处理卡片信息,得到4组数字块。1.5 遍历数字块,将卡片中每个数字与模板数字进行匹配 二、人脸检测2.1人脸检测算法原理2.2 OpenCV中的人脸检测流程 三、车牌识别3.1 安装t…

2024年10月总结及随笔之漏更及失而复得

1. 回头看 日更坚持了670天。 读《数据湖仓》更新完成读《数据工程之道:设计和构建健壮的数据系统》开更并持续更新 2023年至2024年10月底累计码字1642797字,累计日均码字2451字。 2024年10月码字86801字,同比下降30.77%,环比…

VScode + PlatformIO 了解

​Visual Studio Code Visual Studio Code(简称 VS Code)是一款由微软开发且跨平台的免费源代码编辑器。该软件以扩展的方式支持语法高亮、代码自动补全(又称 IntelliSense)、代码重构功能,并且内置了工具和 Git 版本…

一二三应用开发平台自定义查询设计与实现系列2——查询方案功能实现

查询方案功能实现 上面实现了自定义查询功能框架,从用户角度出发,有些条件组合可以形成特定的查询方案,对应着业务查询场景。诸多查询条件的组合,不能每次都让用户来设置,而是应该保存下来,下次可以直接使…

WebSocket 连接频繁断开的问题及解决方案

文章目录 WebSocket 连接频繁断开的问题及解决方案1. 引言2. 什么是 WebSocket?2.1 WebSocket 的优势2.2 WebSocket 的工作原理 3. WebSocket 连接频繁断开的常见原因3.1 服务器端问题3.1.1 服务器负载过高3.1.2 服务器配置不当3.1.3 超时设置 3.2 网络问题3.2.1 网…

萤石私有化设备视频平台EasyCVR视频融合平台如何构建农业综合监控监管系统?

现代农业的迅速发展中,集成监控管理系统已成为提高农业生产效率和优化管理的关键工具。萤石私有化设备视频平台EasyCVR,作为一个具有高度可扩展性、灵活的视频处理能力和便捷的部署方式的视频监控解决方案,为农业监控系统的建设提供了坚实的技…

#渗透测试#SRC漏洞挖掘# 信息收集-Shodan之搜索语法进阶

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停…

Fsm3

采用读热码编写方式: module top_module(input clk,input in,input areset,output out); ////reg [3:0]A 4d0001;// reg [3:0]B 4d0010;//reg [3:0]C 4d0100;// reg [3:0]D 4d1000; //1、首先用读热码定义四个状态变量parameter A 4d0001 ,B 4d0010, C 4d01…

62-Java-面试专题(1)__基础

62-Java-面试专题(1)__基础-- 笔记 笔记内容来源与黑马程序员教学视频 文章目录 62-Java-面试专题(1)__基础-- 笔记Java-面试专题(1)笔记中涉及资源: 一、二分查找①:代码实现1. 流程2. 代码实现3. 测试 ②:解决整数溢出(方法一&…

基于华为昇腾910B,实战InternVL2-8B模型推理

基于华为昇腾910B,实战InternVL2-8B模型推理 本文将带领大家基于启智平台,使用 LMDeploy 推理框架在华为昇腾 910B 上实现 InternVL2-8B 模型的推理。 https://github.com/OpenGVLab/InternVL https://github.com/InternLM/lmdeploy 1.登录启智平台 …

私有化视频平台EasyCVR视频汇聚平台接入RTMP协议推流为何无法播放?

私有化视频平台EasyCVR视频汇聚平台兼容性强、支持灵活拓展,平台可提供视频远程监控、录像、存储与回放、视频转码、视频快照、告警、云台控制、语音对讲、平台级联等视频能力。 有用户反馈,项目现场使用RTMP协议接入EasyCVR平台,但是视频却不…

Kong Gateway 指南

Kong Gateway 是一个轻量、快速、灵活的云原生API网关,其本质是一个运行在 Nginx中的Lua应用程序。 概述 Kong是Mashape开源的高性能高可用的API网关,可以水平扩展。它通过前置的负载均衡配置把请求分发到各个server,来应对大批量的网络请求…

简单的kafkaredis学习之kafka

简单的kafka&redis学习整理之kafka 1. kafka 1.1 什么是消息队列 在学习Kafka之前我们先来看一下什么是消息队列,消息队列(Message Queue):可以简称为MQ 例如:Java中的Queue队列,也可以认为是一个消息队列 消息队列&#x…