Hierarchical Temporal Memory (HTM)

Artificial General Intelligence Mimicking How Human Brains Learn

Tanli Hsu
32 min readFeb 17, 2020

前言

在接觸這個題目之前,我想像中的HTM只是某種類神經網路的模型、演算法、或實作上的trick而已。但在仔細看過Numenta(HTM的作者創立的公司)的文章之後,才發覺自己完全錯了。

HTM是一種通用人工智慧(或稱強人工智慧)的模型。這個模型的背後是基於對腦神經科學的了解、結合數學與電腦科學理論、最終組合起來的一種學習方法,是一種對人類大腦學習能力的模仿。即使最初的想法跟神經網路有些相似之處,但在後來的發展與實作的細節上,走的是另一條完全不一樣的路。

作為整個研究分支的入門,Numenta的這篇部落格文[1]是我覺得最好的進入點。Vincenzo Lomonaco 提到幾個HTM模型相對於現行類神經網路模型的優勢:

  1. Continual Learning/Online learning
    類神經網路分類器一般在訓練完畢、內部權重確定之後,就會切換為predition mode開始正式上線服役。但在現實世界中,新的資料仍會持續形成新的pattern。所以類神經網路模型通常會需要在上線一段時間之後,下線用新的資料重新訓練。如何讓類神經網路模型能夠在服役同時仍保有學習能力,一直仍是大家各說各話,沒有統一的最佳答案。
    HTM則號稱能原生保有這樣的能力。
  2. Noise robustness and fault tolerance
    我們目前知道,類神經網路對於輸入資料的細微擾動非常敏感。分類錯誤的資料、遺失的資料、或刻意變造的資料都可以相當大程度的干擾類神經網路的訓練與預測能力。如何在類神經網路中增強抵抗雜訊干擾的能力依然是個研究中的問題。但HTM號稱有原生的抗噪能力。
  3. No hyperparameter tuning
    這點大概是我在看到這篇文章時最大的”wow” moment。基於類神經網路模型的人工智慧一直被人嘲笑為「煉丹」、機器學習工程師自嘲是「鍊金術士」或「煉丹師」,就是因為在訓練類神經網路模型的過程中有太多的hyperparameter需要決定,但該怎麼決定卻幾乎都憑經驗跟運氣,甚至有「收斂看運氣,效果看天命」的說法。沒有一個有系統的、有數學理論支撐的決定方式。
    最簡單的例子,光是Learning rate要怎麼調,就有一大堆的paper。光是網路的架構要怎麼設定(要幾層?用什麼層?太少層精確度不高,太多層又會梯度消失直接在訓練階段爆炸)就可以搞死人。即使後來有NASAutoML的幫忙,「調參」依然是一個大麻煩。如果HTM完全不需要調參(或只有很少的參數要決定),那真的會是一大優勢。

在這篇學習筆記裡,我會基本遵循著這篇部落格文的脈絡,試著採用Bottom-up的方式,逐個寫下我在學習HTM當中對遇到的每個理論、技術的理解。寫完理論之後,會接著寫HTM的核心演算法,以及其實作應用。

目前想寫的部分大概條列如下:

  1. 核心理論:Thousand Brain Theory of Intelligence
  2. 演算法:HTM with Cortical Learning Algorithms
    2–1. Sparse Distributed Representations
    2–2. Spatial Pooling
    2–3. Temporal Memory
  3. HTM的軟/硬體實現
  4. HTM應用於實時異常偵測系統

Thousand Brain Theory of Intelligence

這個章節的內容會以[2][3][4]為主。Thousand Brain Theory發想自腦神經科學領域對於人類大腦的研究。

[3]

圖片中的”New Brain”是人類掌管高階行為(如感知物體與學習能力)的地方。而在Neocortex(新皮質)中,充滿了柱狀結構的細胞,長得如下圖:

[3]

這些柱狀結構的細胞稱為Cortical Columns,負責處理來自各個感官的刺激訊號:某些區域的Cortical Columns連接到眼睛,該區域就負責處理視覺信號;若是連接到耳朵,就負責處理聽覺信號等等。

而這些感官來的刺激信號,會伴隨著感官所在的絕對位置信號、以及物體與感官的相對位置信號(由名為Grid Cells的細胞產生),一起被處理。

根據這樣的生理結構,Jeff等人提出了一個假說:

每一個 Cortical Column都能透過感官傳來的訊號以及感官所在的位置訊號,平行感知並學習一個物體模型。而最終人類所感知到的物體模型則是由數以千計的Cortical Column共同隨時間組合起來的。

原文是:

In the Thousand Brains Theory of Intelligence, each column creates complete models of its world, based on what it can sense as its associated sensor moves. Columns combine sensory input with a grid cell-derived location, and then integrate those “sensory features at locations” over movements. Long-range connections in the cortex allow columns to work together to quickly identify objects. [3]

這個核心概念與類神經網路(Artificial Neural Networks)的設計想法不太一樣:類神經網路中,每個輸入節點(Neuron)只負責學習一個模型的一小部分,最前面的層(Layer)學習基礎的特徵(如直線、斜線等),越後面的層則會學習較高階的特徵(如形狀、輪廓等等),並要到最後一層,才能根據這些高階特徵來決定是什麼物體。

[3]

Jeff 等人對現行的類神經網路,提出一個重要的質疑:類神經網路需要許多層以及大量已知的訓練資料才能學習某些簡單的任務,如辨認一個咖啡杯。但人類不需要看過千萬張咖啡杯的照片才能學會什麼是咖啡杯。

論文中舉出一個蠻極端的例子:學習只用一根手指,用摸的方式辨認咖啡杯。在這個例子中,人腦的學習流程是(如下圖右):

[3]
  1. 手指首先觸碰到x點,學習到手指的觸覺信號(杯口的感覺)與手指所在的位置(杯子上緣)。
  2. 下一個時間點,手指移動到y點,同樣學習到手指在y點的觸覺(杯子的本體)以及手指在y點的位置(杯子左側)。
  3. 再下一個時間點,手指移動到z點,再次學習觸覺信號(把手)以及位置訊號(杯子另一側)
  4. 根據以上三點,建立物件的輪廓(有圓圓的上緣、平直的一側、有圓弧提把的另一側等等),並以這個輪廓作為特徵。
  5. 下次手指碰觸到同樣的感覺序列的時候,人腦就知道這是個杯子。

而以上的學習方法,都需要Cortical Columns 與cortical grid cells產生的感覺訊號以及位置訊號共同實現。而在[3][4]中,論文提到這種利用位置的時間變異來記憶並學習的方式,正是人類古老演化而來的、在大自然環境中記憶環境以及找出回家的路的方式。同樣的方法在近代也被採用來作為增強學習的方式之一[7](我曾用過類似的方法背英文單字)。

原文摘錄如下:

The “method of loci” is a memory enhancement technique that involves assigning things you want to remember to locations in a familiar space, like your house. When you want to recall the items in the list, you “move” through that space to retrieve them. The reason this method works is because the brain naturally wants to associate things to locations. [7]

更詳盡的理論介紹可以參考[6]

在學完基本的物體之後,我們接著討論,人腦是如何學習更複雜的物件(如複合物件)的特徵的?[3][4]中提供了一個簡單好懂的例子:以視覺來學習什麼是車子。

  1. 學習輪子看來的樣子(習得:輪子)。
  2. 學習窗戶看起來的樣子(習得:窗戶)。
  3. 學習引擎蓋看起來的樣子(習得:引擎蓋)。
  4. 學習車子看起來的樣子(習得:車子=輪子+窗戶+引擎蓋)。
  5. 下次看到卡車,因為卡車也有同樣的特徵(輪子+窗戶+引擎蓋),故得知卡車也是一種車子,不用另外學習。

這種複雜物件的特徵可以用簡單物件的特徵組合起來的特性,在[3]中是這麼解釋的:

Object Compositionality: Almost everything we know is composed of other things we already have learned, which allows the brain to learn new things efficiently without constantly having to learn everything from scratch.

另一種學習方式是以物體的行為模式(Object Behaviors)作為學習目標。以下圖的釘書機為例子:

[3]
  1. 學習物體在Disp. A位置的樣子
  2. 學習物體隨著時間移動到Disp. N的樣子
  3. 下次看到有一個物體有同樣子的相對位置隨時間變化的序列(釘書機打開 — 閉合的序列)時,就說擁有這種「行為」的物體是釘書機。
  4. 下次遇到一個被稱為是「釘書機」的物體時,也會預期這個物體會展現同樣的行為(打開 — 閉合)。

原論文給出的定義為:

… objects are learned as a set of locations… learning a behavior is learning a sequence of displacements. In other words, we learn behaviors as the sequence of how the relative positions of two locations change over time (in this case the top and bottom of the stapler). [3]

至目前為止,論文只針對人腦如何學習最簡單的事物提出假說。但這樣的假說,還無法滿足更深層的問題:人腦是如何學習更高階的活動,例如語言、數學,甚至是民主、公平正義之類的價值?

We don’t know yet how concepts such as democracy or fairness are represented in the neocortex, but we can be confident that locations will play a key part. This notion is an exciting area for further exploration. [3]

論文說:我們也不知道…

但這幾篇論文依舊非常有趣,[3]作為導讀的文章,比起生硬的論文本體,相對輕鬆好上手很多。甚至還為了這整個理論下個一個簡潔的總結。也因此,我也就直接摘錄這個總結,作為在本文中,對於Thousand Brain Theory of Intelligence理論的總整理:

Thousand Brain Theory of Intelligence: [3]

  1. Thousand Brain Theory of Intelligence — because every cortical column can learn complete models of objects, the brain creates thousands of models simultaneously, rather than one big model.
  2. Location, location, location — every cortical column has a location signal, which we propose is implemented by cortical grid cells.
  3. Object compositionality — we propose a new type of neuron exists throughout the brain, “displacement cells,” and they enable us to learn how objects are composed of other objects.
  4. Object behaviors — learning an object’s behavior is simply learning the sequence of movements tracked by displacement cells.
  5. Concepts and high-level thought — we learn conceptual ideas in the same way we learn physical objects.

我自己對於這個理論的感想,也來自於對於[3]中最後幾段,對於現行人工智慧系統的批評:

Many AI researchers have concluded that today’s AI techniques are limited. Current AI networks are used today mainly for pattern recognition. If you train them on enough images, they can take a new image and tell you what it is, yet they don’t understand anything about an object beyond its label. They don’t know about the structure of an object or how it behaves. They’re also very brittle. The smallest change or occlusion of an image often makes an algorithm fail. [3]

在過往訓練類神經網路的經驗中,很基礎的一個觀念就是:一個類神經網路在訓練完成之後,就只能專注做一件事,也就是它被訓練來要做的事。

一個被訓練來分辨MNIST的類神經網路不管準確度再高,一旦丟給它一個根本不屬於MNIST資料集範疇內的圖片,整個分類器系統就可能直接崩潰什麼都給不出來。更不要提針對性的細微擾動,可以蓄意的破壞一個類神經網路分類器執行任務的能力(例如我之前寫過的以Foolbox白箱攻擊Keras內建分類器)。

相對於傳統類神經網路所建立的專家系統,Thousand Brain Theory of Intelligence 描繪的AI更接近於強人工智慧或稱通用人工智慧( Artificial General Intelligence)。只要學得事物的基礎架構,並結構化、階層化的累積所學到的東西,對於未知的新任務就可以不用特意重新訓練,而將現有的模型直接轉移使用,並持續在新任務中學習新的pattern。

HTM with Cortical Learning Algorithms

這個章節的內容會以[8][9]的內容為主,配合一些延伸閱讀如[11]來寫我對於這個演算法的理解。

模型結構

HTM是多層的樹狀結構,感知器感知到的信號先輸入到底層的節點(在原始的版本中每一個節點為一個單一細胞,在第二版的改良版中改成一個Cortical Column,含有一個陣列的細胞),節點的輸出(Beliefs)再層層傳遞到最高層。如下圖:

[8]

圖中的所謂Belief為Cause的機率陣列,如下圖:

[8]

在Thousand Brain Theory中提到過,每個節點(Column)都會學習到完整的世界觀。但底層的節點只會學到最簡單的物件,而越往上層的節點則會學到越複雜的複合物件。這也意味著,HTM所需的層數與所需辨識的物件的複雜度呈正相關。

At the lowest level of the hierarchy, your brain stores information about tiny sections of the visual field such as edges and corners. An edge is a fundamental component of many objects in the world. These low-level patterns are recombined at mid-levels into more complex components such as curves and textures. An arc can be the edge of an ear, the top of a steering wheel or the rim of a coffee cup. These mid-level patterns are further combined to represent high-level object features, such as heads, cars or houses. [9]

由於HTM樹狀結構的設計,不同感知器感知到的資料也可以同時組合起來訓練:

[9]

由於每個節點都會學到一個物體的模型(雖然不同階層的節點會學到的東西的複雜度不一樣),底層所學到的物體模型會逐層往上傳遞,所以HTM的泛化問題(Generalization)理論上應會比類神經網路容易處理。

也因為這種樹狀結構,不同樹間的結合、跳層傳遞以及注意力機制(Attention Mechanism)等等的想法可以輕易地在HTM中實現:

Combining Hierarchies, Skipping, Multiple Parents [8]
Attention Mechanism [8]

HTM的Region可以理解為一個單一層,雖然我個人認為應該不需要特意限制一層只能有一個Region。Region的切面圖如下圖:

[9]

同一層之間的Column之間也有突觸互相連結,這點跟類神經網路有點不同,通常類神經網路的節點只跟前後層節點有連結。

Sparse Distributed Representations

Sparse Distributed Representations是HTM的核心資料結構,在[10]中有完整的數學解釋,在這裡只寫最高階的基本觀念。

在一層HTM Layer(Region)中,同一個時間點一次輸入的輸入訊號只會有一部份(~2%)的神經細胞會被啟動(Activate),而不同的輸入訊號則會啟動不同的神經元而得到不同的表徵。這些表徵即可作為HTM用來辨識物體的pattern(不同物體會出現不同的pattern)。

[9]

Spatial Pooling

Spatial Pooling 是一種將輸入訊號轉變為Sparse Distributed Representation pattern的方法。“Pooling”這個字在論文中用來代指由輸入訊號空間(較大空間)映射到Cortical region的sparse distributed representation空間(較小空間)所產生的、數學上的多對一映射問題。

Pooling means assigning multiple patterns to one label, that is putting them in the same pool. [8]

基本原理是,對於每一個輸入信號的bit (0 或1),指定一個Column與其連接,並計算突觸的最終輸出值。如果突觸的輸出值大於一個閥值,就稱這個突觸進入激發態。

接著對每一個Column,計算有多少突觸進入激發態,並將這個值乘上一個“boosting factor”。即可得知這個Column是否進入激發態。由於每個Column的激發與否都會與其相鄰的Column激發與否有關(計算在Boosting factor中),Spatial Pooling 引入了一個「抑制半徑」(inhibition radius)的觀念,每個Column對於其他Column的影響一旦超過抑制半徑即不予考慮(一樣設計在Boosting factor中)。

經過這幾個步驟之後,我們即可得到如[9] Figure 1.4般的sparse distributed representation。

Spatial Pooling的結果,是得到輸入資料在空間上的pattern。而所謂的「訓練」即是讓HTM在以標記的資料中記住pattern。類似的pattern會被記住,因為那代表不同的輸入訊號(來自同一個物體)所擁有的主要結構;反之,不常見的pattern則會被忘掉,如以下流程:

[8]

整個Spatial Pooling的演算法,在[9]的Chapter 3中有詳盡解說。這裡先只放上Pseudo Code,作為整個演算法的大綱。

演算法分三步:

  1. 在每個Column上找出輸入造成的synapses overlap
  2. 找出被激發的candidate column,計算抑制半徑
  3. update column的內部值

Phase 1: Overlap

for c in columns :
overlap(c) = 0
for s in connectedSynapses(c):
overlap(c) = overlap(c) + input(t, s.sourceInput)
if overlap(c) < minOverlap:
overlap(c) = 0
else:
overlap(c) = overlap(c) * boost(c)

Phase 2: Inhibition

for c in columns:
minLocalActivity = kthScore(neighbors(c),
desiredLocalActivity)
if overlap(c) > 0 and overlap(c) ≥ minLocalActivity:
activeColumns(t).append(c)

Phase 3: Learning

for c in activeColumns(t):
for s in potentialSynapses(c):
if active(s):
s.permanence += permanenceInc
s.permanence = min(1.0, s.permanence)
else:
s.permanence -= permanenceDec
s.permanence = max(0.0, s.permanence)
for c in columns:
minDutyCycle(c) = 0.01 * maxDutyCycle(neighbors(c))
activeDutyCycle(c) = updateActiveDutyCycle(c)
boost(c) = boostFunction(activeDutyCycle(c), minDutyCycle(c))

overlapDutyCycle(c) = updateOverlapDutyCycle(c)
if overlapDutyCycle(c) < minDutyCycle(c):
increasePermanences(c, 0.1*connectedPerm)
inhibitionRadius = averageReceptiveFieldSize()

Temporal Memory

Temporal Memory的基本概念是學習Spatial pattern的時間序列,如下圖所示:

[8]

對於它的實作方法還有點不太明白為什麼要這麼做,只能留到實際看到code的時候才能一步一步了解了。在[9]的Chapter 4中有更完整的解說,包含Pseudo Code中所用的函式定義。這裡就一樣先只放psuedo code

Inference Only — Phase 1:

for c in activeColumns(t):
buPredicted = false
for i = 0 to cellsPerColumn - 1 :
if predictiveState(c, i, t-1) == true:
s = getActiveSegment(c, i, t-1, activeState)
if s.sequenceSegment == true:
buPredicted = true
activeState(c, i, t) = 1
if buPredicted == false:
for i = 0 to cellsPerColumn - 1:
activeState(c, i, t) = 1

Inference Only — Phase 2

for c, i in cells:
for s in segments(c, i):
if segmentActive(c, i, s, t):
predictiveState(c, i, t) = 1

Inference + Learning — Phase 1

for c in activeColumns(t):
buPredicted = false
lcChosen = false
for i = 0 to cellsPerColumn - 1:
if predictiveState(c, i, t-1) == true:
s = getActiveSegment(c, i, t-1, activeState)
if s.sequenceSegment == true:
buPredicted = true
activeState(c, i, t) = 1
if segmentActive(s, t-1, learnState):
lcChosen = true
learnState(c, i, t) = 1
if buPredicted == false:
for i = 0 to cellsPerColumn - 1:
activeState(c, i, t) = 1
if lcChosen == false:
I,s = getBestMatchingCell(c, t-1)
learnState(c, i, t) = 1
sUpdate = getSegmentActiveSynapses (c, i, s, t-1, true)
sUpdate.sequenceSegment = true
segmentUpdateList.add(sUpdate)

Inference + Learning — Phase 2

for c, i in cells:
for s in segments(c, i):
if segmentActive(s, t, activeState):
predictiveState(c, i, t) = 1
activeUpdate = getSegmentActiveSynapses(c, i, s, t,
false)
segmentUpdateList.add(activeUpdate)
predSegment = getBestMatchingSegment(c, i, t-1)
predUpdate = getSegmentActiveSynapses(c, i, predSegment,
t-1, true)
segmentUpdateList.add(predUpdate)

Inference + Learning — Phase 3

for c, i in cells:
if learnState(s, i, t) == 1:
adaptSegments (segmentUpdateList(c, i), true)
segmentUpdateList(c, i).delete()
else if predictiveState(c, i, t) == 0
and predictiveState(c, i, t-1)==1:
adaptSegments (segmentUpdateList(c,i), false)
segmentUpdateList(c, i).delete()

說到學習時間序列的能力,在類神經網路中也有類似的模型如LSTM與GRU等等。在[1]中也提到了HTM模型與LSTM模型的相似性。

[1]

要完整的討論HTM與其他類神經網路在設計以及效能上的差異,[16]提供了一個很好的baseline可以參考,在這裡就先不贅述。

實作HTM

HTM的硬體實現

這個章節我主要參考的是[12]這篇文章,至於為什麼沒看其他更多不同的設計?因為我懶…但是還是可以提供一些延伸閱讀的材料如[13]以及其後續引用的文章,給有興趣的讀者參考。這篇部落格文只會寫下最基本的outline以及最top level的概念理解。有很多的論文細節沒辦法完整寫出來。有興趣知道細節的讀者還是需要去看原文[12]

之所以會想在同一篇文章內一口氣寫完理論跟實作,最主要的原因是,很多時候單看理論的描述與數學式,會有種如入五里霧中搞不清楚方向的感覺。尤其是在做Bottom-up方式的學習時,往往東學一個模組、西學一個理論,很快就迷失在文字的叢林裡了。而我最喜歡[12]的部份就是底下這張圖:

[12]

前面寫了上千字的理論描述,老實說別說讀的人,我自己都寫得有點頭暈。但是看完這張flow chart瞬間醒了。

作為整個HTM理論核心的Cortical Column,[12]的設計(他們稱之為Processing Element, PE)如下圖:

[12]

PE就是理論中Spatial Pooling的實作,一個PE即可對應到一個Cortical Column。而其中的Cell Module就是實作Temporal Memory的部分。每個Cell Module長得像這樣:

[12]

接著,在HTM理論中,有提到突觸的概念,其實就是同一層的Column與Column之間的連結。在[12]中,這樣的連結由Mesh Network表示,參照下圖:

[12]

Routing Radius就是參照了理論中的Inhibition radius的概念,用來計算Boosting factor的。

HTM的軟體實現

這麼複雜的理論我當然不可能自己去寫一套出來,但好在Numenta已經有一個開源社群把這套演算法用不同程式語言實現了。Numenta官方則是用Python寫了一個完整的框架,讓使用者可以很方便的調用、建立HTM模型。

這套框架稱為Numenta Platform for Intelligent Computing (NuPIC) [14],程式碼也都可以在Numenta官方Github上[15]找到。在這裡就不多贅述。

HTM應用(實時異常偵測)

HTM的應用部分,打算暫時富奸一下,下次再另開一篇文來寫。目前是打算先參考[17][18]這兩篇文來找一些靈感,再來考慮目前可以將HTM使用在哪個地方。

之後可以預期的是在找尋目標,以及搜集/整理資料上會花上一些時間。在建模與訓練的部分打算直接使用NuPIC API來節省時間與精力(順便自我感覺良好一下?)

目標是希望用HTM模型來完整的建立一個異常偵測/預測系統,並稍微搜集一下在操作(operate)這樣的系統時可能會遇到的問題。總之,是想透過這個project,對通用人工智慧系統的實際運作有些基本的了解。

Reference

  1. A Machine Learning Guide to HTM (Hierarchical Temporal Memory)
  2. The Thousand Brains Theory of Intelligence
  3. Companion paper to A Framework for Intelligence and Cortical Function Based on Grid Cells in the Neocortex
  4. A Framework for Intelligence and Cortical Function Based on Grid Cells in the Neocortex
  5. Locations in the Neocortex: A Theory of Sensorimotor Object Recognition Using Cortical Grid Cells
  6. A Theory of How Columns in the Neocortex Enable Learning the Structure of the World
  7. The Method of Loci
  8. Hierarchical Temporal Memory Concepts, Theory, and Terminology
  9. HIERARCHICAL TEMPORAL MEMORY including HTM Cortical Learning Algorithms
  10. Ahmad, Subutai, and Jeff Hawkins. “Properties of sparse distributed representations and their application to hierarchical temporal memory.” arXiv preprint arXiv:1503.07469 (2015).
  11. 皮质学习(Hierarchical Temporal Memory)
  12. Li, Weifu, and Paul Franzon. “Hardware implementation of hierarchical temporal memory algorithm.” 2016 29th IEEE International System-on-Chip Conference (SOCC). IEEE, 2016.
  13. Zyarah, Abdullah M., and Dhireesha Kudithipudi. “Neuromorphic architecture for the hierarchical temporal memory.” IEEE Transactions on Emerging Topics in Computational Intelligence 3.1 (2019): 4–14.
  14. NuPIC 1.0.5 API Documentation
  15. Github: Numenta Platform for Intelligent Computing
  16. Cui, Yuwei, et al. “A comparative study of HTM and other neural network models for online sequence learning with streaming data.” 2016 International Joint Conference on Neural Networks (IJCNN). IEEE, 2016.
  17. Evaluating Real-time Anomaly Detection Algorithms — the Numenta Anomaly Benchmark
  18. Unsupervised real-time anomaly detection for streaming data

後記

回想機器學習的初衷,是希望藉由讓機器模擬人類大腦的運作方式,從而能像人類一般的感知、歸納、推理、並進而理解這個世界。

但人類究竟是如何理解這個世界的呢?

以前讀研究所的時候,曾聽過一句玩笑:「優秀的工程師會去學數學,優秀的數學家會去學哲學,優秀的哲學家會去學神學。」

在這句玩笑的背後,我看到的是,也許這就是人類理解這個世界的方式吧?人類在使用不同的方式(神學、哲學、數學、工程學),嘗試去了解、去解釋我們所處的這個世界:在收集我們從感官得到的資訊、歸納出背後的原理之後,我們嘗試系統化地建立起對這個物理世界的描述模型。再更進一步的,我們試圖使用這個世界模型,去推測(infer)在人類所能觸碰到的三維空間之外、更高維度的世界裡會發生的事。

人類在這些學門上的發展,已經足以說明人類的大腦可以非常好的做到這件事。

而在機器學習這個工程領域裡,人們真正想做的事情,似乎正是讓機器也完整地走過一遍這個人類曾走過的路、建構起自己(屬於機器的)世界觀。而要做到這點,擺在眼前就有一個成功的案例可以學:人類的大腦。

類神經網路的發明,其實就是在模仿人類大腦中神經細胞突觸以電信號將刺激一層層傳遞給下一個神經細胞的學習過程。但在發展的過程中,為了工程上的需求我們又發展出了例如Gradien Descent, Back-propagation等技術。但這真的是人類大腦運作的方式嗎?在[7]中,作者引述了2018圖靈獎得主Geoffrey Hinton的一段話:

“…that to get to where neural networks are able to become intelligent on their own, what is known as unsupervised learning, …means getting rid of back-propagation… I don’t think it’s how the brain works…. We clearly don’t need all the labeled data….. My view is throw it all away and start again”

相較於類神經網路,我更喜歡HTM的理由之一,就是這支研究分枝始終走在「模仿」人類大腦的路上。包括稀疏分佈表示法的採用、Cause/Belief的概念(甚至是其命名背後的mindset)、到後面將單一節點改為Cortical Column的改進,都有其生物與腦神經科學的根據。姑且不論HTM與類神經網路的性能孰優孰劣,這樣的模仿都是很酷的一次嘗試。

這篇文章是我第一次接觸通用人工智慧這個研究領域。HTM成了我在這個領域的進入點。之後有機會的話,應該也會好好在這個領域探索一下近年來的發展。相比起類神經網路正在逐步建立起的專家系統,通用人工智慧似乎又更有趣一些。

--

--