皮質學習 HTM 知多少


Hierarchical Temporal Memeory 0.1

​ —— Pegasus 2017 06 22

引言

Hierarchical Temporal Memeory(HTM,層級時間記憶,皮質學習) 是一種全新的機器學習算法,模擬新大腦皮質(neocortex)進行信息處理。 HTM包含新大腦皮質的三個顯著特性:

  • 記憶系統。數據流通過感觀進入大腦皮質,其中的神元細胞通建立突觸(snapses)連接,達到學習的目的,並將記憶儲存其中。每個神經元都可看成一個‘記憶’系統。
  • 記憶主要為時間(time-changing/temporal)模式。數據在新皮質上的輸入輸出是實時動態的,而且皮質的對輸入數據的學習也是基於時間的,並基於此對動態信息進行預判。
  • 層級連接。新皮質內的神經元在皮質內是以層級的方式連接的。因為所有的神經元都執行同樣的基本記憶操作,故理解一個神經元的工作方式,即可理解整個皮質的工作方式。

歷史

下圖表示了HTM算法的發展歷程,上面是歷史的關鍵事件,注意到迄今為止算法已經進化(evolving)到第三代。目前以最新版(第三版)為基准。

HTM 概覽

HTM的層級結構

上圖[^6]表現的即為簡化在腦皮質結構,也是HTM和大致結構。HTM是層級結構(注意,現階段,我們一般只考慮一層。就或者說要形成HTM的層級結構,目前還沒有好的解決方案,但一層對目前的數據學習已足夠)。在每一層中,都有大量單元(cell),多個單元組成單元柱(mini-column),多個單元柱組成區塊(region)。下文中,我們在考一層的皮質時,按下面的方式考慮:

按其為二維點陣列(每個點是一個單元,每一列是一個單元柱)。這樣既便於理解,又不失一般性。

神經元

上圖中 B 表示的是錐體細胞(pyramidal cell), 是新皮質主要的神經細胞,其有三種樹突(dendrite): 近端樹突(proximal dendrites),近端樹突接受前饋輸入信息;末端/基底樹突(distal/basal dendrites),基底樹突接受情境信息(context),數量比近端樹突多很多;頂端樹突(apical dendrites),接受反饋信息,其一般接收上一層或幾層的信息。圖C 則表示HTM中使用的、用以模擬錐體細胞的人工神經元,后文中統一稱為單元(cell)。頂端樹突接受反饋信息,在現階段的模型當中,為簡化,不予考慮。

HTM 端對端應用框架[^8]

HTM在實際應用過程中,一般會按照上圖所示框架進行建模:原始數據進入數據編碼器中,編碼成二進制向量;然后再經HTM的空間池化(Spatial Pooling,SP)算法生成稀疏分布式代表元(Sparse Distributed Representation, SDR);既而經HTM時間記憶(Temporal Memeory,TM)生成預測向量(也是SDR類型),最后將SDR輸到分類器中進行分類預測,或其他函數、算法、模型中,實現所需目的。

接下來,進行分塊詳述:數據編碼(data encoding); 空間池化(spatial pooling)及 實時記憶(temporal memeory)。

數據編碼[^1]

HTM模擬新大腦皮質,而大腦皮質接收的數據對其功能有重要影響。神經科學已有很多研究表明感覺器官將接收到的信息轉化成稀疏數據。如耳蝸上面的絨毛細胞:

上圖中,人可能聽到的聲音的頻率從20 Hz到比如20k Hz,每個絨毛細胞如圖能夠接受一定范圍的聲音頻率,即當聲音頻率在某個絨毛細胞可接受的頻率范圍,則絨毛細胞(或者可以說絨毛細胞下面的神經元,注:這里的神經元不同於新皮質內的神經元細胞)被激活。當聲音(比如500 Hz)傳到耳蝸時,可接受此頻率的絨毛細胞全部被激活。但其數量占絨毛總量的比例也是非常小的。

從中可發現一些性質:數據輸入是冗余的,即多個絨毛細胞可接受聲音范圍有重疊(Overlap),當同一信息輸入時,多個絨毛細胞會被激活;信息在整個絨毛細胞列是稀疏的(Sparse)

數據編碼

基於些,數據通過編碼器將原始數據轉化成新皮質可用數據,需滿足:

  • 語義相似數據應生成有重疊的激活位點(bits)
  • 相同輸入總產生固定長度的二進制向量
  • 輸出的二進制向量應有相同維度(位點總數)
  • 二進制向量應有相似的稀疏度,並且有足夠的位點忍受噪音,以及子采樣(subsampling)

PS: Overlap(重疊)是二進制微量捕捉語義相似性的關鍵。

詳細的數據編碼可參考文獻1.其中給出幾種常用數據的編碼方式,敘述非常清晰明了。因其對HTM理解影響,上面已經講清,以防喧賓奪主,故點到即止。

數據輸入

Sparse distributed representations (SDR) 稀疏分布式代表元, 超大容量(tremendous capacity),極度容忍噪聲(extremely tolerant). SDR 對學習和記憶系統特別方便(之前的版本中,原始數據經編碼過程產生的Output被命名為SDR,但最新版放棄了這種說法,轉而把Spatial Pooling過程產生的output稱為SDR;不過encoder產生的output也完全符合SDR性質,為敘述方便,不加區分,統稱為SDR,至於代指哪一個過程,根據上下文過程可很容易區分)。輸入到單元(cell)內的數據來自三種區域[^1]:

  1. 近端樹突(proximal dendrites/zone):授受前饋輸入,即接受原始數據經encoder產生的SDR, 定義最優感受野(classic receptive field), 通常,同一個細胞列(柱)內分享同一近端樹突;
  2. 遠端樹突(distal dendrites/basal zone):接受背景環境輸入,即接受同一區域(region)的SDR,也就是與同一層內的其它單元產生連接突觸(注region一詞指代不清,也因目前的算法發展層面,接下來假設每一層都只有一個區域,這種簡化只是方便敘述,對理解,及對模型幾乎沒有影響。),學習序列轉換,即學習數據的時間結構;
  3. 頂端樹突(apical dendrites/ apical zone):接受反饋輸入,喚起自上而下的‘序列’期望(:當前版本還沒有加入頂端樹突,故接下來模型中沒有考慮反饋輸入)。

樹突建模[^5,10]

數據編碼成上述模式,還有一個很重要的原因,即在接下來的算法過程中,最主要用到的運算為Overlap 及Union.這兩個算法都是二進制運算,最多可算是非常簡單的矩陣運算,很大程度上減小運算的時空耗費。而接下來的運算區域或運算過程都是在樹突上進行。

  1. Overlap: 用以衡量兩個SDR相似性:

    \[overlap(\boldsymbol{x,y}) = \boldsymbol{x\bullet y} \]

其中x,y 為兩SDR向量,”\(\bullet\)“表示向量點乘,此過程可簡單理解為對‘1’進行計數。如果overlap 值超過一定閾值,比如\(\theta\),就稱兩個SDR匹配(下面的x,y均為向量):

\[match(x,y) \equiv overlap(x,y) \ge \theta \]

  1. Union: 賦予HTM在一個固定長度代表元上存儲大量模式的能力。這個能力使得HTM可以實時預測(在TM階段):

    \[Union(x_1,x_2,\dots ) = \oplus(x_1,x_2,\dots) \]

    其中"\(\oplus\)''表示逐元素相加\(x_i\) 表示SDR向量。

空間池化算法

Spatial Pooler (SP)[^2]:

SP對前饋連接進行建模,負責將二進制輸入數據轉化成SDR。SP即是對數據的空間(spatial)信息進行提取。

SP須滿足的屬性:

  • fixed sparseness 固定稀疏性,即編碼器出來的數據;
  • Distributed coding 分布式編碼;
  • Preserving semantic similarity 保留語義相似性;
  • Noise robustness/ fault tolerance 噪聲、錯誤的容忍;
  • Continuous learning 連續學習;
  • Stability 穩定性;

前幾個屬性,因產生的是SDR即可滿足,而后面的諸如連續學習,穩定性則是通過學習(突觸連接控制得到的)。

標准感受野

SP模型的第一步是確定標准感受野(Classic Receptive Field)(上圖中的灰色方框),即每個單元柱(mini-column)讀取輸入數據的區域,也就是說每個單元柱只讀取輸入數據的一部分,而且相鄰單元柱的標准感受野是有重疊的(overlap)。標准感受野確定之后,則要確定其中的潛在突觸連接(potential connection)。所謂潛在連接即為單元柱可以形成與數據形成連接突觸:

\[PotentialInput(i) = \{j |I(x_j,x_i^c,\gamma)\ and \ Z_{ij} <p\} \]

\(x_j\) 表示第 j 個輸入數據(神經元)的位置,\( x_i^c\) 表示標准感受野的中心輸入神經元的位置。\(\gamma\)表示局部感受野的邊長(矩形); \(Z_{ij} \sim U(0,1)\) ,即服從均勻分布的一個隨機數; p 表示成為潛在連接的閾值,只有小於此閾值,才能成為潛在連接,即形成連接突觸(此處暗示,標准感受野內的數據並是都會被SP讀取,但目前從算法的代碼上看,p值被設成1,即標准感受野內的數據都會成為潛在連接,故此處可以先不用考慮p值問題,下面提到的標准感受與潛在連接等同)。潛在連接成為突觸連接,須突觸的持久度(permanence) 不小於突觸穩定閾值。持久度是形成突觸連接的調節參數,是SP需要學習的參數,非常關鍵。初始化是隨機為每個連接突觸分配一個持久度。然后根據持久度域值,形成突觸連接一個二進制矩陣\(W\)(維度與標准感受野相同):

\[W_{ij} = \left\{ \begin{array} \\ 1, if \ D_{ij} \ge \theta_c\\ 0, otherwise \end{array} \right. \]

其中,\(D_{ij}\) 為第 j 個輸入神經元到第 i 個 SP單元柱的持久度,大小介於0,1之間。用均勻分布U(0,1)初始化:

\[D_{ij} = \left\{ \begin{array} \\ U(0,1), &\quad &j \in PotentialInput(i)\\ 0,&\quad& otherwise \end{array} \right. \]

\(\theta_c\) 為持久閾值(例如:0.5).

已知一個輸入向量 Z(即標准感受野內的數據),

則輸入向量在第 i 個單元柱上的重合度(overlap)

\[o_i = b_i \sum_{j} W_{ij} z_j = b_i W_i Z \]

其中 \(b_i\) 為第 i 個單元柱的提升值(boost)(>0),其控制單元柱的激活性,是要學習的關鍵參數。

局部抑制

SP還對局部抑制(local inhibition)機制進行建模,也稱'贏家通吃'原則,即,在第 i 個單元柱及其 n 個相鄰單元柱中,如果第 i 個單元柱排在前k( k<n)個單元列中才會被激活。不過單元列的前饋輸入的重合度(overlap) 還要不小於激活閾值(\(\theta_{stim}\))。用\(a_i\)表示第 i 個單元列的激活狀態,則:

\[a_i = \left\{ \begin{array}\\ 1, \quad o_i \ge prctile(NeighborOverlap(i), 1 - s) \quad and\quad o_i \ge \theta_{stim};\\ 0, \quad otherwise. \end{array} \right. \]

其中,s 是目標激活密度,即總比例的前百分之幾的單元柱被激活;\(prctile(x,p)\) 是分位函數, 而\(NeighboringOverlap(i)\) 是第 i 個單元柱及其周圍相鄰單元柱的重合度集合:

\[NeighboringOverlap(i) = \{o_j| j \in Neighbor(i)\} \]

其中\(Neighbor(i)\)是相鄰單元柱的集合:

\[Neighbor(i) = \{j | \left\| y_i - y_j\right\| <\phi, j \ne i\} \]

其中$y_i \(表示第 i 個單元柱的位置,則\)\left|y_i - y_j \right|$表示 單元柱i,j位置的(歐式)距離。參數 \(\phi\) 表示抑制半徑, 其由所有單元柱突觸連接的平均值與每個輸入神經元的單元柱數量乘積所得到。

參數更新

持久度:

前饋連接遵從赫布規則(hebbian rule): 對於每一個激活的單元柱的所有潛在連接,加強激活的突觸連接,即增大其持久度(+p); 懲罰未激活的突觸連接,即減小其持久度(-p),但不能超過1,或小於0。如果超過1就按1處理,小於0 當0處理,即遵從截尾效應

提升值:

通過比較每一個單元柱與其相鄰單元柱的近期活性(recent activity),

第 i 個單元柱在 t 時刻的活性表示為\(a_i(t)\),定義第 i 個單元柱的近期活性表示為:

\[\bar{a}_i(t) =\frac{ (T - 1) *\bar{a}_i(t-1) + a_i(t)}{T} \]

參數 T 控制提升值的更新速度(趨勢慣性)。

相鄰單元柱的近期活性定義為:

\[<\bar{a}_i(t)> = \frac{1}{|Neighbor(i)|} \sum_{j \in Neighbor(i)} \bar{a}_j(t) \]

更新提升值\(b_i\):

\[b_i = exp(-\beta(\bar{a}_i(t) - <\bar{a}_i(t)>)) \]

局部抑制半徑\(\phi\):

所有單元柱突觸連接的平均值與每個輸入神經元的連接單元柱數量乘積。

SP總結

  1. 經SP過程,產生真正意義上的SDR。SP過程,有多個步驟使數據稀疏化(當然這些步驟是在完成提取必要信息的過程中完成的稀疏化):第一個是 潛在連接的產生過程(當然目前,算法的p值設為1,沒有實際意義,但不應該忽略其作用);第二個是根據持久度形成的突觸連接;第三個是競爭性局部抑制。

  2. SP后,產生的SDR維度與這一層的維度一致(即在目前算法中,為一個M維向量,這里的M為本層內單元柱的個數)。

  3. SP激活的最小單位是單元柱,這也是前面強調的,同一單元柱內的單元共享近端樹突的數據輸入。其中提取的是數據 的空間特征。


Temporal Memory(TM):時實記憶[^1]

TM 算法是HTM最核心的算法,正因為TM, HTM才具備的學習及預測能力。當SDR輸入到TM中, 學習SDR中所代表的數據及其背景環境(context)學習:通過增加或者減少潛在突觸連接而達到學習目的。預測:根據SDR預測。基於過去與當前對未來進行預測。

上圖中可視為TM的一個學習過程。在SP階段,數據輸出SDR,其中提取的只能顯示出空間特性,而時間特征,則需要在TM階段過程提取,而提取過程中數據的學習,則是通過學習數據模式(pattern)的方式,而模式的表示則需要‘精確’到單元柱中的單元。上圖B中,序列‘BC'分別在序列’ABCD‘與‘XABY’中出現,經SP過程兩序列中‘BC'的表卻是相同的(見上圖B中 B,C表示)。為既能體現BC是相同的,又要體現兩序列中’BC'處在不同的情境(context)中,HTM采用的做法是在同一單元柱內用不同的單元表示(如上圖C中B'C'與B''C'')。

學習過程緊跟着預測過程。上圖A中‘A’輸入后,TM預測出‘B’(圖中紅點)出如果B成功預測,則接下來會預測’C‘。上圖B中,當輸入‘B’時,會預測'C',但由於此時‘C’不唯一,TM會兩種情況都給出(’C'‘,’C'‘ ’),輸入‘C'同理會給出’D'‘,’Y'‘ ’兩種預測。

在TM階段,用到的樹突是基底樹突,即上圖標有‘Context'處。基底樹突相較於前饋輸入的近端樹突,其數會很大,一個單元中蘊含多個基底樹突。基底樹突是HTM的記憶系統,這里儲存着大量的HTM學習到的數據模工,這些模式是預測的基礎。每個樹突都含有一個M~X~N的模式矩陣,且是稀疏的,大量的模式包含在這個矩陣中(以Union ('OR')的形式儲存)。

基本參數:

N: 單元柱數量;

M:每個單元柱所含單元數;

D: 每個單元所含基底樹突數;

S:每個基底突觸所突觸數

\(A^t\): t時刻激活狀態矩陣,其中\(a_{ij}^t\)表示在t時刻,第 j 個單元柱上第 i 個單元的狀態;

\(\Pi^t\):t時刻單元預測狀態矩陣, 其中 \(\pi_{ij}^t\) 表示在t時刻,第 j 個單元柱上第 i 個單元的預測狀態;

\(D_{ij}\):單元基底樹突集,其中\(D_{ij}^d\)表示\(a_{ij}^t\)第 j 個單元柱上第 i 個單元的第 d 個基底樹突,為一稀疏矩陣(M~X~N),其中非0元素代表,潛在突觸的持久度;

\(\dot{D}_{ij}^d\): M~X~N的0,1矩陣,其中元素1所處位置表示處此處的\(D_{ij}\)的持久度為非0(>0);

\(\tilde{D}_{ij}^d\): M~X~N 的0,1矩陣,其中元素1所處位置表示此處形成突觸連接;

上圖是TM的動態演示,動得太快有點亂,這里就不作過多關注,只需對其中連接有個直觀認識即可。

初始化:

隨機選取一組單元,並為這些單元的基底樹突分配隨機分配持久度,同SP階段一樣,持久度是調節突觸連接的關鍵,是需要學習的參數,也正因為持久度的變化,才能使得HTM具備了學習的能力。這里的樹突不是層與層間的樹突,而是同一層內,一個單元與其他所有單元的連接突觸。

計算單元狀態:

局部抑制過程作用之后(SP過程之后),一組激活的單元柱(\(W^t\))產生,現在來計算單元柱中每個單元的狀態,則:

\[a_{ij}^t = \left\{ \begin{array} \\ 1, \quad j\in W^t , \pi_{ij}^{t-1} = 1;\\ 1,\quad j \in W^t,\sum_{i} \pi_{ij}^{t-1} = 0;\\ 0,\quad otherwise. \end{array} \right. \]

上式表示,當單元處於激活單元柱中,並且處在預測狀態(predictive state)(即在t-1時刻被預測為t時刻要被激活),則此單元即被激活;或者單元處在激活單元柱中,但所在單元柱中所有單元均不處於預測狀態,則被激活(這句話說明,如果所處激活單元柱中所單元都不處於激活狀態,則單元柱上的所有單元均被激活)。

而單元的預測狀態:

\[\pi_{ij}^t = \left\{ \begin{array} \\ 1, \quad \exists_d \left \| \tilde{D}_{ij}^d \circ A^t \right\|_1 > \theta;\\ 0,\quad otherwise. \end{array} \right. \]

其中\(\theta\) 表示預測狀態激活閾值,‘\(\circ\)’ 表示逐元素相乘。即當某一單元的任意基底樹突與狀態矩陣的突觸連接數大於預測狀態閾值,單元則處於激活狀態。

更新樹突及突觸:

更新樹突選擇

TM的學習及預測的物理基礎即為樹突的長衰,而樹突的長衰則是通過樹突的持久度來調節。那第一步即是選擇要更新的樹突。設要更新的樹突集合為\(D_u\),則:

\[D_{u1} :\left\{D_{ij}^d \ \Big|\ \ \forall_{j\in W^t}\left( \pi_{ij}^{t-1} > 0\right) and \left\| \tilde{D}_{ij}^d \circ A^{t-1}\right\| >\theta\right\} \]

\(D_{u1}\)表示那些成功預測的單元基底樹突。

如果激活的單元柱為非預測的,需要選擇其中一個單元(選擇基底樹突包含持久度最大的那個單元)表示數據及其情境,為未來預測作准備:

\[D_{u2} :\left\{D_{ij}^d \ \Big|\ \ \forall_{j\in W^t}\left( \sum_{i}\pi_{ij}^{t-1} = 0\right) and \left\| \dot{D}_{ij}^d \circ A^{t-1}\right\| = \max_{i}\left(\left\|\dot{D}_{ij}^d \circ A^{t-1}\right\|_1\right)\right\} \]

則需要更新的樹突集合為:

\[D_u = D_{u1} + D_{u2} \]

持久度更新

更新的原則遵從赫布規則:獎勵激活單元的突觸,懲罰非激活單元突觸,具體實施,即增加、減小持久度:

\[D_{ij}^d: =D_{ij}^d + \Delta D_{ij}^d \]

其中\(\Delta D_{ij}^d\)即為拷久度變化值,其可分為兩種情況:一是對於激活單元;另一種是對那些並未激活的單元(即預測失敗的單元),給予其微小的衰減,因為

\[\Delta D_{ij}^d = \left\{ \begin{array} \\ p^+\left(\dot{D}_{ij}^d\circ A^{t-1}\right) - p^-\dot{D}_{ij}^d,&&\quad a_{ij}^t = 1;\\ p^{--}\dot{D}_{ij}^d,&&\quad a_{ij}^t = 0 \ and \ \left\| \tilde{D}_{ij}^d \circ A^{t-1}\right\| >\theta. \end{array} \right. \]

TM總結

  1. 這一過程主要可分為兩個過程,即學習及預測。學習的是數據的模式,預測則是根據學習到的數據模式進行預測。

  2. TM最小單位是單元。

  3. 輸出的數據(或者說預測的數據)是M~X~N的稀疏矩陣。

參考文獻

PS:此處列出的是最新版本的相關文獻,之前版本的文獻則沒有囊括。

[1]: Scott Purdy (2016) Encoding Data for HTM Sytems. arXiv. 1602.05925

[2]: Yuwei Cui et al. (2017) The HTM Spatial Pooler — a neocortical algorithm for online sparse distributed coding doi: http://dx.doi.org/10.1101/085035.

[3]: Hawkins, J. et al.2016 Biological and Machine Intelligenece. Release 0.4. Accessed at http://numenta.com/biological-and-machine-intelligence/.

[4]: Hawkins J and Ahmad S (2016) Why Neurons Have Thousands ofSynapses, a Theory of SequenceMemory in Neocortex.Front. Neural Circuits 10:23.doi: 10.3389/fncir.2016.00023

[5]: Subutai Ahmad, Jeff Hawkins How do neurons operate on sparse distributed representations? A mathamatical theory of sparsity, neurons and active dendrites. arXiv: 1601.00720[q-bio.NC]

[6]: Zyarah, Abdullah M., "Design and Analysis of a Reconfigurable Hierarchical Temporal Memory Architecture"(2015). Thesis. Rochester Institute of Technology. Accessed from

[7]: Hawkins, Jeff, Subutai Ahmad and D. Dubinsky.(2011) "HIERARCHICAL TEMPORAL MEMORY including HTM Cortical Learning Algorithms." Technical report, Numenta, Inc, Palto Alto http://numenta.org/cla-white-paper.htm

[8]: Yuwei Cui et al. Continuous Online Sequence Learning with an Unsupervised Neural Network Model Neural Computation 28, 2474-2504(2016) doi: 10.1162/NECO_a_00893

[9]: Subutai Ahmad, Scott Purdy (2016) Real-Time Anomaly Detection for Stream Analytics arXiv: 1607.02480v1

[10]: Subutai Ahmad, Jeff Hawkins (2015) Properties of Sparse Distributed Representations and their Application to Hierarchical Temporal Memory.




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM