西瓜书+南瓜书第5章神经网络

目录

  • 5.1神经元模型
    • 5.1.1M-P神经元模型
    • 5.1.2神经网络
  • 5.2感知机与多层网络
    • 5.2.1感知机
    • 5.2.2 多层前馈网络
  • 5.3误差逆传播算法(BP)
    • 5.3.1算法介绍
    • 5.3.2算法工作流程
    • 5.3.3处理过拟合问题
  • 5.4全局最小和局部极小

5.1神经元模型

5.1.1M-P神经元模型

西瓜书+南瓜书第5章神经网络_第1张图片
在这个模型中,神经元接受到来自n个其他神经元传递过来的输入信号,这些输入信号通过带权重的连接进行传递,神经元接受到的总输入值将与神经元的阈值 θ \theta θ进行比较,然后通过激活函数处理以产生神经元的输出。
理想的激活函数是阶跃函数
西瓜书+南瓜书第5章神经网络_第2张图片
它将输入值映射为输出值0或1,其中1对应于神经元兴奋,0对应于神经元抑制,然而,阶跃函数具有不连续性,不光滑等不太好的性质。因此实际上常用Sigmoid函数函数,它能把可能在较大范围内变化的输入值挤压到(0,1)输出值范围内,有时也称为“挤压函数”。

西瓜书+南瓜书第5章神经网络_第3张图片

5.1.2神经网络

把许多这样的神经网络按一定的层次结构连接起来,就得到了神经网络。
我们可以将神经网络视为包含了许多参数的数学模型,这个模型是由若干的函数相互(嵌套)代入而得。

5.2感知机与多层网络

5.2.1感知机

感知机由两层神经元组成,输入层接收外界输入信号后传递给输出层,输出层是M-P神经元,亦称“阈值逻辑单元”。
西瓜书+南瓜书第5章神经网络_第4张图片

感知机能很容易地实现逻辑与、或、非运算。注意到 y = f ( ∑ i w i x i − θ ) y=f(\sum_iw_ix_i-\theta) y=f(iwixiθ),假定 f f f是跃阶函数。有
( x 1 ∧ x 2 x _1\land x_2 x1x2):令 w 1 = w 2 = 1 , θ = 2 , w_1=w_2=1,\theta=2, w1=w2=1,θ=2, y = f ( x 1 + x 2 − 2 ) y=f(x_1+x_2-2) y=f(x1+x22)仅当 x 1 = x 2 = 1 x_1=x_2=1 x1=x2=1时, y = 1 y=1 y=1;
( x 1 ∨ x 2 x_1\vee x_2 x1x2):令 w 1 = w 2 = 1 , θ = 0.5 , w_1=w_2=1,\theta=0.5, w1=w2=1,θ=0.5, y = f ( x 1 + x 2 − 0.5 ) y=f(x_1+x_2-0.5) y=f(x1+x20.5)仅当 x 1 = 1 或 x 2 = 1 x_1=1或x_2=1 x1=1x2=1时, y = 1 y=1 y=1;
( ¬ x 1 \neg x_1 ¬x1):令 w 1 = − 0.6 , w 2 = 0 , θ = − 0.5 , w_1=-0.6,w_2=0,\theta=-0.5, w1=0.6,w2=0,θ=0.5, y = f ( − 0.6 x 1 + 0.5 ) y=f(-0.6x_1+0.5) y=f(0.6x1+0.5)仅当 x 1 = 1 时 , y = 0 ; 当 x 1 = 0 x_1=1时,y=0;当x_1=0 x1=1y=0;x1=0时, y = 1 y=1 y=1.
更一般地,给定训练数据集,权重 w i ( i = 1 , 2 , … , n ) w_i(i=1,2,\dots,n) wi(i=1,2,,n)以及阈值 θ \theta θ可通过学习得到,阈值 θ \theta θ可通过学习得到。阈值 θ \theta θ可看作一个固定输入为 − 1.0 -1.0 1.0的“哑节点”,对应连接权重为 w n + 1 w_{n+1} wn+1这样,权重和阈值的学习可以统一为权重的学习 ,感知机的学习规则非常简单,对训练样例( x \boldsymbol x x, y y y),若当前的感知机的输出为 y ^ \hat y y^,则感知机权重这样调整:随机梯度下降法
w i = w i + Δ w i w_i=w_i+\Delta w_i wi=wi+Δwi其中
Δ w i = η ( y − y ^ ) x i \Delta w_i=\eta(y-\hat y)x_i Δwi=η(yy^)xi
其中 η ∈ ( 0 , 1 ) \eta \in(0,1) η(0,1)称为学习率。可以看出,若感知机对训练样例( x \boldsymbol x x, y y y)预测正确,即 y ^ = y \hat y=y y^=y则感知机不发生变化,否则将根据错误的程度进行权重调整。

  • 这里的 η ∈ ( 0 , 1 ) \eta \in(0,1) η(0,1)的范围是为什么呢?

感知机只有输出层神经元进行激活函数处理,即只拥有一层功能神经元,其学习能力非常有限,事实上,上述与、或、非问题都是线性可分的问题。可以证明【这里就不证明了,记住这个结论吧】,若两类模型是线性可分的,即存在一个线性超平面将它们分开,则感知机的学习过程一定收敛,而求得适当的 w = ( w 1 ; w 2 ; …   ; w n + 1 ) \boldsymbol w=(w_1;w_2;\dots;w_{n+1}) w=(w1;w2;;wn+1).否则感知机学习过程将会发生振荡, w \boldsymbol w w难以稳定下来,不能求合适解。例如感知机无法求解下列的异或这样简单的非线性可分的问题
西瓜书+南瓜书第5章神经网络_第5张图片

5.2.2 多层前馈网络

要解决非线性可分的问题,就要使用多层功能神经元,输入层和输出层之间的一层神经元,被称为隐层或隐含层,隐含层和输出层神经元都是拥有激活函数的功能神经元。
更一般地常见的神经网络是形如下图的层级结构,每层神经元与下一层神经元全互连,神经元之间不存在同层连接,也不存在跨层连接。这样的神经网络结构通常称为“多层前馈神经网络”,其中输入层神经元仅仅是接受输入,不进行函数处理,隐层和输出层包含功能神经元。只需包含隐层,就可称为多层网络。神经网络的学习过程,就是根据训练数据来调整神经元之间的“连接权”,以及每个功能神经元的阈值;换言之,神经网络学到的东西,蕴含在连接权和阈值中。
西瓜书+南瓜书第5章神经网络_第6张图片

5.3误差逆传播算法(BP)

5.3.1算法介绍

多层神经网络需要更强大的学习算法,BP算法是其中的代表,也是迄今为止最成功的神经网络学习算法。BP算法不仅可用于多层前馈网络,还可用于其他类型的神经网络,例如训练递归神经网络。但通常说BP网络时,一般是指用BP算法训练的多层前馈神经网络
那什么是BP是什么样的呢?
给定数据集 D = ( x 1 , y 1 ) , ( x 2 , y 2 ) … ( x m , y m ) , x m ∈ R d , y m ∈ R l D={(\boldsymbol x_1,\boldsymbol y_1),(\boldsymbol x_2,\boldsymbol y_2)\dots(\boldsymbol x_m,\boldsymbol y_m)},\boldsymbol x_m\in \mathbb{R^d},\boldsymbol y_m\in \mathbb{R^l} D=(x1,y1),(x2,y2)(xm,ym),xmRd,ymRl,即输入示例由 d d d个属性描述,输出 l l l维实值向量。为了便于讨论,我们给出一个网络结构。
西瓜书+南瓜书第5章神经网络_第7张图片
上图给出了一个拥有 d d d个属性描述、 l l l个输出神经元、 q q q个隐层神经元的多层前馈网络结构。其中输出层第 j j j个神经元的阈值用 θ j \theta_j θj表示,隐层第 h h h个神经元的阈值用 γ h \gamma_h γh表示,输入层第i个神经元与隐层第 h h h个神经元的连接权为 v i h v_{ih} vih,隐层第 h h h个神经元与输出层第 j j j个神经元之间的连接权为 w h j w_{hj} whj.记隐层第 h h h个神经元接收到的输入为 α h = ∑ i = 1 d v i h x i \alpha_h=\sum_{i=1}^{d}v_{ih}x_i αh=i=1dvihxi,输出层第 j j j个神经元接收到的输入为 β j = ∑ h = 1 q w h j b h \beta_j=\sum_{h=1}^{q}w_{hj}b_h βj=h=1qwhjbh,其中 b h b_h bh为隐层第 h h h个输出。现假设隐层和输出层神经元都使用Sigmoid函数。
对训练例 ( x k , y k ) (\boldsymbol x_k,\boldsymbol y_k) (xk,yk)假定神经网络的输出 y ^ = ( y ^ 1 k , y ^ 2 k , … , y ^ l k ) \hat y=(\hat y_{1}^{k},\hat y_{2}^{k},\dots,\hat y_{l}^{k}) y^=(y^1k,y^2k,,y^lk),即
y ^ j k = f ( β j − θ j ) , \hat y_{j}^{k}=f(\beta_j-\theta_j), y^jk=f(βjθj),
则网络在 ( x k , y k ) (\boldsymbol x_k,\boldsymbol y_k) (xk,yk)上的均方误差为
E k = 1 2 ∑ j = 1 l ( y ^ j k − y j k ) 2 E_k=\frac{1}{2}\sum_{j=1}^{l}(\hat y_{j}^{k}-y_{j}^{k})^2 Ek=21j=1l(y^jkyjk)2
上面的神经网络中有 ( d + l + 1 ) q + l (d+l+1)q+l (d+l+1)q+l个参数确定:输入到隐层的 d × q d\times q d×q个权值,隐层到输出层的 q × l q\times l q×l个权值, q q q个隐层神经元的阈值、 l l l个输出神经元的阈值。BP是一个迭代学习算法,在迭代的每一轮中采用广义的感知机学习规则对参数进行更新估计,任意参数 v v v的更新估计式为
v = v + Δ v v=v+\Delta v v=v+Δv
下面我们以上面神经网络中隐层到输出层的连接权 w h j w_{hj} whj为例来推导。
BP算法基于梯度下降策略,以目标的负梯度方向对参数进行调整,对于均方误差 E k E_k Ek,给定学习率 η \eta η,有
Δ w h j = − ∂ E k ∂ w h j . \Delta w_{hj}=-\frac{\partial E_k}{\partial w_{hj}}. Δwhj=whjEk.
注意到, w h j w_{hj} whj先影响到第 j j j个输出神经元的输出值 β j \beta_j βj,再影响到其输出值 y ^ j k \hat y_{j}^{k} y^jk,然后影响到 E k E_k Ek,有(也就是链式求导)
∂ E k ∂ w h j = ∂ E k ∂ y ^ j k ⋅ ∂ y ^ j k ∂ β j ⋅ ∂ β j ∂ w h j \frac{\partial E_k}{\partial w_{hj}}=\frac{\partial E_k}{\partial \hat y_{j}^{k}}\cdot\frac{\partial \hat y_{j}^{k}}{\partial \beta_j}\cdot\frac{\partial \beta_j}{\partial w_{hj}} whjEk=y^jkEkβjy^jkwhjβj
根据 β j 的 定 义 \beta_j的定义 βj,显然有
∂ β j ∂ w h j = b h \frac{\partial \beta_j}{\partial w_{hj}}=b_h whjβj=bh
S i g m o i d Sigmoid Sigmoid函数有一个很好的性质:
f ′ ( x ) = f ( x ) ( 1 − f ( x ) ) f^{'}(x)=f(x)(1-f(x)) f(x)=f(x)(1f(x))
g j = − ∂ E k ∂ y ^ j k ⋅ ∂ y ^ j k ∂ β j = − ( y ^ j k − y j k ) f ′ ( β j − θ j ) [ 这 步 好 理 解 ] = y ^ j k ( 1 − y ^ j k ) ( y ^ j k − y j k ) [ 这 步 用 了 s i g m o i d 函 数 的 性 质 ] g_j=-\frac{\partial E_k}{\partial \hat y_{j}^{k}}\cdot\frac{\partial \hat y_{j}^{k}}{\partial \beta_j} \\=-(\hat y_{j}^{k}-y_{j}^{k})f^{'}(\beta_j-\theta_j)[这步好理解]\\= \hat y_{j}^{k}(1-\hat y_{j}^{k})(\hat y_{j}^{k}-y_{j}^{k})[这步用了sigmoid函数的性质] gj=y^jkEkβjy^jk=(y^jkyjk)f(βjθj)[]=y^jk(1y^jk)(y^jkyjk)[sigmoid]
这样我们就得到了BP算法中关于 w h j w_{hj} whj的更新公式
Δ w h j = η g j b h \Delta w_{hj}=\eta g_jb_h Δwhj=ηgjbh
类似可得
Δ θ j = − η g j \Delta \theta_j=-\eta g_j Δθj=ηgj
Δ v i h = η e h x i \Delta v_{ih}=\eta e_hx_i Δvih=ηehxi
Δ γ h = − η e h \Delta \gamma_h=-\eta e_h Δγh=ηeh
其中
e h = − ∂ E k ∂ b h ⋅ ∂ b h ∂ α h = − ∑ j = 1 l ∂ E k ∂ β j ⋅ ∂ β j ∂ b h f ′ ( α h − γ h ) = ∑ j = 1 l w h j g j f ′ ( α h − γ h ) = b h ( 1 − b h ) ∑ j = 1 l w h j g j e_h=-\frac{\partial E_k}{\partial b_h}\cdot\frac{\partial b_h}{\partial \alpha_h}\\=-\sum_{j=1}^{l}\frac{\partial E_k}{\partial \beta_j}\cdot\frac{\partial \beta_j}{\partial b_h}f^{'}(\alpha_h-\gamma_h)\\=\sum_{j=1}^{l}w_{hj}g_jf^{'}(\alpha_h-\gamma_h)\\=b_h(1-b_h)\sum_{j=1}^{l}w_{hj}g_{j} eh=bhEkαhbh=j=1lβjEkbhβjf(αhγh)=j=1lwhjgjf(αhγh)=bh(1bh)j=1lwhjgj
学习率 η ∈ ( 0 , 1 ) \eta \in (0,1) η(0,1)控制着算法每一轮迭代的更新步长,若太大则容易振荡,太小则收敛速度又会变慢。有时为了做精细调节,可以使不同式子用的 η \eta η不一定相等。

5.3.2算法工作流程

对每个训练样例,BP算法执以下操作:先将输入示例提供给输入层神经元,然后逐层将信号前传,直到产生输出层的结果,然后计算输出层的误差,再将误差逆向传播至隐层神经元,最后根据隐层神经元的误差来对连接权和阈值进行调整,该迭代过程循环进行,直到达到某些条件停止为止,例如训练误差已达到一个很小的值。
西瓜书+南瓜书第5章神经网络_第8张图片
需要注意的是BP算法的目标是要最小化训练集 D D D上的累计误差
E = 1 m ∑ k = 1 m E k , E=\frac{1}{m}\sum_{k=1}^{m}E_k, E=m1k=1mEk,
但我们上面介绍的“标准BP算法”每次仅针对一个训练样例更新连接权的阈值,也就是说,我们以上的推导的更新规则是基于单个 E k E_k Ek推导而得,如果类似地推导出基于累计误差最小化的更新规则,就得到了累积误差算法,累计BP算法与标准BP算法都很常用,一般来说,标准BP算法每次更新只针对单个样例,参数更新得非常频繁,而且对不同样例进行更新的效果可能出现“抵消”现象。因此,为了达到同样的累计误差最小化,标准BP算法往往需要进行更多次的迭代,它在读取整个数据集一遍后才能对参数进行更新。而累计BP算法算法直接对累积误差最小化,它在读取整个训练集 D D D一遍之后才对参数进行更新,其参数更新的频率低很多,但在很多任务中,累积误差下降到一定程度之后,进一步下降会非常缓慢,这时标准BP往往会更快获得更好的解,尤其在训练集D非常大时更明显。

5.3.3处理过拟合问题

有大佬证明过,只需要一个包含足够多神经元的隐层,多层前馈网络就能以任意精度逼近任意复杂度的连续函数,但如何设置隐层神经元的个数仍是个问题,

当训练集确定之后,输入层结点数和输出层结点数随之而确定,首先遇到的一个十分重要而又困难的问题是如何优化隐层结点数和隐层数。实验表明,如果隐层结点数过少,网络不能具有必要的学习能力和信息处理能力。反之,若过多,不仅会大大增加网络结构的复杂性(这一点对硬件实现的网络尤其重要),网络在学习过程中更易陷入局部极小点,而且会使网络的学习速度变得很慢。隐层结点数的选择问题一直受到神经网络研究工作者的高度重视。

而且因为BP神经网络的强大表示能力,BP神经网络经常遭遇过拟合,即训练误差持续降低,测试误差却可能上升。有两种策略。
1.早停法
将数据集分成训练集和验证集,训练用来计算梯度、更新连接权和阈值,验证集用来估计误差,若训练误差降低而测试误差提高,则停止训练,同时返回具有最小验证集误差的连接权和阈值。
2.正则化
其基本思想是在误差目标函数中增加一个描述网络复杂度的部分,例如连续权与阈值的平方和,仍令 E k E_k Ek表示第 k k k个样例上的误差, w i w_i wi表示连接权和 阈 值 阈值 ,则误差目标函数改变为
E = λ 1 m ∑ k = 1 m E k + ( 1 − λ ∑ i w i 2 ) , E=\lambda \frac{1}{m}\sum_{k=1}^{m}E_k+(1-\lambda\sum_iw_{i}^{2}), E=λm1k=1mEk+(1λiwi2),
其中 λ ∈ ( 0 , 1 ) \lambda \in (0,1) λ(0,1)用于对经验误差与网络复杂度这两项进行折中,常通过交叉验证法来估计。

5.4全局最小和局部极小

西瓜书+南瓜书第5章神经网络_第9张图片

梯度下降法只能保证求出局部最小值,不能保证求出全局最小值。现实任务中,人们常用以下策略来试图跳出局部极小:
1,用多组不同参数值初始化多个神经网络,取其中误差最小的解作为最终参数
2,模拟退火算法
3,随机梯度下降法
4,遗传算法
以上内容源于周志华《机器学习》(西瓜书),笔者以自己的理解写了这篇笔记,如有错误欢迎指正

你可能感兴趣的:(组队学习吃瓜教程,机器学习)