2008年4月15日 星期二

Learning and Planning

最近繼續想到關於 learning 跟 planning 的差異(跟結合?)我想明白這兩個的「差異」到底在哪裡?因為這影響到我為什麼要採取 learning 或是 planning,而我認為這是釐清 learning 本質的關鍵,也就是說我應該什麼時後來用 learning,怎麼用 learning,learning 又能幫我做到什麼?

我在想,人類遇到問題的時候,到底都是怎麼解決的?雖然直覺上 learning 可以解決所有的問題,不過事實上人類的確是有使用 planning 在解決問題的,那哪些時候是人類會使用 planning 呢?我目前能想到的,是從我對 learning 的理解開始出發,learning 沒辦法做到太長遠的預測,應該說,今天根據 learning 來作決策的話,大部分所做出的決策,其實都只有考慮到很短暫的未來。有的狀況,只看但短暫未來是不足夠的,也許這種時候就需要 planning,但是話說回來了,事實上 learning 也可以解決需要長遠預測的問題,只是就是需要非常豐富的經驗,一點一點的在學習的過程當中,倒推回來,然後來決定現在的策略。

想到這邊,那我就很好奇,說到底,什麼問題都可以用 learning 解決,那 planning 要幹嘛?完全不用了?可是不對阿,因為我們真的有在用到 planning,邱中說:「人類的 learning 是用來累積 planning 所需要的資料庫。」我想這個說法差不多了,只是還有一些點沒點清楚,「既然 learning 就可以解決問題,我們又何必用 learning 來累積 planning 所需要的資料?我們根本不必用到 planning 阿~」我能想到的是:「有的時候,我們已經面對一個問題了,但是我還沒學過這個問題應該怎麼解決,也就是說,其實我還沒學到從目前的狀態怎麼到達目標的的那條 path,就是說我還沒有走過那條 path,所以我還不知道目前要做什麼」,像這種時候,大概我們就會開始進行 planning 的動作,嘗試著把中間這些我們不曾經歷過(或經歷不夠)的狀態給補齊。

我想到,當我們在進行 planning 的過程,每次我們走到一個新狀態,我們在思考下一步的動作的時候,其實也是評估各個可能性,然後選出比較好的解,不過我們怎麼知道哪些動作比較好?我們不知道,我們進行更深一層的搜索,一直重複這個過程,直到我們發現某個動作可以帶領我們到達某個我們熟悉的狀態,然後我們知道那個狀態是好的,這個時候我就會 back trace 回去,幫我這一連串的狀態都加分。

講到這裡,那其實跟 learning 的過程根本就很類似嘛,只是這一連串的動作是在「腦中」虛擬的,模擬的進行。好,也就是說,learning 跟 planning 的差異是,今天我就要解決一個問題了,但是我還沒學過這個問題要怎麼解決,那我就在腦中模擬這個過程,模擬這個「學習的過程」,想到這裡我還蠻怕自己想錯的,因為我竟然認為 planning 跟 learning 本質上是一樣的東西,只是一個沒有真的去作,這跟我以前的想法還差蠻多的,不過我也很開心自己會有新的想法。
先不管對錯吧,讓我繼續往下想。

如果我想到這邊是對的,那 planning 的好處之一,就是你不用付出真正執行動作所需的代價,以我經濟學那部份的腦袋來舉例的話:一個投入經濟市場的人,在經過了大量的經驗以後,他會學到一些策略,然後會賺到很多錢。不過這樣做的缺點就是,你要投入市場,然後用錯誤嘗試的方法來學到經驗,這個過程非常的昂貴,因為你必須「真正的在市場當中採取那些可能會讓你賠錢的行為」,好,那如果一個人對市場,或是說對某個遊戲有基本的認識,可以在腦中模擬(進行推導以預測)所採取的動作對市場的影響,以及市場未來的走向的話,那麼他就不必真的付出這個成本,而可以擁有好的策略,只要他「在腦中學習」就可以了。

那人是不是一直都在學習?我的意思是說,當我們在做 planning 的時候,其實我們也是在學習嘛,但是 planning 似乎是針對某個特定問題的?嘗試往那邊前進的,learning 不一定有什麼 goal,只是想要找到在所有狀態下的最好的策略,這邊 inspire 我一點東西,就是 planning 找到的是不是最好的解?阿,這個先不管,我先寫下之前想到的,關於 learning 是用來解決具有 uncertainty,因為 planning 沒辦法解決這個問題,不過後來我發現這個想法不是完全正確,因為事實上人類也在用 planning 解決很多具有 uncertainty 的問題。我修正過的想法是,當 uncertainty 比較高的時候,learning 就比 planning 更適用,但是後來發現還是不太對,有的時候我們就是需要解決問題,而這個問題可能是有高度隨機性的,但是我們依然可以找出「比較」好的策略不是嗎?頂多就是在這個 planning 的過程當中,我們用了更多的成本去作更多可能的分支的搜索跟評估。這邊 note 一下我的點在於「planning 也可以解決具有不確定性的問題,所以 learning 跟 planning 的關鍵差異不在這邊」好,回到剛剛說的 planning 不一定找到最好解,可能只是足夠好的,其實我真正想要講的是「當我們時間很多的時候,我們總可以用 learning 找到最佳解」。ㄟ,不過這好像也不是完全正確,應該說,如果我用 learning,那我可以用很多時間去把每一個狀態都求好,但是用到 planning 的時機,就是我現在就要解決一個特別的問題,我沒這麼多時間可以去算了,我要「攻克」這個問題,我要攻擊這個點!好!就是剛剛冒出來的新想法,寫這麼多就是希望把自己的思緒過程保留下來,我剛剛想到的新想法是:「planning 的重點在於,我要在有限的時間(僅能付出有限的成本)之內,要解決這個問題,那我就要在短短的時間之內,學習(現實或是模擬)怎麼解決這個問題。也就是,接下來我要探索的,我要評估的狀態,要盡可能的落在我目前的狀態跟我的目標之間,如果我能夠趕快找到一條 path(或是在具有不確定性狀態空間裡面的某一片具有足夠高的 accessibility 的區域)連通我目前的狀態跟我的目標,那我這個 planning 就完成了!」

恩,所以我的系統應該是這樣運作:當我沒有特定目標(或是目標緊急性不高)的時候,我的系統會進行類似隨機的嘗試,過著很正常的生活,不會刻意要求出某些特定狀態跟動作的分數,但是當系統遇到一個就要解決的問題,系統就會嘗試著把心思放在那些比較有可能是答案 path 的狀態上,嘗試把這些 path 的值都補滿(做出足夠好的 evaluate)。

好,我現在釐清 learning 跟 planning 的差異了,那你前面說想弄清楚 leaning 能做什麼,你現在有什麼想法了嗎?我想一想……想到的是任何時候其實都在作 learning,而當遇到需要 planning 的時候,我們就把資源集中到那些特定的狀態上面去作 learning,找出 plan。等等,這樣其實也可以反過來說,怎麼說?也就是說,其實 learning 也可以被看作是「其實我們可以隨時隨地的在做 planning,然後一直把 plan library 存起來,存放在對應的 state 上面。只是當沒有急迫任務的時候,我們隨便找任務來解,當有特殊任務的時候,我們就專心解那個特殊任務。」

OK,那 learning 在這邊有什麼優勢嗎?特別以 reinforcement learning 來講(其實前面講的 learning 也都是講 reinforcement learning 而不是 NN 那種 classify 的問題)最大的好處就是處理不確定性,不過這樣的話,其實 planning 領域應該也有在不確定環境當中進行 planning 的研究,雖然我對 planning 不熟,不過我想應該是有的,所以說學問到最後都是互通的?我覺得好像 reinforcement learning 對於問題的泛用性比較好?我不確定,也許我應該以第一種想法為主,也就是以 reinforcement learning 為主要 paradigm ,然後當遇到問題的時候專注起來解決問題。

這邊想到兩件事寫下來,因為我快睡著了,寫下來免得自己忘記,一個是「如果是第一種 paradigm 的話,那當我遇到問題的時候,我要怎麼去鎖定我該把心思放在哪?我的意思是說,我怎麼去辨識哪些狀態比較可能在我要解決的問題的 path 上面?」初步想到的是把狀態向量拿來當作距離值,然後選一些距離目前狀態跟目標狀態比較近的狀態來評估。另一個問題是「怎麼學會更快?(還真是大哉問XD)」特別想到的是 transfer learning,因為之前接觸到的都是這些,所以想到的也是這些(不過我心中隱隱有個想法是「答案在 approximate reinforcement learning 上面」但是怎麼做到這件事情,目前還是完全沒有想法,因為最直覺的模型好像就是 SLP 或是 MLP,但是這兩個東西都已經被顯示不是很好……)

慢慢想……

好,睡覺,明天早上找要給小帥看的東西……

沒有留言:

張貼留言