Datawhale组队学习之西瓜书task4

第五章 神经网络

5.1 M-P神经元模型

神经网络(neural network)的基础是神经元(neuron)模型,其中最常用的是M-P神经元模型

Datawhale组队学习之西瓜书task4_第1张图片

在该模型中,神经元接收n个其他神经元的信号,通过w进行带权重连接,将所有带权重输入与阈值相减,通过激活函数(activation function)进行输出:
y = f ( w T x − θ ) \begin{aligned} y&=f\left(\boldsymbol{w}^\mathbf{T}\boldsymbol{x}-\theta\right) \end{aligned} y=f(wTxθ)

5.2 感知机

感知机(perceptron)由两层神经元组成,输入层有两个神经元,负责接收外界输入信号,输出层有一个神经元,负责处理信号并输出,因此只有输出层为M-P神经元且仅有一个M-P神经元

感知机的激活函数为阶跃函数,因此其数学表达式为:
y = sgn ( w T x − θ ) = { 1  if ( w T x − θ ) ⩾ 0 0  if ( w T x − θ ) < 0 \begin{aligned} y&=\text{sgn}\left(\boldsymbol{w}^\mathbf{T}\boldsymbol{x}-\theta\right) \\ &=\begin{cases} 1 & \text{ if} \left(\boldsymbol{w}^\mathbf{T}\boldsymbol{x}-\theta\right)\geqslant0 \\ 0& \text{ if}\left(\boldsymbol{w}^\mathbf{T}\boldsymbol{x}-\theta\right) <0 \end{cases} \end{aligned} y=sgn(wTxθ)={10 if(wTxθ)0 if(wTxθ)<0
通过对分类错误样本的分析,我们可以找到它的损失函数:
L ( w , θ ) = ∑ x ∈ M ( y ^ − y ) ( w T x − θ ) \begin{aligned} L(\boldsymbol w,\theta)=\sum_{\boldsymbol x\in M}(\hat{y}-y)(\boldsymbol{w}^\mathbf{T}\boldsymbol{x}-\theta) \end{aligned} L(w,θ)=xM(y^y)(wTxθ)
式中, M M M为分类错误的样本集合, y ^ \hat{y} y^为感知机的预测值。很明显,该损失函数非负。

为了方便讨论,现在将 θ \theta θ看作一个固定输入为-1的哑结点(dummy node)所对应的权重,并令 x n + 1 = − 1 x_{n+1}=-1 xn+1=1,则求解目标变为:
arg min  w L ( w ) = arg min  w ∑ x ∈ M ( y ^ − y ) w T x \begin{aligned} \underset{\boldsymbol w}{\text{arg min }}L(\boldsymbol w)=\underset{\boldsymbol w}{\text{arg min }}{\sum_{\boldsymbol x\in M}(\hat{y}-y)\boldsymbol{w}^\mathbf{T}\boldsymbol{x}} \end{aligned} warg min L(w)=warg min xM(y^y)wTx
我们可以通过随机梯度下降(SGD,即训练时对每个样本都进行一次参数更新)来求解此问题:
w ← w + Δ w Δ w = η ( y − y ^ ) x \begin{aligned} \boldsymbol w&\leftarrow\boldsymbol w +\Delta\boldsymbol w \\ \Delta\boldsymbol w&=\eta(y-\hat y)\boldsymbol x \end{aligned} wΔww+Δw=η(yy^)x
式中, Δ w \Delta\boldsymbol w Δw由损失函数对 w \boldsymbol w w求导得到(因为采用的是SGD,因此损失函数中将求和去除,只考虑单个样本的损失函数), η ∈ ( 0 , 1 ) \eta\in(0,1) η(0,1)称为学习率(learning rate),是一个可进行人为调整的超参数(super parameter)

对于任意线性可分(linearly separable)的数据集,即在特征空间中存在一个超平面可以将正反例一分为二,那么感知机一定可以找到该超平面,相对的,如果数据集非线性可分,那么感知机将难以稳定,无法求解。(意思就是感知机只能解决部分二分类问题)

5.3 BP算法

5.3.1 多层前馈网络

既然感知机只能解决线性可分问题,那么什么样的神经网络可以解决非线性可分问题呢?

考虑到应该使用更多的M-P神经元,如下图所示:

Datawhale组队学习之西瓜书task4_第2张图片

上图即为多层前馈神经网络(multi-layer feedforward nerural networks),每层神经元与下一层神经元全互连,神经元之间不存在同层连接,也不存在跨层连接。

5.3.2 误差逆传播算法

对于多层前馈网络,一般的算法是无法进行参数优化的,因此需要更强大的学习算法:误差逆传播算法(BackPropagation,简称BP,又称反向传播算法)

考虑如下的多层前馈网络,非输入神经元的激活函数均为sigmoid函数

其中,有 d d d个输入神经元, q q q个隐层神经元, l l l个输出神经元,输出层第 j j j个神经元的阈值用 θ j \theta_j θj表示,隐层第 h h h个神经元的阈值用 γ h \gamma_h γh表示,隐层第 h h h个神经元与输出层第 j j j个神经元之间的连接权为 w h j w_{hj} whj,输入层第 i i i个神经元与隐层第 h h h个神经元之间的连接权为 v i h v_{ih} vih

Datawhale组队学习之西瓜书task4_第3张图片

对于样例 ( x k , y k ) (\boldsymbol x_k,\boldsymbol y_k) (xk,yk),神经网络输出为 y ^ k = sigmoid ( β − θ ) ∈ R l \hat{\boldsymbol y}_k=\text{sigmoid}(\boldsymbol\beta-\boldsymbol\theta)\in\mathbb{R}^l y^k=sigmoid(βθ)Rl,则对该样例的均方误差为:
L k = 1 2 ∑ j = 1 l ( y ^ j k − y j k ) 2 \begin{aligned} L_k=\frac{1}{2}\sum_{j=1}^l(\hat y^k_j-y^k_j)^2 \end{aligned} Lk=21j=1l(y^jkyjk)2
考虑类似感知机的参数更新公式:
w h j ← w h j + Δ w h j θ j ← θ j + Δ θ j v i h ← v i h + Δ v i h γ h ← γ h + Δ γ h \begin{aligned} w_{hj}&\leftarrow w_{hj}+\Delta w_{hj} \\ \theta_{j}&\leftarrow \theta_{j}+\Delta \theta_{j} \\ v_{ih}&\leftarrow v_{ih}+\Delta v_{ih} \\ \gamma_{h}&\leftarrow \gamma_{h}+\Delta \gamma_{h} \\ \end{aligned} whjθjvihγhwhj+Δwhjθj+Δθjvih+Δvihγh+Δγh
BP算法基于梯度下降算法,以目标的负梯度方向对参数进行调整:
Δ w h j = − η ∂ L k ∂ w h j = η g j b h Δ θ j = − η ∂ L k ∂ θ j = − η g j Δ v i h = − η ∂ L k ∂ v i h = η e h x i Δ γ h = − η ∂ L k ∂ γ h = − η e h \begin{aligned} \Delta w_{hj}&=-\eta\frac{\partial L_k}{\partial w_{hj}}=\eta g_jb_h \\ \Delta \theta_{j}&=-\eta\frac{\partial L_k}{\partial \theta_{j}}=-\eta g_j \\ \Delta v_{ih}&=-\eta\frac{\partial L_k}{\partial v_{ih}}=\eta e_hx_i \\ \Delta \gamma_{h}&=-\eta\frac{\partial L_k}{\partial \gamma_{h}}=-\eta e_h \\ \end{aligned} ΔwhjΔθjΔvihΔγh=ηwhjLk=ηgjbh=ηθjLk=ηgj=ηvihLk=ηehxi=ηγhLk=ηeh
其中 g j g_j gj称为输出层梯度项, e h e_h eh称为隐层梯度项:
g j = − ∂ L k ∂ y ^ j k ⋅ ∂ y ^ j k ∂ β j = y ^ j k ( 1 − y ^ j k ) ( y j k − y ^ j k ) e h = − ∂ L k ∂ b h ⋅ ∂ b h ∂ α h = b h ( 1 − b h ) ∑ j = 1 l w h j g j \begin{aligned} g_j&=-\frac{\partial L_k}{\partial\hat y^k_j}\cdot\frac{\partial\hat y^k_j}{\partial\beta_j} \\ &=\hat y^k_j(1-\hat y^k_j)(y^k_j-\hat y^k_j)\\ e_h&=-\frac{\partial L_k}{\partial b_h}\cdot\frac{\partial b_h}{\partial\alpha_h} \\ &=b_h(1-b_h)\sum_{j=1}^lw_{hj}g_j \end{aligned} gjeh=y^jkLkβjy^jk=y^jk(1y^jk)(yjky^jk)=bhLkαhbh=bh(1bh)j=1lwhjgj
具体推导过程比较长,请参考南瓜书。

上述即为标准BP算法:对于每个样例,都先计算输出 y ^ k \hat y_k y^k与损失函数 L k L_k Lk,再计算各层梯度项 g j , e h g_j,e_h gj,eh,最后通过负梯度进行参数更新。

除了标准BP算法外,还有累计BP算法,区别就是累计BP算法通过整个数据集上的平均误差来进行梯度计算以及参数更新,每遍历一次数据集更新一次参数。其损失函数为:
L = 1 m ∑ k = 1 m L k L=\frac{1}{m}\sum^m_{k=1}L_k L=m1k=1mLk

5.3.3 BP网络的不足

只需一个包含足够多神经元的隐层,多层前馈网络就能以任意精度逼近任意复杂度的连续函数。

但因为其学习能力过强,常会遇到过拟合的情况。

为了缓解过拟合,常用以下两种方法:

  • 早停(early stopping):将数据集分成训练集与验证集,验证集不参与训练,若训练集误差降低且验证集误差升高,则停止训练
  • 正则化(regularization):在损失函数中增加一个描述网络复杂度的部分,例如:

L = λ 1 m ∑ k = 1 m L k + ( 1 − λ ) ∑ i w i 2 L=\lambda\frac{1}{m}\sum^m_{k=1}L_k+(1-\lambda)\sum_iw_i^2 L=λm1k=1mLk+(1λ)iwi2

BP网络也常常会落入局部极小(local minimum)之中,而非全局极小(global minimum),这显然是我们不希望遇到的

通常可以采取以下办法来缓解这种情况,但是这些方法都没有严格的理论保障

  • 使用多组不同初始参数来训练网络,取最终结果最好的那一组
  • 使用模拟退火(simulated annealing)技术,即每一步都有一定概率接受比当前解更差的结果
  • 使用随机梯度下降

5.4 其他网络简介

西瓜书在这一节是匆匆带过,毕竟时代在进步,我在这里贴一些链接,就不做详细分析了

5.4.1 RBF网络

5.4.2 ART网络

5.4.3 SOM网络

5.4.4 级联相关网络

5.4.5 Elman网络(RNN)

5.4.6 玻尔兹曼机

5.4.7 深度神经网络

现在最火人工智能领域:深度学习

西瓜书中只做了一丢丢的介绍,那这里我就贴一份本人学过,感觉质量非常高的教程,希望对读者有帮助


参考资料

周志华:《机器学习》

李沐:《动手学深度学习》

维基百科

百度百科

Datawhale:【吃瓜教程】《机器学习公式详解》(南瓜书)与西瓜书公式推导直播合集

孙佳伟:SOM(自组织映射神经网络)——理论篇

你可能感兴趣的:(机器学习,学习,人工智能)