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

【深度学习-注意力机制attention 在seq2seq中应用】

注意力机制

  • 为什么需要注意力机制
  • attention机制的架构总体设计
    • 一、attention本身实现
    • 评分函数
  • attention在网络模型的应用-Bahdanau 注意力
    • 加性注意力代码实现

为什么需要注意力机制

在这里插入图片描述

这是一个普通的seq2seq结构,用以实现机器对话,Encoder需要把一个输入的一个句子转化为一个最终的输出,上下文context vector,然后在Decoder中使用,但这里有些问题:

  1. 如果句子很长,这个向量很难包含sequence中最早输入的哪些词的信息,那么decoder的处理必然也缺失了这一部分。
  2. 对话的过程中,大部分情况下decoder第一个的输出应该关心的权重更应该是encoder的前半部分的输入,比如这里Yes,其实应该是对are you这样一个疑问的输出,但是这就要求decoder的预测的时候有区别的针对sequence的输入做输出,现在这个结构没办法实现这个功能。

你可能会想到LSTM或者GRU也是有memory记忆功能的,解决方案:
LSTM中的memory没有办法很大,假设它的memory的大小时K的话,就需要有一个K*K的矩阵,如果太大的memory,不仅计算量大,参数太多还会容易过拟合,因此不可行

attention机制就是用来解决这个问题,attention里面memory增加的话,参数并不会增加,一句话总结就是attention就是来解决长输入在decoder时,能够找到应该关注的输入部分的问题,它最初时从机器翻译发展的,后续也扩展到了其他领域

attention机制的架构总体设计

总体架构
这就是总体的架构设计,输入a1…an,输出b1…bn 对应,注意这里的b考虑了所有的输入,这个输出带有对于每个输入的attention score,score越大,证明这个输入越重要,a在这里可以是输入,也可以是输入解码器后hidden layer的输出,那么中间蓝色框部分就是attention主体实现,它用来生成的b1到bn
举个例子:输入are you free tomorrow? 输出的时候Yes更关注的是are you,那这个的attention score就需要高一些

普通的seq2seq结构
在这里插入图片描述
带有注意力的seq2seq
在这里插入图片描述

在普通的seq2seq相比,解码器使用的上下文变量C不再仅仅是编码器的输出,而是 注意力的输出

与普通的seq2seq模型对比下,带有注意力模型的修改就分为了两部分
1.attention本身的实现
2.attention应用到模型部分

以下详述这了两部分

一、attention本身实现

先不介绍内部的一些数学处理,attention的输出实际上是对某种输入的选择倾向
输入就是要被选择的数据和对应的查询线索
输出对要选择数据的权重
举个例子
输入:the dog is running across the grass
翻译:这个小狗正在穿越草地
解码翻译这 个 小 狗 这些词的时候,注意力应该放在the dog上,这时候我们给与the dog这些词更多的权重,这时候对于输入可能的权重就是0.5 0.5 0 0 0 0

在这里插入图片描述

在数学模型方面,
键key
查询Query
值 Value

要实现的是根据键和查询生成的线索,去计算对于值Value的倾向选择,数学表达是这样的:
在这里插入图片描述
这里的a(q, ki) 一般是经过一个评分函数映射成标量和然后一个softmax操作

这里可以形象的理解一下,比如下面三组数据:

id体重->Q身高->K年龄-> V
15016050
26516523
36017521

当输入体重K 63, 身高V 170,问现在的年龄大概是多少呢?
看到表中的信息,人脑会自然猜测年龄在23和21之间,也就是在id 2和3上权重比较高,0.6* 23 +0.4* 21,这个也接近于注意力的实质,其实是根据Q和V 做评分,用以对V加权取值,这些权重值,就是注意力。
a(q, k1) v1+ a(q, k2)v2

评分函数

评分函数实际有很多种,tanh, 经过一个线性变换,或者sin cos 、加 等等,目前业内没有最好的实践

attention在网络模型的应用-Bahdanau 注意力

很多的论文都涉及注意力的使用,这块的依据是比较早和出名的Bahdanau注意力讲解。
上文seq2se模型中讲过解码器的输入是编码器的输出(上下文变量)以及解码器输入,而在有注意力的网络模型中,这个上下文变成了注意力的输出,解码器示意:
在这里插入图片描述
其中的at,i 就是注意力权重的输出
在这里插入图片描述
时间步t-1 解码器的隐状态是St-1,也是所谓的查询
ht编码器隐状态,是键也是值

加性注意力代码实现

class AdditiveAttention(nn.Module):"""加性注意力实现"""def __init__(self, key_size, query_size, num_hiddens, dropout, **kwargs):super(AdditiveAttention, self).__init__(**kwargs)self.W_k = nn.Linear(key_size, num_hiddens, bias=False)self.W_q = nn.Linear(query_size, num_hiddens, bias=False)self.w_v = nn.Linear(num_hiddens, 1, bias=False)self.dropout = nn.Dropout(dropout)def forward(self, queries, keys, values, valid_lens):queries, keys = self.W_q(queries), self.W_k(keys)# 在维度扩展后,# queries的形状:(batch_size,查询的个数,1,num_hidden)# key的形状:(batch_size,1,“键-值”对的个数,num_hiddens)# 使用广播方式进行求和features = queries.unsqueeze(2) + keys.unsqueeze(1)features = torch.tanh(features)# self.w_v仅有一个输出,因此从形状中移除最后那个维度。# scores的形状:(batch_size,查询的个数,“键-值”对的个数)scores = self.w_v(features).squeeze(-1)# 这部分主要是为了遮蔽填充项,理解注意力上的时候可以先忽略它self.attention_weights = masked_softmax(scores, valid_lens)# values的形状:(batch_size,“键-值”对的个数,值的维度)return torch.bmm(self.dropout(self.attention_weights), values)

相关文章:

【深度学习-注意力机制attention 在seq2seq中应用】

注意力机制 为什么需要注意力机制attention机制的架构总体设计一、attention本身实现评分函数 attention在网络模型的应用-Bahdanau 注意力加性注意力代码实现 为什么需要注意力机制 这是一个普通的seq2seq结构,用以实现机器对话,Encoder需要把一个输入的…...

详解混合类型文件(Polyglot文件)的应用生成与检测

1. 引入 混合类型文件(Polyglot文件),是指一个文件,既可以是合法的A类型,也可以是合法的B类型。 比如参考3中的文件,是一个html文件,可以用浏览器正常打开;它也是一个一个.jar文件&…...

QT之QTableView的简介

QT之QTableView的简介 QTableView 是 Qt 框架中的一个类,用于显示和编辑表格数据。它提供了一个灵活的模型/视图架构,允许用户以不同的方式显示和编辑数据。 以下是 QTableView 的一些常用函数及其用法: 1)QTableView(QWidget *pa…...

学习记忆——宫殿篇——记忆宫殿——记忆桩——知识讲解

类比 假设这些桩子好比不同的交通工具,每一种交通工具都可以助我们到达目的地,那举现在就根据你的时间以及现实情况,选择最合适自己的交通工具即可,重点在于你要熟悉每种交通工具的用途不区别。桩子也是如此,把所有的桩…...

Python lambda匿名函数

视频版教程 Python3零基础7天入门实战视频教程 前面我们所学的函数定义,都是有函数名的。 我们现在学的lambda函数是没有名称的,也就是匿名函数。 我们在只需要一次性使用的函数的时候,就可以用lambda匿名函数,简单方便快捷。 …...

成绩统计(蓝桥杯)

成绩统计 题目描述 小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。 如果得分至少是 60 分,则称为及格。如果得分至少为 85 分,则称为优秀。 请计算及格率和优秀率,用百分数…...

ETL与ELT理解

ETL ETL( Extract-Transform-Load),用来描述将数据从来源端经过抽取(Extract)、转换(Transform)、加载(Load)至目的端的过程。ETL模式适用于小数据量集。如果在转换过程…...

IntelliJ IDEA 2023 年下载、安装教程、好用插件推荐

文章目录 下载与安装IDEA常用插件推荐Alibaba Java Coding Guidelines(阿里巴巴Java开发规约)Key Promoter X(IDEA快捷键提示)Translation(翻译插件)Save Actions(优化保存插件)Codo…...

下载HTMLTestRunner并修改

目录 一. 下载HTMLTestRunner 二. 修改HTMLTestRunner 1. 修改内容 2. 修改原因 一. 下载HTMLTestRunner 下载报告模板地址:http://tungwaiyip.info/software/HTMLTestRunner.html 下载模块: 二. 修改HTMLTestRunner 将修改后的模块放到python安装目录下的..…...

C#回调函数学习1

回调函数(Callback Function)是一种函数指针,它指向的是由用户自己定义的回调函数。我们将这个回调函数的指针作为参数传递给另外一个函数,在这个函数工作完成后,它将通过这个回调函数的指针来回调通知调用者处理结果。…...

leetcode 232 用栈实现队列

请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类: void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头…...

element UI表单验证,自定义验证规则

validator 可以为指定字段自定义验证函数——这就相当于把前边配置的东西用js按照以前的方式编写验证逻辑了。虽然麻烦点&#xff0c;但是能实现比较复杂的业务逻辑判断。 <el-form-itemlabel"中奖概率"prop"rate":rules"[{ required: true, mes…...

redis 主存复制

1. 前言 Redis的持久化机制&#xff0c;它很好的解决了单台Redis服务器由于意外情况导致Redis服务器进程退出或者Redis服务器宕机而造成的数据丢失问题。 在一定程度上保证了数据的安全性&#xff0c;即便是服务器宕机的情况下&#xff0c;也可以保证数据的丢失非常少。 通常…...

Unity Shader顶点数据疑问

1&#xff09;Unity Shader顶点数据疑问 2&#xff09;Unity 2018发布在iOS 16.3偶尔出现画面不动的问题 3&#xff09;安卓游戏启动后提示“应用程序异常” 这是第352篇UWA技术知识分享的推送&#xff0c;精选了UWA社区的热门话题&#xff0c;涵盖了UWA问答、社区帖子等技术知…...

java写一个用于生成雪花id的工具类

我们创建一个类 叫 SnowflakeIdGenerator 作为生成雪花id的工具类 然后 编写代码如下 public class SnowflakeIdGenerator {private static final long START_TIMESTAMP 1609459200000L; // 设置起始时间戳&#xff0c;可以根据需要进行调整private static final long WORKER…...

淘宝开店装修教程 (2023新版)

一、下载千牛 1. 浏览器打开淘宝 https://www.taobao.com/ 2. 进入 - 千牛卖家中心 3. 进入 - 关于千牛 4. 下载千牛 5. 下载页面 6. 下载安装桌面 二、登录千牛 1. 登录页面 2. 进入 - 千牛工作台 三、pc店铺装修 1. 进入 - pc店铺 2. 进入 - 装修页面 3. 删除没用的模块 从…...

Python傅立叶变换

1. 什么是傅里叶变换&#xff1f; 在数学中&#xff0c;变换技术用于将函数映射到与其原始函数空间不同的函数空间。傅里叶变换时也是一种变换技术&#xff0c;它可以将函数从时域空间转换到频域空间。例如以音频波为例&#xff0c;傅里叶变换可以根据其音符的音量和频率来表示…...

MATLAB向量化编程基础精讲教程

向量化编程是MATLAB中一种重要的编程技术&#xff0c;通过使用向量和矩阵运算代替循环&#xff0c;可以提高代码的执行效率和可读性。本文将介绍MATLAB向量化编程的基础知识&#xff0c;并提供多个案例代码&#xff0c;帮助读者理解和应用向量化编程。 一、向量化编程基础知识…...

【非对称加密算法】RSA算法

一、非对称加密算法 非对称加密算法使用了两个不同的密钥&#xff1a;公钥和私钥。公钥是公开的&#xff0c;可以被任何人使用&#xff0c;而私钥是只有特定的人能够使用的。这种算法的加密和解密过程使用不同的密钥&#xff0c;因此称为非对称加密算法。 在非对称加密算法中…...

【滑动窗口】438. 找到字符串中所有字母异位词

438. 找到字符串中所有字母异位词 滑动窗口解法 创建两个Map 一个记录实际需要的有效字符 另一个记录窗口内的有效字符个数初始化need每次遍历一个字符 判断是不是有效字符 如果是 更新window 另外判断window中有效字符的个数是不是等于need中有效字符的个数 如果是更新valid…...

WeMod Pro免费解锁终极指南:两种补丁方法完整对比与实战教程

WeMod Pro免费解锁终极指南&#xff1a;两种补丁方法完整对比与实战教程 【免费下载链接】Wemod-Patcher WeMod patcher allows you to get some WeMod Pro features absolutely free 项目地址: https://gitcode.com/gh_mirrors/we/Wemod-Patcher 还在为WeMod Pro的高级…...

一篇搞定2026年律所管理系统选购,避坑技巧+优质品牌全解析

据智研咨询2026年发布的《中国律所管理软件行业发展报告》显示&#xff0c;国内律所对管理系统的需求年增长率达28%&#xff0c;但近70%的律所表示选型后存在功能冗余、操作复杂、适配性差等问题&#xff0c;不仅未能提升效率&#xff0c;反而增加了办公成本。作为深耕律所管理…...

Keil5主题配色进阶:不只是好看,更要好用!详解如何区分函数、变量、宏定义的颜色

Keil5主题配色进阶&#xff1a;不只是好看&#xff0c;更要好用&#xff01;详解如何区分函数、变量、宏定义的颜色 作为一名嵌入式开发者&#xff0c;每天面对Keil5的默认编辑器界面&#xff0c;你是否也感到视觉疲劳&#xff1f;那些单调的配色不仅影响编码心情&#xff0c;更…...

图像分割损失函数调参指南:如何用Focal Loss拯救你的小目标检测模型

图像分割损失函数调参指南&#xff1a;如何用Focal Loss拯救你的小目标检测模型 当你在处理卫星图像中的微小建筑物或显微图像里的稀有细胞时&#xff0c;是否经常遇到模型对前景目标"视而不见"的情况&#xff1f;传统交叉熵损失在面对这种极端类别不平衡时往往力不从…...

Ubuntu 22.04 开机卡在/dev/sda3: clean的磁盘空间分析与扩容实战

1. 问题现象与初步诊断 当你兴冲冲地按下Ubuntu 22.04的开机键&#xff0c;却看到屏幕卡在/dev/sda3: clean这个神秘提示时&#xff0c;那种感觉就像开车时突然遇到路障——明明昨天还能正常使用&#xff0c;今天怎么就罢工了&#xff1f;这种情况我遇到过不止一次&#xff0c;…...

老王-你驾驭不住的东西才会显相

你驾驭不住的东西&#xff0c;才会显相 ——展现即风险&#xff0c;驾驭方为道“大象无形。” 真正强大的人&#xff0c;从不轻易显相—— 因为显&#xff0c;即招&#xff1b;露&#xff0c;即险。⚠️ 你想展现什么&#xff0c;就必须能驾驭什么。&#x1f525; 六大展现&…...

LSTM电池SOC估计最基本方法及全包代码:包含两个数据集、预处理代码、模型代码与估计结果

LSTM做电池SOC估计&#xff0c;最基本的方法&#xff0c;入门必学&#xff0c;包括两个数据集&#xff0c;及其介绍、预处理代码、模型代码、估计结果等&#xff0c;这是我见过最全的一个SOC估计代码包&#xff0c;总共文件大概有70个左右最近在折腾电池SOC估计&#xff0c;发现…...

3个核心价值:bilibili-api的API开发与数据接口应用

3个核心价值&#xff1a;bilibili-api的API开发与数据接口应用 【免费下载链接】bilibili-api B站API收集整理及开发&#xff0c;不再维护 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-api 作为开发者&#xff0c;我们经常需要获取B站丰富的视频、用户及互动…...

Python AOT编译卡在wasm-ld阶段?揭秘2026年新引入的WASI-SDK v22.0工具链冲突——附3行patch脚本+验证清单

第一章&#xff1a;Python AOT编译卡在wasm-ld阶段&#xff1f;揭秘2026年新引入的WASI-SDK v22.0工具链冲突——附3行patch脚本验证清单自2026年WASI-SDK v22.0发布以来&#xff0c;Python官方AOT编译流程&#xff08;基于pyodide-build aot&#xff09;在链接阶段频繁阻塞于w…...

基于Matlab的正态云模型花卉特征提取:从理论到代码实现

257.基于matlab的正态云模型花卉特征提取&#xff0c;用正向正态云发生器和逆向正态云发生器来模拟花卉的部分特征提取 程序已调通&#xff0c;可直接运行在花卉研究领域&#xff0c;准确提取花卉特征对于花卉分类、品种识别等工作至关重要。今天咱们来聊聊基于Matlab的正态云模…...