跳到主要内容

神经元与激活函数 — 网络的最小零件

这一章讲三件事: 一个神经元到底在算什么(手算给你看); 为什么网络里必须塞进非线性;以及输出层怎么把算出来的数变成「答案」。 读完你就有了读后面所有架构章的零件表。

1. 从第 02 章到这一章,差了什么

第 02 章的线性模型是一条线:y = β0 + β1·x,能调的数只有几个系数。 它的天花板在第 02 章说过:非线性(输出不与输入成简单倍数,画出来不是直线)关系画不出。

神经网络的出发点朴素得让人失望:把很多个「线性模型」摞起来,层层相接。 每个接线点叫一个神经元(neuron:网络的最小计算单元,即「接收几个数、算出一个数」的部件), 连接的强弱叫权重(weight:可以调的数,第 02 章的 β 就是它的前身), 再给每个神经元配一个可调的偏置(bias:不加输入时的默认输出,相当于 β0)1

但这里有个陷阱,下一节专门拆它。

2. 主走查:手算一个神经元

原书 3.2 节给了每个零件的 Python 实现,第一个就是线性单元(一个最简单的部件:乘上权重、加上偏置就输出), 参数是书里给的:权重 w = 2.0,偏置 b = 1.02。拿它算三个输入:

输入 x = 3


加权求和: z = w·x + b = 2.0 × 3 + 1.0 = 7.0


过激活函数 f: 输出 = f(7.0)

图说:一个神经元的全部计算就这两步。
换 x = 0,得 z = 1.0;换 x = −2,得 z = −3.0。
网络训练调的就是 w 和 b 这两个数。

「训练」这个词现在可以定义了: 调整网络里所有权重和偏置, 直到网络的输出与标准答案的差距(行话叫损失,loss)尽可能小。 怎么调是第 05 章的事;本章只负责零件。

3. 为什么必须有非线性:一层线性套一百层还是一层

陷阱在这里: 如果每个神经元只做加权求和、什么都不加, 那么一百层叠起来仍然等价于一层—— 线性变换套线性变换,数学上还是一次线性变换,千层网络和一条直线没有区别3

药方就是激活函数(activation function):在每层加权求和之后,过一个非线性的函数, 把「直」掰「弯」。掰弯之后,层层叠加才真正叠加出复杂形状。

sigmoid:曾经的主角,为什么退位

sigmoid 把任何输入压进 0 到 1:S 形曲线,z 很负时趋近 0、很正时趋近 14。 它在早期网络里是标配——输出看着像概率,曲线处处平滑。

它的死穴叫梯度消失(vanishing gradient:误差信号从输出层往回传时逐层衰减, 深层的参数几乎收不到「该怎么调」的信号,学不动)。原书说得很直接: sigmoid 的导数在输入很大或很小时趋近零——曲线两端是平的, 平的地方「往哪边调」的信号就是零,层层相乘之后整个网络尾部失聪5

ReLU:一条折线救了深度学习

ReLU(rectified linear unit)简单到粗暴:负数归零,正数原样通过,f(x) = max(0, x)6

sigmoidReLU
正区导数最大 0.25,两端趋 0恒等于 1(信号不衰减)
负区输出接近 0 但导数也接近 0输出 0,导数 0
计算量指数(带 e 的乘方)运算一次比较

原书点出 ReLU 的两个好处:缓解梯度消失(正区导数恒 1,信号原样往回传)、 产生稀疏(多数输出恰好为零)的激活——一部分神经元输出恰好是 0、不参与本轮计算7

ReLU 的病和药: 负区永远输出 0 也意味着——一个神经元的输入如果长期落在负区, 它就永远收不到梯度、永远学不了,行话叫「dying ReLU」(死掉的 ReLU)。 leaky ReLU 的修法是给负区留一条小缝:负数不再归零,而是乘一个很小的斜率 α(典型值 0.01)再通过,f(x) = max(αx, x)8。缝虽小,梯度能渗回来,神经元就死不了。

4. softmax:把一串打分变成概率

分类任务的最后一步有个特殊需求:输出要像概率——每个类别一个数,全部非负、加起来等于 1。 softmax 就是干这个的:对一串打分,先逐个取指数(保证非负),再除以总和(保证和为 1)9

网络最后一层的原始打分: [猫 5.0, 狗 2.0, 鸟 0.5]
取指数: [148.4, 7.4, 1.6]
除以总和 157.4: [0.94, 0.05, 0.01]

图说:猫的打分最高,softmax 之后占了 94% 的概率质量。
这三个数(指数后的占比)是为演示编的,softmax 公式本身来自原书。
分类的判决规则和第 02 章一样:挑概率最大的那个。

分工到这一步就齐了:输出层是回归任务,用线性单元(不加激活); 二分类,用一个 sigmoid;多分类,用 softmax——原书 3.1 节对输出层的交代就是这三句10

5. 层的三种形态:全连、卷积、循环

神经元堆成(layer),层与层之间怎么接,决定了网络的性格。原书 3.2 节末尾给了三种11:

层形态接法擅长详在第
全连接层(dense:前一层每个神经元连到后一层每个神经元)全都互相连表格数据、最后的分类头本 04 章与 05 章
卷积层一小片一小片地扫,同一套权重反复用图像06-07 章
循环层输出绕回输入,带一个「上一步的状态」文本、时序08 章

一个数字感受全连接的规模:原书 3.2 节的示例层是 10 入 5 出, 仅权重矩阵就要 50 个数;第 06 章会算,图像任务上全连接的参数量是万亿级—— 这就是为什么图像不该用全连接12

顺带记一个设计常识(原书 3.1 节):输入层不做任何计算,只负责把数据递进来; 输出层的神经元数由任务定——二分类 1 个、k 分类 k 个、回归 1 个13隐藏层(夹在输入与输出之间、结果没人直接看的层)为什么叫隐藏?因为它们的中间结果没人直接看,「隐藏」说的是这个14

6. 作者的判断与证据

  • 本章是原书第 3 章工程纪律最好的一节: 3.2 的每个组件(线性、sigmoid、ReLU、 leaky ReLU、softmax、dense、卷积、LSTM)都配了一段能独立运行的 NumPy 手写实现, 概念与代码一致——这与其他节的「贴错代码」形成对照15
  • 要带的怀疑: 原书对「激活函数为什么是非线性的」只有一句断言 (「没有非线性激活,网络只能表达线性关系」),没有给出本节第 3 节的展开论证; 对「稀疏激活」为何有益也只有断言没有证据16。概念本身是学界共识,可用;论证要补——我们补了。
  • 排版硬伤一处: 3.2.2 的 sigmoid 公式在转码文本里丢了分子(只见分母 1+e^(−x)); 以 3.2 节代码里的 1 / (1 + np.exp(-x)) 为准——代码是对的17

判断(我们的,不是书里的): 把本章和第 02 章放在一起看,会发现一条暗线: 线性回归其实就是一个「没有隐藏层的神经网络」——同样加权求和、同样可调系数、 同样靠数据驱动。深度学习真正多出来的不是「网络」这个形式, 而是「隐藏层 + 非线性」带来的层级特征学习(第 01 章说的表示学习)。 如果错,会错在: 如果严格按「是否用梯度下降(沿最陡方向小步调参数)来训练」来定义「神经网络」, 线性回归确实也在其中;但工程语境里「神经网络」通常默认含隐藏层—— 词的边界本来如此,分歧在措辞不在机制。

7. 边界与局限

  • 本章没有讲「训练」: 权重从哪来、怎么调,原书放在 3.3 与 3.6,我们放在第 05 章。

  • 原书没覆盖的零件: tanh 的细节(只在梯度消失处带过一笔)。还有几个只被点名没展开的:pooling、dropout(训练时随机掐掉一部分单元)、batch normalization。

    batch normalization——batch 即同一瞬间一起喂进网络的一小撮样本;此法把每层输入拉回稳定范围(这个动作叫归一化)——会在第 09 章 GAN 那一章里补上它解决什么问题。

  • 时代注脚: sigmoid 作为隐藏层激活已成历史(只活在输出层),原书如实记录了这一点; 补充(不在书里,来自通用知识):今天新架构里更常见的是 GELU 等变体。原书没讲,读别的材料时会撞见,别慌,它们都在解决 本章讲的同一件事:把线掰弯。

8. 可带走的

  1. 神经元 = 加权求和 + 激活函数,两步,没有更多;权重和偏置就是「可以调的数」;
  2. 没有非线性激活,一百层等价于一层——激活函数存在的唯一理由;
  3. sigmoid 死于梯度消失(两端导数趋 0);ReLU 靠「正区导数恒 1」上位;
  4. dying ReLU:神经元若长期落在负区就永久失学;leaky ReLU 用 α=0.01 的小斜率留活口;
  5. 输出层按任务选零件:回归→线性,二分类→sigmoid,多分类→softmax;
  6. 输入层不计算,输出层神经元数=任务决定,隐藏层因「没人直接看」得名;
  7. 三种层形态(全连/卷积/循环)= 后面三章的目录;
  8. 线性回归 ≈ 没有隐藏层的神经网络——深度学习多出的是层级特征学习,不是「网络」这个词。

9. 原文地图

主题原书章原文位置
神经元/权重定义3.1 Foundations of Neural Networkstext/26-ch03-01-3-1-foundations-of-neural-networks.txt:6(搜「mathematical model」) · text/26-ch03-01-3-1-foundations-of-neural-networks.txt:10(搜「synaptic」)
输入/隐藏/输出层3.1 Foundations of Neural Networkstext/26-ch03-01-3-1-foundations-of-neural-networks.txt:58(搜「three main components」)
输入层不算3.1 Foundations of Neural Networkstext/26-ch03-01-3-1-foundations-of-neural-networks.txt:65(搜「does not perform」)
隐藏层得名3.1 Foundations of Neural Networkstext/26-ch03-01-3-1-foundations-of-neural-networks.txt:68(搜「called」)
输出层按任务定3.1 Foundations of Neural Networkstext/26-ch03-01-3-1-foundations-of-neural-networks.txt:81(搜「depends on the type」)
输出层激活选择3.2 Types of Units/Activation Functions/Layerstext/27-ch03-02-3-2-types-of-units-activation-functions-layers.txt:4(搜「choice of activation」)
线性单元 w=2.0 b=1.03.2 Types of Units/Activation Functions/Layerstext/27-ch03-02-3-2-types-of-units-activation-functions-layers.txt:43(搜「2.0」) · text/27-ch03-02-3-2-types-of-units-activation-functions-layers.txt:24(搜「weighted sum」)
sigmoid 曾主力3.2 Types of Units/Activation Functions/Layerstext/27-ch03-02-3-2-types-of-units-activation-functions-layers.txt:84(搜「commonly used」)
sigmoid 代码实现3.2 Types of Units/Activation Functions/Layerstext/27-ch03-02-3-2-types-of-units-activation-functions-layers.txt:94(搜「np.exp」)
ReLU 定义与好处3.2 Types of Units/Activation Functions/Layerstext/27-ch03-02-3-2-types-of-units-activation-functions-layers.txt:124(搜「max(0, x)」) · text/27-ch03-02-3-2-types-of-units-activation-functions-layers.txt:85(搜「vanishing gradient」)
dying ReLU 与 leaky3.2 Types of Units/Activation Functions/Layerstext/27-ch03-02-3-2-types-of-units-activation-functions-layers.txt:168(搜「dying ReLU」) · text/27-ch03-02-3-2-types-of-units-activation-functions-layers.txt:170(搜「0.01」)
softmax 和为 13.2 Types of Units/Activation Functions/Layerstext/27-ch03-02-3-2-types-of-units-activation-functions-layers.txt:214(搜「softmax unit」) · text/27-ch03-02-3-2-types-of-units-activation-functions-layers.txt:223(搜「sum up to 1」)
dense 全连接3.2 Types of Units/Activation Functions/Layerstext/27-ch03-02-3-2-types-of-units-activation-functions-layers.txt:267(搜「Dense Layer」)
卷积层与参数共享3.2 Types of Units/Activation Functions/Layerstext/27-ch03-02-3-2-types-of-units-activation-functions-layers.txt:325(搜「Convolutional Layer」) · text/27-ch03-02-3-2-types-of-units-activation-functions-layers.txt:330(搜「parameter sharing」)
循环层带隐状态3.2 Types of Units/Activation Functions/Layerstext/27-ch03-02-3-2-types-of-units-activation-functions-layers.txt:401(搜「hidden states」)
无非线性只剩线性(书中断言处)1 Introduction to Deep Learningtext/06-ch01-1-introduction-to-deep-learning.txt:607(搜「Non-Linear Activation」)
梯度消失再确认(tanh 例)3.3 Optimization and Deep Learningtext/28-ch03-03-3-3-optimization-and-deep-learning.txt:295(搜「tanh」) · text/28-ch03-03-3-3-optimization-and-deep-learning.txt:298(搜「saturates」)
ReLU 导数恒 13.3 Optimization and Deep Learningtext/28-ch03-03-3-3-optimization-and-deep-learning.txt:305(搜「1 for positive values」)

Footnotes

  1. 出处:「3.1 Foundations of Neural Networks」第 6 段(text/26-ch03-01-3-1-foundations-of-neural-networks.txt:6,搜「mathematical model」)与第 10 段(text/26-ch03-01-3-1-foundations-of-neural-networks.txt:10,搜「synaptic」)。原文:网络通过调整连接强度(synaptic weights)来学习。

  2. 出处:「3.2 Types of Units/Activation Functions/Layers」第 43 段(text/27-ch03-02-3-2-types-of-units-activation-functions-layers.txt:43,搜「2.0」)。代码:weight = 2.0,bias = 1.0;线性单元公式 f(x) = wx + b 在第 24 段。

  3. 出处:「1 Introduction to Deep Learning」第 607 段(text/06-ch01-1-introduction-to-deep-learning.txt:607,搜「Non-Linear Activation」)。原书断言:「Without nonlinear activation functions, the network would be limited to representing linear relationships」——书只给了断言,「线性套线性仍线性」这层展开是我们的补充(不在书里,来自通用知识)。

  4. 出处:「3.2 Types of Units/Activation Functions/Layers」第 77 段(text/27-ch03-02-3-2-types-of-units-activation-functions-layers.txt:77,搜「sigmoid unit」)。原文:sigmoid 又称 logistic function,把输入映到 0-1 之间,可当概率解读。

  5. 出处:「3.3 Optimization and Deep Learning」第 295 段(text/28-ch03-03-3-3-optimization-and-deep-learning.txt:295,搜「tanh」)与第 298 段(搜「saturates」)。原书以 tanh 为例讲饱和:输入大时导数趋近零、梯度逐层消失;sigmoid 同理(3.2 第 84 段:text/27-ch03-02-3-2-types-of-units-activation-functions-layers.txt:85,搜「vanishing gradients」)。

  6. 出处:「3.2 Types of Units/Activation Functions/Layers」第 124 段(text/27-ch03-02-3-2-types-of-units-activation-functions-layers.txt:124,搜「max(0, x)」)。

  7. 出处:「3.2 Types of Units/Activation Functions/Layers」第 85 段(text/27-ch03-02-3-2-types-of-units-activation-functions-layers.txt:85,搜「vanishing gradient」)。原文:ReLU 广泛采用,因为能缓解梯度消失并促进稀疏激活。「稀疏激活为何有益」原书未展开。

  8. 出处:「3.2 Types of Units/Activation Functions/Layers」第 168 段(text/27-ch03-02-3-2-types-of-units-activation-functions-layers.txt:168,搜「dying ReLU」)与第 170 段(text/27-ch03-02-3-2-types-of-units-activation-functions-layers.txt:170,搜「0.01」)。原文:leaky ReLU 给负输入一条小斜率,α 典型 0.01。

  9. 出处:「3.2 Types of Units/Activation Functions/Layers」第 214 段(text/27-ch03-02-3-2-types-of-units-activation-functions-layers.txt:214,搜「softmax unit」)与第 223 段(搜「sum up to 1」)。公式:对每个类取指数后除以所有类的指数之和。

  10. 出处:「3.2 Types of Units/Activation Functions/Layers」第 4 段(text/27-ch03-02-3-2-types-of-units-activation-functions-layers.txt:4,搜「choice of activation」)。原文:分类任务用 sigmoid 或 softmax,回归任务用线性函数。

  11. 出处:「3.2 Types of Units/Activation Functions/Layers」第 267 段(text/27-ch03-02-3-2-types-of-units-activation-functions-layers.txt:267,搜「Dense Layer」)、第 325 段(搜「Convolutional Layer」)、第 399 段(搜「hidden states」)。第 479 段还有一句:池化、dropout、批归一化等专用层「服务于特定用途」,全书未展开。

  12. 出处:「3.2 Types of Units/Activation Functions/Layers」第 293 段(text/27-ch03-02-3-2-types-of-units-activation-functions-layers.txt:293,搜「input_size = 10」)。示例层 10 入 5 出。万亿级参数量的推导在 text/41-ch04-4-convolutional-neural-networks.txt:352(搜「10」),第 06 章完整走一遍。

  13. 出处:「3.1 Foundations of Neural Networks」第 65 段(text/26-ch03-01-3-1-foundations-of-neural-networks.txt:65,搜「does not perform」)与第 79 段(搜「depends on the type」)。原文:输入层不做计算只传递;输出层神经元数二分类可 1 个、多分类每类 1 个。

  14. 出处:「3.1 Foundations of Neural Networks」第 68 段(text/26-ch03-01-3-1-foundations-of-neural-networks.txt:68,搜「called」)。原话:隐藏层得名于「their computations are not directly observable」。

  15. 出处:「3.2 Types of Units/Activation Functions/Layers」第 92 段(text/27-ch03-02-3-2-types-of-units-activation-functions-layers.txt:92,搜「SigmoidUnit」)起,各组件实现依次为 LinearUnit(:34)、SigmoidUnit(:92)、ReLUUnit(:135)、LeakyReLUUnit(:178)、SoftmaxUnit(:231)、DenseLayer(:278)、ConvolutionalLayer(:339)、LSTM(:410)。

  16. 出处:「3.2 Types of Units/Activation Functions/Layers」第 85 段(text/27-ch03-02-3-2-types-of-units-activation-functions-layers.txt:85,搜「vanishing gradient」)。原书对 ReLU 的两条好处各给一句断言,未论证。

  17. 出处:「3.2 Types of Units/Activation Functions/Layers」第 94 段(text/27-ch03-02-3-2-types-of-units-activation-functions-layers.txt:94,搜「np.exp」)。代码 1 / (1 + np.exp(-x)) 是完整正确的 sigmoid;同章第 81-82 段的印刷公式在转码文本里只剩分母,属排版/提取问题,以代码为准。