ML——神经网络
神经元模型
神经网络是由具有适应性的简单单元组成的广泛并行互连的网络,最基本的成分是神经元模型,下图便是一个“M-P神经元模型”。
在这个模型中,神经元接到来自n个其他神经元传递过来的输入信号,通过带权重的连接进行传递,神经元接收到的总输入值将与神经元的阈值θ进行比较,然后通过激活函数f处理产生神经元的输出。
理想的激活函数为(a)阶跃函数,输出值“0”代表神经元抑制,“1”代表神经元兴奋,但考虑到阶跃函数不连续、不光滑的性质,因此常用sigmoid作为激活函数。
把多个神经元按一定的层次结构连接起来就得到了神经网络。
感知机和多层网络
如图,感知机有两层神经元,输入层接收外界输入信号后传递给输出层,输出层是上述介绍的M-P神经元。
感知机只有输出层神经元进行激活函数处理,学习能力非常有限。对于线性可分的问题,感知机的学习过程一定能收敛,但对于非线性可分问题,需考虑使用多层功能神经元,即在输入层和输出层之间添加隐层,隐层和输出层神经元都是具有激活函数的功能神经元。
上图所示的层级结构的神经网络叫“多层前馈神经网络”:每层神经元与下一层神经元全互连,神经元之间不存在同层连接,也不存在跨层连接。其中,输入层神经元仅接受外界输入,不进行函数处理,隐层和输出层包含功能神经元。
反向传播算法BP
反向传播(简称BP)算法是求解多层网络算法中的杰出代表。一般所说的“BP网”是指用BP算法训练的多层前馈神经网络。
BP算法推导
给定训练集下图给出了具有d个输入神经元、l个输出神经元、q个隐层神经元的多层前馈神经网,隐层第h个神经元阈值为,输出层第j个神经元阈值为,输入层第i个神经元与隐层第h个神经元间的连接权为,隐层第h个神经元与输出层第j个神经元间的连接权为,隐层第h个神经元输出为,且隐层和输出层都使用sigmoid函数。
对训练例,设神经网络输出为,即
则网络在上的均方误差为
BP算法在迭代的每一轮采用广义感知机学习规则,基于梯度下降法,以目标的负梯度方向对参数进行调整。
以隐层到输出层的连接权为例:
复合函数求导得:
BP算法流程
BP算法先将输入示例提供给输入层神经元,然后逐层将信号前传,直到产生输出层的结果,然后计算输出层误差,再将误差逆向传播至隐层神经元,最后根据隐层神经元的误差对连接权和阈值进行调整,如此循环迭代,直到达到某些条件为止。流程图如下:
BP算法的目标是要最小化训练集D上的累积误差。上述“标准BP算法”每次更新只针对单个样例,需进行多次迭代已达到累积误差极小点,由于其强大的表示能力,BP常会发生过拟合,因此训练误差持续降低,但测试误差逐渐升高。常用“early stopping”或“regularization”方法解决。
early stopping:将数据集分为训练集和验证集。训练集用于计算梯度、更新连接权和阈值;验证集用于估计误差。若训练集误差降低但验证集误差升高则停止训练,同时返回具有最小验证集误差的连接权和阈值。
regularization:在误差目标函数中增加一个用于描述网络复杂度的部分,eg连接权与阈值的平方和,其中,常用交叉验证法来估计。
全局最小与局部最小
神经网络的训练过程可看做一个参数寻优过程,例如BP算法就是通过梯度下降寻找使累积误差E最小的权值和阈值。常说的最优有“局部极小”和“全局最小”
局部极小解:参数空间中某个点,其领域点的误差函数值均不小于该店的函数值;
全局最小解:参数空间中某个点,所有其他点的误差函数值均不小于该店的函数值;
基于梯度的搜索是使用最为广泛的参数寻优方法,但当误差函数具有多个局部极小,则不能保证此法找到的解是全局最小,因此常用以下一些启发式算法:
1)以多组不同参数值初始化多个神经网络,按标准方法训练后,取其中误差最小的解作为最终参数;
2)使用“模拟退火”:每一部都以一定的概率接受比当前解更差的结果,但也可能会跳出全局最小;
3)使用随机梯度下降,在计算梯度时加入随机因素,使得在局部最小时,梯度仍可能不为0 ,能继续搜索。
其他常见网络
径向基(RBF)网络:单隐层前馈神经网络,示意图如下:
训练RBF网络:1)利用随机采样、聚类等方法确定神经元中心ci;2)利用BP算法确定参数w和β。
Elman网络:递归神经网络,隐层神经元的输出被反馈回来与下一时刻t+1输入层神经元的信号一起,作为隐层神经元在下一时刻的输入,实现时间序列建模的目的。
Boltzmann机:基于能量的模型,能量最小化时达到理想状态。标准的Boltzmann机是全连接的,但计算复杂度高。Restricted Boltzmann机则进行了改进,层内无连接,层间有连接,一般用对比散度来进行训练。
深度学习
理论上,参数越多模型越复杂,容量越大,深度学习模型就是复杂且容量大的模型,它通常有八九层甚至更多隐层。为提高容量,一般会采用增加隐含层数目和增加隐含层神经元数目的方法。
训练:
无监督逐层训练:每次训练一层隐结点,把上一层隐结点的输出作为输入,本层隐结点的输出作为下一层隐结点的输入,称为“预训练”,预训练完成后进行“微调”。预训练+微调可看成将大量参数分组,找出每组局部较好设置,基于其联合进行全局寻优。
权共享:令同一层神经元使用完全相同的连接权。
周志华《机器学习》
网友评论