皮质学习(Hierarchical Temporal Memory)
2014-08-08 18:36阅读:
好久没有写博客了,之前几个月都在玩,实在是对不住自己呀,从现在起开始陆陆续续写一些吧,大概的计划是将Pattern
Recognition and Machine Learning的学习体会写一个专题,然后继续deep
learning方面的论文学习,当然也有编程方面的东西,希望能够好好坚持。下面是近期看的层级实时网络(HTM)的总结,HTM也是deep
model的一种。这部分内容基本是本人脱离论文进行的回顾,如果有错误,各位看官还望原谅及指正,谢谢!
PART ONE: OUTLINE
皮质学习算法
Cortical Learning Algorithm
摘要
Abstract
绪论
Introduction
1、皮质学习算法的历史沿革
2、皮质学习算法的主要思想
3、报告的主要框架
George博士论文中的层级实时记忆算法
HTM: version I in George’s PhD thesis
1、整体框架
2、识别
3、学习
4、总结
Numenta
白皮书中的层级实时记忆算法
HTM: version II in Numenta’s White Paper
1、整体框架
2、Sparse Distributed
Representation
3、Spatial Pooler
4、Temporal Pooler
5、与Version I的内在联系与主要区别
6、总结
层级实时记忆算法的实现
The implementation of HTM
1、Encoder
2、Spatial Pooler
3、Temporal Pooler
4、CLA Classifer
5、总结
总结与展望
参考文献
PART TWO: REPORT
皮质学习算法
Cortical Learning Algorithm
摘要
Abstract
皮质学习算法是一种对新大脑皮质层结构与功能运作进行人工模拟的算法。本篇报告主要阐述了皮质学习算法的发展概况,核心算法(Hierarchical
Temporal Memory:
HTM)以及算法中的关键技术。通过对HTM算法各设计细节的分析,对HTM算法的演变进行学习和思考,加强对算法核心内容,如空间模式与时间模式的提取,稀疏离散表征等的理解。同时,对开源代码及相关报告材料的学习,加强对皮质学习算法细节的把握。
绪论
Introduction
1、皮质学习算法的历史沿革
Jeff
Hawkins在其2004年出版的著作“On
Intelligence”中,提出了一种大脑皮层运作的理论,他称之为记忆-预测框架[1].该框架主要阐述了大脑皮层运作的一些原则,比如新皮层是建立一种对空间与时间的模式,目的在于预测,它具有层级结构,可以通过记忆模式与序列进行建模,层级之间信息存在上下互相传递等。这就是后来皮质学习算法的核心思想。
2005年3月24日,他与Donna
Dubinsky, Dileep
George等人创建了Numenta公司,将该框架的思想付诸实践,这里成为皮质学习算法发展的主要阵地。2005年,George与Jeff先后发表两篇文章,第一篇[2]介绍了HTM的雏形,给出基本结构,学习过程,以及利用Bayesian
Belief
Propagation理论解释识别和重建过程,并通过实验展示了HTM的性质,对一些生物学现象进行解释;第二篇[3]主要介绍了利用解剖学知识和皮层功能,假设自然总是考虑利用最少的资源,同时假设皮质集成电路(科学家假设大脑像集成电路一样由很多结构和功能相似单元组成,称之为皮质集成电路:cortical
microcircuits)信息传递符合Bayesian Belief
Propagation,来推导出皮质集成电路的组成方式。本文章为George的博士论文中对皮质集成电路的组织方式(一个区域中细胞层次组织与每个细胞层的功能等)提供理论解释。2008年,George的博士论文为前两篇文章的综合,详尽地阐述了HTM的生物学依据,HTM的结构与识别、学习方式,HTM的泛化以及皮质集成电路的数学理论。2009年,Jeff与George发表一篇关于序列记忆的文章[4],主要阐述了序列记忆的约束条件,序列记忆模型的生物学意义与具体算法(State-Splitting
Algorithm)。
2010年Dileep
George离开Numenta,与D.Scott
Pheonix创建了Vicarious.com。在这里,George基于原来的HTM算法,给出了一些皮质学习的主题(themes)[5],如基于有限样本的非监督学习等。在这里他提出了HTM的改进算法--Recursive
Cortical
Network(RCN)算法[6],按照George的话,可以推测应该是在原HTM的各层的相邻节点nodes之间加入了连接(connections),他们将该技术应用到验证码的自动识别。而Numenta近期也发布了自己历时9年研发出的产品Grok[7],来做异常检测。
对于皮质学习算法的研究,目前知道的除Jeff等人这个团队发表的文章,其他人的文章很少见,其中Davide
Maltoni是其中一位。他在其2011年关于HTM的技术报告[8]中详细阐述了HTM的结构和学习、识别流程,并对其中的给coincidences归组分类算法进行了改进。2014年,他又提出了对HTM的Incremental
Learning方法[9]。
由于目前找到的关于Vicarious的论文或者相关材料比较有限,主要基于Dileep
George等人的相关论文以及Numenta公司公开的白皮书、教学视频以及源代码进行学习与介绍。
2、皮质学习算法的主要思想
皮质学习算法是一种对新大脑皮质层结构与功能运作进行人工模拟的算法。它的核心算法是层级实时存储算法(Hierarchical
Temporal
Memory),它是基于Jeff的记忆-预测框架来进行设计。在本算法里面,如下内容是非常核心与关键的:层级结构(Hierarchy),空间与时间模式不变表征(Invariant
Representations of Spatial Patterns and Temporal
Patterns),序列记忆(Sequence
Memory)。对于这些内容,在具体介绍时,将进行详细分析,这里给出一些综述。
层级结构:解剖学研究已经显示,新大脑皮质层的功能(可能)由一个区域与一个区域连接这种层级结构来实现,在HTM算法中,也模拟了这种区域与区域之间的层级结构。当然,层级结构在很多模型,包括Deep
Model中都有应用,这是因为这种结构具有很多良好的性质,之后会详述。
空间与时间模式的不变表征:很多Deep
Models都对模式的不变表征进行了很好的探索,但大多数停留在空间模式的不变表征上,但是,当代表两种物体的空间模式集(子空间)有交集的时候,这些模型就很不容易利用空间识别分类。所以HTM引入了时间,通过寻找模式之间的时间关系,在时间相近,模式接近的这种假设下,就能够更好地区分不同模式。
序列记忆:序列记忆是时间模式不变表征的关键,HTM通过每个节点内部建立马尔可夫链,或者在细胞横向间训练突触权值来达到记忆不同模式的前后转移概率,对序列的变化进行记忆的效果。
3、报告的主要框架
本报告主要分为如下五个部分。第一部分,绪论。介绍了皮质学习算法的发展流程,及其核心思想。George博士论文中的HTM算法将在第二部分给出。随后,Numenta的白皮书所提出的HTM将在第三部分进行详细阐述,同时与第二部分内容进行关联、对比。第四部分主要阐述Nupic对HTM算法的实现。第五部分,对HTM的特性以及适用性、之后发展进行总结,并对自己的学习进行一定总结。
George博士论文中的层级实时记忆算法
HTM: version I in George’s PhD thesis
层级实时记忆算法是模拟新皮层大脑结构,试图模仿起功能的算法。首先,层级实时算法采用了层级结构,HTM算法由低层级到高层级依次提取low-level到high-level的不变特征,或者说更高层是低一层不变表示的重新组合。如果能够在底层级学习到事物的一些最基本的模式,再通过高层级进行再组合,那么可以通过学习某些物体的模式时而达到将新事物的基本模式也包含的情况,即有较高的泛化能力。同时,通过层级结构,底层级学习一些low-level的不变特征或者子模式后,直接可以输入到高层进行学习,高层级不用再对low-level的特征或者模式进行再学习,提高学习训练的效率,也减小了存储空间。
HTM算法另一个最突出的特点是引入了时间模式。之前很多deep
model的层级结构大多只关注层级之间的连接(connections),这样使得他们能够提取较好的空间模式;但是他们没有考虑到层级内部节点的连接,这种连接能够学习到序列模式在连续时间内的转移关系,进行序列记忆,在表征物体的空间模式集有交集的时候,通过时间相近,模式相似的准则可以增加物体识别分类的精度。下面,通过参考David的技术报告[]与George的博士论文[],将对George博士论文的HTM方面的理论进行详述。
1、整体框架
如下图1为一个三层的HTM示意图,方块表示节点。可以看出,HTM具有树状的层级网络结构。高一层一个节点与其相邻低一层的多个节点相连接,
HTM的第一层节点直接与输入相连(可以是overlapping的)。而某一个节点,不断向下一层回溯,到输入,他所处理的输入范围就是其感受域,如level
one中的每个节点的感受域是1,level two的是2,level
three的是4。
节点是HTM中记忆与预测的基本单元。在节点中,主要存有三种数据,C(coincidences的集合),
G(temporal
groups的集合,每个group实际上是coincidences的集合),transition
probability
matrix(为每个group中各个coincidence之间的转移概率组成的矩阵)。
每一个处于中间层(除开第一层与最后一层)节点,都有唯一一个父节点,与多个子节点。HTM对空间模式的提取,依赖的是父节点对各子节点的子模式的pooling,而时间模式与序列记忆的实现,依赖于节点中不同的temporal
groups以及其各coincidences组成的markov
chains。通过记忆不同order的markov
chains,可以由一个coincidences往前或者后推知另外coincidences发生的可能性,从而实现序列记忆。而每个group也是由这种coincidences之间转移概率最大化分类,以获得时间相近,模式相似的结果。
对于一个HTM模型,其识别的整体流程是:当某一层各节点分别接收来自其子节点的输入时,开始进行识别,其结果作为父节点的部分输入。而对于一个HTM模型的训练学习,首先要对最低层进行训练,训练完毕后,再对高一层进行训练,而输入来自低层按识别流程处理得到的结果。下面几节,将从单个节点的训练与识别进行展开介绍。
图1 HTM结构示意图
2、学习
在学习阶段,大致分为3步,对新模式进行记忆,转移概率矩阵的计算,对模式进行分组获取temporal
groups。
I,模式进行记忆。当一个节点接收到一个新的模式时,首先是将输入模式与节点中已存在的模式进行比较(如,比较距离),如果该输入与某个存在的模式足够近,那么就激活该模式。如果没有找到足够近的模式,那说明这个输入模式是一个新的模式,将他存入模式集中,以待后用。这就是模式的记忆。
II,转移概率矩阵的计算。当一个模式被激活,回顾之前激活的模式,将矩阵中对应两者转移关系的位置自增1。当然,HTM也可以存储多步的转移,回顾数步以前被激活的模式,存储其转移关系。在所有模式输入完