敬请期待该系列的后续内容。
尽管预测结果总是存在争议, 但 Gartner 认为,在 2017 年,会有 84 亿个互联的 IoT 设备 (不包括智能电话),而且一些分析师认为,到 2020 年,该数字将会是 500 亿。就算该数字被高估,但 IoT 设备的数量很快就会超过全球人口数量。而且众所周知,所有这些设备都在不断生成数据;如果不对这些数据进行分析,它们将毫无用处。
认知系统提供了一组技术功能来帮助分析所有这些数据,这些功能包括人工智能 (AI)、自然语言处理、机器学习和高级机器学习。认知系统能自然地向人类学习并与人类交互,以便从数据中收集洞察,帮助人们制定更好的决策。在 我的上一篇文章 中,我曾提到过,认知计算不只是人机交互 (HCI),它还是一种受强大的算法(模型)和接近无限的数据处理功能驱动的高级机器学习。
要了解使用 IoT 传感器和深度学习分析的认知系统,首先需要了解从高级机器学习到神经网络的跳跃式发展。在本文中,我会尝试帮您了解这种跳跃。在未来几周,我将通过 3 篇不同的教程介绍如何在 Apache Spark 上使用 Deeplearning4j、ApacheSystemML 和 TensorFlow (TensorSpark) 深度学习框架检测时序数据上的异常,帮助您充分理解如何使用深度学习为异常检测开发认知 IoT 解决方案。
如果认知系统基于模型,那么您需要首先了解机器学习模型是什么。与通过数据训练来学习隐藏模式的物理模型(白盒)相反,机器学习模型是一种统计模型(黑盒)。
参见 表 1。它包含不同参数的历史数据、在一个制造管道上测量到的观察结果,以及一个二元结果。
部件编号 | 最高温度1 | 最低温度1 | 最大震动 1 | 结果 |
---|---|---|---|---|
100 | 35 | 35 | 12 | 正常 |
101 | 36 | 35 | 21 | 正常 |
130 | 56 | 46 | 3412 | 故障 |
在这个高度人为的示例中,数字的含义不言而喻。您可能已经猜到,高温度和高震动会导致部件故障。出现这种情况的根本原因可能是机器中的某个轴承坏了。
在这个示例中,(监督式)机器学习算法能考虑所有这些数据(以及其他许多数据),以便从纯数据中学习并预测故障。这样一种算法生成的组件被称为机器学习模型。
神经网络 是一种特殊类型的机器学习算法。它非常适合数据,而且能学习任何在数据和结果之间的隐藏数学函数。神经网络的唯一缺陷在于,需要大量的计算资源和数据才能良好执行。那么我为什么还要谈论神经网络呢?我们生活在一个 IoT 世界中,通过使用云,我们可以获得海量的数据和(接近)无限的计算能力。这种情况使神经网络对 IoT 数据处理特别有用。
神经网络的灵感来源于人脑,深度学习网络也是如此。神经网络与深度学习网络的主要区别在于添加了多个神经层。深度学习优于传统机器学习的最明显例子是图像识别。每个最先进的系统都会使用一种特殊类型的深度学习神经网络(称为卷积神经网络)来执行其任务。
例如,基于深度学习的图像识别算法能区分制造管道中的正常部件与故障部件。我将此称为机器智能, IBM Watson Visual Recognition Service中也这么称呼它。对于这个特定的示例,机器可以像人类一样准确完成相同的任务。机器的唯一优势在于,它从不睡觉,从不请病假,而且从不会受伤。此外,如果想让生产量加倍,只需将硬件或云资源量加倍即可。但是,如果要对部件间或性故障进行根本原因分析,则仍是人类专家的领域。不过,认知解决方案可在这种场景中应用深度学习。
事实上,视觉识别服务返回的信息远比 “正常” 或 “故障” 这样的二元结果多得多。像人类一样,该服务会检测图像中偏离标准的结构和区域。现在,如果想将所有声音和震动传感器数据与所有视觉识别数据相关联,我敢肯定这样一个系统能够像人类一样有效地检测故障根源,或者甚至比人类更有效。
如果说与消息代理(比如基于 MQTT 的 IBM Watson IoT Platform)相连的 IoT 传感器是认知解决方案的中枢神经系统,那么深度学习就是大脑。要理解深度学习,需要对回归、感知器、生物和人工神经网络,以及隐藏层有基本的了解。
有许多介绍回归的科学文献,所以我将试着给出适合开发人员的简短说明。考虑 表 2。它与 表 1 相同,但在这里我将结果转换成了二进制表示。
部件编号 | 最高温度1 | 最低温度1 | 最大震动 1 | 结果 |
---|---|---|---|---|
100 | 35 | 35 | 12 | 1 |
101 | 46 | 35 | 21 | 1 |
130 | 56 | 46 | 3412 | 0 |
很容易编写一个软件来实现分类。
- 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
为 0,
- c
为 1,
- a
为 -0.0002930832(也即 -1/3412),最终结果会非常接近我需要的结果。好消息是,参数
- d
- 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)
函数的唯一作用是将从负无穷大到正无穷大的区间缩小为 0 -1 的区间。我只需要定义一个阈值,例如将小于 0.5 的值转换为 0,将大于 0.5 的值转换为 1。
- sigmoid
点击查看大图
您现在已经熟悉了最简单的神经网络:感知器。它类似于逻辑回归模型 - 有一些可忽略不计的差异。但 “神经网络” 这个词要高深得多,对吧?参见 图 2 中的感知器。
我为模型提供
到
- x_1
- x_n
- 的输入,模型拥有w_1到w_n的参数。然后我对这些数值进行求和,并使用一个激活函数(例如sigmoid)将求和结果缩小。如果用稍微不同的方式编写此模型,它看起来类似于:
来源: http://www.ibm.com/developerworks/cn/java/j-cn-elk-power-linux-server/index.html