首页 > 其他分享 >浅学AI笔记03:一个Transformer自注意力机制的故事

浅学AI笔记03:一个Transformer自注意力机制的故事

时间:2024-11-14 22:44:03浏览次数:3  
标签:03 Transformer 每个 AI 张亮 切片 12288 注意力 向量

ChatGPT、百度文心一言等同类的大模型,都使用了 Transformer 架构,Transformer 最大的特点是其有一个“自注意力机制”,搬个定义说的是:允许模型在处理每个输入元素时,能够考虑其与序列中所有其他元素之间的相关性,从而动态调整其权重。

白话来说,就是模型要先理解输入句子的含义,才能更准确的给出输出,于是:

  1. 先将输入的句子分解为单词,而且每个单词都对应一段(多个)用于表示 自己含义的数据;
  2. 然后根据句子的语境,调整这些数据的取值,使其表达更加准确。如 “这个人有100万的粉丝”,就需要根据语境分析出 “粉丝” 一词是代表了“食物”还是代表了“支持者”。这个过程是通过计算各个单词之间相互的语义关联(即自注意力)来实现的。
  3. 将调整语义后的单词放入后续的神经网络中进行处理,继而得到模型预测的结果输出。

按自己的学习理解,编个小故事,试着具象化这个过程 :)

一、故事前序:自注意力前

1、故事开编

有四个从战场上退下来的士兵凑巧碰到一起,但他们相互之间都不认识,决定互帮互助修整后合作组队去消灭敌人:

  • 张亮,班长,狙击手,男,会使用狙击枪,决策力出色,视力好 。。。
  • 刘磊,班副,观察员,男,会隐蔽,善伪装,观察仔细 。。。
  • 王强,士兵,轻步兵,170,越野能力强,操作步枪熟练 。。。
  • 赵路,士兵,后勤兵,修理器械,构造工事,后勤补给 。。。

2、对照模型看

ChatGPT、百度文心一言等大模型在进行 “自注意力机制” 处理之前,需要先对输入的 “句子” 进行预处理:

  1. 首先,把输入的句子拆解成一个个单独的单词(分词)
    1. 如 “这个苹果大家一起吃” 这句话,可以分解成 “这个”、“苹果”、“大家”、“一起”、“吃” 5个词语。
    2. 【对应到故事中:上面的四个士兵,每个士兵就代表了被拆开的一个词 】
  2. 然后,将每个单词转换为一组数字(一维数组),用于从多个角度记录其所表达的语义。
    1. 转换后的每个单词叫 “词向量”。这个转换过程叫 “词嵌入”。
    2. 【对应到故事中:上面每个士兵都有各自不同的个人能力,这些能力统称为“特征” 】
    3. 如:张亮 → [0.12, 0.28, 0.98, 0.65, 0.77, 0.45, 0.91, 0.85 ......]
  3. 最后,还要记住每个词在句子中所处的前后位置(称为 “位置编码”,或者 “位置嵌入” )
    1. 【对应到故事中:姑且就是每个士兵必须有其职位吧 】

3、补充说明

  • 词嵌入
    • 类似查字典,每个字都会从不同角度进行解释说明。词嵌入也是类似,提前有一个做好的词典(词汇表),记录了各个词的语义表示,只是这些语义用一系列数字来表示的。将输入的一句话进行分词后,再将每个词通过这个词典,找到其对应的数字形式的语义表示,一般是一个一维数组。
  • 词向量
    • 可以将一个一维数组看作是一个高维空间中的 “向量” 表示。如在 GPT3 中每个词都用一个一维数组来表示,数组中有 12288 个数字,这些数字分别代表着语义中的某个特征值。然而,在更多情况下会将这个一维数组看成是一个在 12288 维的高维空间中的一个 “向量”。
    • 所谓 “向量” (或叫矢量),就是在空间中有一个坐标点,从原点画一条带箭头的直线,指向这个坐标点,这样其既有长度又有方向。
    • 每个 “词向量” 就可以看做是高维空间中的一个坐标点,该词语中的每个数字(特征值)就是其在多维空间中的各个坐标(维度)值。做个类比,可以近似想象成 x 轴方向代表性别,y 轴方向代表身高,z 轴方向代表枪械射击水平,m 方向代表入伍时间 。。。一共有 12288 个方向代表了12888个特征值,这个表示方法是不是比五边形战士更流 B :)
    • 在GPT-3中,虽然词向量的维度是12288维,但这并不意味着每个词都用满这12288个位置来填充数字,即每个词,其对应的12288维向量中可能只有部分维度具有较大的数值,而其他维度则可能接近于零。
  • 位置嵌入
    • 位置嵌入用于为序列中的每个元素提供位置信息,从而增强模型对序列顺序的理解和表达能力。
    • 这个过程并不是简单地在词向量中增加数字,而是通过特定的函数(如正弦和余弦函数)调整词向量中的数值。

二、故事开启:自注意力机制

1、故事开编

这四个人肯定不能乱哄哄的就出发,而是先要相互了解和相互帮助,再根据每个人的能力合理制定作战策略。这里让每个人都先进行自我介绍,要求简短,而不是长篇大论的把自己每个能力都详细介绍一遍。

  • 于是开始:
    • 张亮:大家好,我叫张亮,是个狙击手。我现在只有一把狙击步枪,但是缺少了瞄准镜,你们谁有?
    • 刘磊:大家好,我叫刘磊,是个狙击观察员。正好我手头有一个备用的狙击瞄准镜!
    • 王强:大家好,我叫王强,我是个轻步兵,也擅长射击,我想要几个手榴弹。
    • 赵路:大家好,我叫赵路,我是个后勤兵,可以负责一切后勤保障,而且我手头有狙击枪子弹,也有手榴弹。
  • 经过互相沟通与了解,最终这个小组制定了以下的作战思路:
    • 刘磊把手头的狙击瞄准镜给张亮用,提升张亮的能力。
    • 赵路把手头的狙击枪子弹也给张亮用,继续提升张亮的能力。
    • 以张亮为团队核心,小组以狙击作战为主要作战形式,其他人配合。

2、对照模型看

以上过程就好比 Transformer 架构中 “自注意力机制” 的处理过程:

1、首先,赋予三个能力。为每个经过 “位置编码” 的 “词向量” 都赋予三个能力(通过前期大量的训练才得到的这三个能力):

  • Q 能力,(Query,查询)查询能力。【对应到故事中:每个人可以进行提问,如张亮问,谁有瞄准镜?】
  • K 能力,(Key,)与 Q 进行匹配的能力,类似应答查询的能力。【对应到故事中:通过自我介绍可以判断是否和别人的提问相匹配,如刘磊说他正好有个瞄准镜】
  • V 能力,(Value,)记录自身实际语义的完整能力。【对应到故事中:每个人实际所拥有的各项能力】

2、其次,通过 Q 和 K,找到自己最需要的。通过 Q 和 K 的能力结合,找到哪些词是自己最关注(即权重高)的,如以 “张亮” 的视角来看:

  • 张亮先通过 Q 能力进行询问,即他最关注的是谁有瞄准镜。
  • 通过刘磊的自我介绍(K能力)得知他有瞄准镜。从张亮的角度来看,刘磊对自己最重要,因此刘磊的权重最大。
  • 通过赵路的自我介绍得知他有狙击弹,因此从张亮来看,赵路也比较重要,而且赵路的权重比刘磊要小些,但是比王强要大些。
  • 这里还包括张亮自问自答的情况

3、再次,调整 V,从权重高的人那里补充自己的能力。即从对方哪里对自己进行补给,使自己的能力得到加强。继续以 “张亮” 的视角来看:

  • 根据 Q 和 K 运算得到的结果(权重),就可以把权重高的人能力也给自己补充一些(即调整 V 值)。
  • 于是,张亮从刘磊手中补充到了狙击枪瞄准镜,从赵路手中补充到了狙击枪子弹,从王强那里啥也没有得到。
  • 因此张亮的能力(V)就得到了加强(补充了瞄准镜和子弹)。

4、总结,以上过程,总结为一句话:对每个经过 “位置编码” 的 “词向量” ,先通过自己的 Q 和所有词向量的 K 计算注意力权重,再把这些权重分别作用于对应词向量的V,最后得到自己的“自注意力”向量。

3、补充说明

  • Q、K、V的获得
    • 通过用位置编码后的词向量(E),分别乘以3个不同的 “权重矩阵”(Wq,Wk,Wv)得到的,即(矩阵乘法):
      • Q = E  x  Wq
      • K = E  x  Wk
      • V = E  x  Wv
    •  每个权重矩阵(Wq,Wk,Wv)中的每个值都是模型中的一个“参数”
      • 这些参数和上篇笔记讲的不是同一类参数,而且这类参数从总量上要少的多
      • 这些参数是通过对模型的训练,不断调整而学习到的
    • 在 GTP3 中,Wq、Wk、Wv 都是 [128, 12288] 规模的矩阵(即128行 x 12288列)。E 是一个12288  维的向量(即一个一维数组,看作12288行 x 1列)
      •  Q = E  x  Wq  相当于将向量 E 进行线性变化,从 12288 维变化到 128 维,K 和 V 同理。
      • Q 和 K 通过 “点积” 的方式计算两个词之间的相似性(权重)。好比我们要比较两个人的相似性,对计算机而言,那么会先得到二人在现实中(三维)相同角度的照片(二维),然后拿着两张照片进行相似度的比较,类似前面从 12288 维降到了 128 维的作用。当然如果一个角度不够,就多拍几个角度的照片,分别对比就行了。放到 Transformer 中也一样,GTP3 会从 96 个不同的角度进行对比。每个对比叫做一个“自注意力头”,而 GTP3 有 96 个自注意力头,就称之为“多头自注意力机制”。当然这些头也都是大模型经过训练而学习到的,即有哪 96 个角度在进行比较相似性的时候最好用。
    • Transformer 用的是“注意力”机制,不是“注意力”机制!在以上过程中,词和词之间的计算和处理都属于同一个输入的句子中,是“自己人”。

三、故事外篇:后续

1、故事开编

四个人通过短暂的沟通,有些人获得了自己需要的补充,当然也有些人并没有得到太多的补给,总之他们之间完成了相互的了解。

那么接下来要做什么呢?组团去干掉敌人的大 Boss? 不不不,还不能这么干!

接下来应该详细分析并综合每个人的具体能力(由MLP层完成),根据他们过往的战绩、经验、特点,然后列出一批攻击目标及实施成功的可能性(通过归一化处理得到成功概率),最后选择成功可能性最高的那个家伙当做作战目标(预测结果)。

Transformer 架构中包含多个组成部分,自注意力机制只是其中的一个处理环节,还有 MLP、线性处理、Softmax归一化处理等等其他事情要做。

2、补充说明

1)、这些士兵的能力需要提前通过训练得到

  • 大模型中的士兵开始是没有智商的,他们甚至不会介绍自己,也不知道相互问询,即便问也不知道问什么,只会闷头向敌人跑,然后悲剧发生。
  • 好在这些士兵是虚拟的,模型可以让它们经过大量反复的训练,让它们学会懂得怎么介绍自己,怎么找到最佳配合搭档,怎么找对自己的位置等等。
  • 最终,他们学会了这些,可以走上真正的战场了。

2)、自始至终都有个 NPC

  • 为啥不是一个男兵和一个女兵的故事?
  • 为啥他们总是要先相互询问再配合,而不是官衔最大的直接下命令?
  • 为啥他们都愿意把自己的装备给别人?
  • 总之这是提前必须设定好的情节,Transformer 就是那个 NPC,左右着剧情的发展,模型就是一个框架,在这个框架里面完成规定好的处理。

3、再举个例子

向大模型提问:一个苹果涮着好吃么?

接下来看大模型怎么做:

  • 整体是一个预测的过程:
    • 先对这句话中的每个词进行分析,理解问题的含义(在自注意力机制中完成)
    • 再通过前馈神经网络(或者叫 MLP)中存储的通用知识进行答案的预测
    • 提供一批结果数据和对应的概率,然后将其中概率最大的那个选出来当做结果输出
  • 再细致些看这个过程:
    • 把句分词。将这句话分解成七个单词: 一个,苹果,涮,着,好,吃,么。
    • 词向量嵌入。有一个词表,已经做好了很多词的向量表示方法,从里面找到你要的对应词就好了。GTP3 可以用 12288 个数字(维度)表示一个单词。这样每个词就可以看成是一个高维(12288维)空间的坐标位置了。但是这个词的意思并不一定符合当前的语境,例如苹果这个词,到底是食物呢还是手机呢?所以要通过自注意力机制搞明白他到底是哪种含义。
    • 位置嵌入。为每个词记录他在句子里的位置,好比,让每个词按照在句子中出现的位置在 X 轴方向上依次移动调整(当然这只是个类比)。
    • 自注意力机制:
      • 给每个词向量分别赋予查询(Q),回答(K),记录自己真实语义特征(V)的三种能力。
      • 通过Q和K,计算每个词和所有词(包括自己)之间的权重(也叫相似性)。例如苹果这个词会向其他词提问,你能吃么?你能打电话么?你能...,最后发现这个句子里都是“吃”、“涮”这类和食物有关的内容,那这句话里苹果更倾向于食物的方面,而不是更倾向于手机的方面。
      • 于是苹果这个词就要调整自己的对语义的记录,即调整部分坐标值,使之更加靠近高维空间中食物这个轴(维度)的方向。即通过Q和K的计算结果,再作用于V,调整V里面的值(即坐标)。
    • 经过以上处理过程后,模型对这句输入的内容更了解,也更明白你要的是什么了,那么接下来再继续进行后续处理(MLP、Linear、Softmax 。。。)就更精准了,直到最后输出预测到的答案。

最终输出模型预测的结果:一个苹果涮着好吃么? 好吃滴很!

4、再再举个例子

1)、背景设定

假设我们有两个人A和B,他们在某个高维空间中表示为两个点。我们的目标是计算这两个人之间的相似性。然而,直接在高维空间中计算相似性可能会非常复杂且计算量大。为了解决这个问题,我们引入了一个自注意力机制,该机制通过不同的线性变换(可以看作是对原始高维数据做不同平面的切片)来捕捉和比较A和B的不同特征,并同时考虑这些特征来计算他们的相似性。

2)、自注意力机制的工作原理

  • 特征切片与提取:
    • 自注意力机制首先通过训练学习到了两个权重矩阵Wq和Wk,它们分别对应于两种不同的“切片方式”或“特征提取器”。
    • Wq可以被看作是一个“正面切片器”,它从原始高维数据中提取出与前后方向相关的特征(比如身高、体态等),生成一个二维的“正面切片”。
    • Wk则是一个“侧面切片器”,它从原始高维数据中提取出与左右方向相关的特征(比如肩宽、体型等),生成一个二维的“侧面切片”。
  • 同时考虑多个特征切片:
    • 在得到A和B的正面切片和侧面切片后,自注意力机制并不是只看前后特征是否相似或者只看左右特征是否相似,而是同时考虑这两个切片。
    • 这通常是通过点积操作来实现的:计算A的正面切片与B的正面切片之间的点积,得到他们在前后特征上的相似度得分;同时计算A的侧面切片与B的侧面切片之间的点积,得到他们在左右特征上的相似度得分。
  • 相似度计算与综合评估:
    • 这两个点积结果被视为两个人在前后特征和左右特征上的相似度得分。
    • 模型可能会将这两个相似度得分进行某种形式的组合(比如求和、加权求和等),以得到一个综合的相似度评估。
    • 这个综合评估不仅考虑了前后特征上的相似性,还考虑了左右特征上的相似性,从而提供了一个更全面的相似性度量。
  • 训练与优化:
    • 权重矩阵Wq和Wk是通过大量数据的训练得到的。模型会自动学习哪种切片方式能够最好地表示输入数据,并优化这些切片方式以及相似度计算的方式(比如点积操作的权重、组合方式等),以提高相似度计算的准确性。
    • 在训练过程中,模型会不断调整这些参数,以便它们能够最好地捕捉输入数据中的特征信息,并在低维切片空间中准确地计算相似度。

3)、案例应用与效果

在实际应用中,这种自注意力机制已经被证明在自然语言处理、图像识别等领域具有显著的效果。它允许模型在处理复杂数据时能够灵活地捕捉到多个维度的特征信息,并做出准确的预测和决策。特别是在比较两个人(或更一般地,两个对象)的相似性时,自注意力机制能够同时考虑多个特征切片,从而提供一个更全面、更准确的相似性评估。

通过这个完整的案例,我们可以看到自注意力机制在捕捉和比较输入数据不同特征切片方面的强大能力,以及它在处理复杂任务时的重要性和有效性。

标签:03,Transformer,每个,AI,张亮,切片,12288,注意力,向量
From: https://blog.csdn.net/weixin_42007999/article/details/143782071

相关文章

  • E. Klee's SUPER DUPER LARGE Array!!!
    E.Klee'sSUPERDUPERLARGEArray!!!#Klee'sSUPERDUPERLARGEArray!!!题面翻译题目大意你将得到一个长度为的序列,请求出的值,其中输入格式本题存在多组测试数据。第一行为一个正整数(),表示数据组数。对于每组数据分别给出用空格隔开的两个整数与()。输出格式对......
  • oracle RMAN Duplicate failing with RMAN-06136, ORA-01503, ORA-00349
     在数据迁移的时候遇到报错RMAN-00571:===========================================================RMAN-00569:===============ERRORMESSAGESTACKFOLLOWS===============RMAN-00571:===========================================================RMAN-03002:failur......
  • 二分——E. Klee's SUPER DUPER LARGE Array!!!
    题目Klee有一个数组a长度n包含整数[K,K+1,...K+n]按此顺序。Klee想要选择一个索引i(1<=i<=n),使得x=|a1+a2+...+ai-ai+1-...-an|最小化。请注意,对于任意整数z,|z|表示x.输出x.输入第一行包含t(1≤t≤1e4)—测试用例的数量。每个测试用例包含两个整数n和k(2≤n,k≤109)—数......
  • 【AiPPT-注册/登录安全分析报告-无验证方式导致安全隐患】
    前言由于网站注册入口容易被黑客攻击,存在如下安全问题:1.暴力破解密码,造成用户信息泄露2.短信盗刷的安全问题,影响业务及导致用户投诉3.带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞所以大部分网站及App都采取图形验证码或滑动验证码等交互解决方案,但在机......
  • 深入浅出学算法031-平面分割
    题目描述同一平面内有n(n≤500)条直线,已知其中p(p≥2)条直线相交于同一点,则这n条直线最多能将平面分割成多少个不同的区域?输入两个整数n(n≤500)和p(如果n>=2则2≤p≤n)。输出一个正整数,代表最多分割成的区域数目。样例输入125样例输出73代码走起代码#include<bits/std......
  • 应届毕业生找不到工作很焦虑怎么办?用多面鹅ai来帮你面试!
    缓解焦虑的最好办法就是手拿很多Offer,本文分享我是如何从连面试邀请都没有的小白,成为offer收割机。学会1点,你就赚到了!最开始我也是一头雾水。没什么过人的经历,简历写得磕磕绊绊,面试更是紧张得不知道说啥。然后我在网上刷到有人推荐Offergoose这个AI面试工具,抱着试试看的心态下......
  • 【Transformer】损失函数-交叉熵损失
    目录1.交叉熵损失的定义:2.输入:模型的输出分布和真实标签详细解释输入3.输出:损失值4.详细的步骤5.举例说明总结在《AttentionIsAllYouNeed》论文中的Transformer模型主要用于机器翻译任务。对于这样的序列生成任务(如翻译、文本生成等),模型的损失函数通常是交......
  • AI论文写作软件能否提高论文质量?
    AI写作软件确实可以在多个方面提高论文的质量,但它们也有一定的局限性。以下是一些具体的方式,说明AI写作软件如何帮助提高论文质量,以及需要注意的事项:1.语言和语法改进语法检查:工具如Grammarly、ProWritingAid可以自动检测并修正语法错误、拼写错误和标点符号错误。句子结构......
  • 使用Tailwind CSS的几个小Tips
    前情TailwindCSS是一个原子类CSS框架,它将基础的CSS全部拆分为原子级别。它的工作原理是扫描所有HTML文件、JavaScript文件以及任何模板中的CSS类名,然后生成相应的样式代码并写入到一个静态CSS文件中。TailwindCSS快速、灵活、可靠、没有运行时负担。自从接触了Tai......
  • 如何使用SpaceClaim对动力电池仿真模型进行简化
    本文摘要(由AI生成):文章概述了流体与热仿真模型简化的关键原则,指导了如何基于部件对热系统的影响进行保留、简化或舍弃。在简化过程中,要确保管道内径、液冷板内流道尺寸及细节特征保持不变,水管形态平滑,接头装配良好。对热管理系统影响较小的几何特征可简化。简化后需检查模型无......