大模型详细配置

Transformer结构

目前主力大模型都是基于Transformer的,以下是Transformer的具体架构

它由编码器(Encoder)以及解码器(Decoder)组成,前者主要负责对输入数据进行理解,将每个输入 词元都编码成一个上下文语义相关的表示向量;后者基于来自编码器编码后的最后一层 的输出表示以及已经由模型生成的词元序列,执行后续的序列生成任务。两个部分都是可以单独使用的,事实上GPT系列就是Decoder-only架构。

归一化方法

数据归一化是为了处理模型训练过程中不稳定的情况,不止在LLM领域,其它领域也需要这种技术,因此也存在多种数据Norm技术,比如BatchNormLayerNorm等等。LLM领域常用的Norm技术主要有Layer NormRMSNormDeepNorm等等

Layer Norm

相比于Batch Norm这种以批次数据为单位进行归一化的操作,Layer Norm是对向量内部数据进行归一化的,其复杂度不依赖于batch大小
LayerNorm ( x ) = x − μ σ γ + β μ = 1 H ∑ i = 1 H x i , σ = 1 H ∑ i = 1 H ( x i − μ ) 2 \text{LayerNorm}(x) = \frac{x-\mu}{\sigma}\gamma+\beta\\ \mu = \frac{1}{H}\sum_{i=1}^{H}x_{i},\ \ \sigma = \sqrt{\frac{1}{H}\sum_{i=1}^{H}(x_{i}-\mu)^2 } LayerNorm(x)=σxμγ+βμ=H1i=1Hxi,  σ=H1i=1H(xiμ)2
当然其手法与batchNorm还是一致的,都是尝试让参数重新分布到均值为0,方差为1的分布上去,然后再做线性变换保持信息量。

RMSNorm

其归一化单元与LayerNorm是一致的,但是并不需要那么大的计算量要求。
RMSNorm ( x ) = x RMS ( x ) γ RMS ( x ) = 1 H ∑ i = 1 H x i 2 \text{RMSNorm}(x) = \frac{x}{\text{RMS}(x)}\gamma\\ \text{RMS}(x) = \sqrt{ \frac{1}{H}\sum_{i=1}^{H}x_{i}^2 } RMSNorm(x)=RMS(x)xγRMS(x)=H1i=1Hxi2

DeepNorm

DeepNorm 在 LayerNorm 的基础上,在残差连接中对 之前的激活值 x 按照一定比例 α 进行放缩。通过这一简单的操作,Transformer 的层数可以被成功地扩展至 1,000 层
DeepNorm ( x ) = LayerNorm ( α x + Sublayer ( x ) ) \text{DeepNorm}(x) = \text{LayerNorm}(\alpha x+\text{Sublayer}(x)) DeepNorm(x)=LayerNorm(αx+Sublayer(x))

PreNorm VS PostNorm

根据归一化操作使用的位置,可以分为PreNorm,PostNorm

PostNorm可以表示为
PostNorm ( x ) = Norm ( x + f ( x ) ) \text{PostNorm}(x) = \text{Norm}(x+f(x)) PostNorm(x)=Norm(x+f(x))
其在子层之后使用归一化操作,可以加速网络收敛。但是因为破坏了原本resnet的直接梯度传播通道,训练并不是那么稳定。
事实上这也正是DeepNorm可以与其互补的地方,DeepNorm引入超参 α \alpha α之后,通过调节可以缓解梯度控制的问题,一定程度上保证训练的稳定性。

PreNorm可以表示为
PreNorm ( x ) = x + f ( norm ( x ) ) \text{PreNorm}(x) = x + f(\text{norm}(x)) PreNorm(x)=x+f(norm(x))
表示在每一个子层之前使用归一化操作,这里 norm \text{norm} norm泛指任意一种norm操作。有文章指出,这种操作其实更像是扩展了模型宽度而非深度,因此其性能相比PostNorm可以差一点,但是因为保留了梯度通道,训练更加稳定。

注意力机制

这部分可以参考我之前的博客

位置编码

位置编码的引入,是因为Transformer架构中的attention,并不能区分位置信息。如果我们希望最终学到的embedding是上下文相关的,那么我们就需要引入位置信息,也就是对位置进行编码

绝对位置编码

可以表示为
x t = v t + p t (1) x_{t} = v_{t}+p_{t}\tag{1} xt=vt+pt(1)
其中 p t p_{t} pt表示位置 t t t的位置编码, v t v_{t} vt表示该位置的词元的embedding, x t x_{t} xt就是其最终embedding
其中 p t p_{t} pt 可以表示为
p t , i = { sin ⁡ ( t / 1000 0 ( i − 2 ) / H ) i m o d 2 = 0 sin ⁡ ( t / 1000 0 ( i − 1 ) / H ) i m o d 2 = 1 (2) p_{t,i} = \left\{\begin{matrix} \sin(t/10000^{(i-2)/H}) & i\mod2=0\\ \sin(t/10000^{(i-1)/H}) & i\mod2=1 \end{matrix}\right. \tag{2} pt,i={sin(t/10000(i2)/H)sin(t/10000(i1)/H)imod2=0imod2=1(2)
注意到我们添加的信息只与词元所在位置有关,因此它编码的是绝对位置信息。

相对位置编码

由于上下文信息需要的更多是相对位置信息,因此后续对其做出修改。先来看看为什么上述绝对位置编码在实践中没有相对位置信息。
在Transformer架构中,multi-attention层需要对输入数据进行attention操作。记 X ∈ R n × d X\in \mathbb{R}^{n\times d} XRn×d表示该层的输入数据, W q , W k , W v ∈ R d × d W_{q},W_{k},W_{v}\in \mathbb{R}^{d\times d} Wq,Wk,WvRd×d代表对应的操作矩阵,我们有
attention ( X ) = softmax ( ( X W q ) ( X W k ) T d ) ( X W v ) ∈ R n × d (3) \text{attention}(X) = \text{softmax}(\frac{(XW_{q})(XW_{k})^T}{\sqrt{ d }})(XW_{v})\in \mathbb{R}^{n\times d}\tag{3} attention(X)=softmax(d (XWq)(XWk)T)(XWv)Rn×d(3)
这里 X X X就是已经添加了位置信息的embedding
那么词元 i i i与词元 j j j之间的 attention score \text{attention score} attention score可以表示为
A i , j = ( v i + p i ) W q W k T ( v j + p j ) T (4) A_{i,j} = (v_{i}+p_{i})W_{q}W_{k}^T(v_{j}+p_{j})^T \tag{4} Ai,j=(vi+pi)WqWkT(vj+pj)T(4)
其中位置信息在绝对位置编码 p ( ⋅ ) p_{(\cdot)} p()
事实上上式可以拆分为
A i , j a b s = v i W q W k T v j T + v i W q W k T p j T + p i W q W k T v j T + p i W q W k T p j T A_{i,j}^{abs} = v_{i}W_{q}W_{k}^Tv_{j}^T + v_{i}W_{q}W_{k}^Tp_{j}^T\\ +p_{i}W_{q}W_{k}^Tv_{j}^T + p_{i}W_{q}W_{k}^Tp_{j}^T Ai,jabs=viWqWkTvjT+viWqWkTpjT+piWqWkTvjT+piWqWkTpjT
其中第一部分不包含 p ( ⋅ ) p(\cdot) p(),第二三部分只包含一个 p ( c d o t ) p_{(cdot)} p(cdot),所以只有最后一部分有可能包含相对位置信息(同时包含 p i , p j p_{i},p_{j} pi,pj)。
事实上最后一部分如果不包含线性变换操作,只有 p i p j T p_{i}p_{j}^T pipjT的话,是可以保留相对位置信息的,但是因为线性变换是由attention引入的,我们不好直接去除,所以这也导致相对信息丢失。
所以一个改进措施就是直接在attention中引入相对位置信息。对 ( 5 ) (5) (5)进行改写,得到
A i , j r e l = v i W q W k T v j T + v i W q W k T R i − j T + u T W k T v j T + v T W k T R i − j T (5) A_{i,j}^{rel} = v_{i}W_{q}W_{k}^Tv_{j}^T + v_{i}W_{q}W_{k}^T\textcolor{red}{R_{i-j}^T}\\ +\textcolor{blue}{u^T}W_{k}^Tv_{j}^T + \textcolor{blue}{v^T}W_{k}^T\textcolor{red}{R_{i-j}^T} \tag{5} Ai,jrel=viWqWkTvjT+viWqWkTRijT+uTWkTvjT+vTWkTRijT(5)
改进如下:

  • 将所有的 p j p_{j} pj都改成了 R i − j R_{i-j} Rij,前者由绝对位置信息编码,后者由相对位置信息 i − j i-j ij编码,其生成也是基于正弦波的,但是因为只依赖 i − j i-j ij,显然它会包含相对位置信息
  • 有了相对位置信息之后,相关注意力分数应当与词元本身的绝对位置无关,所以需要将 p i W q T p_{i}W_{q}^T piWqT替换掉,由于 W q T W_{q}^T WqT是一个可学习参数,因此替换为可学习参数 u , v u,v u,v

此时整个attention过程中就只包含相对位置信息了

旋转位置编码RoPE

上述改进操作是基于attention的,后续提出的RoPE,其相对位置信息的编码可以与attention操作解耦,并且相对来说更加优美。
重新思考编码过程。记 q m , k n q_{m},k_{n} qm,kn是两个词元的embedding,简单起见限定它们的维度为2,即 q m , k n ∈ R 2 q_{m},k_{n}\in R^2 qm,knR2,此时它们的内积可以用复数乘积来表示
< q m , k n > = R e [ q m , k n ˉ ] (6) <q_{m},k_{n}> =\mathrm{Re}[q_{m},\bar{k_{n}}]\tag{6} <qm,kn>=Re[qm,knˉ](6)
其中 x ˉ \bar{x} xˉ表示复数形式下 x x x的共轭。上式并不难证明。
此时如果我们将绝对位置 t t t的编码过程定义为乘上 e i t θ e^{it\theta} ei,那么就有
< q m e i m θ , k n e i n θ > = R e [ q m k n ˉ e i ( m − n ) θ ] (7) <q_{m}e^{im\theta},k_{n}e^{in\theta}> = \mathrm{Re}[q_{m}\bar{k_{n}}e^{i(m-n)\theta}]\tag{7} <qmeimθ,kneinθ>=Re[qmknˉei(mn)θ](7)
非常神奇的是,原本只跟绝对位置相关的编码 e i m θ , e i n θ e^{im\theta},e^{in\theta} eimθ,einθ,在内积操作之后只跟相对位置 m − n m-n mn有关了,也就是说我们非常自然地就包含了相对位置信息。
上式需要在实数范畴内实现。记位置 t t t的向量为 q t = ( x , y ) q_{t} = (x,y) qt=(x,y),注意到
q t e i t θ = ( x + y i ) ( cos ⁡ t θ + i sin ⁡ t θ ) = ( x cos ⁡ t θ − y sin ⁡ t θ ) + i ( x sin ⁡ t θ + y cos ⁡ t θ ) (8) q_{t}e^{it\theta} = (x+yi)(\cos t\theta + i\sin t\theta) = (x\cos t\theta-y\sin t\theta) + i(x\sin t\theta+y\cos t\theta)\tag{8} qtei=(x+yi)(cos+isin)=(xcosysin)+i(xsin+ycos)(8)

从而我们的绝对位置编码过程可以表示为
f ( q t , t ) = ( cos ⁡ t θ − sin ⁡ t θ sin ⁡ t θ cos ⁡ t θ ) ( x y ) (9) f(q_{t},t) = \begin{pmatrix} \cos t\theta & -\sin t\theta\\ \sin t\theta & \cos t\theta \end{pmatrix}\binom{x}{y}\tag{9} f(qt,t)=(cossinsincos)(yx)(9)
这就在实数范围内实现了上述复数操作,后续attention操作时自然就会带上相对位置信息。注意到上式实际上就是对向量的旋转操作,所以这种编码方式也被成为旋转位置编码

接下来的问题是对向量维度的扩展,因为目前只支持二维向量的操作。当向量维数 d d d是偶数时,我们只需要将 ( 9 ) (9) (9)式中的旋转矩阵在对角线上不断重复即可,即
f ( q t , t ) = ( cos ⁡ t θ 1 − sin ⁡ t θ 1 0 0 … 0 0 sin ⁡ t θ 1 cos ⁡ t θ 1 0 0 … 0 0 0 0 cos ⁡ t θ 2 − sin ⁡ t θ 2 … 0 0 0 0 sin ⁡ t θ 2 cos ⁡ t θ 2 … 0 0 ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ 0 0 0 0 … cos ⁡ t θ d 2 − 1 − sin ⁡ t θ d 2 − 1 0 0 0 0 … sin ⁡ t θ d 2 − 1 cos ⁡ t θ d 2 − 1 ) ⏟ R t ( x 0 x 1 x 2 x 3 ⋮ x d − 2 x d − 1 ) (10) f(q_{t},t) = \underbrace{\begin{pmatrix} \cos t\theta_{1} & -\sin t\theta_{1} & 0 &0 & \dots & 0 & 0\\ \sin t\theta_{1} & \cos t\theta_{1} & 0 &0 & \dots & 0 & 0\\ 0& 0 & \cos t\theta_{2} & -\sin t\theta_{2} & \dots & 0 & 0\\ 0& 0 & \sin t\theta_{2}& \cos t\theta_{2} & \dots& 0& 0\\ \vdots& \vdots &\vdots &\vdots & \vdots & \vdots &\vdots \\ 0& 0& 0& 0& \dots& \cos t\theta_{\frac{d}{2}-1}& -\sin t\theta_{\frac{d}{2}-1}\\ 0& 0& 0& 0& \dots& \sin t\theta_{\frac{d}{2}-1} & \cos t\theta_{\frac{d}{2}-1} \end{pmatrix}}_{R_{t}}\begin{pmatrix} x_{0}\\ x_{1}\\ x_{2}\\ x_{3}\\ \vdots\\ x_{d-2}\\ x_{d-1} \end{pmatrix}\tag{10} f(qt,t)=Rt costθ1sintθ10000sintθ1costθ1000000costθ2sintθ20000sintθ2costθ2000000costθ2d1sintθ2d10000sintθ2d1costθ2d1 x0x1x2x3xd2xd1 (10)
通过将 d d d分为若干个互不相干的部分,每一个部分都可以独立实现之前的相对编码,从而完成维数的扩展。
具体实现的时候,可以用哈达玛积来取代稀疏矩阵乘法。
根据之前结论不难得到,
R m R n T = R m − n (11) R_{m}R_{n}^T = R_{m-n}\tag{11} RmRnT=Rmn(11)
此时对 ( 4 ) (4) (4)式进行重写,有
A i , j = v i W q R i T ( v j W k R j ) T = v i W q R i T R j W k T v j T = v i W q R i − j T W k T v j T (12) A_{i,j} = v_{i}W_{q}R_{i}^T(v_{j}W_{k}R_{j})^T\\ =v_{i}W_{q}R_{i}^TR_{j}W_{k}^Tv_{j}^T\\ =v_{i}W_{q}R_{i-j}^TW_{k}^Tv_{j}^T \tag{12} Ai,j=viWqRiT(vjWkRj)T=viWqRiTRjWkTvjT=viWqRijTWkTvjT(12)

混合专家模型MoE


类似于推荐系统中的MoE的概念,LLM中的MoE,也是通过聚合多个专家来实现特征增广的同时网络不会过拟合。
这里每一个专家都是一个FFN
F F N ( X ) = σ ( X W 1 + b 1 ) W 2 + b 2 FFN(X) = \sigma(XW_{1}+b_{1})W_{2}+b_{2} FFN(X)=σ(XW1+b1)W2+b2
其中 σ \sigma σ是激活函数
通过一个gating网络对专家输出进行选择和加权,选择是为了保证一定的稀疏性,即只使用 t o p k topk topk个专家用于之后的加权操作。
最后MoE层的输出就由加权结果乘上每一个专家的输出给出。

后续可能会具体讲一下LLM中的MoE与推荐系统中的MoE的区别。

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

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

相关文章

鸿蒙NEXT项目实战-百得知识库04

代码仓地址&#xff0c;大家记得点个star IbestKnowTeach: 百得知识库基于鸿蒙NEXT稳定版实现的一款企业级开发项目案例。 本案例涉及到多个鸿蒙相关技术知识点&#xff1a; 1、布局 2、配置文件 3、组件的封装和使用 4、路由的使用 5、请求响应拦截器的封装 6、位置服务 7、三…

Python数据可视化实战:从基础图表到高级分析

Python数据可视化实战&#xff1a;从基础图表到高级分析 数据可视化是数据分析的重要环节&#xff0c;通过直观的图表可以快速洞察数据规律。本文将通过5个实际案例&#xff0c;手把手教你使用Python的Matplotlib库完成各类数据可视化任务&#xff0c;涵盖条形图、堆积面积图、…

修改原生的<input type=“datetime-local“>样式

效果 基础样式 <input type"datetime-local" class"custom-datetime">input[type"datetime-local"] {/* 重置默认样式 */-webkit-appearance: none;-moz-appearance: none;appearance: none; // 禁用浏览器默认样式/* 自定义基础样式 */w…

scrapy入门(深入)

Scrapy框架简介 Scrapy是:由Python语言开发的一个快速、高层次的屏幕抓取和web抓取框架&#xff0c;用于抓取web站点并从页面中提取结构化的数据&#xff0c;只需要实现少量的代码&#xff0c;就能够快速的抓取。 新建项目 (scrapy startproject xxx)&#xff1a;新建一个新的…

fetch,ajax,axios的区别以及使用

fetch,ajax,axios这些都是发起前端请求的工具&#xff0c;除了这些外还有jquery的$.ajax。ajax和$.ajax都是基于XMLHttpRequest。 介绍下XMLHttpRequest XMLHttpRequest是一种在浏览器中用于与服务器进行异步通信的对象&#xff0c;它是实现 AJAX&#xff08;Asynchronous Ja…

微信小程序的业务域名配置(通过ingress网关的注解)

一、背景 微信小程序的业务域名配置&#xff08;通过kong网关的pre-function配置&#xff09;是依靠kong实现&#xff0c;本文将通过ingress网关实现。 而我们的服务是部署于阿里云K8S容器&#xff0c;当然内核与ingress无异。 找到k8s–>网络–>路由 二、ingress注解 …

LiteratureReading:[2016] Enriching Word Vectors with Subword Information

文章目录 一、文献简明&#xff08;zero&#xff09;二、快速预览&#xff08;first&#xff09;1、标题分析2、作者介绍3、引用数4、摘要分析&#xff08;1&#xff09;翻译&#xff08;2&#xff09;分析 5、总结分析&#xff08;1&#xff09;翻译&#xff08;2&#xff09;…

前后端联调解决跨域问题的方案

引言 在前后端分离的开发模式中&#xff0c;前端和后端通常在不同的服务器或端口运行&#xff0c;这样就会面临跨域问题。跨域问题是指浏览器因安全限制阻止前端代码访问与当前网页源不同的域、协议或端口的资源。对于 Java 后端应用&#xff0c;我们可以通过配置 CORS&#x…

开源软件许可证冲突的原因和解决方法

1、什么是开源许可证以及许可证冲突产生的问题 开源软件许可证是一种法律文件&#xff0c;它规定了软件用户、分发者和修改者使用、复制、修改和分发开源软件的权利和义务。开源许可证是由软件的版权所有者&#xff08;通常是开发者或开发团队&#xff09;发布的&#xff0c;它…

python爬虫笔记(一)

文章目录 html基础标签和下划线无序列表和有序列表表格加边框 html的属性a标签&#xff08;网站&#xff09;target属性换行线和水平分割线 图片设置宽高width&#xff0c;height html区块——块元素与行内元素块元素与行内元素块元素举例行内元素举例 表单from标签type属性pla…

电脑节电模式怎么退出 分享5种解决方法

在使用电脑的过程中&#xff0c;许多用户为了节省电力&#xff0c;通常会选择开启电脑的节能模式。然而&#xff0c;在需要更高性能或进行图形密集型任务时&#xff0c;节能模式可能会限制系统的性能表现。这时&#xff0c;了解如何正确地关闭或调整节能设置就显得尤为重要了。…

AI学习——卷积神经网络(CNN)入门

作为人类&#xff0c;我们天生擅长“看”东西&#xff1a;一眼就能认出猫狗、分辨红绿灯、读懂朋友的表情……但计算机的“眼睛”最初是一片空白。直到卷积神经网络&#xff08;CNN&#xff09;​的出现&#xff0c;计算机才真正开始理解图像。今天&#xff0c;我们就用最通俗的…

2025年渗透测试面试题总结- shopee-安全工程师(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 shopee-安全工程师 信息安全相关Response头详解 1. 关键安全头及防御场景 Linux与Docker核心命令速查…

IntelliJ IDEA 中 Maven 的 `pom.xml` 变灰带横线?一文详解解决方法

前言 在使用 IntelliJ IDEA 进行 Java 开发时&#xff0c;如果你发现项目的 pom.xml 文件突然变成灰色并带有删除线&#xff0c;这可能是 Maven 的配置或项目结构出现了问题。 一、问题现象与原因分析 现象描述 文件变灰&#xff1a;pom.xml 在项目资源管理器中显示为灰色。…

Spring MVC 接口数据

访问路径设置 RequestMapping("springmvc/hello") 就是用来向handlerMapping中注册的方法注解! 秘书中设置路径和方法的对应关系&#xff0c;即RequestMapping("/springmvc/hello")&#xff0c;设置的是对外的访问地址&#xff0c; 路径设置 精准路径匹…

技术分享 | MySQL内存使用率高问题排查

本文为墨天轮数据库管理服务团队第51期技术分享&#xff0c;内容原创&#xff0c;如需转载请联系小墨&#xff08;VX&#xff1a;modb666&#xff09;并注明来源。 一、问题现象 问题实例mysql进程实际内存使用率过高 二、问题排查 2.1 参数检查 mysql版本 &#xff1a;8.0.…

【redis】什么是持久化之 RDB

什么是持久化 MySQL 的事务&#xff0c;有四个比较核心的特性&#xff1a; 原子性一致性持久性>持久化&#xff08;说的一回事&#xff09; 把数据存储在硬盘上>持久把数据存在内存上>不持久重启进程/重启主机之后&#xff0c;数据是否还存在 隔离性 Redis 是一个内存…

Python、MATLAB和PPT完成数学建模竞赛中的地图绘制

参加数学建模比赛时&#xff0c;很多题目——诸如统计类、数据挖掘类、环保类、建议类的题目总会涉及到地理相关的情景&#xff0c;往往要求我们制作与地图相关的可视化内容。如下图&#xff0c;这是21年亚太赛的那道塞罕坝的题目&#xff0c;期间涉及到温度、降水和森林覆盖率…

Python(冒泡排序、选择排序、插入法排序、快速排序,算法稳定性)

算法的稳定性 冒泡排序 # 冒泡排序 # 1 思想: 相邻位置两个元素比较, 前面的元素比后面的元素大则交换, 把最大的数给找到 # 经过一轮一轮的比较最终把序列给排序 # 2 关键点1: 两层for循环 外层循环控制多少轮 内层for循环控制比较次数 # 3 关键点2: 若遍历一遍没有数字…

【自用】NLP算法面经(5)

一、L1、L2正则化 正则化是机器学习中用于防止过拟合并提高模型泛化能力的技术。当模型过拟合时&#xff0c;它已经很好地学习了训练数据&#xff0c;甚至是训练数据中的噪声&#xff0c;所以可能无法在新的、未见过的数据上表现良好。 比如&#xff1a; 其中&#xff0c;x1和…