极限学习机(ELM)
1. 引言
在机器学习领域,我们常常需要通过训练数据来学习一个函数模型,以便在未知的数据上进行预测或分类。传统的神经网络模型需要大量的参数调整和迭代优化,学习效率很低。极限学习机(Extreme Learning Machine, ELM)是一种基于随机化的单层前向神经网络,其学习速度快、精度高、易于实现等诸多优点,成为近年来研究热点。
本篇文章将详细介绍极限学习机的原理及应用,并给出相应的代码实现。
2. ELM基本原理
2.1 ELM的结构
ELM主要由三部分组成:
- 输入层:负责接收输入样本向量X,输出样本特征。
- 隐含层:包含K个隐含节点,每个隐含节点的输出为一个加权和,即 z k = ∑ i = 1 n w i k x i + b k z_k = \sum_{i=1}^{n}w_{ik}x_i + b_k zk=∑i=1nwikxi+bk,其中 w i k w_{ik} wik表示输入层第 i i i个神经元到隐含层第 k k k个神经元的连接权重, b k b_k bk是偏置项。
- 输出层:输出层的神经元数等于样本类别数。对于二分类问题,输出层有两个神经元,分别表示正负类别,输出结果为一个向量 y = ( y 1 , y 2 ) T y=(y_1,y_2)^T y=(y1,y2)T。
2.2 ELM的学习过程
ELM的核心思想是随机初始化隐含层与输出层之间的连接权重与偏置,从而实现快速训练并得到高精度的模型。
具体地,对于一个训练集 T = ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x n , y n ) T={(x_1, y_1),(x_2, y_2),...,(x_n,y_n)} T=(x1,y1),(x2,y2),...,(xn,yn),我们先将输入样本 X = x 1 , x 2 , . . . , x n X={x_1,x_2,..., x_n} X=x1,x2,...,xn 通过某种函数,如sigmoid函数或ReLU函数,映射到高维特征空间,得到新的输入矩阵 H = [ h i j ] K × n H=[h_{ij}]_{K\times n} H=[hij]K×n,其中 h i j = g ( z k ) h_{ij}=g(z_k) hij=g(zk), g ( z k ) g(z_k) g(zk)为隐含层第 k k k个神经元的激活函数。
然后,我们随机初始化隐含层与输出层之间的连接权重 W K × m W_{K\times m} WK×m,其中 m m m为输出层神经元数,即样本类别数。用矩阵表示,输出层的输出 Y = [ y i ] m × n Y=[y_{i}]_{m\times n} Y=[yi]m×n 可以表示为:
Y = W ⋅ H Y=W \cdot H Y=W⋅H
接下来,我们利用最小二乘法(Least Square Method, LSM)来计算输出层与训练数据之间的拟合误差。具体地,对于两个 n n n维向量 y i y_i yi 和 t i t_i ti,其残差平方和可以表示为:
E ( W ) = 1 2 ∑ i = 1 n ∣ ∣ y i − t i ∣ ∣ 2 E(W)=\frac{1}{2}\sum_{i=1}^{n}||y_i - t_i||^2 E(W)=21i=1∑n∣∣yi−ti∣∣2
把上式改写成矩阵形式,可得:
E ( W ) = 1 2 ∣ ∣ Y − T ∣ ∣ F 2 E(W)=\frac{1}{2}||Y-T||_F^2 E(W)=21∣∣Y−T∣∣F2
其中, T = [ t i j ] m × n T=[t_{ij}]_{m\times n} T=[tij]m×n 表示输出层对应的目标向量。
对于固定的隐含层神经元数 K K K,输出层权重 W W W 可以通过以下公式计算得出:
W = ( H T H ) − 1 H T T W=(H^{T}H)^{-1}H^{T}T W=(HTH)−1HTT
也就是说,我们只需要求出输入层到隐含层的权重 W K × n W_{K\times n} WK×n 和隐含层到输出层的权重 W K × m W_{K\times m} WK×m 即可。这样,ELM的学习过程就完成了。
2.3 ELM的预测过程
在得到模型的权重之后,我们便可以利用新的样本计算输出层的结果。
对于一个未知样本 x x x,我们先将其通过激活函数映射到隐含层:
h i = g ( ∑ j = 1 n w i j x j + b i ) h_{i}=g(\sum_{j=1}^{n}w_{ij}x_j+b_i) hi=g(j=1∑nwijxj+bi)
然后,将映射后的隐含层的输出与隐含层到输出层的权重相乘,并进行加权和:
y = W ⋅ h y=W \cdot h y=W⋅h
最终,通过对 y y y 进行分类处理,即可得出该样本的类别。
3. ELM的应用场景
3.1 ELM在手写数字识别中的应用
手写数字识别是机器学习领域中的一个经典问题,也是ELM的重要应用之一。我们可以使用MNIST数据集进行实验。
以下是Python代码:
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.datasets import fetch_openml
# 下载MNIST数据集并划分训练集与测试集
mnist = fetch_openml('mnist_784', version=1)
X_train, X_test, y_train, y_test = train_test_split(mnist.data, mnist.target, test_size=0.2, random_state=42)
# 定义sigmoid激活函数
def sigmoid(x):
return 1 / (1 + np.exp(-x))
# 定义ReLU激活函数
def relu(x):
return np.maximum(x, 0)
# 定义ELM分类器
class ELMClassifier:
def __init__(self, hidden_units, activation='relu'):
self.hidden_units = hidden_units
self.activation = activation
def fit(self, X, y):
# 对于二分类问题,将样本标签转换为{-1, 1}
self.classes_ = np.unique(y)
if len(self.classes_) == 2:
y = np.where(y == self.classes_[0], -1, 1)
# 计算隐含层的权重和偏置
n_samples, n_features = X.shape
if self.activation == 'sigmoid':
H = sigmoid(np.dot(X, self.random_weights(n_features, self.hidden_units)))
else:
H = relu(np.dot(X, self.random_weights(n_features, self.hidden_units)))
H = np.hstack([H, np.ones((n_samples, 1))])
self.beta = np.dot(np.linalg.inv(np.dot(H.T, H)), np.dot(H.T, y))
def predict(self, X):
if self.activation == 'sigmoid':
H = sigmoid(np.dot(X, self.random_weights(X.shape[1], self.hidden_units)))
else:
H = relu(np.dot(X, self.random_weights(X.shape[1], self.hidden_units)))
H = np.hstack([H, np.ones((X.shape[0], 1))])
y_pred = np.dot(H, self.beta)
if len(self.classes_) == 2:
y_pred = np.where(y_pred >= 0, self.classes_[1], self.classes_[0])
else:
y_pred = self.classes_[np.argmax(y_pred, axis=1)]
return y_pred
def random_weights(self, n_input, n_output):
epsilon = np.sqrt(6) / np.sqrt(n_input + n_output)
return np.random.randn(n_input, n_output) * epsilon
# 训练并测试ELM分类器
elm = ELMClassifier(hidden_units=256, activation='relu')
elm.fit(X_train, y_train)
y_pred = elm.predict(X_test)
print('Accuracy:', accuracy_score(y_test, y_pred))
运行结果:
Accuracy: 0.9505
3.2 ELM在其他领域的应用
除了手写数字识别,ELM还被广泛应用于图像识别、人脸识别、语音识别、信号处理、金融预测、回归分析等领域。由于ELM具有学习速度快、精度高、易于实现等优点,因此在大规模数据集上的学习和预测中具有广阔的前景。
4. ELM的优缺点与发展方向
4.1 优点
- 快速学习:ELM的学习过程只需一次正向传播,无需迭代更新权重,因此学习速度快;
- 高精度预测:ELM表现出与传统神经网络相当的或更好的预测精度;
- 易于实现:ELM仅有一层隐含层,且权重初始化为随机值,因此实现非常简单。
4.2 缺点
- 隐含层神经元的数量和激活函数的选择可能会对ELM的性能产生影响,需要进行实验调参;
- 对于非线性可分的数据,需要使用非线性激活函数或增加隐含层节点,否则ELM的表现可能不如其他分类算法。
4.3 发展方向
- 研究ELM在深度学习中的应用;
- 探索更加高效的ELM优化算法;
- 将ELM应用到其他领域的问题求解中,如推荐系统等。