神經網絡焦點問題的解決方案

鏈接:http://blog.sina.com.cn/s/blog_4d2f6cf201000cjx.html

神經網絡是一個非線性迴歸模型。給定樣本,不同的網絡結構決定了它的泛化性能。一般來說,網絡結構不能過於複雜,因爲複雜的網絡結構意味着要估計更多的參數,因而模型的精度變差。控制模型複雜程度,可採用選擇少的神經元數量或者對係數的收縮。係數收縮的思想來自嶺迴歸(ridge regression)就是在誤差平方和的目標函數後面再加一項對絕對值過高的係數的懲罰。



min S(β)=sum[yi-f(xi,β)]^2 + c * R(β)


R(β)=sum βj^2 或者 R(β)=sum βj^2/(1+βj^2) ,罰函數不包括截距項。


1.【討論】如何選擇訓練集和測試集數據?
一般需要將樣本分成獨立的三部分訓練集(train set),驗證集(validation set)和測試集(test set)。其中訓練集用來估計模型,驗證集用來確定網絡結構或者控制模型複雜程度的參數,而測試集則檢驗最終選擇最優的模型的性能如何。一個典型的劃分是訓練集佔總樣本的50%,而其它各佔25%,三部分都是從樣本中隨機抽取。
樣本少的時候,上面的劃分就不合適了。常用的是留少部分做測試集。然後對其餘N個樣本採用K折交叉驗證法。就是將樣本打亂,然後均勻分成K份,輪流選擇其中K-1份訓練,剩餘的一份做驗證,計算預測誤差平方和,最後把K次的預測誤差平方和再做平均作爲選擇最優模型結構的依據。特別的K取N,就是留一法(leave one out)。


2.【討論】數據歸一化問題
數據歸一化屬於數據的預處理。因爲sigmoid函數根據不同的變換,輸出在0到1或者-1到1之間,因此如果不做歸一,就會出現樣本輸出超出神經網絡輸出的範圍。選擇最大的值max和最小值min,做如下變換
x=(x-min)/(max-min)就是歸一化。
需要注意的是max和min不應該直接選擇爲x中的最大值和最小值。原因是樣本只是有限的觀測,有可能還有更大或者更小的觀測,因此合適的選擇應該max選取xmax大一些和min比xmin小一些的。
歸一化並不總是合適的預處理,因爲它不能使分佈不對稱的樣本變得更對稱一些,標準化要好一些。另外,有時候主成分分析也能起到降維的作用。


3.【原創】關於目標訓練誤差的設置以及LM訓練算法
關於目標訓練的誤差值,我覺得不應該人爲地設定誤差平方和目標,設定太小的目標會出現過度擬合。倒是可以設定本次權值與上次權值的平方和距離除以所有的權值數目,這個指標反映了收斂性。然後多算幾次,以避免局部收斂,保留驗證集誤差平方和最小的權值作爲最終的權值。


4.【討論】神經元數量的選擇問題
神經元數量的選擇有很多經驗法則,但都沒有理論的依據,有時好用有時好用。建議採用開篇介紹的嶺迴歸方法,選擇較多的神經元數目。有的朋友可能擔心,一般神經元數目都是寧缺勿濫,這樣行嗎?即使選擇了過多的數目,通過選擇懲罰係數c,它會使過多的權值收縮到0。問題是如何選擇懲罰係數,方法是根據交叉驗證法選擇在驗證集預測誤差平方和最小的懲罰係數。


5.【求助】用遺傳算法優化神經網絡
遺傳算法是一個通用的優化算法,通常是在面對一個複雜的問題,沒有特定的高效的優化算法可用的時候才用它。神經網絡本來就慢,再用遺傳算法更是慢上加慢。採用嶺迴歸辦法,遺傳算法根本沒有必要。遺傳算法並不是化腐朽爲神奇的萬能靈藥。技術的使用效果不取決於技術的高級程度和複雜程度,而取決於各種技術和問題的針對性和緊密性。


6.【討論】如何解決泛化問題
因爲模型參數是根據訓練集估計的,泛化能力是估計模型在訓練集以外的樣本的預測能力。只要選擇足夠複雜的結構,神經網絡可以任意地降低訓練誤差,但泛化能力很差。泛化能力的解決關鍵在於選擇合適的模型評價函數,合適的模型評價函數能夠反映模型偏差和方差的折衷。常用的R square 擬合優度不是一個好的評價函數,更好的是
AIC=-2log(L(x,β^))+2d
BIC=-2log(L(x,β^))+dlogN
其中log(L(x,β^))是對數似然密度,d是有效參數個數,N爲訓練樣本數
對於神經網絡,有效參數個數爲
d=sum ai/(ai+c)
其中ai是Hessian矩陣(誤差平方和目標函數對參數二次導數)的特徵值。
另一個辦法就是交叉驗證,前文已經討論,不再重複。交叉驗證適用於有效參數難以定義的模型,雖然需要更多的計算量,但比較穩健。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章