来源:https://www.analyticsvidhya.com/blog/2018/05/alternative-deep-learning-hierarchical-temporal-memory-htm-unsupervised-learning/
一、介绍
深度学习已经证明了它在监督学习领域的优势,在监督学习中,我们明确地定义了需要完成的任务。但是,当涉及到无监督学习时,使用深度学习的研究要么停滞不前,要么根本没有起步!
我们的大脑有几个区域执行得完美无缺,但我们仍然不明白它是如何执行的。因为我们没有“如何”的答案,我们在这些领域没有取得很多进展。
如果你喜欢我之前关于人脑功能的文章,来创建机器学习算法来解决复杂的现实世界问题,你将会喜欢这篇关于分层时态记忆(HTM)的入门文章。我相信,这是我们最接近于复制人类大脑的基本原理。
在这篇文章中,我们将首先讨论深度学习尚未渗透的领域。然后我们将研究深度学习和HTM之间的区别,然后深入研究HTM的概念,它的工作原理和应用程序。
让我们来看看它。
二、目录
1、深度学习需要发展的领域
2、深度学习真的像大脑学习吗?
3、新大脑皮层速成课程
4、HTM与深度学习有何不同?
5、HTM的应用已经实现并进行了商业测试
6、层次化时间记忆(HTM)的工作
7、HTM的简单python实现
8、那么Numenta的下一步是什么?
三、深度学习需要发展的领域
以下是一些深度学习还有很长的路要走的领域:
1、研究无监督数据模型——人类通常基于大脑中运行的有监督模型来执行动作。
2、与实时流数据一起工作——人类可以处理我们从感官获得的实时输入信息。
3、将来自各个数据源的信息结合起来——尽管我们可能会感觉到苹果、看到苹果、品尝苹果的味道或者苹果的气味,我们的大脑将所有这些信息整合成一个单一的想法。
4、一次学习——人类可以学习的数据点非常少。如果你尝了一种新的水果,比如几次猕猴桃,你就会开始非常准确地辨别这种新的水果。
5、情境理解——人类在每一次新的经历中都结合了很多过去的信息和背景。例如,如果你吃了一根很苦的香蕉,你会马上把它吐出来。你怎么知道它已经变坏了,甚至没有尝过这种水果?显然,这是你以前吃过的。
6、使用高速数据-想象你正在和一个朋友谈话,有一个物体正朝你走来。幸运的是,你朝那个方向看,并迅速改变位置以拯救自己。当你往不同的方向看时,发送到大脑的整个图像会发生变化,但大脑仍然能够快速适应。
深度学习在上述六个方向上都取得了一些进展,但我们离最终的状态还很远。以下是我们在六个领域的深入学习所取得的成果:
1、在无监督的数据模型上工作——我们现在有自动编码器和RBMs,可以在无监督问题上工作,但通常它们不会返回最终的操作,而是一些嵌入到进一步的过程中。
2、处理实时流数据——深度学习还不能处理实时流数据。
3、将来自许多单独数据源的信息组合在一起——我们已经看到了在组合数据源上使用深度学习模型的一些初步成功,但是我们还没有看到一些强有力的结果。
4、一次学习,一些基于嵌入模型像面部识别可以做一次机会学习但是我们只有少数这样的成功的故事。
5、上下文的理解——长期的短期记忆(LSTM)和门控循环单元(GRU)是能够处理上下文数据的模型,但它们只能在有监督任务的基础上执行上下文,而不是在无监督的任务上。
6、使用高速数据——gpu已经压缩了深度学习模型的处理时间,但是我们目前讨论的是与人类大脑相比,极少量的神经元。一个类似大脑的模型需要的时间仍然是巨大的。
您可能已经意识到,人工神经网络不能为上述所有技能提供单一的解决方案。然而,我们的大脑使用一种常见的学习算法来处理上述所有的属性。这就引出了一个基本的问题。
三、深度学习真的像大脑学习吗?
人类的大脑一直是深度学习领域的终极动力。但是我们创造了一个非常精确的公式来复制大脑功能,以ANNs的形式,它在过去的几十年里没有改变。我们是在说,我们的大脑在没有意识到的情况下,就在处理这些复杂的数学函数吗?我们很确定我们的大脑不会通过梯度的反向传播来学习(这是深度学习的基本原理)。
在深度学习空间中,神经网络(RNN)结构是最接近我们大脑的结构。你可以阅读我之前在RNNs上的一篇文章,我将它们与人类大脑进行比较。但与大脑不同,RNNs是有监督的学习模式。那么,如果深度学习远不能复制人类的大脑结构,有没有人试图复制大脑结构,他们找到成功的方法了吗?
答案是肯定的!Numenta是一家成立于2005年的公司,专门致力于复制人类大脑的功能,并将其用于人工智能领域。Numenta是由Palm Pilot背后的人,杰夫霍金创立的。Nementa创造了一个叫做层次化时间记忆(HTM)的框架,它可以复制大脑的新皮质的功能,而新皮质是我们大脑中负责人类真正智力的组成部分。我将讨论HTM,它在本文中是实际的应用程序,但是首先让我们做一个关于Neocortex的速成课程。
四、大脑皮层上速成班
我们的大脑主要有三个部分——大脑皮层、边缘系统和爬虫似的复合体(Neocortex, Limbic system and Reptilian complex)。
边缘系统支持大部分与情绪相关的功能,包括行为、动机和情绪状态。爬虫似的复合体是所有的生存本能,比如吃、睡等。大脑皮层是大脑中赋予我们推理能力和其他高级大脑功能的部分,如知觉、认知、空间推理、语言和运动指令的产生。
新大脑皮层是哺乳动物的一种发展,几乎就像我们头骨里的餐巾。一般来说,每当我们用通俗的语言谈论“大脑”或“智力”时,我们几乎总是指大脑皮层。如果我们查看Neocortex的详细结构(下图),您将看到许多负责不同任务的部分。
关于新皮层的一个有趣的事实是,所有这些区域的细胞结构几乎是相同的,无论是来自视觉处理区域还是音频处理区域。这一发现非常重要,因为这意味着大脑正试图解决类似的问题来处理任何类型的感官数据——视觉、听觉等。稍后在讨论HTM时,我们将提到这个层次结构。
感官数据表现为低层的简单思想,高层的思想更加抽象。在深度学习空间中与这一过程相似的是,神经网络的初始层检测简单的思想,如边缘,中间层检测形状,最后层识别对象。
足够的生物学知识,让我们开始谈业务和讨论HTM模型。用你将要学习的东西来初始化你的大脑的最好方法是与一个已知的概念——深度学习进行对比。
五、HTM与深度学习有何不同?
正如您在上图中看到的,这两种方法之间的差异是显著的。如果您以前使用过深度/机器学习,您就会知道,在没有找到梯度的情况下,很难想象一个模型是如何工作的。Hebbian学习算法是最古老的学习算法之一,其原理非常简单——当突触两边的神经元(输入和输出)有高度相关的输出时,两个神经元之间的突触就会得到加强。
在深入研究HTM如何工作之前,我将向您介绍如何使用HTM来解决实际问题。这将给你更多的动力去了解这个新技术。
六、HTM的应用已经实现并进行了商业测试
首先,让我们试着确定一下“我们什么时候可以期望HTM比其他学习技术更好?”
1、输入数据是否有时间?要判断数据是否是时间的,一种简单的方法是随机地洗牌数据,看看数据的语义是否发生了变化;
2、数据有高速度吗?高速数据的输入非常频繁,需要在线学习而不是批量学习;
3、是否有多个数据源创建输入?这些数据源可以有完全不同的结构,例如,图像数据和音频数据一起使用;
4、你需要模型不断学习吗?
5、你的数据标记吗?由于标签数据非常昂贵,我们有很多问题因为没有标签的数据而无法解决。
如果以上所有问题的答案都是“是”,那么HTM就是解决之道。异常检测是一项需要实时操作的任务,是一种无监督模型。以下是异常检测的一般框架:
以下是已经进行商业测试的几个用例:
1、使用Grok进行服务器异常检测:Grok是Numenta中第一个用于异常检测的商用产品。一个重要的用例是服务器监视中的异常。服务器以高频率生成大量指标,如CPU使用率、GPU使用率等。Grok为单个度量创建一个SDR,并将其输入到单独的HTM模型中。HTM模型会在用户看到任何指标异常时向用户发送一个触发器。这个应用程序已经在主要的云服务提供商那里进行了测试,并且被证明是非常有用的。
2、股票交易量异常:此应用程序跟踪上市公司的股票价格和Twitter数据,并在发现异常时发出警报,以便及时采取买入/卖出操作。下面是界面(取自Numenta的白皮书):
3、流氓人类行为:公司在数据安全上花了很多钱。流氓人类行为是一个基于HTM的应用程序,可以帮助自动发现这些日期安全问题。这种系统的应用包括:
发现不寻常的员工进入知识产权和内部系统;
发现个体交易者的异常金融交易行为或资产配置;
当员工的行为或行为超出典型模式时,发送警报;
检测未批准软件的安装、激活或使用;
当员工的电脑或设备被未经授权的个人使用时,发送警报。系统对员工姓名进行了异常评分(图片取自Numenta的白皮书):
4、自然语言预测:在NLP应用中,深度学习非常成功。Numenta声称其HTM模型可以提供类似或更好的准确性。目前,他们已经测试了简单的NLP任务,如语言模型,并发现结果是有希望的。Numenta与Corticalio合作,创建了嵌入和语言模型,已经显示出强大的效果。在本文后面,我将向您展示如何使用Cortical.io的API接口。
5、地理空间跟踪:地理空间跟踪获取不同位置(纬度或经度)的输入,以及车辆或人的速度。我们将这些指标转换成SDR,并将它们输入到HTM模型中。如果模型在数据中发现任何异常,它将向您发送一个触发器。这种跟踪可以被任何运输或出租车服务用于跟踪他们的所有车辆。这是Numenta的白皮书中引用的一个例子:
该算法最初尝试学习一条全部显示为红色的路线。渐渐地,它学会了每个纬度、经度和速度,并按特定的顺序排列。任何路线、速度或方向的变化都将作为异常被跟踪并报告回来。
七、层次化时间记忆(HTM)的工作
HTM的工作原理如下(不要害怕):
从各种数据源生成的输入时间数据在语义上被编码为一个称为稀疏分布式表示(SDR)的稀疏数组。这个被编码的数组经过一个叫做空间池的处理,将来自不同来源的输入数据规范化/标准化成一个稀疏的输出向量或小列(金字塔状神经元的列),具有确定的大小和固定的稀疏性。这种空间池的学习是通过Hebbian的学习和延长的不活跃细胞的刺激来完成的。空间池通过一种称为时间记忆的算法保留输入数据的上下文。
对于那些根本不懂上述语言的人,不要担心!我会把它分解。关键词以粗体突出显示,需要先理解才能完全掌握HTM。
概念1:稀疏分布表示
SDR只是0和1的数组。如果你对大脑中的神经元进行快照,很有可能你只会看到少于2%的神经元处于活跃状态。SDR是这些稀疏信号的数学表示,这些信号可能只有不到2%。我们表示SDR如下:
SDR有几个重要的属性:
1、SDR具有极大的抗噪性。即使引入了33%的噪声SDR很可能只与非常相似的对象匹配。您将会认识到这一点,即使对于人类记忆也是如此。试着记住你毕业学校的教授的名字,试着记住他/她的脸。你可能记不住他/她的脸。即使这样,如果我给你看100张随机的图片,包括你教授的图片,你肯定能准确地找到你的教授。
2、可以对SDR进行子采样,而不会丢失太多信息。你的SDR有20个1和10000个0。即使从这个SDR中删除5个0,我们仍然可以使用子抽样的SDR与新的SDR进行匹配。您将会认识到这一点,即使对于人类记忆也是如此。即使我们忘记了10年前吃过的水果的很多特性,我们仍然可以根据我们记得的所有其他特性来精确地分类这些水果。
概念2:语义编码
我们使用编码引擎从输入源获取输入并创建一个SDR。我们需要确保编码算法为相似的对象提供相似的SDR。这一概念与深入学习空间非常相似。许多预先构建的编码器已经在网上可用,包括数字编码、时间编码、英语单词编码等。
假设我们有一个简单的序列——1,2,1,2,1,1。第六元素破坏了序列,即,应该是2,但实际值是1。我们将尝试理解HTM是如何确定这种异常的。第一步是语义编码。对于本文,我将使用密集向量作为编码的SDR。在现实场景中,这些编码的向量是极其稀疏的。
编码器是如何开发的?
尽管我们有很多内置的编码器,您可能需要为特定的问题创建您自己的编码器。我将向您简要介绍如何开发单词编码器。
步骤1 -我们选择一组文档,我们将使用它们来查找单词的语义
步骤2 -我们将清理文档并将每个文档分割成片段。然后我们将对这些片段进行集群,以便将类似的片段保存在一起
步骤3 -我们现在将每个代码片段表示为SDR中的一个节点
步骤4 -现在我们获取单个(目标)单词并激活SDR中包含目标单词的所有节点(文档)。这将以SDR的形式创建一个单词指纹
步骤5 -我们将重复以上四个步骤,以获得我们感兴趣的所有单词的单词指纹。
3:概念空间池
空间池是将编码的SDR转换为稀疏数组的过程,遵循两个基本原则:
1、确保输出数组的稀疏性始终保持不变,即使输入数组是非常稀疏的SDR或不那么稀疏的SDR
2、确保输入的重叠或语义属性得到维护
因此,两个相似对象的输入和输出SDR的重叠程度都需要很高。让我们用我们的例子来理解这个。
输入向量的稀疏性从33%变化到67%,但是空间池确保了输出数组的稀疏性是33%。此外,该系列中两个可能输入的语义完全不同,并且在输出向量中保持相同。我们如何使用这个框架来确定异常?我们会回到这个问题一旦我们讲到时间记忆。
4:Hebbian学习
HTM的学习基于一个非常简单的原理。增强了空间池化输出阵列中活动柱与编码序列中的活动细胞之间的突触。空间池输出阵列中的活动列与编码输入中的不活动单元之间的突触被削弱。这个过程会重复一遍又一遍来学习模式。
5:概念提高
大多数空间池进程将在输出数组中创建异常强大的列,这将抑制许多列的贡献。在这种情况下,我们可以将这些弱列的强度乘以一个升压因子到编码序列。这个增强的过程确保我们正在使用高容量的空间集中的输出。
概念6:时间记忆
空间池通过一种称为时态记忆的方法来维护输入序列的上下文。时间记忆的概念是基于这样一个事实:每个神经元不仅从低层神经元获得信息,还从同级神经元获得上下文信息。在空间池部分,我们用一个数字表示输出向量中的每一列。然而,输出列中的每一列都由多个单元格组成,这些单元格可以单独处于活动状态、不活动状态或预测状态。
这个机制可能有点复杂,让我们回到我们的例子。我现在将在输出向量的列中显示所有单元格,而不是空间池步骤中的单个数字。
现在我把上面的数字给你分解一下。
在步骤1中,我们的HTM模型第一次获得一个输入“1”,激活输出序列的第一列。因为第一列中没有一个细胞处于预测模式,所以我们说第1列“突发”,我们为第1列中的每个细胞分配一个活动值。我们将回到如何将细胞置于预测状态。
在步骤2中,我们的HTM模型第一次在“1”上下文中得到一个输入“2”,因此,它的所有单元都没有处于预测状态,因此第2列就会爆炸。
同样的事情发生在步骤3,因为模型第一次在“2”上下文中看到“1”。注意,我们的模型以前见过“1”,但是在“2”上下文中从未见过“1”。
在第4步,有趣的事情发生了。我们的HTM模型在之前的“1”中已经看到了“2”,所以它试图做出一个预测。(这里我忽略了级联上下文的复杂性,以保持本文的简单性。级联上下文在“1”上下文中表示“2”,在“2”上下文中表示“2”。现在,假设我们的模型有一个2度的内存,它能够记住最后一个步骤。
它用于进行此预测的方法如下:它检查当前活动的所有单元格,即。第1列,告诉我们9个细胞中的哪一个会在下一次的步骤中激活。假设(2,2)细胞之间的突触较前一列(2,1)、(2,2)和(2,3)更强,因此第一列一致回复(2,2)。现在(2,2)在使用序列的下一个元素之前被放入预测状态。一旦我们的下一个元素到达,实际上是一个“2”,预测就会正确,这次没有一列会爆炸。
在步骤5中,同样没有任何列突发,只有(1,1)处于活动状态,因为(1,1)与(2,2)有很强的突触。
在步骤6中,HTM模型期望值为“2”,但它得到“1”。因此,我们的第一列爆炸,我们的异常在这个序列中被发现。
如果没有视觉模拟,整个算法可能会难以应付。所以我强烈建议你去看看Numenta发布的免费在线视频,它对我上面提到的过程进行了一些非常酷的模拟。
八、那么Numenta的下一步是什么?
这是Jeff Hawkins的一张幻灯片,展示了一系列的研究:
这些层显示皮层组织的层次结构。目前的研究主要集中在高阶推理层。本文涉及的所有内容都与高阶推理层相关。图中的第二层(标记为4)主要研究感觉运动推理。这是大脑的一个重要功能,它在感觉器官和运动细胞的信号之间合作来创造概念。
例如,如果你移动你的眼睛,它们捕捉到的图像变化很快。如果大脑不知道这种剧烈变化的原因是什么(只有运动细胞才能知道),它将无法简化我们周围的环境。然而,如果我们把来自感觉器官和运动细胞的信号结合起来,大脑就能对周围环境有一个稳定的认识。如果我们能掌握大脑的这一技能,我们就能把这一技能应用到复杂的问题上,比如图像分类,我们必须在图像上移动眼睛才能完全理解它。这个任务类似于我们在卷积神经网络中所做的。
图中的第三层是大脑的能力使它以目标为导向,这类似于强化学习。有了这个新技能,你就可以解决复杂的机器人问题。最后一层是最复杂的部分,我们讨论的是把概念理解的整个层次放在一个可以用于多感官模式的地方,比如把视觉数据和音频数据结合起来。
如果我想把上面的段落放到简单的深度学习中,
图中的第1层类似于使用HTM获得简单的神经网络功能(显然有HTM的附加好处)
图中的第2层就像用HTM获取卷积神经网络功能
图中的第3层就像HTM的增强学习功能
图4中的第4层就像得到多个CNNs来处理增强学习和HTM。