第 05 章:什么是激活函数?——从 Sigmoid、Tanh、ReLU 到 GELU,理解神经网络为什么能够学习复杂规律

2 阅读17分钟

第 05 章:什么是激活函数?

从 Sigmoid、Tanh、ReLU 到 GELU,理解神经网络为什么能够学习复杂规律

上一章我们从一个神经元开始,认识了:

[
z=Wx+b
]

然后:

[
a=f(z)
]

这里的:

[
f
]

就是我们今天要重点学习的:

Activation Function —— 激活函数

如果你正在从 Java 后端转向 AI,这一章非常重要。

因为你以后学习:

CNN
RNN
LSTM
Transformer
BERT
GPT
Qwen
DeepSeek

都会不断遇到:

ReLU
GELU
SiLU
Softmax
Sigmoid
Tanh

而理解它们的关键并不是背公式,而是先搞明白:

为什么神经网络一定需要激活函数?


一、先回顾一个神经元

上一章我们知道,一个简单神经元:

[
z=w_1x_1+w_2x_2+\cdots+w_nx_n+b
]

然后:

[
a=f(z)
]

也就是:

Input
  ↓
Weight
  ↓
Weighted Sum
  ↓
+ Bias
  ↓
Activation Function
  ↓
Output

其中:

W、b
↓
模型参数

而:

f
↓
Activation Function

通常不是模型通过训练得到的参数,而是我们选择的函数。


二、最关键的问题:为什么不能直接输出 z?

假设我们有一个神经元:

[
z=2x+1
]

然后第二层:

[
y=3z+2
]

代入:

[
y=3(2x+1)+2
]

得到:

[
y=6x+5
]

发现了吗?

无论我们堆多少层:

Linear
 ↓
Linear
 ↓
Linear
 ↓
Linear
 ↓
Linear

最终还是:

[
y=Wx+b
]

也就是说:

堆很多层线性函数,最终仍然只是一个线性函数。

这就非常麻烦。


三、为什么线性模型不够?

因为现实世界大量问题都是非线性的。

例如:

输入
 ↓
复杂规律
 ↓
输出

不是简单的:

[
y=ax+b
]

比如:

图像识别

像素
 ↓
边缘
 ↓
纹理
 ↓
形状
 ↓
眼睛
 ↓
脸
 ↓
猫

语音识别

声音波形
 ↓
频率
 ↓
音素
 ↓
词
 ↓
句子

LLM

Token
 ↓
Embedding
 ↓
Attention
 ↓
MLP
 ↓
Attention
 ↓
MLP
 ↓
……
 ↓
Next Token

这些都不是简单的线性关系。

所以神经网络需要一种东西:

让网络具备非线性表达能力。

这就是激活函数最核心的作用。


四、激活函数最重要的作用:引入非线性

记住这一句话:

Activation Function 的核心作用之一,就是给神经网络引入非线性。

没有激活函数:

Linear
 ↓
Linear
 ↓
Linear

仍然可以合并成:

Linear

有激活函数:

Linear
 ↓
Non-linear Activation
 ↓
Linear
 ↓
Non-linear Activation
 ↓
Linear

模型就能够表达更加复杂的函数。


五、什么叫“非线性”?

先看:

[
y=2x+1
]

这是线性的。

它画出来是一条直线。

而:

[
y=x^2
]

是非线性的。

genui{"graphable_function_v2_learning_block_parameterized":{"expressions":[{"latex":"y=2x+1"},{"latex":"y=x^2"}],"locale_override":"zh-CN"}}

你可以把它简单理解为:

Linear
=
一条直线


Non-linear
=
可以出现弯曲、分段、复杂变化

神经网络就是利用这种非线性,把简单的数学运算组合成非常复杂的函数。


六、第一个经典激活函数:Sigmoid

Sigmoid 是机器学习历史上非常重要的激活函数。

公式:

[
\sigma(x)=\frac{1}{1+e^{-x}}
]

它最大的特点:

[
0<\sigma(x)<1
]

也就是说:

输入很小
 ↓
输出接近 0


输入 = 0
 ↓
输出 = 0.5


输入很大
 ↓
输出接近 1

genui{"graphable_function_v2_learning_block_parameterized":{"expressions":[{"latex":"y=\frac{1}{1+e^{-x}}"}],"locale_override":"zh-CN"}}

它的形状大概是一个:

S 型曲线


七、为什么 Sigmoid 曾经非常流行?

因为它非常适合表达:

概率。

例如:

模型输出:

0.95

可以理解成:

这个样本属于正类的概率约为 95%。

例如:

垃圾邮件?

模型:

[
0.93
]

可以理解成:

93% 的概率是垃圾邮件。

所以 Sigmoid 在:

Binary Classification
二分类

中非常常见。


八、Sigmoid 最大的问题:梯度消失

这就是深度学习历史上非常重要的问题。

Sigmoid:

[
\sigma(x)=\frac{1}{1+e^{-x}}
]

它的导数:

[
\sigma'(x)=\sigma(x)(1-\sigma(x))
]

由于:

[
0<\sigma(x)<1
]

所以导数最大值只有:

[
0.25
]

而且当:

x 非常大

或者:

x 非常小

导数都会非常接近:

[
0
]

也就是:

输入很大
 ↓
Sigmoid
 ↓
梯度 ≈ 0

或者:

输入很小
 ↓
Sigmoid
 ↓
梯度 ≈ 0

九、为什么梯度接近 0 很麻烦?

因为神经网络训练依赖:

Gradient —— 梯度

我们上一章讲过:

Loss
 ↓
Backward
 ↓
Gradient
 ↓
Update Parameters

如果:

[
Gradient\approx0
]

那么:

参数更新
 ↓
几乎不动

于是:

模型学习得非常慢,甚至几乎学不动。

这就是:

Vanishing Gradient —— 梯度消失


十、为什么深层网络特别容易出现梯度消失?

因为反向传播依赖:

Chain Rule —— 链式法则

假设:

Layer 5
 ↓
Layer 4
 ↓
Layer 3
 ↓
Layer 2
 ↓
Layer 1

反向传播时:

Gradient
 ↓
× g₅
 ↓
× g₄
 ↓
× g₃
 ↓
× g₂
 ↓
× g₁

假设每层梯度都是:

[
0.1
]

那么:

[
0.1^5=0.00001
]

如果有 20 层:

[
0.1^{20}=10^{-20}
]

梯度几乎就没了。

所以:

深层网络 + 不合适的激活函数,可能导致梯度越来越小。


十一、第二个经典激活函数:Tanh

Tanh:

[
tanh(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}}
]

输出范围:

[
(-1,1)
]

也就是说:

x → -∞
 ↓
-1


x = 0
 ↓
0


x → +∞
 ↓
1

genui{"graphable_function_v2_learning_block_parameterized":{"expressions":[{"latex":"y=\tanh(x)"}],"locale_override":"zh-CN"}}

它也是一个 S 型曲线。


十二、Tanh 和 Sigmoid 有什么区别?

最重要的区别:

SigmoidTanh
输出范围(0,1)(-1,1)
中心0.50
是否零中心
梯度消失

Sigmoid:

[
0\sim1
]

Tanh:

[
-1\sim1
]

Tanh 是:

Zero-centered —— 零中心

这通常让优化更加方便。

所以在早期神经网络中:

Sigmoid
 ↓
Tanh

Tanh 经常是一个更好的选择。


十三、但是 Tanh 仍然存在梯度消失

虽然 Tanh 比 Sigmoid 更好一些,但它依然会:

x → 很大
 ↓
Tanh → 1
 ↓
Gradient → 0

或者:

x → 很小
 ↓
Tanh → -1
 ↓
Gradient → 0

所以:

Tanh 并没有彻底解决深层网络的梯度消失问题。

这时候我们需要一个更加简单的激活函数。


十四、ReLU 登场

ReLU:

Rectified Linear Unit

公式非常简单:

[
ReLU(x)=\max(0,x)
]

也就是:

如果 x < 0:

0


如果 x ≥ 0:

x

例如:

xReLU(x)
-50
-20
-10
00
11
22
55

十五、ReLU 为什么这么受欢迎?

它简单到令人发指:

def relu(x):
    return max(0, x)

正数:

x = 5
 ↓
5

负数:

x = -5
 ↓
0

而且对于:

[
x>0
]

它的导数:

[
ReLU'(x)=1
]

这意味着:

在正数区域,梯度不会因为 ReLU 本身而不断缩小。

这对深层网络训练非常有帮助。


十六、ReLU 的另一个特点:稀疏激活

假设:

输入:

-3
 2
-1
 5
-8
 4

经过 ReLU:

0
2
0
5
0
4

很多神经元输出:

0

这意味着:

部分神经元在某些输入下不会被激活。

这种稀疏性在一定程度上有助于表示学习和计算效率。


十七、ReLU 的问题:Dying ReLU

ReLU 虽然很好,但并不完美。

看:

[
ReLU(x)=\max(0,x)
]

如果:

[
x<0
]

那么:

[
ReLU(x)=0
]

同时:

[
ReLU'(x)=0
]

于是:

x < 0
 ↓
输出 0
 ↓
梯度 0
 ↓
参数可能长期得不到更新

这个神经元可能就:

“死掉了”。

这就是:

Dying ReLU


十八、什么情况下 ReLU 容易“死亡”?

例如某个神经元长期得到:

z < 0

那么:

ReLU(z) = 0

并且:

gradient = 0

它就很难重新恢复。

当然现代网络的初始化、优化器、学习率等都会影响这种现象,实际情况没有这么绝对。


十九、Leaky ReLU

为了解决 ReLU 在负数区域:

[
gradient=0
]

的问题,可以让负数区域保留一个很小的斜率。

例如:

[
LeakyReLU(x)=
\begin{cases}
x,&x>0\
0.01x,&x\le0
\end{cases}
]

也就是:

正数
 ↓
x


负数
 ↓
0.01x

genui{"graphable_function_v2_learning_block_parameterized":{"expressions":[{"latex":"y=x","restrictions":["x>0"]},{"latex":"y=0.01x","restrictions":["x\le 0"]}],"locale_override":"zh-CN"}}

这样:

负数区域
 ↓
仍然存在梯度

所以一定程度上缓解:

Dying ReLU。


二十、ReLU 家族

你以后会看到一堆名字:

ReLU
Leaky ReLU
PReLU
ELU
GELU
SiLU
Swish

不要一看到名字就害怕。

核心思想都是:

通过某种非线性函数,把神经元的输入转换成输出。


二十一、现代 Transformer 更重要的:GELU

现在进入和 LLM 非常相关的:

GELU

全称:

Gaussian Error Linear Unit

它在 Transformer 系列模型中非常重要。

经典定义:

[
GELU(x)=x\Phi(x)
]

其中:

[
\Phi(x)
]

是标准正态分布的累积分布函数。


二十二、GELU 为什么和 ReLU 不一样?

ReLU:

负数
 ↓
直接砍掉
 ↓
0

GELU:

负数
 ↓
不是简单地全部变成 0
 ↓
而是平滑地压制

所以它不是:

突然:

0 → x

而是更加平滑。

可以把它粗略理解成:

ReLU:

“负数全部不要。”


GELU:

“负数不是完全不要,
而是根据输入大小进行平滑处理。”

二十三、GELU 的近似公式

实际工程中经常看到:

[
GELU(x)
\approx
\frac{x}{2}
\left(
1+\tanh
\left[
\sqrt{\frac{2}{\pi}}
\left(x+0.044715x^3\right)
\right]
\right)
]

第一次看到这个公式:

不要慌。

你目前完全没必要背它。

只需要知道:

GELU
=
一种平滑的非线性激活函数

以及:

它在 Transformer / NLP 模型历史上非常重要。


二十四、为什么 Transformer 喜欢 GELU?

一个重要原因是:

GELU 的函数形状更加平滑。

相比:

ReLU:

max(0,x)

GELU:

平滑地处理输入

在很多 Transformer 架构中,这种性质表现得很好。

例如经典 BERT 的 Transformer FFN 就使用 GELU。

很多早期 Transformer/LLM 架构也大量采用 GELU。


二十五、但是现在很多 LLM 又喜欢 SiLU / SwiGLU

这时候你会发现:

“老师,你前面说 GELU 很重要,为什么现在又冒出来 SiLU?”

因为:

模型架构一直在发展。

SiLU:

[
SiLU(x)=x\sigma(x)
]

也叫:

Swish

它与 GELU 的形状比较接近:

平滑
+
非线性
+
不会像 ReLU 那样简单粗暴地截断负数

现代一些 Transformer/LLM 架构中会使用:

SiLU
SwiGLU
GEGLU

等结构。


二十六、SwiGLU 是什么?

你以后看 LLM 架构,很可能遇到:

SwiGLU

它不是简单的一个激活函数。

而是一种:

Gated Linear Unit 结构 + Swish/SiLU

粗略理解:

输入
 ↓
两条分支
 ↓
一条负责内容
一条负责门控
 ↓
相乘
 ↓
输出

可以粗略表示:

[ SwiGLU(x)

SiLU(xW_1)\odot(xW_2)
]

然后再经过一个线性层。

这里:

[
\odot
]

表示逐元素相乘。


二十七、为什么 LLM 喜欢这种结构?

因为相比简单:

Linear
 ↓
ReLU
 ↓
Linear

一些门控结构能够提供更加灵活的特征变换能力。

你以后学习:

Transformer
 ↓
FFN
 ↓
SwiGLU

时,就会再次遇到这里的知识。


二十八、激活函数到底解决了什么问题?

现在总结一下。

没有激活函数:

Linear
 ↓
Linear
 ↓
Linear
 ↓
Linear

最终:

Linear

表达能力有限。

加入:

Activation

之后:

Linear
 ↓
Non-linear
 ↓
Linear
 ↓
Non-linear
 ↓
Linear

就能够构建复杂的非线性函数。

所以:

激活函数让深度神经网络真正具备强大的函数表达能力。


二十九、为什么说神经网络是“万能函数逼近器”?

这是一个非常重要的理论结果:

Universal Approximation Theorem —— 通用逼近定理

简单理解:

一个具有足够神经元和合适非线性激活函数的神经网络,可以在一定条件下:

逼近非常广泛的一类连续函数。

这意味着:

复杂规律
 ↓
拆成很多简单计算
 ↓
通过多层神经网络组合
 ↓
逼近复杂函数

所以神经网络为什么强?

并不是因为:

“一个神经元特别聪明。”

而是:

大量简单计算单元 + 非线性 + 多层组合。


三十、一个非常重要的直觉

可以把:

Neuron

想象成一个非常简单的积木。

一个:

Neuron

很简单。

但是:

100 个 Neuron

可以组成更复杂的结构。

再:

1000 

再:

1000000 个

再:

数十亿参数

最终:

复杂度会非常惊人。

这就是深度学习的基本思想之一。


三十一、Sigmoid、Tanh、ReLU、GELU 对比

这是这一章最值得保存的一张表:

激活函数输出范围优点缺点常见场景
Sigmoid(0,1)可表示概率梯度消失二分类输出
Tanh(-1,1)零中心梯度消失早期 RNN 等
ReLU[0,+∞)简单、训练快Dying ReLUCNN/深度网络
Leaky ReLU(-∞,+∞)缓解神经元死亡负区间仍较简单部分深度网络
GELU(-∞,+∞)平滑计算更复杂Transformer/BERT 等
SiLU(-∞,+∞)平滑、非单调计算复杂现代深度网络/LLM
Softmax(0,1),和为 1概率分布特殊用途多分类输出

注意:

Softmax 和 ReLU/GELU 的用途并不完全一样。

Softmax 更多用于把一组 logits 转换成概率分布。


三十二、Softmax 为什么也叫“激活函数”?

Softmax:

[ softmax(z_i)

\frac{e^{z_i}}
{\sum_j e^{z_j}}
]

假设模型输出:

猫:2.0
狗:1.0
鸟:0.1

经过 Softmax:

猫:0.66
狗:0.24
鸟:0.10

于是:

概率总和:

1.00

所以:

Softmax 可以把一组分数转换成概率分布。


三十三、LLM 的输出为什么不是直接“选一个词”?

这和 Softmax 有很大关系。

假设词表:

100,000 Tokens

模型最后输出:

100,000 个 logits

例如:

我 → 3.1
喜欢 → 7.2
吃 → 4.5
苹果 → 8.3
……

然后经过:

Softmax

得到:

我       0.01
喜欢     0.08
吃       0.03
苹果     0.15
……

然后再根据:

Sampling / Greedy / Temperature / Top-K / Top-P

等策略选择下一个 Token。

这个我们后面讲 LLM 时会详细拆。


三十四、激活函数和梯度之间的关系

这是这一章的核心核心。

训练:

Forward
 ↓
Loss
 ↓
Backward
 ↓
Gradient

而激活函数本身也会参与梯度计算。

例如:

Linear
 ↓
ReLU
 ↓
Linear
 ↓
Loss

反向传播时:

Loss
 ↓
Linear Gradient
 ↓
ReLU Gradient
 ↓
上一层

所以:

激活函数的导数性质会直接影响神经网络是否容易训练。


三十五、梯度消失

简单理解:

每一层梯度都 < 1
 ↓
连续乘很多次
 ↓
越来越小
 ↓
接近 0

最终:

前面的层
 ↓
几乎收不到梯度
 ↓
几乎不学习

这就是:

Vanishing Gradient

Sigmoid/Tanh 在深层网络中尤其容易出现这个问题。


三十六、梯度爆炸

反过来。

如果某些梯度:

> 1

不断相乘:

[
2\times2\times2\times\cdots
]

就可能越来越大。

例如:

[
2^{20}=1,048,576
]

于是:

Gradient
 ↓
越来越大
 ↓
参数更新巨大
 ↓
Loss 爆炸
 ↓
训练不稳定

这就是:

Exploding Gradient


三十七、所以激活函数不是越复杂越好

这点很重要。

一个好的激活函数通常需要考虑:

非线性能力
+
梯度性质
+
计算效率
+
数值稳定性
+
实际训练效果

所以:

不是“公式越复杂越厉害”。

ReLU 的公式极其简单:

[
\max(0,x)
]

却在深度学习历史上产生了巨大影响。


三十八、PyTorch 中怎么使用?

ReLU

import torch.nn as nn

activation = nn.ReLU()

GELU

activation = nn.GELU()

Sigmoid

activation = nn.Sigmoid()

Tanh

activation = nn.Tanh()

例如:

model = nn.Sequential(
    nn.Linear(10, 64),
    nn.ReLU(),
    nn.Linear(64, 32),
    nn.ReLU(),
    nn.Linear(32, 1)
)

结构:

10
 ↓
64
 ↓
ReLU
 ↓
32
 ↓
ReLU
 ↓
1

三十九、Transformer 中的激活函数

现在提前看一下 Transformer。

一个经典 Transformer 的 FFN 可以粗略理解为:

Input
  ↓
Linear
  ↓
GELU
  ↓
Linear
  ↓
Output

也就是:

[
FFN(x)=W_2,GELU(W_1x+b_1)+b_2
]

你现在已经完全可以理解这个公式:

W₁
 ↓
第一层参数


GELU
 ↓
非线性


W₂
 ↓
第二层参数

这就是为什么我们现在先学激活函数。


四十、现代 LLM 中的 SwiGLU

一些现代 LLM 使用:

Input
 ↓
Linear
 ↓
SiLU / Gate
 ↓
Element-wise Multiply
 ↓
Linear
 ↓
Output

所以当你以后看到:

SwiGLU

不要觉得这是一个完全陌生的概念。

它本质上还是:

线性变换 + 非线性 + 门控机制。


四十一、一个非常重要的认知:激活函数不是“激活一个神经元这么简单”

名字叫:

Activation Function

容易让人产生误解。

实际上它不是:

“判断这个神经元有没有被激活。”

更准确地说:

它对线性变换后的结果进行非线性映射。

例如:

[
z=Wx+b
]

经过:

[
a=f(z)
]

这个:

[
f
]

就是激活函数。


四十二、这一章你应该形成这样的脑图

                 Activation Function
                         │
          ┌──────────────┼──────────────┐
          ↓              ↓              ↓
       Sigmoid          Tanh           ReLU
          │              │              │
      (0,1)          (-1,1)          [0,+∞)          │              │              │      梯度消失         梯度消失       Dying ReLU                                         │                                         ↓                                   Leaky ReLU                                         │                                         ↓                              更现代的激活函数                                         │                              ┌──────────┴──────────┐                              ↓                     ↓                            GELU                  SiLU                              │                     │                              ↓                     ↓                         Transformer            LLM

四十三、把这一章和上一章连起来

上一章:

[
z=Wx+b
]

这一章:

[
a=f(z)
]

合起来:

[
\boxed{a=f(Wx+b)}
]

这就是一个神经网络层最核心的计算。

然后多层:

[
a_1=f(W_1x+b_1)
]

[
a_2=f(W_2a_1+b_2)
]

[
a_3=f(W_3a_2+b_3)
]

……

最终:

[
y=f(W_n a_{n-1}+b_n)
]

这就是:

深度神经网络。


四十四、再把它和第 02 章连接

第 02 章:

Parameter
 ↓
Prediction
 ↓
Loss
 ↓
Gradient
 ↓
Update

现在:

Parameter
=
Weight + Bias + ...

而:

Prediction
=
经过多个 Layer + Activation 计算得到

完整过程:

                 Input
                   ↓
              W₁x + b₁
                   ↓
              Activation
                   ↓
              W₂x + b₂
                   ↓
              Activation
                   ↓
                  ...
                   ↓
               Prediction
                   ↓
                 Loss
                   ↓
              Backpropagation
                   ↓
                Gradient
                   ↓
                Optimizer
                   ↓
           Update Parameters

到这里,神经网络训练的骨架已经非常完整了。


四十五、这一章最重要的 8 个结论

① 激活函数最重要的作用

引入非线性。


② 没有激活函数

Linear
+
Linear
+
Linear

最终仍然是一个线性变换。


③ Sigmoid

[
\frac{1}{1+e^{-x}}
]

适合概率输出,但深层网络容易梯度消失。


④ Tanh

[
\tanh(x)
]

输出:

[
(-1,1)
]

零中心,但同样存在梯度消失问题。


⑤ ReLU

[
\max(0,x)
]

简单、高效,是深度学习历史上非常重要的激活函数。


⑥ ReLU 的问题

负数区域:

[
gradient=0
]

可能产生:

Dying ReLU。


⑦ GELU

[
GELU(x)=x\Phi(x)
]

是一种平滑的非线性函数,在 Transformer/BERT 等架构中非常重要。


⑧ SiLU / SwiGLU

现代深度网络和部分 LLM 中非常常见。


四十六、面试题

Q1:为什么神经网络需要激活函数?

因为如果没有激活函数,多层线性变换最终仍然可以合并成一个线性变换,网络无法有效表达复杂的非线性关系。


Q2:ReLU 为什么比 Sigmoid 更适合深层网络?

ReLU 在正数区域导数为 1,不容易像 Sigmoid 那样在大正数/大负数区域产生严重的梯度饱和,因此通常更容易训练深层网络。


Q3:ReLU 有什么缺点?

负数区域输出为 0、梯度为 0,部分神经元可能长期不更新,形成 Dying ReLU。


Q4:GELU 和 ReLU 有什么区别?

ReLU 对负数直接截断为 0,而 GELU 通过平滑函数对输入进行非线性变换,不是简单的硬截断。


Q5:什么是梯度消失?

在反向传播过程中,如果连续多层的梯度因子都比较小,经过链式法则不断相乘后,梯度会越来越接近 0,使前面的网络层几乎无法得到有效更新。


Q6:什么是梯度爆炸?

反向传播过程中梯度不断变大,导致参数更新过大,使训练不稳定甚至 Loss 数值爆炸。


四十七、本章最终知识地图

                         Neural Network
                               │
                               ↓
                         Linear Layer
                               │
                         z = Wx + b
                               │
                               ↓
                    ┌──────────────────┐
                    │ Activation       │
                    │                  │
                    │ Sigmoid          │
                    │ Tanh             │
                    │ ReLU             │
                    │ Leaky ReLU       │
                    │ GELU             │
                    │ SiLU             │
                    └────────┬─────────┘
                             ↓
                        Non-linearity
                             │
                             ↓
                       Multiple Layers
                             │
                             ↓
                    Deep Neural Network
                             │
                             ↓
                          Forward
                             │
                             ↓
                           Loss
                             │
                             ↓
                         Backward
                             │
                     ┌───────┴────────┐
                     ↓                ↓
              Gradient Vanishing   Gradient Explosion
                     │
                     ↓
                   Update
                     │
                     ↓
                  Training

五十三、现在你真正需要记住的不是公式,而是这一句话

神经网络之所以强大,不是因为一个神经元很复杂,而是因为大量简单的线性变换通过非线性激活函数层层组合,最终可以逼近非常复杂的函数。

可以把它浓缩成:

[ \boxed{ \text{Neural Network}

\text{Linear Transformation}
+
\text{Non-linearity}
+
\text{Many Layers}
}
]

而训练过程就是:

[
\boxed{
\text{Forward}
\rightarrow
\text{Loss}
\rightarrow
\text{Backward}
\rightarrow
\text{Gradient}
\rightarrow
\text{Update}
}
]


下一章:第 06 章

下一章我们就可以正式进入深度学习训练中最核心的数学工具之一:

第 06 章:什么是梯度与反向传播?——从导数、链式法则到 Backpropagation,彻底搞懂神经网络是怎么“学会”的

这一章会把前面所有东西真正串起来:

一个神经元
     ↓
y = wx + b
     ↓
Loss
     ↓
∂L/∂w
     ↓
Gradient
     ↓
Chain Rule
     ↓
Backpropagation
     ↓
计算每一个 Weight 的梯度
     ↓
Optimizer
     ↓
更新参数

并且会手算一个两层神经网络的完整反向传播过程,再用 PyTorch 的 autograd 对照,让你真正理解:

为什么模型只要不断做 Forward + Backward + Update,就能够从一堆随机参数逐渐“学会”任务。