美文网首页
2019-02-27

2019-02-27

作者: jessica涯 | 来源:发表于2019-03-02 20:18 被阅读0次

ML——神经网络

神经元模型

神经网络是由具有适应性的简单单元组成的广泛并行互连的网络,最基本的成分是神经元模型,下图便是一个“M-P神经元模型”。

在这个模型中,神经元接到来自n个其他神经元传递过来的输入信号,通过带权重的连接进行传递,神经元接收到的总输入值将与神经元的阈值θ进行比较,然后通过激活函数f处理产生神经元的输出。

理想的激活函数为(a)阶跃函数,输出值“0”代表神经元抑制,“1”代表神经元兴奋,但考虑到阶跃函数不连续、不光滑的性质,因此常用sigmoid作为激活函数。

把多个神经元按一定的层次结构连接起来就得到了神经网络。

感知机和多层网络

如图,感知机有两层神经元,输入层接收外界输入信号后传递给输出层,输出层是上述介绍的M-P神经元。

感知机只有输出层神经元进行激活函数处理,学习能力非常有限。对于线性可分的问题,感知机的学习过程一定能收敛,但对于非线性可分问题,需考虑使用多层功能神经元,即在输入层和输出层之间添加隐层,隐层和输出层神经元都是具有激活函数的功能神经元。

上图所示的层级结构的神经网络叫“多层前馈神经网络”:每层神经元与下一层神经元全互连,神经元之间不存在同层连接,也不存在跨层连接。其中,输入层神经元仅接受外界输入,不进行函数处理,隐层和输出层包含功能神经元。

反向传播算法BP

反向传播(简称BP)算法是求解多层网络算法中的杰出代表。一般所说的“BP网”是指用BP算法训练的多层前馈神经网络。

BP算法推导

给定训练集D=\left\{ (x_1,y_1),(x_2,y_2),...(x_m,y_m) \right\} ,x_i\in R^d,y_i\in R^l下图给出了具有d个输入神经元、l个输出神经元、q个隐层神经元的多层前馈神经网,隐层第h个神经元阈值为\gamma _h,输出层第j个神经元阈值为\theta _j,输入层第i个神经元与隐层第h个神经元间的连接权为v_{ih},隐层第h个神经元与输出层第j个神经元间的连接权为w_{hj},隐层第h个神经元输出为b_h,且隐层和输出层都使用sigmoid函数。

对训练例(x_k,y_k),设神经网络输出为\hat{y} _k=(\hat{y}_{1}^k, \hat{y}_{2}^k,...\hat{y}_{l}^k),即 

                                                \hat{y} _{j}^k =f(\beta _j-\theta _j)

则网络在(x_k,y_k)上的均方误差为E_k=\frac{1}{2} \sum_{j=1}^l(\hat{y}_{j}^k-y_{j}^k   )^2

BP算法在迭代的每一轮采用广义感知机学习规则,基于梯度下降法,以目标的负梯度方向对参数进行调整。

\nu =\nu +\Delta \nu \\\Delta \nu =-\eta \frac{\partial E_k}{\partial\nu }

以隐层到输出层的连接权w_{hj}为例: \Delta w_{hj}=-\eta \frac{\partial E_k }{\partial w_{hj}}

复合函数求导得:                         \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}}

BP算法流程

BP算法先将输入示例提供给输入层神经元,然后逐层将信号前传,直到产生输出层的结果,然后计算输出层误差,再将误差逆向传播至隐层神经元,最后根据隐层神经元的误差对连接权阈值进行调整,如此循环迭代,直到达到某些条件为止。流程图如下:

BP算法的目标是要最小化训练集D上的累积误差。上述“标准BP算法”每次更新只针对单个样例,需进行多次迭代已达到累积误差极小点,由于其强大的表示能力,BP常会发生过拟合,因此训练误差持续降低,但测试误差逐渐升高。常用“early stopping”或“regularization”方法解决。

early stopping:将数据集分为训练集和验证集。训练集用于计算梯度、更新连接权和阈值;验证集用于估计误差。若训练集误差降低但验证集误差升高则停止训练,同时返回具有最小验证集误差的连接权和阈值。

regularization:在误差目标函数中增加一个用于描述网络复杂度的部分,eg连接权与阈值的平方和,其中\lambda \in (0,1),常用交叉验证法来估计。

全局最小与局部最小

神经网络的训练过程可看做一个参数寻优过程,例如BP算法就是通过梯度下降寻找使累积误差E最小的权值和阈值。常说的最优有“局部极小”和“全局最小

局部极小解:参数空间中某个点,其领域点的误差函数值均不小于该店的函数值;

全局最小解:参数空间中某个点,所有其他点的误差函数值均不小于该店的函数值;

基于梯度的搜索是使用最为广泛的参数寻优方法,但当误差函数具有多个局部极小,则不能保证此法找到的解是全局最小,因此常用以下一些启发式算法:

1)以多组不同参数值初始化多个神经网络,按标准方法训练后,取其中误差最小的解作为最终参数;

2)使用“模拟退火”:每一部都以一定的概率接受比当前解更差的结果,但也可能会跳出全局最小;

3)使用随机梯度下降,在计算梯度时加入随机因素,使得在局部最小时,梯度仍可能不为0 ,能继续搜索。

其他常见网络

径向基(RBF)网络:单隐层前馈神经网络,示意图如下:

训练RBF网络:1)利用随机采样、聚类等方法确定神经元中心ci;2)利用BP算法确定参数w和β。

Elman网络:递归神经网络,隐层神经元的输出被反馈回来与下一时刻t+1输入层神经元的信号一起,作为隐层神经元在下一时刻的输入,实现时间序列建模的目的。

Boltzmann机:基于能量的模型,能量最小化时达到理想状态。标准的Boltzmann机是全连接的,但计算复杂度高。Restricted Boltzmann机则进行了改进,层内无连接,层间有连接,一般用对比散度来进行训练。

深度学习

理论上,参数越多模型越复杂,容量越大,深度学习模型就是复杂且容量大的模型,它通常有八九层甚至更多隐层。为提高容量,一般会采用增加隐含层数目增加隐含层神经元数目的方法。

训练:

无监督逐层训练:每次训练一层隐结点,把上一层隐结点的输出作为输入,本层隐结点的输出作为下一层隐结点的输入,称为“预训练”,预训练完成后进行“微调”。预训练+微调可看成将大量参数分组,找出每组局部较好设置,基于其联合进行全局寻优。

权共享:令同一层神经元使用完全相同的连接权。

周志华《机器学习》

相关文章

网友评论

      本文标题:2019-02-27

      本文链接:https://www.haomeiwen.com/subject/pjrxuqtx.html