【深度学习|学习笔记】 Extreme Learning Machine(极限学习机,ELM)的起源、原理、发展和应用(附代码)
【深度学习|学习笔记】 Extreme Learning Machine(极限学习机,ELM)的起源、原理、发展和应用(附代码)
文章目录
欢迎铁子们点赞、关注、收藏!
祝大家逢考必过!逢投必中!上岸上岸上岸!upupup
大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文。详细信息可关注VX “
学术会议小灵通
”或参考学术信息专栏:https://blog.csdn.net/2401_89898861/article/details/146957339
一、起源
- Extreme Learning Machine(ELM) 是由中国学者黄广斌(Guang-Bin Huang)在 2004 年提出的,它是一种针对单隐层前馈神经网络(SLFN, Single-Layer Feedforward Neural Networks)的快速训练算法。
核心理念:
- 随机生成输入层权重和隐藏层偏置
- 只训练输出层权重(一次性通过最小二乘法求解)
这使得 ELM 具有惊人的训练速度,适用于大数据和实时计算场景。
二、原理
网络结构:
- 输入层 → 单隐层(激活函数如 sigmoid/ReLU)→ 输出层
数学原理:
设:
- 输入矩阵 X ∈ R N × d X∈R^{N×d} X∈RN×d, N N N个样本, d d d维特征;
- 隐藏层节点数为 L L L,激活函数为 g ( ⋅ ) g(⋅) g(⋅);
- 输出为 Y ∈ R N × m Y∈R^{N×m} Y∈RN×m, m m m类或 m m m维输出;
ELM 的训练过程:
- 随机生成输入权重 $W∈R^{d×L} 和偏置 b ∈ R L b∈R^L b∈RL
- 计算隐藏层输出矩阵:
- 使用最小二乘法求输出权重 β β β:
其中
H
†
H^†
H† 是广义逆(Moore-Penrose 伪逆)
三、发展
- 2004–2010:提出ELM基础理论,应用于分类、回归等基本任务;
- 2010–2015:发展出 Kernel ELM、Online ELM、Hierarchical ELM 等变种;
- 2015–至今:
将 ELM 与深度学习结合(如 Deep ELM、Stacked ELM);
用于大规模数据、嵌入式设备、低功耗场景;
学术界持续探讨其泛化能力与鲁棒性。
四、改进
五、应用领域
- 图像识别:人脸识别、医学影像分析
- 时间序列预测:如交通流量、电力负荷、金融预测
- 工业控制:设备故障检测、工业分类
- 遥感应用:地物分类、土地覆盖识别
- 边缘计算/IoT:低功耗场景下的快速推理模型
六、Python代码实现(使用 NumPy)
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import OneHotEncoder
from sklearn.metrics import accuracy_score
# 激活函数:sigmoid
def sigmoid(x):
return 1 / (1 + np.exp(-x))
# Moore-Penrose 广义逆
def pseudoinverse(H):
return np.linalg.pinv(H)
# Extreme Learning Machine
class ELM:
def __init__(self, input_size, hidden_size, activation=sigmoid):
self.input_size = input_size
self.hidden_size = hidden_size
self.activation = activation
# 随机初始化输入权重和偏置
self.W = np.random.randn(self.input_size, self.hidden_size)
self.b = np.random.randn(self.hidden_size)
def fit(self, X, y):
H = self.activation(np.dot(X, self.W) + self.b)
H_pinv = pseudoinverse(H)
self.beta = np.dot(H_pinv, y)
def predict(self, X):
H = self.activation(np.dot(X, self.W) + self.b)
output = np.dot(H, self.beta)
return output.argmax(axis=1)
# 数据预处理
iris = load_iris()
X = iris.data
y = iris.target.reshape(-1, 1)
# One-hot 编码
encoder = OneHotEncoder(sparse=False)
y_onehot = encoder.fit_transform(y)
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y_onehot, test_size=0.3, random_state=42)
# 初始化并训练ELM
elm = ELM(input_size=4, hidden_size=100)
elm.fit(X_train, y_train)
# 预测与评估
y_pred = elm.predict(X_test)
y_true = y_test.argmax(axis=1)
print("Accuracy:", accuracy_score(y_true, y_pred))