从线性分类器到两层神经网络:为什么我们需要非线性?

从线性分类器到两层神经网络:为什么我们需要非线性?

在学习 CS231n 的过程中,前面我们一直在使用线性分类器。它的形式非常简单:

python 复制代码
f = W x

这里的 x 是输入数据,比如一张图片展开后的向量;W 是权重矩阵;f 是每个类别对应的分数。

对于 CIFAR-10 这种 10 分类任务,f 可以理解为模型对 10 个类别分别打出的分数。哪个类别的分数最高,模型就预测它属于哪个类别。

这种模型的优点是简单、直观、计算快。但它也有一个很大的限制:它只能表示线性的分类边界


1. 线性分类器的局限

线性分类器的形式是:

python 复制代码
f = W x

它本质上只做了一次线性变换。

如果数据本身可以用一条直线、一个平面,或者更高维空间中的一个超平面分开,那么线性分类器就可以工作得不错。

但如果数据本身不是线性可分的,线性分类器就会遇到困难。

比如有这样一组二维数据:

  • 红色点集中在中间
  • 蓝色点围在外圈

这种情况下,不管你怎么画一条直线,都无法把中间的红点和外圈的蓝点完全分开。

这就是线性分类器的限制:

它只能在原始输入空间中画线性边界。


2. 用特征变换解决线性不可分问题

如果原始空间中数据线性不可分,我们可以考虑换一个表示方式。

例如,原来每个点用二维坐标表示:

python 复制代码
(x, y)

我们可以把它变换成极坐标:

text 复制代码
(r, θ)

其中:

text 复制代码
r 表示点到原点的距离
θ 表示点相对于原点的角度

在原来的 (x, y) 空间中,红点在中间,蓝点在外面,看起来无法用直线分开。

但是转换到 (r, θ) 空间后,情况就变简单了:

  • 红点的 r 比较小
  • 蓝点的 r 比较大

于是我们只需要根据 r 的大小,就可以把两类点分开。

也就是说:

text 复制代码
原始空间中线性不可分的数据
经过特征变换后
可能在新的特征空间中变得线性可分

这就是非线性特征变换的价值。


3. 两层神经网络在做什么?

两层神经网络可以写成:

python 复制代码
f = W2 max(0, W1 x)

它可以拆成几步来看:

python 复制代码
h = W1 x
h_relu = max(0, h)
f = W2 h_relu

其中:

  • W1 x 是第一层线性变换
  • max(0, W1 x) 是 ReLU 非线性激活函数
  • W2 是第二层线性变换
  • f 是最后输出的类别分数

所以两层神经网络的结构可以理解为:

text 复制代码
输入 x
↓
第一层线性变换 W1x
↓
ReLU 非线性变换 max(0, W1x)
↓
第二层线性变换 W2
↓
输出类别分数 f

4. ReLU 是什么?

ReLU 是一个非常常见的激活函数,定义为:

python 复制代码
ReLU(x) = max(0, x)

它的规则很简单:

text 复制代码
如果 x > 0,输出 x
如果 x <= 0,输出 0

例如:

python 复制代码
[-2, 3, -1, 5]

经过 ReLU 后变成:

python 复制代码
[0, 3, 0, 5]

虽然 ReLU 看起来很简单,但它非常重要,因为它给神经网络引入了非线性。


5. 为什么一定要有非线性?

假设我们没有 ReLU,两层网络就会变成:

text 复制代码
f = W2 W1 x

但是矩阵乘矩阵的结果还是一个矩阵。

也就是说:

text 复制代码
W2 W1 = W

所以:

text 复制代码
f = W2 W1 x = W x

这其实还是一个线性分类器。

所以,如果没有非线性激活函数,即使堆很多层,本质上也只是一个线性模型,表达能力不会真正变强。

真正让神经网络变强的是中间的非线性函数,比如:

text 复制代码
max(0, W1x)

它让模型不再只是简单地画直线,而是可以学习更复杂的决策边界。


6. 从另一个角度理解两层神经网络

两层神经网络可以理解为两件事:

第一层:

text 复制代码
W1 + ReLU

负责学习一个新的特征表示。

第二层:

text 复制代码
W2

负责在新的特征空间里做线性分类。

所以它和我们前面手动做特征变换的思想很像。

只不过以前我们可能手动设计:

text 复制代码
(x, y) → (r, θ)

而神经网络会自己学习:

text 复制代码
x → max(0, W1x)

这就是神经网络的强大之处:

它可以自动学习有用的特征表示。


7. 维度解释

两层神经网络写成:

text 复制代码
f = W2 max(0, W1x)

并且有:

text 复制代码
x ∈ R^D
W1 ∈ R^(H × D)
W2 ∈ R^(C × H)

这里:

  • D 是输入维度
  • H 是隐藏层维度,也就是隐藏层神经元数量
  • C 是类别数量

举个例子,如果是 CIFAR-10:

text 复制代码
D = 3073
C = 10
H = 100

那么:

text 复制代码
x.shape = (3073,)
W1.shape = (100, 3073)
W1x.shape = (100,)
W2.shape = (10, 100)
f.shape = (10,)

最后的 f 就是 10 个类别的分数。


8. 总结

线性分类器的形式是:

text 复制代码
f = W x

它简单高效,但只能学习线性决策边界。

两层神经网络的形式是:

text 复制代码
f = W2 max(0, W1x)

它比线性分类器多了一层隐藏层,并且通过 ReLU 引入了非线性。

这使得模型可以先把输入数据变换到一个新的特征空间,再在这个空间中进行分类。

一句话总结:

线性分类器只能在原始空间中画直线;两层神经网络可以通过隐藏层和非线性激活函数学习新的特征表示,从而处理更加复杂、线性不可分的数据。

相关推荐
xn71333 分钟前
别再把 MCP Roots 当安全沙箱:一个符号链接就能逃逸目录
人工智能·后端·mcp
Nturmoils6 分钟前
不自己造轮子:在小艺开放平台搭一个真实的健康小助手
人工智能
statistican_ABin9 分钟前
中国城市 PM2.5较高浓度风险识别
人工智能
茶马古道的搬运工10 分钟前
AI 深度技能之-解读Multica(一)- 让Agent 变成真·队友
人工智能
YOLO数据集集合11 分钟前
自动驾驶道路视觉开源数据集TT100K工程化使用文档|道路标识目标检测资源|开源数据集分享
人工智能·目标检测·自动驾驶
BerryS3N13 分钟前
Cursor+GitOps:AI驱动的自动化运维新范式
运维·人工智能·自动化
力学与人工智能18 分钟前
POF | 西工大曹文博、张伟伟等:基于时间步进导向的神经网络求解高雷诺数壁湍流问题
人工智能·神经网络·机器学习·高雷诺数·湍流
吾鳴19 分钟前
GPT-5.6实测,OpenAI太良心了!
人工智能
ComputerInBook28 分钟前
opencv 图像处理之边缘检测
图像处理·人工智能·opencv·边缘检测
卡梅德生物科技小能手28 分钟前
卡美德生物科普NGF(神经生长因子):神经系统发育与修复的关键调节因子
经验分享·深度学习·生活