Attention注意力机制–原理与应用

本文深入探讨了Attention机制的原理及其在序列学习任务中的应用。通过引入Attention模型,可以在编解码器框架内对源数据序列进行加权变换,有效提高序列到序列任务的表现。文章详细解释了Attention的工作原理,并区分了空间注意力和时间注意力的概念。
摘要由CSDN通过智能技术生成

Attention注意力机制–原理与应用

注意力机制即Attention mechanism在序列学习任务上具有巨大的提升作用,在编解码器框架内,通过在编码段加入A模型,对源数据序列进行数据加权变换,或者在解码端引入A模型,对目标数据进行加权变化,可以有效提高序列对序列的自然方式下的系统表现。

什么是Attention?

Attention模型的基本表述可以这样理解成(我个人理解):当我们人在看一样东西的时候,我们当前时刻关注的一定是我们当前正在看的这样东西的某一地方,换句话说,当我们目光移到别处时,注意力随着目光的移动野在转移,这意味着,当人们注意到某个目标或某个场景时,该目标内部以及该场景内每一处空间位置上的注意力分布是不一样的。这一点在如下情形下同样成立:当我们试图描述一件事情,我们当前时刻说到的单词和句子和正在描述的该事情的对应某个片段最先关,而其他部分随着描述的进行,相关性也在不断地改变。从上述两种情形,读者可以看出,对于Attention的作用角度出发,我们就可以从两个角度来分类Attention种类:空间注意力和时间注意力,即Spatial Attention 和Temporal Attention。这种分类更多的是从应用层面上,而从Attention的作用方法上,可以将其分为Soft Attention和Hard Attention,这既我们所说的,Attention输出的向量分布是一种one-hot的独热分布还是soft的软分布,这直接影响对于上下文信息的选择作用。

为什么要加入Attention?

再解释了Attention做了一件什么事之后,我们讨论一下为什么需要Attention模型,即Attention加入的动机:

  1. 序列输入时,随着序列的不断增长,原始根据时间步的方式的表现越来越差,这是由于原始的这种时间步模型设计的结构有缺陷,即所有的上下文输入信息都被限制到固定长度,整个模型的能力都同样收到限制,我们暂且把这种原始的模型称为简单的编解码器模型。
  2. 编解码器的结构无法解释,也就导致了其无法设计。

Attention到底是什么原理?

下面我们来看一下Attention的具体原理:

首先让编码器输出结构化的表示,假设这些表示,可以用下述集合表示,(Hold不住了,我要截图了,太麻烦了!!!)



由于定长上下文特征表示带来的信息损失,同时也是一种缺陷,由于不同的时间片或者空间位置的信息量明显有差别,利用定常表示无法很好的解决损失的问题,而Attention则恰好解决了这个问题。

我们甚至可以进一步解释,编解码器内部大致是如何工作的,当然从我看来这有点马后炮的意思,毕竟Attention是根据人的先验设计出来的,因此导致最后训练的结果朝着人指定的目标在走。可以说,就是输入第j维的上下文表示信息与第t时间片输出的关系,第j维可以是空间维度上,也可以是时序上。由于加入Attention会对输入的上下文表示进行一次基于权重的筛选,然而这种显示的筛选模式并不是人工制定这种机制所要看到的结果,而是通过此种加权的方式,让网络能学到空间上或者时序上的结构关系,前提当然是假设这里有一种原先不可解释的相互关系。以上图1可以很清晰地看出机器翻译问题中,加入的attention模型输出权重的分布与输入与输出信息的关系。

所以说Attention的作用是?

Attention的出现就是为了两个目的:1. 减小处理高维输入数据的计算负担,通过结构化的选取输入的子集,降低数据维度。2. “去伪存真”,让任务处理系统更专注于找到输入数据中显著的与当前输出相关的有用信息,从而提高输出的质量。Attention模型的最终目的是帮助类似编解码器这样的框架,更好的学到多种内容模态之间的相互关系,从而更好的表示这些信息,克服其无法解释从而很难设计的缺陷。从上述的研究问题可以发现,Attention机制非常适合于推理多种不同模态数据之间的相互映射关系,这种关系很难解释,很隐蔽也很复杂,这正是Attention的优势—不需要监督信号,对于上述这种认知先验极少的问题,显得极为有效。

让我们来看一个具体的例子!

这里直接上一幅图,举个具体的例子,然后咱们慢慢来解释:

让我们来看一下论文里其他研究者都是如何利用AttentionModel的:

最新一篇CVPR2017年accepted paper关于VQA问题的文章中,作者使用到了基于Spatial和基于Temporal两个层面的Attetion模型,效果肯定提升了不用说,该问题更是极好的利用了这两点,其实这两种应用方式早在MT中得到了利用。



**今天实在太晚了,我要回家睡觉,先写到这,不然又不知道几点睡,不能总熬夜难过,周五前更新完

**上次说周五前更新完,结果拖了一周了,不过想想也没说哪个周五,啊哈哈哈。这里赶紧补上

上图的两种attention用法都属于soft attention,即通过确定性的得分计算来得到attended之后的编码隐状态,图示来自论文

Jang Y, Song Y, Yu Y, et al. TGIF-QA: Toward Spatio-Temporal Reasoning in Visual Question Answering[J]. arXiv preprint arXiv:1704.04497, 2017.

我们来讨论一下图示中的左边和右边两种attention是如何实现的。

(a)空间注意力 Spatial Attention

对与视频转文字,图像转文字,VQA问题啊,这种task都需要视觉信息,那么和text信息一样,对visual content进行编码了以后,将编码后的特征表示直接接入解码器,可以得到我们想要的输出,例如text sentences。这就是基础的结构,但是现在加入空间Attention之后,如何改变结构呢。
假设前面视觉编码后的特征表示为7x7x3072维featuremaps(论文里的参数)mt,然后来自text encoder的隐状态为hq 1x1024,生成一个7x7的attend mask,at=f(hq,mt),attended featuremaps 为atmt,所以现在的维度不就变成了1x3072了吗?

(b)时序注意力 Temporal Attention



### GPT-4 的工作原理架构 尽管具体的细节尚未完全公开,但从现有资料可以推测出一些关于 GPT-4 的核心特性及其工作机制。 #### 模型机制 GPT-4 是一种基于 Transformer 架构的超大规模语言模型。它继承并扩展了其前身(如 GPT-3 ChatGPT)的设计理念,在参数规模、上下文长度以及多模态能力上实现了显著提升[^2]。具体而言: - **自回归解码**:作为生成式预训练模型的一部分,GPT-4 使用自回归方法逐词预测序列中的下一个单词。这种方法允许模型在生成过程中保持连贯性逻辑一致性。 - **注意力机制**:通过改进标准的 Multi-head Attention 结构,GPT-4 能够更高效地捕捉远程依赖关系,并支持更大的输入/输出窗口大小。这使得它可以更好地理解回应复杂查询或长篇文档[^1]。 #### 架构特点 虽然官方未披露全部技术规格,但根据行业趋势技术演进路径可推断如下要点: - **稀疏激活子网络(Sparse Activation Subnetworks)**:为了降低计算成本同时维持高性能表现,部分实现可能采用了混合专家(MoE)策略或其他形式的选择性激活方案。这意味着并非所有神经元都会参到每一次推理操作当中去。 - **增强版位置编码(Positional Encoding Enhancements)**:考虑到传统固定频率的位置编码方式存在局限性,新版本或许引入动态调整或者相对偏移量来改善对于变长句子的理解精度。 #### 训练过程概述 GPT-4 的训练流程遵循典型的两阶段模式—即无监督预训练加上有监督微调: 1. **海量数据集上的自我学习(Self-supervised Learning on Massive Corpora)** – 利用互联网爬取得到的文字材料构建初始权重矩阵;此环节主要目标在于让系统掌握广泛领域内的通用知识基础。 2. **特定应用场景下的定制化适配(Fine-tuning for Specific Use Cases)** – 随后针对不同类型的下游任务执行专门化的再教育程序,比如对话理解、代码写作等等。期间还会融入人类反馈强化信号(Human Feedback Reinforcement Signals),从而进一步提高交互体验质量[^3]。 ```python import torch from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("gpt4-model-name") # Placeholder name model = AutoModelForCausalLM.from_pretrained("gpt4-model-name") input_text = "Explain the architecture of GPT-4." inputs = tokenizer(input_text, return_tensors="pt") outputs = model.generate(**inputs) print(tokenizer.decode(outputs[0])) ``` 上述脚本展示了加载预训练好的 GPT-4 并生成回复的一个简单例子。实际部署时还需要考虑更多工程因素,例如分布式运行环境配置等。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值