1.3 基础网络组件

发布于:2025-04-20 ⋅ 阅读:(23) ⋅ 点赞:(0)

1. MLP 多层感知机

掌握 Transformer 中前馈神经网络的结构设计,不同维度投影的作用(为什么大模型的世界知识存储在这一部分,面字节被问到了)

MLP(多层感知机)就是一种典型的前馈神经网络,二者是包含关系,前馈神经网络是一个更广泛的概念,而 MLP 是其中一种具体的类型

1.1 前馈神经网络(Feed-Forward Neural Network, FFN)

结构

  1. 输入层:接收原始数据,每个神经元对应一个输入特征。
  2. 隐藏层:可以有一个或多个,隐藏层中的神经元通过激活函数对输入进行非线性变换,增加模型的表达能力。
  3. 输出层:根据任务需求输出结果,如分类概率或者回归值。

1.2 Transformer 中前馈神经网络的结构设计

在 Transformer 架构中,前馈神经网络(Feed - Forward Network,FFN)是编码器和解码器中的一个重要组件,通常位于多头自注意力机制之后。
👉 注意力层捕捉“谁跟谁有关系”
👉 FFN 负责“对每个位置做更深层次的非线性变换”
注意:FFN 是 作用在每一个位置的 token 上的,没有跨位置操作,属于 逐位置(Position-wise)非线性变换
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

结构

Transformer 中的 FFN 不是只保持输入输出维度不变,而是 中间先升维、再降维:
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
Transformer 中的 FFN 是一个简单的两层全连接网络,由两个线性变换和一个非线性激活函数组成。具体结构如下:
🔼 为什么要升维再降维?

  1. 提升表示能力:升维相当于有更多空间学习复杂模式
  2. 控制输出维度:降维是为了和原始输入维度匹配(比如 Residual 残差连接)
  • 第一层线性变换:将输入向量 x ∈ R d m o d e l \mathbf{x} \in \mathbb{R}^{d_{model}} xRdmodel 投影到一个更高维的空间 R d f f \mathbb{R}^{d_{ff}} Rdff,其中 d m o d e l d_{model} dmodel 是模型的维度, d f f d_{ff} dff 是前馈网络的中间维度,通常 d f f > d m o d e l d_{ff} > d_{model} dff>dmodel
  • 非线性激活函数:通常使用 ReLU(Rectified Linear Unit)函数,即 f ( x ) = max ⁡ ( 0 , x ) f(x)=\max(0, x) f(x)=max(0,x)
  • 第二层线性变换:将经过非线性变换后的向量从 R d f f \mathbb{R}^{d_{ff}} Rdff 投影回 R d m o d e l \mathbb{R}^{d_{model}} Rdmodel

不同维度投影的作用

低维到高维投影( d m o d e l → d f f d_{model} \to d_{ff} dmodeldff
  • 增加模型的表达能力:将输入向量投影到更高维的空间可以让模型学习到更多的复杂模式(特征表示)。在高维空间中,模型可以捕捉到输入数据中更复杂的模式和关系,增加了模型的表达能力。
  • 引入非线性:通过非线性激活函数(如 ReLU),高维空间中的特征可以进行更复杂的非线性变换,使得模型能够处理更复杂的任务。
高维到低维投影( d f f → d m o d e l d_{ff} \to d_{model} dffdmodel
  • 信息整合和压缩:将高维空间中的特征投影回原始的 d m o d e l d_{model} dmodel 维度,可以对学到的特征进行整合和压缩,去除冗余信息,保留最重要的特征。
  • 与后续模块兼容(控制输出维度):将输出维度保持为 d m o d e l d_{model} dmodel 可以确保 FFN 的输出能够与 Transformer 中的其他模块(如多头自注意力机制)进行无缝连接,保持模型的一致性和稳定性。

MLP 优缺点

优点

  1. 非线性建模能力:通过激活函数可以逼近任意复杂函数(万能近似定理)
  2. 灵活性高:可以根据具体问题的需求灵活调整网络的层数、神经元数量以及激活函数等,以适应不同的任务和数据特点。
  3. 特征自动学习:无需手动设计特征,隐藏层可以自动去高阶特征

缺点

  1. 过拟合风险:参数量大时容易过拟合,需依赖正则化(例如 Dropout)
  2. 计算量大:全链接结构导致参数量爆炸(如输入 1000 维度,隐藏层 500 维度-> 50 万参数)

MLP 价值

  1. 基础性:是深度学习的基石,为后续 CNN、Transformer 均在其结构上扩展
  2. 灵活性:通过调整神经元个数和层数,可以平衡模型容量和计算成本

MLP 适用场景

  • 数据规模适中(样本量<=10^6)
  • 输入为扁平化特征(如表格数据、展瓶的图像像素)

使用建议

  • 数据预处理:标准化、正则化来加速收敛
  • 正则化必选:使用 Dropout 或者 L2 正则化来防止过拟合
  • 网络深度优先:优先增加隐藏层数,而非神经元数量,如 3 层*256 优于 1 层 *1024

❓1. Transformer 中 FFN 的作用是什么?

✅ 答:对每个位置的 token 进行独立的非线性变换,提升表达能力,不处理 token 间关系。


❓2. Transformer 中 FFN 为什么要升维?

✅ 答:升维提供更高的表示空间,能学习更复杂的特征。降维是为了输出维度匹配主模型结构。


❓3. FFN 是作用在每个位置之间,还是每个位置上?

✅ 答:FFN 是 逐位置(Position-wise)的,每个位置独立变换,不引入 token 间交互。


❓4. FFN 使用什么激活函数?GELU 和 ReLU 有什么区别?

✅ 答:

  • 经典 Transformer 用 ReLU
  • BERT 开始广泛使用 GELU(更平滑、收敛更快)

❓5. FFN 的参数量大吗?可以压缩吗?

✅ 答:占 Transformer 很多参数,但也可以用 LoRA、权重共享等方法减少参数量。


🧩 总结一句话:

Attention 负责找“关系”,FFN 负责做“加工”。Attention 是面向全局,FFN 是逐点强化!

(数学表示

设输入向量为 x \mathbf{x} x,FFN 的输出 y \mathbf{y} y 可以表示为:
y = FFN ( x ) = Linear 2 ( ReLU ( Linear 1 ( x ) ) ) \mathbf{y} = \text{FFN}(\mathbf{x}) = \text{Linear}_2(\text{ReLU}(\text{Linear}_1(\mathbf{x}))) y=FFN(x)=Linear2(ReLU(Linear1(x)))
其中 Linear 1 ( x ) = W 1 x + b 1 \text{Linear}_1(\mathbf{x})=\mathbf{W}_1\mathbf{x}+\mathbf{b}_1 Linear1(x)=W1x+b1 Linear 2 ( x ) = W 2 x + b 2 \text{Linear}_2(\mathbf{x})=\mathbf{W}_2\mathbf{x}+\mathbf{b}_2 Linear2(x)=W2x+b2 W 1 ∈ R d f f × d m o d e l \mathbf{W}_1 \in \mathbb{R}^{d_{ff} \times d_{model}} W1Rdff×dmodel W 2 ∈ R d m o d e l × d f f \mathbf{W}_2 \in \mathbb{R}^{d_{model} \times d_{ff}} W2Rdmodel×dff b 1 ∈ R d f f \mathbf{b}_1 \in \mathbb{R}^{d_{ff}} b1Rdff b 2 ∈ R d m o d e l \mathbf{b}_2 \in \mathbb{R}^{d_{model}} b2Rdmodel

2. 激活函数

掌握 ReLU 及其变体、GELU 的优势、SwiGLU 在大模型中的应用、激活函数选择的考虑因素

2.1 概念

神经网络中的每一层神经元,在进行完线性变换(比如 𝑥𝑊+𝑏)之后,会通过一个激活函数引入非线性因素,让模型能学习复杂的非线性关系。

2.2 激活函数性质

  1. 非线性:确保模型表达能力。
  2. 连续性:确保激活函数输出平滑,避免梯度跳跃或消失。
  3. 可导性:便于通过反向传播算法计算梯度,更新模型参数。
  4. 定义域是 R:为了数值上稳定,激活函数需要能够映射所有的实数
  5. 单调递增的 S 型曲线:考虑到激活函数只是增加非线性,并不需要改变对输入的响应状态,所以要随着 y 的增大而增大,随着 y 的减小而减小

Sigmoid 和 Tanh 函数连续且可微,适用于大多数场景。
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.3 Sigmoid 函数

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 原理:Sigmoid 函数的数学表达式为 σ ( x ) = 1 1 + e − x \sigma(x)=\frac{1}{1 + e^{-x}} σ(x)=1+ex1,它能将输入值映射到 ( 0 , 1 ) (0, 1) (0,1) 区间。当输入值趋近于正无穷时,函数值趋近于 1;当输入值趋近于负无穷时,函数值趋近于 0。
  • 优点
    • 输出值在 ( 0 , 1 ) (0, 1) (0,1) 之间,可视为概率值,常用于二分类问题的输出层。
    • 函数连续可导,其导数为 σ ′ ( x ) = σ ( x ) ( 1 − σ ( x ) ) \sigma'(x)=\sigma(x)(1 - \sigma(x)) σ(x)=σ(x)(1σ(x)),便于使用梯度下降等优化算法。
  • 缺点
    • 存在梯度消失问题(饱和函数)。当输入值非常大或非常小时,函数的导数趋近于 0,这会导致在反向传播过程中梯度变得极小,使得网络参数更新缓慢甚至无法更新。
    • 不宜收敛(非零均值函数):输出不是以 0 为中心,这会使得输入到下一层的信号要么全为正,要么全为负,可能导致梯度更新时出现 zig-zag 现象,使得神经网络更慢的收敛到预定位置,影响收敛速度。
  • 适用场景:适用于早期的神经网络二分类问题的输出层,但在深层网络中较少使用。

2.4 Tanh 函数

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 原理:Tanh 函数的数学表达式为 tanh ⁡ ( x ) = e x − e − x e x + e − x \tanh(x)=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}} tanh(x)=ex+exexex,它将输入值映射到 ( − 1 , 1 ) (-1, 1) (1,1) 区间。
  • 优点
    • 零均值函数:输出以 0 为中心,相比 Sigmoid 函数,在一定程度上缓解了梯度更新的 zig-zag 问题。
    • 同样连续可导,其导数为 1 − tanh ⁡ 2 ( x ) 1 - \tanh^{2}(x) 1tanh2(x)
  • 缺点
  • 梯度消失(饱和函数):仍然存在梯度消失问题,当输入值很大或很小时,导数趋近于 0。
  • 适用场景:在一些需要输出值在 ( − 1 , 1 ) (-1, 1) (1,1) 区间的场景中使用,如 RNN 中,但在深层网络中也会受到梯度消失的困扰。
    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.5 ReLU 及其变体

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
为了解决上面的梯度消失现象,引入 ReLu 函数。抑制小于 0 的输入,只保留正数部分。
导数图像只有当神经元数量大于 0 的时候才会回传梯度,小于 0 的时候就不会反向传播

(1)ReLU(Rectified Linear Unit,修正线性单元) 瑞路

f(x)=max(0, x)

优点:

  1. 非线性能力:通过引入 ReLU 引入非线性,使得模型可以捕捉到更复杂的特征
  2. 计算效率高:简单、计算快,所以更快收敛。依然是非零均值函数,但是它容易收敛是因为它计算效率高
  3. 能够有效缓解梯度消失问题:(相比 sigmoid、tanh),因为在正半轴上,其导数恒为 1,梯度可以正常传播。
  4. 增强了网络的泛化能力:ReLU 具有稀疏性,使得部分神经元输出为 0,模拟了生物神经元的激活特性,减少了神经元之间的依赖性,增强了网络的泛化能力

缺点

  1. “神经元死亡”(Dead ReLU):在负半轴上导数为 0,可能导致部分神经元 “死亡”,即一旦某个神经元在训练过程中进入负半轴,它将永远不会被激活,对应的参数也无法更新。

使用目的
在 Transformer 的前馈神经网络被广泛引用,因为他能够在两个全链接层之间引入非线性变化,帮助模型学习更复杂的特征表示,它的计算效率高和性能表现良好,尤其适合大模型

(2)Leaky ReLU

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
原理:为了解决 ReLU 的 “神经元死亡” 问题,Leaky ReLU 在负半轴引入了一个非零斜率(\alpha),其数学表达式为  (f(x)=\begin{cases}x, & x\geq0\\alpha x, & x < 0\end{cases}),通常  (\alpha)  是一个较小的正数,如 0.01。

优势:避免了 ReLU 的 “神经元死亡” 问题,保证在负半轴也有非零梯度,使得神经元在训练过程中能够持续更新。

(3)Parametric ReLU(PReLU)

原理:PReLU 是 Leaky ReLU 的进一步改进,其中斜率  (\alpha)  是一个可学习的参数,即  (\alpha)  会在训练过程中根据数据自动调整。
优势:相比 Leaky ReLU,PReLU 能更灵活地适应不同的数据集和任务,因为它可以根据数据学习到最优的负半轴斜率

ELU(Exponential Linear Unit)

在负值区域采用指数衰减
原理:ELU 的数学表达式为(f(x)=\begin{cases}x, & x\geq0\\alpha(e^x - 1), & x < 0\end{cases}),其中(\alpha)是一个超参数,通常取 1。当(x\geq0)时,ELU 的输出与输入相同;当(x<0)时,输出是一个指数函数的变换形式。

ELU 通常适用于对模型收敛速度有较高要求,且数据中存在较多负数的场景。不过,由于其计算相对复杂,在一些对实时性要求极高的场景中可能不太适用。

(5) ReLU6:

ReLU6(x)=min(max(0,x),6)
在 [0,6] 范围内输出,适合移动端部署(值小,好量化)
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.6 GELU(Gaussian Error Linear Unit,高斯误差线性单元)格鲁

BERT、T5

概念:用于神经网络中以平滑的方式,决定神经元的激活程度。相比于 ReLU 和 Sigmoid,GELU 更柔和更符合概率学原理,适合深层模型学习,尤其是 Transformer 等自然语言处理模型中被广泛使用。
原理:GELU 的数学表达式为  (f(x)=x\cdot\Phi(x)),其中  (\Phi(x))  是标准正态分布累积密度函数
但是因为计算复杂,在实际应用中,通常使用近似公式  (f(x)=0.5x(1 + \tanh[\sqrt{2/\pi}(x + 0.044715x^3)]))  来计算。

  • 当输入为正数,tanh 的输出趋近于 1,f(x)->x
  • 当输入为负数,tanh 的输出趋近于-1,f(x)->0
  • 当输入接近 0,GELU的输出趋近 0.5x,平滑过渡

这种特性使得 GELU 在处理复杂的非线性关系时表现出色,尤其在 Transformer 架构中,它能够更好地捕捉输入序列中的语义信息,提高模型的性能。

优点

  1. 相比 ReLu 更平滑。
  2. GELU 基于高斯累计分布,有概率解释,性能好
  3. 在 BERT、GPT-2、T5 等模型中表现更优
    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

缺点
计算复杂

SwiGLU(Swish Gated Linearner Units,Switch 门控线性单元)

LLaMA,首次出现在 PaLM 和 GPT-4 等大模型中

结合了 Swish 激活函数和 Gated Linear Unit(GLU,门控线性单元)的思想。
通过将 GLU 的 sigmoid 函数替换成 Swish,使得模型在复杂任务中的表现显著提升。
平滑激活特性、(灵活的非线性响应)和门控机制共同作用,提升了模型的表达能力和计算效率。
(是 GLU 的一种变体,把 Swish 激活函数和 GLU 结构结合起来,用于提升深度学习模型的性能)
switch 也被称为 SiLU 即 Sigmoid-Weighted Linear Unit

优势:
结合了 Swish 和 GLU 的优点

  1. 平滑激活:swish 提供了平滑的梯度变化,避免了像 ReLu 的死区问题,有助于提升模型的收敛速度和稳定性
  2. 门控机制:通过引入门控机制,SwiGLU 可以选择性的控制信息流动,允许模型根据输入调整输出的强度,从而提高表达能力。

计算原理
通过将 GLU 的 sigmoid 函数替换成 Swish,使得模型能够在更平滑的激活函数先实现门控机制。与 GLU 相比,SwiGLU 引入了更复杂的非线性变化,使得网络对不同的输入响应更灵活,通过这种方式,SwiGLU 能够在保持计算效率低同时提升模型的表现。

激活函数选择策略总结

  1. 梯度问题:要考虑激活函数是否会导致梯度消失或梯度爆炸问题。ReLU 及其变体通过在正半轴上保持恒定的导数,有效缓解了梯度消失问题。而 Sigmoid 和 Tanh 函数在输入绝对值较大时,导数趋近于 0,容易导致梯度消失,因此在深层网络中使用时需要谨慎。
  2. 数据特性:数据的分布和范围也会影响激活函数的选择。如果数据具有大量的负值,使用 ReLU 可能会导致部分神经元 “死亡”,此时可以考虑使用 Leaky ReLU 或 PReLU。
  3. 计算效率:不同的激活函数计算复杂度不同,例如 ReLU 计算简单,而 GELU 的计算相对复杂,需要使用近似公式。在对计算资源有限或对实时性要求较高的场景中,应优先选择计算效率高的激活函数,如 ReLU。
  4. 模型性能:不同的激活函数对模型的性能影响不同。在一些任务中,GELU 可能比 ReLU 更能提高模型的准确性,而在另一些任务中,ReLU 可能已经足够。需要通过实验来比较不同激活函数在具体任务上的性能表现。
  5. 模型架构:不同的模型架构对激活函数的要求也不同。例如,在 Transformer 架构中,GELU 和 SwiGLU 表现较好,而在卷积神经网络(CNN)中,ReLU 是常用的激活函数。

激活函数 | 是否推荐 | 特点 | 应用场景
ReLU | ✅ 基础首选 | 简单高效 | 普通神经网络
LeakyReLU/PReLU | ✅ 死神经元改进版 | 有负梯度 | 图像、深层网络
GELU | ✅ 推荐 | 平滑,表现好 | BERT、GPT 等 NLP 模型
SiLU / Swish | ✅ 新趋势 | 平滑,有梯度 | LLM 新模型
SwiGLU | ⭐ 推荐 | 强表达能力 | Transformer FFN 模块

❓1. ReLU 有什么缺陷?怎么解决?

✅ 死神经元问题,可以用 LeakyReLU、PReLU、GELU 替代


❓2. GELU 和 ReLU 的区别是什么?为什么 BERT 使用 GELU?

✅ GELU 是平滑的概率激活,更细腻处理负值,性能更优


❓3. SwiGLU 是什么?为什么大模型用它?

✅ SwiGLU 是双通道激活结构 + SiLU,提升表达能力,已在 PaLM、GPT-4 使用


❓4. GELU 和 SiLU 有什么不同?

GELU 基于高斯累计分布,有概率解释,性能好
SiLU(Swish) x * sigmoid(x),更平滑,SwiGLU 中常用

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

SiLU 和 SwiGLU 区别

SiLU 是一种基础的激活函数,而 SwiGLU 是基于 SiLU 的一种更复杂的门控激活函数,用于特定的神经网络架构中以提高模型性能。

GLU 激活函数详细分析

GRU(门控循环单元,RNN 变体)和 GLU 的关系

GRU 是 LSTM 的简化版本,仅包含两个门控单元(更新门和重置门),减少了参数数量,计算效率更高。
GLU 属于 CNN、Transformer 模块,仅线性变换+sigmoid。通过门控机制增强卷积或线性变换的表达能力。
LSTM:输入门决定了当前输入的信息有多少要存储到记忆单元中;遗忘门决定了要从记忆单元中删除多少过去的信息;输出门决定了记忆单元中的信息有多少要输出作为当前的预测结果。

3. 损失函数

交叉熵损失函数。需要掌握原理与代码实现、在大预言模型训练中的应用。

概念:
损失函数是衡量模型预测值和真实值之间误差的函数,它的作用是告诉模型当前的预测有多糟糕,从而引导优化过程。 损失函数的目标是最小化误差,使模型的预测尽可能接近真实值

考虑的因素

  • 必须性质:损失函数需要可导(计算梯度)、非负(直观反映预测值与真实值的偏差程度。)、连续(以确保梯度变化平滑,避免优化过程中出现跳跃或不稳定,不连续的损失函数可能导致梯度爆炸或消失,影响收敛性。),以确保优化过程的可行性和稳定性。
  • 凸性的作用:凸性并非必要条件,但能简化优化过程(全局最优性:凸函数的全局最优解唯一且可通过梯度下降等算法找到。收敛性:优化过程更稳定,不易陷入局部最优。)。在深度学习中,非凸损失函数通过其他手段(如 SGD、正则化)仍能有效优化。
  • 鲁棒性的重要性:根据任务需求选择合适的损失函数,以平衡偏差和鲁棒性。

重要性:损失函数的选择对于模型训练速度和效果至关重要,因为不同的损失函数会导致不同的梯度下降速度
损失函数的位置
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
均方误差损失函数是回归损失函数,交叉熵损失函数是分类函数

3.1 均方误差(MSE, Mean Squared Error)

计算的是预测值与真实值之间差值的平方的平均值。数学表达式为:(L(y, \hat{y}) = \frac{1}{n}\sum_{i = 1}^{n}(y_i - \hat{y}_i)^2),其中(y_i)是真实值,(\hat{y}_i)是预测值,n 是样本数量。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

优点

  1. 数学性质好:它是一个可微的凸函数,这使得它在优化过程中容易找到全局最优解,梯度下降等优化算法能够较为高效地收敛。
  2. 惩罚大错误:通过平方运算,加大了对较大误差的惩罚力度,能很好地反映模型预测的准确性。

缺点

  1. 对异常值敏感:如果数据集中存在少量的异常值,可能会导致 MSE 的值变得很大,从而影响模型的训练。(异常值会导致 ∇ MSE 的方向偏离正常数据的梯度方向,使模型参数更新偏离最优解。)

适用场景
回归任务(如房价预测)
连续值预测

3.2 交叉熵损失函数(Cross - Entropy)

https://www.xiaohongshu.com/explore/66742a6d000000001d015d77?app_platform=android&ignoreEngage=true&app_version=8.59.0&share_from_user_hidden=true&xsec_source=app_share&type=normal&xsec_token=CB1GwW5EDIvAjK0XjajiMy7nvK_HAvihYZ12FZQVA1e28=&author_share=1&xhsshare=WeixinSession&shareRedId=ODgyQTY3SkE2NzUyOTgwNjczOTdIRkdN&apptime=1744787320&share_id=be5aa9b902484ea2af83e9b7d146906e
衡量分类任务中,模型预测的概率分布和真实值之间的差异
二分类交叉熵损失函数也叫对数损失
优点

  1. 能很好地反映分类任务的损失:在分类问题中,它直接衡量了预测概率分布与真实标签分布之间的差异,能够有效地引导模型朝着正确的分类方向进行学习。

缺点
容易受预测极端值影响(log 非线性)
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
适用场景
分类,概率输出的模型,如逻辑回归、softmax 回归
GPT、BERT、T5 等 LLM 训练中都会使用!
→ 对每个 token 的预测使用交叉熵,进行反向传播

大语言模型在进行文本分类、情感分析等任务时,经常使用交叉熵损失函数。例如,在判断一段文本的情感是积极、消极还是中性时,模型输出每个类别的概率,通过交叉熵损失函数来优化模型,使其输出的概率分布尽可能接近真实的标签分布。

3.3 Huber 损失

用于回归任务。Huber 损失是一种结合了 MSE 和绝对值损失优点的损失函数。
对异常值不敏感,相比于 MSE,对异常值惩罚小。
主要思想是。它在误差较小时采用 MSE,在误差较大时采用绝对值损失,从而减少异常值对损失的影响。其数学表达式为:(L(y, \hat{y})=\begin{cases}\frac{1}{2}(y - \hat{y})^2, & \text{if }|y - \hat{y}|\leq\delta\\delta|y - \hat{y}|-\frac{1}{2}\delta^2, & \text{otherwise}\end{cases}),其中(\delta)是一个超参数,用于控制 MSE 和绝对值损失的切换点。
优点

  1. 对异常值具有鲁棒性:不像 MSE 那样对异常值过于敏感,能有效降低异常值对模型训练的影响,提高模型的稳定性。

缺点
需要选择合适的(\delta)值,(\delta)的选择对模型的性能有一定影响,如果选择不当,可能无法充分发挥其优势

适用场景:适用于存在异常值回归问题,例如在一些实际的数据分析中,可能会存在一些错误数据或极端值,Huber 损失函数能够更好地处理这些情况。

3.4 KL 散度(KL Divergence)

衡量两个概率分布的差异

用途

  • 知识蒸馏(teacher-student)
  • 语言模型微调时使用

写训练周期
a. 前馈。算 y^,再算损失 loss (y^是预测值)
b. 反馈 backward。算梯度(是计算模型损失函数相对于各参数的梯度,梯度指向损失函数上升最快的方向)
c. 更新。更新权重(选择优化算法,最基本的是梯度下降)

📌 模型使用的损失函数:

模型 | 损失函数
GPT | 交叉熵
BERT | MLM(掩码语言模型)使用交叉熵
T5 | 序列到序列(seq2seq),使用交叉熵

❓1. 语言模型为什么使用交叉熵?

  • 交叉熵可衡量预测分布与真实分布之间的差距
  • 支持多类分类(token 数量大)
  • 结合 softmax,可输出每个词的概率

❓2. 你能解释 KL 散度和交叉熵的关系吗?

[
\text{CrossEntropy}(P, Q) = H§ + \text{KL}(P | Q)
]

交叉熵是 KL 散度 + 熵(真实分布的固有不确定性)


❓3. 微调 LLM 时为什么用交叉熵而不是 MSE?

  • MSE 适合回归,不适合 token 的概率预测
  • 交叉熵能更精确衡量概率分布之间的差距

❓4. 交叉熵对 logits 还是对 softmax 后的概率做?

  • 实际实现中使用的是 log_softmax + nll_loss
  • PyTorch 的 CrossEntropyLoss 包括了 softmax 和 log 操作,直接接 logits!

为什么大模型的损失函数用交叉熵而不是 MSE?

任务类型决定:大模型的训练目标通常是分类任务,如词分类、下一个 token 的预测,其本质是多类别分类问题。而交叉熵是为分类设计的最优损失函数。
梯度更稳定、收敛更快:
对于 Softmax + CrossEntropy 的组合,梯度表达简单且稳定;(CE 求导后,梯度是线性关系,容易计算)
而 Softmax + MSE 会导致梯度消失或收敛慢。

在分类任务中,使用 CE,而不是 MSE,为什么

  1. 输出的性质 Nature of Output
    分类模型通常输出的是概率 例如在多类分类中,模型的输出往往是通过 softmax 转化的概率分布。交叉熵损失恰好是用来衡量预测的概率分布与真实标签(通常是独热编码)的差异。而均方误差(MSE)主要用于回归问题,适合于预测连续数值,因此它并不适合处理分类任务
  2. 梯度更新的效果 Gradient Behavior
    交叉熵损失对于概率分布有良好的梯度性质。在反向传播时,交叉熵的梯度对于训练过程更加稳定,能够有效促进权重更新,帮助模型更快收敛。而 MSE 在分类问题中可能会导致梯度消失问题,尤其是在模型输出已经接近零或一时,导致梯度非常小,进而影响训练效果
  3. 梯度与置信度 Interpretability
    交叉熵损失不仅关心预测的对错,还能反映出模型的置信度 例如,如果模型预测错误并且信心很高(例如输出的概率接近 1),交叉熵会给予更高的惩罚。相比之下,MSE 只关注预测值与实际值的差距,它无法有效衡量模型对预测的置信度,因此对于分类任务,无法提供与交叉熵一样的性能
  4. 计算与优化的效率
    (在多类别分类问题中,MSE 会随着类别数目的增加而导致问题扩展 尤其是在类别非常多的情况下,)MSE 对于错误的高置信度预测的惩罚不够强,而交叉熵损失设计上能够更好地处理这种情况,因为它能够惩罚那些错误预测但置信度高的情况,从而提高模型的分类能力

交叉熵损失函数非常适合处理分类任务,它能够有效反映模型输出的概率分布,更好地指导梯度更新,避免了 MSE 在分类问题中可能出现的训练问题。如果正在做分类任务,交叉熵无疑是更理想的选择!

4. 优化算法

目标:在函数集合中找到最小化损失函数的模型参数。
主要方法:梯度下降及其变种(随机梯度下降、批量梯度下降、Adam 等)
考虑因素:收敛速度、计算效率、参数调整的复杂性


网站公告

今日签到

点亮在社区的每一天
去签到