神經網路訓練時對輸入有什麼特別的要求嗎?
請教各位大神,神經網路進行回歸分析,除了數據要預先清洗以外,在以下方面有沒有特別的限制。假設一層隱含層激活函數為tanh,輸出層為linear。那麼
(1)輸入特徵之間的相關性是否會影響到網路的性能,導致比起特徵間獨立的情況下性能要差?(特徵相關性)(2)原問題:輸入樣不大會對網路訓練造成什麼樣的影響?(樣本間相關性)按@藍白 的建議,修改為數據的散布程度和分布特點會對訓練造成什麼樣的影響?
比如說我有兩個特徵 一個回歸輸出。其中一個實例是(5,3,6)另外一個是(5.1,3.3,6.1)。那麼這兩個實例中,對於神經網路來說是否有一者冗餘?(3)數據順序打亂與不打亂對於訓練的影響?(4)輸入數據不進行歸一化會有什麼樣的影響。請各位大神賜教!
1. 輸入特徵最好不相關。如果某些維輸入的相關性太強,那麼網路中與這些輸入神經元相連的權重實際上起到的作用就是相似的,訓練網路時花在調整這些權重之間關係上的力氣就白費了。
2. 上面說的輸入的相關是指所有訓練數據某些維度上相關,而不是說某些訓練數據在所有維度上相關。在你舉的例子中,如果相似數據都非常接近,那麼這些數據其實是冗餘的,可以去掉一部分;如果相似數據之間的方差足夠大,那麼這種方差就能增強模型的魯棒性。
3. 如果你不使用minibatch,那麼沒有影響。
4. 需要歸一化,否則訓練過程中容易遇到數值上的困難。必須歸一化,不歸一化不但效果會差,而且隨時可能爆掉。打亂之後效果會好。==以上和數據量關係不大,都要做====以下和數據量有關==樣本之間的相關性不怕,特別是數據量大的時候。
輸入特徵之間最好還是不要相關,但是如果數據量夠大,問題也不大。
作為一個曾經研究神經網路並且跑過很過很多UCI數據集研究僧,感覺可以給題主分享一些實驗的經驗。首先分析一下你的問題,從題主的描述中,我感覺題主問題兩個方面;
1,數據預處理:相關性預處理,數據量綱預處理
2,訓練方法:
1.1 數據量綱可以理解為數據在相應度量單位下的數值;比如溫度和高度等度量單位,單位分別為攝氏度和厘米;如果溫度度量的是人的體溫,那麼正常人類的範圍是從34-42度之間了;如果高度度量人的高度,那麼範圍會從30cm—230cm之間了,如果剔除單位,單純的從數據上來說,很明顯身高數據的幅值範圍要大而且其數值也更大,所以在相同的處理下,同事乘除同一個係數,身高對於結果的影響要大一些。當然你可以說溫度乘以一個大的係數,身高乘以一個小的係數,這種方式來平衡或者抵消量綱的影響,這個確實正確,最小二乘回歸分析也是這麼處理的,但是這個增加了模型訓練的難度,而且大的係數很容易導致過擬合。
其次從面對問題的角度來分析,如果你預測一個人會不會發燒的問題,那麼這個時候溫度對於結果和影響肯定大於身高,即溫度比身高更重要,甚至可以認為身高對於結果是無用變數可以刪除;如果你預測一個人的籃球水平,那麼這時身高就比溫度更重要,以上兩種問題中對於溫度和身高的分析都是基於我們的常識經驗,其實也可以看做一種機理分析,即我們已經先驗地知道了問題的因果關係,可以直觀的判定變數的作用;然而現實中我們遇到的問題,往往很難做機理分析;更通常的做法是我們通過觀察測定了一些對於結果有影響的變數,至於那個變數對於結果是至關重要的我們往往不能夠通過經驗或者機理分析直接給出,那麼這個時候最好的做法就是認為所有變數同樣重要,那麼體現變數一樣重要的普遍做法就是去除量綱,即歸一化處理到相同或相近的數值和幅值範圍,通常的方法有最大最小值歸一化和方差歸一化兩種,最大最小值歸一化把數據歸一化到[0,1]或[-1,1]區間,方差歸一化更傾向於通過變數自身的離散程度(方差)來自身歸一化,此種歸一化後的數據範圍通常不是[0 ,1]或[-1,1]區間。
1.2 數據相關性,數據相關通常指不同變數(度量維度)之間聯繫的程度,例如人的身高和體重具有很大的相關性,一般身高高的體重都大;還有就是顏值和受歡迎程度也是相關的;那麼如果相關性比較大的兩個變數同時出現在數據中,會造成變數的重複使用和數據冗餘,假設我們要預測某個省份的gdp,那麼通常會在統計局網站中找一些類似人口,用電量,教育投入,高等教育人口比例,消費水平等類似的數據,那麼我們假設假設教育投入決定了高等人口比例,即二者之間有因果關係,那麼此時如果把上述變數不加處理都扔進去模型中,就等價於教育投入這個變數使用的兩次,不僅影響結果,還會增加了計算量
。解決數據相關性問題主要是先計算數據變數間的相關係數,把相關係數高的兩個變數提出一個,或者用萬金油PCA,不僅能夠消除相關性還能夠降低維度。
2 訓練方法,其實主要指訓練過程中的一些trick,網路結構,神經元類型,學習方法,學習率,迭代次數,收斂精度,學習批量,亂序操作,權值初始值,權值懲罰項,權值約束,稀疏性,當然還有很重要的數據量;每個參數的設置都會影響你最終的訓練時間和結果,所有參數都設置對了結果不一定好,但是有一個參數設置不好結果一定不好,神經網路就是這麼任性的。一個好的模型和參數組合,在不進行數據處理時也可以得到不錯的結果;而且同樣的模型偶爾也會出現使用原始數據的結果反而比預處理後的結果要好,當然只是偶爾;所以從數據到結果是一個系統,哪一個環節出了問題都得不到很好的結果;如果某一個環節表現特別優異可以在一定程度上彌補其它環節的不足。
上面扯了這麼多,來正面回答一下題主的問題。
相關性問題:相關性問題是一個無確定解的問題,特徵之間的相關性是否會影響到網路的性能,導致比起特徵間獨立的情況下性能要差。對於神經網路而言,數據的相關性會影響到網路性能,但是如果訓練方法得當,參數選取正確其結果不一定比特徵獨立差,其次由於神經網路強大的擬合能力,有的數據集在不去除相關性和不使用pca降維時結果要更好,這個要看數據的特點和質量。問題中題主用一個實例是(5,3,6)另外一個是(5.1,3.3,6.1)來描述數據相關性有些不太恰當,從例子來看感覺題主描述的應該是數據分布的密集讀或者散布程度;數據異常點的越少,散布越均勻,數據量越大,越能夠提高準確性;相反則會導致不好的結果。由於神經網路通常使用監督引導學習,經典的BP演算法就是通過預測殘差來引導網路學習的,如果數據分布不均勻,那麼數據相對密集的地方會產出更多的引導學習,即網路更偏向數據密集的地方擬合,這時對於非密集處的數據就會產生壞的影響,可以理解成拔河,數據密集且多的地方能夠把神經網路「拉」(引導)過來。那麼解決這種問題最好的方法可以考慮一下svm,如果題主堅持神經網路模型,那麼可以嘗試增大數據量,通過複製或者插值增加數據相對稀少位置的數據,也可以刪除一部分密集處的數據。
歸一化的問題:也是一個無固定解的問題;就個人的經驗而言大部分情況下歸一化比不歸一化要好,但是也存在一些特別的數據集,不歸一化的情況下反而結果會更好;至於兩種歸一化方法感覺旗鼓相當了,從經驗來說基於最大最小值的[0,1]歸一化要稍微好一些。但是圖像數據一定要歸一化,不歸一化結果很爛。所以最終是否歸一化,選擇哪種歸一化方法需要題主用實驗來驗證你的數據適合哪種情況。
是否對於數據進行亂序操作,要看題主使用的是哪種學習方法了,目前主要分為全批量學習(整個數據集的),子批量學習(mini-batch學習),增量學習(一個一個的學習),題主要是使用全批量學習,數據是否亂序基本沒有影響,其收斂曲線較平滑,可以使用稍大一些的學習率;要是使用增量學習,數據亂序會影響結果,這個影響有不確定性,因為增量學習本身就會波動較大,異常值對於此種結果有很大的影響,而且增量學習更容易受到參數設置的影響,所以結果會有更大的不確定性,為了消除波動的影響,建議使用較小的學習率;子批量學習方法,介於增量和全批量學習之間,其原理類似通過子採樣來估計整體,建議使用此種訓練方法,大多數數據集此種方法能夠在最小的訓練時間下達到收斂精度,但是不絕對。
通過以上分析,感覺題主要罵娘了,說了半天和沒說一樣,那個情況都是不絕對,我只能說臣妾冤枉啊,之前在UCI數據上刷數據的時候,被害慘了,只能各種試驗,找到每個數據集最適合的處理方法。神經網路是一個系統的工程,之前深度神經網路的學習很多情況下依靠參數的設置,其實就是依靠trick和經驗,之前聽過一個說法;一個學習幾天的本科生和一個研究神經網路的教授都可以用神經網路來解決一個問題,那麼這個不同就在於經驗和感覺上,可能本科生要得到好的結果要通過蠻力實驗更多的次數。感覺這也是神經網路的魅力所在,使用網路模型很簡單,只要有數據,不需要機理分析,就可以訓練模型,但是模型結果的好壞則需要很多的trick,這也是神經網路簡單,同時也不簡單的地方了。
最後要多啰嗦一句,從解決問題的角度,感覺題主應該首先基於機理分析,分析一下輸入數據,然後去尋找適合的模型,有時候非線性回歸和偏最小二乘就可以解決問題;此外簡單的模型在修改的時候更加好控制,也具有更大的靈活性;若是其他模型效果都不太理想,在考慮神經網路,因為神經網路多少有些黑箱模型,只要數據量足夠,結果不會太差,多少有些暴力。
以上分析均為個人理解,如有遺漏,錯誤還望大家多多交流,指正,以便共同學習!!
推薦閱讀:
※神經網路研究與應用這塊用python好還是matlab?
※訓練網路時為什麼會出現loss逐漸增大的情況?
※學習matlab人工神經網路,哪些書籍比較好?
※MATLAB神經網路工具箱中newcf 和newff的區別?
※深度學習cnn圖片預處理方式,為什麼乘以0.0167?