前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Extreme Learning Machines 极限学习机

Extreme Learning Machines 极限学习机

作者头像
caoqi95
发布2019-03-27 18:11:50
3.5K1
发布2019-03-27 18:11:50
举报
文章被收录于专栏:caoqi95的记录日志

最近在看教授很久之前的一篇 Paper ,里面有提到极限学习机(ELM),所以查找资料了解了一下。在查找的过程中,发现很多人抨击 ELM,说其是夸大了贡献,连 Yann LeCun 也公开怼过。也有很多人说 ELM 的训练速度很快且泛化能力好。褒贬不一,不管怎么样,了解学习一下,总是没有错的。

极限学习机(英文:Extreme Learning Machines,缩写ELM),又名超限学习机,为人工智能机器学习领域中的一种人工神经网络模型,是一种求解单隐层前馈神经网络的学习算法。-- 摘自维基百科

算法由来

极限学习机是新加坡南洋理工大学黄广斌教授建立的一个模型,即一个单隐藏的前馈神经网络。但是与传统的前馈神经网络不同,ELM 的主要思想是:(机器或生物)学习可以不需要调整隐层节点,也就是说 ELM 网络隐藏层节点的权重随机生成或者人工定义,学习过程仅需计算输出权重。

ELM 结构 - 摘自黄教授的 PPT

算法原理

在一个 ELM 的单隐层结构中,会有如下一些定义:

  • i 个隐藏节点的输出方程为:

其中 aibi 是第 i 个隐藏节点的参数,ai 是输入权重。hi(x) 为激活函数。 所以,整个隐藏层的输出映射为:

  • 给定 N 个训练样本,ELM 的隐藏层输出矩阵 H 给出为:
  • 具有 L 个隐藏节点的 ELM 结构的输出为:

其中 βi 是第 i 个隐藏节点的输出权重。 所以,整个隐藏层的输出为:

  • 目标矩阵 T 为:
  • 目标函数为:

其中 C 为正则化系数(regularization coefficient)。 奇异值分解(single value decomposition, SVD)可用于求解权重系数:

其中 uiHHT 的特征向量,diH 的特征值。

对于给定 N 组训练数据,使用 ELM 对包含 L 个隐含层和 M 个输出层的单隐层网络结构有如下步骤:

  1. 随机分配节点参数;
  2. 计算隐含层的输出矩阵。输出矩阵本质上即是将 N 个输入数据映射至 L 个节点所得的结果。
  3. 求解输出权重。ELM 算法的核心即是求解输出权重使得误差函数最小。

Python 代码实现

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt
 
def sigmoid(a, b, x):
   '''
   定义Sigmoid函数: g(z) = 1/(1+e^-(ax+b))
   '''
   return 1.0/(1+np.exp(-1.0*(x.dot(a)+b)))
    
def ELM_prototype(X, T, C, n, L):
   '''
   回归问题的ELM标准算法
   变量:X - 输入数据;样本数x特征数(N*n)
          :H - 输出矩阵;样本数x隐含层节点数(N*L)
          :T - 学习目标;样本数x输出层节点数(N*M)
          :C - 正则化系数
   '''
   # 随机初始化
   a = np.random.normal(0, 1, (n, L))
   b = np.random.normal(0, 1)
   # 使用特征映射求解输出矩阵
   H = sigmoid(a, b, X)
   # 计算输出权重和输出函数
   HH = H.T.dot(H); HT = H.T.dot(T)
   beta = np.linalg.pinv(HH+np.identity(L)/C).dot(HT)
   Fl = H.dot(beta)
   # 返回计算结果
   return beta, Fl
# 测试:构造输入值和训练目标(输入变量n=2; 输出变量m=1)
x1 = np.linspace(1, 20, 150)
x2 = np.linspace(-5, 5, 150)
X = np.vstack([x1, x2]).T
T = np.sin(x1*x2/(2*np.pi))+np.random.normal(0, 0.2, 150)
# 使用ELM算法进行学习(隐含层节点数L=100; 正则化参数C=1e5)
beta, Fl = ELM_prototype(X, T, C=1e5, n=2, L=100)
# 绘制学习结果
plt.plot(x1, T, lw=1.5, label='Training goal')
plt.plot(x1, Fl, lw=3, label='ELM output')
plt.legend()

参考

[1]. 极限学习机 - 维基百科 [2]. 极限学习机 - 百度百科 [3]. 黄广斌教授 2016 年中国软件大会演讲 PPT [4]. 知乎 - Extreme learning machine (ELM) 到底怎么样,有没有做的前途? [5]. What's so great about "Extreme Learning Machines"? - Yann LeCun

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.09.20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 算法由来
  • 算法原理
  • Python 代码实现
  • 参考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档