新闻资讯你的位置:首页-海平圣 棉类有限公司 > 新闻资讯 > 每个token被休养为一个长度为4096的镶嵌向量
每个token被休养为一个长度为4096的镶嵌向量

发布日期:2024-05-22 14:11    点击次数:147

  

每个token被休养为一个长度为4096的镶嵌向量

西风 发自 凹非寺量子位 | 公众号 QbitAI

让大神Andrej Karpathy一键三连❤️(点赞+转发+指摘),一个教你从新运转已毕Llama3的代码库爆火。

X上转赞保藏量超6.8k,GitHub揽星2k+。

火就火在,它教你从新用Meta开源的权重进行推理,详确讲解和张开了注视力机制中多个头的矩阵乘法、位置编码以及扫数中间层。

换句话说,他讲解了每行代码都在干啥。

Karpathy看后直呼打造者Nishant Aklecha(后文暂称“纳哥”)是个有品的东谈主:

透顶张开后,比起模块相互嵌套和调用时,更容易交融每一步具体在作念什么。

网友们对其亦然拍桌陈赞,纷纷致意:

话未几说,一王人来看纳哥是如何手把手教的。

(量子位在不改动开心的基础上,进行了编译整理)

从新已毕llama3

在运行纳哥提供的文献前,大伙儿需要事先下载Meta官方提供的Llama3模子权重。

纳哥示意我方没搞分词器,推采取Karpathy的现成痛快版BPE代码。

PS:

“字节级(byte-level)”BPE算法,在UTF-8编码的字符串上运行,无为利用于大模子分词。Karpathy提供的这个代码库包含两个分词器,都能在给定文本上查验分词器的词汇表和合并国法、将文本编码为token、将token解码为文本。

读取模子文献的相貌频频取决于model classes的编写相貌以及class中变量的定名。但由于纳哥是从新运转已毕Llama3,是以将一一张量地读取文献执行。

通过此确立不错谋划出模子的结构和参数信息,举例模子包含的Transformer层数、多头注视力块中的头数,以及词汇表的大小等细节。

将文本休养为token时,纳哥使用tiktoken行为分词器。

接下来,纳哥展示了在代码中将token休养为高维的镶嵌示意。这是代码库中独一使用内置神经聚集模块的部分。

[17x1]的token矩阵造成了[17x4096]的镶嵌矩阵。也等于说,每个token被休养为一个长度为4096的镶嵌向量,统共有17个这么的镶嵌向量。

然后,纳哥对镶嵌进行RMS归一化。经过这一步后,镶嵌的格式不会改动,只须数值被归一化了。纳哥强调需要一个norm_eps,幸免未必将RMS值设为0导致除以0的失误。

以下是公式:

构建Transformer的第一层,进行归一化处分,从模子字典中拜访layer.0(即第一层)。归一化之后,张量的格式仍然是[17x4096],与镶嵌时疏浚,但数值已被归一化。

随着纳哥从新已毕注视力机制,加载Transformer第一层的注视力头。

从模子中加载query、key、value和output向量时,它们的格式分袂是 [4096x4096]、[1024x4096]、[1024x4096] 和 [4096x4096]。

纳哥示意乍一看有点奇怪,因为理思情况是每个注视力头的q、k、v和o向量是颓败的。而代码作家将它们系结在一王人,是为了便捷并行打算注视力头的矩阵乘法。

把扫数这些向量解包开来:

下一步,纳哥将从多个注视力头中解包query,解包后的格式是[32x128x4096],32是Llama3中的注视力头数目, 品众电子公司128是query向量的大小, 南京技术进出口有限责任公司4096是token镶嵌的大小。

在这里,泰兴市民声电子有限公司纳哥拜访了第一层第一个注视力头的query权重矩阵,query权重矩阵的大小是[128x4096]。

将query权重矩阵与token镶嵌相乘,取得每个token的query向量。成果的格式为[17x128],有17个token,每个token对应一个长度为128的query向量。

接下来需要位置编码。

当今也曾为prompt中的每个token生成了query向量,但每个单独的query向量并不知谈它在prompt中的具体位置。

举例,query:“the answer to the ultimate question of life, the universe, and everything is ”(人命、天地和一切的终极问题的谜底是)。

在这个prompt中,使用了三次”the”,需要证实它们在prompt中的位置,使这三个”the”token的query向量有所不同(每个向量的大小为[1x128])。

通过使用RoPE(旋转位置镶嵌)来进行这些旋转操作。

上一步中,纳哥将query向量分红对,并对每一双利用一个旋转角度偏移。

由此,得到的向量大小为 [17x64x2],这是将长度为128的query向量对每个prompt中的token分红64对。这64对中的每一双都会证实m*(theta) 进行旋转,其中m是要旋转query的token的位置。

使用复数的点积来旋转一个向量:

当今每个token的query元素都有一个复数(角度变化向量),不错将query向量(之前分红的对)休养为复数,树苗然后通过点积证实位置旋转query向量。

取得旋转后的向量后,不错通过将复数从新视为实数来得到成对的query向量。

旋转后的对当今也曾合并,有一个新的query向量(旋转后的query向量),那格式为[17x128],其中17是token的数目,128是query向量的维度。

key与query险些疏浚。

纳哥示意我方不会详确西席key的数学旨趣,只需要记着以下几点:

key生成的key向量维度亦然128;key的权重只须query的四分之一,这是因为key的权重在消逝时代内被4个头分享,来减少打算量;key也会旋转添加位置信息,原因与query疏浚。

此时,纳哥也曾为每个token取得了旋转后的query和key。每个query和key当今的格式都是[17x128]。

下一步,纳哥将对query矩阵和key矩阵进行相乘操作。这么作念会生成一个评分矩阵,将每个token干系起来。这些评分描写了每个token的query与每个token的key之间的干系性,这等于自注视力机制。

注视力评分矩阵(qk_per_token)的格式为[17x17],其中17是prompt中的token数目。

接下来需要对query key评分进行掩码处分。在Llama3的查验经过中,改日token的qk评分是被掩码的,只通过畴昔的token来展望token。

因此,在推理时,要将改日的token评分开荒为0。

接下来是value,接近注视力机制的临了一步。

这些评分(0-1)用于细则每个token使用若干value矩阵。

和key一样,value的权重也在每4个注视力头之间分享,是以底下value权重矩阵的格式是[8x128x4096]。

第一层,第一个注视力头的value权重矩阵如下所示:

然后是value向量。

使用value权重来获取每个token的注视力值,矩阵的大小是[17x128],其中17是prompt中的token数目,128是每个token的value向量的维度。

注视力:与每个token的value相乘后得到的注视力向量的格式为[17x128]。

当今有了第一层第一个头的注视力value。然后纳哥运行一个轮回,对第一层的每个头实行与上头的打算透顶疏浚的数学运算。

然后得到了第一层扫数32个头的qkv_attention矩阵,接下来将扫数注视力得分合并成一个大小为[17x4096]的大矩阵。

关于第0层注视力机制的临了步伐,其一是将注视力得分矩阵与权重矩阵相乘。

这是一个浅易的线性层,是以只需进行矩阵乘法。

当今得到了注视力机制后的镶嵌value变化,应该被添加到原始的token镶嵌中。

对镶嵌增量进行归一化处分,然后通过镶嵌增量运行一个前馈神经聚集。

在Llama3中,加载前馈权重并已毕前馈聚集。使用了一种名为SwiGLU的前馈聚集,这种采聚集构在模子需要的时代,大要灵验地加多非线性。

当今完成了第一层之后每个token的新镶嵌。当今只剩下31层了,只需通过一个轮回来完成。

纳哥示意不错将这个剪辑后的镶嵌思象成包含了第一层中扫数查询信息的镶嵌。随着层数的加多,每一层都会对输入的信息进行越来越复杂的处分,直到最终得到一个大要全面了解下一个需要展望的token的镶嵌。

之前作念的扫数事情,对每一层都相通一次。

然后得到了最终的镶嵌,这是模子对下一个token的最优展望。这个镶嵌的格式与惯例的token镶嵌疏浚,为[17x4096],其中17是token的数目,4096是镶嵌的维度。

临了,将镶嵌解码成token值。

使用输出解码器将最终的镶嵌休养成一个token。

接下来看纳哥使用临了一个token的镶嵌来展望下一个value,但愿展望的成果是42。

温州异域进出口有限公司

因为证实《星河系漫游指南》一书中的说法,42是“人命、天地及一切的终极问题的谜底”。大无数LLM在这里都会回报42,这将考证通盘代码的正确性。

模子展望下一个token的编号为2983。这个编号对应数字42吗?

OK,死心。

“让商榷变得愈加举手投足”

浅易先容一下Nishant Aklecha。

Nishant Aklecha是构建和鼎新定制话语模子平台Glaive AI的商榷员,曾任职于摩根士丹利,寂静查验和微调妄语语模子。

此外,他还和一又友一同创立了一个商榷实验室,名为A10(AAAAAAAAAA)。

他们的意见不错转头成一句话:让商榷变得愈加举手投足。

除了放出这个代码库,Nishant Aklecha可谓好东谈主作念到底。

安丘市兴荣食品有限公司

网友思更好地交融这个代码库的执行,Nishant班师一个YouTube视频甩了过来:

之前Nishant Aklecha还曾写过一篇Blog,详解了潜在一致性模子(LCM),通常收货了不少好评。

啥也不说了,感趣味的家东谈主们马上码住吧。

GitHub聚集:https://github.com/naklecha/llama3-from-scratch

参考聚集:[1]https://x.com/naklecha/status/1792244347225641338[2]https://naklecha.notion.site/explained-latent-consistency-models-13a9290c0fd3427d8d1a1e0bed97bde2[3]https://www.youtube.com/watch?v=o29P0Kpobz0&t=530s[4]https://www.youtube.com/watch?v=eMlx5fFNoYc



Powered by 首页-海平圣 棉类有限公司 @2013-2022 RSS地图 HTML地图

Copyright 站群系统 © 2013-2024 SSWL 版权所有