一个感知器可以接收n个输入x=(x1,x2,…,xn),对应n个权值w=(w1,w2,…,wn),此外还有一个偏置项阈值,就是图中的b,神经元将所有输入参数与对应权值进行加权求和,得到的结果经过激活函数变换后输出,计算公式如下:
BP神经网络训练过程的基本步骤可以归纳如下:初始化网络权值和神经元的阈值,一般通过随机的方式进行初始化;前向传播:计算隐层神经元和输出层神经元的输出;后向传播:根据目标函数公式修正权值wij。上述过程反复迭代,通过损失函数和成本函数对前向传播结果进行判定,并通过后向传播过程对权重参数进行修正,起到监督学习的作用,一直到满足终止条件为止。
BP网络主要用于以下四个方面。
函数逼近:用输入向量和相应的输出向量训练一个网络逼近一个函数。
模式识别:用一个待定的输出向量将它与输入向量联系起来。
分类:把输入向量所定义的合适方式进行分类。
数据压缩:减少输出向量维数以便于传输或存储
激活函数经常使用Sigmoid函数、tanh函数、ReLu 函数。
Sigmoid函数的优点在于输出范围有限,数据在传递的过程中不容易发散,并且其输出范围为(0,1),可以在输出层表示概率值。Sigmoid函数的导数是非零的,很容易计算。
Sigmoid函数的主要缺点是梯度下降非常明显,且两头过于平坦,容易出现梯度消失的情况,输出的值域不对称,并非像tanh函数那样值域是-1到1。
双曲正切函数将数据映射到[-1,1],解决了Sigmoid函数输出值域不对称问题。另外,它是完全可微分和反对称的,对称中心在原点。然而它的输出值域两头依旧过于平坦,梯度消失问题仍然存在。为了解决学习缓慢和梯度消失问题,可使用其更加平缓的变体,如log-log、Softsign、Symmetrical Sigmoid等
ReLU函数是目前神经网络里常用的激活函数,由于ReLU函数是线性特点使其收敛速度比Sigmoid、Tanh更快,而且没有梯度饱和的情况出现。计算更加高效,相比于Sigmoid、Tanh函数,只需要一个阈值就可以得到激活值,不需要对输入归一化来防止达到饱和。
可以有多种方法:
算法的步长选择。步长实际上取值取决于数据样本,可以多取一些值,从大到小,分别运行算法,看看迭代效果,如果损失函数在变小,说明取值有效,否则要增大步长。步长太大,会导致迭代过快,甚至有可能错过最优解。步长太小,迭代速度太慢,很长时间算法都不能结束。所以算法的步长需要多次运行后才能得到一个较优的值。
网络的层数。理论已经证明,具有偏差和至少一个S型隐层加上一个线性输出层的网络,能够逼近任何有理函数,增加层数可以进一步降低误差,提高精度,但同时也是网络 复杂化。另外不能用仅具有非线性激活函数的单层网络来解决问题,因为能用单层网络解决的问题,用自适应线性网络也一定能解决,而且自适应线性网络的 运算速度更快,而对于只能用非线性函数解决的问题,单层精度又不够高,也只有增加层数才能达到期望的结果。
隐层单元数。在能够解决问题的前提下,再加上一两个神经元,以加快误差下降速度即可。
径向基函数网络的隐含层是由径向基函数神经元组成,这一神经元的变换函数为径向基函数。典型的RBF网络由输入层、RBF隐层和由线性神经元组成的输出层。与传统的即神经网络相比,其主要区别是隐层节点中使用了径向基函数、对输入进行了高斯变换、将在原样本空间中的非线性问题,映射到高维空间中使其变得线性,然后在高维空间里用线性可分算法解决,RBF网络采用高斯函数作为核函数:
y=exp-bx-w2
RBF网络的隐层神经元自带激活函数,所以其层数可以只有一层隐层, 权重值数量更少,所以RBF网络较BP网络速度快很多。
当RBF的中心点确定以后,低维空间的输入通过非线性函数到一个高维空间的这种映射关系也就确定了。而隐含层空间到输出空间的映射是线性的,即网络的输出是隐单元输出的线性加权和,此处的权即为网络可调参数。由此可见,从总体上看,网络由输人到输出的映射是非线性的,而网络输出对可调参数而言却又是线性的。这样网络的权就可由线性方程组直接解出,从而大大加快学习速度并避免局部极小问题。
Elman网络是在时间上动态的,具有内部动态反馈的功能,承接层的设置使得Elman网络能够有效应对具有时变特征的数据,在带有时序性的样本数据上有着比静态神经网络更好的预测性能
在中小数据集上,优先选择集成树模型。大数据集上推荐神经网络;在需要模型解释度的项目上,优先使用树模型;在项目时间较短的项目上,如果数据质量低(大量缺失值、噪音等),优先使用集成树模型;在硬件条件有限及机器学习知识有限的前提下,优先选择树模型;对于结构化较高的数据,尤其是语音、图片、语言,优先使用神经网络模型(往往其数据量也较大)。
常用的防止过拟合的方法有参数范数惩罚、数据增强、提前终止、Bagging等集成方法、Dropout、批正则化等。
归一化的目的就是使得预处理的数据被限定在一定的范围内(比如[0,1]或者[-1,1]),从而消除奇异样本数据导致的不良影响。
因为通常神经网络所用的激活函数是sigmoid函数,这个函数有个特点,就是能将负无穷到正无穷的数映射到0和1之间,并且对这个函数求导的结果是f′(x)=f(x)(1−f(x))。因此两个0到1之间的数相乘,得到的结果就会变得很小了。神经网络的反向传播是逐层对函数偏导相乘,因此当神经网络层数非常深的时候,最后一层产生的偏差就因为乘了很多的小于1的数而越来越小,最终就会变为0,从而导致层数比较浅的权重没有更新,这就是梯度消失。
可以使用mini-batch、Stochastic gradient descent等方法。mini-batch是将训练集分组,分组之后,分别对每组求梯度,然后更新参数。加入分 8组,则每次迭代将会做8次梯度下降,更新8次参数。所以mini-batch比传统的梯度下降法下降的速度快。Stochastic gradient descent可以看做是mini-batch的一种特殊情况,当mini-batch size等于1时,mini-batch就退化为Stochastic gradient descent。此时每次迭代中,对于数据集中每个样本都做一次梯度下降。还可以使用Monmentum、RMSprop、Adam等方法。