Posts

Showing posts from January, 2019

Artificial Neural Network - 經歷著人工智能寒冬和復興

Image
ANN, Artificial Neural Network是模仿生物神經網路數學模型,也作為深度學習和人工智能十分重要的基礎,所以筆者會花很多的筆墨解釋其設計,運作,後來的演變過程,盡量用簡單易明的例子作闡釋。 在了解整個神經網絡(Neural Network)之前,我們先從一個獨立的神經元開始說起吧, 幻想每一個神經元是一個只懂吃喝玩樂的他媽哥池(台灣的朋友們會叫它塔麻可吉),在他的世界裡只有吃喝和玩樂,至於決定先吃還是先玩,那就要看看他先收到肚子餓的信號還是享樂的心癮;換個角度來說,一個較為貪玩的他媽哥池會容易心癮發作,較饞嘴刖對肚子餓特別敏感,他媽哥池會收集所有資訊,根據它自己對吃或玩的敏感度,並把它們轉化為相應的決定或行動。 信號就是進入神經元的Input,敏感度就是權重Weight,對某信號的敏感度愈高,Weight也會愈提高,每一個Input都會有屬於它自己的Weight,然後神經元把一連串的Input乘上對應的Weight,並加起來放進Activate Function來決定Output的值是什麼,也就是要作出什麼的決定。 $$y=f(w_0x_0+w_1x_1+...+w_nx_n)$$ 當一個又一個的他媽哥池連接起來成為Artificial Neural Network,以一個完整的Network來說,結構以一層層的Layer造成,第一層被稱為Input Layer,最後的層為Output Layer,剩下的夾心階層就是Hidden Layer。 心水清的讀者們認該會意識到,如果沒有hidden layer的Network,activation function為Sigmoid Function的話,那麼它正正是最基礎的Logistics Regression,bias就等同於Intercept,把Input乘上對應的Weight再直接加起來,經Activation function 再決定Output是什麼。 當我們解釋哪一個Input (Factor)最影響預測結果,只要用上Wald Test就好了。但是當加上一層Hidden Layer,就不再簡單了。所以層數越多的網絡,預測結果便難以解釋,越來越像一個”黑盒”。再者,Hidden Layer裡的神經元的數量是決定參數Weight的數量,在筆者多篇文章也提...

書中自有黃金屋?從Sparktake.com的文章找Keywords

Image
筆者最近想玩NLP和Text Mining,於是拿了朋友經營的網站Sparktake.com做了些小嘗試,Sparktake除了開發了熱門的手機程式:二手書買賣平台,也定期發佈不少令人發人深省的讀後感和心得。而筆者看看能不能在眾多的文章中準確和自動地抓住每一篇的重點字眼。 正所謂凡事起頭難,當手頭上沒有任何Data的時候,就唯有自己打開Sparktake.com動手Scrape吧。 經歷一番的折騰,終於把一共116篇的文章,包括標題 ,內容,發佈時間,Tag一併地拿下,把其放進一個csv檔裡作之後的分析。基於Sparktake的文章絕大部分是用中文所寫的,擷取的內容都encode成為utf-8再存起來,免得亂碼等問題暗中作怪。 Sparktake.com 接下來是Preprocessing的環節,就先把英文字母和一些Special Character (例如:”\n”, \r”等)都刪去,只留下中文字的UTF-8,再decode轉換成Unicode。同時,筆者用上大家都不會陌生的Jieba(結巴),這個Python Package來做中文的NLP。在找出關鍵字前,我們先從所有文章作一個整體的分析。Jieba的tokenizer可以把整篇內容的每一句句子都切成一組又一組的詞語,即是: "一個人遇上一本書,都是緣份使然。看了多少本書並不重要,重要的是我從中有多少得益。" 切成:  "一個", "人", "遇上", "一本", "書", ",", "都", "是", "緣份", "使然", "。", "看", "了", "多少", "本書", "並", "不", "重要", ",", "重要", "的", "是", "我", "從", "中...

KNN - 近朱者赤 近墨者黑

Image
初接觸Machine Learning的朋友們,對KNN這個算法應該也不陌生了,原理既容易理解,應用也十分廣泛,只要有足夠的鄰居(訓練數據),也可以用作分類或迴歸(Regression)的方面工作。舉一個活活的例子,中學時代(當時還沒有Online social platform ,感嘆時代的變遷 )總會遇上一個暗戀對象,但對他/她的背景認識還未夠深,便會傾向留意和觀察他/她身邊的朋友是那種人,從而判斷他/她是一個怎麼樣的人。正所謂近朱者赤,近墨者黑,而是近硃砂的會被判定為染成紅色,靠近墨的則是黑色,也同時寓意Testing Data的預測結果因環境(Training Data)所影響的。 KNN屬於機器學習中的Supervised learning其中一種算法,從訓練數據的Label進行學習,建構好的模型要,首先要知道KNN全名為K-nearest neighbors,即利用k個最近似的鄰居,最後"以多數服從少數"的方式判斷該人/事是屬於那種類別。為了讓讀者明白整個算法的原理,有9個數據點,其中8個來自Training Data,分別有4個藍色的,4個紅色的;至於中間有一紅點,它是來自Testing Data的,最一開始我們是不知道它是紅還是藍的,假設我們用3位鄰居(k = 3)便決定是什麽,會發現其中兩個是紅的,另外一個是藍的,根據"多數服從少數",這個被判斷為紅色,最後也因此我把它變成紅色了。 把以上的原理拓展到更多的數據量,更多的Features,更多的類別(Class),便能應用在各式各樣的Business / Research Problem。不過要深入理解這個Algorithm的設計,了解到這個程度是還不足夠的,我們還需要明白以下的學問包括: 誰是鄰居們? 要多少個鄰居(k)才夠呢? 誰是鄰居們? 要判斷那些是鄰居的話,首先要量化相似度,而Eulidean Distance是比較常用的方法來量度相似度: $Distance = \sqrt{\sum_{i=1}^{k} (x_{i}-x_{self})^2}$ (注:Eulidean Distance只是其中一個量化距離的方法,其他的例如Manhattan Distance,在High Dimension高維度甚至會發揮得更好,所以...