iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 12
1

今日要來進入鐵人賽第二部分,也就是粒子群演算法的部分。在接下來十天內除了會探討啟發式演算法之外,也會希望漸漸讓讀者們建立一個「參數空間」的觀念,當你習慣用一種參數調整方式,例如常見的倒傳播,這的確不錯,在處理一些過往就經常使用類神經網路的領域應該沒什麼問題,但是當你想把它應用到時間序列中,首當其衝的就是你不能用交叉驗證的方式建立穩健性(這個部分的解釋是我跳掉的DAY5內容,擇日補回來,跪),所以你很有可能會和我一樣選擇用啟發式演算法來優化參數。

參數空間的概念意思是,當你把越多的參數丟到參數空間去做優化,這個空間會越複雜,因此你需要抉擇優化是否要分步驟,例如我先優化哪幾個參數,但是這樣子你就要清楚每個參數之間是否會交互作用。舉例來說,RBFNN 除了中心點的選擇之外,你還有輸出層的權重可以一併優化。但是在之前我有提到,我大部分都是把輸出層權重設定固定值,這就是我在實務上對我要解決的問題,知道如果把輸出層權重也拿進來優化,參數空間會太複雜,訓練不起來。

參數空間裡面每一組參數對應的配適值(或誤差值)也會有所不同,可能在某一個小區塊中他們的配飾值都非常好,也可能在某一個特殊點位置可以得到最佳值,但是稍微變動一下最佳值可能就沒了。

好我知道很多人看我越來越多的廢話已經不太想理我了哈哈,趕緊進正題。


啟發式搜尋

啟發式搜尋,或是稱作啟發式搜索或啟發式演算法,是一種特殊的演算法,這種演算法專門用於做「解」的搜尋,如果你曾經學過微積分,啟發式搜尋有點像是牛頓法,透過一個給定步驟去找到一個方程式的根的感覺。同樣道理,用在類神經網路中,我們會設定一個誤差函數,透過誤差函數給予的誤差值,來做為參數調整的參考。

我們用機器人來舉例,來理解參數空間和配適值(fitness function)的概念。

譬如一個在建築物裡的機器人,應該盡可能遠離牆面做走路的動作,所以當他要進行走路動作的時候,就會先掃描四周,找出一個前方障礙物距離,這個距離越大,則機器人往這個方向走的機會越高:

啟發式搜尋-1

因此機器人的走路方位選擇,就是他的「參數空間」,而對應的「前方障礙物距離」就是他的配適值,如果配適值越高,那代表他往這個方位前進越不會繞遠路,未來也越不需要轉頭調整方位,可以一直直行。

啟發式搜尋-2

好,現在我們回到類神經網路,也就是回到 RBFNN 的主題,RBFNN 我們需要對資料選取中心點,用我們在以前討論過的例子,現在我們在黃金與白銀價格中挑了紫色與綠色兩個中心點,而黃金與白銀價格的區間就是我們的「參數空間」,假設我們透過 RBFNN 訓練想要預測下一個時點的黃金價格,然後我們類神經網路就只有一個中心點,我們訓練兩組模型,分別是紫色中心點與綠色中心點,我們發現紫色中心點對於下一個時點的黃金價格預測準確度,比綠色中心點高:

啟發式搜尋-4

啟發式搜尋的重點呢,就是我們會藉由紫色中心和綠色中心的匹配程度,去尋找「最佳的中心」,我們發現紫色中心好像比較容易匹配,因此我們在訓練過程中就會更去挖掘紫色中心附近的訊息:

啟發式搜尋-3

結果呢,我們可能發現比紫色中心更能匹配價格趨勢的中心點,例如橘色中心,而藍色中心就普通:

啟發式搜尋-4

好,你現在應該猜的到下一步是什麼了,就是在橘色中心點附近去尋找囉!

這就是所謂的元啟發式演算法,透過每一步去匹配是否是真的解呢?如果得到一個比之前更接近真的解(以我們的例子來說,真正的解就是能達到價格趨勢匹配度最高100%)我們就更靠近那裏的參數去搜尋,基本上如果參數空間越不複雜,這個方法會越好,反之如果參數空間越複雜,你可能會收斂到奇怪的地方。

粒子群演算法

有人會問我說,粒子群演算法、模擬退火、蟻群、蝙蝠、煙火....(還有一堆)到底哪個啟發式演算法是最好的呢?這個問題我覺得沒有意義,一方面是每個啟發式演算法有他擅長的題型(例如蟻群用在路徑問題上)我會推薦粒子群演算法的原因,是他比較不會收斂到特殊解,不會因為參數小幅震動就導致輸出結果大相逕庭,但是真的不會嗎?這我也不能打包票,總而言之我們先來看吧。

假設我們現在有一筆初始化的參數好了,例如類神經網路裡面某一層的權重值,粒子群演算法假設這筆參數、這群權重值,就像一個在參數空間中的粒子一樣:

啟發式搜尋-5

由於我們想再找出一個最佳權重,讓類神經網路的輸出值與標籤值能最匹配,所以我們在整個「權重參數空間」中撒下一堆「粒子」,也就是同時跑好多組不同權重的類神經網路,這些不同的權重就組成粒子群:

啟發式搜尋-6

這些粒子對應的權重,會計算出一個輸出值,然後我們可以透過輸出值與標籤值的匹配程度(例如用 MSE )來得到每個粒子的表現情況,例如有些粒子表現很好,有些粒子表現不好。

按照前面的理論,我們會希望更加著重於表現好的粒子周圍去搜尋,可能表現好的粒子(權重)附近的位置,也會表現不錯,因此每個粒子呢,會有他們自己的一個移動速度,然後往表現最好的粒子前進:

啟發式搜尋-7

然而,如果粒子群中最好的那個粒子一直在變來變去,那這樣子每顆粒子不就疲於奔命,一直左右左右浪費時間嗎?因此粒子移動的方向除了往粒子群中最好的方向前進,他也要好好把握自己過去路徑上曾經搜尋過最好的位置,但是一顆粒子怎麼可能同時向兩個不同方向前進呢?於是我們就需要來計算一個粒子移動的方位,這個方位是同時它需要權衡粒子群整群最佳解的位置之外,還要往自己粒子過去最好的位置做綜合考量:

啟發式搜尋-8

如果你仔細看上圖,你會發現紫色向量跑過頭啦!因此實際上粒子群演算法中,權衡自己過去與未來是有一個權重因子,而且如果你有設定最大迭代次數,還會多設定一個當越接近最大迭代次數時,會越被粒子群中最佳解給吸走,更優先去搜尋群最佳解附近有沒有更好的解,因為迭代次數都要沒了,當然要趕緊搜尋。

而最終輸出就是 Group-Best 的粒子點位置,也就對應到了一組權重啦!


慚愧,還是沒有提供程式碼,後續還是以分享觀念優先囉,大家有問題或想要多知道的部分歡迎留言,因為針對一個主題做分享腦袋會閃過太多東西,還請見諒有些東西沒有提到太深太細。


上一篇
DAY 10 - 第一部分總結與延伸思考
下一篇
DAY 12 - 以粒子群演算法初始化網路權重
系列文
類神經網路搭配啟發式演算法於時間序列之應用27
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言