我參考了這篇文章
http://www.scholarpedia.org/article/Kohonen_network
另一個很好的示範在這裡
http://www.math.le.ac.uk/people/ag153/homepage/PCA_SOM/PCA_SOM.html
SOM
t是訓練步
一個輸入資料是n維向量
待訓練的是一堆節點,這堆節點之間有邊連着,通常是排成grid那樣的網狀結構
一個要訓練的節點包含一個n維向量
訓練從t=0開始,t=輸入資料個數時結束
每步的更新規則是
其中a(t)是一個随訓練步數衰減的函數,c,i都是訓練節點的索引,c是離x(t)最近的節點的索引,hci是節點mc和mi的邊距離。也就是說每個訓練步選一個輸入資料x(t),将離它最近的節點mc向這個輸入資料拉扯,這個節點又透過連着的邊,帶動鄰近的節點向這個輸入資料移動。
Batch SOM
這樣輸入資料太多的時候會很慢,改進的方法稱為batch som。
方法是在每一步,對每個節點 mj,統計所有選中它為最近鄰的輸入資料的平均值,記為
。
再按下式更新每個節點的值。
nj是選了mj做最鄰近的輸入資料個數,hji是節點mi與節點mj的邊距離。可見對于節點mi,它會更新到鄰近所有節點mj對應的
的權重平均值。