人工智能基础部分25-一篇文章将透注意力机制(Attention)与自注意力机制(self-Attention),帮助大家加深印象

大家好,我是微学AI,今天给大介绍一下人工智能基础部分25-一篇文章将透注意力机制(Attention)与自注意力机制(self-Attention),帮助大家加深印象。注意力机制(Attention)与自注意力机制(self-Attention)都是在深度学习模型中用于提升模型性能的技术,它广泛地应用于计算机视觉、自然语言处理等深度学习任务,它们之间的主要区别在于作用的对象和场景。

文章目录

  • 一、注意力机制的起源与发展
    • Attention的起源
    • self-Attention的起源
  • 二、注意力机制与自注意力机制的区别
    • 注意力机制
    • 自注意力机制
    • Attention与self-Attention的形象例子
  • 三、自注意力机制是怎么实现的
    • 自注意力机制的基本步骤
    • 实现自注意力机制的Python代码
  • 四、注意力机制在哪些领域中有应用
    • 自然语言处理
    • 计算机视觉
    • 语音识别
    • 数据预测

一、注意力机制的起源与发展

Attention的起源

注意力机制起源于上世纪80年代,最初主要应用于计算机视觉领域,用于解决目标检测和识别问题。在自然语言处理领域,注意力机制的发展可以追溯到2014年,Bahdanau等人在他们的论文《Neural Machine Translation by Jointly Learning to Align and Translate》中首次提出了一种基于注意力机制的神经机器翻译模型4。

随着深度学习的快速发展,注意力机制成为了自然语言处理领域的核心技术之一。许多最先进的模型,如BERT、GPT等,都使用了注意力机制来实现对输入序列的建模和表示学习。这些模型在各种自然语言处理任务上取得了显著的成果,并且成为了该领域的重要里程碑。

self-Attention的起源

自注意力机制最早是在2017年被提出,并在被广泛应用于Transformer模型中,成为了自然语言处理领域的重要突破之一。自注意力机制的核心思想是将输入序列中的每个元素都看作是查询、键和值,通过计算它们之间的相似度来确定每个元素对于其他元素的重要性。
当时Bahdanau等人提出了一种基于注意力机制的神经机器翻译模型。其中自注意力机制被广泛应用于编码器和解码器中。这个模型在机器翻译、文本生成和语言理解等任务中都取得了非常好的效果,成为了自然语言处理领域的重要突破之一[2]。
注意力机制和自注意力机制都是深度学习领域的重要创新,它们通过动态地关注输入序列中的重要部分,提高了模型的性能和效率,并且在自然语言处理、计算机视觉等多个领域都有广泛的应用。

二、注意力机制与自注意力机制的区别

注意力机制和自注意力机制都是在深度学习模型中用于提升模型性能的技术,它们的主要区别在于作用的对象和场景。

注意力机制

注意力机制是一种允许模型在处理输入时,对不同的部分赋予不同权重的机制。例如,在处理一个句子时,模型可能会对一些关键词赋予更高的权重,以使模型更加关注这些部分。
在这里插入图片描述

自注意力机制

自注意力机制则是一种特殊的注意力机制,它是在同一个输入中,根据不同位置的重要性赋予不同的权重。例如,在一个句子中,模型可能会根据不同位置的关键词赋予不同的权重,以更好地捕捉输入中的关键信息。
在这里插入图片描述

Attention与self-Attention的形象例子

注意力机制就像是聚会上的一个主持人,他/她会在不同的时间点引导大家的注意力到不同的客人或活动上。比如,当宣布晚餐开始时,主持会将大家的注意力引向餐桌;当进行游戏环节时,又会让大家的注意力集中在正在游戏的客人身上。主持人的注意力是选择性的,每次只关注聚会中的一个特定部分。
自注意力机制则像是聚会上的一个互动游戏,比如“真心话大冒险”,在这个游戏中,每个人都需要轮流分享自己的故事或回答问题,而其他所有人都在认真倾听并参与互动。在这个过程中,每个人都在关注其他人说的内容,并根据这些内容来更新自己对整个聚会的理解和感受。每个参与者都在同时关注所有人,而不是只听主持人的引导。

三、自注意力机制是怎么实现的

自注意力机制(Self-Attention Mechanism)是一种特殊的注意力机制,它是在同一个输入中,根据不同位置的重要性赋予不同的权重。例如,在一个句子中,模型可能会根据不同位置的关键词赋予不同的权重,以更好地捕捉输入中的关键信息。

自注意力机制的基本步骤

  1. 获取输入特征:给定输入特征 a 1 , a 2 , . . . , a n a^1, a^2, ..., a^n a1,a2,...,an,其中 n n n 是输入的长度。

  2. 计算查询(Query)、键(Key)和值(Value):将输入特征 I I I 乘以三个矩阵 W q W^q Wq W k W^k Wk W v W^v Wv,得到查询 Q Q Q、键 K K K 和值 V V V 三个矩阵。

  3. 计算注意力矩阵:使用查询 Q Q Q 和键 K K K 的乘积得到注意力矩阵 A A A,然后进行归一化得到 A ^ \hat{A} A^

  4. 计算最终输出:将归一化后的注意力矩阵 A ^ \hat{A} A^ 乘以值 V V V,得到最终的输出特征 O O O
    在这里插入图片描述

此外,还有一种更高级的形式叫做多头自注意力机制(Multi-Head Self-Attention Mechanism)。在这种机制中,每个输入特征 a i a^i ai都会被分成多个子向量,每个子向量都会被赋予不同的权重,从而能够从不同的角度捕捉输入中的信息。这种机制通常比单头自注意力机制效果更好,因为它可以捕获更多的信息维度。

实现自注意力机制的Python代码

import torch.nn as nn
import torch

class SelfAttention(nn.Module):
    def __init__(self, d_in, d_out_kq, d_out_v):
        super().__init__()
        self.d_out_kq = d_out_kq
        self.W_query = nn.Parameter(torch.rand(d_in, d_out_kq))
        self.W_key = nn.Parameter(torch.rand(d_in, d_out_kq))
        self.W_value = nn.Parameter(torch.rand(d_in, d_out_v))

    def forward(self, x):
        keys = x @ self.W_key
        queries = x @ self.W_query
        values = x @ self.W_value
        attn_scores = queries @ keys.T # unnormalized attention weights
        attn_weights = torch.softmax(attn_scores / self.d_out_kq**0.5, dim=-1)
        context_vec = attn_weights @ values
        return context_vec

这段代码首先定义了一个名为 S e l f A t t e n t i o n SelfAttention SelfAttention 的模块,然后在 f o r w a r d forward forward方法中实现了自注意力机制的过程。在这个过程中,使用了 PyTorch 的线性层 n n . L i n e a r nn.Linear nn.Linear 来定义查询、键和值的映射矩阵,并使用 PyTorch 的广播操作 @ 来进行矩阵乘法运算。

四、注意力机制在哪些领域中有应用

自注意力机制在多个领域中都有应用,以下是几个主要的应用领域:

自然语言处理

自注意力机制在自然语言处理领域中有着广泛的应用,例如机器翻译、文本分类、情感分析等任务。基于自注意力机制的Transformer模型已经成为NLP领域的标配架构之一[4]。

计算机视觉

自注意力机制也在计算机视觉领域得到了广泛的应用,例如图像分类、目标检测、图像生成等任务。通过引入自注意力机制,可以有效地捕捉图像中的全局上下文信息[4]。

语音识别

自注意力机制还被应用于语音识别领域,例如自注意力循环神经网络是一种结合了自注意力机制和循环神经网络的序列建模模型,它在语音识别、时间序列分析等领域有重要的应用[2]。

数据预测

自注意力机制也被用于数据预测领域,例如基于自注意力机制的序列建模算法可以用于学习源语言和目标语言之间的关联性,实现了对句子级别的翻译建模,为机器翻译任务提供了更好的基础[2]。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C 多维数组

C 语言支持多维数组。多维数组声明的一般形式如下: type name[size1][size2]...[sizeN];例如,下面的声明创建了一个三维 5 . 10 . 4 整型数组: int threedim[5][10][4];二维数组 多维数组最简单的形式是二维数组。一个二维数组&#xff0c…

测试开发面试题总结(全)

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 某基金管理公司线下测试开发面试题总结。 测开题目如下 可以尝试自己先写,写完之后…

【Linux】实现进度条小程序

个人主页 : zxctscl 如有转载请先通知 文章目录 1. 前言2. 回车和换行3. 缓冲区4. 进度条4.1 倒计时设置4.2 进度条4.2.1 实现简单进度条4.2.2 进度条完善 5. 附进度条代码5.1 Processbar.h5.2 Processbar.c5.3 Main.c5.4 Makefile 1. 前言 在之前已经了解了 【Lin…

GDK-你的跳广告神器(某足兆足兆替品)

GKD(又称搞快点)是一款免费开源简洁多规则的自动跳过广告的软件。简而言之,基于预设的定时更新订阅规则快照功能,实现识别并自动点击跳过任何开屏广告及点击关闭应用内部任何弹窗广告,如关闭某些APP开屏和内含推荐广告…

数据库关系代数运算:期末+复试

文章目录 一、知识概览二、并三、差四、交五、笛卡尔积六、投影七、选择八、连接九、除实战训练 一、知识概览 二、并 三、差 四、交 五、笛卡尔积 六、投影 投影是对列 七、选择 选择是对行 八、连接 自然连接是一种特殊的等值连接,他要求两个关系表中进行连…

自制颜色调试网站(渐变色调试,桌面选色)

一、页面展示 二、网站 缓若江海凝清光

【Linux】进程控制 -- 详解

一、进程创建 目前学习到的进程创建的两种方式: 命令行启动命令(程序、指令等) 。通过程序自身,调用 fork 函数创建出子进程。 1、fork 函数初识 在 Linux 中的系统接口 fork 函数是非常重要的函数,它从已存在进程中…

JavaEE 初阶篇-深入了解操作系统中的进程与 PCB

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 关于计算机是如何进行工作的 “常识” 1.1 关于寄存器、缓存与内存是如何配合 CPU “工作” 2.0 操作系统概述 2.1 操作系统内核 2.2 进程 2.3 PCB 2.3.1 PCB 属性…

Grok-1开源革新:探索人工智能的新境界

Grok-1开源革新:探索人工智能的新境界 在科技发展的马拉松中,Elon Musk旗下的xAI公司稳步前进,推出了名为Grok-1的语言模型。这个巨型模型,作为目前参数量最大的开源人工智能语言模型,赋予了机器学习领域全新的活力。 …

Swift 从获取所有 NSObject 对象聊起:ObjC、汇编语言以及底层方法调用链(二)

概览 我们在第一篇博文: 《Swift 从获取所有 NSObject 对象聊起:ObjC、汇编语言以及底层方法调用链(一)》中讨论了 Swift 语言中的钩子(Hook)机制,以及如何用它来“勾”住 NSObject 的 init 构造器方法。 不过,目前“疑云重重”的实现显然“虐”的你在一直“怀疑人生”…

信雅纳400/800G网络测试仪之 CDF/ Extended Payload 功能:完全用户自定义的协议报文支持/可编程的协议内容支持

Note# 2024-3-21 今天被一个做芯片测试的客户追着问,应该合作在测试仪上做完全自定义的报文,添加自己的私有协议进去,他觉得每次都导入报头太麻烦了,然后就看了下Application Note关于CDF功能的描述,照着机翻的版本来…

回归学术圈,何恺明MIT第一堂AI课

大家好,3月7日,麻省理工学院电气工程与计算机科学系副教授何恺明,迈上讲台,并成功地进行了他人生中的首堂教学课程。 第一堂课 课程官网:https://advances-in-vision.github.io/ 作为麻省理工学院(MIT&am…

处理器方法的返回值--返回对象Object

处理器方法也可以返回Object对象。这个Object可以是Integer,String,自定义对象, Map,List 等。但返回的对象不是作为逻辑视图出现的,而是作为直接在页面显示的数据出现的。 返回对象,需要使用ResponseBody注…

【前端工程化】TypeScript概念及使用

前端工程化(2)- TS 文章目录 前端工程化(2)- TSTS概念TS声明变量方式TS的类访问修饰符静态属性抽象类 TS的数据类型tuple元祖enum枚举anyvoidnever enum枚举使用例子反向映射枚举和常量枚举(const枚举)的区…

一文读懂融资融券交易技巧!在上海开融资融券账户交易利率一般是多少?

融资融券交易技巧包括以下几点: 熟悉股票市场:了解市场走势、公司基本面等信息,根据趋势选择合适的股票进行交易。 做好风险管理:对买卖的风险进行合理评估,设定止损价位,防止损失过大。 控制杠杆比例&am…

PowerShell 一键更改远程桌面端口

前言 提高工作效率,安全性和规范化,最终实现一键更改Windows 远程桌面端口 前提条件 开启wmi,配置网卡,参考 一键更改远程桌面端口自动化脚本 默认端口3389变更后的端口3390win+r mstsc YOU_ip常规更改的连接方式win+r mstsc YOU_ip:3390需要恢复到原来的端口3390更改成3…

【Linux笔记】汇编

汇编笔记 启动方式

IoT 物联网场景中 LoRa + 蓝牙Bluetooth 室内场馆高精定位技术全面解析

基于LoRa蓝牙的室内场景定位技术,蓝牙主要负责位置服务,LoRa主要负责数据传输。 01 LoRa和蓝牙技术 LoRa全称 “Long Rang”,是一种成熟的基于扩频技术的低功耗、超长距离的LPWAN无线通信技术。LoRa主要采用的是窄带扩频技术,抗干…

【spring】@Lazy注解学习

Lazy介绍 Lazy 注解是一个配置注解,用于指示 Spring 容器在创建 bean 时采用延迟初始化的策略。这意味着,除非 bean 被实际使用,否则不会被创建和初始化。 在 Spring 框架中,默认情况下,所有的单例 bean 在容器启动时…