[公开课学习]台大李宏毅-自注意力机制 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.mfbz.cn/a/604568.html

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

相关文章

初识C++ · 模板初阶

目录 1 泛型编程 2 函数模板 3 类模板 1 泛型编程 模板是泛型编程的基础,泛型我们碰到过多次了,比如malloc函数返回的就是泛型指针,需要我们强转。 既然是泛型编程,也就是说我们可以通过一个样例来解决类似的问题&#xff0c…

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(&…

gitlab集群高可用架构拆分部署

目录 前言 负载均衡器准备 外部负载均衡器 内部负载均衡器 (可选)Consul服务 Postgresql拆分 1.准备postgresql集群 手动安装postgresql插件 2./etc/gitlab/gitlab.rb配置 3.生效配置文件 Redis拆分 1./etc/gitlab/gitlab.rb配置 2.生效配置文件 Gitaly拆分 1.…

BACnet转MQTT网关智联楼宇json格式自定义

智能建筑的BACnet协议作为楼宇自动化领域的通用语言,正逐步迈向更广阔的物联网世界。随着云计算和大数据技术的飞速发展,如何将BACnet设备无缝融入云端生态系统,成为众多楼宇管理者关注的焦点。本文将以一个实际案例,揭示BACnet网…

60、郑州大学附属肿瘤医院 :用于预测胃癌患者术后生存的深度学习模型的开发和验证[同学,我们的人生应当是旷野]

馒头老师要说的话: 我近期看了一下北京的脑机公司,大概是我之前对这一行业太过于乐观,北京的BCI公司和研究所,比上海、深圳、杭州甚至是重庆都要少,门槛也要高很多。也有我自己的原因,有时站的太高&#x…

92、动态规划-最小路径和

思路: 还是一样,先使用递归来接,无非是向右和向下,然后得到两种方式进行比较,代码如下: public int minPathSum(int[][] grid) {return calculate(grid, 0, 0);}private int calculate(int[][] grid, int …

ubuntu_Docker安装配置

什么是docker? Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有…

为什么要梯度累积

文章目录 梯度累积什么是梯度累积如何理解理解梯度累积梯度累积的工作原理 梯度累积的数学原理梯度累积过程如何实现梯度累积 梯度累积的可视化 梯度累积 什么是梯度累积 随着深度学习模型变得越来越复杂,模型的训练通常需要更多的计算资源,特别是在训…

深度学习笔记_10YOLOv8系列自定义数据集实验

1、mydaya.yaml 配置方法 # 这里分别指向你训练、验证、测试的文件地址,只需要指向图片的文件夹即可。但是要注意图片和labels名称要对应 # 训练集、测试集、验证机文件路径,可以是分类好的TXT文件,也可以直接是图片文件夹路径 train: # t…

Litedram仿真验证(四):AXI接口完成板级DDR3读写测试(FPGA-Artix7)

目录 日常唠嗑一、仿真中遗留的问题二、板级测试三、工程获取及交流 日常唠嗑 接上一篇Litedram仿真验证(三):AXI接口完成仿真(FPGA/Modelsim)之后,本篇对仿真后的工程进行板级验证。 本次板级验证用到的开…

学成在线 - 第3章任务补偿机制实现 + 分块文件清理

7.9 额外实现 7.9.1 任务补偿机制 问题:如果有线程抢占了某个视频的处理任务,如果线程处理过程中挂掉了,该视频的状态将会一直是处理中,其它线程将无法处理,这个问题需要用补偿机制。 单独启动一个任务找到待处理任…

Layer1 公链竞争破局者:Sui 生态的全面创新之路

随着 Sui 生态逐渐在全球范围内树立起声望,并通过与 Revolut 等前沿金融科技平台合作,推广区块链教育与应用,Sui 生态的未来发展方向已成为业界瞩目的焦点。如今,Sui 的总锁定价值已攀升至 5.93 亿美元,充分展示了其在…

分布式架构的演技进过程

最近看了一篇文章,觉得讲的挺不错,就借机给大家分享一下。 早期应用:早期的应用比较简单,访问人数有限,大部分的开发单机就能完成。 分离模型:在业务发展后,用户数量逐步上升,服务器的性能出现瓶颈;就需要将应用和数据分开存储,避免相互抢占资源。 缓存模式:随着系…

历代著名画家作品赏析-东晋顾恺之

中国历史朝代顺序为:夏朝、商朝、西周、东周、秦朝、西楚、西汉、新朝、玄汉、东汉、三国、曹魏、蜀汉、孙吴、西晋、东晋、十六国、南朝、刘宋、南齐、南梁、南陈、北朝、北魏、东魏、北齐、西魏、北周、隋,唐宋元明清,近代。 一、东晋著名…

现身说法暑期三下乡社会实践团一个好的投稿方法胜似千军万马

作为一名在校大学生,去年夏天我有幸参与了学院组织的暑期大学生三下乡社会实践活动,这段经历不仅让我深入基层,体验了不一样的生活,更是在新闻投稿的实践中,经历了一次从传统到智能的跨越。回忆起那段时光,从最初的邮箱投稿困境,到后来智慧软文发布系统的高效运用,每一步都刻印…

顺序栈的操作

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝既然选择了远方,当不负青春…

什么是DDoS攻击?DDoS攻击的原理是什么?

一、DDoS攻击概念 DDoS攻击又叫“分布式拒绝服务”(Distributed DenialofService)攻击,它是一种通过控制大量计算机、物联网终端或网络僵尸(Zombie)来向目标网站发送大量请求,从而耗尽其服务器资源,导致正常用户无法访…

WEB基础--JDBC操作数据库

使用JDBC操作数据库 使用JDBC查询数据 五部曲:建立驱动,建立连接,获取SQL语句,执行SQL语句,释放资源 建立驱动 //1.加载驱动Class.forName("com.mysql.cj.jdbc.Driver"); 建立连接 //2.连接数据库 Stri…

【3dmax笔记】026:挤出和壳修改器的使用

文章目录 一、修改器二、挤出三、壳 一、修改器 3ds Max中的修改器是一种强大的工具,用于创建和修改复杂的几何形状。这些修改器可以改变对象的形状、大小、方向和位置,以生成所需的效果。以下是一些常见的3ds Max修改器及其功能: 挤出修改…

Google Earth Engine谷歌地球引擎计算遥感影像在每个8天间隔内的多年平均值

本文介绍在谷歌地球引擎(Google Earth Engine,GEE)中,求取多年时间中,遥感影像在每1个8天时间间隔内的多年平均值的方法。 本文是谷歌地球引擎(Google Earth Engine,GEE)系列教学文章…
最新文章