一、多层感知机

1.线性不可分问题:无法进行线性分类。Minsky1969年提出XOR问题

解决方法:使用多层感知机
• 在输入和输出层间加一或多层隐单元,构成多层感知器(多层
前馈神经网络)。
• 加一层隐节点(单元)为三层网络,可解决异或(XOR)问题
由输入得到两个隐节点、一个输出层节点的输出:

y_1^{[1]} = f\left( w_{11}^{[1]}x_1 + w_{12}^{[1]}x_2 - \theta_1^{[1]} \right)$ $y_2^{[1]} = f\left( w_{21}^{[1]}x_1 + w_{22}^{[1]}x_2 - \theta_2^{[1]} \right)$ $y = f\left( w_1^{[2]}y_1^{[1]} + w_2^{[2]}y_2^{[1]} - \theta \right)$ $f(\cdot) = \begin{cases} 1, & \cdot \geq 0 \\ 0, & \cdot < 0 \end{cases}

2.三层感知器可识别任一凸多边形或无界的凸区域。更多层感知器网络,可识别更为复杂的图形。
多层感知器网络,有如下定理:
定理1若隐层节点(单元)可任意设置,用三层阈值节点的网络,可以实现任意的二值逻辑函数。
定理2若隐层节点(单元)可任意设置,用三层S型非线性特性节点的网络,可以一致逼近紧集上的连续函数或按 范数逼近紧集上的平方可积函数。

二、多层前馈网络

1.多层感知机是一种多层前馈网络,由多层神经网络构成,每层网络将输出传递给下一层网络。神经元间的权值连接仅出现在相邻层之间,不出现在其他位置。如果每一个神经元都连接到上一层的所有神经元(除输入层外),则成为全连接网络。

2.多层前馈网络的反向传播 (BP)学习算法,简称BP算法,是有导师的学习,它是梯度下降法在多层前馈网中的应用。

3.BP学习算法由正向传播和反向传播组成:
①正向传播是输入信号从输入层经隐层,传向输出层,若输出层得到了期望的输出,则学习算法结束;否则,转至反向传播。
②反向传播是将误差(样本输出与网络输出之差)按原联接通路反向计算,由梯度下降法调整各层节点的权值和阈值,使误差减小。

三、BP算法基本思想

1. 符号与模型结构定义

假设我们的神经网络包含:

  • 输入层(Input Layer): 输入向量为$\mathbf{x} = [x_1, x_2, \dots, x_d]^T$ 

  • 隐藏层(Hidden Layer): 神经元个数为 $q$

    • 权重矩阵为 $\mathbf{W}^{(1)}$,偏置为 $\mathbf{b}^{(1)}$

    • 净输入(未激活输出)为 $\mathbf{z}^{(1)} = \mathbf{W}^{(1)}\mathbf{x} + \mathbf{b}^{(1)}$

    • 激活输出为 $\mathbf{a}^{(1)} = f(\mathbf{z}^{(1)})$$f$ 为激活函数,如 Sigmoid 或 ReLU)

  • 输出层(Output Layer): 神经元个数为 $l$

    • 权重矩阵为 $\mathbf{W}^{(2)}$,偏置为 $\mathbf{b}^{(2)}$

    • 净输入为 $\mathbf{z}^{(2)} = \mathbf{W}^{(2)}\mathbf{a}^{(1)} + \mathbf{b}^{(2)}$

    • 预测输出为 $\mathbf{\hat{y}} = \mathbf{a}^{(2)} = g(\mathbf{z}^{(2)})$$g$ 为输出层激活函数)

  • 真实标签(Target): $\mathbf{y} = [y_1, y_2, \dots, y_l]^T$

损失函数(Loss Function)

对于单组样本,我们使用均方误差(MSE)作为损失函数:

E=\frac{1}{2} \sum_{k=1}^{l}\left(y_{k}-\hat{y}_{k}\right)^{2}=\frac{1}{2}\|\mathbf{y}-\hat{\mathbf{y}}\|^{2}


2. 前向传播(Forward Propagation)

在前向传播中,信息从输入层流向输出层。对于特定的隐层神经元 $j$ 和输出层神经元 $k$

  • 隐层神经元 $j$ 的净输入与输出:

    \begin{aligned} z _ {j} ^ {(1)} = \sum_ {i = 1} ^ {d} w _ {j i} ^ {(1)} x _ {i} + b _ {j} ^ {(1)} \\ a _ {j} ^ {(1)} = f \left(z _ {j} ^ {(1)}\right) \end{aligned}

  • 输出层神经元 $k$ 的净输入与输出:

    z_{k}^{(2)}=\sum_{j=1}^qw_{kj}^{(2)}a_j^{(1)}+b_k^{(2)} \hat{y}_{k}=a_{k}^{(2)}=g(z_{k}^{(2)})


3. 反向传播(Backpropagation)推导

反向传播的目标是计算损失 $E$对所有权重 $w$ 和偏置 $b$ 的偏导数(梯度)。

核心技巧:引入误差项(Error Term) $\delta$

我们定义第 $l$ 层第 $m$ 个神经元的误差项为:$\delta_m^{(l)} = \frac{\partial E}{\partial z_m^{(l)}}$。它表示损失函数对该神经元净输入的变化率。

3.1 输出层权重 $\mathbf{W}^{(2)}$ 和偏置 $\mathbf{b}^{(2)}$ 的梯度

我们要计算 $\frac{\partial E}{\partial w_{kj}^{(2)}}$。根据链式法则,可以将其拆解为:

\begin{aligned} \frac{\partial E}{\partial w_{kj}^{(2)}}=\frac{\partial E}{\partial z_{k}^{(2)}}\cdot\frac{\partial z_{k}^{(2)}}{\partial w_{kj}^{(2)}} \end{aligned}

  1. 计算第一项(输出层误差项 $\delta_k^{(2)}$):

    \delta_k^{(2)}=\frac{\partial E}{\partial z_k^{(2)}}=\frac{\partial E}{\partial\hat{y}_k}\cdot\frac{\partial\hat{y}_k}{\partial z_k^{(2)}}

    因为 $E = \frac{1}{2} \sum_{k} (y_k - \hat{y}_k)^2$,所以 $\frac{\partial E}{\partial \hat{y}_k} = - (y_k - \hat{y}_k)$

    又因为 $\hat{y}_k = g(z_k^{(2)})$,所以 $\frac{\partial \hat{y}_k}{\partial z_k^{(2)}} = g'(z_k^{(2)})$

    合成可得:

    \delta_k^{(2)}=-(y_k-\hat{y}_k)\cdot g^{\prime}(z_k^{(2)})

  2. 计算第二项:

    因为 $z_k^{(2)} = \sum_{j} w_{kj}^{(2)} a_j^{(1)} + b_k^{(2)}$,所以对 $w_{kj}^{(2)}$ 求偏导得:

    \frac{\partial z_k^{(2)}}{\partial w_{kj}^{(2)}}=a_j^{(1)}

  3. 最终梯度:

    \frac{\partial E}{\partial w_{kj}^{(2)}}=\delta_k^{(2)}\cdot a_j^{(1)}

    同理,对偏置 $b_k^{(2)}$求偏导:

    \frac{\partial E}{\partial b_k^{(2)}}=\frac{\partial E}{\partial z_k^{(2)}}\cdot\frac{\partial z_k^{(2)}}{\partial b_k^{(2)}}=\delta_k^{(2)}\cdot1=\delta_k^{(2)}


3.2 隐藏层权重 $\mathbf{W}^{(1)}$和偏置 $\mathbf{b}^{(1)}$ 的梯度

我们要计算 $\frac{\partial E}{\partial w_{ji}^{(1)}}$。同样利用链式法则:

\frac{\partial E}{\partial w_{ji}^{(1)}}=\frac{\partial E}{\partial z_j^{(1)}}\cdot\frac{\partial z_j^{(1)}}{\partial w_{ji}^{(1)}}=\delta_j^{(1)}\cdot x_i

现在关键是求隐层的误差项 $\delta_j^{(1)}$。因为隐层神经元 $j$ 的输出通过多个通道影响了输出层的每一个神经元 $k$,所以需要使用多元链式法则对输出层所有神经元求和:

\delta_j^{(1)}=\frac{\partial E}{\partial z_j^{(1)}}=\sum_{k=1}^l\left(\frac{\partial E}{\partial z_k^{(2)}}\cdot\frac{\partial z_k^{(2)}}{\partial a_j^{(1)}}\right)\cdot\frac{\partial a_j^{(1)}}{\partial z_j^{(1)}}

  1. 已知 $\frac{\partial E}{\partial z_k^{(2)}} = \delta_k^{(2)}$

  2. 因为 $z_k^{(2)} = \sum_{j} w_{kj}^{(2)} a_j^{(1)} + b_k^{(2)}$,所以 $\frac{\partial z_k^{(2)}}{\partial a_j^{(1)}} = w_{kj}^{(2)}$

  3. 因为 $a_j^{(1)} = f(z_j^{(1)})$空间,所以 $\frac{\partial a_j^{(1)}}{\partial z_j^{(1)}} = f'(z_j^{(1)})$

代入上式,得到隐层误差项的递推公式

\delta_j^{(1)}=\left(\sum_{k=1}^l\delta_k^{(2)}w_{kj}^{(2)}\right)\cdot f^{\prime}(z_j^{(1)})

有了 $\delta_j^{(1)}$,隐藏层的梯度就很容易写出了:\frac{\partial E}{\partial w_{ji}^{(1)}}=\delta_{j}^{(1)}\cdot x_{i}\frac{\partial E}{\partial b_{j}^{(1)}}=\delta_{j}^{(1)}


4. 总结与参数更新

拿到所有梯度后,我们就可以使用梯度下降法(设学习率为 $\eta$)来更新网络中的所有权重和偏置:

层级 权重更新公式 偏置更新公式
输出层 (Layer 2) $w_{kj}^{(2)} \leftarrow w_{kj}^{(2)} - \eta \, \delta_k^{(2)} a_j^{(1)}$ $b_k^{(2)} \leftarrow b_k^{(2)} - \eta \, \delta_k^{(2)}$
隐藏层 (Layer 1) $w_{ji}^{(1)} \leftarrow w_{ji}^{(1)} - \eta \, \delta_j^{(1)} x_i$ $b_j^{(1)} \leftarrow b_j^{(1)} - \eta \, \delta_j^{(1)}$
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐