业界动态
一张图说清楚:大模型“大”在哪?ChatGLM模型结构详解
2024-10-11 08:44

大型模型的神秘并不是不可透视的,今天我们以ChatGLM-6B为例,解析一下模型结构和代码。你会发现,大模型结构并没有那么神秘,相反还挺清晰的,就是Transformer的decoder改造而来的。我们还会看到模型中参数最密集的部分,这也是模型“大”的原因。

ChatGLM和其他生成模型一样,都是迭代输出每次生成一个token,然后把输出的token

拼到输入,进行下一轮迭代。我们以输入“你好吗”为例,假设输出最大长度512个token,简单梳理一下整个生成流程

1.输入

上图中模拟了两轮迭代时模型中数据的形状,黑字是第一次迭代时模型中数据的形状,如果在第二次迭代中发生变化我用红字标出,在以后的轮次中都会遵循规律进行下去。可以看到,模型输入有三个,他们其实都要送入模型的核心模块—GLMBlock

a.input_ids 输入的token序列,它会经过Embedding转换成hidden_state,每次迭代这个值都会拼上输出,进行下一次迭代。

b.attention_mask 根据输入的维度计算出的mask矩阵,每次迭代宽高都会加1,规律如下图,其中x是会被mask掉的token

c.position_ids 2d旋转位置编码

2.流程

a.将输入做Embedding转换成hidden_state;根据输入的维度计算出的mask矩阵;根据input_ids和mask计算出position_ids。

b.将上面三个值送入28个GLMBlock,这28个GLMBlock序贯排列。每个GLMBlock的输入除了上述三个参数,还有一个layer_id,layer_id每轮+1,也就是从1-28。每个GLMBlock的输出是hidden_state,重新赋值hidden_state后进入下一轮迭代,总共28轮。

c.28个GLMBlock之后输出最后一个的hidden_state,更大规模的模型,GLMBlock就会更多。

d.hidden_state经过线性变换。也就是全连接转换成词典大小130528。

e.130528的维的结果执行argmax,得到输出的token

f.将新的token拼到input_ids后面

g.如果token序列达到预设的最大长度或最后的token=eos_token (30005)则迭代结束;否则继续迭代。

3.代码

 

ChatGLMModel源码如下

 
 

GLMBlock是核心模块,整体流程如下

1.整体流程

a.LayerNorm: hidden_states经过LayerNorm,然后送入SelfAttention
b.SelfAttention:

输入经过全连接升维至12288,然后拆出QKV

QK结合position_ids和block_position_ids,分别经过2d旋转位置编码重新编排

新的Q和K做内积并进行Attention缩放,得到attention_scores

使用mask将部分attention_scores的值去掉(设置成一个很小的值,再经过softmax处理,attention_scores是一个概率图,标志每个token和其它token的相关性

将attention_scores与V做内积,即对V施加注意力机制,得到attention_output

attention_input与attention_output做残差相加,attention_input的系数是sqrt{2*num_layers},其中num_layers=28。

c.LayerNorm 再LayerNorm一遍

d.GLU: Gated Linear Unit(门控线性单元,也可以叫做FFN(Feedforward Neural Network)或者MLP(Multilayer Perceptron,由两个全连接夹着一个GELU激活函数组成。GLU之后接一个带权重的残差输出。

GLMBlock代码

 

2.旋转位置编码

上面提到的旋转位置编码是一种用绝对位置编码的方式实现相对位置编码的编码方式

3.Attention缩放

Attention(Q,K)<em></em>=softmax(frac{QK^T}{sqrt{d}})
上面是Attention公式,其中d是查询向量和键向量的维度,这里是128,Attention缩放指的是1/sqrt{d}。那为什么QK要除以sqrt{d},原因如下

a.如果softmax的输入值过大,那它的梯度会趋近于0,导致梯度消失,所以要保证softmax的输入大小合适,最好是一个有效的概率分布。

b.在注意力机制中,通常会对注意力分数进行归一化处理,即N(0, 1)。在经过layernom之后,QK能符合这个标准,他俩的内积均值还是0 ,但是标准差变成了d,推导过程如下

Var(QK^T) <em></em>= Var(sum_{i<em></em>=0}^{d}q_ik_i)

由于每个元素 q_ik_i 都是独立的,并且符合 N(0,1) 分布,所以矩阵 Q 和 K 的内积的方差等于所有元素的方差之和。

Var(QKT)<em></em>=sum_{i<em></em>=0}{d}Var(q_ik_i)

由于 q_i? 和 k_i? 都是来自 N(0,1)的独立随机变量,它们的方差都是 1,所以矩阵 Q 和 K 的内积的方差为所有元素的方差之和。

Var(QK^T)<em></em>=d

std(QK^T)<em></em>=sqrt{d}

因此,在这种情况下,矩阵 Q 和 K 内积的标准差是它们的维度 nn。所以要让std(QK)=1,除以sqrt{d }就可以了。

4.mask的作用

我们观察mask矩阵发现,在生成每个token时,通常会“mask掉”刚刚生成的token,这主要有下面几个原因

a.避免重复 :如果模型在生成下一个token时还看到刚刚生成的token,它可能会过分关注这个token,并倾向于重复它,这会使得生成的文本显得不自然和重复。

b.防止错误累积:在生成较长的文本序列时,如果模型在某个步骤生成了一个不合适的token,而这个token又被用于生成后续的token,可能会导致错误在序列中累积,影响整个生成文本的质量。通过mask掉刚刚生成的token,可以减少这种错误累积的可能性。

c.缺乏远见:当模型在生成文本时,它应该考虑整个上下文的历史,并预测一个能够推动故事或对话向前发展的token。如果模型过分关注刚刚生成的token,它可能会忽视更广泛的上下文,导致生成的文本缺乏远见和创造性。

5.残差系数

在两个残差处,都使用了缩放系数sqrt{2*num_layers},其中num_layers=28。

因为28个GLMBlock是串联的,每个GLMBlock的输出都要与输入做融合。那么有一个缩放系数是必要的,从这个系数可以看出输入与输出的权重比例大约为7.4:1,随着层数的增加,每层输出的影响力是一点一点增加的,这很合理。

那缩放系数为什么是这个样子呢,我能力有限没有找到原因,欢迎知道的大佬指点一下。但是可以简单的看一下这个系数的意义

a.模型的规模变大,num_layers变大,组成结果的层数变大,每层(即输出)的权重变小是合理的;反之亦然。所以这个系数与层数成正比是合理的。

b.开根号可以使这个数的分布更平滑

c.2可以调节输入的权重规模,起到一定的人为调控的作用。

6. FFN (又称MLP

FFN由两个全连接夹着一个GELU组成,两个全连接的中间维度一般设置为hidden_state的整数倍,这里是4(即4096*4=16384

值得一提的是这里是模型参数最密集的地方,有两个全连接。而且从Transformer诞生到现在,有很多部分已经得到优化,唯独没有这块的优化。实验表明,如果FFN变小,模型整体的性能也会随之下降,基本可以认定模型的“知识”是存在于FFN中的,所以这里需要更多的参数。

代码如下

 
 

最后总结一下

1.ChatGLM是根据Transformer的decoder改造的

2.位置编码方式是旋转位置编码

3.残差缩放系数sqrt{2*num_layers}

4.GLMBlock的结构是LayerNorm+SelfAttention+LayerNorm+GLU(FFN

5.ChatGLM的核心是GLMBlock 不通大小的模型是通过调整GLMBlock的个数来实现,比如6B有28个,10B有48个

6.模型的“知识”是存在于FFN中的,这也是大模型最“大”的地方

7.从模型结构来看,理论上输入和输出的长度是没有限制的,但实际使用中一定要设置一个最大长度(从ChatGLM的原来来看,这个长度值得是输入和输出的总长度,这是因为算力限制,而且训练集的长度不是无限的,一般情况下训练集限制在什么长度决定了推理时能支持的最大长度。

ChatGLM的结构整体看下来中规中矩,但是效果很不错,除了模型本身,训练方式也很重要,接下来开始训练模型,敬请期待。

ChatGLM模型结构就介绍到这里,关注不迷路(#.#)

还贴心为大家准备好了一系列的资源,都是通过作者花费大量时间在各个平台收集到的,决定把这些AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【】🆓

大模型学习路线图,整体分为7个大的阶段(全套教程文末领取哈

第一阶段 从大模型系统设计入手,讲解大模型的主要方法

第二阶段 在通过大模型提示词工程从prompts角度入手更好发挥模型的作用

第三阶段 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统

第四阶段 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统

第五阶段 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型

第六阶段 以SD多模态大模型为主,搭建了文生图小程序案例

第七阶段 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述
在这里插入图片描述

? 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等,通过这门课可获得不同能力

? 能够利用大模型解决相关实际项目需求 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求

? 基于大模型和企业数据AI应用开发实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握

? 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【】🆓

    以上就是本篇文章【一张图说清楚:大模型“大”在哪?ChatGLM模型结构详解】的全部内容了,欢迎阅览 ! 文章地址:http://midet.cs-ej.cn/news/12621.html 
     资讯      企业新闻      行情      企业黄页      同类资讯      首页      网站地图      返回首页 成事e家移动站 http://shsunc.cs-ej.cn/ , 查看更多   
最新新闻
没天理!那钓鱼佬在渡劫
“江师弟,你天天钓鱼不修炼,日后终是黄土一堆!”“逆徒啊!为师让你炼飞剑你炼鱼竿!”“师兄,你玩物丧志,我们总归不是一路
元尊男主有儿子或者女儿吗
《元尊》的男主角是周元。他命运坎坷,原本是天才却因圣龙气运被剥夺而八脉不显无法修炼,还身中怨龙毒。但他凭借坚韧的性格重开
夫人她马甲又轰动全城了在线全文阅读
乔念在乔家生活了18年,亲生父母找上门来,一时之间,绕城豪门都知道乔家出了个假千金!真千金多才多艺,温柔善良。假千金不学无
【NEX旗舰版(全网通)QQ游戏下载】vivo NEXQIJIANBANQQ游戏8.4.5免费下载
手机QQ游戏大厅android客户端全面升级为QQ游戏无线平台,新平台,新起点,更强大的游戏接入能力,涵盖单机/网游/休闲/社交四个大
共青团工作计划十五篇
为了保证工作质量和效率的提高,此时我们应该结合领导要求与个人能力撰写工作计划。有了计划,可以合理地安排和使用人力、物力、
一张图说清楚:大模型“大”在哪?ChatGLM模型结构详解
大型模型的神秘并不是不可透视的,今天我们以ChatGLM-6B为例,解析一下模型结构和代码。你会发现,大模型结构
用人单位不得擅自解除劳动合同
《劳动合同法》第十四条 无固定期限劳动合同,是指用人单位与劳动者约定无确定终止时间的劳动合同。用人单位与劳动者协商一致,
新书速递(十一)丨阅享国庆 共贺华诞
NATIONAL DAY盛世华诞庆祖国锦绣中华 盛世华诞在这个举国欢庆的日子,我们上新了一份国庆书单。这个假期在游历祖国壮美山河之余
【A9800手机QQ下载】长虹A9800手机QQ9.0.75免费下载
手机QQ是由腾讯公司打造的移动互联网领航级手机应用,目前已经全面覆盖至各大手机平台·乐在沟通-----√服务超过90%的移动互联网
(体育)乒乓球——WTT中国大满贯:刘炜珊晋级
【来源:新华社】当日,在北京举行的2024年世界乒乓球职业大联盟(WTT)中国大满贯女子单打第二轮比赛中,中国选手刘炜珊3比0战
本企业新闻