📉 1. 感知机


来源:《深度学习笔记》— 1. 感知机


1.1 感知机的构成

1️⃣ 权重的引入:刻画输入的重要性

权重相当于电流里所说的电阻。电阻是决定电流流动难度的参数,电阻越低,通过的电流就越大。而感知机的权重则是值越大,通过的信号就越大。

对每一个输入分量,引入一个对应的权重,权重向量为:

w=(w1,w2)T\mathbf{w} = (w_1, w_2)^{\mathrm{T}}

权重的作用是 衡量每个输入在最终决策中的影响程度。感知机首先对输入进行线性加权求和:

s=w1x1+w2x2s = w_1 x_1 + w_2 x_2

这一过程在几何上等价于计算输入向量 xx 在权重向量 ww 方向上的投影强度。若没有权重,模型只能"平等地"看待所有输入,显然不具备表达能力。

2️⃣ 偏置的引入:平移决策边界

如果仅使用加权和 w1x1+w2x2w_1 x_1 + w_2 x_2,模型的判决边界一定经过原点,这在实际问题中是极其受限的。

因此引入一个偏置(bias) bb

s=w1x1+w2x2+bs = w_1 x_1 + w_2 x_2 + b

偏置的本质作用是 调整激活阈值,使模型在输入全为 0 时仍可产生非零响应

从几何角度看:

  • 决策边界为 w1x1+w2x2+b=0w_1 x_1 + w_2 x_2 + b = 0
  • 权重 (w1,w2)(w_1, w_2) 决定超平面的方向
  • 偏置 bb 决定超平面的位置(平移量)

3️⃣ 激活函数:从连续到离散

激活函数的本质作用是 决定如何来激活输入信号的总和,将输入信号的总和转化为输出信号

经典感知机仅使用阶跃函数(符号函数):

y={1,w1x1+w2x2+b00,w1x1+w2x2+b<0y = \begin{cases} 1, & w_1 x_1 + w_2 x_2 + b \ge 0 \\ 0, & w_1 x_1 + w_2 x_2 + b < 0 \end{cases}

这一设计体现了感知机的本质:对输入空间进行线性可分的二分类判定


1.2 感知机的实现

代码并不知道什么是 AND,它只是在判断一个点是否落在某条直线的某一侧——这属于线性代数 + 数值判别的层面。

1️⃣ 与门、或门、与非门

def AND(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5])  # 权重为正:输入越大,越"有利于"输出 1
    b = -0.7                  # 偏置为负:输入较小时倾向输出 0
    tmp = np.sum(w * x) + b
    return 0 if tmp <= 0 else 1
def OR(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5])
    b = -0.2                  # 偏置较小:仅一个输入为 1 时即可输出 1
    tmp = np.sum(w * x) + b
    return 0 if tmp <= 0 else 1
def NAND(x1, x2):
    x = np.array([x1, x2])
    w = np.array([-0.5, -0.5])  # 权重为负:输入越大,越"不利于"输出 1
    b = 0.7
    tmp = np.sum(w * x) + b
    return 0 if tmp <= 0 else 1

2️⃣ 异或门:单层感知机无法实现

异或(XOR)无法由单个感知机实现,原因是:

异或函数在输入空间中是线性不可分的,而单个感知机本质上只能实现线性可分的二分类。

从几何视角看

单层感知机的决策边界必然是直线 w1x1+w2x2+b=0w_1 x_1 + w_2 x_2 + b = 0。然而对 XOR:

  • 正类点 (0,1)(0,1)(1,0)(1,0) 分处两侧
  • 负类点 (0,0)(0,0)(1,1)(1,1) 也分处两侧

无论这条直线如何旋转或平移,总会出现至少一个正类与负类被分到同一侧。这是拓扑层面的不可能性

从代数视角看

假设存在参数满足所有约束:

{b0,(0,0)0w1+b>0,(1,0)1w2+b>0,(0,1)1w1+w2+b0,(1,1)0\begin{cases} b \le 0, & (0,0) \rightarrow 0 \\ w_1 + b > 0, & (1,0) \rightarrow 1 \\ w_2 + b > 0, & (0,1) \rightarrow 1 \\ w_1 + w_2 + b \le 0, & (1,1) \rightarrow 0 \end{cases}

中间两式相加得 w1+w2+2b>0w_1 + w_2 + 2b > 0,与最后一式 w1+w2+b0w_1 + w_2 + b \le 0 相减得 b>0b > 0,与第一条 b0b \le 0 矛盾。

不存在任何实数解 (w1,w2,b)(w_1, w_2, b)


1.3 感知机的本质:线性可分性

所有线性可分的逻辑函数,都可以由单个感知机通过调整权重与偏置实现。

  • AND、OR、NAND 都可以用单层感知机实现
  • XOR、XNOR 线性不可分,单层无论如何调参都无法实现
  • 必须引入多层结构(如 NAND + OR + AND 组合)

1.4 多层感知机的引入

1.4.1 单感知机的局限

单个感知机的决策函数为:

y=step(wTx+b)y = \text{step}(w^T x + b)

决策边界永远是一个线性超平面。这不是参数问题,而是模型假设空间过小的问题。

多感知机的核心思想:

用多个线性判别的组合,构造非线性决策边界。

1.4.2 多感知机的基本结构

多感知机至少包含三层:

  1. 输入层:仅负责传递输入
  2. 隐藏层:由多个感知机组成,进行中间特征变换
  3. 输出层:对隐藏层结果进行最终判决

以两输入、一隐藏层、两隐藏单元、一输出单元为例:

(x1,x2)(h1,h2)y(x_1, x_2) \longrightarrow (h_1, h_2) \longrightarrow y

理论上 2 层感知机(严格地说是激活函数使用了非线性 sigmoid 的感知机)可以表示任意函数。

1.4.3 从"一条直线"到"分段线性"

  • 单个感知机:一条直线 / 一个超平面
  • 两层感知机:多条直线组合,形成折线、多边形区域
  • 多层感知机:任意复杂的分段线性近似

换一种说法:隐藏层的每一个感知机,都在重新切割输入空间

这就是通用逼近定理:只要隐藏层神经元数量足够,多感知机可以逼近任意连续函数。它奠定了神经网络作为通用建模工具的理论基础。

1.4.4 XOR:多感知机的"入门级胜利"

一种典型结构:

  • 隐藏层 1:实现 OR
  • 隐藏层 2:实现 NAND
  • 输出层:对二者结果做 AND

逻辑表达式:

x1x2=(x1x2)¬(x1x2)x_1 \oplus x_2 = (x_1 \vee x_2) \wedge \neg(x_1 \wedge x_2)

这说明:XOR 并非"本质上复杂",而是需要分阶段判断。