李沐-《动手学深度学习》--03-注意力机制

news2024/11/24 8:57:22

一、注意力机制

1 . 注意力提示

1)框架

在这里插入图片描述

**随意:**跟随自己的想法的,自主的想法,例如query

**不随意:**没有任何偏向的选择,例如 Keys

如何得到 k v q
在这里插入图片描述

2)Nadaraya-Watson核回归

在这里插入图片描述

就是一个softmax,但是不可以学习,输入一个x_pred以后,将离x_pred由近到远的x_train所对应的y_train给定从大到小的权值,然后最后将所有的y_train和自己对应的权重相乘再相加起来得到最后的y_pred

3) 参数化的注意力机制

在这里插入图片描述
参数w可以指控预测函数的平滑程度

4)总结

2 . 注意力分数

1)框架

在这里插入图片描述

**注意力权重:**大于0小于1加起来等于1的权重

**注意力分数:**就是注意力权重没有normalize的情况

2)拓展到高维度

a . Notion

b . Additive Attention(任意长度k,q,v)

在这里插入图片描述

q , k , v都可以任意长度,然后最后都会并起来放到一个单隐藏层

c . Scaled Dot-Product Attention

在这里插入图片描述

当q,k,v的长度都一样的时候,第一个是简单的点积版本,第二个是向量化的版本

3)总结

在这里插入图片描述

4)mask_softmax

mask_softmax作用:将输入的向量或者矩阵,在计算softmax的时候,忽略掉一部分,只对我们想要的一部分做softmax,不想要的部分直接赋值为-1e6 使得做指数运算的时候为0

3 . 使用注意力机制的Seq2Seq

1)框架

在这里插入图片描述

**key-value:**指的是Encoder的每一个词的RNN的输出

**query:**解码器的对上一个词的预测输出,和key-value放入attention里面去找原文附近

2)总结

在这里插入图片描述

4 . 自注意力

1)框架

2)输入到输出的操作

在这里插入图片描述

3)Multi-head Self-attention

一个数据可以是有多个不同的相关性,所以可以设置多个不同的q,将单层的q k v 拆分成多层的q k v

4)Position Encoding

在这里插入图片描述

5 . Transformer

1)架构

在这里插入图片描述

2)Multi-head Self-attention

在这里插入图片描述

多头注意力机制是将

3)掩码的multi-head self-attention

在这里插入图片描述

正常做自注意力的时候,是会看到所有的输入的元素,而进行解码预测的时候只能看到已经预测的,需要对其他的进行遮盖

4)基于位置的前馈网络

实质就是全连接层

pytorch的dense中,高于二维的向量做linear,高于二维的都当作样本维

5)layer - normalization

有b句话,每句话有len个词,每个词由d个特征表示,BN是对所有句子所有词的某一特征做归一化,LN是对某一句话的所有词所有特征单独做归一化

LayerNorm中没有batch的概念,所以不会像BatchNorm那样跟踪统计全局的均值方差,因此train()和eval()对LayerNorm没有影响

layerNorm是将每个样本进行归一化,batchNorm是所有样本的同一个特征进行归一化、
在这里插入图片描述

6)embeddings and softmax & position encoding

encoder ,decoder,pre-softmax 都是共享一个权重矩阵,然后乘d position是将位置信息直接加入到输入里面

7)预测

8)总结

在这里插入图片描述

和RNN的区别: 两个都是会使用序列的信息,不同的是RNN是通过将上一个的输出也加入到当前的输入用作序列信息,而Attention机制是在提取的时候就将序列信息就提取出来了

6 . Bert

NLP 里的迁移学习

  • 在计算机视觉中比较流行,将 ImageNet 或者更大的数据集上预训练好的模型应用到其他任务中,比如小数据的预测图片分类或者是目标检测

1、使用预训练好的模型(例如 word2vec 或语言模型)来抽取词、句子的特征

2、做迁移学习的时候,一般不更新预训练好的模型

3、在更换任务之后,还是需要构建新的网络来抓取新任务需要的信息

  • 使用预训练好的模型来抽取特征的时候,一般得到的是一些比较底层的特征,很多时候只是当成一个 embedding 层来使用,还是需要设计一个比较复杂的模型
  • word2vec 忽略了时序信息
  • 语言模型只看一个方向,而且训练的模型不是很大(RNN 处理不了很长的序列,因为它只能看到很短的一部分)

BERT

1、BERT 是芝麻街中一个人物的名字,芝麻街是美国一个针对小朋友启蒙的节目

2、BERT 结合了 ELMo 对上下文进行双向编码以及 GPT 任务无关这两方面的优点,对上下文进行双向编码,并且对于大多数的自然语言处理任务只需要最少的架构改变

  • 通过将整个序列作为输入,ELMo 是为输入序列中的每一个单词分配一个表示的函数(ELMo 将来自预训练的双向长短期记忆网络的所有中间层表示组合为输出表示,ELMo 的表示将作为附加特征添加到下游任务的现有监督模型中)
  • 在加入 ELMo 表示之后,冻结了预训练的双向 LSTM 模型中的所有权重;现有的监督模型是专门为给定的任务定制的(为每一个自然语言处理任务设计一个特定的架构实际上并不是一件容易的事情),利用不同任务的不同最佳模型,添加 ELMo 改进了六种自然语言处理任务的技术水平:情感分析自然语言推断语义角色标注共指消解命名实体识别回答
  • GPT (Generative Pre Training ,生成式预训练)模型为上下文的敏感表示设计了通用的任务无关模型,它在 Transformer 解码器的基础上,预训练了一个用于表示文本序列的语言模型,当将 GPT 应用于下游任务时,语言模型的输出被送到一个附加的线性输出层,以预测任务的标签
  • 与 ELMo 冻结预训练模型的参数不同,GPT 在下游任务的监督学习过程中对预训练 Transformer 解码器中的所有参数进行微调,GPT 在自然语言推断问答句子相似性分类等12项任务上进行了评估,并在对模型架构进行最小更改的情况下改善了其中9项任务的最新水平
  • ELMo 对上下文进行双向编码,但使用特定于任务的架构;GPT 是任务无关的,但是从左到右编码上下文(由于语言模型的自回归特性,GPT 只能向前看(从左到右))
  • 在下游任务的监督学习过程中,BERT 在两方面与GPT相似:BERT 表示将被输入到一个添加的输出层中,根据任务的性质对模型架构进行最小的更改(例如预测每个词元与预测整个序列);BERT 对预训练 Transformer 编码器的所有参数进行微调,而额外的输出层将从头开始训练
  • BERT 进一步改进了 11 种自然语言处理任务的技术水平,这些任务分为以下几个大类:单一文本分类(如情感分析)、文本对分类(如自然语言推断)、问答文本标记(如命名实体识别)

3、原始的 BERT 有两个版本,其中基本模型有 1.1 亿个参数,大模型有 3.4 亿个参数

4、最初的 BERT 模型是在两个庞大的图书馆语料库英语维基百科的合集上预训练的

5、现成的预训练 BERT 模型可能不适合医学等特定领域的应用

6、在预训练 BERT 之后,可以用它来表示单个文本文本对其中的任何词元

7、BERT 表示是上下文敏感的,同一个词元在不同的上下文中具有不同的 BERT 表示

  • 上下文敏感:同一个词可以根据上下文被赋予不同的表示(词的表征取决于它们的上下文)

1)BERT 的动机

1、基于微调的 NLP 模型

2、预训练的模型抽取了足够多的信息

3、新的任务只需要增加一个简单的输出层

  • 做微调的时候,特征抽取的层是可以复用的(也可以应用到别的任务上面去),只需要修改分类器就可以了
  • 预训练的模型抽取了足够多的信息,使得 feature 已经足够好能够抓住很多的信息,所以在做新的任务的时候,只需要增加一个输出层就可以了

2)BERT 架构

1、只有编码器的 Transformer

2、BERT 在原始的论文中提供了两个原始的版本(原始 BERT 模型中,输入序列最大长度是 512):

  • Base:#blocks=12,hidden size=768,#heads=12,#parameters=110M
  • Large:#blocks=24,hidden size=1024,#heads=16,#parameters=340M

3、在大规模数据上训练 > 3B 词

3)对输入的修改

在这里插入图片描述

a . 每个样本是一个句子对
  • 从源句子到目标句子
  • 翻译的时候,源句子进的是编码器,目标句子进的是解码器,而现在只有一个编码器。因为 NLP 中很多情况下都是两个句子,比如说 Q&A 都是两个句子,一个句子进去,一个句子出来。在 BERT 中,将两个句子拼接起来,然后放进编码器,因此每个样本就是一个句子对
b . 加入额外的片段嵌入

上图中的“this movie is great”和“i like it”两个句子是如何放进去的

  • 首先在句首加了一个特殊的分类标签(class),作为句子对的开头( BERT 输入序列明确地表示单个文本和文本对)
  • 然后在两个句子至今之间使用了一个特殊的分隔符(separate),将两个句子分开(第二个句子末尾也使用了一个分隔符)
  • 也可以做得更长,将更多的句子连接起来,但是一般没有这种情况的使用场景,所以一般使用两个句子就够了

因为有两个句子,而且仅仅使用标签的话,对于 transformer 来讲并不是很好区分两个句子的先后顺序,所以额外地添加了一个 Segment Embedding 来进行区分

  • 对于第一个句子中的所有词元添加 Segment Embedding 为 0 (包括句首的分类标签以及两个句子之间的分隔符)
  • 对于第尔个句子中的所有词元添加 Segment Embedding 为 1(包括句末的分隔符)
c . 位置编码可学习
  • 在 Transformer 编码器中常见的是,位置嵌入被加入到输入序列的每个位置,而 BERT 中使用的是可学习的位置嵌入( BERT 输入序列的嵌入是词元嵌入、片段嵌入和位置嵌入的和
  • 不再使用 sin 和 cos 函数

4)预训练任务

BERT 是做一个通用的任务,因为他是一个预训练模型,做很常见的通用的任务,使得用这个任务训练出来的数据足够好,以至于做别的任务的时候都能做

在文本中,最通用的任务就是语言模型了,给定一个词,然后预测下一个词

  • 但是 BERT 不能直接这么做,因为他里面的编码器是可以看到后面的东西的
  • Transformer 中的编码器是双向的,既看前面又看后面,解码器才是单向的
  • BERT 中的 B 是 bi-directional ,是双向的意思,所以它是看双向的信息,然后抽取比较好的特征,但是如果用来训练语言模型的话就会有问题

因此在 BERT 中做了一个修改,叫做带掩码的语言模型

  • 给定一个句子,把中间的一些词遮起来,然后预测这些词,有点类似于完型填空

预训练任务 1:掩蔽语言模型(Masked Language Modeling)

1、Transformer 的编码器是双向的,标准语言模型要求单向

  • 语言模型使用左侧的上下文预测词元
  • 为了双向编码上下文以表示每个词元,BERT 随机掩蔽词元并使用来自双向上下文的词元以自监督的方式预测掩蔽词元

2、带掩码的语言模型每次随机(15%概率)将一些词元(作为预测的掩蔽词元)替换成

  • 任务就变成了预测被遮起来的那些词,模型就不是预测未来,而是变成了完型填空,因此看双向的信息是没有任何问题的
  • 在每个预测位置,输入可以由特殊的“掩码”词元或随机词元替代,或者保持不变

3、虽然 BERT 在训练的时候加了很多的 ,但是在微调任务中不出现 这种人造特殊词元,为了避免预训练和微调之间的这种不匹配,解决的办法是模型不要总是对 遮掉的部分进行预测输出

  • 80% 概率下,将选中的词元变成
  • 10% 概率下换成一个随机词元(这种偶然的噪声鼓励 BERT 在其双向上下文编码中不那么偏向于掩蔽词元,尤其是当标签词元保持不变时)
  • 10% 概率下保持原有的词元

4、带掩码的语言虽然能够编码双向上下文来表示单词,但是它并不能显式地建模文本对之间的逻辑关系

预训练任务 2:下一句子预测(Next Sentence Prediction)

1、给定一个句子对,预测这个句子对中两个句子在原始的句子中是不是相邻,从而帮助理解两个文本序列之间的关系

2、在构造样本的时候,训练样本中:

  • 50% 概率选择相邻句子对(在采样一个句子的时候,将该句子后面的一个句子也采样进去): this movie is great i like it
  • 50% 概率选择随机句子对(在采样一个句子的时候,在其他地方再随机挑选一个句子采样进去): this movie is great hello world

3、将 对应的输出放到一个全连接层来预测,判断两个句子是不是相邻的

5)总结

1、BERT 是针对 NLP 的微调设计,在大的文本上训练一个比较大的模型,在做别的任务的时候将输出层进行修改,最后的效果会比直接训练好一点( BERT 让微调在 NLP 中变成了主流)

2、BERT 其实就是一个基于 Transformer 的编码器,但是做了一点修改

  • 模型更大,训练数据更多(一般是至少十亿个词,文本不像图片,文本不需要进行标记,所以文本可以无限大)
  • 输入句子对,片段嵌入,可学习的位置编码
  • 训练时使用两个任务:带掩码的语言模型下一个句子预测

3、word2vec 和 GloVe 等词嵌入模型与上下文无关,它们将相同的预训练向量赋给同一个词,而不考虑词的上下文(如果有的话),因此很难处理好自然语言中的一词多义或复杂语义

4、对于上下文敏感的词表示,如 ELMo 和 GPT ,词的表示依赖于它们的上下文

  • ELMo 对上下文进行双向编码,但使用特定于任务的架构(为每个自然语言处理任务设计一个特定的体系架构实际上并不容易)
  • GPT 是任务无关的,但是从左到右编码上下文

5、BERT 结合了这两个方面的优点:对上下文进行双向编码,并且需要对大量自然语言处理任务进行最小的架构更改

6、BERT输入序列的嵌入是词元嵌入、片段嵌入和位置嵌入的和

7、BERT 预训练包括两个任务:掩蔽语言模型和下一句预测

  • 掩蔽语言模型能够编码双向上下文来表示单词
  • 下一句预测能够显式地建模文本对之间的逻辑关系

二 、大纲回顾

在这里插入图片描述

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

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

相关文章

Studio 3T客户端连接Mongodb数据库服务

这里需要注意 一定要先开Studio 3T 到 创建连接时才开Mongodb服务 不然 Studio 3T 会找不到Mongodb服务 不知道这是不是 Studio 3T官方问题 期待解决吧 我们打开 Studio 3T 然后点击 Create a new connection 开始创建连接 新弹出的窗口中选择 Manually configure my connec…

新火种AI|小冰摊牌了!大模型已获国内备案,克隆人发布箭在弦上...

作者:小岩 编辑:彩云 2024年国内AI圈的第一个重磅消息已然来袭。 1月4日,小冰公司宣布,已于去年12月成功获得“小冰大模型”的国内备案。结合此前公司在日本研发的Rinna大模型,小冰方面称,公司已实现不同…

云卷云舒:【实战篇】云主机/虚拟机迁移

1. 简介 用户原有业务通过不同版本型号、不同操作系统的主机承载,形式上包括物理服务器、虚拟机、公有云主机等。随着业务不断扩张,需要将其业务云化转型,必须保证上云过程数据完整,业务平滑过度。 如果将所有业务系统都重新部署…

算法32:针对算法31货币问题进行扩展,并对从左往右模型进行总结

本算法是在算法31的基础之上进行推理总结的,因此,在看本章之前,必须先去了解算法31,否则会觉得莫名其妙。 算法31的推理过程: 如果 x y1 y2 y3 y4 y5 y6. x1 y2 y3 y4 y5 y6 那么 x y1 x1. 根据以…

欧洲编程语言四巨头

从左往右,依次是 尼克劳斯沃斯 (Niklaus Wirth),迪杰斯特拉(Edsger Dijkstra),霍尔(Tony Hoare) 尼克劳斯沃斯 (Niklaus Wirth) 瑞士人,一生发明了8种编程语言,其中最著…

【Python】Graphviz的安装和使用

graphviz包可以用来决策树可视化,只安装包之后直接import使用会报错,因为graphviz是一个要单独安装的软件。 下载路径:Download | Graphviz 有不同的版本,我这里用的是最新版 9.0版本安装之后可以选自动添加到环境变量——系统…

lazada越南站收款问题;lazada可以使用支付宝吗?-站斧浏览器

Lazada越南站收款问题 线上支付方式:Lazada越南本土店提供多种线上支付方式,以方便消费者完成购物支付。常见的线上支付方式包括信用卡支付、借记卡支付、电子钱包支付(如Momo、Zalo Pay等)以及银行转账等。商家可以根据自己的需…

【Java集合篇】HashMap的get方法是如何实现的?

HashMap的get方法是如何实现的 ✔️典型解析✔️拓展知识仓✔️如何避免HashMap get方法的哈希重✔️HashMap get方法的优缺点有哪些✔️HashMap get方法的是线程安全的吗✔️什么是ConcurrentHashMap✔️ConcurrentHashMap有哪些应用场景✔️ConcurrentHashMap的优缺点 ✔️源…

Day1Qt

1、实现登录窗口界面 头文件 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QIcon>//图标 #include <QLabel>//标签类 #include <QMovie>//动态类 #include <QLineEdit>//行编辑类 #include <QPushButton>…

现阶段鸿蒙开发薪资高于传统开发岗位的30%~50%

近期&#xff0c;多家互联网公司发布了多个和鸿蒙系统有关的岗位。 11月10日&#xff0c;网易更新了高级/资深Android开发工程师岗位&#xff0c;职位要求参与云音乐多端多os的产品&#xff08;Android、鸿蒙等&#xff09;研发迭代。11月8日&#xff0c;美团发布了鸿蒙高级工…

有没有比较好的制造业工单管理系统?

制造业公司由于要处理大量的售前售后工作&#xff0c;常常会使用不同的管理系统来协助管理&#xff0c;比如客户管理用的crm系统&#xff0c;人事管理的HR系统&#xff0c;设备管理和报修管理的工单系统等等。不同类型的系统&#xff0c;都有做得比较好的行业佼佼者&#xff0c…

Matplotlib实战_HM数据可视化

文章目录 一、先前准备1.导入必备工具包2.读取数据 二、Articles数据1.打印查看前5行数据2.查看部分字段频次统计3.制作云图 三、Customers数据1.打印前5行数据2.查看客户年龄分布图3.去重查看会员俱乐部状态4.打印查看该列数据5.查看会员俱乐部状态数量&#xff0c;绘制条形图…

华为三层交换机通 过VLANIF虚拟接口实现跨VLAN通信

S1配置 vlan batch 2 to 3interface Vlanif2ip address 192.168.2.254 255.255.255.0interface Vlanif3ip address 192.168.3.254 255.255.255.0interface GigabitEthernet0/0/2port link-type accessport default vlan 2interface GigabitEthernet0/0/3port link-type access…

听GPT 讲Rust源代码--compiler(31)

File: rust/compiler/rustc_ast_passes/src/node_count.rs 在Rust源代码的rust/compiler/rustc_ast_passes/src/node_count.rs文件中&#xff0c;它定义了Rust编译器中的AST节点计数器。该文件的作用是统计不同类型的AST节点在程序中的数量&#xff0c;以便在优化和调试过程中能…

第二十七周:文献阅读笔记

第二十七周&#xff1a;文献阅读笔记 摘要AbstractDenseNet 网络1. 文献摘要2. 引言3. ResNets4. Dense Block5. Pooling layers6. Implementation Details7. Experiments8. Feature Reuse9. 代码实现 总结 摘要 DenseNet&#xff08;密集连接网络&#xff09;是一种深度学习神…

Vue3.x+Echarts (可视化界面)

Vue3.0Echarts &#xff08;可视化界面&#xff09; 1. 简介1.1 技术选型1.2 ECharts支持的数据格式1.3 ECharts使用步骤 2. ECharts图形2.1 通用配置2.2 柱状图2.3 折线图2.4 散点图2.5 直角坐标系常用配置2.6 饼图2.7 地图2.8 雷达图2.9 仪表盘2.10 小结 3. Vue3.2ECharts5数…

利用Python实现每日新闻早报推送

本文将介绍如何使用Python编写简单的逻辑&#xff0c;通过调用API接口实现每日新闻推送功能。 步骤&#xff1a; 导入所需的库&#xff1a; 在代码的开头&#xff0c;我们需要导入所需的库。通常&#xff0c;我们会使用requests库来发送HTTP请求&#xff0c;以获取新闻数据。 …

2023三星齐发,博客之星、华为OD、Java学习星球

大家好&#xff0c;我是哪吒。 一、回顾2023 2023年&#xff0c;华为OD成了我的主旋律&#xff0c;一共发布了561篇文章&#xff0c;其中包含 368篇华为OD机试的文章&#xff1b;100篇Java基础的文章40多篇MongoDB、Redis的文章&#xff1b;30多篇数据库的文章&#xff1b;2…

Android Canvas图层saveLayer剪切clipPath原图addCircle绘制对应圆形区域,Kotlin(2)

Android Canvas图层saveLayer剪切clipPath原图addCircle绘制对应圆形区域&#xff0c;Kotlin&#xff08;2&#xff09; 在 Android Canvas图层saveLayer剪切clipRect原图对应Rect区域&#xff0c;Kotlin&#xff08;1&#xff09;-CSDN博客 的基础上&#xff0c;把矩形切图&a…

【Project】TPC-Online Module (manuscript_2024-01-07)

PRD正文 一、概述 本模块实现隧道点云数据的线上汇总和可视化。用户可以通过注册和登录功能进行身份验证&#xff0c;然后上传原始隧道点云数据和经过处理的数据到后台服务器。该模块提供数据查询、筛选和可视化等操作&#xff0c;同时支持对指定里程的分段显示和点云颜色更改…