本周课上主要讲了多层感知机的多层前馈网络和BP算法。其中先提出了线性不可分问题,之后提出构造多层感知机可解决该问题。
在机器学习和模式识别领域中,线性不可分问题指的是一类无法使用线性分类器或回归器解决的问题。简单来说,当给定的数据集无法被一个线性超平面分开时,就会出现线性不可分问题。
举例来说,假设我们有一个二维数据集,其中包含两类数据点,分别表示为红色圆圈和蓝色正方形。如果这些数据点可以被一个直线分开,则该问题是线性可分的。但是,如果数据点不能被任何直线分开,则该问题是线性不可分的。
在处理线性不可分问题时,常用的方法是使用非线性分类器或回归器,例如支持向量机(SVM)、神经网络等。这些方法可以学习到更复杂的决策边界,从而解决线性不可分问题。此外,还可以使用特征变换等方法将数据映射到更高维空间中,使其变得线性可分。
在构造多层感知机解决上述问题时,遵从如下两个定理:
- 定理1:若隐层节点( 单元) 可任意设置, 用三层阈值节点的网络, 可以实现任意的二值逻辑函数。
- 定理2:若隐层节点( 单元) 可任意设置, 用三层S型非线性特性节点的网络, 可以一致逼近紧集上的连续函数或按范数逼近紧集上的平方可积函数。
在训练多层感知机时使用BP算法。BP算法,也称反向传播算法(Backpropagation Algorithm),是一种常用的神经网络训练算法,用于调整神经网络的权重参数,从而实现对给定数据的分类或回归等任务。
BP算法是一种迭代算法,其基本思想是利用误差反向传播的方法,通过不断调整神经网络中的权重,使得网络输出与实际输出之间的误差最小化。具体来说,BP算法包含以下几个步骤:
- 前向传播:将输入数据通过神经网络,得到网络的输出结果。
- 计算误差:将网络输出结果与真实标签进行比较,计算网络的误差。
- 反向传播:将误差从输出层向输入层反向传播,计算每个权重对误差的贡献,并更新权重参数。
- 重复迭代:不断重复步骤1到步骤3,直到网络的误差达到预设的阈值或者训练次数达到最大值。
在实际应用中,BP算法需要通过大量的训练数据进行迭代训练,以得到最优的网络参数。此外,BP算法也存在一些问题,例如容易陷入局部最优解、训练速度较慢等。因此,针对不同的问题,也会有一些改进的BP算法被提出,例如基于动量的BP算法、自适应学习率的BP算法等。
设我们的神经网络有L层,第l层有nl个神经元,第l层的第i个神经元的输出为 y i ( l ) y^{(l)}_i yi(l),第l层的第i个神经元到第l+1层的第j个神经元的权重为 w i j ( l ) w^{(l)}_{ij} wij(l),第l+1层的第j个神经元的输入为 z j ( l + 1 ) z^{(l+1)}_j zj(l+1),误差函数为 E E E,则BP算法的推导过程如下:
- 前向传播
假设输入为
x
x
x,通过前向传播,可以得到第l层的输出
y
(
l
)
y^{(l)}
y(l),即:
y
(
l
)
=
f
(
z
(
l
)
)
y^{(l)}=f(z^{(l)})
y(l)=f(z(l))
其中,
f
f
f表示激活函数,
z
(
l
)
z^{(l)}
z(l)表示第l层的输入,它是由前一层的输出和权重计算得到的:
z
(
l
+
1
)
=
∑
i
=
1
n
l
w
i
j
(
l
)
y
j
(
l
)
+
b
(
l
+
1
)
z^{(l+1)} = \sum\limits_{i=1}^{nl}w_{ij}^{(l)}y_{j}^{(l)}+b^{(l+1)}
z(l+1)=i=1∑nlwij(l)yj(l)+b(l+1)
其中,
b
(
l
+
1
)
b^{(l+1)}
b(l+1)表示第l+1层的偏置。
- 计算误差
通过前向传播,可以得到神经网络的输出结果
y
(
L
)
y^{(L)}
y(L),将其与真实标签进行比较,可以得到误差
E
E
E。具体来说,如果是分类问题,可以使用交叉熵误差函数,如果是回归问题,可以使用均方误差函数:
E
=
1
2
∑
i
=
1
n
L
(
y
i
(
L
)
−
t
i
)
2
E = \frac{1}{2}\sum\limits_{i=1}^{nL}(y_{i}^{(L)}-t_{i})^{2}
E=21i=1∑nL(yi(L)−ti)2
其中,
t
t
t表示真实标签。
- 反向传播
在反向传播中,我们需要计算每个权重对误差的贡献,并更新权重参数。具体来说,需要计算每个神经元的误差项 δ i ( l ) \delta^{(l)}_i δi(l),以及每个权重的梯度 ∂ E ∂ w i j ( l ) \frac{\partial E}{\partial w^{(l)}_{ij}} ∂wij(l)∂E和 ∂ E ∂ b ( l ) \frac{\partial E}{\partial b^{(l)}} ∂b(l)∂E。
首先,计算输出层的误差项
δ
(
L
)
\delta^{(L)}
δ(L):
δ
i
(
L
)
=
∂
E
∂
z
i
(
L
)
=
∂
E
∂
y
i
(
L
)
∂
y
j
(
L
)
∂
z
i
(
L
)
=
(
y
i
(
L
)
−
t
i
)
f
′
(
z
i
(
L
)
)
\delta_{i}^{(L)}= \frac{\partial E}{\partial z_{i}^{(L)}}=\frac{\partial E}{\partial y_{i}^{(L)}}\frac{\partial y_{j}^{(L)}}{\partial z_{i}^{(L)}}=(y_{i}^{(L)}-t_{i})f'(z_{i}^{(L)})
δi(L)=∂zi(L)∂E=∂yi(L)∂E∂zi(L)∂yj(L)=(yi(L)−ti)f′(zi(L))
其中,
f
′
f'
f′表示激活函数的导数。接下来,计算第l层的误差项
δ
(
l
)
\delta^{(l)}
δ(l):
δ
i
(
l
)
=
∂
E
∂
z
i
(
l
)
=
∑
j
=
1
n
l
+
1
∂
E
∂
z
j
(
l
+
1
)
∂
z
j
(
l
+
1
)
∂
y
i
(
l
)
∂
y
i
(
l
)
∂
z
i
(
l
)
=
∑
j
=
1
n
l
+
1
δ
j
(
l
+
1
)
w
j
i
(
l
)
f
′
(
z
i
(
l
)
)
\delta_{i}^{(l)}=\frac{\partial E}{\partial z_{i}^{(l)}}=\sum\limits_{j=1}^{nl+1}\frac{\partial E}{\partial z_{j}^{(l+1)}}\frac{\partial z_{j}^{(l+1)}}{\partial y_{i}^{(l)}}\frac{\partial y_{i}^{(l)}}{\partial z_{i}^{(l)}}=\sum\limits_{j=1}^{nl+1}\delta_{j}^{(l+1)}w_{ji}^{(l)}f'(z_{i}^{(l)})
δi(l)=∂zi(l)∂E=j=1∑nl+1∂zj(l+1)∂E∂yi(l)∂zj(l+1)∂zi(l)∂yi(l)=j=1∑nl+1δj(l+1)wji(l)f′(zi(l))
其中, w j i ( l ) w^{(l)}_{ji} wji(l)表示第l+1层的第j个神经元到第l层的第i个神经元的权重。由此,可以递归地计算出所有层的误差项。
接下来,计算权重的梯度
∂
E
∂
w
i
j
(
l
)
\frac{\partial E}{\partial w^{(l)}_{ij}}
∂wij(l)∂E和
∂
E
∂
b
(
l
)
\frac{\partial E}{\partial b^{(l)}}
∂b(l)∂E。根据链式法则,有:
∂
E
∂
w
i
j
(
l
)
=
∂
E
∂
z
j
(
l
+
1
)
z
j
(
l
+
1
)
∂
w
i
j
(
l
)
=
δ
j
(
l
+
1
)
y
i
(
l
)
\frac{\partial E}{\partial w_{ij}^{(l)}}=\frac{\partial E}{\partial z_{j}^{(l+1)}}\frac{z_{j}^{(l+1)}}{\partial w_{ij}^{(l)}}=\delta_{j}^{(l+1)}y_{i}^{(l)}
∂wij(l)∂E=∂zj(l+1)∂E∂wij(l)zj(l+1)=δj(l+1)yi(l)
∂
E
∂
b
(
l
)
=
∂
E
∂
z
j
(
l
+
1
)
∂
z
j
(
l
+
1
)
∂
b
(
l
)
=
δ
j
(
l
+
1
)
\frac{\partial E}{\partial b^{(l)}}=\frac{\partial E}{\partial z_{j}^{(l+1)}}\frac{\partial z_{j}^{(l+1)}}{\partial b^{(l)}}=\delta_{j}^{(l+1)}
∂b(l)∂E=∂zj(l+1)∂E∂b(l)∂zj(l+1)=δj(l+1)
最后,根据梯度下降法,更新权重和偏置:
w
i
j
(
l
)
−
η
∂
E
∂
w
i
j
(
l
)
→
w
i
j
(
l
)
w_{ij}^{(l)} - \eta\frac{\partial E}{\partial w_{ij}^{(l)}}\to w_{ij}^{(l)}
wij(l)−η∂wij(l)∂E→wij(l)
b
(
l
)
−
η
∂
E
∂
b
(
l
)
→
b
(
l
)
b^{(l)}-\eta\frac{\partial E}{\partial b^{(l)}} \to b^{(l)}
b(l)−η∂b(l)∂E→b(l)
其中,
η
\eta
η表示学习率,控制更新步长。