人工神经网络ANN
0、感知机:包括输入节点、输出节点两部分,输入节点和输出节点用一个表示权重的值连接。感知机的输出值是计算输入节点的加权和,减去一个偏置项,然后使用一个激活函数将计算结果转化为一个信号值输出。(值的计算表达式上等同于线性SVM和多元线性回归,直观上很好理解。)
用数学的形式表达为 y=sign(wj*xj +…+w2*x2+w1*x1 -t),其中sign函数代表一个激活函数,可以是符号函数、双曲正切函数、信号函数、逻辑函数等。用向量的形式表达为:y=sign(w.x),其中权重向量w=(wj,..,w2,w1,-t), 输入向量x=(xj,..,x2,x1,1)。它是线性的,决策边界是一个线性超平面。
训练感知机的过程就是调整权重向量w使输出结果值匹配原结果值的过程。训练过程最主要的步骤就是权重更新公式。利用前一步得到的权重值加上真实值和预测值的误差项的一个比例,但是需要有一个学习率作为系数来控制每次调整的步长。学习率介于0-1之间,越接近0 ,说明新的权重受迭代前权重的影响较大,越接近1,说明新的权重受本次迭代计算的影响较大。可以使用自使用的学习率,在前期迭代中数值大些,后期迭代中慢慢变小。类似但作用不同于优化算法中模拟退火算法中的温度的变化。
感知机学习算法可以找到一个线性可分数据集的最优解,如果数据集不是线性可分的,没有一个超平面能将数据集分开,那么一个感知机是做不到的。但是可以用多层感知机或非线性SVM解决。
1、多层人工神经网络:在输入层和输出层之间有多层隐藏节点,隐藏层节点和输出节点可以使用不同类型的激活函数。
前馈神经网络中,一层节点只与下一层的节点连接。感知机是单层前馈神经网络。在递归神经网络中,节点可以和同层或者前一层的节点连接。
ANN模型的权重学习就是找到一个算法使得在足够的训练样本下,权重向量能收敛到一个正确解。即ANN学习算法的目标是寻找权重向量w,使得误差平方和E(w)最小。
不同于单层感知机的权重更新公式,神经网络ANN模型使用梯度下降法更新权重。反向传播算法用来解决隐藏层的梯度下降问题。本质上等同于复合函数求导问题。
反向传播算法包括两部分,forward阶段和backward阶段。向前的阶段,根据当前迭代的权重值从前向后逐层计算每层神经网络节点的值。向后的阶段,根据下一层节点的计算值与预期值,利用上述的梯度下降法来反向逐层更新权重值。这里求第k层的梯度就是复合函数求导的过程了。
2、设计一个ANN模型需要思考清楚以下几点:(1)确定有多少输入节点,为数值型、二元性、分类性等不同类型的输入变量设计输入节点表达和个数。(2)确定有多少输出节点,一个二分类问题设计一个输出节点就足够了,对于有k个分类的问题,可能需要设计k个输出节点。(3)选择好网络拓扑结构,有多少隐藏层和隐藏节点,是前馈的还是递归的神经网络结构。(4)训练之前需要给权重一个初始值,可以使用随机指定的方式。(5)训练集中对于缺失值的情况要删除或者用插值法替换成可能值。
3、ANN模型的特点:(1)具有至少一层隐藏层的多层神经网络是普适近似的,即可以近似任何目标函数。(2)ANN模型可以节点冗余特征问题,在权重值学习过程中,冗余特征的权重会变得很小。(3)模型对于训练集中存在的噪声非常敏感。可以使用验证集来确定泛化误差。(4)使用梯度下降法更新权重可能使得解陷入一个局部最小解。可以在权重更新公式中增加一个动量项来避免这个问题。(5)训练一个ANN模型需要挺长的时间,尤其是隐藏层比较多的时候。但是一旦模型训练好,用来做分类是很快的。