一文极速了解【自注意力机制】

当下如火如荼的大模型,其中的关键技术就是注意力机制(Attention),于2015年提出。2017年的“Attention is all you need”一文提出了Transformer模型,去掉RNN,只保留注意力,性能吊打所有机器翻译模型,是NLP发展的一个里程碑。
Attention的最主要的用途是自然语言处理,比如机器翻译、情感分析;也有学者将其用于图像处理,比如Vision Transformer(ViT),用了自注意力机制进一步提高了模型在ImageNet的分类性能。

目录

  • 含义
  • 计算步骤
    • 输入x映射到三元组(q,k,v)
    • 计算权重向量 α
    • 计算输出向量 c
    • 注意力的意义
    • 公式总结
  • 多头自注意力
    • 多头的意义

含义

注意力机制(Attention)最初用于改进循环神经网络(RNN),提高Sequence-to-Sequence (Seq2Seq) 模型的表现,主要是为了缓解模型对于长序列的遗忘问题。注意力机制允许模型在处理数据时,动态地关注数据的某些部分,而非静态地处理整个输入。

自注意力机制 (Self-Attention) 是注意力机制的一种扩展,不局限于 Seq2Seq 模型,可以用于任意的 RNN。它允许模型在处理一个序列时,计算序列内各个元素之间的相互关系。
后来 Transformer 模型将 RNN 剥离,只保留注意力机制。 与 RNN + 注意力机制相比,只用注意力机制居然表现更好,在机器翻译等任务上的效果有大幅提升。

自注意力层的输入是序列(x1,…,xm),其中向量的大小都是din * 1。
其有两个显著优点,
第一,序列的长度 m 可以是不确定的,可以动态变化。但是神经网络的参数数量保持不变。
第二,输出的向量 ci 不是仅仅依赖于向量 xi,而是依赖于所有的输入向量 (x1, …, xm)。

自注意力层有三个参数矩阵,分别表示query、key、value:

在这里插入图片描述

 

计算步骤

输入x映射到三元组(q,k,v)

首先,对于所有的 i = 1, · · · , m,把输入的 xi 映射到三元组 (qi, ki, vi):

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

计算权重向量 α

在这里插入图片描述

在这里插入图片描述

 

计算输出向量 c

在这里插入图片描述

 

注意力的意义

在这里插入图片描述
 

公式总结

在这里插入图片描述
dk是K的维度,用来缩放点积,避免得到太大的数值。

非常推荐大家去阅读一个白话解释这个公式的博客,讲得非常好,包括为什么要有Q、K、V三个矩阵,为什么Transformer能做到并行数据处理等。《Self-attention 公式解释》

 

多头自注意力

上面介绍的是单头自注意力层,实践中更常用的是多头自注意力层,它是多个单头的组合。
设多头由 l 个单头组成。每个单头有自己的 3 个参数矩阵,所以多头一共有 3l 个参数矩阵。它们的输入都是序列 (x1, · · · , xm),它们的输出都是长度为 m 的向量序列。

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

在这里插入图片描述
 

多头的意义

1、并行学习多种关系:

多头自注意力通过 并行地运行多个自注意力“头” 来实现。每个“头”学习序列中不同的特征或关系。这允许模型在不同的表示子空间同时捕获序列的多种方面,学习更多样化的特征,如不同类型的语义和句法信息。

2、提高模型的表达能力:

多头机制增加了模型的表达能力。不同的注意力头可以关注序列的不同部分,使模型能够更全面地理解和表示数据。

总的来做,与单头相比,多头能提供更丰富的信息捕获能力和更好的泛化能力,提高了模型在处理复杂序列数据时的表达能力和性能。

 
本文内容为看完王树森和张志华老师的《深度强化学习》一书的学习笔记,十分推荐大家去看原书!

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

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

相关文章

基于springboot+vue的蜗牛兼职网的设计与实现系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…

我的创作纪念日-1024总结

我的创作纪念日-1024总结 1 机缘1.1 创作的初心是解决重复性问题1.2 实战项目中的经验分享1.3 日常学习中的记录1.4 其他方式的分享 2 收获3 日常4 成就5 憧憬 1 机缘 1.1 创作的初心是解决重复性问题 成为创作者的初心是因人而异的,但对我而言,它源于…

lua使用resty.http做nginx反向代理(https请求,docker容器化部署集群),一个域名多项目转发

下载使用 链接:https://pan.baidu.com/s/1uQ7yCzQsPWsF6xavFTpbZg 提取码:htay –来自百度网盘超级会员V5的分享 在根目录下执行: # 从 github 上下载文件 git clone https://github.com/ledgetech/lua-resty-http.git # 将 lua-resty-http/lib/ 下的 r…

实验一 安装和使用Oracle数据库

🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的…

【MYSQL】存储引擎MyISAM和InnoDB

MYSQL 存储引擎 查看MySQL提供所有的存储引擎 mysql> show engines; mysql常用引擎包括:MYISAM、Innodb、Memory、MERGE 1、MYISAM:全表锁,拥有较高的执行速度,不支持事务,不支持外键,并发性能差&#x…

基于光口的以太网 udp 回环实验

文章目录 前言一、系统框架整体设计二、系统工程及 IP 创建三、接口讲解四、顶层模块设计五、下载验证前言 本章实验我们通过网络调试助手发送数据给 FPGA,FPGA通过光口接收数据并将数据使用 UDP 协议发送给电脑。 提示:任何文章不要过度深思!万事万物都经不起审视,因为世上…

浅谈对Maven的理解

一、什么是Maven Maven——是Java社区事实标准的项目管理工具,能帮你从琐碎的手工劳动中解脱出来,帮你规范整个组织的构建系统。不仅如此,它还有依赖管理、自动生成项目站点等特性,已经有无数的开源项目使用它来构建项目并促进团队…

2024.1.17每日一题

LeetCode 2744.最大字符串配对数目 2744. 最大字符串配对数目 - 力扣(LeetCode) 题目描述 给你一个下标从 0 开始的数组 words ,数组中包含 互不相同 的字符串。 如果字符串 words[i] 与字符串 words[j] 满足以下条件,我们称…

开放原子训练营(第四季)TobudOS——TobudOS内核移植(keil版)

前言 12月份参加了开放原第四季线下活动,觉得很有意义。通过这篇博文,记录一下这次活动进行的移植TobudOS内核的过程,下面就让我们开始吧。 开发板介绍 本次使用的开发板型号为STM32H750,当然了,其他型号的开发版也…

在uni-app中使用sku插件,实现商品详情页规格展示和交互。

商品详情 - SKU 模块 学会使用插件市场,下载并使用 SKU 组件,实现商品详情页规格展示和交互。 存货单位(SKU) SKU 概念 存货单位(Stock Keeping Unit),库存管理的最小可用单元,通…

股票套牢,如何解套?当下行情怎么赚钱?

今年开年大盘继续一路下行,今天更是直接跌破2800点,很多朋友都是套牢的阶段,这种时候我们怎样解套,在这种情况下,作为散户的我们又如何才可以赚到钱呢? 股票被套可以借用哪些工具解套?详细操作…

软件测试面试题整理

软件测试的几个阶段 在进行Beta测试之前和之后,通常会进行以下几种测试: 内部测试(Internal Testing) 在Beta测试之前,开发团队会进行内部测试,对软件进行全面的测试。这个阶段包括单元测试、集成测试和系…