【AI】注意力机制与深度学习模型

目录

一、注意力机制

二、了解发展历程

2.1 早期萌芽:

2.2 真正意义的注意力机制:

2.3 2015 年及以后:

2.4 自注意力与 Transformer:

2.5 BERT 与预训练模型:

三、基本框架

1. 打分函数(Score Function)

2. 校准函数(Alignment Function / Softmax)

3. 融合(Fusion / Weighted Sum)

比如机器翻译任务

四、分类

4.1 根据注意力的计算区域分类

4.2 根据注意力的可微性分类

4.3 根据注意力的来源分类

4.4 根据注意力的层次结构分类

4.5 其他形式的注意力模型


一、注意力机制

从人工智能专家的角度来看,注意力机制(Attention Mechanism)是一种在深度学习模型中,尤其是在处理序列数据(如文本、语音、时间序列等)时非常重要的技术。其核心思想是让模型在处理信息时能够“集中注意力”在更相关的部分,而忽略不那么重要的信息。

视觉注意力机制是人类视觉所特有的大脑信号处理机制。人类视觉通过快速扫描全局图像,获得需要重点关注的目标区域,也就是一般所说的注意力焦点,而后对这一区域投入更多注意力资源,以获取更多所需要关注目标的细节信息,而抑制其他无用信息。这是人类利用有限的注意力资源从大量信息中快速筛选出高价值信息的手段,是人类在长期进化中形成的一种生存机制,人类视觉注意力机制极大地提高了视觉信息处理的效率与准确性。计算机视觉中的注意力机制从本质上讲和人类的选择性视觉注意力机制类似,核心目标也是从众多信息中选择出对当前任务目标更关键的信息。

以下是注意力机制的一些关键要点:

  1. 直观理解:想象一下你正在阅读一篇文章。你不会一字不漏地看完每一个字,而是会集中注意力在那些对你而言最重要或最相关的词或句子上。这就是注意力机制希望模拟的行为。

  2. 工作原理:在深度学习模型中,注意力机制通常通过计算一个权重分布来实现。这个分布决定了在生成输出时,输入序列中的哪些部分应该被更多地关注。例如,在机器翻译任务中,生成目标语言的一个词时,模型可能会更多地关注源语言中与之对应的词或短语。

  3. 数学表达:给定一个查询(Query)和一个键值对集合(Key-Value pairs),注意力机制可以计算出一个加权的输出。查询、键和值通常都是向量。输出的计算通常涉及查询与每个键的点积,然后应用一个softmax函数来得到权重分布,最后用这个分布加权所有的值来得到最终的输出。

  4. 类型:有多种注意力机制,包括但不限于:

    • 全局注意力与局部注意力:全局注意力考虑输入序列的所有位置,而局部注意力只关注输入序列的特定子集。
    • 自注意力(Self-Attention):在自注意力中,查询、键和值都来自同一个输入序列。这种机制在Transformer模型中得到了广泛应用。
    • 多头注意力(Multi-Head Attention):在这种机制中,多个独立的注意力模块并行运行,并将它们的输出拼接或平均起来,以捕获输入数据的不同方面。
  5. 优势与应用:注意力机制可以提高模型的可解释性(因为可以看到模型关注了哪些输入),并允许模型处理变长输入序列。它们在各种NLP任务中都取得了巨大成功,如机器翻译、问答系统、情感分析和文本摘要等。此外,注意力机制也被应用于其他领域,如计算机视觉和语音识别。

二、了解发展历程

2.1 早期萌芽

  • 在深度学习兴起之前,注意力机制的思想已经在一些传统的机器学习模型中有所体现,比如隐马尔可夫模型(HMM)中的对齐(Alignment)概念,但这并不算是真正的“注意力”。

2.2 真正意义的注意力机制

  • 注意力机制在深度学习中的首次明确提出通常与 Bahdanau 等人在 2014 年的工作《Neural Machine Translation by Jointly Learning to Align and Translate》相关联。在这篇论文中,作者们为机器翻译任务引入了一种名为“加性注意力”(Additive Attention)的机制,允许模型在生成目标语言句子时自动搜索源语言句子中的相关部分。这种方法极大地改善了之前基于编码-解码(Encoder-Decoder)架构的机器翻译系统的性能,尤其是当处理长句子时。

2.3 2015 年及以后

  • Luong 等人在 2015 年的论文《Effective Approaches to Attention-based Neural Machine Translation》中提出了两种新的注意力机制:全局注意力(Global Attention)和局部注意力(Local Attention),并对加性注意力和点积注意力(Dot-Product Attention)进行了比较。
  • 同一时期,注意力机制开始被应用到其他自然语言处理任务中,如文本分类、情感分析、问答系统等。

2.4 自注意力与 Transformer

  • 2017 年,Vaswani 等人的论文《Attention is All You Need》彻底改变了注意力的研究方向和应用领域。这篇论文提出了 Transformer 架构,完全基于自注意力(Self-Attention)机制,摒弃了传统的循环神经网络(RNN)和卷积神经网络(CNN)。Transformer 模型通过多头自注意力机制(Multi-Head Self-Attention)实现了对输入序列内部依赖关系的有效建模,并在机器翻译任务上取得了显著的性能提升。
  • 自此以后,Transformer 成为了自然语言处理领域的主导架构,并被广泛应用于各种任务中,包括但不限于语言建模、机器翻译、文本摘要、对话系统等。

2.5 BERT 与预训练模型

  • 2018 年,Devlin 等人提出了 BERT(Bidirectional Encoder Representations from Transformers),这是一种基于 Transformer 的预训练语言模型。BERT 通过在大规模无标签文本数据上进行预训练,学习到了通用的语言表示,可以通过微调(Fine-tuning)来适应各种下游任务。BERT 的成功进一步推动了注意力机制在自然语言处理领域的应用和发展。

三、基本框架

注意力机制最早在 NLP 应用中被提出并发展,且大多模型都构建在 RNN 网络上。随着 Transformer 模型的提出,注意力模型开始采用编解码器网络而脱离了 RNN 的局限。之后,注意力模型被广泛应用于计算机视觉领域。视觉注意力模型与NLP 注意力模型略有不同,具体地包含三个部分:

1. 打分函数(Score Function)

打分函数负责为输入序列中的每个元素计算一个与当前焦点(比如解码器中的某个状态)相关的得分。这个得分反映了输入元素对于当前焦点的重要性。常见的打分函数有点积、加性/拼接等。

  • 点积打分(Dot-Product Score):
    在点积注意力中,打分函数计算解码器当前状态与编码器每个状态的点积。假设解码器当前状态为query,编码器状态集合为keys,则打分函数为:scores = query · keys^T

  • 加性/拼接打分(Additive/Concatenation Score):
    在这种注意力中,解码器当前状态和编码器状态首先被拼接起来,然后通过一个全连接层(可能包含非线性激活函数)来计算得分。

2. 校准函数(Alignment Function / Softmax)

校准函数负责将打分函数输出的原始得分转换成一组权重,这些权重将被用于加权输入序列中的元素。通常,这一步是通过softmax函数来实现的,softmax可以将原始得分转换成一组和为1的正数权重。

weights = softmax(scores)

3. 融合(Fusion / Weighted Sum)

最后一步是根据校准后的权重对输入序列进行加权求和,得到一个上下文向量(context vector)。这个上下文向量包含了输入序列中与当前焦点最相关的信息。

context_vector = weights * values

这里的values通常是与keys相对应的编码器输出序列。在自注意力中,keysvaluesquery都来自同一个输入序列。

比如机器翻译任务

考虑一个英文到中文的机器翻译任务,其中英文句子“I love machine learning”需要被翻译成中文“我爱机器学习”。在生成中文“我”的时候,注意力模型可能会给英文单词“I”一个很高的权重,而给其他单词较低的权重;在生成“爱”的时候,模型可能会关注“love”;以此类推。

  • 打分函数:对于解码器生成“我”时的状态,模型会计算它与编码器中每个单词状态的得分,比如通过点积或加性方法。
  • 校准函数:得分会被转换成权重,比如通过softmax,这样“I”会得到一个接近1的权重,而其他单词的权重会很小。
  • 融合:最后,根据这些权重对编码器的输出进行加权求和,得到一个上下文向量,这个向量会被解码器用来生成“我”。

这个过程会在生成每个中文词的时候重复进行,确保解码器能够关注到输入英文句子中最相关的信息。

四、分类

注意力模型可以根据不同的分类标准有多种形式。以下是对注意力模型不同形式的分类及其详细解释,力求条理清晰、全面无遗漏:

4.1 根据注意力的计算区域分类

——Soft Attention(软注意力)

  • 特点:对所有输入数据进行加权处理,每个输入数据都会被赋予一个注意力权重。
  • 工作机制:不设置筛选条件,而是通过计算每个输入与当前焦点的相关度来分配权重。
  • 应用场景:常见于需要全局考虑输入信息的情况,如机器翻译、文本摘要等。

——Hard Attention(硬注意力)

  • 特点:只关注输入序列中的特定部分,忽略其他不相关的部分。
  • 工作机制:在生成注意力权重后,通过设定阈值或采样方式选择性地关注某些输入。
  • 应用场景:适用于需要精确定位关键信息的情况,如图像分类中的关键区域定位。

——Local Attention(局部注意力)

  • 特点:结合了Soft Attention和Hard Attention的思想,既关注特定区域又保持了一定的灵活性。
  • 工作机制:首先通过Hard Attention的方式定位到某个区域,然后在该区域内使用Soft Attention进行加权处理。
  • 应用场景:适用于需要同时考虑全局和局部信息的情况,如语音识别中的音素识别。

4.2 根据注意力的可微性分类

——Hard Attention

  • 如上所述,Hard Attention是一个不可微的注意力机制,通常使用强化学习等方法进行优化。

——Soft Attention

  • Soft Attention是一个可微的注意力机制,可以通过梯度下降等优化算法进行训练。由于其可微性,Soft Attention在深度学习模型中得到了广泛应用。

4.3 根据注意力的来源分类

——General Attention(普通注意力)

  • 特点:利用外部信息来指导注意力的分配。
  • 工作机制:在生成注意力权重时,考虑当前焦点与外部信息(如查询向量)的匹配程度。
  • 应用场景:适用于需要利用外部知识或上下文信息来指导注意力分配的情况。

——Self Attention(自注意力)

  • 特点:仅利用输入序列内部的信息进行注意力分配,不考虑外部信息。
  • 工作机制:将输入序列中的每个元素与其他元素进行比较和关联,从而计算出每个元素的注意力权重。
  • 应用场景:自注意力是Transformer模型中的核心机制之一,广泛应用于自然语言处理领域的各种任务中。由于其能够捕捉输入序列内部的依赖关系,自注意力也被用于图像识别、语音识别等其他领域。
  • 具体形式:自注意力可以进一步分为单头自注意力和多头自注意力。单头自注意力使用一个注意力头来计算权重;而多头自注意力则使用多个独立的注意力头并行计算权重,然后将它们的结果拼接或平均起来作为最终的输出。这种多头机制可以捕捉输入数据在不同子空间中的特征表示,从而提高模型的表达能力。

4.4 根据注意力的层次结构分类

——单层Attention

  • 在单层Attention中,注意力机制只作用于输入序列的一个层次上(如词级别),没有考虑不同层次之间的关联和交互。

——多层Attention

  • 多层Attention通过堆叠多个注意力层来捕捉输入序列在不同层次上的信息。每个注意力层都可以关注到不同级别的信息(如词级别、短语级别、句子级别等),从而实现更细粒度的信息抽取和表示学习。这种多层结构有助于模型捕捉更复杂的语言现象和语义关系。

——多头Attention(Multi-Head Attention)

  • 多头Attention是Transformer模型中的一个关键组件,它通过并行计算多个独立的注意力头来捕捉输入序列在不同子空间中的特征表示。每个头都可以关注到不同的信息片段,从而提高了模型的表达能力和泛化能力。多头Attention的输出通常是将所有头的输出拼接起来或通过线性变换进行融合得到的。

4.5 其他形式的注意力模型

除了上述分类方式外,还有一些其他形式的注意力模型值得提及:

——通道注意力(Channel Attention)

  • 通道注意力主要关注输入特征图中不同通道之间的重要性差异。通过对每个通道的特征进行加权处理来强调或抑制某些通道的信息传递,从而提高模型对关键特征的敏感性。常见的通道注意力机制包括SENet中的Squeeze-and-Excitation模块和ECANet中的Efficient Channel Attention模块等。

——空间注意力(Spatial Attention)

  • 空间注意力主要关注输入特征图中不同空间位置的重要性差异。通过对每个位置的特征进行加权处理来强调或抑制某些位置的信息传递,从而使模型能够聚焦于关键区域或忽略不相关区域的信息干扰。常见的空间注意力机制包括ConvLSTM中的Spatial Attention模块和STN(Spatial Transformer Networks)中的Affine Transformation等。

综上所述,注意力模型具有多种形式和分类方式,每种形式都有其独特的特点和应用场景。在实际应用中,可以根据具体任务和数据特点选择合适的注意力机制来提高模型的性能和解释性。

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

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

相关文章

Vue常见面试问答

vue响应式数据 vue2 Vue2 的对象数据是通过 Object.defineProperty 对每个属性进行监听,当对属性进行读取的时候,就会触发 getter,对属性进行设置的时候,就会触发 setter。 /** * 这里的函数 defineReactive 用来对 Object.def…

如何正确使用docker搭建redis服务器,安装gcc和make以及出现错误时的解决办法

搭建redis服务器 目录 搭建redis服务器 (1)开启docker,并查看是否开启成功 (2)启动上面创建的ssrf容器,并进入ssrf容器 (3)进入opt,然后下载redis-5.0.5.tar.gz &a…

GitHub Copilot 快速入门

一简介 GitHub Copilot是一个AI编程助手,它能够为开发者提供代码建议和自动完成功能。Copilot使用自然语言处理技术来理解代码的语义,并根据上下文提供智能化的代码建议。通过使用Copilot,开发者可以提高编码效率,减少错误率&…

Apache SSI 远程命令执行漏洞

一、环境搭建 二、访问upload.php 三、写shell <!--#exec cmd"id" --> 四、访问 如图所示&#xff0c;即getshell成功&#xff01;​

Zookeeper-Zookeeper应用场景实战

1. Zookeeper Java客户端实战 ZooKeeper应用的开发主要通过Java客户端API去连接和操作ZooKeeper集群。 可供选择的Java客户端API有&#xff1a; ZooKeeper官方的Java客户端API。 第三方的Java客户端API&#xff0c;比如Curator。 ZooKeeper官方的客户端API提供了基本的操作…

宝塔部署flask添加ssl即https

在宝塔部署flask的步骤我已经写了一篇博客:宝塔部署flask项目-CSDN博客 之前说如果出现找不到application错误: spawned uWSGI http 1 (pid: 3116) --- no python application found, check your startup logs for errors --- [pid: 3114|app: -1|req: -1/1] 127.0.0.1 () {6…

java 什么是变量和字面量?

什么是变量&#xff0c;怎么理解的&#xff1f; 变量其实就是内存当中存储数据的最基本的单元。 一个存储数据的盒子&#xff0c;一个存储数据的单元。 什么是字面量&#xff0c;怎么理解&#xff1f; 整数型字面量&#xff0c;浮点型的字面量&#xff0c;布尔类型字面量&#…

sklearn学习的一个例子用pycharm jupyter

环境 运行在jupyter 进行开发。即一个WEB端的开发工具。能适时显示开发的输出。后缀用的是ipynb.pycharm也可以支持。但也要提示按装jupyter. 或直接用andcoda 这里我们用pycharm进行项目创建 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple jupyterlab pip ins…

API服务的快速搭建和测试

API服务的快速搭建和测试 使用Python的FastAPI迅速搭建一个简单API from fastapi import FastAPI, Request from transformers import AutoTokenizer, AutoModel import uvicorn, json, datetime import torch# 设置CUDA设备信息 DEVICE "cuda" DEVICE_ID "0…

在vim中映射类似于Windows编辑器的快捷键

vim编辑器的历史比较久&#xff0c;继承于vi&#xff0c;这个编辑器就更早了。可能拜于年代所赐&#xff0c;里面的快捷键设计似乎不是那么“现代化”&#xff0c;和很多现在的编辑器的热键设计出入很大&#xff0c;里面的命令更不是一般人能记得住的。 我一直知道vim可以rema…

QT 利用开源7z 实现解压各种压缩包,包括进度条和文件名的显示(zip,7z,rar,iso等50多种格式)

想做一个winRAR一样的解压软件吗?很简单,利用开源的7z库就能实现。我看网上其他人说的方法不敢苟同,误人子弟。以前自己在项目中使用过7z,这次又有需要,就想记录下来。如果你研究过如何用7z的话,一定知道7z的每一个GUID都代表了一种格式,50多种GUID也就有50多个格式,最…

uniapp打包Android、Ios、微信小程序

首先我们需要在我们的代码中&#xff0c;把我们所要用到的配置信息配置好&#xff0c;在检查一下我们测试的内容是否有打开&#xff08;取消注释&#xff09;&#xff0c;在检查一下我们的版本信息是否正确&#xff0c;查看一下接口ip是否是正式线 这里的配置信息一定要配置好…

epoll并发编程

epoll并发编程 epoll并发编程背景知识epoll 的特点epoll 的工作原理epoll 和 select/poll 的区别 epoll并发服务器思路重点代码分析git地址参考书目 epoll并发编程背景知识 epoll 是 Linux 中用于处理大量文件描述符的 I/O 事件通知机制。在传统的 I/O 模型中&#xff0c;一般…

Screenshot-to-code开源项目mac上实践

github上的开源项目&#xff0c;看介绍可以将设计ui图片转换为 HTML 和 CSS 源码地址&#xff1a; GitCode - 开发者的代码家园 我的mac安装了2.7和3.11&#xff0c;就用3吧直接上代码 安装 pip3 install keras tensorflow pillow h5py jupyter 报错 ERROR: Could not in…

Linux驱动开发之Linux内核中的中断处理与等待队列以及相关API和例程分析

目录 中断的特点 Linux中的中断类型 相关API函数 gpio_to_irq() enable_irq() disable_irq() request_irq() free_irq() 中断的使用 等待队列 DECLARE_WAIT_QUEUE_HEAD() wait_event_interruptible() wake_up_interruptible() 中断相关例程 例程分析 源码分享 …

linux实用技巧:ubuntu18.04安装samba服务器实现局域网文件共享

Ubuntu安装配置Samba服务与Win10共享文件 Chapter1 Ubuntu18.04安装配置Samba服务与Win10共享文件一、什么是Samba二、安装Samba1、查看是否有安装samba2、安装samba 三、配置Samba服务1、创建共享目录&#xff08;以samba_workspaces为例&#xff09;2、为samba设置登录用户3、…

独立站的个性化定制:提升用户体验的关键

随着电子商务的竞争加剧&#xff0c;用户体验成为了企业赢得市场的关键因素之一。独立站作为企业品牌形象和产品展示的重要平台&#xff0c;其个性化定制的程度直接影响着用户体验。本文将探讨独立站的个性化定制如何提升用户体验&#xff0c;并通过代码示例说明实现个性化定制…

学习动态规划不同路径、最小路径和、打家劫舍、打家劫舍iii

学习动态规划|不同路径、最小路径和、打家劫舍、打家劫舍iii 62 不同路径 动态规划&#xff0c;dp[i][j]表示从左上角到(i,j)的路径数量dp[i][j] dp[i-1][j] dp[i][j-1] import java.util.Arrays;/*** 路径数量* 动态规划&#xff0c;dp[i][j]表示从左上角到(i,j)的路径数量…

计算机网络-动态路由

网络层协议&#xff1a;ip&#xff0c;ospf&#xff0c;rip&#xff0c;icmp共同组成网络层体系 ospf用于自治系统内部。 一个路由器或者网关需要能够支持多个不同的路由协议&#xff0c;以适应不同的网络环境。特别是在连接不同自治系统的边缘路由器或边界网关的情况下&#…

MongoDB聚合:$merge 阶段(2)

$merge的用途是把聚合管道产生的结果写入指定的集合&#xff0c;有时候可以用$merge来做物化视图。下面是$merge的一些例子。 举例 按需物化视图&#xff1a;创建集合 当输出集合不存在时&#xff0c;$merge将自动创建。首先在zoo数据库的salaries集合中填充员工和部门历史数…