實質上鼓勵一下吧

前面已經交代了類神經網路的倒傳遞網路程式碼,也就是說類神經網路是一個必須教他正確的輸入輸出範例,然後它會依照曾經學習過的範例提出新範例的評估值,理論上範例越多就越精確。實際在應用的時候如果學習範例只有在一百個以內,基本上並不會有任何問題,但是只要超過一定的數量,網路的學習速率、層數、寬度等的設置就變得相當重要。

學習速率在範例少的時候通常可以設置成書上所寫的0-10之間,但是實際測試,範例很多的時候0-10之間的學習速率卻容易產生偏離的結果,或許是完全不會收斂的狀況,必須將數值設定得很小才有收斂的機會。

根據書上的說法,網路的層數代表的是精密度,不如將它想成網路的層數代表的是可以解決更複雜的問題,如果層數不夠,複雜的問題將沒有辦法由網路中得到解答也就是說需要越精確的答案,就必須要有比較多的隱藏層層數,一般的問題都可以在一或兩層隱藏層得到滿意的答案

而網路的寬度,則代表了能夠容許的差異性範例數量,也就是說如果差異性大的範例很多,就必須要加大網路的寬度。也就是說越複雜的案例,就需要比較寬的隱藏層來解決。

這三個數值其實都還好解決,可以透過程式讓網路不斷地修正,並且重新學習而得,只要電腦速度夠快就有找到答案的一天。

類神經網路雖然在一開始的尋找最佳化網路架構需要很多的時間,但是一旦確定找到,就可以將當時的網路儲存起來,對於新的案例只要用新的最佳化網路架構與數值,讓他學習新的案例就可以得到新的最佳化架構,當然預留成長空間是必要的。如此新的案例學習起來就不會使用太多的時間。

因為需要嘗試錯誤,所以建議一開始使用一層隱藏層,並且精密度不要設定得太精准,用程式自動去增加隱藏層寬度,去找到合適的隱藏層寬度,得到適合的寬度後,再去增加隱藏層數,這樣可以減少找到合適隱藏層寬度的時間。

如果是自己寫程式,重點就是別拿太複雜的案例來測試,先用XOR、七節顯示器的簡單例子來測試才能很快的找到程式的問題。

而對於複雜的案例,例如股票市場預測,需要的數據相當的多。以台灣股市預測指數走向為例,除了歷史記錄以外,各類股的指數、外國的指數、N日線……都應該納入輸入的數值之中,這樣才能夠真的體現出各項數據的交互作用,甚至於如果覺得數值跟節氣有關係,那麼還應該將農民曆也納入。

要特別注意的是,你所挑選的單一數值,必須確定它是連續的,也就是只代表一個意義,不能說1=A,2=B,3=C這樣的數值,而必須將這樣的代碼表分成多個輸入或輸出才對,如果以輸出來解釋,也就是變成A有50%的可能性,B有20%的可能性。

很久以前,漠哥曾經寫過電子儀器自動量測系統,或許將類神經網路應用在這個地方會得到不錯的結果,應用需要靠想像,而數值的採樣需要靠經驗,這一篇指出了應用時的大方向。enjoy

創作者介紹
創作者 漠哥 的頭像
漠哥

人生四十宅開始 二號宅

漠哥 發表在 痞客邦 留言(1) 人氣()


留言列表 (1)

發表留言
  • 悄悄話