前言

上一篇文章里,我讲了深度学习训练过程中的向前传播和向后传播。但继续往下学,一个问题迟早会出现:神经网络为什么一定要有激活函数?

因为从表面上看,每一层都在做类似 z = Wx + b 的计算。
那问题来了:

  • 如果每一层都只是线性计算,多堆几层不就行了吗?
  • 为什么还必须额外加入激活函数?
  • 这里的“非线性”到底重要在哪?

这篇文章,我就想结合一张图,把这个问题彻底讲清楚。

在这里插入图片描述
先说结论:
激活函数最核心的作用,不是“多一个函数”,而是给神经网络引入非线性能力。

如果没有激活函数,那么无论网络堆多少层,本质上都还是一个线性模型。
也就是说:没有激活函数,多层网络只是“看起来更深”;有了激活函数,深度才真正变成能力。


一、没有激活函数,多层网络为什么还是不够?

先看图左边,它表示的是:没有激活函数的神经网络。

结构上看,它也有:

  • 输入层
  • 隐藏层
  • 输出层

但问题在于:层与层之间只有线性计算。

也就是说,每一层都在做:z=Wx+b

这会带来三个直接后果:

  • 只有线性计算
  • 表达能力有限
  • 决策边界只能是直线

看起来层数很多,但本质上能力并没有真正提升。

二、关键问题:多层线性,真的更强吗?

很多人直觉会觉得:

  • 一层不够 → 堆两层
  • 两层不够 → 堆三层
  • 层数越多 → 能力越强

但这里有一个非常反直觉的结论:

如果每一层都是线性计算,那么无论堆多少层,最后仍然等价于一层线性模型。

1、数学证明:多层线性=一层线性

在这里插入图片描述

2、伪代码解释

我们用伪代码再看一遍。

❌ 没有激活函数

x = input_data

h1 = W1 @ x + b1
h2 = W2 @ h1 + b2
y  = W3 @ h2 + b3

看起来是三层网络,但本质上,它可以被压缩成:y = W @ x + b

👉 层数只是“写多了几行代码”,并没有带来本质能力提升。

三、有了激活函数,真正的变化发生了

1、数学证明:

在这里插入图片描述

2、伪代码类比

❌ 不加激活函数

x = input_data
h1 = W1 @ x + b1
h2 = W2 @ h1 + b2
y  = W3 @ h2 + b3

✅ 加入激活函数

x = input_data
h1 = relu(W1 @ x + b1)
h2 = relu(W2 @ h1 + b2)
y  = sigmoid(W3 @ h2 + b3)

区别只在一件事:

中间多了非线性函数(relu / sigmoid)

但正是这个变化,让网络能力发生质变。

四、❗️重点 为什么现实问题一定需要“非线性”?

回到现实任务,如果数据很简单,比如:👉 两类点可以用一条直线分开

那线性模型就够了,但现实世界不是这样:

  • 图片里的猫 vs 非猫
  • 用户行为模式
  • 语音、文本

这些问题的本质都是:复杂、非线性、高维结构,如果模型只能画“直线”,那它永远学不会这些规律。而激活函数带来的非线性能力,让模型可以:

  • 学习弯曲的决策边界
  • 组合复杂特征
  • 一层层抽象信息

这就是为什么图右边的边界是“曲线”,而不是“直线”。

1、什么叫“两类点可以用一条直线分开”?

先别想猫、语音、文本,先想最简单的二维平面。

假设有两类数据点:

  • 蓝色点
  • 绿色点

如果它们长这样:

  • 蓝色点都在左边
  • 绿色点都在右边

那你只要画一条直线,就能把它们分开。

比如:
蓝 蓝 蓝 | 绿 绿 绿
蓝 蓝 蓝 | 绿 绿 绿
在这里插入图片描述

这时候,一条线就够了,这类问题就叫:线性可分问题
也就是:数据可以被一条直线(二维)、一个平面(三维)或一个超平面(更高维)分开。

2、什么叫“线性模型就够了”

线性模型本质上做的事情很简单:根据输入特征,算一个线性分数,再决定属于哪一类。

比如最常见的形式:y=Wx+b

它的意思你可以理解成:

  • 把输入特征乘上权重
  • 加起来
  • 再加个偏置
  • 最后看结果落在哪边

这个“落在哪边”,其实就对应一条分界线。

所以线性模型最擅长的,就是:用一条直线或者一个平面来切分类别。

如果你的数据本来就能被一条直线分开,那它就很好用。
在这里插入图片描述

3、为什么现实世界的问题不是这样

现在回到真实任务,比如“猫 vs 非猫”。

你可能会想:

  • 猫有耳朵
  • 猫有胡须
  • 猫有眼睛

但问题是,现实中的图片并不会整整齐齐排好,让你一条线就分开:

  • 有些猫只露半张脸
  • 有些非猫物体也可能有相似轮廓
  • 光线、角度、背景都不一样
  • 猫的形状变化也很大

所以“猫”和“非猫”的分布,通常不是这种简单情况:

猫 猫 猫 | 非猫 非猫 非猫
猫 猫 猫 | 非猫 非猫 非猫

更可能是:

一部分猫在这里
一部分非猫在那边
有的区域还互相交叉
特征之间的关系也不是简单加法

这时候,你就没法靠“一条直线”把它们干净分开。

4、什么叫“复杂、非线性、高维结构”

这三个词其实是在形容真实数据的难度。

(1) 复杂

意思是:规律不是一句简单规则就能说清的。

比如猫的判断,不是“有耳朵就是猫”这么简单。
因为狗也有耳朵,兔子也有耳朵。

真正的判断往往是:

  • 耳朵形状
  • 眼睛位置
  • 脸部比例
  • 胡须纹理
  • 整体轮廓

这些东西要组合起来看,所以叫“复杂”。

(2) 非线性

“非线性”你可以先理解成:输入和结果之间的关系,不是一条直线能表达的。

比如你只有两个特征:

  • x1:耳朵尖不尖
  • x2:胡须明显不明显

如果这两个特征和“是不是猫”的关系很复杂,比如要弯着分、绕着分、组合着分,那这就是非线性关系,也就是说:

  • 不是 x1 越大就一定越像猫
  • 不是 x2 越大就一定越像猫
  • 而是它们某种组合模式才重要

这种关系,线性模型很难表达。

(3) 高维结构

这是说:

真实问题通常不是只有 2 个特征,而是有很多很多特征。

比如一张图片,可能有成千上万个像素点。
即使经过特征提取,也可能有很多维度。

所以真实任务不是二维平面画点那么简单,而是在一个非常高维的空间里做分类。

你虽然看不到这个空间,但模型是在那个空间里学习规律。
在这里插入图片描述

5、为什么“如果模型只能画直线,它永远学不会这些规律”

“画直线”其实就是在比喻:模型只能做线性划分。

如果模型只能线性划分,那它就只能处理这种数据:

  • A 类在一边
  • B 类在另一边
  • 一刀切开

但现实数据常常需要的是:

  • 弯着切
  • 分段切
  • 多层组合后再切

所以如果模型只能线性,它面对复杂任务时就会出现两个问题:

1. 分不开

不管怎么调参数,直线就是分不开。

2. 表达不了

数据背后的真实关系,它根本没有能力表示出来。

这就是为什么只靠线性层,多层堆再多也没用。

在这里插入图片描述

6、什么叫“学习弯曲的决策边界”

决策边界”你可以理解成:模型用来区分两类数据的分界线。

如果是线性模型,这条边界通常就是直线。

如果加入非线性,这条边界就可以变成:

  • 曲线
  • 弯折的线
  • 更复杂的形状

为什么这很重要?因为真实数据分布常常就是需要这种复杂边界才能分开。

所以这句话:学习弯曲的决策边界

本质上就是在说:

模型可以不再局限于“直线分割”,而能用更灵活的方式去区分类别。

7、什么叫“组合复杂特征”

这个特别适合用“猫”的例子理解。

模型一开始看到的,可能只是一些很基础的模式:

  • 边缘
  • 纹理
  • 小块形状

这些都还不是“猫”。但随着层数变深,模型会逐渐组合它们:

  • 边缘 + 边缘 → 局部轮廓
  • 局部轮廓 + 纹理 → 耳朵/眼睛/胡须区域
  • 多个局部结构再组合 → 猫脸、猫身体、整体姿态

这就叫:组合复杂特征

如果没有非线性,这种“逐层组合、逐层抽象”的能力会非常受限。

8、什么叫“一层层抽象信息”

这句话的意思是:
模型前面几层学简单的东西,后面几层学更复杂、更抽象的东西。

比如在图像任务里:

  • 前层:边缘、亮暗、线条
  • 中层:角、纹理、局部形状
  • 后层:耳朵、眼睛、面部轮廓
  • 更后层:完整的猫

所以“一层层抽象”其实就是:

  • 从低级特征走向高级特征
  • 从局部走向整体
  • 从具体像素走向语义概念

而这个过程的前提,就是网络必须有非线性表达能力。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐