04 神经网络:用隐藏层和激活函数学习非线性表示
这组截图主要连着讲了四件事:线性模型为什么不够、隐藏层到底在补什么、激活函数怎么影响训练,以及多分类任务最后为什么常常接到 softmax。把这几块连起来看,神经网络的基本思路会清楚很多。
1. 为什么线性模型不够
先看最典型的例子:数据的类别边界不是一条直线。

上半部分是非线性分类问题,单靠一条直线没法把两类点干净分开。下半部分说明了一件很重要的事:如果手动加上特征交叉项,比如把两个输入再组合出一个新特征,线性模型就有机会把原来分不开的数据分开。
这也是神经网络出现的动机之一。手工做特征交叉当然可以,但特征一多,组合关系会很快变复杂。神经网络更像是在训练过程中自己学这些中间表示,而不是让我们一个个去猜该构造什么新特征。
2. 节点、权重和隐藏层在做什么
单个神经元可以先看成一个带权重和偏置的计算单元。它先把输入做线性组合,再交给激活函数。
下面这张图里,输入节点、权重、隐藏节点和输出节点的关系就很直观。

如果这里用的是线性激活函数,那它本质上还是线性模型,只是换了一种画法。真正让模型表达能力变强的,是隐藏层加上非线性激活函数。

这张图里,输入先进入 4 个隐藏单元,再传到输出层。可以把隐藏层理解成一组中间特征提取器。原始输入不容易直接分开的模式,先在隐藏层里被重新组合一次,后面的输出层就更容易处理。
所以,“深”不是重点本身。更关键的是:网络可以反复把输入变成新的表示,再在这些表示上继续学习。
3. 激活函数为什么重要
如果每一层都只是线性变换,那无论叠多少层,最后都还能合并成一个线性变换。模型并不会真的更强。所以隐藏层后面必须接非线性。
常见激活函数可以先记这三个:
- sigmoid:输出压到 0 到 1,常见于二分类概率输出。
- tanh:输出压到 -1 到 1,零点附近通常比 sigmoid 更对称。
- ReLU:小于 0 的部分直接变成 0,大于等于 0 的部分保持不变。

上图对应两条常见的 S 形曲线。sigmoid 常被用来表示“属于正类的概率”,tanh 更像一种以 0 为中心的非线性变换。

ReLU 的形式最简单:
它现在很常用,不是因为它“更高级”,而是因为它简单、算得快,而且在很多场景里比 sigmoid、tanh 更不容易让梯度一路传回去时变得特别小。
4. 训练时常见的几个问题
截图里还提到了训练阶段常见的坑,整理成一句话会更好记:
- 梯度消失:靠近输入层的梯度越来越小,前面的层几乎学不动。
- 梯度爆炸:梯度太大,参数更新不稳定,训练容易发散。
- 失效的 ReLU 单元:某些单元长期输出 0,后面几乎不再更新。
这也是为什么很多教程会建议先用 ReLU,再配合合适的学习率、初始化和归一化方法。
另外还有 dropout。它的做法很直接:训练时随机丢掉一部分隐藏单元,不让网络过度依赖某几个固定通路。这样做本质上是在压制过拟合。丢弃比例不是越大越好,0.0 相当于不用 dropout,1.0 等于把所有节点都丢掉,模型就没法学了。
5. 多分类可以先从一对多理解
当类别不止两个时,一个很自然的想法是:把问题拆成多个二分类器。每个分类器只回答一个问题。

这张图里,同一张梨的图片被分别送到 4 个二分类器里,每个分类器都只判断“是不是某一类”。最后哪个分类器最肯定,就把它当作预测结果。
如果把这些二分类器合到一个神经网络里,常见做法是在输出层给每个类别放一个输出节点,并对每个节点单独用 sigmoid。

这时每个输出值都表示“它是不是某一类”的概率。注意这里的几个输出彼此独立,所以它们不一定加起来等于 1。截图里的例子就是这样:模型给出梨的概率 0.84,葡萄的概率 0.07,其他类也各有自己的分数。
这种写法适合多标签任务。也就是说,一张图可能同时属于多个标签,而不是只能二选一地落进某一个类。
6. softmax 解决的是“单标签多分类”
如果任务要求每个样本只能属于一个类别,比如一张水果图只能是苹果、橙子、梨、葡萄中的一个,那就更适合用 softmax。

softmax 可以写成:
这里的意思不复杂:先把每个类别的打分变成正数,再除以总和。这样得到的每个输出都在 0 到 1 之间,而且所有类别的概率加起来正好等于 1。

这张图里,4 个类别的输出分别是 0.19、0.12、0.63、0.06,总和正好是 1。也就是说,模型不是分别回答“是不是苹果”“是不是橙子”,而是在这些类别之间做一次归一化的竞争,最后说“更像哪一个”。
所以可以把两种输出方式放在一起记:
- 多个 sigmoid:每个类别单独判断,适合多标签。
- 一个 softmax 层:所有类别一起归一化,适合单标签多分类。
如果一张图里可能同时有苹果和橙子,就不该用 softmax,而应该回到多个独立的 sigmoid 输出。
7. 复习时先抓住这几句
- 神经网络不是凭空变强,关键在于隐藏层学到新的中间表示。
- 激活函数提供非线性,没有它,多层网络还是线性模型。
- ReLU 常用,是因为它简单,也更不容易碰到严重的梯度消失。
- 多分类先分清楚是不是单标签任务,这一步会直接决定输出层该用 sigmoid 还是 softmax。
Comments
Quiet notes for this article.