极限学习机的理论
在传统的神经网络训练中,我们通常的做法是要通过梯度下降算法来不断的调整隐层与输出层,输出层与隐层之间的权值矩阵,以及偏置b。但是ELM算法指出,其实隐层的权值矩阵W和偏置b其实是没有必要调整的,在学习算法开始时,任意随机给定W和b的值,利用其计算出H(隐层节点的输出),并令其保持不变,需要确定的参数就只有β了。这是一个比较重要的理论基础。
单隐层前向神经网络(SLFN)结构
设前向神经网络的输入层节点数量为P,特征向量的维数与输入节点数量相同;hidden layer的节点数量为L.
则hidden layer的第i个节点的输出为:
g(x;wi,bi)=g(xwi+bi)
则相当于将P维向量映射到L维向量:
h(x)=[g(x;wl,bl),....,g(x;wL,bL)]
其中wi为第输入层节点与隐层节点之间的第i个链接,bi为偏置,g为激活函数,这里使用sigmoid函数:
g(x;wi,bi)=11+e?(xwi+bi)
输出层的节点数记作M;第i个隐层节点和第j个输出层节点之间的权重为,则节点j的输出为:
fj(x)=∑i=1Lβi,j?g(x;wi,bi)(6)
因此输入样本X,他对应的输出为:f(x)=[f1(x),....,fM(x)],其中:
β=??????β1::βL??????=??????β1,1::βL,1...::...β1,M::βL,M??????
在识别阶段,给定一个样本X,则该样本所属类别为:
label(x)=argj=1,....,Mmaxfj(x)
使用ELM训练SLFN分类器
在ELM算法中,input weight and biases 是随机分配的,因此只有β 需要训练
令 yk 表示输入xk 对应的实际的输出向量,则将所有的训练样本带入公式(6)中可以得到:
Hβ=Y
其中:
H=??????h(x1)::h(xN)??????=??????g(x1;w1,b1)::g(xN;w1,b1)...::...g(x1;wL,bL)::g(xN;wL,bL)??????
Y=??????y1::yN??????=??????y1,1::yN,1...::...y1,M::yN,M??????
训练的目标是使得训练误差||T?Hβ||2和输出权重||β||的范数最小。
因此训练过程可以表示为一个有约束最优化问题:
minimize:ψ(β,ξ)=12||β||2+C2||ξ||2subjectto:Hβ=T?ξ
其中C是一个regularization factor,用来平衡拟合函数的平滑度和函数拟合值与真实数据距离差距这两者之间的关系。
可以使用拉格朗日法解决此问题,如果矩阵(IC+HTH)为非奇异矩阵,则
β=(IC+HTH)?1HTT
若矩阵非奇异,则还可有:
β=HT(IC+HHT)?1T
可以看到,矩阵(IC+HTH)是L*L维的矩阵,而(IC+HHT)是N*N维矩阵,因此当训练样本很大时,可以使用(15)对(14)进行降维处理。
该方法只有两个参数要调节:1)隐层节点数L; 2)规范化系数C
训练速度要比传统的神经网络快
实验测试
实验采用的是标志牌识别实验。
使用标志牌识别数据集GTSRB进行测试。我直接使用的该数据集中已经提取好的HOG特征,输入神经网络中训练。
源代码可以参考我的github:https://github.com/JayYangSS/TrafficSignRecognition_ELM
本代码是基于作者的ELM源代码: http://www.ntu.edu.sg/home/egbhuang/
测试43个种类的标志牌,分类准确度:91.94%。限于计算机内存限制,没有使用全部的训练集样本,只使用了训练集的一半,如果使用全部的训练集相信精度可以更高。