在传统的神经网络训练中,我们通常的做法是要通过梯度下降算法来不断的调整隐层与输出层,输出层与隐层之间的权值矩阵,以及偏置b。但是ELM算法指出,其实隐层的权值矩阵W和偏置b其实是没有必要调整的,在学习算法开始时,任意随机给定W和b的值,利用其计算出H(隐层节点的输出),并令其保持不变,需要确定的参数就只有 β 了。这是一个比较重要的理论基础。
设前向神经网络的输入层节点数量为 P ,特征向量的维数与输入节点数量相同;hidden layer的节点数量为 L .
则hidden layer的第i个节点的输出为:
则相当于将P维向量映射到L维向量:
因此输入样本X,他对应的输出为: f(x)=[f1(x),....,fM(x)] ,其中:
在识别阶段,给定一个样本X,则该样本所属类别为:
在ELM算法中,input weight and biases 是随机分配的,因此只有 β 需要训练
令 yk 表示输入 xk 对应的实际的输出向量,则将所有的训练样本带入公式(6)中可以得到:
其中:
训练的目标是使得训练误差 ||T−Hβ||2 和输出权重 ||β|| 的范数最小。
因此训练过程可以表示为一个有约束最优化问题:
可以看到,矩阵 (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%。限于计算机内存限制,没有使用全部的训练集样本,只使用了训练集的一半,如果使用全部的训练集相信精度可以更高。