[公开课学习]台大李宏毅-自注意力机制 Transformer

自注意力机制

存在一些问题,将vector set/sequence作为input,例如:

  • 文字处理:将文字用one-hot表示,或者向量空间的向量表示,然后进行翻译任务等
  • 语音处理:25ms音频作为一个向量,10ms间隔采集下一个window音频,整个音频文件作为输入,对应多个音频向量
  • 社交图/分子图处理:每个节点看成一个向量,图就是vector set

对应的,输出结果有以下可能:
每个向量有一个输出结果,被称为sequence labeling任务,例如:

  • POS tagging(词性标注):每个词对应一个词性输出
  • 图的节点处理:每个节点对应一个分类标签

整个向量序列只有一个输出结果,例如:

  • sentiment analysis(情感分析):一句话对应一个情感分析结果
  • 语者辨认:听一段声音,判断是谁讲的
  • 分子的性质:给一个分子图,判断其毒性等特性

不知道有多少输出结果,被称为seq2seq任务,例如:

  • 文本翻译
  • 语音辨识
    在这里插入图片描述
    对于sequence labeling任务,可以借助FC和附近窗口,来获取周围的信息。但是这仍然不能保证窗口能观察到整个sequence的信息。
    在这里插入图片描述
    因此引出了self-attention,它能让输入向量/隐层向量(如果有多层self-attention,第二层self-attention的输入就可能是隐层向量),在考虑整个sequence的向量后,输出一个向量。
    在这里插入图片描述

Self-attention的计算原理

1.以输入向量 a 1 a^1 a1为例,计算sequence中的所有向量与 a 1 a^1 a1的相关性,称为attention score.
在这里插入图片描述
计算的方式有两种(一般采用Dot-product方法):

  • Dot-product:考虑两个向量的attention score,先将这两个向量乘以权重矩阵得到向量 q q q k k k,再计算.
  • Additive:考虑两个向量的attention score,先将这两个向量乘以权重矩阵得到向量 q q q k k k,再拼接起来,经过tanh和一个线性层,得到结果.
    在这里插入图片描述
    注意:计算的结果要经过softxmax进行归一化处理,才得到真正的attention score。
    在这里插入图片描述
    2.根据attention score,抽取对应向量的重要资讯:具体地,每个向量乘以权重矩阵,得到向量 v v v,然后 v v v都去乘以attention score并相加。
    在这里插入图片描述

Self-attention的计算特点(可并行计算)

  1. 计算q,k,v可并行
  • query向量 q q q可以同时被计算出来
  • key向量 k k k可以同时被计算出来
  • value向量 v v v可以同时被计算出来

在这里插入图片描述

2.计算attention score可并行
在这里插入图片描述
3.计算输出向量可并行
在这里插入图片描述

综合上面的结果: 从输入向量矩阵 I I I到输出向量矩阵 O O O,都可以并行计算。
在这里插入图片描述

Multi-head Self-attention

可能需要不同的self-attention模块学习到不同种类的相关性,因此引入Multi-head Self-attention.
在这里插入图片描述
在这里插入图片描述

Positional Encoding

self-attention其实并没有位置的资讯。因此,考虑为每个位置单独设定一个位置向量 e i e^i ei。但是这个位置向量其实是“人为设置”的。
在这里插入图片描述

应用

In NLP

self-attention在NLP的应用,包括:Transformer,Bert

In Speech

由于语音往往有很长的向量序列,这会导致attention matrix很大,难以处理。
一个处理的技巧是Truncated Self-attention,即不看整个序列,而看一个范围。

在这里插入图片描述

In Image

图片也可以被看成是vector set,其中的一个vector是三维向量。

在这里插入图片描述

self-attention vs CNN

事实上,self-attention可以看成是复杂化的CNN,而CNN可以看成是简化的self-attention。self-attention的感受野是学到的,而CNN的感受野是人为定义的。
在这里插入图片描述
这种角度看,self-attention更加flexible,但是也意味着需要更多数据才不会overfitting。如下图,当数据量较少的时候,更不flexible的CNN的效果比较好,但随着数据量增大,更flexible的Self-attention则更好。

在这里插入图片描述

self-attention vs CNN

相似点:
1.输入都是vector sequence
2.都是sequence labeling,一个input向量对应有一个output向量

不同点:
1.self-attention的输出向量考虑了整个sequence的向量,而一般RNN的输出向量只考虑了sequence左边的向量(但实际上也有双向的RNN可以考虑双边的向量)。
2.RNN最右边的hidden vector很难回忆起最左边的输入向量的信息(因为这要求该信息一层层保存而不丢失),而self-attention则容易的多。
3.RNN是不可并行的,而self-attention是可并行的。
在这里插入图片描述

In Graph

因为图已经有了边,所以不需要计算没有边的attention score。
在这里插入图片描述

Transformer

Transformer是为了解决seq2seq的问题。
具体的例子有:语音辨识;语音合成;聊天机器人;QA问题(很多NLP任务都可以看成是QA);文法剖析(如下下图,目标是根据一个句子,写出他的文法树);Multi-label classficitaion(一个样本对应多个label);目标检测等。
在这里插入图片描述
在这里插入图片描述
接下来介绍seq2seq模型,它一般包含两个部分,encoderdecoder
encoder负责处理sequence,decoder负责决定要输出什么样的sequence。

在这里插入图片描述

Encoder

Encoder的目标是输入一排向量,输出一排向量。其实RNN和CNN也可以做。但是Transformer里是采用Self-attention实现的。
在这里插入图片描述

解析每个Encoder-block

1.输入向量经过self-attention(Multi-head self attention)的输出向量和residual向量(输入向量)相加得到向量。
注意:最初的输入向量有包含Positional Encoding向量。
2.进行Layer Normalizaiton。
注意:Layer Normalizaiton不同于Batch Normalization,前者会求一个向量不同维度的均值和标准差,进行归一化。后者是求同一个维度不同向量的均值和标准差,进行归一化。
3.2中的向量经过全连接层的输出向量和residual向量(2中的向量)相加得到向量。
4.进行Layer Normalization。
在这里插入图片描述
补充说明:事实上,有研究表明:
1.不在输出之后做Layer Normalization,而是在进行网络计算前进行Layer Normalization,效果会更好。
2.Batch Normalization不如Layer Normalization。
在这里插入图片描述

Decoder

AutoRegressive(AT)

在这里插入图片描述

Masked Self-attention

所谓的masked self-attention,就是求当前向量关于其他向量的attention score,只能考虑在它前面的向量,不能考虑之后的向量。
在这里插入图片描述
以计算b2为例。
在这里插入图片描述
Decoder输出END
在这里插入图片描述

Non-autoRegressive(NAT)

NAT的decoder是将一整排begin的token作为输入,同时生成输出。
如何知道输出的长度
1.另外学一个模型,预测输出的长度
2.给一个输出长度的上限,当生成的输出有end,就将end后面的内容截断。

NAT的decoder的优点是并行,可控长度(在语音合成里面,输出长度减半,可以让语音速度变快)。
NAT的缺点是表现往往不如AT的decoder。

Encoder和Decoder之间如何传递资讯-Cross attention

在这里插入图片描述
Encoder会传过来K和V矩阵,而Decoder这边,经过masked multi-head attention,会传入Q矩阵。这个Q,K,V矩阵会进行multi-head-attention过程(也称为cross attetnion)。
在这里插入图片描述
PS:在Transformer原始论文中,Decoder的每一层Cross-attention都是拿Encoder最后一层的输出作为K和V。但是不一定需要这样,也有研究者在研究其他连接方式。

Training

以上讲的是推理过程。下面讲如何训练。(仍以语音识别为例)
1.构建数据集。声音讯号-对应标签。
2.Cross-entropy作为loss function。
注意:训练时,decoder的输入是ground truth,也就是会给decoder看正确答案。这种使用ground truth作为输入的技术被称为Teacher Forcing

在这里插入图片描述

训练seq2seq模型(Transformer)的技巧

Copy mechanism

有些句子其实是需要复制出来。比如复制名称,简写摘要。解决方案详见:
在这里插入图片描述

Guided Attention

机器可能会漏掉一些讯息。在一些任务中,漏掉讯息是不可接受的,比如语音辨识,语音合成。解决方案:
在这里插入图片描述

Beam search

每次decoder都是贪心选择,但这不一定能保证全局最优。beam search方法可以获得一定程度上的更全局的优解。
注意:在一些创造性的任务中,比如语音合成,写文章,那么不适合用beam search找分数最高的路,而需要引入一些随机性。在答案明确的任务,比如语音辨识中,beam search则比较适合。
在这里插入图片描述

评价模型的指标-BLEU score

decoder产生完整句子后,再和正确答案去比较,得到BLUE score。
训练的时候,最小化cross entropy。
评价,模型选择的时候,是看BLUE score的。
训练的时候看BLUE score,很难训练,因为不容易算梯度。(当然也可以用RL的技术强行训练)。
在这里插入图片描述

exposure bias

在训练时,decoder的输入是ground truth,在推理时,decoder的输入可能不是正确的。这中间存在mismatch,称为exposure bias。这可能导致模型推理效果不理想。一种解决办法实际上是在训练的时候,输入并不完全用ground truth,这一定程度上在训练时,引入了随机性,这一种方法被称为Scheduled Sampling

在这里插入图片描述
关于Scheduled Sampling技术可以详细看下面的文章。
在这里插入图片描述

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

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

相关文章

Day_2

1. 菜品管理 新增菜品 接口设计 1. 根据类型查询分类(分类管理已完成) 查看接口文档即可 2. 文件上传 创建Bucket 采用的是阿里云的OSS对象存储服务 新增AccessKey 3. 菜品的新增逻辑 代码开发 1. 文件上传接口开发 为了提高代码的解耦性&#…

Javaweb项目 博客系统(后端代码编写)

准备工作,创建项目 引入依赖 1.servlet 2.mysql 3.jackson 导入前端代码 1.博客列表页 2.博客详情页 3.登录页 4.博客编辑页 接下来要进行的操作就是两大方面 1.前端和服务器的交互 2.服务器和数据库的交互 进行数据库设计创建数据库和数据表 一把需要把建库建表的操作写错sq…

嘉楠堪智 CanMV K230 进行 Linux、RT-smart 系统开发

本文记录学习、使用 K230 SDK 进行 Linux、RT-smart 系统的开发的一些关键步骤,如何获取系统源代码,如何配置环境,如何使用 Docker 进行编译,获得系统文件。 具体详细的教程,可以学习 CanMV K230 教程。 目录 一、S…

YoloV8改进策略:BackBone改进DCNv4

摘要 涨点效果:在我自己的数据集上,mAP50 由0.986涨到了0.993,mAP50-95由0.737涨到0.77,涨点明显! DCNv4是可变形卷积的第四版,速度和v3相比有了大幅度的提升,但是环境搭建有一定的难度,对新手不太友好。如果在使用过程遇到编译的问题,请严格按照我写的环境配置。 Y…

【大学物理】双语合集听课笔记

7.5 angular momentu(角动量)_哔哩哔哩_bilibili 6.4Energy in Rotation Motion 有质量有速度的物体有动能,是不是很有道理 international system(from French systeme international,acronym,SI)of ineria kg*m^2 转…

单片机-点亮第一盏灯

原理图 需求:点亮或是熄灭LED 通过控制 P5.3引脚输出高电平时,LED灯就点亮,输出低电平时LED灯就熄灭 1.项目创建 新建项目 配置开发板信息 当前位STC芯片的开发板,选择STC MCU Database 搜素具体芯片型号,进行配置…

【Android】Room数据库的简单使用方法

Room数据库的使用方法 目录 1、添加Room数据库的依赖2、Entity——定义实体类 2.1 定义主键——PrimaryKey2.2 字段注解——ColumnInfo 3、Dao——定义数据访问对象4、Database——数据库 4.1 通过回调观察数据库是否创建成功 5、使用时注意点6、编写异步 DAO 查询 6.1 写异步…

pytorch基础: torch.unbind()

1. torch.unbind 作用 说明:移除指定维后,返回一个元组,包含了沿着指定维切片后的各个切片。 参数: tensor(Tensor) – 输入张量dim(int) – 删除的维度 2. 案例 案例1 x torch.rand(1,80,3,360,360)y x.unbind(dim2)print(&…

【进程等待】是什么 | 为什么 | 怎么办 | wait阻塞等待

目录 进程等待是什么? 为什么要进程等待? 如何进程等待? wait 阻塞等待 进程等待是什么? 进程终止会把进程退出的数据(退出码和退出信号)存放到进程的PCB中保存下来,让父进程进行等待。…

电脑提示‘找不到msvcr110dll,无法继续执行代码’的解决方法,3分钟快速修复

不知道大家有没有遇到过这种情况,无端端电脑提示你找不到msvcr110dll,无法继续执行代码?当出现这个情况,证明你的某个程序就已经运行不了,你需要去修复这个错误,才能正常的运行程序,下面我们一起来详细的了…

【算法】并查集

并查集是一种树形的数据结构,通常可以用于高效的合并多个集合和查询两个数是否属于同一个集合的情况。 其原理在于,把每个集合变成一棵树,树根的值就是整个集合的编号 其合并集合的效率远远高出普通的方式,近似O(1) 但是&#…

ChatGLM-Math:强化数学能力

大型语言模型(LLM)在文本摘要、问答和角色扮演对话等语言任务上表现出色,在数学推理等复杂问题上也具有应用潜力。 但目前提高 LLM 数学问题解决能力的方法,往往会导致其他方面能力的下降。例如RLHF的方法,虽然可以提…