[转] 介绍深度学习和长期记忆网络

来源:互联网 发布:手写记事本软件 编辑:程序博客网 时间:2024/05/19 22:02


机器学习,深度学习 101

IBM Power Systems 入门

WeiboGoogle+用电子邮件发送本页面

Comments
 
0

当今世界中各种分析的现实意义

未经处理的原始数据没有太大价值,但借助正确的分析技术可以获取丰富的洞察,为生活的各个方面提供帮助,比如制定业务决策、竞选活动和推动医学发展。

如图 1 所示,分析周期大致可分为 4 个类别或阶段:描述、诊断、预测和规范分析。机器学习是一种数据分析方法,它自动化了分析模型的构建,所有 4 种分析类型中都会用到它。

4 种分析类型

  • 描述分析:此类分析会根据现有数据确定正在发生的事件
  • 诊断分析:此类分析更进一步,确定为什么会出现某种特定情况。
  • 预测分析:此类分析会考虑跨越更长时间的更大数据集,查看趋势和示例,然后使用该历史信息预测未来发生概率。
  • 规范分析:此类分析超越了预测,提供了关于如何最恰当地改变未来情况来满足您的目标的建议。
图 1. 分析周期的 4 个阶段

2016 年美国总统竞选中各种分析的广泛应用证实了,在分析中使用机器学习的现实意义及其越来越广泛的应用环境。可获得的有用信息的空前增长,再加上技术的进步,共同促进了分析的使用,进而构建并实现了一个更具吸引力的竞选活动。竞选团队会分析投票者情绪、人口细分类别和历史投票模式,使用此信息更有效地计划将竞选工作的重点放在哪些州和哪些投票者身上,以确保获得最高票数。机器学习是实现此目标的关键。由于这一新趋势,所有政治运动中的实际资产都快速从资金转变成了投票者数据,这些数据收集自民意调查者、资金筹集者、现场调查员、用户数据库、私营公司,竞选网站上的 cookie 和跟踪程序,以及社交媒体应用。机器学习算法在这个包含投票者数据的庞大存储库上的应用,改变了竞选的形势,提供了以行动为导向的洞察:对每位投票者的预测。这些洞察在竞选中得到使用,以便采取战略性的方法来筹集资金,更有效地定位广告,建立摇摆州投票者的详细模型。通过计算候选人在投票中胜出的可能性,未坚持投票的支持者这次主动投票的可能性,以及如何通过各种竞选接触途径说服某个人,机器学习能够提高竞选工作的效率。最终,机器学习使得指标对竞选的推动作用更为显著。

机器学习概述

机器学习算法反复从数据中学习,使得无需为计算机明确规划要查看的位置,它就能找到隐藏的洞察。基本上讲,机器学习指导计算机创建算法来解决问题,这些算法是从数百或数千个示例中学到的,然后使用学到的经验解决新情况中的相同问题。根据可供学习系统使用的学习信号 或反馈 的性质,机器学习任务通常分为以下 3 大类:

  • 监督式学习:该算法使用带标签的历史数据进行训练,学习将输入映射 到输出/目标的通用规则。例如,根据投票者历史数据(标记了前几年的选票(标签)的投票者细节),总统竞选可以预测哪些类型的投票者可能投给某位既定候选人,或者哪些类型的投票者能够通过竞选手段来说服,并使用此信息更有效地规划资源利用。

    在监督式学习中,通过一个训练集来发现输入变量(例如年龄和收入等投票者细节)和标签/目标变量(例如特定投票者在上次选举中的选票)之间的关系。计算机/机器从训练数据中学习

    使用测试集来评估所发现的关系是否有效,并通过为模型提供测试数据输入变量,对比模型所预测的标签与数据的实际标签,从而评估预测关系的强度和实用性。

    确定训练数据 与测试数据 之间的划分比例,通常被认为是一件很棘手的事情。将更大比例的数据划分为测试数据,可确保模型性能得到更好的验证。如果训练数据太少,提供给模型供其学习的数据就会更少。一般情况下,训练数据与测试数据采用 60:40 到 80:20 的比例被认为是良好的划分比例。

    最广泛使用的监督式学习算法包括 支持矢量机、线性回归、逻辑回归、朴素贝叶斯 和 神经网络 (多层感知)。

  • 无监督学习: 算法使用无标签的数据进行训练。这些算法的目标是探索数据并寻找其中的某种结构。例如,通过使用这些算法,总统竞选可以识别具有类似属性的投票者的细分类别,然后,通过为每个群体定制竞选策略,可以在竞选中为这些投票者采用类似的处理方式。最广泛使用的无监督学习算法包括集群分析和市场篮分析。
  • 强化学习: 该算法通过一个反馈系统进行学习。该算法会执行相应的操作,并接收有关其操作的适宜性的反馈,然后根据反馈修改策略,采取会在给定时间范围内获得最大预期回报的进一步操作。强化学习最常用于自动驾驶汽车、无人机和其他机器人应用程序中。

深度学习概述

深度学习是一种特殊的机器学习类型,涉及更深层的自动化。机器学习的重大挑战之一是特征提取,程序员需要告诉算法应该寻找哪些种类的信息来帮助制定决策,仅为算法提供原始数据很少会起作用。特征提取给程序员带来了巨大负担,尤其是在复杂问题中,比如物体识别。算法的有效性高度依赖于程序员的技能。深度学习模型能解决此问题,因为它们能自己学会专注于正确的特征,只需程序员提供很少的指导,得到的分析结果比人类获得的还要好。深度学习模型在复杂任务中非常有效,比如情绪分析和计算机视觉。但是,深度学习算法通常需要极高的计算能力,因为学习过程与从低层到高层的学习数据抽象和表示的深层分层结构相关,所以该过程非常缓慢。

IBM Power Systems 上的机器学习入门

使用机器学习需要各种各样的技术和工程技能。要在公司使用机器学习,可能需要一个拥有不同数据和分析领域的知识和技能的专家团队。这些技能包括理解和访问要使用的数据,了解如何使用数据清理工具,理解机器学习概念和算法,拥有分析工具使用经验,编写应用程序,并对实现和部署机器学习处理环境的必要软硬件进行设置。

下面是使用机器学习的常用步骤介绍:

  1. 通过设置和配置 IBM Power Systems 服务器,开始运行机器学习工作负载。
  2. 确定要解决的业务问题。
  3. 识别和收集要使用的数据,预处理数据,以便将它们清理和转换为实用状态,并在使用监督式学习算法时将它们划分为训练数据 和测试数据
  4. 确定要使用的机器学习算法。算法是根据需要回答的业务问题来确定的。例如,可使用神经网络执行预测分析,而对于客户细分,可以使用集群分析。要使用的最合适算法还取决于可用数据的状态。例如,如果数据中有部分是缺失值,决策树可能是首选的算法,因为它们可以更好地处理这些缺失值。
  5. 选择分析工具并将其安装在 IBM Power Systems 上。每个分析工具都支持一种或多种编程语言。所以,用于构建模型的编程语言通常取决于所选的工具。工具示例包括 SPSS、SAS、开源工具和 Spark MLlib。语言示例包括 R、Java™ 和 Python。
  6. 编写代码,以便使用所选的机器学习算法构建一个或多个模型,并使用训练数据 训练这些模型。如果已经构建了一个监督式学习模型,则使用测试数据 测试它,并执行必要的配置调优来实现更高的准确度。如果有多个模型,可以根据处理测试数据 的性能来选择最佳模型。
  7. 在 IBM Power Systems 上运行模型。
  8. 使用 Apache Spark 提高性能,在分布式模式中或跨一个基于 IBM POWER8® 处理器的服务器集群节点来运行模型。
  9. 在分析工具中可视化结果,比如 IBM Power Systems 上的 IBM Cognos® Business Intelligence。

为什么要使用 IBM Power Systems 执行机器学习应用程序?

在 IBM Power Systems 上运行机器学习和深度学习工作负载有许多好处。这些工作负载可能需要大量浮点计算,需要大量内存和 I/O 带宽,因此可以利用图形处理单元 (GPU) 加速来提高性能。IBM Power 服务器具有更大缓存,而且能将数据推送到数值协处理器或 GPU,所以适合运行这些工作负载。深度学习框架还提供了预先构建的开源选项,以便在基于 POWER8 处理器的服务器上轻松安装 GPU。因为 IBM Power® 平台能将大数据和深度学习融合到同一个平台上,因此这些工作负载能直接在 IBM Power 服务器上的大数据/Hadoop 基础架构附近运行,而无需执行提取、转换和加载 (ETL)。

IBM Power Systems 上提供的与机器学习相关的分析工具

要在 IBM Power Systems 上使用机器学习和深度学习,有多种选择。

POWER / Linux 或 AIX 上的 IBM SPSS

IBM SPSS® 支持多种机器学习算法。可使用 SPSS Modeler 创建和测试模型,并使用 SPSS Collaboration and Deployment Services 运行模型。请参阅介绍如何在基于 IBM POWER8 处理器的服务器上运行和调节 SPSS Modeler,以实现卓越性能的相关博客。

POWER / AIX 上的 SAS

SAS 支持 IBM Power Systems 上的众多分析工具。Enterprise Miner 支持使用多种机器学习算法来构建和测试模型。

有关更多信息,请访问:http://www.sas.com

POWER / Linux 上提供的开源机器学习和深度学习库

许多开源机器学习库变得越来越流行。一些开源机器学习和深度学习库可在 IBM Power Systems 上运行,包括 Caffe、Torch 和 Theano,未来还会出现其他许多库。

  • 可参阅 Micheal Gschwind 的博客,进一步了解如何开始在 Power Systems 上使用开源机器学习和深度学习。
  • 可参阅 Michael Gschwind 的博客,进一步了解新的用于深度学习的 OpenPOWER 软件发行版。
  • 请参阅 OpenPOWER 深度学习产品简介,其中介绍了 Power Systems 机器学习和深度学习参考架构。

POWER / Linux 上的 Apache Spark MLlib

Apache Spark 是一个分布式处理环境。Spark 的一个重要组件是 MLlib,这是一个机器学习库。该库可供 Spark 支持的编程语言使用:Java、Scala、Python 和 SparkR。MLlib 支持数十种算法和实用工具,这些资源可在 Spark MLlib 指南 中找到。

可参阅 Raj Krishnamurthy 和 Randy Swanberg 的博客,了解 Apache Spark 如何在 IBM POWER8 上以 2 倍的速度运行。

该博客总结了 3 种关键的机器学习工作负载(逻辑回归、支持矢量机和矩阵因子分解),以及在基于 x86 处理器的 IBM POWER8 上实现卓越性能的推荐配置。

立即行动

加入 IBM Data Science Experience,以便在您开始在 IBM Power Systems 上使用机器学习和深度学习时,与其他数据科学家进行交流和协作。

OpenPOWER 曾有一场名为 OpenPOWER Developer's Challenge 的黑客马拉松。其中一个专题是通过 OpenPOWER 上的 Apache Spark 实现深度学习 (The Accelerated Spark Rally)。这是试验深度学习的绝佳机会!可以在此处获取更多信息。

资源

IBM 还有更多机器学习产品。以下是两个附加资源:

  • IBM 海法研究实验室
  • IBM developerWorks 网站机器学习专区
来源: https://www.ibm.com/developerworks/cn/analytics/library/l-machine-learning-deep-learning-trs/index.html







介绍深度学习和长期记忆网络

使用深度学习检测 IoT 时序数据中的异常

WeiboGoogle+用电子邮件发送本页面

Comments
 
0

系列内容:

此内容是该系列 1 部分中的第 1 部分: 使用深度学习为异常检测开发认知 IoT 解决方案

尽管预测结果总是存在争议, 但 Gartner 认为,在 2017 年,会有 84 亿个互联的 IoT 设备 (不包括智能电话),而且一些分析师认为,到 2020 年,该数字将会是 500 亿。就算该数字被高估,但 IoT 设备的数量很快就会超过全球人口数量。而且众所周知,所有这些设备都在不断生成数据;如果不对这些数据进行分析,它们将毫无用处。

认知系统提供了一组技术功能来帮助分析所有这些数据,这些功能包括人工智能 (AI)、自然语言处理、机器学习和高级机器学习。认知系统能自然地向人类学习并与人类交互,以便从数据中收集洞察,帮助人们制定更好的决策。在 我的上一篇文章中,我曾提到过,认知计算不只是人机交互 (HCI),它还是一种受强大的算法(模型)和接近无限的数据处理功能驱动的高级机器学习。

要了解使用 IoT 传感器和深度学习分析的认知系统,首先需要了解从高级机器学习到神经网络的跳跃式发展。在本文中,我会尝试帮您了解这种跳跃。在未来几周,我将通过 3 篇不同的教程介绍如何在 Apache Spark 上使用 Deeplearning4j、ApacheSystemML 和 TensorFlow (TensorSpark) 深度学习框架检测时序数据上的异常,帮助您充分理解如何使用深度学习为异常检测开发认知 IoT 解决方案。

从机器学习到神经网络和深度学习

如果认知系统基于模型,那么您需要首先了解机器学习模型是什么。与通过数据训练来学习隐藏模式的物理模型(白盒)相反,机器学习模型是一种统计模型(黑盒)。

参见 表 1。它包含不同参数的历史数据、在一个制造管道上测量到的观察结果,以及一个二元结果。

表 1. 机器学习模型

在这个高度人为的示例中,数字的含义不言而喻。您可能已经猜到,高温度和高震动会导致部件故障。出现这种情况的根本原因可能是机器中的某个轴承坏了。

在这个示例中,(监督式)机器学习算法能考虑所有这些数据(以及其他许多数据),以便从纯数据中学习并预测故障。这样一种算法生成的组件被称为机器学习模型

神经网络 是一种特殊类型的机器学习算法。它非常适合数据,而且能学习任何在数据和结果之间的隐藏数学函数。神经网络的唯一缺陷在于,需要大量的计算资源和数据才能良好执行。那么我为什么还要谈论神经网络呢?我们生活在一个 IoT 世界中,通过使用云,我们可以获得海量的数据和(接近)无限的计算能力。这种情况使神经网络对 IoT 数据处理特别有用。

神经网络的灵感来源于人脑,深度学习网络也是如此。神经网络与深度学习网络的主要区别在于添加了多个神经层。深度学习优于传统机器学习的最明显例子是图像识别。每个最先进的系统都会使用一种特殊类型的深度学习神经网络(称为卷积神经网络)来执行其任务。

例如,基于深度学习的图像识别算法能区分制造管道中的正常部件与故障部件。我将此称为机器智能, IBM Watson Visual Recognition Service中也这么称呼它。对于这个特定的示例,机器可以像人类一样准确完成相同的任务。机器的唯一优势在于,它从不睡觉,从不请病假,而且从不会受伤。此外,如果想让生产量加倍,只需将硬件或云资源量加倍即可。但是,如果要对部件间或性故障进行根本原因分析,则仍是人类专家的领域。不过,认知解决方案可在这种场景中应用深度学习。

事实上,视觉识别服务返回的信息远比 “正常” 或 “故障” 这样的二元结果多得多。像人类一样,该服务会检测图像中偏离标准的结构和区域。现在,如果想将所有声音和震动传感器数据与所有视觉识别数据相关联,我敢肯定这样一个系统能够像人类一样有效地检测故障根源,或者甚至比人类更有效。

人工神经网络的工作原理

如果说与消息代理(比如基于 MQTT 的 IBM Watson IoT Platform)相连的 IoT 传感器是认知解决方案的中枢神经系统,那么深度学习就是大脑。要理解深度学习,需要对回归、感知器、生物和人工神经网络,以及隐藏层有基本的了解。

首先介绍线性和逻辑回归

有许多介绍回归的科学文献,所以我将试着给出适合开发人员的简短说明。考虑 表 2。它与 表 1 相同,但在这里我将结果转换成了二进制表示。

表 2. 人工神经网络数据

很容易编写一个软件来实现分类。

def  predict  (datapoint): 
     if  datapoint.MaxVibration1 > 100 :
         return 0
     else :
         return 1

在这个白盒模型示例中,您的底层物理系统知识(或分析数据的领域专家知识)有助于创建一些规则。机器学习的理念是让机器从数据中学习这些规则。完成此学习的方式是,使用一个框架 (skeleton),并使用优化算法来填充该框架的缺失部分。我将使用这样一个框架(线性回归):

def  predict (dp) :
     return  a + b * dp.MaxTemp1 + c * dp.MinTemp1 + d * dp.MaxVibration1

如您所见,如果我选择参数 b 和 c 为 0,a 为 1,d 为 -0.0002930832(也即 -1/3412),最终结果会非常接近我需要的结果。好消息是,参数 a、b、c 和 d 可从算法中学习。结果:机器学习!

您可能注意到,结果并不是准确的 1 或 0,因为线性回归是一个(尝试预测浮点类型值的)连续模型。但我想要的是一个二元分类器。让我们通过添加一个名为 sigmoid 的帮助器函数,将此算法转换为逻辑回归模型。

import  math
 
def  sigmoid (x):
    return  1 / (1  +  math.exp( - x))
 
def  predict (dp):
    return  sigmoid(a + b * dp.MaxTemp1 + c * dp.MinTemp1 + d * dp.MaxVibration1)

sigmoid 函数的唯一作用是将从负无穷大到正无穷大的区间缩小为 0 -1 的区间。我只需要定义一个阈值,例如将小于 0.5 的值转换为 0,将大于 0.5 的值转换为 1。

图 1. sigmoid 函数映射区间
sigmoid 函数映射区间

最简单的神经网络:感知器

您现在已经熟悉了最简单的神经网络:感知器。它类似于逻辑回归模型 - 有一些可忽略不计的差异。但 “神经网络” 这个词要高深得多,对吧?参见 图 2 中的感知器。

图 2. 一个感知器
感知器

我为模型提供 x_1 到 x_n 的输入,模型拥有 w_1 到 w_n 的参数。然后我对这些数值进行求和,并使用一个激活函数(例如sigmoid)将求和结果缩小。如果用稍微不同的方式编写此模型,它看起来类似于:

out(x_1,x_2,…,x_n) = activation_function(w_0+w_1*x_1+w_2*x_2+…+w_n*x_n)

如果将 activation_function 替换为 sigmoid,则又回到了逻辑回归。唯一的区别是……它现在看起来更像大脑的结构。但是人脑是什么样子的?

从生物神经网络到人工神经网络

看看 图 3 中的生物神经元。在数学术语中,树突是 “输入”,上游数据从这里传入;细胞体(和突触)计算总和并执行 “激活函数”;“结果” 通过轴突发送到下游的后续神经元。

图 3. 生物神经元
生物神经元

因为很有趣(至少对我而言),让我们来看看 图 4,它描绘了一个(以生化方式)将神经元连接在一起的生物突触。这个图中描绘了感知器中的 w_n 值的集合。

图 4. 生物突触
生物突触

如果将多个神经元链接在一起,就会获得一个如 图 5 所示的大脑或人工神经网络。

图 5. 人工神经网络
人工神经网络

不同之处在于隐藏层

这个人工网络与感知器的最大区别在于隐藏层。隐藏层是什么?它有用吗?可能有用。至少在人脑中,隐藏层似乎很有用,因为我们的大脑中堆叠着数百个隐藏层。在图 6 中的这个前馈神经网络示例中,可以看到模型堆叠在一起。

图 6. 堆叠神经网络层来实现图像识别
堆叠神经网络层来实现图像识别

没有看到?看看这个模型的编程语言表示形式。但在这么做之前,让我告诉您一个秘密。一个被数学家用来吓跑所有人的秘密。但这个秘密非常简单。我讲的是矢量乘法。矢量是什么?矢量就是一列数字,没有别的。程序员可能称之为数组。矢量乘法的定义稍有不同。它规定,如果有一个矢量 x=(x_1,x_2,...,x_n) 和另一个矢量 w=(w_1,w_2,…,w_n),而且如果将它们相乘 x*w,那么结果是一个值:

w_1*x_1+w_2*x_2+…+w_n*x_n

此模型看起来熟悉吗?如果不熟悉,让我们再次看看线性回归。我可以通过计算 sigmoid(x*w) 来计算一个神经元。而且因为 Python 不支持直接使用矢量乘法,所以我可以使用 numpy 库来实现此目的。我将开始计算一个神经元:

import numpy as np
 
datapoint = {" MaxTemp1 ": 35 , " MinTemp1 ": 35 , " MaxVibration1 ": 12 }
 
#randomly initialize weights
w_layer1 = np.random.rand(4)
 
def  neuron1 (dp):
    x = np.array([ 1 ,dp[" MaxTemp1 "],dp[" MinTemp1 "],dp[" MaxVibration1 "]])
    return  sigmoid(x.dot(w_layer1))
 
print (neuron1 ( datapoint ) )

如果想要同时计算多个神经元(例如一个层的所有神经元),可以使用此函数多次。但是数学家发明了另一个概念来迷惑您(如果您没有被矢量乘法弄晕):矩阵乘法。在神经网络中,可以像线性回归中一样并行执行不同次数的计算,而且可以通过这种形式将此过程编写为矩阵乘法。

同样地,我假设输入包含在矢量 x=(x_1,x_2,...,x_n) 中。但是现在我想同时计算隐藏层中的所有神经元。无需将 x乘以一个权重矢量 w 来计算一个神经元,我将 x 乘以一个权重矩阵 w=

w_1_1,  w_1_2,.., w_1_m
w_2_1,  w_2_2,.., w_2_m
w_n_1,  w_n_2,.., w_n_m

矩阵乘法将 w*x = 定义为

(w_1_1*x_1,  w_1_2*x_2,.., w_1_m*x_n,
w_2_1*x_1,  w_2_2*x_2,.., w_2_m*x_n,
 w_n_1*x_1,  w_n_2*x_2,.., w_n_m*x_n)

我的结果是一个浮点值矢量,然后可以将该矢量提供给下一层。这是 Python 中的相同代码:

import numpy as np
 
#make sigmoid function applicable to vectors instead of scalars only
def  sigmoid (z):
    s =  1.0  / ( 1.0  + np.exp(- 1.0  * z))
      return  s
 
datapoint = {" MaxTemp1 ": 35 , " MinTemp1 ": 35 , " MaxVibration1 ": 12 }
 
#randomly initialize weights, now as a matrix for the four hidden layer neurons
w_layer1 = np.random.rand(4,4)
 
def  layer 1 (dp):
    x = np.array([ 1 ,dp[" MaxTemp1 "],dp[" MinTemp1 "],dp[" MaxVibration1 "]])
      return  sigmoid(x.dot(w_layer1))
 
print ( layer 1 ( datapoint ) )

如您所见,代码段 x.dot(w_layer1) 没有发生任何改变。但在内部应用了矩阵乘法而不是矢量乘法,因为 w_layer1现在是一个矩阵而不是矢量。最后,我需要添加输出层,并编写了以下代码:

w_layer2 = np.random.rand( 5 , 2 )
 
def  layer2 (x):
    x = np.concatenate(([ 1 ],x))
      return  sigmoid(x.dot(w_layer2))
 
print (layer2(layer1(datapoint)))

当然,权重矩阵 w 未经训练,仅被随机初始化。对神经网络的训练不属于本文的讨论范围。

备注:这个随机神经网络输出了两个浮点数。这些数字是某个项属于一个类或其他类的概率。同样地,因为该神经网络未经训练,所以这些数字目前没有任何意义。

[ 0.97435552   0.89144977]

深入了解隐藏层

隐藏层有何作用?就其本身而言,每一层都可以视为一个单独的机器学习算法。上游层的输出被用作输入,它的输出被传递到下一层,然后下一层使用该输出作为输入,依此类推。此行为意味着,当堆叠各种层和创建深度神经网络时,系统会学习数据的中间表示,以帮助下游层更有效地完成其工作。最具有启发性的示例是人脑的视觉系统。前几层(感光器后的几层)无法识别面部、汽车和猫,但能识别形状,比如线、圆、矩形和点。越深入,一层能识别的东西就越多……直到最终识别整幅图像。

因此,我在本节中得出以下结论:深度前馈神经网络能学习任何数学函数(只要有足够的数据和计算能力来训练它)。

时序数据需要长期记忆网络

希望您深信神经网络非常强大。但不幸的是,对于时序数据(IoT 数据主要是时序数据),前馈网络存在着缺陷。这些网络很难识别顺序,因为它们不会保留记忆。此问题的一个解决方案是添加反馈循环。

图 7. 反馈循环
反馈循环

这些反馈循环从某种程度上解决了这个问题,因为网络现在是能够记忆的。但它只会临时记住最近发生的事件。如果网络要记住更久远的事件,可向神经元添加记忆细胞来获得长期记忆 (LSTM) 网络,如 图 8 所示。

图 8. 长期记忆网络
长期记忆网络

训练需要计算能力

LSTM 网络有何缺点?在使用神经网络时,需要大量数据和计算能力才能获得良好的性能。好消息是,目前的图形处理单元 (GPU) 卡的计算能力已相当于 2009 年的一个 16.000 核心集群。此外,IBM 正准备 发布一种神经形态芯片,该芯片由 IBM Watson Group 提供,具有相同的计算能力,但功耗仅为 3 瓦。所以未来有望提高性能和节约能源。

LSTM 网络可以学习任何算法

为什么我会在认知 IoT 场景中介绍所有这些内容?因为 LSTM 网络是图灵完备的。这意味着 LSTM 网络能学习计算机可执行的任何算法。就这么简单。

而且这与许多用于时序预测和异常检测的最先进机器学习算法形成了鲜明对比,这些算法是认知 IoT 所涉及的领域。在认知 IoT 应用中,您需要预测系统的未来状态来提前采取调控措施,或者您想在某个部件发生故障时获得通知。

那么最先进的算法有何问题?毫无问题。我说的是 LSTM 通常比最先进的算法表现得更好;有时会好很多,有时会好一点,很少比它们表现得差(尤其是在有足够的数据来训练系统时)。用额外的计算成本换取准确性的提升是否值得,这取决于具体用例。

演示用例:IoT 时序数据的异常检测

请思考这个演示用例。这个用例是后续教程的基础。考虑对测量轴承的震动传感器(加速计)数据执行异常检测任务。可以将一个传感器附加到轴承上,如 图 9 所示。

图 9. 轴承上的加速计传感器
轴承上的加速计传感器

加速计传感器记录了 3 个几何轴 x、y 和 z 上的震动。更复杂的传感器还会考虑旋转运动模式,但对我们而言这个简单模式就足够用了,因为在每个智能电话中都能找到它。(如果想了解如何访问和分析智能电话中的加速计,可以阅读这篇 教程。)由于很难将这样一个系统在此展示,我需要在 Node-RED 中实现一个模拟器,以便使用物理洛伦茨吸引子模型生成数据。我将在教程中使用生成的这些数据来检测异常,主要预测轴承何时会损坏。

我可以在两种状态之间切换测试数据生成器:正常和故障。图 10是一个相位图,显示了一个正常状态下的一个时序上的 3 个震动维度。

图 10. 正常状态的相位图
正常状态的相位图

通过 图 10 中的同一个相位图,可以观察到,只需稍微改动物理模型的参数,即可获得故障状态。

图 11. 故障状态中的相位图
故障状态中的相位图

如果不熟悉相位图,图 12 和 图 13 给出了 3 个轴值(在正常和故障状态下)的运行图。

图 12. 正常状态中的运行图
正常状态中的运行图
图 13. 故障状态中的运行图
故障状态中的运行图

一种常见技术是,使用 DFT(离散傅立叶变换)或小波变换将此数据从时域转换为频域。图 14 和 图 15 中也给出了正常和故障状态的 DFT。

图 14. 正常状态的离散傅里叶变换
正常状态的离散傅里叶变换
图 15. 故障状态的离散傅里叶变换
故障状态的离散傅里叶变换

可以清楚地看到,故障状态消耗的能量更多,出现的频率也更高。此数据足以用来训练您前面学到的分类器。但我们可以做得更好。我们将构造一个能从数据中学习正常行为的系统,而且在看到新的(未曾见过的)数据(或顺序模式)后,它会发出警报。

图 16 中所示的基于 LSTM 的自动编码器就是这样一个系统。

图 16. LSTM 自动编码器模型
LSTM 自动编码器模型

这个系统通过神经瓶颈尝试重建它看到的相同数据,从而压缩大量数据,但同样也会在使用瓶颈时,丢弃大量不相关数据。这样一种神经网络能学习系统的正常行为,而且只要看到新模式,它就很难重建数据并会发出警报。

结束语

现在您已充分理解神经网络,也理解了数据应用深度学习概念对认知系统中的 IoT 数据有何作用。

在接下来的 3 篇文章中,我将重点介绍如何在 Apache Spark 上使用不同技术实现这样一个深度学习系统,并进一步加强您对这种技术能在您系统中产生的影响的理解。我会介绍 IBM 云中运行的开放标准和开源解决方案,比如 Deeplearning4j、Apache SystemML 和 TensorFlow (TensorSpark)。

相关主题

  • 进一步了解使用深度学习超越结构化数据的 IoT 用例
  • 创建认知应用程序时需要知道的 5 件事
  • 突破图灵极限的计算
  • 递归神经网络难以置信的有效性
  • 脑启发计算机简介:TrueNorth 的神经元彻底改变了系统架构

来源: https://www.ibm.com/developerworks/cn/analytics/library/iot-deep-learning-anomaly-detection-1/index.html





阅读全文
0 0
原创粉丝点击