大模型基础知识

11 min

01_大模型基础知识

应用层级

image-20250118235704312

什么是大模型

  • 是机器模型
    • 有大规模参数
    • 有复杂计算结构
    • 有深度神经网络

为什么需要大模型

  • 传统模型的局限

    • 很难找到合适的数学公式
  • 人工神经网络可以解决这类问题

    模拟生物神经系统

    • 神经网络是什么

      • 神经元

        • 线性计算

          信号传输

          • 权重
          • 偏移
        • 非线性计算

          决定是否激活

    • 神经网络如何决策

      画线分割

      image-20250119001730739

      • 万能近似定理

        三层可以模拟任意决策边界

        • 输入层
        • 隐藏层
        • 输出层
  • 训练 VS 推理

    模型参数调整

    • 训练
      • 目的是准确预测
        • 定义损失函数,慢慢调整,使得“线”画的准确
        • 调整参数(方式:梯度下降-求导)
    • 推理
      • “线”画好了(使用训练的参数)
      • 对数据进行预测
  • 不同深度的神经网络

    • 目的
      • 相比于“三层”
      • 用较少的参数捕捉更为复杂的结构
    • 特殊的结构
      • Transformer,CNN, RNN
  • 大模型核心算子

    • 矩阵乘(线性计算)

      QQ_1767688566601
      • 输入有 3 个点( 1×31 \times 3 的行向量)。

      • 中间的输出有 4 个点(我 1×41 \times 4 的行向量)。

      • 中间的连线代表权重矩阵 (3×43 \times 4)

        • 第1根线(连向输出1) \rightarrow 填在 (第1行, 第1列)

        • 第2根线(连向输出2) \rightarrow 填在 (第1行, 第2列)

        • …以此类推。

          权重矩阵=[输入1的4根线w1,1w1,2w1,3w1,4输入2的4根线????输入3的4根线????]\text{权重矩阵} = \begin{bmatrix} \text{输入1的4根线} \rightarrow & w_{1,1} & w_{1,2} & w_{1,3} & w_{1,4} \\ \text{输入2的4根线} \rightarrow & ? & ? & ? & ? \\ \text{输入3的4根线} \rightarrow & ? & ? & ? & ? \end{bmatrix}

    • 激活函数(非线性计算)

      • 需要梯度下降

      • 目的是找到最低点

        QQ_1767689358315

    • 这两个算子的关系

      • 如果没有激活函数(只有线性变换),你就像是在叠一张平整的纸,怎么叠它都还是一张平面。
      • 有了激活函数(非线性变换),你就可以把这张纸折叠、弯曲
    • 目前,这个结构有一个问题是,输入固定,输出一定的一定的(数学公式决定的),但对于大语言模型来说,我们希望所问的问题不同,得到的回答也是不同的。所以之后需要引入 transformer

  • 大模型有多大

    • fp16(一个参数2字节),1B(十亿个参数)
    • 这个模型大小:2*10^9^ = 2G
  • 大模型优化

    • 许多神经元不会被激活,所以有优化空间

02_大模型原理与结构

大模型 vs 传统模型

  • 传统模型

    • 输入-输出都为向量(vector2vector)
      • 如卷积神经网络
  • 大模型

    • sequence to sequence : 输入输出为文字

LLaMA 模型

Meta 开发的

整体流程图

image-20250119103620486

具体步骤

输入基础设施层
  • Tokenizer(翻译官 —— 离线工具)

    • 它甚至不参与任何矩阵乘法。它只是拿着一张固定的 BPE 表,把“Hello”翻译成 15496
    • 物理地位:它是模型推理前的预处理步骤,不含参数学习。
  • Embedding(辞典 —— 输入基座)

    • 虽然它有参数,但它不具备“处理逻辑”的能力。它的作用只是查表,把 ID 变成向量。
    • 物理地位:它是进入加工厂之前的“原材料准备间”。
    步骤处理过程核心本质
    1. Tokenize文本 \rightarrow ID符号化:给万物一个编号。
    2. EmbeddingID \rightarrow 向量空间化:通过“查表”把编号映射到 4096 维空间,让语义相近的词在几何上靠近
image-20250119103158737
  • 不足

    • 但这一层无法处理一样的字。

      • 比如 道可道

      • 比如苹果 出现在“苹果手机”还是“红富士苹果”里,它的 Embedding 向量都一样。

        • 所以引入自注意力层(在 decoder 层里)
        • 根据周围的词来判断苹果的含义
Decoder 层
image-20250222214347975
RMS Norm
  • 为什么要做 RMS( 层归一化)
    • 经过成百上千次的矩阵乘法(因为会循环 decoder),数据中的数值可能会变得极大或者极小。
      • 这会导致模型无法继续学习。
    • 很多激活函数在数值太大或太小时会进入“饱和区”(比如变平了)
      • 导致模型对微小的变化不再敏感
  • RMSNorm 的作用
    • 就像是一个**“稳压器”**。把输入的向量稳压
      • 它在每一层计算结束时,把 4096 维向量的分布重新“拉回”到一个稳定的标准范围
      • RMSNorm 则更简化,只关注均方根。
Self-Attention

QKV 交互后,每个词都吸收了周围环境的信息。让“苹果”去观察周围的词,根据上下文来动态更新自己的向量。

image-20250222213032956
  1. 三路并行投影

    • q_proj: 生成 Query(查询)。它代表:“我这个词正在寻找什么样的上下文?”

    • k_proj: 生成 Key(键)。它代表:“我这个词有什么特征,欢迎别人来查我。”

    • v_proj: 生成 Value(值)。它代表:“如果我被选中了,我能贡献出的实际信息内容是什么?”

  2. 位置注入 (RoPE)

    • Q 和 K 经过了 RoPE (旋转位置编码) 处理。
    • 一行行,行行行。两个半句的行意思是一样的。即
    • 需要 RoPE 处理。
      • 给向量加上“位置感”。它通过数学旋转的方式,让模型知道词与词之间的相对距离
  3. Q 与 K 进行**点积(Dot Product)**运算

    • 公式Attention Score=Q×KTAttention\ Score = Q \times K^T
    • 逻辑:拿我的 Q 去和全句所有词的 K 做点积。
    • 结果:得到一个“相关性矩阵”,数值越高,表示两个词关系越深。
  4. 权重归一化 (Masked Softmax)

    • Softmax: 把刚才计算的关联度分数转化为 0 到 1 之间的概率(总和为 1)。
      • 对数字做归一化处理,使得相加为100%(如“可”字) image-20250222210331987
    • Masked(掩码): 这是 Decoder 的核心。它挡住了“未来的词”,确保模型在预测当前词时,只能看到它之前的词,不能作弊看后面的词。
  5. 信息聚合 (Value Aggregation)

    • 公式Output=Score×VOutput = Score \times V

    • 逻辑:根据第一步算出的相关性权重,把各个词的 V(财富)捞过来。

    • 结果:当前词吸收了周围环境的信息。例如,“苹果”在“苹果手机”语境下,吸收了“电子产品”的 V,从而完成了语义更新。

  6. 最终整合 (o_proj)

    • 这是注意力层的最后一步。
      • o_proj (Output Projection): 负责把多头注意力(多个专家视角)搜集到的所有信息进行一次矩阵乘法融合
      • 之后将其重新映射回标准的 4096 维空间,方便输出给后续的残差层和 MLP。
MLP 层 (多层感知器层)
image-20250119104241623
  • 为什么需要(ai解释)

    • 存储知识:自注意力层是在“看当前句子”,而 MLP 的矩阵参数里存储的是模型在预训练阶段背下的“海量知识”。

      非线性变换:如果没有 MLP 里的激活函数,模型就只是在做无聊的线性累加,永远学不会复杂的逻辑。

      特征细化:通过放大到 11008 维,模型可以对语义进行更精细的“雕琢”。

  • 做了什么

    • 放大 \rightarrow 门控 \rightarrow 缩小

      数据进入 MLP 后,会经历一个“先膨胀、再加工、后压缩”的过程:

      • Up Proj (向上投影):
        • 动作:将 4096 维的向量放大到约 11008 维(通常是输入的 2.7 倍左右)。
        • 目的:把信息撒得更开,以便模型在更高的维度里发现细微的特征。
      • Gate Proj (门控投影) & 激活函数 (SiLU):
        • 动作:这是 MLP 的核心“闸门”。它产生一组权重,通过激活函数后,决定哪些放大的特征是有效的。
        • 逻辑:它和 Up Proj 的结果做逐元素相乘。只有被“门控”认可的信息才能留下来。
      • Down Proj** (向下投影)**:
        • 动作:将加工后的 11008 维向量重新压缩回 4096 维。
        • 目的:总结特征,对齐维度,方便交给下一层。
Residual Add (再次残差相加)
  • --- 以上过程循环 32 次 ---
输出嵌入层
  • 是根据 4096 维向量反推词 ID。
  • 在很多模型中,为了节省参数,输入嵌入矩阵输出嵌入矩阵其实是同一个矩阵的转置
    • tie_word_embeddings: true 说明输出嵌入层和输入嵌入层用的参数是一样的