机器学习周报(8.26-9.1)

文章目录

  • 摘要
  • Abstract
  • self-attetion
    • QKV理解
    • 如何让self-attention更有效
      • local attention/truncated attention方法
      • stride attention方法
      • Global Attention方法
      • data driving方法
        • Clustering
        • sinkhorn sorting network
        • 选取representative keys
        • 减少Keys数量的方法
        • self-attention
        • Synthesizer
    • 总结

摘要

本周先是好好理解了一下self-attention的QKV的理解,关于如何让自注意力机制更有效的问题,学习了self-attention的多种变形,包括减少注意力矩阵的计算量、加快注意力机制的运算速度、去掉attention等。

Abstract

This week, I first had a good understanding of the QKV of self-attention, about how to make the self-attention mechanism more effective, and learned a variety of variants of self-attention, including reducing the computation amount of attention matrix, speeding up the computation speed of attention mechanism, removing attention and so on.

self-attetion

QKV理解

以搜索查询商品为例:
query可以理解为输入要查询的商品;
key为商品的标签或者title;
value可理解为商品的评价之类的;

相似度=querykey(矩阵乘法) 根据相似度 召回
总分=相似度
value 根据总分排序输出

在这里插入图片描述

Q(query):模型从token中提取出来的对token的理解信息,用于主动与其他token计算相似程度
K(key):模型从token提取出来的,与其他token的关系信息,被用于与其他token计算相似程度
V(value):表示当前token的重要程度

  • self-attention中self的理解
    self-attention的self,表示query,key,value都来自自己,每个token都能提取出来自己的query,key,value

  • 计算过程

A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d k V ) Attention(Q,K,V)=softmax(\frac{QK^T}{\sqrt{d_k}}V) Attention(Q,K,V)=softmax(dk QKTV)

使用具体例子看一下计算过程:
在这里插入图片描述

在这里插入图片描述

如何让self-attention更有效

自制力机制里面的具体计算过程,如果对目前大多数方法进行抽象的话,可以将其归纳为两个过程:第一个过程是根据Query和Key计算权重系数,第二个过程根据权重系数对Value进行加权求和。

第一个过程中,输入一个向量,可通过乘以不同的矩阵得到一个query和一个key的向量序列,长度都和输入序列一样(假设为N)。由query和key 两个序列做点积就可以得到attention matrix,这个运算量是NN级的。这种方式最大的问题就是当序列长度太长的时候,对应的 Attention Matrix 维度太大,会给计算带来麻烦。当N很小的时候,运算量放在整个网络里面可以忽略不计,但当N很大的时候,self-attention就有可能主导整个网络的运算量,这时优化self-attention的计算就可以得到显著的影响,这样我们加快self attention 才会对神经网络有帮助。

在这里插入图片描述

local attention/truncated attention方法

例如只看前后两个位置的时候,那么与其他位置的值就可以直接设置为0,例如图中灰色的位置。但是这个这个明显有问题,我们在做attention的时候只能看到小范围的数值,那这个就跟CNN非常相似了,local attention是可以加快我们的attention的方法,但是不一定能得到很好的结果。

在这里插入图片描述

stride attention方法

上面是看前后一步的位置,这样只能看到局部的信息,而stride attention可以看指定步长的邻居,因此可以考虑范围相对广一些,下图的例子考虑间隔两格的邻居,步长设置为2,根据实际问题需要可以设置不同的步长。

在这里插入图片描述

Global Attention方法

如果需要考虑所有的输入,又不想计算量太大,就可以用到global attention。核心思想是加入一个特殊token到原始的sequence里面,在global attention,每个特殊的token都加入每一个token,收集全局信息。每个特殊的token都被其他所有的token加入,以用来获取全局信息。

在这里插入图片描述

Longformer 就是组合了上面的三种 attention

Big Bird 就是在 Longformer 基础上随机选择 attention 赋值,进一步提高计算效率。

在这里插入图片描述

data driving方法

在一个self-attention里面的矩阵里面,某些位置有很大的值,有些位置又有很小的值,那我们是否可以把很小的值变为0,那我们是否能估计矩阵哪里有大值,哪里有小值吗?这个方法叫做clustering。
在这里插入图片描述

Clustering
  • 我们先把query和key取出来,然后根据query和key的相近程度做clustering。对于相近的数据就放在一起,对于比较远的数据就属于不同的cluster。
    下面我们有四个cluster,用不同的颜色来标出。

在这里插入图片描述

对于query和key形成的attention matrix来说,只有当query和key的cluster属于同一个的时候,我们才计算他们的attention weight。对于不属于同一个cluster的两个query和key,就把他们设为0。这种方法可以加速我们的运算,这是一种基于数据来决定的!

在这里插入图片描述

sinkhorn sorting network

上面的方法是通过人为决定attention matrix 里面哪些位置不需要计算。而在sinkhorn sorting network里面,机器自己直接学习另外一个network来决定怎么输出这个矩阵。

在这里插入图片描述

我们把输入的序列,经过一个NN之后产生另外一排向量序列,生成一个N×N的的矩阵。我们要把这个生成的不是二进制的矩阵变成我们的attention matrix。这个过程是不用经过二进制变换的,可以直接输出attention matrix。

我们并不需要一个full attention matrix,因为在一个attention matrix里会有很多冗余的列,很多列都是重复的,因此可以去掉冗余的列,缩小attention matrix,加快attention的速度呢。简化attention matrix的方法:减少计算attention的key的数量。

在这里插入图片描述

选取representative keys

假设有N个key,从中选取K个代表的key。然后与N个query序列相乘得到一个N×K的矩阵,然后从N个value,也选取K个代表value。然后我们把这K个value和attention matrix做weight sum加权和,就得到attention matrix layer的输出。

在这里插入图片描述

为什么选择代表key,而不选择代表query呢?
因为在self-attention里面输入和输出长度一致,如果改变了query的长度那么就改变了输出的长度,如果是输入一个序列输出一个数值的模型就可以选择代表query。

减少Keys数量的方法
  1. 用CNN来扫过输入的key序列,得到一个更短的序列,那这个就是代表性的key。
  2. 输入的key序列可以看成是一个d×N的矩阵,由线性代数知识可知,将一个k×N的矩阵乘上一个N×K的矩阵,然后就得到了d*K的矩阵。那这个得到的新矩阵就是代表性key序列。

在这里插入图片描述

self-attention

输入的向量I分别通过变换矩阵 W q , W k , W v W^q,W^k,W^v Wq,Wk,Wv得到Q,K,V矩阵

在这里插入图片描述
忽略softmax

下面这两种计算方式中,得到的结果是相同的,但是两者的计算速度相差甚远

  1. 第一个计算方法中, K T 和 Q K^T和Q KTQ相乘的乘法次数为N×d×N,得到A(attention matrix),通过softmax得到 A ′ A' A V 与 A ′ V与A' VA的乘法次数为d×N×N,所以送的计算次数为: ( d + d ′ ) N 2 (d+d')N^2 (d+d)N2
  2. 第二个计算方法中,总的计算次数为: 2 d ′ d N 2d'dN 2ddN

在这里插入图片描述

  • 加上softmax的计算过程

在这里插入图片描述

将上述 b b b的计算公式进行简化

在这里插入图片描述

由下图可以看出蓝色的 vector 和黄色的 vector 其实跟 b1 中的 1 是没有关系的。

在这里插入图片描述
也就是说,当我们算 b2、b3… 的时候,蓝色的 vector 和黄色的 vector 不需要再重复计算,大大减少了重复的计算量。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Synthesizer

在这里插入图片描述

总结

本周主要是复习了self-attention的基本原理的前提下,学习了对self-attention的一下更有效的方法,然后有些公式推导理解还不够透彻,我会继续研究推导理解

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jQuery库

注明&#xff1a;本文参考自&#xff1a;jQuery - 白月黑羽 (byhy.net) jQuery安装 Download jQuery | jQuery下载到本地 ps: script标签中的src属性&#xff1a;表示包含要执行的代码的外部文件位置 <!DOCTYPE html> <html lang"en"><head><s…

让自家的智能语音助手实现todo任务的添加

我家的树莓派在成为了“智能语音助手”后&#xff0c;经过rasa学习训练&#xff0c;已经可以帮忙查日期/时间&#xff0c;查天气预报&#xff0c;进行一些简单的闲聊。但是&#xff0c;我希望它的功能还可以再强大些&#xff0c;比如说&#xff0c;可以帮我记录todo任务。为了实…

当网络适配器的Wireless出现感叹号

1.出现如下情况 链接&#xff1a; &#xff1a;一招搞定Intel(R) Wireless-AC 9560显示感叹号&#xff0c;无法打开wifi模块&#xff01;_intel(r)wireless-ac9560感叹号-CSDN博客z 重点&#xff1a; 原因是因为电脑静电的问题。

生产es所有节点全部掉线 排查

生产es所有节点全部掉线 查看message日志发现 内存溢出 修改jvm的改小 清理buff/cache sync && echo 1 > /proc/sys/vm/drop_caches sync && echo 2 > /proc/sys/vm/drop_caches sync && echo 3 > /proc/sys/vm/drop_caches 把es内存的…

Bean 的生命周期

什么是Bean的生命周期 Bean 的生命周期就是&#xff1a;对象从创建开始到最终销毁的整个过程&#xff0c;Bean 对象从创建到销毁中经历了哪些过程 什么时候创建Bean对象&#xff1f;创建Bean对象的前后会调用什么方法&#xff1f;Bean对象什么时候销毁&#xff1f;Bean对象的销…

13-springcloud gateway集成nacos实现负载均衡

网关作为访问系统的入口&#xff0c;负载均衡是必选项而不是可选项&#xff0c;本文介绍gateway与nacos集成&#xff0c;实现负载均衡的过程。关于springcloud gateway的基本用法&#xff0c;同学可以看看上篇文章: 12-使用gateway作为网关。 0、环境 jdk&#xff1a;1.8spri…

idea插件开发的第一天-写一个小Demo

介绍 Demo说明 本文基于maven项目开发,idea版本为2022.3以上,jdk为1.8本文在Tools插件之上进行开发 Tools插件说明 Tools插件是一个Idea插件,此插件提供统一Spi规范,极大的降低了idea插件的开发难度,并提供开发者模块,可以极大的为开发者开发此插件提供便利Tools插件安装需…

LLM系列 | 36:Google最新开源大模型:Gemma 2介绍及其微调(下篇)

引言 环境安装 数据准备 下载 处理 模型训练 模型inference 结果 gemma-2-9b gemma-2-9b-it 引言 低头观落日&#xff0c;引手摘飞星。 小伙伴们好&#xff0c;我是微信公众号《小窗幽记机器学习》的小编&#xff1a;卖黑神话的小女孩。本文紧接前文Google最新开源大…

栈和队列——用队列实现栈

题目中给出&#xff0c;让我们应用两个队列实现栈&#xff0c;首先我们先来想一下&#xff0c;栈是先进后出&#xff0c;队列是先进先出。所以我们就需要应用两个队列来回导才能实现栈的特点。因为这道题是基于队列来实现的&#xff0c;所以在下方若有看不懂的函数名称可以去栈…

【indirect 函数 ★二级下拉菜单】

Indirect 函数 &#x1f33c;indirect函数参数&#x1f33c;应用&#xff1a;&#x1f33c;跨表引用同一单元格&#x1f33c;二级下拉列表 &#x1f33c;indirect函数参数 返回⬅️【文本字符串所指定的引用】 INDIRECT(ref_text,[a1]) 其中【ref_text】是引用的文本 [a1] 是…

网络安全实训六(靶机实例DC-3)

1 信息收集 1.1 获取靶机IP 1.2 扫描靶机网站的目录 1.3 扫描端口和服务器信息 1.4 进入网站 1.5 在msf中给搜索joomla扫描器 1.6 设置参数查看joomla版本信息 1.7 按照版本号搜索漏洞 1.8 查看漏洞使用 2 渗透 2.1 查看是否存在SQL注入 2.2 获取到数据库信息 2.3 爆破列表 2…

盘点java8 stream中隐藏的函数式接口

shigen坚持更新文章的博客写手&#xff0c;记录成长&#xff0c;分享认知&#xff0c;留住感动。个人IP&#xff1a;shigen 提到函数式接口&#xff0c;最常见的就是lambda表达式&#xff0c;IDEA也有智能的提示&#xff1a; 最后改成这样的就是最简洁的、IDEA希望的风格&#…

【我要成为配环境高手】Visual Studio中Qt安装与配置(无伤速通)

1.下载安装Qt和VSIX插件 2.本地环境变量配置 添加如下&#xff1a; D:\ProgramData\Qt\Qt5.14.2\5.14.2\msvc2017_64\libD:\ProgramData\Qt\Qt5.14.2\5.14.2\msvc2017_64\bin3.VS配置 ⭐项目右键->属性->调试->环境&#xff0c;添加如下&#xff1a;(很重要&#x…

随笔十、音频扩展模块测试

本项测试简单&#xff0c;对购买的音频扩展模块进行录音放音测试 按照使用说明&#xff0c;连接音频小板&#xff0c;一个喇叭一个麦克风&#xff0c;4根线&#xff0c;buildroot系统镜像 录音测试 rootRK356X:/# arecord -c 1 -r 44100 -f S16_LE /tmp/record.wav Recording …

【面试五】PID控制算法

一、 PID算法简介 PID&#xff08;Proportional-Integral-Derivative&#xff09;控制算法是一种经典的反馈控制方法&#xff0c;广泛应用于自动控制系统&#xff0c;例如温度控制、速度控制、位置控制等。 PID控制算法的核心包含三个部分&#xff1a;比例项&#xff08;P&…

Linux基础(包括centos7安装、linux基础命令、vi编辑器)

一、安装CentOS7 需要&#xff1a;1、VMware Workstation&#xff1b;2、CentOS7镜像 1、安装镜像 2、虚拟机配置 开启虚拟机&#xff0c;鼠标从vm中移出来用快捷键ctrlalt 点击开始安装&#xff0c;设置密码&#xff0c;等待安装完成,&#xff0c;重启。 3、注意事项 如果没…

CAN总线简介

CAN 是 Controller Area Network 的缩写&#xff08;以下称为 CAN&#xff09;&#xff0c;是 ISO国际标准化的串行通信协议。 历史背景 CAN 最初出现在80年代末的汽车工业中&#xff0c;由德国 Bosch 公司最先提出。当时&#xff0c;由于消费者对于汽车功能的要求越来越多&a…

android仿assistivetouch悬浮窗实现(带功能实现)

一、悬浮窗点击后的界面&#xff1a; 主要有四个功能&#xff0c;返回、应用程序、退出和主界面。其他功能也可以类似添加。 界面布局代码就不贴出来了&#xff0c;源码&#xff08;切记需要签名才能让功能实现&#xff09;&#xff1a;下载地址 二、主要是检测系统启动或者a…

动态规划法例题

第一个空&#xff0c;用手工计算&#xff0c;可以用贪心法 先选择价值最大的物品&#xff0c;有两个价值是6的物品&#xff0c;重量合计246 剩余4个空间&#xff0c;只能放重量为2的物品&#xff0c;一共是66315 第二个空&#xff0c;需要将所有物品都放进背包舱室&#xff…

基于Python的量化交易回测框架Backtrader初识记录(一)

版权声明&#xff1a;本文为博主原创文章&#xff0c;如需转载请贴上原博文链接&#xff1a;基于Python的量化交易回测框架Backtrader初识记录&#xff08;一&#xff09;-CSDN博客 前言&#xff1a;近期以来&#xff0c;对股市数据获取及预处理算是告一段落&#xff0c;下一步…