freeCodeCamp.org

How Neural Networks Work: Why Straight Lines Aren't Enough

8.5内容质量
How Neural Networks Work: Why Straight Lines Aren't Enough

TL;DR · AI 摘要

非线性激活函数使神经网络能处理复杂数据关系,ReLU和Sigmoid函数分别解决不同场景的建模需求。

核心要点

  • ReLU函数在预测连续值(如考试成绩)时比线性模型更有效
  • Sigmoid函数适合处理二分类问题(如通过/失败判断)
  • 神经网络需要非线性激活才能拟合现实世界的复杂数据模式

结构提纲

按章节快速跳转。

  1. 通过线性方程的局限性引出神经网络需要非线性机制

  2. 用教学案例说明单一线性关系无法拟合真实数据

  3. 介绍分段线性曲线、ReLU和Sigmoid函数的数学特性

  4. 演示如何用ReLU预测分数、用Sigmoid进行分类

  5. 通过教学数据对比不同激活函数的拟合效果

思维导图

用一张图看清主题之间的关系。

查看大纲文本(无障碍 / 无 JS 友好)
  • 神经网络非线性机制
    • 非线性必要性
      • 现实数据复杂性
      • 线性模型局限性
    • 激活函数类型
      • ReLU(分段线性)
      • Sigmoid(S型曲线)
    • 应用场景
      • 回归预测
      • 分类任务

金句 / Highlights

值得收藏与分享的关键句。

#神经网络#机器学习#ReLU#Sigmoid
打开原文

神经网络的工作原理:为什么直线不足以描述关系

2026年10月20日

/

#神经网络

Samyukta Hegde

从直线方程入手是理解神经网络工作原理的良好起点。这正是我在上一篇文章《神经网络的工作原理——使用直线方程(y=ax+b)解释》中探讨的内容。

但如果输入和输出之间的关系不是线性的呢?

我们都知道在现实世界中,数据并不总是遵循直线模式。这正是事情变得有趣的地方:有时单个规则不足以描述变量之间的关系。

这时非线性就派上用场了。它使神经网络能够捕捉数据中的变化行为。

在本文中,我们将探讨能够捕捉数据中复杂关系的非线性概念。通过一个简单的例子,我们将尝试理解分段线性曲线、ReLU函数、S形曲线和Sigmoid函数,以及它们如何帮助神经网络学习直线无法描述的模式。

目录

  • 先决条件
  • 直线何时足够
  • 直线不足时:分段线性曲线 什么是ReLU函数? S形曲线 什么是Sigmoid函数?
  • 建模深度神经网络 使用ReLU预测分数 使用ReLU和Sigmoid预测及格/不及格
  • 总结思考

先决条件

  • 对线性函数的基本理解
  • 对深度神经网络概念的熟悉

直线何时足够

直线方程意味着在整个关系中适用相同的规则。

y = ax + b

code
y => 输出变量
x => 输入变量
a => x变化时y的变化量(斜率)
b => x为0时y的值(y截距)

我们可以通过一个例子来更好地理解。

Poly女士是一位数学老师,她想为学生制定学习计划,帮助他们在期末考试中取得好成绩。她使用一个因素创建了一个经验法则:每周学习的小时数。这意味着学生的得分与他们学习的时间成正比。

基于她的假设,她提出了一个形式为y=ax+b的方程。

code
y => 得分
x => 每周学习的小时数
a => 每学习一小时得分的增加量
b => 没有学习时每个学生能够获得的最低分数

因此,在季度考试后,她采访了学生,收集了他们每周学习数学的小时数信息。她创建了一个包含两列的表格:每周学习的小时数(x)和得分(y),并绘制了它们。

学习小时数

得分

0

40

1

2

41

3

4

48

5

58

6

69

7

80

8

但当她尝试应用这个简单的公式时,发现它似乎与收集到的数据不一致,证明现实生活中的数据很少如此简单直接。

直线何时不足

Poly女士仔细观察图表,发现了一些模式。学习时间较少的学生可能看不到明显进步。一旦他们超过某个临界点,分数开始随着学习时间增加而增长。再次达到某个临界点后,分数趋于稳定。

因此,Poly女士的简单直线方程不足以描述每周学习时间(x)与得分(y)之间的关系。

相反,它可以分为三个部分,

code
少于 t₁ 小时:分数保持不变  
t₁ 到 t₂ 小时:分数随学习时间增加而上升  
超过 t₂ 小时:分数保持不变  

因此,她可以为每个区间分别建立方程,并写成如下形式:

code
y = 第一个方程,x < t₁  
y = 第二个方程,t₁ ≤ x < t₂  
y = 第三个方程,x ≥ t₂  

这个例子让我们首次看到了非线性现象。关系在特定点会发生变化,因此单条直线方程无法描述这种在不同点需要不同行为的特性。

处理这种问题的一个简单方法是使用分段线性函数。

分段线性曲线

为了简化问题,Poly 女士首先只考虑两个区域:

code
区域1:学习时间 < t₁  
区域2:学习时间 ≥ t₁  

在第一个区域,数值围绕某个特定值波动。尽管这些点并不完全在一条直线上,但她可以进行近似,将该区域表示为斜率为 0 的直线。这表明分数大致保持不变。

在第二个区域,似乎存在正斜率。因此她决定用另一条直线方程来描述这条陡峭的上升线。

由于单个方程无法描述上述图形,Poly 女士最终得到了两个方程。随着模式的变化,不同区间的规则也会改变。

因此,她可以这样表示:

code
y = 第一个方程,x < t₁  
y = 第二个方程,x ≥ t₁  

单独来看,这些方程可能都是直线方程。但组合在一起后,整体关系不再是直线。当 x 超过某个特定值时,方程会发生变化。这种特性被称为分段线性函数,它是一种根据不同输入范围采用不同规则的函数。

这个概念出现在神经网络中最常用的激活函数之一:ReLU 中。

什么是 ReLU 函数?

ReLU 的全称是 Rectified Linear Unit。数学表达式如下:

code
y = ReLU(x) = max(0, x)  

它保持正输入不变,将负输入置零。

同样地,每个片段都是线性的,但整体函数是非线性的。因此,ReLU 是一种引入非线性的分段线性函数。

下图展示了 ReLU 函数的图形:

这种简单的行为变化使神经元能够对不同范围的输入做出不同响应,为神经网络提供了超越单一直线关系的能力。

S 型曲线

虽然分段线性曲线已经可以解决问题,但 Poly 女士注意到区域间的过渡非常陡峭。她原本为了简化问题只考虑了两个区域,但实际上分布可以划分为三个区域。

因此,她绘制了一条平滑曲线,大致经过所有点,如下图所示:

这种曲线形状表明,当学生学习时间不超过 t₁ 小时时,分数几乎保持不变。当学习时间从 t₁ 增加到 t₂ 时,分数开始上升,出现斜率。最终在 t₂ 时再次趋于平稳。这种过渡是渐进且连续的,与分段线性曲线通过简单直线改变方向的方式不同。

Poly 女士绘制的曲线并非随机模式,它也可以用数学公式表示。能够生成这种形状的函数之一是Sigmoid 函数。

什么是 Sigmoid 函数?

Sigmoid 函数是一个数学公式,它可以将任何实数值输入映射到 0 到 1 之间的值。该函数从接近 0 的值缓慢增加,在中间部分快速上升,最终逐渐趋于接近 1 的值。

code
y = σ(x) = 1 / (1 + exp(-x))

下面的图表展示了 Sigmoid 函数:

Sigmoid 函数在神经网络中具有重要意义,因为它在引入非线性的同时,还将输出限制在 0 到 1 之间。这使得它在需要输出表示概率的场景中非常有用,例如学生通过考试的可能性。Sigmoid 输出值越高,表示学生通过考试的概率越大,反之亦然。

建模深度神经网络

现在 Ms Poly 需要将线性和非线性方程的概念结合起来,以建模深度神经网络。她需要采取两种不同的方法:

  • 预测考试得分
  • 预测考试通过/不及格

她使用了两个非常简单的未经过训练的神经网络,每个网络都手动选择了权重和偏置。她只是尝试演示计算过程是如何进行的。实际上她不会自己选择这些参数,而是会设置网络,使其在训练过程中通过反复比较预测值和实际值,调整参数以最小化误差。

使用 ReLU 预测分数

#### 步骤 #1:搭建网络

Ms Poly 以以下方式设置深度神经网络:

  • 输入层:此处接收学习的小时数(x)。
  • 隐藏层:对输入应用线性变换和 ReLU。z = w₁x + b₁, = x - 3(w₁=1, b₁=-3)h = ReLU(z) = max(0, z)
  • 输出层:对隐藏层的输出(h)应用线性变换后预测得分。ŷ = w₂h + b₂ = 10h + 40(w₂=10, b₂=40)

#### 步骤 #2:计算预测分数

假设她要计算学习 5 小时的学生的得分,计算过程如下:

code
z = w₁x + b₁, = x - 3 = 5 - 3 = 2
h = ReLU(z) = max(0, z) = max(0, 2) = 2

最后计算预测得分:

code
ŷ = w₂h + b₂ = 10h + 40 = 10(2) + 40 = 60

神经网络预测得分为 60,而数据集中的实际得分为 58。

#### 步骤 #3:将预测结果与实际得分进行比较

在 Ms Poly 获取神经网络预测的所有得分后,她将其与下表中的实际数据进行比较:

预测得分

50

60

70

90

预测得分与实际得分并不完全一致,但它们非常接近。得分持续增加且最终没有趋于平稳,这是因为 ReLU 阈值后值持续增加。

通过这个例子,Ms Poly 演示了 ReLU 如何帮助在数据中建模非线性关系。

使用 ReLU 和 Sigmoid 预测通过/不及格

在此,Ms Poly 将使用神经网络来预测学生是否通过最终考试。她假设学生需要至少获得 50 分才能通过。这个网络将用于预测通过考试的概率。

#### 步骤 #1:搭建网络

  • 隐藏层:对输入应用线性变换和 ReLU。z₁ = w₁x + b₁, = x - 4(w₁=1, b₁=-4)h = ReLU(z₁) = max(0, z₁)
  • 输出层:在对隐藏层输出(h)的线性变换应用sigmoid激活函数后预测通过/未通过结果。z₂ = w₂h + b₂ = 2h - 1(w₂=2,b₂=-1)p = σ(z₂) = 1 / (1 + exp(-z₂)) ŷ = 通过,如果 p >= 0.5 ŷ = 未通过,如果 p < 0.5

步骤 #2:计算通过/未通过预测

假设她要预测一个学习3小时的学生的结果,以下是她的计算过程:

code
z₁ = w₁x + b₁, = x - 4 = 3 - 4 = -1
h = ReLU(z₁) = max(0, z₁) = max(0, -1) = 0

预测学生是否通过:

code
z₂ = w₂h + b₂ = 2h - 1 = 2(0) - 1 = -1
p = σ(z₂) = 1 / (1 + exp(-z₂)) = 1 / (1 + exp(-(-1))) ≈ 0.269

由于 0.269 < 0.5,该学生的结果为未通过。

现在预测学习5小时的学生结果:

code
z₁ = w₁x + b₁, = x - 4 = 5 - 4 = 1
h = ReLU(z₁) = max(0, z₁) = max(0, 1) = 1
code
z₂ = w₂h + b₂ = 2h - 1 = 2(1) - 1 = 1
p = σ(z₂) = 1 / (1 + exp(-z₂)) = 1 / (1 + exp(-1)) ≈ 0.731

由于 0.731 > 0.5,该学生的结果为通过。

步骤 #3:将预测结果与实际结果进行对比

实际结果

预测分数

预测结果

未通过

0.269

通过

0.731

0.953

0.993

0.999

在这个示例中,网络正确分类了所有学生的结果。当学习时间超过4小时时,预测分数增加,通过预测的可能性也随之提高。

通过这个示例,Ms Poly 展示了 ReLU 和 sigmoid 如何协同工作。ReLU 在隐藏层中转换输入,而 sigmoid 将输出转换为可用于通过/未通过预测的分数。

最后思考

上述简单示例帮助我们理解神经网络的一个重要规则:输入不同部分的输出和输入之间的关系可能表现不同。为了从真实数据中产生有意义的结果,这些关系需要被准确捕捉。

当数据中的关系简单且一致时,直线方程就足够了。但现实数据并不总是如此直接。通过引入非线性,神经网络可以超越直线关系,学习数据中隐藏的复杂关系。

推荐课程(来自我们的合作伙伴)

(在新标签页中打开)

广告

  • Coursera 《中级学习者简明统计学》Di Wu 24周 24周,每周10小时 初学者 证书 查看课程(在新标签页中打开)
  • Coursera 《2023深度学习速成课程》Packt - 课程讲师 17周 17周,每周1小时 初学者 证书 查看课程(在新标签页中打开)
  • Coursera 《深度学习与神经网络基础》Packt - 课程讲师 6周 6周,每周2小时 中级 证书 查看课程(在新标签页中打开)
  • Udemy 《Python神经网络:深度学习入门》Start-Tech Academy 4.6(1,920人评分) 9小时21分钟 初学者 证书 查看课程(在新标签页中打开)

更多深度学习课程请访问 Class Central

→

阅读更多文章。

如果这篇文章对你有帮助,请分享。

免费学习编程。freeCodeCamp 的开源课程已帮助超过40,000人成为开发者。立即开始