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

news2024/11/19 9:26:34

自注意力机制

存在一些问题,将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.coloradmin.cn/o/1655436.html

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

相关文章

开源离线AI笔记应用

前言 Reor 是一款人工智能驱动的桌面笔记应用程序,它能自动链接相关笔记、回答笔记中的问题并提供语义搜索。所有内容都存储在本地,支持 Windows、Linux 和 MacOS。Reor 站在 Ollama、Transformers.js 和 LanceDB 等巨头的肩膀上,使 LLM 和嵌…

C# WCF服务(由于内部错误,服务器无法处理该请求。)

由于内部错误&#xff0c;服务器无法处理该请求。有关该错误的详细信息&#xff0c;请打开服务器上的 IncludeExceptionDetailInFaults (从 ServiceBehaviorAttribute 或从 <serviceDebug> 配置行为)以便将异常信息发送回客户端&#xff0c;或打开对每个 Microsoft .NET …

vue3创建响应式数据ref和reactive的区别

reactive和ref在Vue.js中都是用于创建响应式数据的&#xff0c;但它们之间存在一些区别 定义数据类型不同。ref主要用于定义基本数据类型&#xff0c;如字符串、数字、布尔值等&#xff1b;reactive主要用于定义对象&#xff08;或数组&#xff09;类型的数据&#xff0c;但re…

基于单片机的小型自动浇灌系统设计

摘 要:以单片机为主控芯片,结合传感器和计算机,搭建了一套智能化的浇灌系统;利用LabVIEW 设计并编写了基于状态机程序架构的上位机软件,实现了友好的用户交互界面,实时测量、显示与记录等功能,并由主控芯片进行浇灌。经测试,本系统具有结构简单,研制成本低,运…

STM32学习计划

前言&#xff1a; 这里先记录下STM32的学习计划。 2024/05/08 今天我正在学习的是正点原子的I.MX6ULL APLHA/Mini 开发板的 Linux 之ARM裸机第二期开发的视频教程&#xff0c;会用正点原子的I.MX6ULL开发板学习第二期ARM裸机开发的教程&#xff0c;然后是学习完正点原子的I.M…

别出心裁的自动化网页数据采集:Chrome插件和mitmproxy

别出心裁的自动化网页数据采集&#xff1a;Chrome插件和mitmproxy 前言 在信息时代&#xff0c;数据已成为决策的关键。传统的数据采集方法往往依赖于手动操作或简单的自动化脚本&#xff0c;这限制了数据的时效性和精确性。为了克服这些限制&#xff0c;本文介绍了一种结合C…

基于docker安装flink

文章目录 环境准备Flinkdocker-compose方式二进制部署 KafkaMysql Flink 执行 SQL命令进入SQL客户端CLI执行SQL查询表格模式变更日志模式Tableau模式窗口计算 窗口计算滚动窗口demo滑动窗口 踩坑 环境准备 Flink docker-compose方式 version: "3" services:jobman…

与时代同行,Build with AI 2024 线下活动五月再次开放报名

技术开发日新月异&#xff0c;软硬件迭代和应用场景多样化对开发者提出了更多挑战。面对科技发展潮流&#xff0c;GDG (谷歌开发者社区) 一直秉承开放共创的精神&#xff0c;以热忱之心与开发者们一同探索 AI 的广阔发展前景。 在过去的四月里&#xff0c;我们在北京、上海、深…

数据结构之单单单——链表

一.链表 1&#xff09;链表的概念 链表&#xff08;Linked List&#xff09;是一种物理存储结构上非连续&#xff0c;非顺序的储存结构&#xff0c;数据元素的逻辑顺序是通过链表中指针链接次序实现的。要注意&#xff0c;链表也是线性表----->但链表在物理结构上不是线性的…

docker学习笔记(三)搭建NFS服务实验

目录 什么是NFS 简单架构​编辑 一.搭建nfs服务器 二.新建共享目录和网页文件 三.设置共享目录 四&#xff1a;创建使用nfs共享目录的卷 五&#xff1a;创建容器使用nfs-web-1卷 六&#xff1a;测试访问 七&#xff1a;是否同步测试 什么是NFS NFS 服务器&#xff1a;ne…

1688数据分析实操技巧||1688商品数据采集接口 数据分析

今天&#xff0c;聊一聊B2B平台的数据分析&#xff0c;以1688国内站为例。 1688平台数据接口 1688也属于阿里巴巴的体系&#xff0c;跟淘宝天猫运营很像&#xff0c;因此很多淘宝天猫的玩法调整后也适用于1688。数据分析也是如此。 在1688搞数据分析&#xff0c;搞数据化运营可…

【Ansible】ansible-playbook剧本

playbook 是ansible的脚本 playbook的组成 1&#xff09;Tasks&#xff1a;任务&#xff1b;通过tasks 调用ansible 的模板将多个操作组织在一个playbook中运行 2&#xff09;Variables&#xff1a;变量 3&#xff09;Templates&#xff1a;模板 4&#xff09;Handles&#xf…

Xilinx FPGA底层逻辑资源简介(1):关于LC,CLB,SLICE,LUT,FF的概念

LC&#xff1a;Logic Cell 逻辑单元 Logic Cell是Xilinx定义的一种标准&#xff0c;用于定义不同系列器件的大小。对于7系列芯片&#xff0c;通常在名字中就已经体现了LC的大小&#xff0c;在UG474中原话为&#xff1a; 对于7a75t芯片&#xff0c;LC的大小为75K&#xff0c;6输…

【YOLOv8改进[Backbone]】使用SCINet改进YOLOv8在黑暗环境的目标检测效果

目录 一 SCINet 1 本文方法 ① 权重共享的照明学习 ② 自校准模块 ③ 无监督训练损失 二 使用SCINet助力YOLOv8在黑暗环境的目标检测效果 1 整体修改 2 配置文件 3 训练 其他 一 SCINet 官方论文地址&#xff1a;https://arxiv.org/pdf/2204.10137 官方代码地址&…

01-单片机商业项目编程,从零搭建低功耗系统设计

一、引言 这是关于《单片机商业编程之从零搭建低功耗系统》的第一篇章&#xff0c;个人善忘&#xff0c;平常项目设计当中的一些思路&#xff0c;以前年轻的时候习惯性的录制成视频&#xff0c;也算是当作是自己的笔记&#xff0c;无奈现在喉咙实在扛不住&#xff0c;因此先尝试…

ElementUI Select选择器多选获取选中对象

html <el-form-item label"账户标签&#xff1a;" prop"tags"><el-selectstyle"width: 500px"value-key"tagId"v-model"form.tags"clearablefilterablemultipleplaceholder"请搜索选择账户标签"><…

SQL查询语句(四)模糊查询

前文介绍的查询语句&#xff0c;无论是利用常规的数学运算符&#xff0c;还是IN&#xff0c;BETWEEN和EXISTS等范围查询关键字&#xff0c;本质上都属于精确查询的范围&#xff0c;也就是说&#xff0c;我们在条件中写明了完全限定死的条件。而有些场景&#xff0c;我们的条件并…

《视觉十四讲》例程运行记录(1)—— 课本源码下载和3rdparty文件夹是空的解决办法

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、第二版十四讲课本源码下载1. 安装git工具 二、Pangolin下载和安装1. 源码下载2. Pangolin的安装(1) 安装依赖项(2) 源码编译安装(2) 测试是否安装成功 二、…

PHPStudy 访问网页 403 Forbidden禁止访问

涉及靶场 upload-labd sqli-labs pikachu dvwa 以及所有部署在phpstudy中的靶场 注意&#xff1a;一定要安装解压软件 很多同学解压靶场代码以后访问报错的原因是&#xff1a;电脑上没有解压软件。 这个时候压缩包看起来就是黄色公文包的样子&#xff0c;右键只有“全部提取…

基于C语言中的类型转换,C++标准创造出了更加可视化的类型转换

目录 前言 一、 C语言中的类型转换 二、为什么C需要四种类型转换 三、C中新增的四种强制类型转换操作符以及它们的应用场景 1.static_cast 2.reinterpret_cast 3.const_cast 4.dynamic_cast 前言 在C语言中&#xff0c;如果赋值运算符左右两侧的类型不同&#xff0c;或者…