周志华西瓜书学习笔记(五)
神经网络笔记介绍
神经元模型
诸如生物学中的定义,神经元是神经系统的基本单位,能过接受信息、整合信息、传导和输出信息。在输出的信息中,神经元传递出“兴奋”或者“抑制”的信息。
同理在神经元模型中,神经元接收到来自n个其他神经元传递过来的输入信号,这些输入信号通过带权重的连接(connection)进行传递,神经元接收到的总输入值将与神经元的阈值进行比较,然后通过“激活函数”(activation function)处理以产生神经元的输出。
这里的“激活函数”就是将神经元收到的总输入转换为输出的function,它的形式有很多。比如,阶跃函数和Sigmoid函数。
阶跃函数由于不连续、不光滑等不太好的性质,我们往往只用Sigmoid函数更多。
而只要想生物学上那样把一个个神经元连接在一起,就能得到神经网络模型。
感知机与多层网络
-
定义:感知机由两层神经元组成,如下图,输入层接收外界输入信号后传递给输出层。
-
学习规则:对一个训练样例(x,y),若感知机的输出为 y ^ \widehat{y} y ,则感知机权重将调整为: w i ← w i + △ w i , △ w i = η ( y − y ^ ) x i w_i←w_i+△w_i,△w_i=\eta(y-\widehat{y})x_i wi←wi+△wi,△wi=η(y−y )xi。即对权重增加上学习率乘以Loss function的导数(后续会介绍),但由于感知机涉及的参数并不多,可以直接加上学习率乘以(真实值和预测值的偏差)乘以x来理解,更方便计算。
当然,如果感知正确, ( y − y ^ ) (y-\widehat{y}) (y−y )等于0,所以 △ w i △w_i △wi就等于0,无需进行调整。
对于第k个数据在第j个输出神经元(假设总计l个输入神经元,m个权重,算上 θ \theta θ共计m+1个)中, y ^ = f ( β j − θ j ) \widehat{y}=f(\beta_j-\theta_j) y =f(βj−θj)
均方误差 E k = 1 2 ∑ j = 1 l ( y ^ j k − y j k ) 2 E_k=\frac{1}{2}\sum_{j=1}^l(\widehat{y}_j^k-y_j^k)^2 Ek=21∑j=1l(y jk−yjk)2
y ^ = ∑ i = 1 m + 1 w i x i \widehat{y}=\sum_{i=1}^{m+1}w_ix_i y =∑i=1m+1wixi
所以求 E k E_k Ek关于 w i w_i wi求导是一个隐函数求导过程。 ∂ ( E ) ∂ ( w i ) = − ( y − y ^ ) ⋅ ∂ ( y ^ ) ∂ ( w i ) = − ( y − y ^ ) ⋅ x i \frac{\partial(E)}{\partial(w_i)}=-(y-\widehat{y})·\frac{\partial(\widehat{y})}{\partial(w_i)}=-(y-\widehat{y})·x_i ∂(wi)∂(E)=−(y−y )⋅∂(wi)∂(y )=−(y−y )⋅xi
-
感知机只有输出层神经元进行激活函数处理,即只拥有一层功能神经元,其学习能力非常有限,只能处理线性可分的问题。
-
要解决非线性可分的问题,要考虑使用多层网络。常见的神经网络是形如下图所示的层级结构,每层神经元与下一层神经元全互连,神经元之间不存在同层连接,也不存在跨层连接。这样的神经网络结构通常称为“多层前馈神经网络”(multi-layer feedforward neural networks)。
- 输入层:神经元仅接收外界输入信息,不进行函数处理
- 隐层(hidden layer):隐层神经元为功能神经元,进行函数处理
- 输出层:输出层神经元为功能神经元,进行函数处理与结果输出
-
神经网络的学习过程:就是根据训练数据来调整神经元之间的“连接权”(connection weight) 以及每个功能神经元的阈值;
换言之,神经网络学到的东西,蕴涵在连接权与阈值中。
误差逆传播算法
多层网络的学习能力比单层感知机强得多。误差逆传播(errorBackPropagation,简称BP)算法就是训练多层网络的杰出代表。BP算法不仅可用于多层前馈神经网络,还可用于其他类型的神经网络。但通常说“BP网络”时,一般是指用BP算法训练的多层前馈神经网络。结构如下图:
从这图从得到一定的数学关系对后续推到有用:
b h = ∂ ( β j ) w h j b_h=\frac{\partial(\beta_j)}{w_{hj}} bh=whj∂(βj)
x i = ∂ ( α h ) v i h x_i=\frac{\partial(\alpha_h)}{v_{ih}} xi=vih∂(αh)
该网络中有 ( d + l + 1 ) ⋅ q + l (d+l+1)·q+l (d+l+1)⋅q+l个参数需要确定:
d∗q个输入层与隐层神经元的权值;
q∗l个隐层到输出层的权值;
q个隐层神经元的阈值;
l个输出神经元的阈值。
-
均方误差
-
学习过程:BP算法基于梯度下降(gradient descent)策略,以目标的负梯度方向对参数进行调整。对误差 E k = 1 2 ∑ j = 1 l ( y ^ j k − y j k ) 2 E_k=\frac{1}{2}\sum_{j=1}^l(\widehat{y}_j^k-y_j^k)^2 Ek=21∑j=1l(y jk−yjk)2,给定学习率η,有
-
工作流程:
从repeat循环和for循环可以看出,一旦某个样例 ( x k , y k ) (x_k, y_k) (xk,yk)使得各参数做出更新,则需开始新一轮迭代,重新从 y 1 y_1 y1开始又逐次进行检验更新。
具体的数据流过程为:输入示例传给输入层,再逐层将信号前传,直到产生输出层的结果,然后计算输出层的误差(第4-5行),再将误差逆传播至隐层神经元(第6行),根据隐层神经元的误差来对连接权和阈值进行调整(第7行)。
停止条件:训练误差达到一个很小的值
BP算法的目标是最小化训练集D上的累积误差: E = 1 m ⋅ ∑ k = 1 m E k E=\frac{1}{m}·\sum_{k=1}^mE_k E=m1⋅∑k=1mEk
上述介绍的是每次针对一个样例更新连接权和阈值即标准BP算法,同理可以推到出基于累积误差最小化的更新规则(即每次都是基于累计误差而不再是单个误差进行调整),就得到了累积误差逆传播算法。这两者的区别本质上是随机梯度下降和标准梯度下降法的区别。
缓解BP网络的过拟合的做法:
- “早停(early stopping)”:将数据分成训练集和验证集,训练集用来计算梯度,更新连接权和阈值,验证集用来估计误差。若出现上文所述的过拟合现象,则停止训练,同时返回具有最小验证集误差的连接权和阈值。
- “正则化(regularization)”:在误差目标函数中增加一个用于描述网络复杂度的部分,例如连接权和阈值的平方和。
5.4全局最小和局部最小
这部分的介绍在之前的笔记中有提到过,详情见https://blog.csdn.net/weixin_44469952/article/details/118979192?spm=1001.2014.3001.5502