2.1 PaLM 及其变体(PaLM / PaLM 2)

2.1 PaLM 及其变体(PaLM / PaLM 2)

PaLM(Pathways Language Model)是 Google 提出的 Decoder-only Transformer 大规模语言模型工作之一。它的核心并不在于"换了一个全新的架构",而是通过一组看似朴素但系统性的结构与训练配方改动,让模型在 可扩展性、训练稳定性、吞吐效率 上更适合继续做大规模 scaling。


1. PaLM:Pathways Language Model

论文:PaLM: Scaling Language Modeling with Pathways

1.1 模型结构:Decoder-only Transformer + 一组关键改动

PaLM 采用标准的 Decoder-only Transformer 作为骨架,但在 FFN、残差结构与若干工程细节上做了较大优化,目标是:稳定训练 + 更高吞吐 + 更易扩展


1.1.1 SwiGLU 激活:替换标准 FFN 非线性

传统 Transformer 的 FFN 常用 GELU / ReLU 一类激活。PaLM 将 FFN 换成 SwiGLU。直观理解:它把"特征变换"和"门控选择"结合起来,让 FFN 更像是"动态选择通道"的计算。

在形式上,SwiGLU 可以理解为带门控的线性变换(门控由 SiLU/Swish 产生):

SwiGLU(x)=(xW1)⊙SiLU(xW2) \text{SwiGLU}(x) = (xW_1) \odot \text{SiLU}(xW_2) SwiGLU(x)=(xW1)⊙SiLU(xW2)

其中:

  • xxx 是输入隐状态;
  • W1,W2W_1, W_2W1,W2 是两个线性变换矩阵;
  • ⊙\odot⊙ 是逐元素乘;
  • SiLU(z)=z⋅σ(z)\text{SiLU}(z)=z\cdot\sigma(z)SiLU(z)=z⋅σ(z) 是 Swish/SiLU 家族激活。

为什么这会有帮助?

  • 门控使得 FFN 对不同 token、不同上下文可以"开/关"不同通道;
  • 在超大模型下,这类门控 FFN 往往更容易带来更好的损失与下游能力,且训练更稳。

直观例子(不涉及代码):

在数学文本里,"接下来要进行的是进位/借位"与"接下来要做单位换算"可能需要截然不同的内部特征组合。门控机制可以让模型在不同语境下选择不同的特征子空间,而不是让同一套通道平均承担所有模式。


1.1.2 并行层(Parallel Residual):Attention 与 MLP 并联,而不是串联

标准 Transformer block 常见的"串联"写法是:先做 Attention,再把结果喂给 MLP(中间各自带 LayerNorm/残差)。你给出的形式是:

y=x+MLP(LayerNorm(x+Attention(LayerNorm(x)))) y = x + \text{MLP}(\text{LayerNorm}(x + \text{Attention}(\text{LayerNorm}(x)))) y=x+MLP(LayerNorm(x+Attention(LayerNorm(x))))

PaLM 将其改成"并行化"的残差结构:Attention 与 MLP 都从同一个归一化后的输入分支出去,然后把两者的输出加回残差:

y=x+MLP(LayerNorm(x))+Attention(LayerNorm(x)) y = x + \text{MLP}(\text{LayerNorm}(x)) + \text{Attention}(\text{LayerNorm}(x)) y=x+MLP(LayerNorm(x))+Attention(LayerNorm(x))

这在训练上意味着什么?

  • 串联结构里,MLP 的输入依赖于 Attention 的输出(路径更深、更耦合);并行结构里,MLP 与 Attention 的梯度路径更独立;
  • 并行结构通常能让训练更稳定,也有利于大规模并行计算的效率调度。

直观例子:

可以把 Attention 理解为"从上下文抓取信息",MLP 理解为"对当前 token 的表征做非线性变换"。

串联像是"先查资料再加工";并行像是"查资料"和"加工"同时进行,最后把两者合并。并行减少了两模块相互影响造成的训练不稳定。


1.1.3 MQA、RoPE、共享输入输出 embedding、去偏置项等稳定性与效率改动

PaLM 还引入/采用了一系列在大模型里常见的组件与工程手段:

  • MQA(Multi-Query Attention):让多头共享 Key/Value(或部分共享),降低 KV cache 和注意力计算开销,提高推理吞吐与训练效率。
  • RoPE(Rotary Position Embedding):用旋转位置编码替代/增强传统位置编码,让长程依赖的建模更自然。
  • 共享输入输出 embedding:输入 embedding 与输出 softmax 的权重共享(weight tying),减少参数,并在某些情况下提升泛化。
  • 去掉 Dense 与 LayerNorm 中 bias:在一些大规模训练设置下,去掉偏置项能减少不必要的自由度,改善数值稳定性(这类技巧通常与初始化、归一化策略配套使用)。

这些单个看似"细枝末节",但组合在一起,往往就是能否稳定训练到超大规模的关键。


1.2 Tokenizer:256K SentencePiece 与"数字拆分"策略

PaLM 使用 SentencePiece 训练得到约 256K 的大词表。你提到的一个重要细节是:数字往往会被拆成单个字符级 token,例如:

  • "123.5" → "1 2 3 . 5"

为什么要这么做?

  • 对数字更"原子化"的切分,能让模型更容易学到数值模式(位数、进位、比较、单位等)。
  • 避免把某些常见数字当成整体 token,从而减少"只记住常见数字片段"的投机行为。

实际影响的例子:

  • 若把 "1000" 当成整体 token,模型可能倾向于"背诵"常见数字的搭配;
  • 若拆分为 "1 0 0 0",模型更容易学到位权结构与进位规律,在处理 "1001", "1002" 等更泛化。

1.3 训练设置:从初始化到优化器到 batch schedule

PaLM 的训练配方非常强调 数值稳定性大规模吞吐效率。下面按你给出的关键点逐项展开。


1.3.1 权重初始化:fan-in variance scaling + embedding 特例 + logits 缩放

PaLM 对"核心权重"(除 embedding 与 LayerNorm scales 外)使用一种 fan-in 方差缩放初始化,可表述为:

W∼N(0,1nin) W \sim \mathcal{N}\left(0,\frac{1}{\sqrt{n_{in}}}\right) W∼N(0,nin 1)

其中 ninn_{in}nin 表示输入维度(fan-in)。

embedding 的初始化采用:

E∼N(0,1) E \sim \mathcal{N}(0,1) E∼N(0,1)

原因是:embedding 层不做 LayerNorm,因此其数值尺度需要单独设计,否则会影响前期训练稳定性。

由于输入输出 embedding 权重共享,PaLM 还对 softmax 前 logits 做缩放(你给出的描述是 1/n1/\sqrt{n}1/n ,nnn 为 embedding 维度):

logits←1n⋅logits \text{logits} \leftarrow \frac{1}{\sqrt{n}} \cdot \text{logits} logits←n 1⋅logits

直观解释:

  • 大维度 embedding 会让 logits 的方差变大;
  • logits 缩放能避免 softmax 过早饱和(概率过尖),从而保持更平滑的梯度。

1.3.2 优化器:Adafactor(可视作带"参数缩放"的 Adam)

PaLM 使用 Adafactor。它的一个关键思想是:按参数矩阵的均方根(RMS)来缩放学习率,避免不同尺度参数被同一学习率"粗暴对待"。

你给出的解释可以总结为两点:

  1. 权重初始化往往与 1/n1/\sqrt{n}1/n 同尺度,Adafactor 的缩放机制在一定程度上等价于"自动适配学习率尺度";
  2. 不同参数矩阵(例如 attention vs FFN)的数值范围可能不同,缩放让它们不会以同一速度被衰减或放大,训练更稳。

1.3.3 学习率与动量超参:warmup + 衰减 + 动态 β2\beta_2β2

你给出的超参方案可概括为:

  • 前 10,000 steps 学习率固定为:

lr=10−2 \text{lr}=10^{-2} lr=10−2

  • 之后按 1/k1/\sqrt{k}1/k 衰减(kkk 为 step):

lr(k)∝1k \text{lr}(k) \propto \frac{1}{\sqrt{k}} lr(k)∝k 1

  • 一阶动量:

β1=0.9 \beta_1=0.9 β1=0.9

  • 二阶动量使用随步数变化的形式:

β2=1−k−0.8 \beta_2 = 1 - k^{-0.8} β2=1−k−0.8

并指出相比固定 β2=0.99\beta_2=0.99β2=0.99,在大模型训练时更稳定。

直观解释:

  • 训练早期,梯度统计不稳定,动态二阶动量能更快适应;
  • 随着步数增大,β2\beta_2β2 更接近 1,使二阶估计更平滑,减少噪声。

1.3.4 梯度裁剪:全局范数 1.0

PaLM 使用全局范数梯度裁剪(global norm clip):

  • clip 阈值为 1.0

这类裁剪对超大模型很关键:一旦出现异常 batch 或偶发的梯度爆炸,裁剪能避免一次更新把训练带崩。


1.3.5 动态权重衰减:与当前学习率平方成比例

你提到训练时使用 lr2lr^2lr2 的动态权重衰减(lrlrlr 是当前学习率)。可以把它理解为一种"衰减强度随学习率变化"的正则策略:

  • 学习率大时,更新步伐大,衰减也更强;
  • 学习率小、接近收敛时,衰减变弱,避免过度压缩权重。

1.3.6 损失函数:标准 LM loss + ZlossZ_{loss}Zloss 稳定项

主损失是标准语言模型损失(所有 token 的负对数似然平均,不使用 label smoothing)。

额外加了一个稳定项(你给出的形式):

Zloss=10−4log⁡2Z Z_{loss} = 10^{-4}\log^2 Z Zloss=10−4log2Z

其中 ZZZ 表示 softmax 归一化相关的量(可以把它理解为与归一化"偏离程度"有关的标量),该项用于鼓励 softmax 归一化更稳定,从而减少训练中的数值问题。

直观例子:

当 logits 偏大导致 softmax 极度尖锐时,梯度会变得非常不稳定;ZlossZ_{loss}Zloss 相当于在"归一化行为"上加一个小的约束,让训练更平滑。


1.3.7 序列长度与拼接:2048 tokens + [eod] 分隔 + 无 padding

PaLM 统一使用 2048 的序列长度。训练样本被拼接 后再切成固定长度块,因此无需 padding,但样本可能从中间被截断。不同样本之间用特殊 token(例如 [eod])分隔。

这么做的好处:

  • 省掉 padding 带来的无效计算;
  • 提高 token 利用率与 TPU 吞吐。

1.3.8 Batch size 调度:512 → 1024 → 2048

你给出的 schedule 是:

  • 50k step 之前:batch size = 512
  • 115k step 之前:batch size = 1024
  • 到 255k step 结束:batch size = 2048

其动机有两个:

  1. 早期小 batch 更"样本效率高"(噪声更大但探索更充分,收敛更快);
  2. 后期大 batch 提升 TPU 利用率(矩阵乘维度更大,硬件更吃满)。

1.3.9 Dropout:预训练阶段不用,微调常用 0.1

PaLM 在预训练时不使用 dropout(减少不确定性与调参复杂度,提升吞吐),但在很多下游微调中会使用 0.1 dropout 作为常规正则。


2. PaLM 2:技术报告要点(结构细节更少,训练目标与数据策略更突出)

论文:PaLM 2 Technical Report

PaLM 2 的技术报告相对"结构细节"披露更少,但强调了两个方向:

  1. 预训练目标的混合(受 UL2 思路影响)
  2. 关于 scaling law 与参数/数据配比的系统探索
    并且特别强调其在 多语言能力推理(数学/科学/工程)能力 上的改进动机与策略。

2.1 UL2 思想:混合预训练目标,让模型具备多种"学习路径"

PaLM 2 引入 UL2 类似的思想:不是只用单一的自回归 LM 目标,而是混合多种目标,让模型在训练阶段学习不同能力侧重的行为模式。

一种常见的概括方式是:把训练目标视作几类"去噪/补全/生成"任务的混合,让模型既擅长:

  • 纯生成(像 GPT 风格)
  • 片段补全(更接近 span corruption / infilling)
  • 不同上下文窗口下的理解与生成切换

为什么这会提升多语言与泛化?

  • 多语言场景里,分词、语法、信息密度差异极大;
  • 多目标训练可以让模型更鲁棒,不把能力绑定在单一的 token 预测范式上。

2.2 Scaling law:用多尺度模型探索"算力---参数---数据"的配比规律

你给出的描述是:PaLM 2 用 4 个不同规模的模型,在同一方法下训练并观察 loss 曲线,结论近似呈现"等比关系"(即存在某种可预测的 scaling 趋势)。

这里的核心思想是:在固定或受限的计算预算下(例如 FLOPs 上限),并不是参数越大越好、token 越多越好,而是存在一个最佳配比


2.3 固定 1×10221\times 10^{22}1×1022 FLOPs 下的最优选择:参数数 vs 训练 token 数

技术报告进一步在约束算力的设置下,探索"参数量"和"训练 token 数"如何搭配才能让 loss 最小。你提到表格里展示了当 loss 最小(例如 2.400)时,Parameters 与 Tokens 的组合关系。

可以把这个问题抽象成:在计算预算 CCC 固定的情况下,训练开销近似满足:

C∝P⋅T C \propto P \cdot T C∝P⋅T

其中:

  • PPP 表示参数规模(Parameters)
  • TTT 表示训练 token 数(Tokens)

在这种近似下:

  • PPP 太大但 TTT 太小:模型容量大但"见得少",容易欠训练(数据不足)
  • TTT 太大但 PPP 太小:数据多但模型容量不足,容易饱和在较高 loss
  • 存在一个在给定 CCC 下使 loss 最小的 (P,T)(P,T)(P,T) 组合

直观例子:

  • 把 PPP 看成"炼丹炉大小",把 TTT 看成"炼丹材料多少"
  • 炉太大材料太少,炉没被烧热;材料太多炉太小,材料炼不化
  • 最优点对应"炉与材料"的匹配

2.4 Reasoning:强调数学/科学/工程推理痛点,并做针对性优化

PaLM 2 的报告特别强调:LLM 在数学、科学与工程推理上存在典型短板(例如多步推导一致性、符号操作鲁棒性、长链条因果推理等),因此 PaLM 2 对这方面做了更明确的优化取向。

虽然技术报告不一定把"每一个改动"完全展开,但它明确表达了目标:让模型不仅提升通用语言能力,也在 结构化推理跨语言推理迁移 上更强。


3. 小结:PaLM 与 PaLM 2 的主线差异

  • PaLM 更像是一份"大模型可训练配方"的系统工程总结:在标准 Decoder-only Transformer 上,通过 SwiGLU、并行残差、MQA/RoPE、初始化与优化器/批量调度等组合拳,确保训练稳定并可扩展。
  • PaLM 2 更强调"目标函数与数据/算力配比"的策略化设计:借助 UL2 思路混合预训练目标,系统探索 scaling law,并关注在固定计算预算下参数与 token 的最优匹配,同时更聚焦多语言与推理能力。

这两者串起来的共同主旨是:不是某一个"单点创新"决定大模型能力,而是结构、目标、数据与训练工程在规模化下的协同设计

相关推荐
pccai-vip1 小时前
OpenClaw(原名 Clawdbot/Moltbot)正处于从“聊天助手”向“自主智能体(Agent)”转型的关键期
人工智能
一个努力编程人1 小时前
NLP 领域————BERT算法
人工智能·自然语言处理·bert
aircrushin1 小时前
Gemini 3.1 Pro架构深度解析与AGI能力评测
人工智能
deephub1 小时前
并行多智能体系统的协调测试实战:从轨迹捕获到CI/CD的六个步骤
人工智能·ci/cd·大语言模型·aiagent
yunhuibin1 小时前
LeNet、AlexNet、VGGNet、NiN总结
人工智能·python·深度学习·神经网络
Emotional。2 小时前
AI Agent 开发实战:用 LangChain 构建智能邮件助手
linux·服务器·网络·人工智能·python·langchain
摸鱼仙人~2 小时前
当前AI压缩部署的核心需求场景系统总结
人工智能
AI_56782 小时前
Wireshark抓包入门:过滤规则+协议分析定位故障
人工智能
政安晨2 小时前
政安晨【人工智能项目随笔】OpenClaw:开源个人AI助手的全面解读与应用实践报告【作者检索信息的应用调查报告随笔】
人工智能·ai·开源·ai-agent·openclaw·调查报告·openclaw调查报告