Because Numenta's algorithm require a graph algorithm(directed graph with weighted arcs), I find a lot of good links.
Dijkstra's algorithm for shortest paths
A comprehensive Python/Graph wiki
Simple directed graph essay(only DFS function)
Breath-first Search can be used as my Numenta Graph Algorithm implementation.
Saturday, November 10, 2007
Graph Algorithm: Python Implementation
Posted by Shenli Zhu at 11:51 PM 3 comments
Monday, November 5, 2007
Python for Numerical Computing
Tentative NumPy Tutorial
NumPy for Matlab Users
Numpy Example List
Tuple T=(1,2,3,4), List L=[1,2,3,4]. List can be modified while Tuple cannot after it is created. So use Tuple as the key of dictionary.
Nothing else yet.
Posted by Shenli Zhu at 9:34 PM 3 comments
Saturday, November 3, 2007
The Bigger Picture: A World Model
在这篇文章里,我们会站得远一点看,试着理解图片世界的一般特性,从而把简单的图片世界和复杂的真实世界联系起来。
图24:将图片”Cat”提交给HTM网络。工作在三个不同层片的不同节点的接受区域被表示出来。 考虑图.24的”Cat”。假设我们将这个图片提交给我们的网络来完成识别(译者注:指Numenta的HTM网络,HTM: Hierarchical Temporal Memory)。在这个图片里,我们可以在三个不同层次(level)的三个节点(node)上识别这个接受区域(receptive field)。顶层(top-level,也即第三层)的接受区域是整个一张图片。中间层(mid-level)的接受区域是一个中等大小的8x8像素块,底层(bottom-level)的接受区域则是比较小的4x4像素块。当这个图片被提交给HTM网络时,顶层节点会激活”Cat”状态,中间层节点会激活猫头(“Cat-head”)状态,底层节点则会激活直角(“Corner”)状态。简而言之,我们可以认为顶层,中间层和底层节点相信它们在这张图里分别看到了“Cat”,“Cat-head”和“Corner”。 图25:这幅图显示了视觉上的时间层次概念。箭头表示不同层次上的节点看到的不同状态的持续时间。与低层次相比,高层次的状态改变更慢一些。 现在让我们想象当这个“Cat”向上移动的时候会发生什么。顶层节点会依旧认为它看到的是“Cat”。在向上移动图片之后,底层节点会依次看到直角(“Corner”),转过90度的T字(rotated “T-junction”),垂直线("vertical-line”)和空白("blank”)。但是顶层节点在移动期间会始终相信自己看到的是“Cat”。中间层节点在此期间看到的事物也会发生一些变化。在一段时间内(这段时间比底层节点看到直角(“Corner”)的时间长,比顶层节点看到“Cat”的时间短),中间层节点会看到“Cat-head”。一段时间以后,也许是底层节点认为自己看到垂直线("vertical-line”)的时候,中间层节点会认为自己看到了猫身(“cat-torso”)。 我们在这里观察到的现象是基于自然移动模式(natural movement pattern),也就是说,猫(Cat)不是随机地跳来跳去,那么较低层次上的节点切换状态的速度要比在较高低层次上的节点快一些。这个想法可以用图25表示。我们还知道与较低层次相比,较高层次包括更多的空间信息。这两者(译者注:即时间和空间)共同作用的结果是,与较低层次的节点相比,较高低层次的节点能够(通过较低层次的节点)表示更大的空间和时间跨度。在一个较高层次上表示的状态(state)被一个较大的空间跨度影响,与降低层次的状态相比将持续更长的时间。用图来表示空间组织和时间组织是相当困难的。我们尝试着画了图26。 图26:这幅图显示了空间和时间的抽象层次概念。越高的层次抽象越广的空间和越长的时间跨度。也就是说,高层次的状态变化比低层次慢一些。 我们可以上下倒转这个层次结构,把它想象成世界产生图像的过程(而不是把它想象成一个识别的层次结构)。我们的可视化的世界可以被想象成一个“生产模型”(“generative model”)采用一个层次结构来组成图像。这个模型工作在空间轴和时间轴上。当某个原因(cause)在较高层次上被触发,会在同时和在一些不同的地方,引起并展开许多的次级原因(sub-cause)。这些次级原因也会在更小的时间和空间跨度上,依次触发更细微的次级原因。所以当我们潜入到这个世界层次的下层的时候,会看到细微的空间和时间跨度。而在较低层次上产生的原因又反过来限制了在较高层次上变化的原因。在某一个顶层触发产生的原因的作用下,这种生成图像的机制会产生不同的图像。(译者注:意思是顶层原因会忽略掉一些下层原因的细节,所以会产生不同的图像。但是这些不同的图像归根结底都是由顶层原因所触发的。) 虽然我们用固定图像模式识别的例子引入了这个模型(译者注:指Numenta的HTM模型),这种多重跨度(multi-scale)组织结构在自然界是很普遍的。气候是一个比较好的例子。冬季就是一个高层次的状态影响整个国家。在冬季,纽约一般是大雪纷飞,同时在旧金山只会少几天阳光灿烂的日子。冬天,这个高层次的原因,在不同的地区产生了不同的次级状态。而且在冬季的一段日子里,下雪天和晴天此消彼长,相互交替出现。 让我们假设这个世界由一个时空交织的层次结构组成的,那么如果我们知道这个层次的结构,学习这样一个模型易如反掌。由于较高层次上的原因相比较较低层次上的原因持续较长的特性,这种层次结构使得我们可以利用时间来指导每一个节点来组成独特的群。因此,通过交替使用时间稳定的监督式学习(temporal stability based supervision)和一致性检测(coincidence detection),我们可以重建这个世界的模型。这就是HTM模型的一个基础思想。 这篇文章是”Numenta HTM learning Algorithms”, section 9 – A World Model的完整翻译。基本上概括了Hawkins在他“On Intelligence”一书里提到的人理解意义的关键过程。请注意,从脑科学的角度来讲,人的认知过程还是神秘的,所以Hawkins也承认他的书带有主观因素。然而,读一篇有启发性的文章总是令人愉悦的,我们不妨看看Hawkins和他的公司Numenta是如何将他的思想化为可以执行的算法。 正如这篇文章里所说的,理解意义的关键是“原因(cause)”和由原因引发的“次级原因(sub-cause)”是否是可以互相转化的。换句话说,HTM模型想要完成的是“一叶知秋”或者“窥一斑而知全豹”。当然“次级原因”的完整性也是不可或缺的要素。假如图片里只有一片秋叶,要问Numenta网络中分类器(Catalog)这片秋叶是从哪儿获得的,估计人的智能也无法完成这样的任务。 另外,时间也是一种理解和决定意义的关键。所有的有意义的事件在时间轴上连续变化,且绝大部分是可以预测的(量子层面上的变化可能需要排除,按照Einstein的话说,上帝也在扔色子决定量子的变化。但是我们仍能从概率的角度理解量子的变化。)。 翻译文章是再创作。想当初,我在看傅雷译的“巴尔扎克全集”时,每每被傅氏的法式中文所震撼,并产生诸多感慨,希望有朝一日自己也能翻译些国外的文字,将国外的风貌和人情传递到国内来。然而自己终究在语言上少那么一根筋,之后去交大读了工程。
译后记
又译后记
工作以后,有了闲暇时间,开始考虑自己下一步的方向。翻译这些技术性的小文章一方面是传递信息给国内的读者,另一方面是挖掘自己喜爱的题目(照我老妈的话说,不要忘了你的梦想)。现在我快找到了,是啊,有什么比研究人类自己更有趣的呢,你说呢:-)
Posted by Shenli Zhu at 2:01 AM 0 comments