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

一、注意力机制

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 预训练包括两个任务:掩蔽语言模型和下一句预测

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

二 、大纲回顾

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

强化学习Double DQN方法玩雅达利Breakout游戏完整实现代码与评估pytorch

1. 实验环境 1.1 硬件配置 处理器:2*AMD EPYC 7773X 64-Core内存:1.5TB显卡:8*NVIDIA GeForce RTX 3090 24GB 1.2 工具环境 Python:3.10.12Anaconda:23.7.4系统:Ubuntu 22.04.3 LTS (GNU/Linux 5.15.0-…

H264/AVC的句法和语义

概述 码流的基本单位: 在编码器输出的码流中,数据的基本单位是句法元素,每个句法元素由若干比特组成,它表示某个特定的物理意义 ,比如宏块类型、量化参数等。 句法:句法表征句法元素的组织结构。 语义&a…

Fluids —— Volume VOP

P,当前体素位置;density,此场的值;ix, iy, iz,体素索引(0 ~ res-1);resx, resy, resz,当前volume的精度;center,当前volume的中心点;o…

MYSQL学习之buffer pool的理论学习

MYSQL学习之buffer pool的理论学习 by 小乌龟 文章目录 MYSQL学习之buffer pool的理论学习一、buffer pool是什么?二、buffer pool 的内存结构三、buffer pool 的初始化和配置初始化配置 四、buffer pool 空间管理LRU淘汰法冷热数据分离的LRU算法 一、buffer pool是…

大模型第三节课程笔记

大模型开发范式 优点:具有强大语言理解,指令跟随,和语言生成的能力,具有强大的知识储备和一定的逻辑推理能力,进而能作为基座模型,支持多元应用。 不足:大模型的知识时效性受限,大模…

OLED透明屏多少钱一平方,价格影响因素、计算方法与规格种类

OLED透明屏,以其独特的透明度和出色的画质,正逐渐成为高端显示市场的宠儿。但对于消费者来说,最关心的莫过于其价格。本文将详细解析OLED透明屏的价格,包括影响因素、计算方法以及规格种类。 一、影响因素 OLED透明屏的价格受到多…

Nessus漏洞扫描工具安装、使用技巧及注意事项

Nessus是一款功能强大的安全评估工具,它可以帮助安全团队快速发现网络中潜在的安全风险和漏洞,并对其进行评估和修复。对于渗透测试人员来说,Nessus更是必不可少的工具之一。 1. Nessus安装 获取安装包,官网地址:http…

【Java并发】聊聊concurrentHashMap的put核心流程

结构介绍 1.8中concurrentHashMap采用数组链表红黑树的方式存储,并且采用CASSYN的方式。在1.7中主要采用的是数组链表,segment分段锁reentrantlock。本篇主要在1.8基础上介绍下. 那么,我们的主要重点是分析什么呢,其实主要就是p…

业界首款PCIe 4.0/5.0多通道融合接口SSD技术解读

之前小编写过一篇文章劝大家不要碰PCIe 5.0 SSD,详细内容,可以再回顾下: 扩展阅读:当下最好不要入坑PCIe 5.0 SSD 如果想要进一步了解PCIe 6.0,欢迎点击阅读: 浅析PCIe 6.0功能更新与实现的挑战 PCIe 6.…

【强化学习的数学原理-赵世钰】课程笔记(五)蒙特卡洛方法

目录 一.内容概述 二.激励性实例(Motivating examples) 三.最简单的基于 MC 的 RL 算法:MC basic 1.将策略迭代转换为无模型迭代(Convert policy iteration to be model-free) 2.The MC Basic algorithm 3.例子 …

无人驾驶卡尔曼滤波

无人驾驶卡尔曼滤波(行人检测) x k a x k − 1 w k x_k ax_{k-1} w_k xk​axk−1​wk​ w k w_k wk​:过程噪声 状态估计 估计飞行器状态(高度) x k z k − v k x_k z_k - v_k xk​zk​−vk​ 卡尔曼滤波通…

vivado 导入工程、TCL创建工程命令、

导入外部项目 您可以使用导入在Vivado IDE外部创建的现有RTL级项目文件Synopsys Synplify。Vivado IDE检测项目中的源文件并自动添加文件到新项目。设置,如顶部模块、目标设备和VHDL库 分配是从现有项目导入的。 1.按照创建项目中的步骤进行操作。 2.在“项目类…

Linux学习(13)——系统安全及应用

一、账号安全基本措施 1、系统账号清理 将非登录用户的Shell设为/sbin/nologin,及将用户设置为无法登录 锁定长期不使用的账户 删除无用的账户 锁定账户密码 本质锁定 shell——/sbin/nologin却比较特殊,所谓“无法登陆”指的仅是这个用户无法使用bash或其他sh…

忆阻器芯片STELLAR权重更新算法(清华大学吴华强课题组)

参考文献(清华大学吴华强课题组) Zhang, Wenbin, et al. “Edge learning using a fully integrated neuro-inspired memristor chip.” Science 381.6663 (2023): 1205-1211. STELLAR更新算法原理 在权值更新阶段,只需根据输入、输出和误差…

Qt/QML编程学习之心得:一个蓝牙音乐播放器的实现(30)

蓝牙bluetooth作为一种短距离的通信方式应用也是越来越广,比如很多智能家居、蓝牙遥控器、蓝牙音箱、蓝牙耳机、蓝牙手表等,手机的蓝牙功能更是可以和各种设备进行互联,甚至可以连接到车机上去配合wifi提供投屏、音乐等。那么如何在中控IVI上使用Qt来实现一个蓝牙音乐播放器…

山东名岳轩印刷包装携专业包装袋盛装亮相2024济南生物发酵展

山东名岳轩印刷包装有限公司盛装亮相2024第12届国际生物发酵展,3月5-7日山东国际会展中心与您相约! 展位号:1号馆F17 山东名岳轩印刷包装有限公司是一家拥有南北两个生产厂区,设计、制版、印刷,营销策划为一体的专业…

编译原理期末大题步骤——例题

一、预测分析方法步骤 提取左公因子,消除左递归判断文法是否为LL(1)文法若是,构造预测分析表;否则,不能进行分析。根据预测分析表对输入串进行分析 例子: 文法G[E]: …

C#:让不安全代码(unsafe)运行起来

C#:让不安全代码(unsafe)运行起来 当我们VS中编写unsafe代码时,显示不能运行 这时只需要按照这里的提示,修改我们的属性设置即可 这样就可以运行了

AQS应用之BlockingQueue详解

概要 AQS全称是 AbstractQueuedSynchronizer,中文译为抽象队列式同步器。BlockingQueue,是java.util.concurrent 包提供的用于解决并发生产者 - 消费者问题的最有用的类,它的特性是在任意时刻只有一个线程可以进行take或者put操作&#xff0…

近似点梯度法

最优化笔记——Proximal Gradient Method 最优化笔记,主要参考资料为《最优化:建模、算法与理论》 文章目录 最优化笔记——Proximal Gradient Method一、邻近算子(1)定义 二、近似点梯度法(1)迭代格式&…