当前位置: 首页 > news >正文

Transformer 01(自注意机制Self-attention)

一、Self-attention

[台大李宏毅] 

1.1 向量序列的输入

一个序列作为输入:

多个向量输入举例:
一个句子:

声音信号:

图:

1.2 输出

二、Sequence labeling

输入与输出一样多:Sequence labeling

窗口开的太大,对于每个FC network的参数量会变的很多,计算量很大,那怎么办?Self-attention

三、self-attention

self-attention可以得到一整个序列作为输入 ,输出的每个向量是考虑一整个句子的向量,然后输入到FC中:

self-attention可以叠加:

3.1 self-attention运作机制

找到a1和其他输入的相关性:

a1和a4的相关性是由谁确定的呢? 左边方法最常用

a1分别与其他向量输入做关联性:

a1也会与自己进行关联性计算:

得到α后,需要提取出基于注意力得分的信息:

乘以Wv得到新的向量

新的向量乘以α,然后相加

b1 ... b4是同时计算出来的

从矩阵乘法角度分析运作机制:

[参考]

输入X和三个矩阵相乘分别得到三个矩阵Q,K,V。Q是我们正要查询的信息,K是正在被查询的信息,V就是被查询到的内容

为什么求权重矩阵时候要开根号[参考]?

在我们的两个向量维度非常大的时候,点乘结果的方差也会很大,也就是结果中的元素差距很大,在点乘的值非常大的时候,softmax的梯度会趋近于0,也就是梯度消失。

在原文中有提到,假设q和k的元素是相互独立,维度为dk的随机变量,它们的平均值是0,方差为1,那么g和k的点乘的平均值为0,方差为dk;如果将点乘的结果进行缩放操作,也就是除以dk,就可以有效控制方差从dk回到1,也就是有效控制梯度消失的问题

3.2 multi-head self-attention

Attention机制又为什么需要多头?

原文里提到使用多头注意力的原因是让模型从多个子空间中关注到不同方面的信息。比如我们在学一门外语,现在有一个外语例句,我们去找不同的老师答疑,有的老师告诉了我们每个词的意思,另一个老师告诉我们哪个指代的是哪个词,还有一个老师给我们讲解了一下这句话的语法。我们把几位老师的回答进行一下总结,就可以比较全面地理解这个句子。当然,也不是问的人越多得到的信息就越准确。attention也不一定头越多效果越好

在进入前馈层之前,我们还有个额外的小操作

现在的我们看到的示意图中,每个子层后面多了一个Add&Norm,它又是什么呢?

 

现在我们来看看decoder,它和encoder的结构基本一样,但是多了一个注意力层

在deceder的第一个注意力后比之前encoder中的注意力层还多了一个masked前缀,那么mask操作是什么呢?我们又为什么要使用mask ?

我们需要用到的有两种mask操作。

  • 我们输入的序列长度是不一定相同的,对于长度超过我们期望的长度的序列,我们就只保留期望长度内的内容;
  • 对于长度没有达到期望的长度的序列,我们就用0来填充它,填充的位置是没有任何意义的。我们不希望attention机制给它分配任何注意力,所以我们给填充过的位置加上负无穷;

因为在计算注意力的时候我们会用到softmax函数,加上过负无穷的位置会被softmax处理变成0这个操作叫做padding mask

在翻译一句话的时候,我们希望transformer按顺序来翻译它,先翻译完前i个单词,再去预测第i+1
个单词;这样的话,我们需要阻止它去注意还不该翻译到的单词,也就是每个单词只能注意到自己和自己之前的单词。

我们用这个矩阵表示计算出来的QK^T,那我们现在要怎么样去遮住每个词后面的单词呢?

如果我们有一个和它大小相同的矩阵,灰色的部分代表被遮住的信息. 和卷积操作很像,我们把它和QK^T对应的位置相乘,再将遮挡的位置加上负无穷. 和之前的padding mask一样得到的结果经过softmax处理之后被遮住的地方就会变成0. 

除了在求权重矩阵之前需要和mask矩阵进行对位相乘,这个注意力层和其它的注意力层没有其它区别

它的Q来自上一层的masked attention的输出,K和V来自于encoder的输出
不知道大家还记不记得上一期视频的时候我强调过在机器翻译任务中,词序是很重要的

我咬狗和狗咬我这两句话,由相同的三个字组成但是表达的内容完全不一样,没有采用RNN的transformer好像没有捕捉序列信息的功能,它分不清到底是我咬了狗还是狗咬了我。啊这怎么办啊,transformer不是这块料 要不这样吧,学不会就别学了,放弃吧

 Transformer学不会的话,我们可以在transformer外面把问题解决掉嘛

如果我们将输入的文字编码成词向量的时候结合单词的位置信息,它就可以学习词序信息了

Transformer 模型是深度学习领域的一个重要突破,它在自然语言处理和其他序列建模任务中取得了巨大的成功。以下是 Transformer 模型的一些主要特点:

1. **自注意力机制(Self-Attention)**:Transformer 引入了自注意力机制,允许模型在处理序列数据时动态地关注输入序列的不同部分,而无需使用传统的递归或卷积结构。自注意力机制允许模型计算每个输入位置对每个输出位置的重要性权重,从而捕获长距离依赖关系

2. **并行计算**:由于自注意力机制的并行性,Transformer 模型可以有效地进行并行计算,加速训练过程。

3. **编码器-解码器结构**:Transformer 通常采用编码器-解码器结构,其中编码器用于将输入序列编码成固定长度的表示,而解码器则用于生成输出序列。这种结构在机器翻译等序列到序列任务中非常有用。

4. **多头注意力(Multi-Head Attention)**:Transformer 进一步扩展了自注意力机制,引入了多个注意力头,允许模型以多个不同的方式关注输入序列。这有助于模型学习更丰富和复杂的序列关系。

5. **位置编码(Positional Encoding)**:由于 Transformer 模型不包含任何序列顺序的信息,因此需要引入位置编码来将输入序列的位置信息引入模型。通常使用正弦和余弦函数来实现位置编码。

6. **残差连接和层归一化**:Transformer 使用了残差连接和层归一化来组织模型的层,以稳定训练、减轻梯度消失问题,并加速了训练过程。

7. **注意力掩码(Attention Masking)**:在自然语言处理中,Transformer 可以使用注意力掩码来限制模型在生成序列时的注意力范围,以确保模型不会看到未来的信息,从而保持因果关系。

8. **可扩展性**:Transformer 模型可以轻松扩展到处理不同长度的序列,并且可以适应各种自然语言处理任务,如文本生成、文本分类、问答等。

9. **预训练模型**:Transformer 架构启发了一系列预训练模型,如BERT(Bidirectional Encoder Representations from Transformers)和GPT(Generative Pretrained Transformer),这些模型在自然语言处理领域取得了巨大的成功。

总之,Transformer 模型的主要特点包括自注意力机制、并行计算、编码器-解码器结构、多头注意力、位置编码等,使其成为自然语言处理和其他序列建模任务中的重要工具。它的成功启发了许多后续架构的发展,并对深度学习领域产生了深远的影响。

位置编码的公式:

PE的计算结果是一个行数与序列数相等,列数和模型维度相等的矩阵
pos代表的是目前的token在序列的位置,dmodel代表模型的维度,我们现在先假设它是12吧

i是0到模型维度的二分之一减一之间的所有整数

那么2i和2i+1又代表什么呢?

2就是0到模型维度减一之间的所有偶数维度

2i+1是这个区间内的所有奇数维度

那就不难发现,这个公式用正弦函数sin来给偶数维度编码,用余弦函数CoS给奇数维度编码

是不是对示任意的相对距离K,PEpos+k可以用PEpos的线性函数表示

所以两命位置向量的点乘能够反映它们的相对距离,从而对注意力的计算产生影响

相关文章:

Transformer 01(自注意机制Self-attention)

一、Self-attention [台大李宏毅] 1.1 向量序列的输入 一个序列作为输入: 多个向量输入举例: 一个句子: 声音信号: 图: 1.2 输出 二、Sequence labeling 输入与输出一样多:Sequence labeling 窗口开的…...

交流共享,共筑智算底座丨九州未来受邀出席英特尔线下沙龙

随着AI技术的升级迭代、生成式AI模型智能化水平的持续提升,AIGC加速向多种场景渗透,AIGC迎来应用爆发期,有望实现且跨越更多领域的融合,形成新的应用场景和解决方案,持续推动数字技术的创新与应用,助力各行…...

【EI会议信息】第五届土木建筑与城市工程国际学术会议(ICCAUE 2023)

第五届土木建筑与城市工程国际学术会议(ICCAUE 2023) 2023 5th International Conference on Civil Architecture and Urban Engineering (ICCAUE 2023) 第五届土木建筑与城市工程国际学术会议(ICCAUE 2023)由天津大学主办&…...

上海亚商投顾:沪指震荡反弹 汽车产业链全天强势

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 大小指数昨日集体反弹,沪指3100点失而复得,创业板指一度涨超1.5%,随后涨幅…...

【Python深度学习】深度学习入门介绍

引言 深度学习是人工智能领域中最受关注和研究的子领域之一,它在计算机视觉、自然语言处理、语音识别、推荐系统等各个领域都有广泛的应用。本文将详细介绍深度学习的发展历史、不同类型、应用领域以及未来发展前景。 1、深度学习的发展历史 深度学习的起源可以追溯…...

【Linux系统编程】进程概念与基本创建

文章目录 1. 进程的概念2. 进程描述—PCB3. task_struct—PCB的一种4. task_ struct内容分类5. 查看进程 这篇文章我们来学习下一个概念——进程 1. 进程的概念 那什么是进程呢,我们该如何理解它呢? 如果我们打开电脑的任务管理: 我们看到这…...

webpack:详解CopyWebpackPlugin,复制的同时修改文件内容

摘要 CopyWebpackPlugin 是一个强大的 Webpack 插件,用于将文件从源目录复制到构建目录。在本文中,我们将探讨 CopyWebpackPlugin 的一些常用 API,并提供示例代码。 在构建 Web 应用程序时,通常需要将一些静态文件(如…...

Twin-Builder—系统级多物理域数字孪生平台

Twin Builder是ANSYS公司系统仿真业务的核心产品,是一款跨学科多领域系统仿真软件和数字孪生平台。能够实现复杂系统的建模、仿真和验证,基于IIoT物联网平台对数字孪生体进行集成、部署与运行,在完成复杂系统功能、性能的验证和优化的同时&am…...

用selenium和xpath定位元素并获取属性值以及str字符型转json型

页面html如图所示: 要使用xpath定位这个div元素,并且获取其属性data-config的内容值。 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.options import Optionshost127.0.0.1 port10808 …...

基于Java的电影院管理系统设计与实现

前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 👇🏻…...

Linux Static Key原理与应用

文章目录 背景1. static-key的使用方法1.1. static-key定义1.2 初始化1.3 条件判断1.4 修改判断条件 2、示例代码参考链接 背景 内核中有很多判断条件在正常情况下的结果都是固定的,除非极其罕见的场景才会改变,通常单个的这种判断的代价很低可以忽略&a…...

linux ssh 禁止指定用户通过ssh登录

Linux 禁止用户或 IP通过 SSH 登录 限制用户 SSH 登录 1.只允许指定用户进行登录(白名单): 在 /etc/ssh/sshd_config 配置文件中设置 AllowUsers 选项,(配置完成需要重启 SSHD 服务)格式如下&#xff1a…...

快速学习Netty

Netty框架探索:助力高效网络编程 一、Netty是个啥?二、“Hello World”服务器端实现(Server)客户端实现(Client)思考🤔 三、Netty的核心组件EventLoopChannelChannelPipelineChannelHandlerByte…...

对类和对象的详细解析

目录 1.类的构成 2.this指针 3.C类里面的静态成员 3.1 类里面的静态成员函数 3.2 类里面的静态成员变量 静态成员变量的特点 共享性 存储位置 生命周期 访问权限 如何初始化? 构造函数 1.类的构成 public修饰的成员在类外可以直接被访问 private和protecte…...

matlab 间接平差法拟合二维圆

目录 一、算法原理二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。爬虫自重。 一、算法原理 圆的方程为: ( x - x 0 )...

pgzrun 拼图游戏制作过程详解(10)

10. 拼图游戏继续升级——多关卡拼图 初始化列表Photos用来储存拼图文件名,Photo_ID用来统计当下是第几张拼图,Squares储存当下拼图的24张小拼图的文件名,Gird储存当下窗口上显示的24个小拼图及坐标。 Photos["girl_","boy_…...

glog与pugi::xml使用方法

(一)glog的使用:google logging的简称; 1)需要安装,网上一搜一大堆,不在赘述; 2)在cmakelists.txt中,需要链接"-glog",如&a…...

windows下MySQL服务不见,服务无法启动,服务闪退,提示“本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止”

文章目录 前情提示1.解决MySQL服务消失2.解决MySQL服务无法启动 前情提示 后台启动MySQL服务出现闪退 或 “本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止”,可以参考以下方法。 我的电脑上安装了双版本MySQL,这里…...

剑指offer(C++)-JZ67:把字符串转换成整数atoi(算法-模拟)

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。…...

嵌入式笔试面试刷题(day15)

文章目录 前言一、Linux中的主设备号和次设备号1.查看方法2.主设备号和次设备号的作用 二、软件IIC和硬件IIC的区别三、变量的声明和定义区别四、static在C和C中的区别五、串口总线空闲时候的电平状态总结 前言 本篇文章继续讲解嵌入式笔试面试刷题,希望大家坚持跟…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 ​ 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

dify打造数据可视化图表

一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...