今天和明天早上要參加兩場會議,原定寫鐵人賽的文章時間不太夠。因此只能擱著到六日再補充了,和訂閱的大家說聲抱歉。不過這次在寫這三十天文章,讓我有個想法之後把它統整起來,再做更重點式和實例的文章系列更新,這次的風格還是先定位成想到什麼就說什麼吧哈哈,如果大家有什麼問題想要問,也歡迎討論囉。
一種好像假設文章很多人讀的錯覺哈哈,自我感覺良好中。
歸納偏置是一個廣泛存在於機器學習中的一個概念,不僅僅只在類神經網路領域,簡而言之,機器學習的演算法中我們假設演算法能在訓練過程中越來越接近正確的結果,然而樣本中勢必會沒有包含到未知的情況,因此對於未知的情況我們只能給予一個偏置,這裡會介紹兩個歸納偏置的概念:
在做類神經網路模型的訓練時,假設我們用一個較簡單的結構就能訓練出一個好的模型,則我們傾向於認為他會比一個複雜的模型來的好,舉例來說,我們在之前提到的輻狀基底函數類神經網路,我們如果挑了十個中心點就能訓練出一個很不錯的模型,那為什麼要挑一個一百個中心點訓練出來表現一樣的模型呢?
這就是一種歸納偏置,也就是傾向於更用力地從更少資料中得到顯著歸納結果。
因此,我們必須要注意到我們有這個心態,然後抱持這個心態在實務應用場景中去驗證,我為什麼這樣說呢?因為當你把類神經網路應用在時間序列上面,隨著時間前進你的資料內涵的複雜度可能會越來越複雜,這個時候你怎麼衡量小特徵數呢?你以往訓練過程中都用十個中心點,會不會從某一天開始你需要用二十個中心點呢?這點我們會在未來探討動態類神經網路的時候談到。
我自己的心得是這樣,資料的一些統計特徵可以做為你衡量模型複雜度的參考,例如當你在做金融資料的時候,如過市場整體波動沒有很大,你可以考量對你的模型嚴苛一些,希望他用更少的複雜度來得到一些結果,如果市場呈現一個混亂無序的狀況,那你可以考量對你的模型有彈性一些,讓他在更大的複雜度來做訓練,或者是說你可以再後退一步,讓你模型的複雜度隨著訓練過程在做更動,也就是有一種 Dropout 的味道,也就是動態類神經網路。
當我們拿一筆樣本資料去訓練出一個類神經網路模型,如果我們隨後拿著一筆測試資料,這筆測試資料與某一筆樣本十分接近,然後將他丟入模型,儘管這筆測試資料在樣本中不存在,但是由於他與某一筆訓練樣本十分接近,所以計算結果也會十分接近該訓練樣本的輸出結果,這就是所謂的最近鄰居的歸納偏置。
這種歸納偏置指的就是,當一筆新的資料與某樣本極其相似,則對應的輸出結果也會與樣本輸出十分接近。
這個心態看起來也沒什麼問題,但是當你在處理時間序列資料的時候就要特別小心,如果你不了解你的資料那還好,如果你了解你的資料,舉例來說,你曾將黃金 1200 與白銀 20 的這組價格資料拿去訓過一個模型,然後預測三小時候的黃金價格好了,假設你預測 1250 元,然後短暫過了一下時間之後,此時價格正巧來到黃金 1149 白銀 21 的價位,很接近之前的情況,你會認為接下來在三小時,黃金價格會和你當初預測的價格一樣接近 1250 嗎?
這就是最近鄰居這個歸納偏置概念在時間序列上的問題,你或許心裡已經有答案怎麼處理了,例如我的模型不可能用這麼久會重新訓練,或是我模型還會考慮更多資料,避免無意義的相似情景發生,或是模型輸入可能不會直接放價格而是放價格變動等,這個未來我們會再來討論。
我常常認為,很多人將類神經網路應用在各種應用場景中之所以沒有好的結果,就是因為他可惜只專注於技術原理,當你在探討各種類神經網路的技術原理的時候,他們共同根基的假設你就會察覺不到,也就是各種歸納偏置的概念,但是死硬記著這些概念也不是辦法,所以最好的方法就是直接讓你提刀上戰場,去實際將模型落實在一個應用場景,並且持續去追蹤你的模型。