(僅是個人學習摘抄)
CMAC(Cerebellar Model Articulation Controller)被稱為“小腦模型控制器”,但其網絡模型與習慣上的人工神經網絡有所不同,它進行單元的權值調節,但是不具備人工神經網絡的層次連接結構,也不具備動力學的行為,只是一種非線性的映射。CMAC 是以一種控制器模型被提出來的。
8.1 CMAC 模型
CMAC 是一個多維連續系統的自適應學習網絡,可以認為是對外界函數的多維查詢系統。結構如圖所示:
圖中,S 為 n 維輸入矢量空間;A 為聯想記憶空間(單元);P 是輸出響應矢量。
輸入空間 S 中的每一矢量 S(...,Si,...,Sj,...)被量化后,成為 A 的地址變量。考慮 A 中被激活的單元為 A*,A* 屬於 A(A* 是 A 的一個子集),則 A* 的模 |A*| 表示了 A* 空間的長度。
將輸入矢量空間 S 作為 A 空間的地址矢量,則 P 就是相應地址中的內容。這就構成了如下映射關系:
f:S→A
g:A→P
f 是固定的,g 依賴於 P 中的內容變化。這個變化可稱為權值調節或訓練。
由上述分析,可以看出:在 S 中,若 Si 和 Sj 相互之間有一定的聯系和影響,那么上述的聯想推理特征正是所期望的;反之,若 Si 和 Sj 之間是獨立不相干的,其映射后產生的 Ai* 和 Aj* 的交集對兩個輸入所期望的輸出發生“學習干擾”,而對此是不希望發生的。一般可通過兩個方面的作用來克服這一對矛盾:
8.2 CMAC 映射算法
將映射 S→A 分解為兩個子映射:
S→M
S→A
(1)一維情況:在一維情況下,子空間 M 與 A 是一樣的,即 M = A。有 |m*| = |A*|
由 a b c d 往下是 e,以 e 為起始,向后循環,依次直至最后。
從上述算法可以看出,映射空間在滿足 S→A 映射前提下,A 的大小由 S 確定。假定 S = {S1,S2,...,Sn},每一分量取值的數目為 R,那么 A 所需要的空間就為 Rn。若 R 和 n 較大,則在實際應用中不能滿足。因此,必須要進行空間壓縮,但又不能影響 CMAC 的特性。這里采用 Hash-Coding(散列編碼)的編碼技術來壓縮空間。
Hash-Coding 是計算技術中常見的一種編碼方法,有時也被稱為“雜湊編碼”。它是將大空間的分散數據或是稀疏矩陣中的元素經編碼存貯在一個較小的空間中的方法。
Hash-Coding 有許多編碼方法,如乘法、除法等。在上面的例子中,空間 A 是以 a,b,c,d,...等表示,可將這些符號的 ASCII 碼取出並相加,其和再除以集合 A 的長度,其余數就可作為散列值,這就形成了雜湊編碼。
用 Hash-Coding 方法對 A 編碼獲得的散列空間用符號 Ap 表示。Ap 可任意選擇,以與實際可實現的物理空間大小相對應。這種 A→Ap 映射實現了從多到少映射的要求,如下所示:
但是 Hash-Coding 編碼實現 A→Ap 映射后,必然會出現所謂的“映射沖突”(collision)。在實際應用中,“映射沖突”可以完全忽略。
8.3 CMAC 的輸出計算
將記憶空間 A 或 Ap 中的每個單元的內容作為要輸出的數據,這些數據也可考慮為一種權值 W。對於輸入 S,在與其地址相對應空間 Ap* 或 A* 中有相應的權值。這就形成了相應的輸入——輸出模式。
上述算法是一種有教師的訓練過程,系統的訓練與輸出都是同時進行的,也就是在 CMAC 模型運行的整個過程中,CMAC 一直處在學習訓練的狀態下。CMAC 是以系統的輸出作為訓練指標的。因此,CMAC 是一個實時運行模型。
與其他神經網絡一樣,CMAC 也可以離線訓練,其訓練指標是:
8.4 CMAC 控制器模型
CMAC 網絡控制器結構如圖所示,其輸入是來自目標識別器的輸出,而控制器的輸出是送到目標識別器的教師信號,也就是選擇某一個庫中的目標物體與識別目標相匹配。
CMAC 網絡控制器的工作原理:目標識別器將某一學習周期的學習結果送入 CMAC 訓練模塊中,訓練后的一個結果存貯在 CMAC 的記憶存貯器中。然后,CMAC 函數發生器根據動態數據庫的數據從他的記憶模式中產生一個相應的模式作為輸出。這個輸出分為兩路分別輸送到目標識別器和 CMAC 訓練器中。訓練器將比較輸入和輸出信號的差異,以誤差平方和(EMS)作為網絡訓練的收斂准則。學習訓練一直到該誤差滿足要求。因為這種學習過程是和目標識別器同步進行的,它將逐步逼近其學習識別的目標,因此,算法的收斂性一定會保證。這類算法的主要特征是對每個輸入提前給出所希望的輸出,學習過程就是改變網絡的權值,使系統實際輸出與希望輸出誤差盡可能小。在 CMAC 中引入了最小均方差算法 LMS(Least Mean Square)。
8.4.1 改進的 CMAC 實時動態算法
網絡輸入為多維矢量 S(常為系統變量),輸出為該矢量的大量線性函數表達。網絡由一組記憶單元 A 分布存貯與 S 有關的信息,而輸入空間 S 中的每一矢量 S(..,Si,...,Sj,...)變成了這些記憶單元的地址變量。換句話說,輸入狀態空間 S 中的每一點 S(..,Si,...,Sj,...)被映射到 N 維記憶空間 A 中的 |A*| 記憶單元中。A* 的空間大小為 M,即 |A*| = M,M<N。對於 Si 和 Sj,一旦它們在 S 中互相靠近,則它們各自的映射空間 Ai* 和 Aj* 在 A 中相覆蓋。這種構造原理使得網絡輸出 f(S) 體現出系統變量之間的相互作用和聯想推理特性。f(S) 是 A 中相應各單元的信息之和。信息的變化根據控制量的輸入變化,通過權重 w 的調節來實現。
CMAC 通過改變 A* 中每一單元的權重值而進行訓練,即將式(8.6)改寫為:
輸入空間 S 在實際中都比較大,記憶空間 A 也會非常大,所以必須將 A 映射到一個較小的空間 Ap 中。Hash-Coding 過程不可避免會產生“映射沖突”。該“映射沖突”被視為一個不良作用,一般都盡量通過改變網絡參數使它最小。然而,輸入空間中向鄰近的輸入可激發一些相同的神經元,使輸入空間中相近的輸入矢量可產生相似的輸出,以形成 CMAC 的歸納能力。
作為學習控制器,CMAC 的訓練是一個誤差校正迭代過程。對於方程(8.10)中的權重重修正量 Δwi,可由下式確定: