Attention和Transformer灵魂七问

1. 引言

最近,ChatGPT和其他聊天机器人将大语言模型LLMs推到了风口浪尖。这就导致了很多不是学MLNLP领域的人关注并学习attentionTransformer模型。在本文中,我们将针对Transformer模型结构提出几个问题,并深入探讨其背后的技术理论。这篇文章针对的听众是已经研读过Transformer论文并大概了解attention如何工作的同学。

闲话少说,我们直接开始吧!

2. 为什么非Attention不可?

首先我们来将机器翻译作为例子进行讲解。在Attention机制出现之前,大多数机器翻译都是通过encoder-decoder网络结构来实现的。其中,编码器encoder的作用是通过一个RNN的网络来将输入句子(比如“I love you”)编码为一个特征向量;同时,解码器decoder的作用是接收上述特征向量并将其解码为其他语言(比如“我爱你”)。
在这里插入图片描述

通过上述方法,编码器必须将整个输入压缩到一个固定大小的向量中,然后将该向量传递给解码器——我们期望这个向量必须包含输入句子的所有信息!显然这导致了信息瓶颈。有了注意力机制,我们不再需要将输入句子编码到单个向量中。相反,我们让解码器在生成输出的每个单词中,关注输入句子中的不同部分。

此外,以前的循环神经网络模型在输入和输出单词之间有很长的路径。如果我们有一个长度为50个单词构成的句子,解码器必须从50步前的第一个单词回忆起信息(并且最终这些数据必须压缩成一个向量)。因此,循环神经模网络型很难处理长文本依赖关系。注意力机制通过让解码器的每一步都能看到整个输入句子并决定需要关注什么词。这减少了路径长度,并使其在解码器的所有步骤中保持一致。

最后,先前的语言模型都严重依赖于RNN的方法,我们对句子进行编码时,我们从第一个单词(x1)开始并对其进行处理以获得第一个隐藏状态(h1); 然后我们输入第二个单词(x2)和之前的隐藏状态(h1)导出下一个隐藏状态(h2)。不幸的是,这个过程是按顺序执行的,这阻止了并行化。注意力通过一次性读入整个句子,并且并行地计算句子中每个单词的特征表示。

3. 什么是Query Key和Value?

我们先来举个栗子吧!假设我们在图书馆中,我们有一个具体的问题(Query), 书架上有很多图书,每个图书都有对用的书名(Key)表明书的内容。我们需要将问题(Query)与这些书名(Key)进行比较,以确定针对特定的(Query)每本书的相关性,对于每本书应该给多少关注(attention)。接着我们从相关书籍中得到信息(value)来回答上述问题。

在这里插入图片描述

在翻译任务中,Query指代我们需要计算attention的单词。在encoder的例子中,query一般指代当前上下文中当前输入的单词。举个栗子,假设上下文语境中输入句子的第一个单词,我们将会有一个query向量,我们将其命名为q1

同时,Keys在翻译任务中,指代整个输入句子中的全部单词。第一个单词对应的Key的向量为k1, 第二个单词对应的key的向量为k2,其他单词类似。向量key用来帮助模型理解输入中每个单词和当前Query的相关性。在上述栗子中,我们计算所有keyq1的相似性。
在这里插入图片描述

Attention一般定义为我们的查询单词query word(上例中的q1)应该给句子中的每个单词(k1,k2等)多少关注度attention。这个计算过程一般通过计算查询向量query vector和所有的key vectors的点积实现。点积一般用来评估两个向量间的相似性。如果某项query - key对应的点积较高,那就说明我们需要特别关注这一项。一般来说,上述点积计算完后还需要进一个函数softmax来执行归一化操作。

每个单词也可以被对应的value来表示,value一般特指用来表征该单词含义的向量。所有value vector被上述计算出来的attention score进行加权求和。结果看起来就是,每个contex word也就是我们的query都被attention-based weight对句子中的所有输入单词进行加权,其中和query最相近的单词含有较高的权重。

4.编码器和解码器的作用是什么?

编码器encoder接受文本作为输入,比如待翻译的句子,输出为一些嵌入embeddings。这些输出的embeddings可以被用来做分类,翻译,语义相似性计算等任务。自注意力机制确保encoder可以权衡输入中每个单词的重要程度,并解决了RNN中长文本语义依赖问题。

相反,解码器接受编码器的输出作为输入,比如句子开始标识start tokenencoder的输出embeddings, 并返回预测下一个可能输出单词的概率。自注意力机制可以确保decoder关注目前生成的输出的不同部分;交叉注意力机制可以帮助解码器关注编码器的输出。

5. 解码器如何预测单词?

解码器输出下一个单词的概率(即每个可能的单词都有相关的概率)。因此,我们可以通过贪婪地选择概率最高的单词来作为下一个要生成的单词。或者,我们可以使用beam search算法,保持top n个预测,为每个top n 的预测生成下一个单词的n个预测,并选择误差较小的组合。

6. 为什么需要多头注意力机制?

多个头(head)可以让模型同时考虑多个单词。因为我们在注意力中使用了softmax函数,所以它在放大最高值的同时排挤了相对较低的值。因此,每个head都倾向于关注单个输入元素。

我们来看个栗子,假设我们的输入句子为:The chicken crossed the road carelessly。一般来说,以下词语与crossed相关,模型应该给予更多的关注:

  • chicken指当前执行crossed 动作的目标
  • road指被crossed的对象
  • carelessly指执行crossing动作的程度修饰词

如果我们只有一个attention head,我们可能只会关注上述中的单个单词,也就是chicken, road或者carelessly。而多头注意力就可以关注多个单词。而且模型本身还提供了冗余,即使单个head失败,我们还有其他的attention heads来进行补充。

7. 为什么需要多个注意力层?

多个注意力层attention layers的设计就是为了构建冗余。假设我们只有一个注意力层,那么这个注意力层就必须做到完美无瑕–这种假设一般都很脆弱,往往容易得到次优的结果。此时,我们可以使用多个注意力层attention layers来解决这个问题,每个注意力层都使用前一层的输出并带有和输入直接相连的skip connection结构。这样设计的目的就是为了如果每个注意力层出现问题,skip connection和下游的注意力层可以缓解这个问题。

此外,多个注意力层的叠加也可以扩展模型的感受野。第一个注意力层通过注意输入句子中成对单词之间的注意力得分来生成上下文向量。然后,第二层基于成对的上下文向量生成更深层次的上下文向量,依次类推。有了多层注意力层,Transformer可以拥有更广泛的感受野,可以关注输入句子中的不同级别的语义交互。

8. 为什么需要skip connections?

因为注意力起着过滤器的作用,它阻止了大多数信息的传递。因此,如果注意力的得分很小或为零,对注意力层输入的微小改变很可能不会影响输出。这可能导致模型取得局部最优。

skip connections 有助于减轻过滤不良注意力的影响。即使输入的注意力权重为零且输入被阻止,skip connections 也可以将该输入的副本直接添加到输出中。这样可以确保即使对输入进行很小的更改也会对输出产生明显的影响。此外,skip connections保留了输入的语句:在Transformer中如果没有skip connections结构,不能保证上下文单词会在Transformer中处理自己。skip connections结构通过获取上下文单词向量并将其添加到输出中来确保这一点。

最后,让我们看看大佬Andrej KarpathyTransformer结构的总结:
在这里插入图片描述

9. 参考

本文相关参考如下:

【1】Attention is All You Need:链接
【2】The ilustrated Transformer: 链接
【3】Transformers From Scratch:链接
【4】Understanding the Attention Mechanism in Sequence Models:链接
【5】Some Intuition on Attention and the Transformer:链接

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

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

相关文章

YoloV9改进策略:下采样改进|自研下采样模块(独家改进)|疯狂涨点|附结构图

文章目录 摘要自研下采样模块及其变种第一种改进方法 YoloV9官方测试结果改进方法测试结果总结 摘要 本文介绍我自研的下采样模块。本次改进的下采样模块是一种通用的改进方法,你可以用分类任务的主干网络中,也可以用在分割和超分的任务中。已经有粉丝用…

【电控笔记5.4】pwm延迟

PWM延迟 1标准采样法 Td=MCU计算延迟+输出延迟 Tcon=电流控制周期 Ts=PWM载波周期 Td=1.5Ts(6.3节 ) 电流环跟PWM采样周期同步 2修改采样法

AR HUD_VSLAM+显示技术

智能座舱的一个重要技术方向是表达与展示。HUD可以将驾驶相关的信息,如车速、导航等投射到驾驶员的视线上方,避免驾驶员的目光离开前方道路。这种显示方式可以提供关键信息的实时展示,减少驾驶员的分心。 HUD的技术原理就是通过光学系统将信息…

【PCL】教程global_hypothesis_verification 通过验证模型假设来实现 3D 对象识别与位姿估计...

测试程序1 milk.pcd milk_cartoon_all_small_clorox.pcd 终端输出1: Model total points: 12575; Selected Keypoints: 193 Scene total points: 307200; Selected Keypoints: 7739 [pcl::SHOTEstimation::computeFeature] The local reference frame is not valid!…

初入单元测试

单元测试:针对最小的功能单元(方法),编写测试代码对其进行正确性测试 Junit可以用来对方法进行测试,虽然是有第三方公司开发,但是很多开发工具已经集成了,如IDEA。 Junit 优点:可以灵活的编写测试代码&am…

【C++】类和对象初探:类的实例化与对象生命周期管理,解析this指针的奥秘

欢迎来到CILMY23的博客 本篇主题为: 类和对象初探:类的实例化与对象生命周期管理,解析this指针的奥秘 个人主页:CILMY23-CSDN博客 系列专栏:Python | C | C语言 | 数据结构与算法 感谢观看,支持的可以给…

医学影像图像去噪:滤波器方法、频域方法、小波变换、非局部均值去噪、深度学习与稀疏表示和字典学习

医学影像图像去噪是指使用各种算法从医学成像数据中去除噪声,以提高图像质量和对疾病的诊断准确性。MRI(磁共振成像)和CT(计算机断层扫描)是两种常见的医学成像技术,它们都会受到不同类型噪声的影响。 在医学影像中,噪声可能来源于多个方面,包括成像设备的电子系统、患…

[RTOS 学习记录] 工程管理工具make及makefile

[RTOS 学习记录] 工程管理工具make及makefile 这篇文章是我阅读《嵌入式实时操作系统μCOS-II原理及应用》后的读书笔记,记录目的是为了个人后续回顾复习使用。 前置内容: 开发工具 Borland C/C 3.1 精简版 文章目录 1 make 工具2 makefile 的内容结构3…

MLLM | InternLM-XComposer2-4KHD: 支持336 像素到 4K 高清的分辨率的大视觉语言模型

上海AI Lab,香港中文大学等 论文标题:InternLM-XComposer2-4KHD: A Pioneering Large Vision-Language Model Handling Resolutions from 336 Pixels to 4K HD 论文地址:https://arxiv.org/abs/2404.06512 Code and models are publicly available at https://gi…

使用 ollama 部署最新的Llama 3 70B本地模型

一、ollama是什么? 在本地启动并运行大型语言模型。运行Llama 3,Mistral, Gemma, Code Llama和其他模型。自定义并创建您自己的。 综合优点: 快速下载容器自动运行大模型,现在下载,马上上手。本地利用 cpu 运行大模型&#xff0c…

【Hadoop】-Apache Hive概述 Hive架构[11]

目录 Apache Hive概述 一、分布式SQL计算-Hive 二、为什么使用Hive Hive架构 一、Hive组件 Apache Hive概述 Apache Hive是一个在Hadoop上构建的数据仓库基础设施,它提供了一个SQL-Like查询语言来分析和查询大规模的数据集。Hive将结构化查询语言(…

视频教程下载:ChatGPT驱动的SEO、网络营销、生产力提升

用户遇到的一个常见问题是在ChatGPT对话过程中难以保持清晰的目的和专注。这可能导致互动无效和浪费时间。这门课程将教给各种创意人士——艺术家、制造者、博主、讲师和内容创作者——如何制定理想的提示配方,从而产生更有成效的对话和更高的回报。 这是一门关于如…

【入门篇】本章包括创建云项目、数据库的使用、云存储管理、云函数的基本使用、实战举例(小程序之云函数开发入门到使用发布上线实操)

云函数 云函数相当于服务器接口的概念,它并属于小程序端代码。它是以函数的形式运行后端代码来响应事件以及调用其他服务。运行环境是Node.js。 一、基创建云函数项目 打开微信开发者工具: 打开微信开发者工具,并登录你的微信开发者账号。 创建项目: 如果还没有创建项目,你…

7. Django 模型与数据库

第7章 模型与数据库 Django对各种数据库提供了很好的支持, 包括PostgreSQL, MySQL, SQLite和Oracle, 而且为这些数据库提供了统一的API方法, 这些API统称为ORM框架. 通过使用Django内置的ORM框架可以实现数据库连接和读写操作. 本章以SQLite数据库为例, 分别讲述Django的模型…

Ai-WB2 系列模组SDK接入亚马逊云

文章目录 前言一、准备二、亚马逊云物模型建立1. 注册亚马逊账号,登录AWS IoT控制台,[注册地址](https://aws.amazon.com/cn/)2. 创建好之后点击登录3. 创建物品以及下载证书 三、连接亚马逊云demo获取以及配置1. 下载源码2. 按照顺序执行下面指令3. 修改…

用友U8-Cloud api/hr接口存在SQL注入漏洞

声明: 本文仅用于技术交流,请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。 简介 U8 Cloud是由用友推出的新一代云ERP系统&#xff0…

20240331-1-基于深度学习的模型

基于深度学习的模型 知识体系 主要包括深度学习相关的特征抽取模型,包括卷积网络、循环网络、注意力机制、预训练模型等。 CNN TextCNN 是 CNN 的 NLP 版本,来自 Kim 的 [1408.5882] Convolutional Neural Networks for Sentence Classification 结…

hadoop安装记录

零、版本说明 centos [rootnode1 ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core)jdk [rootnode1 ~]# java -version java version "1.8.0_311" Java(TM) SE Runtime Environment (build 1.8.0_311-b11) Java HotSpot(TM) 64-Bit Server VM (…

编写一款2D CAD/CAM软件(十六)交互绘制图形

绘制步骤 以交互绘制圆形为例: 点击鼠标左键,确定圆心位置;抬起鼠标,移动鼠标,半径随鼠标位置变化;点击左键确定半径,完成圆的绘制。 绘制结果 Code /// j-operator-create-circle.h#pragma…

Facebook的区块链应用深度分析

去中心化身份验证的意义 在当今数字化社会中,身份验证的重要性不言而喻。对于Facebook这样的大型社交媒体平台来说,确保用户的身份真实性和数据的安全性是至关重要的。传统的中心化身份验证方式存在一定的安全风险和可信性问题,而去中心化身…