2011年2月25日 星期五

Self-organizing map


※此筆記可能會有一些錯誤, 歡迎大家指正:)※

這學期似乎會被學長找去代課, 聽說是要上機器學習(machine learning, ML). 什麼!! 聽到的瞬間身體不自主的抖了兩下(還好沒有漏了幾滴東西…), 剛好最近看到一篇文獻是探討類神經網路(neural network)中的Self-organizing map(SOM)與複雜網路(complex network)之間的關係(究竟SOM跟網路拓樸會擦出什麼火花呢?! 有興趣可以參閱[1]), 為了能夠稍為進入代課的狀況, 就來複習一下SOM並且寫寫筆記[4] :).

I. Introduction
SOM的全名是Self-organizing map又或著是Self-organizing feature map(SOFM), 中文翻譯成"自我組織(特徵映射)圖"網路, 不管名稱為何所說的都是同一個東西. 此方法是由T. Kohonen在1980年代所提出, 因此SOM又被稱為Kohonen network[3][4][5].

(以下為小羊之不負責任解說)

SOM的概念來源為人類大腦網路或生物網路在處理資訊時, 處理相同資訊的神經元會聚集在一起的特性, 簡單來說就是會有一個個區域的樣子. 例如: 給一隻羊看草原的照片並且同時給牠照fMRI, 我們會發現其腦部有一些特定的區域會對草原有反應. 圖1與圖2為fMRI及SOM, 互相對照之下, 可以觀察看看兩者有何相似之處.


(以上為小羊之不負責任解說)

II. Self-organizing map
SOM有一個很重要的優點為, 將N維(N-dimension)的資料映射(mapping)到2維(2-dimension)的空間上(如圖3所示)並且維持資料中的拓撲(topology)特性.將資料映射到2 維空間時則可以使用視覺化(visualization)的方式呈現, 以方便後續的觀察及分析.



舉個例子, 假設我們想要了解全世界各地所有不同品種的羊之間的關係為何, 若總共有5個品種(a.亞洲, b.非洲, c.歐洲, d.美洲及e.大洋洲), 每一個品種都有5個屬性(5維). 對每一個品種收集100 隻羊的資料, 因此資料總數為500 筆. 接下來我們利用SOM 將5維的資料映射到2維的空間上, 以視覺化的方式來呈現這5個品種的羊之間的拓樸關係.

SOM 演算法(參考至[2]及[5]):
1. 初始化(initialization)
2. 輸入資料集(dataset)
3. 從資料集挑選一個pattern 並尋找距離最近的神經元為winner
4. 更新winner 神經元的權重及其鄰近神經元
5. 重複步驟3~4, 且迴圈步數 step=2 至結束

接下來我們定義 SOM 演算法中的必要元件(公式):
1.距離函數(distance function),
2.學習規則(learning rule),
3.核心函數(kernel function),
4.鄰近函數(neighborhood function),
5.學習率函數(learning-rate function),
6.函數及
7. 鄰近範圍的形狀(shape of neighborhood).

首先, 定義距離函數, 學習規則及核心函數.
1.距離函數(歐幾里德距離):


其中是目前的pattern i, 是2維Map上的神經元 j. 距離函數是用來找出距離目前patter最近的神經元並成為winner神經元, 隨後根據鄰近函數更新winner神經元的鄰近其他神經元.

2.學習規則:


其中為神經元 j 在時間 t 時的權重, 為神經元 j 在時間 t 時的核心函數, 為目前所選的 pattern, 為時間 t 時的鄰近範圍之大小.

3.核心函數:


包含了學習率函數及函數, 核心函數會隨著時間 t 變化, 參考常態分佈(Normal distribution)的在不同參數下的曲線變化之後[8], 則我們可以感覺一下是如何更新winner神經元的鄰近其他神經元之權重.

再者, 定義學習率函數, 函數及鄰近函數, 這三個函數通常都定義成單調的(monotonic)遞減的函數. 第一種定義的方式為參考相關文獻[3], 第二種定義的方式則是簡單的方式, 可以從下圖看出其中差異.



4.學習率函數:




其中 為學習率的初始值, 為總迴圈數.

5. 函數:




其中為的初始值, 為總迴圈數.

6.鄰近函數:




其中為鄰近函數的初始值, 為總迴圈數.

最後, 對於鄰近範圍的形狀可以定義成正方形(square)或六角形.

7.鄰近範圍的形狀:



III. Experiment
接下來我們來做點小實驗來體驗一下SOM :D. 首先, 從UCI Machine Learning Repository下載Iris資料集(http://archive.ics.uci.edu/ml/datasets/Iris, 簡單的介紹此資料集, 總共有150筆資料, 每一筆資料有4個屬性(包含sepal length, sepal width, petal length, petal width及class)及3種類別(Iris setosa, Iris versicolour及Iris virginica). 例如: 第35筆資料為4.9,3.1,1.5,0.2,"Iris-setosa".

當想要了解Iris資料集在2維平面上的樣子為何, 我們將屬性兩兩一組並且利用Excel畫出散佈來觀察. 例如: 圖6的x軸為sepal length為及y軸為sepal width.



但是, 當資料集的屬性變多時, 想要畫出所有的散佈圖是相當累人的工作. 此時, SOM就派上用場了, 我們僅需觀察SOM將多維資料映射到2維空間之後的結果就可以了(如圖7), 所以使用SOM是相當的方便.


--
參考文獻及資料
[1] F. Jiang, H. Berry, and M. Schoenauer, "The impact of network topology on self-organizing maps," Proceedings of the first ACM/SIGEVO Summit on Genetic and Evolutionary Computation, pp.247–254, 2009.
[2] K. A. Smith and A. Ng, "Web page clustering using a self-organizing map of user navigation patterns," Decision Support Systems, Vol. 35, pp. 245– 256, 2003.
[3] T. Kohonen, “The Self-organizing map,” Proceedings of the IEEE, Vol. 78, No. 9, pp.1464-1480, Sep. 1990.
[4] Lecture - Neural Network I: Fundamental Theory and Applications, The University of Aizu.
[5] Wikipedia - Self-organizing map,
http://en.wikipedia.org/wiki/Self-organizing_map

[6] Human brain,
http://en.wikipedia.org/wiki/Human_brain

[7] ai-junkie - Kohonen's Self Organizing Feature Map,
http://www.ai-junkie.com/ann/som/som1.html

[8] Wikipedia - Normal distribution, http://en.wikipedia.org/wiki/Gaussian_distribution

2010年6月30日 星期三

CNN - Small world experiment



--
參考資料:
Social Networking in Plain English

CNN - Flu spread model



這是一個CNN報導有關流感的電腦模擬模型; 首先, 提到如果沒有任何的防疫措施情形下, 大約會流行3個月左右, 至少會有半數的人會感染. 再來, 施行預防性投藥(克流感)措施之後, 會使得疫情延後發生, 但並非使其不發生. 接著, 施行疫苗政策之後疫情也還是會緩慢的發生, 如同前一個措施. 緊接著, 對空中交通做管制的話, 似乎對疫情的發生沒有什麼太大的作用. 最後一個我想應該是減少一些社交活動, 避免人與人之間的接觸.

--
參考資料:
另一則報導:
Computer model of how virus will spread

註:H1N1 flu = Swine flu

第六感驚人的潛力PranavMistry(中文)



--
原文影片:
Pranav Mistry: The thrilling potential of SixthSense technology

2010年2月3日 星期三

Cyclic Redundancy Check


※此筆記可能會有一些錯誤, 歡迎大家指正:)※

今天晚上突然被一個同學用MSN問了有關CRC的問題, 一時之間還想不太起來CRC在幹嘛, 只記得之前Aizu修課時有講到(感謝筑波大學的木村老師, 雖然你上課上超快的…<( _ _ )>), 所以就把上課的投影片翻出來看.

I. Introduction
CRC的全名是Cyclic Redundancy Check, 中文翻譯成"循環冗餘核對碼"(這不是我翻的吶, 而Google翻譯的結果也和這個一樣:s).

首先, 先從一個簡單的概念說起,
"除法"

在除法的整除式子中,


其中,
是商數,
是除數,
c 是被除數.

如果是另一個有餘數d且相等的式子就變成,


將其調整一下位置,


整合兩個式子為,


那麼…, 究~竟~~CRC跟除法有什麼關係呢?!
(小羊眉頭一皺發現內情並不單純…)

在CRC碼中主要分成兩個部份,
1. data
2. check bits

例如:


一個CRC碼總共有n個bits, 其中data的長度為n-k個bits及check bits的長度為k個bits. 如下所示,


當我們要把CRC碼傳送出去的時候, 就會把data後面加上check bits就變成,
11101100100010110.

II. Cyclic Redundancy Check
從另一方面的除法來想, 假設CRC碼是一個多項式, 把除上一個為除數的多項式(假設是給定的, 此時就變成了被除數的多項式), 則會得到一個為商數的多項式. 如下所示,


將其調整一下位置,


當我們手中有一個data的多項式並且將其提高k次方, 再加上一個餘數的多
項式之後, 會和CRC 碼的多項式相等. 如下所示,


整合兩個式子為,


(似乎好像有點眉目了! :o)

接下來有一個問題是, 要怎麼在data後面加上check bits?! 而且data又是個多項式(或2進位的編碼)!! 如果我們把data往左移(即提高k 次方)是不是就空出位置, 然後可以把check bits加上去了?!

例如:data往左移4個位置
1110110010001 -> 1110110010001****

如果把星號換成0(即補0),
1110110010001 -> 11101100100010000

再加上check bits,


哦哦~~!!(好像有點像樣了) 那check bits又是怎麼來的?!(7-11有在賣嗎?!) 在前面有提到給定的除數的多項式, 我們可以利用來找出餘數, 使得"已補0之data"加上餘數可以被G(X)整除.

例如: 假設, 將其編碼為11001(其中2次方及1次方的係數為0), 接下來求餘數的過程如下所示,

在求餘數的過程中所利用的操作方式為XOR, 最後就可以得到check bits了(也就是餘數). 需要注意的是在中的最高次為4 次方, 所以我們要在check bits前面補一個0就變成0110. 還有商數其實就是101110100010.

III. Summary
在第II 章所描述的程過其實把除法和CRC做個比較, 用以大致上了解整個CRC碼產生過程. 最後我們再將其過程整理一下,

如果把CRC碼中的data和check bits用多項式來表示的話就變成,



將每一項的係數拿來作編碼的使用時CRC碼可以表示成,


接下來我們把所有已知的多項式整理一下,
CRC碼(或被除數):
data:
check bits(或餘數):
除數:
商數:

將及其套入除法的整除式子中,


把位置調整一下,


再將提高k次方及套入有餘數的除法式子中,


其中表示data要補k個0(即多項式中的每一項之次方都提高了k次方, 例如:; 同時也表示餘數的長度為k=4 bits, 所以要將的長度補齊為4 bits).

最終CRC碼的式子就變成,


(怎麼好像變的很複雜的樣子… -0-")

最後, 當我們收到一個CRC碼要怎麼確認它在傳送的過程中有沒有發生錯誤呢?! 其實只要做一個動作就可以了,


只要對做mod的結果為0就表示所收到的CRC碼沒有錯誤, 反之則有錯誤!!
:)

--
參考資料:
Lecture - Personal Communication Systems and Mobile Networks, The University of Aizu.
Lecturer - Shigetomo Kimura, University of Tsukuba.
Wikipedia - 除法
Wikipedia – Exclusive OR

Wikipedia - Cyclic Redundancy Check
PDF - Cyclic Redundancy Check
Example - 臺灣菸酒公司99年第2職業人員甄試試題第16題


20180212 updated