📉 1. 感知机
来源:《深度学习笔记》— 1. 感知机
1.1 感知机的构成
1️⃣ 权重的引入:刻画输入的重要性
权重相当于电流里所说的电阻。电阻是决定电流流动难度的参数,电阻越低,通过的电流就越大。而感知机的权重则是值越大,通过的信号就越大。
对每一个输入分量,引入一个对应的权重,权重向量为:
权重的作用是 衡量每个输入在最终决策中的影响程度。感知机首先对输入进行线性加权求和:
这一过程在几何上等价于计算输入向量 在权重向量 方向上的投影强度。若没有权重,模型只能"平等地"看待所有输入,显然不具备表达能力。
2️⃣ 偏置的引入:平移决策边界
如果仅使用加权和 ,模型的判决边界一定经过原点,这在实际问题中是极其受限的。
因此引入一个偏置(bias) :
偏置的本质作用是 调整激活阈值,使模型在输入全为 0 时仍可产生非零响应。
从几何角度看:
- 决策边界为
- 权重 决定超平面的方向
- 偏置 决定超平面的位置(平移量)
3️⃣ 激活函数:从连续到离散
激活函数的本质作用是 决定如何来激活输入信号的总和,将输入信号的总和转化为输出信号。
经典感知机仅使用阶跃函数(符号函数):
这一设计体现了感知机的本质:对输入空间进行线性可分的二分类判定。
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)无法由单个感知机实现,原因是:
异或函数在输入空间中是线性不可分的,而单个感知机本质上只能实现线性可分的二分类。
从几何视角看:
单层感知机的决策边界必然是直线 。然而对 XOR:
- 正类点 、 分处两侧
- 负类点 、 也分处两侧
无论这条直线如何旋转或平移,总会出现至少一个正类与负类被分到同一侧。这是拓扑层面的不可能性。
从代数视角看:
假设存在参数满足所有约束:
中间两式相加得 ,与最后一式 相减得 ,与第一条 矛盾。
不存在任何实数解 。
1.3 感知机的本质:线性可分性
所有线性可分的逻辑函数,都可以由单个感知机通过调整权重与偏置实现。
- AND、OR、NAND 都可以用单层感知机实现
- XOR、XNOR 线性不可分,单层无论如何调参都无法实现
- 必须引入多层结构(如 NAND + OR + AND 组合)
1.4 多层感知机的引入
1.4.1 单感知机的局限
单个感知机的决策函数为:
决策边界永远是一个线性超平面。这不是参数问题,而是模型假设空间过小的问题。
多感知机的核心思想:
用多个线性判别的组合,构造非线性决策边界。
1.4.2 多感知机的基本结构
多感知机至少包含三层:
- 输入层:仅负责传递输入
- 隐藏层:由多个感知机组成,进行中间特征变换
- 输出层:对隐藏层结果进行最终判决
以两输入、一隐藏层、两隐藏单元、一输出单元为例:
理论上 2 层感知机(严格地说是激活函数使用了非线性 sigmoid 的感知机)可以表示任意函数。
1.4.3 从"一条直线"到"分段线性"
- 单个感知机:一条直线 / 一个超平面
- 两层感知机:多条直线组合,形成折线、多边形区域
- 多层感知机:任意复杂的分段线性近似
换一种说法:隐藏层的每一个感知机,都在重新切割输入空间。
这就是通用逼近定理:只要隐藏层神经元数量足够,多感知机可以逼近任意连续函数。它奠定了神经网络作为通用建模工具的理论基础。
1.4.4 XOR:多感知机的"入门级胜利"
一种典型结构:
- 隐藏层 1:实现 OR
- 隐藏层 2:实现 NAND
- 输出层:对二者结果做 AND
逻辑表达式:
这说明:XOR 并非"本质上复杂",而是需要分阶段判断。