AGI|Transformer自注意力机制超全扫盲攻略,建议收藏!

一、前言

2017年,谷歌团队推出一篇神经网络的论文,首次提出将“自注意力”机制引入深度学习中,这一机制可以根据输入数据各部分重要性的不同而分配不同的权重。当ChatGPT震惊世人时,Transformer也随之进入大众视野。一夜之间,AI创业公司层出不穷,掌握算力的互联网巨头们争相推出自己的大语言模型。

这些模型都基于Transformer神经网络架构,比如ChatGPT只使用了其中的解码器,DeBERTa只使用了其编码器,Flan-UL2则编码解码全都使用。

而对于用户来说,大语言模型还是一个黑盒,用户只知道输入一些简单指令模型便会产出一些输出,这些输出可能满足用户的需求,也可能不满足,于是用户通过调整指令的方式得到不同输出的结果。从笼统、抽象的概括到指令精确的下发,这也推进了提示词工程的发展。很难评价是机器在学习人类还是人类在适应机器,亦或两者都有。

开发者的世界中可能了解得更多,比如使用LangChain或LlamaIndex构建RAG(检索增强生成)系统,使用提示词工程优化输出结果,设置temperature等各类参数控制大模型创新性等……虽然比用户更接近黑盒,但依然存在很多无法解答的问题:为什么大语言模型会有上下文的限制?为什么现阶段的模型没有长期记忆?为什么要使用Transformer作为基础?

对于科学家来说上述问题可能很好回答,但大部分表述都是一些晦涩难懂的专业名词,谈论得更多的是方向,嵌入层,层归一化,矩阵乘积……以及一堆复杂的数学公式。在学术界热热闹闹讨论AGI(通用人工智能)未来的同时,这些专业名词构建出的壁垒让普通人难以望其项背,无疑于在黑盒之上又蒙了一层神秘的面纱。

这当然不是科学家有意为之,但也从侧面反映出人工智能领域的复杂性,一个包含计算机科学、数学、认知科学、心理学等众多学科的领域要解释起来确实颇有难度。

本篇文章目的意在使用通俗语言解释这些专业名词,并通过数据流向的方式描绘“自注意力机制”在训练时的过程,但不会事无巨细地解释其中每一个细节。

二、向量

当我们谈论向量的时候,我们具体谈论的是哪一领域的‘向量’?是数学,物理学还是其他自然科学中的基本概念?

是理论数学中的定义:任何在称为向量空间的代数结构中的元素,并同时满足具有大小和方向两个性质的几何对象即可认为是向量。

还是物理领域中的定义:向量是空间中的箭头,它指向三维空间其中一点,以三元数组代表某个特定的对象,这个对象可以代表任意东西。

无论使用哪一领域的向量定义,最终都要回到一个根本性问题:如何让机器识别某一信息代表的具体意义?

对于机器而言,人类世界的语言并没有什么意义,无论是使用中文的'他',还是英文中的'he',机器能识别和处理的只能是数值,例如0,1。为了让机器更好地识别人类语言及真实世界,科学家们使用向量将文本转化为数据,使得机器可以对文本进行数学运算;向量也可以包含多种特征,如词性,上下文等,这有助于提高模型对语言的理解能力。

假设使用一个二维坐标轴将人类语言词汇分布在上面,英文的'he'和中文的'他'可能会分布在不同轴上。“番茄”和“西红柿”只是两种不同叫法,指向的是同一种植物果实,却需要占据两个向量,即使它们可能无比接近。

如果将一个二维空间升维成三维空间,'番茄'这一含义代表着三维空间的某个坐标(x,y,z),意义相近的词依旧分布在其附近。看似好像没有什么区别,但描述同一对象的方式却发生了改变。事实上向量可以是任意维度的,这取决于数据的复杂性和所需特征数量,不同维度承载的特征数量是不一样的。通俗一点讲就是:向量的维度越高,代表的含义也就越多。高维向量可以捕捉更多的细节和信息,但这也导致了计算的复杂性。

向量是一切的基础,无论是模型训练还是使用AI应用,第一步都是将输入的文本/图片/音频等信息转换为向量,一般情况下我们将这些输入/输出的向量统称 token。为了方便理解,我们暂时将一个单词对应一个向量,即一组数字。

三、嵌入矩阵

通常情况下模型会包含一个预设的词汇库,它被称为“嵌入矩阵”。以ChatGPT-3为例,这个嵌入矩阵中包含了50257个token,12288个维度,里面可以是单词或标点符号……它们的初始值随机,但将基于数据进行学习。这是故意为之,如果所有嵌入向量都初始化为相同的值,那么模型在训练时无法区分不同的输入。使用随机值可以打破均匀性,避免训练开始时的梯度相似,同时也可以避免模型陷入局部最优解。

早在Transformer出现前,将单词转化为向量已经是机器学习中常见的做法,到如今Transformer几乎成为自然语言处理,视觉处理,多模态处理的基础模型。可见将人类所有语言词汇转变为向量并不能一蹴而就,这就像拥有一座铁矿并不意味着得到好钢,但它为接下来的淬炼奠定了基础。

这非常重要,举一个3Blue1Brown提出的例子:当模型在训练阶段调整权重时,以确定不同单词将如何被嵌入向量,它们最终的嵌入向量在空间中的方向,往往具备某种语义意义。

就像在谈论向量时那样描述的,意义相近的向量会分布得较为接近。如果取[女人]和[男人]的向量之差,从一个向量的尖端指向另一个尖端,便会发现这个向量差与[父亲]和[母亲]的向量差非常相似。假设你并不知道[母亲]这一词在向量空间中的分布,但是可以通过[父亲]这一词汇加上[女人]减去[男人]的方向,然后搜寻最接近该点的词向量来找到它。

上述例子足以说明,空间中的方向能够承载语义。反复强调它的重要性,是因为嵌入矩阵中的向量不能仅仅将其视为单个单词,它编码了单词的位置信息,还结合了上下文语境。在现实世界,不同的语境下同一词也代表不同的含义,“model”这一词是指艺术领域中展示服装的人类,是指计算机领域的数据结构?还是我们现在谈论的机器学习模型?

假如对模型提出一个问题:“the greatest thinker in China is ?”

"greatest"这个词向量会被网络中各个模块拉扯,最终指向一个更具象的方向或对象。如下图中所示,上下文中的China指明了向量被拉扯的方向,最终指向的方向范围可能会包含"孔子"这一具体的向量词。

一个训练得好的注意力模块的目的就是:能计算出给初始的词向量加入什么样的向量,才能将它移动到上下文对应的具体方向上。

四、自注意力机制

本文开篇中提到过注意力机制可以按输入数据各部分重要性的不同而分配不同的权重,但在深度学习中模型的实际行为很难解释,且其多数计算都是矩阵向量乘法,注意力机制在矩阵中填满了可调的权重,这些权重由模型学习数据来进行调整,最终计算点积层归一化后得到输出的token。

自注意力的本质:

如果本文剩余篇幅只是列举公式,那么似乎很难让人理解,也违背了本文最初的承诺。这就像把向量矩阵呈现在读者面前,让读者自己计算token一样荒诞。作者将沿用上述列举的方式,尽可能避开公式的细节,抽象出机制的行为并绘制整个流程,可能尽管没有公式那么精确,但更容易帮助我们了解到底发生了什么。

在训练之初,输出文本创建向量组时,每个向量都是直接从嵌入矩阵中提取出来的。

然后这个向量组会流向三个向量矩阵:

1、Query [查询矩阵]

的维度要比嵌入矩阵小很多。它由随机向量组做初始化,具体的行为模式是从数据中习得的。从数学的角度来看它们只是在做矩阵乘积,如果抽象成一个具体的行为,这更像是对输入的单词提出一系列问题。试想一下,一个优秀的读者在读某本书籍某篇文章时,一定会对自己所读的内容提出一系列问题,这有助于快速理解内核和作者想要表达出的思想。训练也是如此,通过一系列预设的随机数值,让模型在训练中抽象出那些系统问题。

2、Key [键矩阵]

与查询矩阵相同,也会与嵌入向量相乘而产生。如果[查询矩阵]是对 token 提出一系列问题,那么[键矩阵]则代表“想要回答的结果”。衡量每个[键]与每个[查询]的匹配程度,得到的查询矩阵会与键矩阵相乘,最终得到的点积如下图所示。如果圆点越大,代表点积也就越大。用机器学习的术语来描述就是:greatest 注意到了 China 。如果按照现实意义进行概括就是:从各种问题和答案中选出匹配度最相符的。

下图源于GPT是什么?直观解释Transformer:

为了数值的稳定性,所有的点积将会除以(键-查询空间维度的平方根)得到的结果将会被softmax函数处理后乘V矩阵。

在训练过程中,示例文本经过模型处理时,模型会根据正确预测出下一次的概率高低来进行奖惩,并稍微调整各个权重。为了让训练的效率最大化,在初始化token时让它同时预测,这样一次训练样本就能提供多次训练机会。

在引入注意力机制后,这意味着不能让后词影响到前词,不能让[答案]影响到[问题],从点积矩阵中反映出来便是:左下方的数值都会影响到右上方。通常情况下,在使用softmax之前都会将左下方的数值设置为负无穷,这样通过softmax函数后它们就会都变成0,这一过程叫做"掩码"。

在注意力模式下,掩码的大小等于上下文长度的平方。扩大上下文长度则需要更多的计算资源,这就是为什么上下文长度会成为大语言模型的瓶颈所在。

如果想要将一串数字作为概率分布,那么每个值都必须介于0到1之间,并且总和为1。在深度学习中,所有的操作都是在做矩阵向量乘法,那么得出的结果并不在0到1之间,总和也不为1。Softmax 函数主要作用就是将一组任意实数转换为表示概率分布的实数据,然后让这组实数符合概率分布的特征。

“the greatest thinker in China is ?” 这个例子中最有可能输出"Confucius"一词,但人们不希望在提出同一类型问题时模型输出的都是同一结果,这可能会陷入某些局部最优解。

Temperature 参数用于控制生成文本的随机性和创造性,当该参数较大时会给低值赋予更多权重,让概率分布得更均匀一些。如果该参数较小,那么较大的数值就会更占优一些。极端情况下将该参数设置为 0,意味着所有权重都给到最大值。通过调整该参数,同一问题可能得到不同的结果,当该参数较大 时"Mencius"和"Sun Tzu"将被更容易命中。

3、Value [值矩阵]

相比查询矩阵和键矩阵,值矩阵要多个数量级。当算出点积就能让模型推断出每个词与其他哪些词有关,比如"greatest"会与"china"有关。用"chain"这个词向量乘以值矩阵便会得到一个值向量,这个向量与嵌入向量处于同一个高维空间。上文中提到过:初始的词向量加入什么样的向量,才能将它移动到上下文对应的具体方向上。

向网格中每一列中都会乘该列的对应权重 (点积*值向量),最后计算所有列的和就是那个“拉扯”向量空间中的机制,通过这个机制就能得到一个更精准的向量,编码了更丰富的上下文信息,所得到的输出 token也指向了某一范围。

五、计算过程

  1. 输入token,如单词,字符或其他类型。通过嵌入层被转换为词向量。
  2. 每个词向量分别计算查询矩阵,键矩阵和值矩阵。得到查询值,键和值向量。
  3. 向量q1分别与k1,k2,k3做点积运算,得到初始的注意力值at1。
  4. 使用softmax函数对注意力值at1进行归一化处理,得到st1。
  5. 最后将st1与值向量v1相乘,得到新的向量wt1。
  6. 将所有wt向量相加得到输出向量。

下图来源于《ChatGPT原理与架构》

自注意力机制是Transformer模型的核心组成部分,它计算输入中元素之前的权重,以捕获序列中的关键信息。通过该机制能直接对序列中任意两个元素计算出它们之间的关系,这提供了可观察性和解释性,对模型调试和优化也提供了依据。

但自注意力机制也存在局限性,如上下文问题。虽然它能有效捕捉元素之间的依赖关系,但面对极长的上下文时,计算和内存开销会变得巨大。在训练时尤其明显,通常情况下需要大量训练数据以达到最佳性能,这会增加很多成本。同时在小型数据集,比如移动端,AI嵌入式等特定领域匹配度会降低。

六、多头注意力机制

作为自注意力机制的一种扩展,多头注意力机制的主要目标是让模型能并行关注输入中多种不同类型信息。这样模型可以学习到更丰富且多元化的表达,从而提升模型能力与性能。通过增加注意力头的数量,扩大了模型的容量,使其能够处理更加复杂的任务。现在我们熟知的多模态大语言模型,既能处理图片,也能处理文本等任务。

Transformer内完整的注意力模块就是由多头注意力组成,大量并行执行这些操作,每个头都有不同的键,查询,值矩阵……虽然根据Transformer的原论文中的实验结果表明,注意力头数量为8时可以达到最佳的效果,增加到16或32时并未显著提升性能。但ChatGPT-3中每个模块内依然使用了96个注意力头,这意味着在训练过程中将会产生96种不同的注意力模式,每个注意力头都有独特的值矩阵产生不同的值向量序列……按照本文描述自注意力机制,最终会有96个向量值“拉扯”最初的嵌入向量。

多头注意力机制的参数规模较大,为了优化这些问题也提出了一系列优化策略来进行改进,比如局部多头注意力,稀疏多头注意力,分层多头注意力等。但这些不在文本讨论范围内,感兴趣的读者可以自行查阅相关资料。

注意力机制的成功的主要原因并不在于它能实现什么特定的行为,而是它的可并行性,这样使用GPU在短时间内可以进行大量计算。了解深度学习历史的读者可能会理解,仅依靠扩大模型规模就能为模型性能带来质的飞跃。

七、总结

本文详解了自注意力机制的流程,同时也对深度学习中部分专有名词进行了解释。如今Transformer模型已经在NLP领域占据了重要地位,但Transformer不仅仅只包含'注意力机制',还包含了前馈神经网络,残差连接和位置编码等。训练出一个大语言模型也不仅仅只依靠Transformer就够了,还包括了预训练,人类反馈,微调,评估等。

这也申明了人工智能领域的复杂性,虽然本篇文章不能打破黑盒一探究竟,但能掀开面纱一角也足够了。

参考资料:

1.《ChatGPT原理与架构》

2.《GPT是什么?直观解释Transformer 》

3.《直观解释注意力机制,Transformer的核心》

4.https://transformers.run/c1/transformer/

作者:王凯| 后端开发工程师

欢迎关注“神州数码云基地”公众号,回复“AI合集”领取最新整理100+AI报告合集

版权声明:文章由神州数码武汉云基地团队实践整理输出,转载请注明出处。

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

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

相关文章

【机器学习】连续字段的特征变换

介绍 除了离散变量的重编码外,有的时候我们也需要对连续变量进行转化,以提升模型表现或模型训练效率。在之前的内容中我们曾介绍了关于连续变量标准化和归一化的相关内容,对连续变量而言,标准化可以消除量纲影响并且加快梯度下降…

智能合约与企业数字化转型:案例分析与未来展望

随着区块链技术的快速发展,智能合约作为其重要应用之一,正逐渐成为推动企业数字化转型的关键工具。智能合约不仅可以自动执行和验证合同,还能够增强数据安全性、优化业务流程,并提升企业间的信任和透明度。本文将深入探讨智能合约…

CPU cache

参考:https://levelup.gitconnected.com/understanding-l1-l2-and-l3-caches-how-to-improve-cpu-performance-d9dcc3e2e1f5 2、以下部分:如何获取x86 CPU L1、L2和L3 cache的大小 - 知乎 (zhihu.com) CPU cache是介于CPU内核和物理内存(动态…

ssm校园志愿服务信息系统-计算机毕业设计源码97697

摘 要 随着社会的进步和信息技术的发展,越来越多的学校开始重视志愿服务工作,通过组织各种志愿服务活动,让学生更好地了解社会、服务社会。然而,在实际操作中,志愿服务的组织和管理面临着诸多问题,如志愿者…

实战演练:Fail2Ban部署全攻略,确保您的服务器免受CVE-2024-6387侵害!

Fail2Ban是一个开源的入侵防护软件,它可以扫描日志文件,识别恶意行为(如多次失败的登录尝试),并自动采取措施(如更新防火墙规则)来阻止攻击者。最近,CVE-2024-6387漏洞的爆出使我们更…

一分钟学习数据安全—自主管理身份SSI分布式加密密钥管理

在这篇之前,我们已经对SSI有了一个全局的了解。这个系列的文章可以作为一个学习笔记来参考,真正要实践其中的一些方案、协议,还需要参考专业的书籍和官方文档。作为一个SSI系列学习笔记的最后一篇,我们做一个简单的延伸&#xff0…

无服务器【Serverless】架构的深度剖析:组件介绍、优缺点与适用场景

🐇明明跟你说过:个人主页 🏅个人专栏:《未来已来:云原生之旅》🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、云计算的发展趋势 2、无服务器计算简介 二、无服务…

DPDK概述

文章目录 1. DPDK概述1.1 DPDK 内存管理Mbuf单帧结构:1.2 DPDK内核驱动 igb_uio驱动1.3 DPDK源码下载方式1.4 pktgen源码下载方式1.5 DPDK相关名词解释 1. DPDK概述 Intel DPDK全称Intel Data Plane Development Kit,是Intel提供的数据平面开发工具集,为…

AI语音工具——Fish Speech:使用简单,可训练专属语音模型!

今天给大家介绍一款超好用的AI语音工具——Fish Speech,使用简单,还可以训练自己的语音模型! 工具介绍 Fish Speech是由 Fish Audio 开发的免费开源文本转语音模型。经过十五万小时的数据训练,Fish Speech能够熟练掌握中文、日语…

binutils ifunc 流程图

上图是x86 binutils 的流程图。 函数说明_bfd_x86_elf_link_hash_table_createInit local STT_GNU_IFUNC symbol hash.elf_x86_64_check_relocsAdd support for handling STT_GNU_IFUNC symbols_bfd_elf_x86_get_local_sym_hashFind and/or create a hash entry for local sym…

SSL/CA 证书及其相关证书文件解析

在当今数字化的时代,网络安全变得至关重要。SSL(Secure Socket Layer)证书和CA(Certificate Authority)证书作为保护网络通信安全的重要工具,发挥着关键作用。 一、SSL证书 SSL证书是数字证书的一种&…

前端八股文 说一下盒模型

网页中任何一个元素都可以视为一个盒子,由里到外,盒模型包括外边界(margin)、边框(border)、内边界(padding)和内容(content)。 盒模型基本分为3种&#xff1…

【遥感语义分割】UNetFormer

原文:UNetFormer: An UNet-like Transformer for Efficient Semantic Segmentation of Remotely Sensed Urban Scene Imagery Libo Wang1, 2, Rui Li1, Ce Zhang3, 4, Shenghui Fang1*, Chenxi Duan5, Xiaoliang Meng1, 2 and Peter M. Atkinson3, 6, 7 1) 中国…

【机器学习】分类算法-KNN算法实践

一、前言 前面的一篇文章介绍了KNN算法的基本思想,接下来我们就根据B站UP主【abilityjh】老师的节奏,做一个关于KNN算法运用于“约会网站配对”的算法实现。当然,这个实践的代码是一样的,但是理解的话,我是用自己的话来…

考到PMP证书后 如何获得PDU?

目前仅续证一次,也是在威班PMP考试后免费积攒的。其实获取PMP的渠道很多,网上也有很多售卖的,积攒起来也挺容易,不过在续证的时候千万不要找不明渠道来源的人去搞,不靠谱。续证期有三年的,三年时间积攒60PD…

第十二章 执行引擎

一、执行引擎概述 概述 执行引擎是 Java 虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引…

简单的git pull fail Can‘t update has no tracked branch解决记录

简单的git pull fail Can‘t update has no tracked branch解决记录 1. 问题描述 上午同事使用idea拉取代码的时候,发现拉取不了,提示用户权限问题,之后修改了git用户信息,发现还是拉取不了分支代码,然后删除了git r…

docker介绍与详细安装

1 docker 介绍 1.1 虚拟化 在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实…

Vue 详情实战涉及从项目初始化到功能实现、测试及部署的整个过程

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…

全面解析找不到msvcp71.dll无法继续执行的原因及修复方法

在使用Windows操作系统时,可能会遇到“msvcp71.dll文件丢失”的问题,从而导致部分应用程序无法正常运行。msvcp71.dll属于Microsoft Visual C 2008 Redistributable package的一部分,其包含了运行基于该编译器开发的软件所需的运行时库函数。…