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

transfomer知识点梳理

1:自注意力机制的结构是什么?

答:输入是一个序列,初始化三个权重矩阵;对于序列中的每个元素,分别经过这些权重矩阵生成Q K V,然后Q与序列中的所有元素的K进行点积乘法,得到当前元素与序列中每个元素的注意力得分,这样得到了所有元素关于序列中所有元素的注意力得分;再对每个元素与序列中元素的得分进行softmax归一化,使得分数之和为1,得到注意力权重;再与序列中元素的V相乘并累加,即加权求和,得到最终的输出矩阵。
对于缩放点积注意力,还需要对注意力得分除以根号下K的维度,这样是为了确保点积的方差在不考虑向量长度的情况下仍然是1。

自注意力机制是一种关键的神经网络结构,它在处理序列数据时能够动态地关注序列中不同部分的信息。自注意力的工作流程可以概括为以下几个步骤:

  1. 初始化权重矩阵:模型首先初始化三个权重矩阵,用于将输入序列的每个元素映射到查询(Q)、键(K)和值(V)空间。这一步骤是为了创建多个表示,分别捕获输入元素在不同角色和上下文中的信息。

  2. 计算注意力得分:对于序列中的每个元素,模型计算其查询(Q)与序列中所有元素的键(K)的点积,得到一个注意力得分矩阵。这个得分矩阵表达了序列中每个元素对其他元素的相对重要性或关联度。

  3. 缩放点积注意力:为了防止点积运算在高维空间时导致的梯度消失问题,模型将注意力得分矩阵除以键(K)向量维度的平方根。这个缩放步骤有助于控制得分的分布,使其更适合后续的softmax操作。

  4. 应用softmax函数:接下来,模型对每个元素的注意力得分应用softmax函数进行归一化,使得每个元素对序列中所有元素的注意力得分之和为1。这一步骤产生了注意力权重,反映了在构建输出时,每个元素应当赋予序列中其他元素多大的重视。

  5. 加权求和:最后,模型使用注意力权重对值(V)进行加权求和,为序列中的每个元素生成一个加权的输出表示。这个输出矩阵综合了整个序列的信息,其中每个元素的表示都受到了序列中其他元素的动态影响。

通过上述步骤,自注意力机制使得模型能够在处理每个序列元素时,考虑到序列中的所有元素,从而捕捉它们之间的复杂关系。这种机制是Transformer架构的核心,广泛应用于自然语言处理和其他序列建模任务中,展现了卓越的性能和灵活性。

手写自注意力机制,不考虑batch_size

import torch
import torch.nn as nn
import numpy as npclass self_attention(nn.Module):def __init__(self,input_dim, output_dim):super(self_attention, self).__init__()self.input_dim = input_dimself.output_dim = output_dim# 初始化权重矩阵self.w_q =  nn.Linear(input_dim, output_dim)self.w_k =  nn.Linear(input_dim, output_dim)self.w_v =  nn.Linear(input_dim, output_dim)# 初始化softmaxself.softmax = nn.Softmax(dim=-1)def forward(self, x):# 计算Q K VQ = self.w_q(x)K = self.w_k(x)V = self.w_v(x)

相关文章:

  • 工业相机采图方式、图像格式(BYTE、HObject和Mat)转换
  • 队列的实现(C语言链表实现队列)
  • JS+CSS3点击粒子烟花动画js特效
  • Spark与flink计算引擎工作原理
  • MySQL存储引擎的区别与选择
  • 【数据可视化】使用Python + Gephi,构建中医方剂关系网络图!
  • 微服务鉴权的几种实现方案
  • 记录解决问题--activiti8.2 流程图图片由png改为svg前端不显示图片问题
  • 20240323
  • 算法 之 排序算法
  • LeetCode第一天(495.提莫攻击)
  • 史上最详细的CrossOver24激活和使用教程(附网盘激活码)
  • excel 破解 保护工作簿及保护工作表
  • 树,二叉树与堆
  • 鸿蒙Harmony应用开发—ArkTS-@AnimatableExtend装饰器:定义可动画属性
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • Angular Elements 及其运作原理
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • DOM的那些事
  • in typeof instanceof ===这些运算符有什么作用
  • MQ框架的比较
  • Spring Boot MyBatis配置多种数据库
  • Vue全家桶实现一个Web App
  • 从零开始在ubuntu上搭建node开发环境
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 分类模型——Logistics Regression
  • 今年的LC3大会没了?
  • 七牛云假注销小指南
  • 前端路由实现-history
  • 世界上最简单的无等待算法(getAndIncrement)
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • Hibernate主键生成策略及选择
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • # Java NIO(一)FileChannel
  • #{} 和 ${}区别
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • $.ajax()
  • ( 10 )MySQL中的外键
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (1) caustics\
  • (1)Nginx简介和安装教程
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (pojstep1.3.1)1017(构造法模拟)
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (十) 初识 Docker file
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .net Application的目录
  • .net CHARTING图表控件下载地址