顯示具有 AI 標籤的文章。 顯示所有文章
顯示具有 AI 標籤的文章。 顯示所有文章

2008年1月27日 星期日

用automata的path做為memory

最近想整理一下過去修課時散落的心得,就這樣隨時間過去而忘記挺可惜的。

在讀 DFA/NFA 時就有這種感覺,利用 state 的連結方式或某種 path 的展開,可以表示特定記憶狀態,比方若 language 的 size 為有限個,可以把每個 string 以一個 state sequence 表示,於是這些 state sequences 的聯集會成為 state tree,藉此記下整個 language。

這概念運用到 PDA 更有效果,如果想記住 stack 最上層有限個元素,可以在PDA裡加入由2^k個state表示的 tree,記下 stack 裡 top k 元素,像下圖所示:

由 state s 連出的上面那條 path 表示 stack 最上面的元素是 0,下面則表示 1。即使被 pop 掉了,由此延伸,就能同時「多看」幾個 stack 內的元素,比方比較 stack 最上面 3 個和 最下面 3 個是否一樣。由於 PDA 的 state 數是有限個,所以這個做法無法記下無限長的 input string,並且,在建立 state 時就要設計好要記憶多長的內容,比方我們假設最多記 k 個 input,萬一輸入多了一個,這個做法就失效了。所以,在記憶的功能上,這個做法同樣地比不上 Turing Machine,這是先天架構的限制。

以實例來看,FA 和 PDA 都可以判斷部份 ww 類型的字串,只要事先建好長度為 1 ~ k 的 ”state path”,配合 Non-deterministic 的做法 [1],即可判斷。但我們無法處理任意長度的 w,當 |w| > k時,就無法處理了。

由此想法發展, 我想到 Neural network (NN) 用 node、link、link weight 表示memory,類似的概念在 NN 裡已被提過:linking structure 表示 memory,training 就是將資料記到 linking structure 裡,所以 training 的同時也會破壞 memory。

這個想法很有趣,也能類推到人腦運作,不過不管從正反面來看都有用也有問題。可以說新 input 會造成舊的 knowledge (memory) 被破壞,但也不知道是那個 knowledge 被破壞,也可能是重組成新的 knowledge,隱含可以推論出包含舊有功能和新功能的 knowledge。唯一可以確定的是,link structure 的大小決定了記憶容量。在 FA 和 NN 之間,應該還有更深入的關聯性可以思考,或許可以有系統地分析 NN,從而改進 NN 的不足。

ps

做法:

  1. 假設 |w| = i,讀入 i 個 input,並將其「記在」state 裡,舉例來說,s1001表示先前讀到的順序為 1、0、0、1。
  2. 往後讀 i 個 input,若讀入的順序和先前「記住」的順序相同,且讀完 i 個 input 後剛好到字串結尾,Accept。

配合 Non-deterministic 的特性,從起點開始會有 k 條叉路,只要有一條猜對|w|,就能正確判斷。

2007年8月29日 星期三

Hidden Markov Model

最近被迫得讀 Hidden Markov Model (HMM) 相關的內容,我入門的方法是參考下面這三篇:

最近學新東西,愈來愈習慣先看完WikiPedia的介紹再開始,WikiPedia上的介紹通常比書裡寫得還要清楚,真方便。

個人認為最好理解HMM的例子是語音辨識,摘錄Viterbi algorithm裡的一段例子:

For example, in speech-to-text (speech recognition), the acoustic signal is treated as the observed sequence of events, and a string of text is considered to be the “hidden cause” of the acoustic signal. The Viterbi algorithm finds the most likely string of text given the acoustic signal.

每個文字代表一個state,state和state之間有條件機率,稱為state transition,即文字的連續關連性,比方「駱」下個字出現「駝」的機率很高,出現「馬」的機率很低,丟個文章集統計一下就可以得知state transition。主要的差別是這裡假設每個state只會被上個state影響,所以不會直接統計「王八」下個字出現的機率,得先算出「王」到「八」才行。這點和 N-gram 的做法不同,以文字為例子的話,可以將state transition看成是 2-gram 而已。

單純文字之間的關聯已有很多發展空間,比方套用 Markov chain ,算出給定第一個字的情況,第五個字最有可能出現什麼字?或是無論開頭為何,第三個字最有可能出現什麼字?而在語音辨識的例子裡,除了 state (=文字)外,還有 symbol 。

每個 state 會產生一個 symbol ,打個比方,可以想成在數位電路裡的 Finite State Machine 中的 Moore Machine ,跟著一連串的 state 轉換,每個 state 都有伴隨輸出的資訊,但在 HMM 裡,每個 state 不會只輸出一種 symbol ,而是各個 symbol 有對應的輸出機率,所以不只 state 和 state 之間有條件機率, state 和 symbol 之間也有條件機率。在語音辨識的例子裡, symbol 是聲音訊號。畫圖太麻煩了,麻煩各位發揮想像力, HMM 的架構可看成兩層,上層是一個 graph , vertex 表示 state, edge 表示 state 間的條件機率;下層是數排 vertices 每個上層的 vertex 對應到下層一排 vertices ,之間有個有向邊由上層指向下層, edge一樣是條件機率,表示在這個 state 下,會產生的 symbol 機率為何。

那麼 HMM 要解決的問題為何呢?直接從語音辨識來看比較容易理解,我們可以取得一連串的聲音訊號,經過處理後斷成一個個文字的聲音,但我們不知道每個聲音對應到的文字為何?考慮這個例子(喔,注音文的正當使用):

ㄌㄨㄛˋ ㄊㄨㄛˊ ㄏㄨㄟˋ ㄈㄟ

這個例子對應的文字可能是「落鴕會妃」,也可能是「駱駝會飛」,那一個組合較合理,得看文字間的接連出現的機率夠不夠高。在 Markov chain 的例子裡,我們是直接由 state 找出 state sequence,而HMM的例子裡,我們不知道 state 為何,所以稱為 Hidden State ,我們必須由 observation ( symbol sequence ) 來推測原來最有可能的 state sequence。

注意上述的說明都是假設 model 是正確的, model = initial state probability + state transition probability + symbol probability (emission probability)。在 Machine Learning 裡有些方法說明如何找出最有可能的 model ,有空再來看看吧。

2007年4月23日 星期一

1/5 rule self-adaptive under (u+k)-ES (2)

( 寫於2005/12/20 )

想了一種新方法, 測試結果還不錯

將sigma encode到chromosome裡, i.e., chromosome含有Gk, Gs, sigma

select a parent p,
if p.Gk == G
do adaptation (=> revise p.sigma)
p.Gk = p.Gs = 0
fi
p.Gk++

offspring = mutation(p)

if offpsring.fitness BetterThan p.fitness
p.Gs++
fi

如果parent在replacement時被幹掉了也沒差,
一直都留下來的話自然會做到adaptation
( 即parent夠優秀, 才有必要對它調適sigma )

看起來很直接的想法,
但在想出來之前, 一點也不直接, 得跳出幾個迷思才行

1/5 rule self-adaptive under (u+k)-ES

( 寫於2005/12/06 )

前言: 這篇是針對了解ES的人寫的

原本的(1+1)-ES如下

Gs: succesful mutation (offspring is better than parent)
G : sample generations
p = Gs / G
a = (0,1) (recommendation a = 0.8)

sigma = {
sigma / a, if p > 0.2
sigma * a, if p < 0.2
sigma , if p = 0.2
}

經測試結果, 1/5 rule非常有威力, 大大加速了收斂和找到好結果

但在(u+k)-ES時要怎麼套呢? (k > 1)

way1:

count all mutations, if it’s successful, Gs++
p = Gs / (G*k)

way2:

count all successful replacement,
Gs = number of offsprings which is replaced into populations
p = Gs / (G*u)

測試結果, way1比way2好 (還滿合理的),
但都比N step-sized的self-adaptive差

今天終於想到一個解法

way3:

for each generation, count successful mutation, say n,
Gs++ if n/k >= 0.5
p = Gs / G

結果比way1好很多, 而且比N step-sized self-adaptive好

我的解讀:

每一generation的mutation成功與否, 應該是各自判斷, 而非累計,
way1有個盲點, 假設sample 5 generation,
結果1st generation幾乎都成功, 但2~5 generation幾乎都失敗,
但加起來的機率仍 > 0.2怎麼辦? 這個反應已和1st generation的情況差很遠了

所以我認為way3最合理, 而且1/5 rule應該比N step-sized好 (一般來說)

個人認為fitness愈能合理且即時反應在meta-parameters上,
self-adaptive才會有效果, 但要怎麼個合理法, 怎樣才夠即時, 是另一大問題

EC is for optimization or design?

相較於以前不認同不知所云的解,現在我不會排斥用EC解。漸漸覺得傳統嚴僅的AI無法做出超越人腦的產物,雖然人腦運作方式還沒完全破解,但我想類神經網路或演化計算的做法,較接近人腦運作的原理吧。


( 寫於 2005/12/09 )

昨天ypchen說, 如果將design和optimization做比較,
他覺得EC是做design的還較有道理

所謂的物競天擇, 適者生存, 真的有選出最佳種嗎?
還是只是設定了一個門檻, 低於此限的物種就無法延續下去,
所以EC無法拿來做optimization, 只能去掉比較不好的

如果針對這兩者來比較的話,
EC較像用來選design的, 不是做optimization,
我們可以從EC的結果看出一些隱藏的想法

我認同這個觀點, 拿蟑螂來看就可以明白,
蟑螂稱不上很突出的物種, 它之所以能一直存活,
是因為它仍能適應環境的限制

原本我以為EC就是做optimization的,
聽了ypchen這番話後想想, 覺得很有道理,
這個想法更明確地釐清一些現象

我覺得我對EC的態度, 比較像是從中激發一些靈感, 而非用它來解決問題,
以我的個性來說, 即使用EC解決我的問題,
我也不想用一個不知所芸的東西當解決方案,
所以我會把EC當做達到最後目標的過程裡的一個嘗試吧

用Generic Algorithm實作N-Queen後的初步心得

這系列Evolutional Computation的文章是去年修課時寫的,今天收到別人寄信說看到我去年寫的筆記,對他有些幫助,滿高興的。事實上我已忘了把筆記轉到web上這回事,與其讓這些資料繼續躺在web角落,不如放到普及度較高的Blog吧。


( 寫於2005/10/08 )

Evolutionary Computation,
這是門詭異的學門, 耳熟能詳的Generic Algorithm是EC的一種

據ypchen所言, 這個領域的人不知道為什麼, 不愛寫書, 不愛寫paper,
看來神祕的力量都是不留記錄

EC發展20多年, 仍然沒有基本定理, 沒有公式, 沒有證明,
沒有人知道它為什麼對, 只能說些似是而非, 看起來好像有道理的話,
雖然有些中心思想[*1], 但不怎麼數學, 比較像物理化學,
發現一個現象, 再想辦法掰公式, 想辦法解釋它,
如果風行已久, 又沒人推翻它, 就大概是對的吧

簡單的描述一下用EC解N-Queen的一種作法 (以8-Queen為例)
1. 隨機產生100個盤面, 放到Set S裡
ex: 1 2 3 4 5 6 7 8, 4 1 2 5 3 8 7 6, …
這裡的數字表示各個row的queen要放在第幾個column上

2. 挑一個看起來最正確的, 隨機選兩個位置做swap
ex: 4 1 2 5 3 8 7 6 ==(swap 1,8)==> 4 8 2 5 3 1 7 6,
將新盤面加到 S 裡

3. 從 S 裡刪掉看起來最不正確的

4. 重覆step 2, 3到你高興為止
ex: 找到一組解了, 或是執行個100次

結果呢?
要找大量不同的解很困難, 但只要找到一個解到是出乎意料的快

ex: N = 100時, 4 secs, 在第171代找出一組解 (即試了100+171 = 271種可能)
N = 200時, 28 secs, 在第522代找出一組解 (試了621種可能) [*2]

很顯然的, 一般解法 (Backtracking的經典例題),
不可能在可接受的時間內(比方一天)找到一組解

從以上的作法裡, 看得出來”Why it works?”嗎?
只能說冥冥之中自有天意啊

PS

*1
EC的學者認為, 在一堆隨機的候選答案裡, 存在和最終解的關聯性,
只是我們不知道怎麼找出搜尋的規則,
EC的作法, 就是想辦法讓這莫名的規則發生,
使候選答案一步步成長為最終解

拿DP來比喻可能會有所領會,
也就是問題的最佳解取決於子問題的最佳解,
DP有明確的數學規則, EC則否

*2
N = 200時的解, 看看就好

125 142 24 196 45 105 179 140 107 20 49 92 148 165 48 197 78 8 155 80
132 7 153 93 31 72 161 190 103 53 116 40 188 75 111 119 187 69 18 130
77 55 36 106 19 83 65 141 100 89 101 129 34 162 192 28 46 10 169 173
114 32 4 143 95 61 189 193 200 133 96 166 60 22 131 172 152 112 57
146 113 102 90 87 71 15 109 183 170 52 118 174 21 186 137 167 11 67
25 157 33 35 120 2 117 98 44 50 26 104 184 68 177 73 164 9 47 147 64
97 168 1 62 121 38 178 182 13 63 154 145 160 86 199 5 138 29 74 158 3
37 126 191 91 56 181 156 94 115 110 195 39 6 23 27 16 58 81 134 128
76 150 124 180 84 42 171 151 127 41 136 163 144 99 175 17 85 122 194
185 135 70 14 66 59 54 12 82 139 30 43 149 79 176 51 159 88 108 123
198

2006年12月30日 星期六

要成為坦率的人,就是活得坦率點

這是篇廢話心得,只是一個記錄,一種樂趣 :P

對不坦率的人來說,成為坦率的人其實很難,但我已忘了以前的困難點,思考愈來愈直線化,坦率而不魯莽,正是我追求目標。

我覺得我現在的行為,只是記錄轉換過程的一點,我明白過陣子就感受不到以前的困惑,寫這篇文章時,已差不多忘了為何而困惑,無法理解一些朋友為什麼不能活得坦率些,明明他們多少如此期望著。

比方學數學時,一開始就想通的人,很難教會不懂的人,想通的人很難體會卡住的地方。另一方面,自己徹底想通以後,也很難教不懂的人,早已忘了錯誤的思考方式,因而不知怎麼修正。但對想通的人來說,去理解或回憶錯誤的思考,是開倒車的行為,弄不好會把自己的理解弄糟,就像AI裡已運作良好的Learning System,硬灌給它一堆錯誤test case,原本學好的系統,被誤修偏了。

延伸來說,教人或自學就是這一回事,沒有最好和最壞的老師,只有適合自己的老師。

以前我會為無法讓對方理解而困擾,更困擾的是看到對方後來理解了,但卻是用我覺得較糟的說法,或是被我覺得較不怎樣的人說服。理解到最適合和最好的差異後,我就釋懷了,也懂得適時減少無謂的口水,如果發覺我不是適合人選時 :P

比方有位天才一直都拿第一,告訴我努力就會有成果,我也許會回”那是你聰明才能這樣講吧”,總要有些相似度,才能相信對方說的,另一方面,若能不因雙方的差異而看出對方話裡的智慧,就更上一層了。好比從天才口中聽到”努力就會有成果”,不是想”那是因為你聰明”,而是想”再聰明也要努力”,或是”聰明加努力的成果真驚人”,我不夠聰明,因此更要努力。

例子可能舉爛了點,將就看吧 XD

ps. 2001-01-23時寫的期望:

一直覺得能不在意別人想法坦率地表現出自己,
是件美好的事,
不在意別人眼光而活,
可是, 若不在意別人想法, 是否算是我行我素,
只能說是個自私自利的人?
要不太遷就別人, 又不自私, 真難平衡

以前覺得自己太自私, 現在覺得自己太遷就別人,
不夠坦率( 雖說….自私時也沒坦率到那裡去 ^^||| )

一直以來的心目中想要的生活方式,
和朋友聊聊後, 他說”那不就是令狐沖”嗎?
對哦, 挺確, 沒想到無形我竟然是想成為像這樣個性的人? :P

微妙

如同李開復提的小故事,智慧從經驗累積來的,不同領域有不同智慧,藉由想辦國中同學會的機會,打開我沉封已久的記憶,看了6年前寫的一些心情文章,發現男女感情方面沒長進多少,畢竟之後都沒經驗。

上次家族聚餐,在台積電上班的表姊夫一直和我說,你這樣不行啊,愛情學分沒修到,大學不算畢業,還說要不要叫我表姊介紹幾個,我則是回答,那只好讓它當掉吧,反正來不及了 XD

不過 經驗/智慧 是可以轉移的,我覺得我能判斷該怎麼做較好,剩下的也是最難的,就是真正做下去,至少比以前什麼都不懂好,可以撞少一點壁。套AI的說法,這是有critic的Reinforcement Learning,但critic只會給 yes/no ,沒有具體的”how to change”,比不上有teacher的Supervised Learning。大概不少人會直搖頭,覺得這樣不行吧,太理性地看待這些事,這算是我的努力方式吧 :P

btw,我覺得我天生不是有自信或有勇氣的人,剛好有些契機,讓我敢一再練習,漸漸的就有自信,有勇氣繼續加強自信和勇氣。比方原本感情閉俗度可能是100%,po了篇文章可能就減為99%,不過我想最大的問題,還是有其它事想做,所以一點時間都不試,自然就一點機會都沒有,也許等到有時間想做時,已沒有機會了,嗯,如同我看待那些成天工作,期待著退休再享樂的人。

人生的抉擇一直都很微妙,想成為超脫一切的人,得注意要成為真正的身心超脫,而不是經不起考驗的嘴炮。另一方面,只要每個時期都過得很充實,自然就不會為當時的抉擇和錯過的機會而後悔吧。若要說我的人生有什麼鐵則,就是不想後悔,那是為遺憾的過去時間,而浪費現在的時間。