神经网络通俗理解学习笔记(3)注意力神经网络

news2024/12/24 11:34:55

Tansformer

    • 什么是注意力机制
    • 注意力的计算
    • 键值对注意力和多头注意力
    • 自注意力机制
    • 注意力池化及代码实现
    • Transformer模型
    • Transformer代码实现

什么是注意力机制

注意力机制的发展史
Attention Mechanism
Mnih V, Heess N, Graves A. Recurrent models of visual attention, 2014.
Vaswani A, et al. Attention is alyouneed, 2017. (Tansformer首篇文章)

生物学中的注意力
从众多信息中选择出对当前任务目标更关键的信息

深度学习中的注意力机制
让神经网络能够更加关注图像中的重要特征,而不是整张图像

编解码器架构
大多数注意力机制都附着在Encoder-Decoder框架下
注意力机制是一种思想,本身并不依赖于任何框架

在这里插入图片描述
在这里插入图片描述

编码器的信息被压缩到编码器和解码器之间固定长度的向量
会导致很多信息的损失
存在信息瓶颈的问题

解决办法:
NLP中的注意力机制
上下文向量c应可访问输入序列所有部分,而不仅是最后一个每一时刻产生不同的语言编码向量,表示不同的关注区域

在这里插入图片描述

注意力机制的类型
隐式注意力:非常深的神经网络已经学会了一种形式的隐式注意
显式注意力:根据先前输入的记忆“权衡”其对输入的敏感度

注意力机制的类型
软注意力:函数在其域内平滑变化,因此是可微的
硬注意力:用随机抽样模型代替了确定性方法,不可微的

在这里插入图片描述

编解码器架构中的注意力机制
注意力权重的计算:

在这里插入图片描述
在这里插入图片描述
建立编码器到解码器之间非线性的映射关系

把yi-1看作是一个查询向量,看和编码器中哪个隐状态hj最相关

注意力的可视化
对齐alignment
权重是动态计算的
允许一对多的关系

在这里插入图片描述

注意力的计算

编码器-解码器中的注意力
神经网络的输出
注意力就是衡量两种隐状态间对齐”程度的分数

输入是解码器先前的状态
以及各个时刻编码器的隐藏状态
在这里插入图片描述
输出就是一个权重
表示编码器和解码器2种状态间的关联关系。并且捕捉对齐关系

如何计算注意力
注意力就是衡量编码器隐状态与前一时刻解码器输出对齐的分数

在这里插入图片描述

第二种最常用,将注意力参数转化为小型的全连接网络

注意力相当于一组可以训练的权重
可以用标准的反向传播算法进行调整

解码器决定原来要输入注意句子中哪一部分
通过让解码器有注意力机制,减轻编码器必须将输入的序列语句中所有信息编码成固定长度向量的这种负担。
通过这种方法信息可以分布在整个序列中
解码器可以相应的选择检索这些信息

在这里插入图片描述

注意视角,是解码器来注意编码器中当中的隐状态序列,从他这里去关注重要信息

在这里插入图片描述

全局注意力和局部注意力
Global Attention:在整个输入序列上计算注意力分数
Local Attention:只考虑输入单元/标记的一个子集

在这里插入图片描述

注意力权重 是剧烈变化,不像全连接权重缓慢变化
而且注意力 的输入是隐状态,全连接输入的是前一层的神经元

自注意力机制
·Self-Attention:序列自身的注意力

在这里插入图片描述
在这里插入图片描述
把序列转化成一个新序列在输入
可以看作是对输入序列的一种预处理

注意力机制的优点

  • 解决了编码器到解码器之间信息传递的瓶颈问题
  • 建立编码器状态和解码器间直接联系,消除了梯度消失问题(RNN 级联 造成)
  • 提供了更好的可解释性

在这里插入图片描述
注意力权重关系图

注意力与transformer
transformer:编码器到解码器两个序列之间的一个转换器
注意力机制某种程度上就是transformer

注意力机制是transformer模型的核心部分
主要处理信息序列的处理问题
通过学习不同位置之间的关系来决定对哪些位置进行重点的关注从而输出更加准确的结果

注意力机制的应用
通用的NLP模型,文本生成、聊天机器人、文本分类等任务
图像分类模型中也可以使用注意力机制,VisionTransformer

键值对注意力和多头注意力

经典注意力机制计算:
在这里插入图片描述

直接使用编码器隐状态计算注意力的局限:
注意力分数仅基于隐藏状态在序列中的相对位置而不是他们的内容,限制了模型关注相关信息的能力

故引入键值对

在这里插入图片描述
query可以看作是解码器上一回的输出
key value 由input 线性变化得来
value不参与计算 实现相似性和内容的分离

键值对注意力分数的计算:
在这里插入图片描述
dk是向量的维度

QK相当于求了相似性

Q、K、V本质都是输入向量的线性变换

W都是训练得到的

在这里插入图片描述
当key和value相等 就回到了前面的经典注意力机制

key value分离带来更多灵活性

多头注意力机制
Multi-Head Attention:多个查询向量

在这里插入图片描述
在这里插入图片描述
每个Q关注X不同的角度 不同部分
使模型学习到更加丰富的内容
捕获X更多信息
并行还能提高训练效率

自注意力机制

Self-Attention:
The animal didn’t cross the street it was too tired.because

it到底知道animal还是street呢

在这里插入图片描述

自注意
可以让模型聚焦在输入的重要部分,忽略不相关信息
能处理变长的信息 图像文本等
而且可以在不改变模型结构情况下,加强模型的表示能力
还能减少模型的复杂度,因为只对关键信息进行处理

获取输入向量的OKV值
三个权重矩阵训练得到
Query:查询
Key:键
Value:值

在这里插入图片描述
qkv分别由词嵌入向量与权重相乘得到

自注意力分数
查询向量q和各个单词的键向量求点积运算

在这里插入图片描述
Softmax归一化
除以key向量维度的平方根
使得梯度更加稳定

在这里插入图片描述
softmax求出来的注意力分布
表示每个词对各个位置的关注程度

注意力加权求和

保留想关注的词
淹没不相干的词
加权和为自注意力输出

在这里插入图片描述

汪意力矩阵计算
一次性计算出所有位置的的Attention输出向量

在这里插入图片描述
QK 相乘是求相似度
softmax是为获取自注意力分布

K和V分离是为了使模型更灵活捕获更多信息
V保存了输入的内容
Z表示序列自身内部不同元素间的注意力关系

自注意力机制的理解
计算输入序列每个元素与其余元素之间的相关性得分

在这里插入图片描述

注意力池化及代码实现

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
颜色越浅表示权重越大

注意力池化
Q与K的计算构成注意力池化
注意力池化对输入进行选择并生成最终输出

对信息筛选的本身其实就是池化

对输入进行选择并生成输出这一过程就是池化

在这里插入图片描述

非参数注意力池化

非参数就是不用训练
,

  • 平均注意力池化

在这里插入图片描述

  • 通用注意力池化公式
    在这里插入图片描述

  • Nadaraya-Watson核回归公式
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
参数注意力池化
令查询O和键K之间的距离乘以可学习参数w

在这里插入图片描述

Transformer模型

RNN 和LSTM 都存在梯度爆炸的问题
transformer通过自注意力机制的建模避免了这一问题

模型结构
六个编码器串联
六个解码器串联
编解码器互联

在这里插入图片描述
编码器把输入变成一些向量
解码器则利用这些向量来输出序列
两者通过注意力机制交互,使得解码器能够根据输入序列生成输出序列

可以理解为 彼此通过多次非线性变化在不同空间提取更多特征

编码器的结构相同,但不共享权重

在这里插入图片描述

嵌入算法转化为向量
超参数:512

在这里插入图片描述
每个词都独立
词与词间的关系通过自注意力机制来表达

前向反馈没有相互之间的计算,因此前向反馈层可以并行运算

在这里插入图片描述

多头自注意力层

在这里插入图片描述

一个输入X会生成不同的Q、K、V
得到不同的Z
然后再拼接他们

扩展模型关注不同位置的能力
为注意力层提供了多个表示子空间

有点类似CNN中的不同卷积核
用于捕捉输入空间不同维度特征

不同颜色代表不同头
颜色深浅代表自注意力权重
以it为例,编码时关注重点

  • The animal
  • tired
    在这里插入图片描述
    一个头关注animal
    一个头关注tired

位置嵌入
为了让模型了解单词的顺序,我们添加了位置编码向量

embedding 单词嵌入向量可以通过预训练的word2vector 或者 glove 获取 或者训练得到
位置编码 使用正余弦函数定义

在这里插入图片描述

transformer并不是RNN结构而是使用全局信息,无法利用单词顺序信息,所以要引入位置嵌入向量保存位置信息

残差结构
更容易学习复杂特征
避免梯度消失和爆炸
训练更稳定,收敛快

在这里插入图片描述

每一步解码都要编码器的输出来生成输出序列中下一个单词的表示
通过连接编码器和解码器,模型可以有效利用编码器对输入序列的理解,从而输出更有效输出序列
也可以避免信息丢失问题,从而提高模型整体性能

在这里插入图片描述

编解码器协同工作

在这里插入图片描述
在这里插入图片描述

线性层和softmax层

线性层:转化为logits向量
每个单元格对应一个单词分数
softmax层:转化为概率
选择具有最高概率的单词作输出

在这里插入图片描述

优缺点
与RNN相比更易并行化训练;本身无单词顺序,要加入位置嵌入
重点是自注意力结构OKV矩阵;多头注意力含多个自注意力模块
在这里插入图片描述

Transformer代码实现

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
数据太烂了,并不是说transformer不行
可以借鉴代码

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

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

相关文章

JVM 调优篇7 调优案例1-堆空间的优化解决

一 jvm优化 1.1 优化实施步骤* 1)减少使用全局变量和大对象; 2)调整新生代的大小到最合适; 3)设置老年代的大小为最合适; 4)选择合适的GC收集器; 1.2 关于GC优化原则 多数的Java应用不需要在服务器上进行GC优化&#xff1…

NeMo Curator 整理用于 LLM 参数高效微调的自定义数据集

目录 概述 预备知识 定义自定义文档构建器 下载数据集 解析和迭代数据集 将数据集写入 JSONL 格式 使用文档构建器加载数据集 使用现有工具统一 Unicode 格式 设计自定义数据集过滤器 编辑所有个人识别信息 添加指令提示 整合管线 概述 出于演示目的,本…

【PyQt6 应用程序】应用程序携带数据源文件一并打包

在开发好应用程序打包之后给到其他用户会发现数据文件比如封面图片不见了。 例如这样,很影响用户使用。 这里介绍一个非常简单的打包方法,不光要在打包命令的时候添加对应数据文件,在源码中也要进行一些简单的修改。 修改需要添加打包文件的地方。首先需要添加一个绝对路径…

143234234123432

📢博客主页:https://blog.csdn.net/2301_779549673 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文由 JohnKi 原创,首发于 CSDN🙉 📢未来很长&#…

【C++】c++的继承

目录 思维导图大纲: 1.基类和派生类 1.1 定义格式 1.2 继承方式 1.3 基类和派生类的转换 2. 继承中的作用域(隐藏关系) 2.1 考察继承作⽤域相关选择题 3. 派生类的默认成员函数 4. 继承类模板 5. 一个不能被继承的类 ​编辑 6.继承与友元 ​编辑 7. 继…

Java面向对象六大设计原则总结(超级详细,附有代码、图解以及案例)

文章目录 三.软件(面向对象)设计原则3.1 开闭原则(OSP)3.1.1 概述3.1.2 案列 3.2 里氏代换原则(LSP)3.2.1 概述3.2.2 案例 3.3 依赖倒转原则(DIP)3.3.1概述3.3.2 案例 3.4 接口隔离原则(ISP)3.4.1 概述3.4.2 案列 3.5 迪米特法则(DP)3.5.1 概述3.5.2 案例 3.6 合成复用原则(CRP…

红黑树前语

目录 概念 性质 红黑树与AVL树的比较 过两天更新红黑树的模拟实现,中秋快乐各位 概念 1. 概念: 是一种搜索二叉树, 但在每个结点上增加一个存储位表示节点的颜色,可以是Red 或 Black。通过对任何一条从根到叶子的路径上各个节点着色方式的…

[JVM]JVM内存划分, 类加载过程, 双亲委派模型,垃圾回收机制

文章目录 一. JVM内存划分1. 堆2. 栈3. 元数据区4. 程序计数器 二. 类加载过程1. 加载2. 验证3. 准备4. 解析5. 初始化 三. 双亲委派模型四. JVM的垃圾回收机制GC1. 找到需要回收的对象2. 释放垃圾的策略 一. JVM内存划分 JVM就是java进程 这个进程一旦跑起来, 就会从操作系统…

Windows本地制作java证书(与jeecgboot配置本地证书ssl问题)

1:JDK生成自签证书SSL,首先以管理员身份运行CMD窗口,执行命令 keytool -genkey -alias testhttps -keyalg RSA -keysize 2048 -validity 36500 -keystore "F:/ssl/testhttps.keystore"F:\ssl>keytool -genkey -alias testhttps -keyalg R…

PCIe进阶之TL:Memory, I/O, and Configuration Request Rules TPH Rules

1 Memory, I/O, and Configuration Request Rules 下述规则适用于 Memory 请求、IO 请求和配置请求。 除了公共的 header 字段外,所有 Memory 请求、IO 请求和配置请求还包括以下字段: (1)Requester ID[15:0] 和 Tag[9:0],组成了 Transaction ID 。 (2)Last DW BE[3:0]…

计算架构模式之接口高可用

接口高可用整体框架 接口高可用主要应对两类问题:雪崩效应和链式效应。 雪崩:当请求量超过系统处理能力之后,会导致系统性能螺旋快速下降,本来系统可以处理1000条,但是当请求量超过1200的时候,此时性能会下…

【415】【最高乘法得分】

目录 使用dp python版本 java版本 递推式 python版本 java版本 PS: java语法 1.定义数组 2.记忆化 3.计算max 难绷,本来想着4个指针,和四数之和那道题挺类似的。。。。 四数之和好像剪枝和预处理都是先排序的比较好做。 无奈,只…

[网络]https的概念及加密过程

文章目录 一. HTTPS二. https加密过程 一. HTTPS https本质上就是http的基础上增加了一个加密层, 抛开加密之后, 剩下的就是个http是一样的 s > SSL HTTPS HTTP SSL 这个过程, 涉及到密码学的几个核心概念 明文 要传输的真正意思是啥 2)密文 加密之后得到的数据 这个密文…

CTF(misc)1和0的故事

题目链接 下载题目后是一堆整齐的01字符串,猜测是生成二维码,将0变成白色方块,1变成黑色方块。 0000000001110010000000000 0000000000011110100000000 0000000001110001000000000 0000000010111100000000000 0000000010101010000000000 00…

Python基础语法(3)下

列表和元组 列表是什么,元组是什么 编程中,经常需要使用变量,来保存/表示数据。变量就是内存空间,用来表示或者存储数据。 如果代码中需要表示的数据个数比较少,我们直接创建多个变量即可。 num1 10 num2 20 num3…

ModuleNotFoundError: No module named ‘datasets‘

报错信息: 解决:安装datasets 方法1: pip install datasets 方法2: python3可以使用以下命令: pip3 install datasets

【智路】智路OS Perception Fusion Service

Perception Fusion Service https://gitee.com/ZhiluCommunity/airos-edge/raw/r2.0/docs/02_Service/Perception_Fusion_Service.md 多传感器融合感知模块的主要任务是接收各传感器感知的障碍物信息,融合这些障碍物信息,得到融合后的障碍物信息。 智…

Tuxera NTFS for Mac 2023绿色版

​ 在数字化时代,数据的存储和传输变得至关重要。Mac用户经常需要在Windows NTFS格式的移动硬盘上进行读写操作,然而,由于MacOS系统默认不支持NTFS的写操作,这就需要我们寻找一款高效的读写软件。Tuxera NTFS for Mac 2023便是其中…

接口自动化框架入门(requests+pytest)

一、接口自动化概述 二、数据库概述 2.1 概念 存储数据的仓库,程序中数据的载体 2.2 分类 关系型数据库:安全 如mysql,oracle,SQLLite database tables 行列 非关系型数据库:高效 如redis,mongoDB 数…

C++笔记之子类初始化时父类带参构造函数的处理、父子类中模板参数的传递

C++笔记之子类初始化时父类带参构造函数的处理、父子类中模板参数的传递 code review! 文章目录 C++笔记之子类初始化时父类带参构造函数的处理、父子类中模板参数的传递一.子类初始化时父类带参构造函数的处理1.1.若父类只有带参数的构造函数,子类初始化时必须在初始化列表…