LLaMa(书)

  • 绝大多数大语言模型采用类似GPT的自回归Transformer解码器架构,各模型在位置编码、归一化、激活函数等细节有所不同。
  • GPT-3未开源,社区有OPT等开源复现;MetaAI基于GPT-3架构开源了LLaMA,效果优秀。
  • OpenAI的GPT-3后续模型未再开源。后续结构分析主要参考LLaMA。

LLaMA采用的Transformer结构与GPT-2类似,主要改进有:

  • 前置层归一化(Pre-normalization),使用RMSNorm归一化函数
  • 激活函数换为SwiGLU
  • 采用旋转位置嵌入(RoPE)

1. RMSNorm归一化函数

  • RMSNorm归一化函数(Root Mean Square Layer Normalization)常用于如LLaMA、GPT-2的前置归一化(pre-norm)结构。
  • 与LayerNorm区别:RMSNorm不做均值减法,仅按方差归一化。

RMSNorm计算公式

对于输入向量 a=(a1,a2,...,an)

  • 1. 计算均方根(Root Mean Square, RMS):

    RMS(a)=1ni=1nai2
  • 2. 归一化每个分量:

    a¯i=aiRMS(a)
  • 3. 可学习仿射变换:

    a¯i=aiRMS(a)gi+bi

    其中 gi 为可学习的缩放因子,bi 为可学习的偏置(常用g为向量,b可选)。

2. SwiGLU 激活函数

  • SwiGLU 激活函数的提出者及应用:Shazeer 提出,在 PaLM 等模型中广泛应用,取得不错效果。

  • 与 ReLU 的对比:相比 ReLU,SwiGLU 在大部分评测中提升明显。

  • 在 LLaMA 中的使用方式:全连接层采用 SwiGLU 激活函数,具体公式如下:

    FFNSwiGLU(x,W,V,W2)=SwiGLU(x,W,V)W2SwiGLU(x,W,V)=Swishβ(xW)xVSwishβ(x)=xσ(βx)
    • 其中 σ(x) 为 Sigmoid 函数
  • Swish 激活函数 β 参数影响

    • β0 时,Swish 接近线性函数 y=x
    • β 时,Swish 接近 ReLU
    • β=1 时,Swish 光滑且非单调
  • 工程实现:HuggingFace 的 transformers 库用 SiLU 代替 Swish

  • 曲线对比了 β=0.1β=1.0β=10.0 三种情况。
  • β 越小(如 β=0.1,黄色),曲线越接近一条斜直线,即接近 y=x,表现为线性函数。
  • β=1.0(红色)时,曲线介于线性和ReLU之间,光滑但非单调。
  • β 很大(如 β=10.0,蓝色),曲线在 x>0 时和 y=x 很接近,x<0 时趋于零,形状接近 ReLU 激活函数。

3. RoPE(Rotary Position Embedding)

  1. 基本思想:用旋转式位置嵌入(RoPE)代替绝对位置编码。RoPE 利用复数的几何意义,实现相对位置编码。

  2. 基本形式
    通过函数 f 对查询 q、键 k 添加绝对位置信息:

    q~m=f(q,m),k~n=f(k,n)
  3. 复数表示的 RoPE:这个变换几何上等价于对向量进行旋转。

    f(q,m)=Rf(q,m)eiθf(q,m)=qei(θ(q)+mθ)=qeimθ
  4. 二维矩阵形式

    f(q,m)=(cos(mθ)sin(mθ)sin(mθ)cos(mθ))(q0q1)
  5. 高维拼接形式:任意偶数维的 RoPE 可表示为多个二维旋转块的拼接:

    f(q,m)=(cos(mθ0)sin(mθ0)sin(mθ0)cos(mθ0)cos(mθ1)sin(mθ1)sin(mθ1)cos(mθ1))Rd(q0q1q2q3qd2qd1)
  6. 高效计算:由于 Rd 是多个 2×2 块的对角拼接,具备稀疏性,可用按位乘()操作进一步提升计算速度。

参考资料

  • 《大语言模型:从理论到实践(第二版)》-- 张奇、桂韬、郑锐、黄萱菁

“觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”

微信二维码

微信支付

支付宝二维码

支付宝支付

LLaMa(书)
http://neurowave.tech/2025/04/26/2-7-LLM-LLaMa/
作者
Artin Tan
发布于
2025年4月26日
更新于
2025年8月2日