深入理解深度学习——注意力机制(Attention Mechanism):注意力评分函数(Attention Scoring Function)

news2024/11/6 15:32:06

分类目录:《深入理解深度学习》总目录


《深入理解深度学习——注意力机制(Attention Mechanism):注意力汇聚与Nadaraya-Watson 核回归》中使用了高斯核来对查询和键之间的关系建模。式中的高斯核指数部分可以视为注意力评分函数(Attention Scoring Function), 简称评分函数(Scoring Function), 然后把这个函数的输出结果输入到Softmax函数中进行运算。 通过上述步骤,将得到与键对应的值的概率分布(即注意力权重)。 最后,注意力汇聚的输出就是基于这些注意力权重的值的加权和。

从宏观来看,上述算法可以用来实现注意力机制框架。 下图说明了如何将注意力汇聚的输出计算成为值的加权和, 其中表示注意力评分函数。 由于注意力权重是概率分布, 因此加权和其本质上是加权平均值。

计算注意力汇聚的输出为值的加权和
用数学语言描述,假设有一个查询 q ∈ R q q\in R^q qRq m m m个“键—值”对 ( k 1 , v 1 ) , ( k 2 , v 2 ) , ⋯   , ( k m , v m ) (k_1, v_1), (k_2, v_2), \cdots, (k_m, v_m) (k1,v1),(k2,v2),,(km,vm), 其中 k i ∈ R k , v i ∈ R v k_i\in R^k, v_i\in R^v kiRk,viRv。 注意力汇聚函数就被表示成值的加权和:
f ( q , ( k 1 , v 1 ) , ( k 2 , v 2 ) , ⋯   , ( k m , v m ) ) = ∑ i = 1 m α ( q , k i ) v i ∈ R v f(q, (k_1, v_1), (k_2, v_2), \cdots, (k_m, v_m)) = \sum_{i=1}^m\alpha(q, k_i)v_i\in R^v f(q,(k1,v1),(k2,v2),,(km,vm))=i=1mα(q,ki)viRv

其中查询 q q q和键 k i k_i ki的注意力权重(标量) 是通过注意力评分函数 α \alpha α将两个向量映射成标量, 再经过Softmax运算得到的:
α ( q , k i ) = Softmax ( α ( q , k i ) ) = exp ⁡ ( α ( q , k i ) ) ∑ j = 1 m exp ⁡ ( α ( q , k i ) ) ∈ R \alpha(q, k_i) = \text{Softmax}(\alpha(q, k_i))=\frac{\exp(\alpha(q, k_i))}{\sum_{j=1}^m\exp(\alpha(q, k_i))} \in R α(q,ki)=Softmax(α(q,ki))=j=1mexp(α(q,ki))exp(α(q,ki))R

正如上图所示,选择不同的注意力评分函数会导致不同的注意力汇聚操作。 本节将介绍两个流行的评分函数,稍后将用他们来实现更复杂的注意力机制。

掩蔽softmax操作

正如上面提到的,Softmax操作用于输出一个概率分布作为注意力权重。 在某些情况下,并非所有的值都应该被纳入到注意力汇聚中。 例如,为了在高效处理小批量数据集, 某些文本序列被填充了没有意义的特殊词元。 为了仅将有意义的词元作为值来获取注意力汇聚, 可以指定一个有效序列长度(即词元的个数), 以便在计算Softmax时过滤掉超出指定范围的位置。 下面的masked_softmax函数实现了这样的掩蔽Softmax操作(Masked Softmax Operation), 其中任何超出有效长度的位置都被掩蔽并置为0。

def masked_softmax(X, valid_lens):
    """通过在最后一个轴上掩蔽元素来执行softmax操作"""
    # X:3D张量,valid_lens:1D或2D张量
    if valid_lens is None:
        return tf.nn.softmax(X, axis=-1)
    else:
        shape = X.shape
        if len(valid_lens.shape) == 1:
            valid_lens = tf.repeat(valid_lens, repeats=shape[1])

        else:
            valid_lens = tf.reshape(valid_lens, shape=-1)
        # 最后一轴上被掩蔽的元素使用一个非常大的负值替换,从而其softmax输出为0
        X = d2l.sequence_mask(tf.reshape(X, shape=(-1, shape[-1])),
                              valid_lens, value=-1e6)
        return tf.nn.softmax(tf.reshape(X, shape=shape), axis=-1)

加性注意力

一般来说,当查询和键是不同长度的矢量时,可以使用加性注意力作为评分函数。 给定查询 q ∈ R q q\in R^q qRq和键 k ∈ R k k\in R^k kRk,加性注意力(Additive Attention)的评分函数为
α ( q , k ) = w v T tanh ⁡ ( W q q + W k k ) ∈ R \alpha(q, k)=w^T_v\tanh(W_qq+W_kk)\in R α(q,k)=wvTtanh(Wqq+Wkk)R

其中可学习的参数是 W q ∈ R h × q W_q\in R^{h\times q} WqRh×q W k ∈ R h × k W_k\in R^{h\times k} WkRh×k W v ∈ R h W_v\in R^h WvRh 。 如上式所示, 将查询和键连结起来后输入到一个多层感知机(MLP)中, 感知机包含一个隐藏层,其隐藏单元数是一个超参数。 通过使用 tanh ⁡ \tanh tanh作为激活函数,并且禁用偏置项。

缩放点积注意力

使用点积可以得到计算效率更高的评分函数, 但是点积操作要求查询和键具有相同的长度。 假设查询和键的所有元素都是独立的随机变量, 并且都满足零均值和单位方差, 那么两个向量的点积的均值为0,方差为 d d d。 为确保无论向量长度如何, 点积的方差在不考虑向量长度的情况下仍然是1, 我们再将点积除以 d \sqrt{d} d , 则缩放点积注意力(Scaled Dot-product Attention)评分函数为:
α ( q , k ) = q T k d \alpha(q, k)=\frac{q^Tk}{\sqrt{d}} α(q,k)=d qTk

在实践中,我们通常从小批量的角度来考虑提高效率, 例如基于 n n n个查询和 m m m个“键—值”对计算注意力, 其中查询和键的长度为 d d d,值的长度为 v v v。 查询 Q ∈ R n × d Q\in R^{n\times d} QRn×d、 键 K ∈ R n × v K\in R^{n\times v} KRn×v和值 V ∈ R m × v V\in R^{m\times v} VRm×v的缩放点积注意力是:
Softmax ( Q T K d ) V ∈ R n × v \text{Softmax}(\frac{Q^TK}{\sqrt{d}})V\in R^{n\times v} Softmax(d QTK)VRn×v

参考文献:
[1] Lecun Y, Bengio Y, Hinton G. Deep learning[J]. Nature, 2015
[2] Aston Zhang, Zack C. Lipton, Mu Li, Alex J. Smola. Dive Into Deep Learning[J]. arXiv preprint arXiv:2106.11342, 2021.

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

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

相关文章

Spark笔记

DBeaver数据库连接器 Download | DBeaver Community shell命令 bin/spark-submit –class cn.edu.ncut.sparkcore.wordcount.Test03_WordCount_cluster –deploy-mode cluster –master yarn ./sparkcore-1.0-SNAPSHOT.jar 10 血缘关系查看 toDebugString()&#xff1a…

深入篇【Linux】学习必备:【文本编辑器】vim的基本介绍及使用

深入篇【Linux】学习必备:【文本编辑器】vim的基本介绍及使用 Ⅰ.vim基本简介Ⅱ.vim的基本操作⏰【命令模式下】1.移动光标2.复制删除粘贴3.替换更改4.撤销指令 ⏰【底行模式下】1.查找字符2.保存退出3.查看所有模式 Ⅲ.简单vim配置1.配置文件位置2.使用插件 Ⅰ.vim…

前后端交互三、Ajax加强

零、文章目录 前后端交互三、Ajax加强 1、XMLHttpRequest的基本使用 (1)什么XMLHttpRequest XMLHttpRequest(简称 xhr)是浏览器提供的 Javascript 对象,通过它,可以请求服务器上的数据资源。jQuery 中的…

力扣 209. 长度最小的子数组

一、题目描述 给定一个含有 n 个正整数的数组和一个正整数 target。 找出该数组中满足其和大于等于 target 的长度最小的连续子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。 示例 1: 输入:target 7, nums [2,3,1…

Servlet详解

目录 一. Servlet介绍 1.1 概念 2.2 Servlet架构 二. 创建一个Servlet程序 2.1 创建一个Maven项目 2.2 引入 jar 包 2.3 创建目录 2.4 编写代码 2.5 打包程序 2.6 部署程序 2.7 验证程序 三. Servlet常用API 3.1 HttpServlet 3.2 HttpServletRequest 3.2 HttpServlet…

深入了解SSM框架(案例(SSM+Jsp) + 详细分析 + 思维导图)

1.Spring Spring就像是整个项目中装配bean的大工厂,在配置文件中可以指定使用特定的参数去调用实体类的构造方法来实例化对象。也可以称之为项目中的粘合剂。 Spring的核心思想是IoC(控制反转),即不再需要程序员去显式地new一个…

swagger 接口测试,用 python 写自动化时该如何处理?

在使用Python进行Swagger接口测试时,可以使用requests库来发送HTTP请求,并使用json库和yaml库来处理响应数据。以下是一个简单的示例代码: 如果你想学习自动化测试,我这边给你推荐一套视频,这个视频可以说是B站百万播…

vim编辑器基本使用

一、写在前面 今天在练习git相关操作时,无意间发现当你使用commit命令提交代码时,忘记添加备注信息会自动进入一个奇怪的模式,按esc键亦或是ctrlC都无法退出,这个奇怪的模式也就是vim编辑器。如下图: vim是一种文本…

前端工程化-VUE

前端工程化-VUE Vue-cliNode.js1.什么是Node.js2.Node.js的安装 高效的开发离不开基础工程的搭建。本章主要介绍如何使用Vue进行实际SPA项目的开发,这里使用的是目前热门的JavaScript应用程序模块打包工具Webpack,进行模块化开发、…

嵌入式C语言中if/else如何优化详解

观点一(灵剑): 前期迭代懒得优化,来一个需求,加一个if,久而久之,就串成了一座金字塔。 当代码已经复杂到难以维护的程度之后,只能狠下心重构优化。那,有什么方案可以优雅…

Spring 源码解析 - FactoryBean 获取 Bean 过程

一、FactoryBean FactoryBean是Spring框架提供的一个核心接口之一,用来创建复杂或无法通过默认构造函数创建的对象。这种情况下通过实现FactoryBean接口,可以自定义实例化Bean的过程,包括Bean的对象类型、初始化、销毁等。 在应用场景中&am…

RK3588平台开发系列讲解(进程篇)程序的二进制格式 ELF

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、ELF 文件二、二进制文件组成三、运行程序为进程沉淀、分享、成长,让自己和他人都能有所收获!😄 📢CPU 是不能执行文本文件里面的指令的,这些指令只有人能看懂,CPU 能够执行的命令是二进制的,比如“0101”…

Selenium还能这么玩:自动管理浏览器

这是个系列文章,主要讲selenium一些实战操作,使用 Python 编写代码。可以把他们应用到自动化测试,也可以应用到网络爬虫中。 这篇文章介绍一个操作,可以让selenium 控制浏览器共用同一个 session。他的应用场景是:共用…

pwn3-绕过防御-ROP(1)

**ROP:**全程Return Oriented Programming(面向返回的编程),在栈溢出基础上,利用程序中已有的小片段(gadgets),改变寄存器或变量的值,从而控制程序执行流程,从而绕过NX防御,常见有ret2text,ret2…

Linux:samba服务 (smbd)

smb服务器为centos7 使用的yum安装(如果不会搭建本地yum仓库可以查看) Linux:rpm查询安装 && yum安装_鲍海超-GNUBHCkalitarro的博客-CSDN博客 samba 简介 samba 使用了 1.SMB 协议 Server Message Block,服务消息块 2…

【LeetCode】769. 最多能完成排序的块

769. 最多能完成排序的块(中等) 方法一:贪心 思路 由于arr是[0,..., n-1] 的一个排列,若已遍历过的数中的最大值 max 与当前遍历到的下标相等,说明可以进行一次分割,累加答案。 代码 class Solution { …

javaScript蓝桥杯---用什么来做计算

目录 一、介绍二、准备三、目标四、代码五、完成 一、介绍 古以算盘作为计算工具。算盘常为木制矩框,内嵌珠子数串,定位拨珠,可做加减乘除等运算。站在前人的肩膀上,后人研究出计算器,便利了大家的生活,我…

从贝叶斯派的角度去看L1和L2

前沿 推导的两个角度 带约束条件的优化求解(拉格朗日乘子法)贝叶斯学派的:最大后验概率 理解的两个角度 贝叶斯学派的角度,L2参数符合高斯先验,L1参数符合laplace先验。从有约束问题角度,用拉格朗日转换…

一“幕”了然 ,平行云助力中车打造“掌上工厂”(文末活动报名)

“全球工业生产效率提高1%,成本降低300亿。” 所以工业界有这样一种说法,叫做“工业领域的1%革命”。 Gartner曾预言:到2021年,将有一半的大型工业公司使用数字孪生技术,而这可以使这些公司的生产有效性提高10%。如今…

rust学习 - 构建mini 命令行工具

rust 的运行速度、安全性、单二进制文件输出和跨平台支持使其成为构建命令行程序的最佳选择。 实现一个命令行搜索工具grep,可以在指定文件中搜索指定的字符串。想实现这个功能呢,可以按照以下逻辑流程处理: 获取输入文件路径、需要搜索的字符串读取文…