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 服务)格式如下:…...
快速学习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中的区别五、串口总线空闲时候的电平状态总结 前言 本篇文章继续讲解嵌入式笔试面试刷题,希望大家坚持跟…...
【Docker】Dockerfile构建镜像
一、编写Dockerfile文件 编写镜像需要的运行环境(Linux、java等), Dockerfile文件内容如下: # 使用官方的 Ubuntu 16.04 镜像作为基础镜像 FROM ubuntu:16.04# 更新包列表 RUN apt-get update# 安装所需的软件包 RUN apt-get ins…...
fota升级,可卸载apk也进行更新
首先如题目要求 可卸载apk是通过刷机或恢复出厂设置之后执行脚本安装的 然后fota升级后,在判断是否“是第一次刷机和恢复出厂设置”时候会返回false,就导致脚本没有执行。导致apk升级不成功 所以我们要完成这个就是,确定fota什么时候升级完…...
ASP.NET dotnet 3.5 实验室信息管理系统LIMS源码
技术架构:ASP.NET dotnet 3.5 LIMS作为一个信息管理系统,它有着和ERP、MIS之类管理软件的共性,如它是通过现代管理模式与计算机管理信息系统支持企业或单位合理、系统地管理经营与生产,最大限度地发挥现有设备、资源、人、技术的…...
2023!6招玩转 Appium 自动化测试
Appium是个什么鬼 Appium是一个移动端的自动化框架,可用于测试原生应用,移动网页应用和混合型应用,且是跨平台的。可用于IOS和Android以及firefox的操作系统。原生的应用是指用android或ios的sdk编写的应用,移动网页应用是指网页…...
WireShark抓包分析TCP三次握手过程,TCP报文解析
「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 使用WireShark工具抓取TCP协议三次握手的数据包&am…...
【C语言】指针和数组笔试题解析
大家好,我是苏貝,本篇博客带大家了解指针和数组笔试题解析,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️ 目录 1.前言2.一维数组2.字符数组2.12.22.32.42.52.6 1.前言 本篇文章是讲述在不同数…...
Vue的模板语法(下)
一.事件处理 事件修饰符 Vue通过由点(.)表示的指令后缀来调用修饰符, .stop, .prevent,.capture,.self,.once .stop:阻止事件冒泡。当一个元素触发了事件,并且该元素包含嵌套的父元素时&#…...
Zookeeper客户端——I0Itec-zkClient
dubbo使用了zkClient而不是使用zookeeper本身的客户端与zookeeper进行交互,为什么呢? 先看看zookeeper本身自带的客户端的问题。 1)ZooKeeper的Watcher是一次性的,用过了需要再注册; 2) session的超时后…...
火山引擎 ByteHouse:ClickHouse 如何保证海量数据一致性
背景 ClickHouse是一个开源的OLAP引擎,不仅被全球开发者广泛使用,在字节各个应用场景中也可以看到它的身影。基于高性能、分布式特点,ClickHouse可以满足大规模数据的分析和查询需求,因此字节研发团队以开源ClickHouse为基础&…...
hashmap使用
hashmap作为dao对象存储数据库数据 list是把每一个数据库的字段都映射了,而hashmap则是唯一id:数据库字段作为key hashmap遍历方式 public class Main {//使用迭代器(Iterator)EntrySetpublic static void main(String[] args) {// 创建并赋…...
专业网站建设必要性/药品网络营销公司
粘包产生原因: 先说TCP:由于TCP协议本身的机制(面向连接的可靠地协议-三次握手机制)客户端与服务器会维持一个连接(Channel),数据在连接不断开的情况下,可以持续不断地将多个数据包发…...
自己做的网站可以上架烟吗/网络推广运营优化
在使用TeamFoundation进行团队管理开发时,遇到一个问题。 问题描述:在团队项目门户网站中,使用日历栏时,可以进入到日期界面,当点进某一天想要填写日志时,报网页错误。当用管理员账户进入门户网中ÿ…...
马鞍山网站建设设计/东莞seoseo关键词排名优化
一般情况下,我们使用的是nvidia -smi 来监控,但不美观且信息冗余,此处使用gpustat来监控,可直接安装:pip install gpustat 然后我们输入gpustat即可得到: 但此时无法实时获取,使用以下命令即可…...
网站导航是什么/百度入口官网
做csdn很久了,听到粉丝问的最多的问题就是:有没有新的完整的项目,因为现在很多流传的项目都太老了,实战意义不是很强。很多程序员每项技术单独拿出来有可能很厉害,例如:Spring Cloud、Spring Boot、Redis、…...
上海青浦区网站建设公司/谷歌下载
random库是使用随机数的python标准库。 伪随机数:采用梅森旋转算法生产的伪随机数列中元素 random库主要用于生成随机数基本随机数函数 随机数种子相同的种子生成的随机数是相同的,可以复现结果。 扩展随机数函数例 圆周率的计算 蒙特卡洛方法from rando…...
东莞常平建网站公司/百度引擎提交入口
Kubernetes创建初期,其本身在业界地位并不占优,前有长期占有主流市场的Mesos和基于Mesos的DCOS围追堵截,后有Docker Swarm依托自己的容器事实标准异军突起,反倒是Kubernetes只有谷歌的品牌。Kubernetes为什么能最后胜出࿰…...