Ⅰ、激活函数本质、作用及常用激活函数的数学推导

一、激活函数的本质

在神经网络中,一个神经元的计算通常是:

z=wTx+bz = \mathbf{w}^T \mathbf{x} + bz=wTx+b

a=σ(z)a = \sigma(z)a=σ(z)

其中:

  • w\mathbf{w}w 是权重(weight)
  • x\mathbf{x}x是输入(input)
  • b 是偏置(bias)
  • z 是线性加权和(logit)
  • σ(⋅)\sigma(\cdot)σ() 就是激活函数
  • a 是神经元的输出(activation)

本质:

激活函数是一个非线性函数,它的作用是给神经元引入非线性表达能力

如果没有激活函数(或者用线性激活函数 σ(z)=z\sigma(z)=zσ(z)=z),那么无论神经网络有多少层,最终输出都只是输入的线性组合,即:

y=WL(…W2(W1x+b1)+b2… )+bLy = W_L ( \dots W_2 (W_1 x + b_1) + b_2 \dots ) + b_Ly=WL(W2(W1x+b1)+b2)+bL

这等价于一个单层线性模型,无法拟合复杂的非线性关系


二、激活函数的作用

激活函数在神经网络中有以下几个核心作用:

  1. 引入非线性
    • 没有非线性,深层网络毫无意义(只是线性变换)
    • 有了非线性,网络可以逼近任意复杂的函数(万能逼近定理)
  2. 控制输出范围
    • 例如 Sigmoid 把输出压缩到 [0,1],适合二分类概率输出
    • Tanh 把输出压缩到 [-1,1]
  3. 增加模型的鲁棒性
    • 某些激活函数(如 ReLU)对输入的微小变化不敏感
    • 缓解梯度消失问题(ReLU 在正区间梯度恒为 1)
  4. 提供梯度流
    • 激活函数必须可导(至少在大部分点可导),才能用反向传播训练

三、常见激活函数及推导

我们来逐一介绍几种经典激活函数,包括它们的公式、图像特点、梯度(导数)以及优缺点。


1. Sigmoid 函数

公式:

σ(z)=11+e−z\sigma(z) = \frac{1}{1 + e^{-z}}σ(z)=1+ez1

特点:

  • 输出范围 (0, 1)
  • 平滑可导
  • 常用于二分类输出层

梯度推导:

σ′(z)=ddz(11+e−z)\sigma'(z) = \frac{d}{dz} \left( \frac{1}{1 + e^{-z}} \right)σ(z)=dzd(1+ez1)

=e−z(1+e−z)2= \frac{e^{-z}}{(1 + e^{-z})^2}=(1+ez)2ez

=σ(z)⋅(1−σ(z))= \sigma(z) \cdot (1 - \sigma(z))=σ(z)(1σ(z))

优缺点:

  • 输出可解释为概率
  • 容易梯度消失(z 很大或很小时,梯度接近 0)
  • 输出均值不是 0,影响训练效果

2. Tanh 函数

公式:

tanh⁡(z)=ez−e−zez+e−z\tanh(z) = \frac{e^z - e^{-z}}{e^z + e^{-z}}tanh(z)=ez+ezezez

特点:

  • 输出范围 (-1, 1)
  • 均值为 0,比 Sigmoid 训练收敛快
  • 常用于隐藏层

梯度推导:

tanh⁡′(z)=ddz(ez−e−zez+e−z)\tanh'(z) = \frac{d}{dz} \left( \frac{e^z - e^{-z}}{e^z + e^{-z}} \right)tanh(z)=dzd(ez+ezezez)

=(ez+e−z)2−(ez−e−z)2(ez+e−z)2= \frac{(e^z + e^{-z})^2 - (e^z - e^{-z})^2}{(e^z + e^{-z})^2}=(ez+ez)2(ez+ez)2(ezez)2

=1−tanh⁡2(z)= 1 - \tanh^2(z)=1tanh2(z)

优缺点:

  • 均值为 0,训练更快
  • 仍有梯度消失问题

3. ReLU (Rectified Linear Unit)

公式:

ReLU(z)=max⁡(0,z)\text{ReLU}(z) = \max(0, z)ReLU(z)=max(0,z)

特点:

  • 计算极快(只需比较和取最大值)
  • 在正区间梯度恒为 1,缓解梯度消失
  • 会导致部分神经元 “死亡”(输出恒为 0)

梯度推导:

ReLU′(z)={1if z>00if z<0\text{ReLU}'(z) = \begin{cases} 1 & \text{if } z > 0 \\ 0 & \text{if } z < 0 \end{cases}ReLU(z)={10if z>0if z<0

(z=0 处不可导,但实际训练中通常取 0 或 1)

优缺点:

  • 计算简单,训练快
  • 缓解梯度消失
  • Dead ReLU 问题(神经元永久不激活)

4. Leaky ReLU

公式:

LeakyReLU(z)={zif z>0αzif z≤0\text{LeakyReLU}(z) = \begin{cases} z & \text{if } z > 0 \\ \alpha z & \text{if } z \leq 0 \end{cases}LeakyReLU(z)={zαzif z>0if z0

α\alphaα通常取 0.01)

梯度推导:

LeakyReLU′(z)={1if z>0αif z≤0\text{LeakyReLU}'(z) = \begin{cases} 1 & \text{if } z > 0 \\ \alpha & \text{if } z \leq 0 \end{cases}LeakyReLU(z)={1αif z>0if z0

优缺点:

  • 解决 Dead ReLU 问题
  • 计算简单
  • 增加了一个超参数 (\alpha)

5. Softmax 函数

公式:

softmax(z)i=ezi∑j=1Kezj\text{softmax}(z)_i = \frac{e^{z_i}}{\sum_{j=1}^K e^{z_j}}softmax(z)i=j=1Kezjezi

(K 是类别数)

特点:

  • 常用于多分类问题的输出层
  • 输出值在 [0,1] 之间,且和为 1,可解释为概率

梯度推导:

对 Softmax 函数的梯度推导比较复杂,需要考虑两种情况:

  1. i=ji = ji=j 时:

∂softmax(z)i∂zj=softmax(z)i⋅(1−softmax(z)i)\frac{\partial \text{softmax}(z)_i}{\partial z_j} = \text{softmax}(z)_i \cdot (1 - \text{softmax}(z)_i)zjsoftmax(z)i=softmax(z)i(1softmax(z)i)

  1. i≠ji \neq ji=j 时:

∂softmax(z)i∂zj=−softmax(z)i⋅softmax(z)j\frac{\partial \text{softmax}(z)_i}{\partial z_j} = -\text{softmax}(z)_i \cdot \text{softmax}(z)_jzjsoftmax(z)i=softmax(z)isoftmax(z)j

优缺点:

  • 输出可解释为概率分布
  • 计算开销较大
  • 对输入敏感(容易数值不稳定)

四、激活函数的选择建议

  • 输出层:
    • 二分类:Sigmoid
    • 多分类:Softmax
    • 回归问题:线性激活(或 ReLU 变体)
  • 隐藏层:
    • 首选:ReLU 或其变体(LeakyReLU, ELU, Swish)
    • 传统选择:Tanh
    • 较少使用:Sigmoid(除非是 LSTM 等特殊结构)

五、总结

  • 本质:激活函数引入非线性,使神经网络能拟合复杂函数
  • 作用:增加模型表达能力、控制输出范围、影响训练效率
  • 设计原则:非线性、可导、计算高效、梯度稳定
  • 常用函数:Sigmoid、Tanh、ReLU、LeakyReLU、Softmax

Ⅱ、 z=wTx+bz = \mathbf{w}^T \mathbf{x} + bz=wTx+b使用示例

1. 场景设定(预测是否购买商品)

假设我们做一个简单的二分类模型

根据一个人的 ,判断他是否会购买某件商品。

  • 输入特征:

    x=[x1x2]=[258000]\mathbf{x} = \begin{bmatrix} x_1 \\ x_2 \end{bmatrix} = \begin{bmatrix} 25 \\ 8000 \end{bmatrix}x=[x1x2]=[258000]

    (年龄 25 岁,月收入 8000 元)

  • 模型参数(权重和偏置,假设训练好了):

    w=[w1w2]=[0.020.0005],b=−3\mathbf{w} = \begin{bmatrix} w_1 \\ w_2 \end{bmatrix} = \begin{bmatrix} 0.02 \\ 0.0005 \end{bmatrix}, \quad b = -3w=[w1w2]=[0.020.0005],b=3


2. 计算过程

公式:

z=wTx+bz = \mathbf{w}^T \mathbf{x} + bz=wTx+b

  1. 计算加权和 wTx\mathbf{w}^T \mathbf{x}wTxwTx=[0.020.0005][258000]\mathbf{w}^T \mathbf{x} = \begin{bmatrix} 0.02 & 0.0005 \end{bmatrix} \begin{bmatrix} 25 \\ 8000 \end{bmatrix}wTx=[0.020.0005][258000] =(0.02×25)+(0.0005×8000)= (0.02 \times 25) + (0.0005 \times 8000)=(0.02×25)+(0.0005×8000)=0.5+4=4.5= 0.5 + 4 = 4.5=0.5+4=4.5
  2. 加上偏置 bz=4.5+(−3)=1.5z = 4.5 + (-3) = 1.5z=4.5+(3)=1.5

3. 如何使用这个结果 z

  • 如果是回归任务:z 可以直接作为预测值(比如预测购买概率的分数)。

  • 如果是分类任务:我们会把 z 放进激活函数,比如Sigmoid

    σ(z)=11+e−z=11+e−1.5≈0.8176\sigma(z) = \frac{1}{1 + e^{-z}} = \frac{1}{1 + e^{-1.5}} \approx 0.8176σ(z)=1+ez1=1+e1.510.8176

    得到概率值 (即 82% 的概率会购买)。

  • 决策规则

    • 如果概率 > 0.5,则预测 “购买”,否则预测 “不购买”。这里 0.82 > 0.5 → 预测: 会购买

4. 权重和偏置的直观理解

  • w₁ = 0.02:年龄每增加 1 岁,购买分数增加 0.02

  • w₂ = 0.0005:月收入每增加 1 元,购买分数增加 0.0005

    (收入的权重很小,但因为收入数值大,它对结果的影响其实很大)

  • b = -3:基础阈值,如果加权和小于 3,z 就会是负数,经过 Sigmoid 后概率会低于 0.5(不购买)


5. 再看一个例子(不同输入)

输入:

x=[183000]\mathbf{x} = \begin{bmatrix} 18 \\ 3000 \end{bmatrix}x=[183000]

(年龄 18 岁,月收入 3000 元)

计算:

wTx=(0.02×18)+(0.0005×3000)=0.36+1.5=1.86\mathbf{w}^T \mathbf{x} = (0.02 \times 18) + (0.0005 \times 3000) = 0.36 + 1.5 = 1.86wTx=(0.02×18)+(0.0005×3000)=0.36+1.5=1.86

z=1.86−3=−1.14z = 1.86 - 3 = -1.14z=1.863=1.14

Sigmoid:

σ(−1.14)≈0.245\sigma(-1.14) \approx 0.245σ(1.14)0.245

概率 24.5% → 预测:不购买


6. 小结

公式z=wTx+bz = \mathbf{w}^T \mathbf{x} + bz=wTx+b的运算过程就是:

  1. 输入特征权重线性加权和
  2. 加上偏置得到一个分数 z
  3. z 可以直接作为回归输出,或通过激活函数变成分类概率

这个形式的好处是:

  • 简单、可解释
  • 权重大小直接反映特征重要性
  • 方便求梯度(反向传播)
  • 是所有深度学习模型的基础单元

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐