大模型 · 底层原理

大模型里的「激活函数」到底是啥?

不堆公式、不绕弯子。用一张图和几个交互,把"激活函数"从名词变成你脑子里的画面。

一、一句话答案

激活函数(Activation Function)是神经网络里一个"套在线性计算外面"的非线性函数。 它决定一个神经元「该输出多少信号」,就像给每个神经元配了个智能阀门: 输入小就少放、输入大就多放、该关的时候干脆关死。

没有它,成千上万个"矩阵乘法"叠在一起,本质上还是一条直线 —— 再深的网络也学不会"弯曲",学不了真实世界里那些弯弯绕绕的规律。

二、为什么必须有它:没有激活 → 退化为一条直线

先看一个扎心的真相:神经网络里绝大部分计算都是「加权求和」——本质是线性变换

y = W·x + b   (线性:输入放大/缩小、平移,但不能弯)

如果激活函数是「什么都不做」(恒等函数 f(x)=x),那么:

y = W₂·(W₁·x + b₁) + b₂ = (W₂W₁)·x + (W₂b₁ + b₂)

—— 两个线性层叠起来,还是一个线性层!无论叠 100 层还是 1000 层,整体永远是一条直线(或超平面)。

❌ 只有线性层(无激活) 看似很多层,其实还是一条直线 真实数据却是一条曲线 ✅ 加入激活(非线性) 层层弯曲,能贴合曲线
核心结论:线性变换只能表达"直线关系"。真实世界的数据(语言、图像、声音)全是高度非线性的。 激活函数把「非线性」注入网络,让多层叠加后能逼近任意复杂函数(这就是"万能逼近定理"的通俗版)。

三、形象类比:智能水龙头 / 门

把每个神经元想成一条水管里的阀门,你就能秒懂:

输入信号 x = 3.5 激活函数 f(·) 智能阀门 输出 y = f(3.5) 阀门会根据「输入大小」决定拧开多少:小信号半开、大信号全开、负信号关死

🚰 比喻成水龙头

输入是水压,激活函数是水龙头开关。线性层负责"加压/减压",激活函数是"拧阀门"。只加压不拧阀门,水还是按固定比例流,没变化。

🧠 比喻成神经元

生物神经元:突触加权求和 → 超过阈值才放电。激活函数就是「放电规则」——它让网络里有的路通、有的路断,形成稀疏而灵活的表示。

四、它到底算什么:一个神经元里的小剧场

一个神经元的标准动作分两步:

输入 x₁…xₙ 加权求和 z = Σ wᵢxᵢ + b 激活 a = f(z) 输出给下一层
激活函数作用在「每个元素」上(逐元素 / element-wise),跟矩阵乘法是分开的。它的输入是一个实数 z,输出也是一个实数 a。 正因为它简单又能改"形状",才适合塞进每一层、每个位置。

五、常见激活函数全家福

下面这些是大模型发展史上真正出场过的几位。先记住一句话:Transformer 的前馈网络(FFN)几乎都用 GELU / SiLU,注意力里用的是 Softmax(另一种归一化)。

Sigmoid

老牌选手,把实数压到 (0,1)。像"概率"。但两端太平,梯度几乎为 0 → 梯度消失,大模型基本淘汰。

σ(x)=1/(1+e⁻ˣ)

Tanh

压到 (-1,1),比 Sigmoid 好在"零中心"。但同样饱和、梯度消失,也少见了。

(eˣ−e⁻ˣ)/(eˣ+e⁻ˣ)

ReLU

最简单:负的变 0,正的不变。早期 Transformer 用过。便宜、不消失梯度,但负区"死掉"。

max(0, x)

LeakyReLU

ReLU 的改良:负区给一点小斜率,避免彻底死掉。

max(αx, x)

GELU ⭐

BERT / GPT-2 默认。平滑、非负、带「门控」思想:越不确定的输入越被压制。

x·Φ(x)

SiLU / Swish ⭐

LLaMA、Mistral 等现代大模型主力。SiLU 即 β=1 的 Swish,平滑且自带门控。

x·σ(βx)
x y Sigmoid Tanh ReLU GELU SiLU

六、交互:亲眼看看曲线

拖动滑块改变输入 x,看不同激活函数在同个点上的输出;点击下方按钮切换函数。

输入 x(区间 -6 ~ 6):

x = 1.50 → f(x) = 1.50

七、大模型里,激活函数到底用在哪?

以经典 Transformer(GPT / LLaMA 之类)为例,激活函数主要出现在两个地方:

词向量 x 自注意力 Softmax 归一化 + Norm 前馈网络 FFN Linear↑ → GELU → Linear↓ 👉 激活函数在这里 下一层 注意:Softmax 是"对一组分数归一化",不是逐元素激活;逐元素的非线性激活主要落在 FFN 里

常见大模型的激活选择

模型FFN 激活备注
BERT / GPT-2GELU带动量的经典默认
GPT-3GELU沿用 GPT-2 设计
LLaMA 1/2/3、MistralSiLU= Swish(β=1),现代主流
PaLMSwishGoogle 提出 Swish
早期 Transformer(原论文)ReLU2017 原始版本

八、为什么大模型选了 GELU / SiLU,而不是 ReLU?

1. 平滑,没有"硬折点"

ReLU 在 0 处是弯折的,反向传播时梯度不连续;GELU/SiLU 处处可导且平滑,训练更稳定、收敛更好。

2. 自带"门控"思想

它们形如 x · σ(...),相当于"用 sigmoid 当门,决定让多少 x 通过"。这跟注意力机制的"加权"思想一脉相承,很契合 Transformer。

3. 保留负信息

ReLU 直接把负数砍成 0,可能丢掉有用信息;SiLU 在负区很接近 0 但不等于 0,保留了微弱信号。

4. 实验效果更好

在大规模语言任务上,GELU/SiLU 的困惑度(perplexity)普遍优于 ReLU,于是被默认沿用。

九、它到底解决了什么问题(收口)

  • 非线性表达:让多层网络能拟合任意复杂映射,而不是退化成一条线。
  • 特征筛选 / 稀疏:像阀门一样,让某些信号通过、某些被压制,形成有意义的分布式表示。
  • 梯度可训练:好的激活(ReLU→GELU→SiLU)缓解梯度消失,让深层网络训得动。
  • 门控语义:GELU/SiLU 把"按置信度放行"做成可学习的旋钮,和注意力天然合拍。
一句话收尾:激活函数 = 给神经网络装上的「非线性开关」。没有它,模型只是叠了很多层却依然"想不开弯";有了它,大模型才真正能学到语言里的弯弯绕绕。

十、小结速记

你的问题答案
激活函数是啥?套在线性计算外的非线性函数,逐元素地决定"放出多少信号"
原理?引入非线性 → 多层叠加能逼近任意函数(万能逼近)
形象理解?智能水龙头 / 神经元的放电规则
大模型用哪个?FFN 里用 GELU / SiLU,注意力里用 Softmax
解决什么问题?非线性表达、稀疏筛选、梯度可训练、门控语义
本文为《大模型工作原理图解系列》之一 · 配套:Transformer / QKV / 参数 / 幻觉 等可视化文档均在本目录。