多层感知机分类器#
基本思想:通过多个隐藏层的非线性变换,将输入数据映射到一个新的特征空间,使得在这个空间中数据可以被线性分割。
可以同时学习:
- 非线性映射方式
- 线性判别函数
关于神经元#
单个神经元的结构如图

数学模型如下:
y=f(wTx)=f(i=0∑nwixi)其中 w 是权重向量(已经增广包含偏置项),x 是输入向量(已经是增广向量),f 是激活函数。
网络设置#
多层感知机由输入层、一个或多个隐藏层和输出层组成。每层由多个神经元组成,层与层之间全连接。
通常采用三层神经网络(输入层-隐藏层-输出层)来实现非线性分类。
| 层 | 节点数量 | 激活函数 |
|---|
| 输入层 | n=dim(x) | 线性函数 |
| 隐藏层 | m,需要设定 | 非线性函数(如ReLU、Sigmoid、Tanh) |
| 输出层 | c= 类别数量 | 线性函数或Sigmoid函数 |
前向传播的函数#
第 k 个输出层神经元的输出为:
zk=gk(x)=f2j=0∑nHwkj(2)f1i=0∑dim(x)wji(1)xi或者把偏置项提出来
zk=gk(x)=f2j=1∑nHwkj(2)f1i=1∑dim(x)wji(1)xi+wj0(1)+wk0(2)训练算法-BP:反向传播算法#
TIP神经网络的其他学习机制还包括记忆学习SOM、竞争学习、Hebbian学习等。
BP 算法的实质是一个均方误差最小LMS问题,采用梯度下降法来更新权重。
符号说明#
| 符号 | 含义 | 维度/说明 |
|---|
| d | 输入特征维数 | 标量 |
| nH | 隐藏层节点数 | 标量 |
| c | 输出节点数(类别数) | 标量 |
| x=(x1,x2,...,xd)T | 一个训练样本的输入特征向量 | d×1 |
| t=(t1,...,tc)T | 样本对应的期望输出(标签) | c×1,分类任务常用 one-hot 编码 |
| wji | 输入层 → 隐藏层的连接权重 | i 输入节点,j 隐藏节点 |
| wj0 | 隐藏层第 j 个节点的偏置(bias) | 可视为输入固定为 1 时的权重 |
| netj | 隐藏层第 j 个节点的加权输入和,理解为输入层的净输出,隐藏层的净输入 | netj=∑i=1dwjixi+wj0 |
| yj | 隐藏层第 j 个节点的输出 | yj=f1(netj),f1 为隐藏层激活函数 |
| wkj | 隐藏层 → 输出层的连接权重 | j 隐藏节点,k 输出节点 |
| wk0 | 输出层第 k 个节点的偏置 | |
| netk | 输出层第 k 个节点的加权输入和,理解为隐藏层的净输出,输出层的净输入 | netk=∑j=1nHwkjyj+wk0 |
| zk | 输出层第 k 个节点的实际输出 | zk=f2(netk),f2 为输出层激活函数 |
| J | 损失函数(误差平方和的一半) | J=21∑k=1c(tk−zk)2 |
| η | 学习率 | 正标量,控制权重调整步长 |
| δk | 输出层第 k 节点的局部梯度 | δk=(tk−zk)f2′(netk) |
| δj | 隐藏层第 j 节点的局部梯度 | δj=f1′(netj)∑k=1cδkwkj |
BP 算法是梯度下降在多层神经网络上的具体实现,分为三步:
前向传播 → 输出层梯度计算 → 反向传播 → 权重更新。
步骤 1:前向传播(计算所有节点输出)#
对于单个训练样本 (x,t):
-
计算隐藏层每个节点的加权输入和
netj=i=1∑dwjixi+wj0,j=1,2,...,nH
-
通过激活函数 f1 得到隐藏层输出
yj=f1(netj)
-
计算输出层每个节点的加权输入和
netk=j=1∑nHwkjyj+wk0,k=1,2,...,c
-
通过激活函数 f2 得到网络最终输出
zk=f2(netk)
-
计算当前样本的损失(单个样本)
J=21k=1∑c(tk−zk)2
步骤 2:反向传播(计算梯度)#
目的是求出损失函数对每个权重的偏导数 ∂w∂J。
2.1 输出层局部梯度 δk#
根据链式法则:
∂wkj∂J=∂zk∂J⋅∂netk∂zk⋅∂wkj∂netk
-
∂zk∂J=−(tk−zk)
-
∂netk∂zk=f2′(netk)
-
∂wkj∂netk=∂wkj∂∑j=1nHwkjyj+wk0=yj
因此:
∂wkj∂J=−(tk−zk)f2′(netk)yj定义输出层局部梯度:
δk≜(tk−zk)f2′(netk)⇒∂wkj∂J=−δkyj2.2 隐藏层局部梯度 δj#
对于隐藏层权重 wji:
∂wji∂J=∂yj∂J⋅∂netj∂yj⋅∂wji∂netj难点是 ∂yj∂J,因为 yj 会影响所有输出 z1...zc:
∂yj∂J=k=1∑c∂zk∂J⋅∂netk∂zk⋅∂yj∂netk已知:
-
∂zk∂J=−(tk−zk)
-
∂netk∂zk=f2′(netk)
-
∂yj∂netk=wkj
所以:
∂yj∂J=−k=1∑c(tk−zk)f2′(netk)wkj=−k=1∑cδkwkj代入原式:
∂wji∂J=(−k=1∑cδkwkj)⋅f1′(netj)⋅xi定义隐藏层局部梯度:
δj≜f1′(netj)k=1∑cδkwkj于是:
∂wji∂J=−δjxi
步骤 3:权重更新(梯度下降)#
对于输出层权重:
wkj←wkj−η∂wkj∂J=wkj+ηδkyj对于隐藏层权重:
wji←wji+ηδjxi偏置(wj0,wk0)的更新:
将偏置视为输入为 +1 的权重,只需把上面公式中的 xi 或 yj 换为 1 即可。
BP 算法的批量版本(BGD)#
实际中通常使用批量更新(一次处理多个样本后累加梯度):
Δw_kj = 0, Δw_ji = 0 // 累积梯度变量
for each 样本 (x, t) in 训练集:
until 终止条件(如验证集误差不再下降 或 达到最大迭代次数)
关键点总结#
- 前向传播得到网络输出和损失。
- 反向传播利用链式法则,将输出层的误差“传播”回隐藏层,从而计算出每一层权重的梯度。
- 局部梯度 δ 扮演核心角色:
- 输出层 δk 直接由预测误差和激活函数导数决定。
- 隐藏层 δj 依赖于输出层的 δk 和连接权重 wkj。
- 权重更新沿负梯度方向,使损失下降。