Lesson 10
感知机:最简单的神经元
感知机是神经网络的起点——一个线性分类器加上权重更新规则。本章讲清它的工作原理、收敛性、以及线性不可分(异或)的致命局限。
本章细分学习地图
| 模块 | 拆细学习单元 | 完成后应产出 | 掌握标准 |
|---|---|---|---|
| 结构 | 输入、权重、偏置、激活函数。 | 手画感知机图。 | 能说清每个组件的作用。 |
| 更新规则 | 错误驱动更新、学习率。 | 手算一轮更新。 | 能说清什么时候更新、更新多少。 |
| 线性不可分 | 异或问题、收敛定理的前提。 | 异或不可分的例子。 | 能解释为什么需要多层网络。 |
| 实战 | Perceptron 分类。 | 完整代码。 | 能对比感知机和逻辑回归。 |
学习目标
感知机工作流程
1输入特征 x
2加权求和 z=wx+b
3阶跃激活
4输出类别
本章完成度
已完成 0/4
感知机结构
感知机是最简单的人工神经元:接收输入特征,加权求和,通过阶跃函数输出 +1 或 -1。
z = w₁x₁ + w₂x₂ + … + wpxp + b
加权求和:与线性回归完全相同
ŷ = sign(z) = { +1 if z ≥ 0, −1 if z < 0 }
阶跃激活:输出只有两个值
感知机 vs 逻辑回归
感知机用阶跃函数(硬判断),逻辑回归用 Sigmoid(软概率)。感知机没有概率输出,只有类别。
权重更新规则
感知机的学习策略极简:只在预测错误时更新权重。
w ← w + η · (y − ŷ) · x
η 是学习率,y 是真实标签,ŷ 是预测标签
预测正确
y − ŷ = 0,不更新。
预测错误
y − ŷ ≠ 0,沿着修正方向调整权重。
import numpy as np
def perceptron_update(x, y_true, w, b, eta=0.1):
"""一步感知机更新"""
z = np.dot(w, x) + b
y_pred = 1 if z >= 0 else -1
if y_pred != y_true:
w = w + eta * (y_true - y_pred) * x
b = b + eta * (y_true - y_pred)
return w, b
# 示例
w = np.array([0.0, 0.0])
b = 0.0
x = np.array([1.0, 2.0])
y = 1
w, b = perceptron_update(x, y, w, b, eta=0.1)
print(f"更新后 w={w}, b={b}")
感知机收敛定理
如果数据线性可分,感知机一定会在有限步内收敛到一个正确的超平面。但如果不可分,它永远不会收敛。
线性不可分:异或问题
异或(XOR)是经典的线性不可分问题:没有任何一条直线能正确分开四个点。
| x₁ | x₂ | XOR 输出 |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
解决方案:多层网络
异或问题需要至少一个隐藏层。这就是"多层感知机(MLP)"的动机——通过叠加非线性层来解决线性不可分问题。下一章会详细讲。
sklearn 实战
from sklearn.datasets import load_iris
from sklearn.linear_model import Perceptron
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.model_selection import cross_val_score
X, y = load_iris(return_X_y=True)
# 只取前两类(线性可分)
mask = y < 2
X_bin, y_bin = X[mask], y[mask]
pipe = Pipeline([
("scaler", StandardScaler()),
("perceptron", Perceptron(max_iter=1000, eta0=0.1, random_state=42)),
])
scores = cross_val_score(pipe, X_bin, y_bin, cv=5)
print(f"感知机准确率(二分类): {scores.mean():.3f} ± {scores.std():.3f}")
# 全三类
scores_all = cross_val_score(
Pipeline([("scaler", StandardScaler()),
("perceptron", Perceptron(max_iter=1000, random_state=42))]),
X, y, cv=5
)
print(f"感知机准确率(三分类): {scores_all.mean():.3f} ± {scores_all.std():.3f}")
练习题
第 1 题:感知机和逻辑回归最大的区别是什么?
参考思路:感知机用阶跃函数输出硬类别(+1/-1),没有概率;逻辑回归用 Sigmoid 输出 [0,1] 概率。感知机只在错误时更新,逻辑回归优化对数似然。
第 2 题:如果数据线性不可分,感知机会怎样?
参考思路:感知机永远不会收敛,权重会不断振荡。实践中通过设置 max_iter 强制停止。
检查点
离开本章前,请确认:
- 能画出感知机结构:输入 → 加权求和 → 阶跃激活 → 输出。
- 能解释权重更新规则,知道只在预测错误时更新。
- 能用异或问题说明感知机的线性不可分局限。
- 能用 sklearn 的 Perceptron 完成分类实战。