十多年前曾经在学校选修过一门神经网络的课程,使用神经网络的算法实现阿拉伯数字0-9的识别。没有想到今天人工智能能发展到这个程度,甚至两三年前感觉还可能马上会遇到下一个瓶颈。希望后续能逐步回顾下部分人工智能的经典算法,更好的理解神经网络的内在机制。
一、 神经网络的萌芽
-
1943 年:MP 神经元模型沃伦・麦卡洛克(McCulloch)和沃尔特・皮茨(Pitts)提出第一个人工神经元数学模型(MP 模型),模拟生物神经元 "兴奋 / 抑制" 的工作机制,定义了神经元的输入、加权求和、阈值激活的核心逻辑,这是人工神经网络的起点。
-
1958 年:感知机模型。 弗兰克・罗森布拉特(Frank Rosenblatt)提出感知机(Perceptron),这是第一个可以实际训练的神经网络模型。它是单层神经网络,包含输入层和输出层,能通过梯度下降调整权重,实现简单的二分类任务(比如识别手写数字的简单特征)。当时被视为 "能模拟人类学习的机器",引发第一次研究热潮。
二、 单层感知机的核心原理
单层感知机的结构极其简单,只有两层 :输入层 和输出层,没有隐藏层,属于最基础的线性分类模型。
1. 结构组成
| 层级 | 功能 | 细节说明 |
|---|---|---|
| 输入层 | 接收原始特征 | 由多个输入神经元组成,数量等于特征维度(比如识别 "是否是苹果",输入特征可以是 "颜色、形状、大小",对应 3 个输入神经元) |
| 输出层 | 输出分类结果 | 只有 1 个神经元,输出0 或 1(分别代表两个类别,比如 0 = 不是苹果,1 = 是苹果) |
2. 数学模型(核心计算逻辑)
单层感知机的预测过程分三步,完全模拟人工神经元的工作机制:
-
加权求和 对每个输入特征
分配一个权重
(权重代表该特征的重要性),再加上一个偏置项 b(调整分类阈值的偏移量),计算总和 z:z =
+b = w1x1+w2x2+...+wnxn+b。
-
举例:判断是否是苹果,输入特征 x1= 颜色(红色 = 1,绿色 = 0)、x2= 形状(圆形 = 1,方形 = 0);权重 w1=0.8(颜色很重要)、w2=0.7(形状也重要);偏置 b=−1.2。
-
计算:z = 0.8×1+0.7×1−1.2 = 0.3
-
-
阈值激活(非线性判断) 用阶跃函数(感知机的激活函数)对 z 进行判断,输出最终分类结果 y:当z ≥ 0时,y = 1; 当z < 0时,y = 0。
-
接上面的例子:z = 0.3 ≥ 0 ,输出 y=1,判定为是苹果。
-
若输入特征是 x1 = 0(绿色)、x2 = 0(方形),则 z = 0.8 × 0 + 0.7 × 0 − 1.2 = −1.2 < 0, 输出 y=0,判定为不是苹果。
-
-
权重与偏置的意义
权重 wi:代表输入特征对分类结果的影响程度。
wi > 0:该特征会促进输出为 1(比如 "红色" 的权重为正,越红越容易被判定为苹果);
wi < 0:该特征会抑制输出为 1(比如 "方形" 的权重为负,越方越难被判定为苹果)。
偏置 b:调整分类的 "门槛"。
b 增大:分类门槛降低,更容易输出 1;
b 减小:分类门槛提高,更难输出 1。
三、 单层感知机如何实现预测分类(训练 + 预测流程)
单层感知机的 "预测能力" 来自训练过程中对权重和偏置的优化 ,核心是通过感知机学习规则 调整参数,让模型能准确区分两类数据。整个过程分训练阶段 和预测阶段:
1. 训练阶段:调整参数,学习规律
训练的目标是找到一组最优的 wi 和 b,让模型对所有训练数据的预测结果都和真实标签一致。步骤如下:
-
初始化参数给权重 wi 赋随机小值(比如 - 0.1~0.1),偏置 b 初始化为 0。
-
遍历训练数据对每一个训练样本 (x1,x2,...,xn, Ytrue):
-
计算预测值 Ypred:按照 "加权求和 + 阶跃激活" 的规则得到;
-
计算误差:error=Ytrue−Ypred(真实标签和预测标签的差值);
-
更新参数 (感知机学习规则):wi=wi+η×error×xi,b=b+η×error其中 η 是学习率(0<η<1,控制参数更新的步长,比如 0.1)。
-
若 error=0(预测正确):参数不更新;
-
若 error=1(真实是 1,预测是 0):增大权重和偏置,让下一次更容易输出 1;
-
若 error=−1(真实是 0,预测是 1):减小权重和偏置,让下一次更难输出 1。
-
-
-
重复迭代反复遍历训练数据,直到模型对所有样本的预测误差为 0,或达到预设的迭代次数,此时参数 wi 和 b 就固定下来。
2. 预测阶段:用训练好的模型分类新数据
当有新数据输入时,直接用训练好的 wi 和 b 计算,步骤如下:
-
输入新样本的特征 x1,x2,...,xn;
-
计算加权和 z =
+b。
-
用阶跃函数判断:z ≥ 0 输出 1(类别 A),z < 0 输出 0(类别 B)。
3、 经典例子:用单层感知机实现 "与门" 分类
"与门" 是一个简单的二分类问题,输入是两个二进制数(0 或 1),输出规则:只有两个输入都为 1 时,输出 1;否则输出 0。
| 输入 x1 | 输入 x2 | 真实输出 ytrue |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
- 训练过程
-
初始化:w1=0.2,w2=0.2,b=−0.3,η=0.1
-
遍历样本 (1,1,1):
- z = 0.2 × 1 + 0.2 × 1 − 0.3 = 0.1 ≥ 0,ypred = 1,error = 0,参数不更新。
-
遍历样本 (0,0,0):
- z = 0.2 × 0 + 0.2 × 0 − 0.3 = −0.3 < 0,ypred = 0,error = 0,参数不更新。
-
遍历样本 (0,1,0):
- z = 0.2 × 0 + 0.2 × 1 − 0.3 = −0.1 < 0,ypred = 0,error = 0,参数不更新。
-
遍历样本 (1,0,0):
- z = 0.2 × 1 + 0.2 × 0 − 0.3 = −0.1 < 0,ypred=0,error=0 , 参数不更新。
所有样本预测正确,训练结束。
- 预测验证
输入新样本 (1,1) ,z = 0.1 ≥ 0, 输出 1;输入新样本 (0,1) → z=−0.1<0 → 输出 0,完全符合与门规则。
4、 单层感知机的局限性
单层感知机的最大缺陷是只能解决线性可分的分类问题,无法处理非线性问题(比如 "异或门"):
-
线性可分:两类数据可以用一条直线(二维)、一个平面(三维)或超平面(高维)完全分开;
-
非线性可分:比如异或门,无法用一条直线把 "输出 1" 和 "输出 0" 的样本分开,此时单层感知机无论怎么调整参数,都无法实现 100% 正确分类。
这个局限性直接导致了神经网络的第一次研究寒冬,直到后来多层感知机 + 反向传播算法 的出现,才解决了非线性分类问题。但单层感知机中出现的输入层、输出层、权重、偏置,训练和参数更新等概念在最新的神经网络训练中依然在继续使用,所以单层感知机作为第一个算法还是实至名归的。但单层感知机中的权重调整是极其初级的,比如做 "与门" 分类,误差只有 "预测对 / 错" 两种情况,权重要么加一点、要么减一点,完全是 "试错式" 调整,与后续的新算法有着极大的区别。