乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      nnetInfo文章瀏覽

       昵稱31750011 2016-03-28

             用神經(jīng)網(wǎng)絡的小伙伴都知道,數(shù)據(jù)需要做歸一化,但是為什么要做歸一化,這個問題一直模梭兩可,網(wǎng)上也沒有較全的回答,小編花費了一段時間,作了一些研究,給大家仔細分析分析,為什么要做歸一化:

       

      1.數(shù)值問題。

             無容置疑,歸一化的確可以避免一些不必要的數(shù)值問題。輸入變量的數(shù)量級未致于會引起數(shù)值問題吧,但其實要引起也并不是那么困難。因為tansig的非線性區(qū)間大約在[-1.7,1.7]。意味著要使神經(jīng)元有效,tansig( w1*x1 w2*x2 b) 里的 w1*x1 w2*x2 b 數(shù)量級應該在 1 (1.7所在的數(shù)量級)左右。這時輸入較大,就意味著權(quán)值必須較小,一個較大,一個較小,兩者相乘,就引起數(shù)值問題了。

             假如你的輸入是421,你也許認為,這并不是一個太大的數(shù),但因為有效權(quán)值大概會在1/421左右,例如0.00243,那么,在matlab里輸入  421*0.00243 == 0.421*2.43

                                                               

      可以看到兩者不相等了,說明已經(jīng)引起數(shù)值問題了。

       

      2.求解需要

             我們建立了神經(jīng)網(wǎng)絡模型后,只要找到的解足夠好,我們的網(wǎng)絡就能夠正確的預測了。在訓練前我們將數(shù)據(jù)歸一化,說明數(shù)據(jù)歸是為了更方便的求解。

       

      那么,究竟給求解帶來了什么方便呢?

               這個問題不能一概而論,不同的算法,在歸一化中得到的好處各不相同。假若有一個很牛B的求解算法,那完全用不著歸一化,不過目前大部算法,都比較需要歸一化,特別是常用的梯度下降法(或梯度下降的衍生方法),歸一化和不歸一化,對梯度下降法的影響非常大。不同的算法,對歸一化的依賴程序不同,例如列文伯格-馬跨特算法(matlab工具箱的trainlm法)對歸一化的依賴就沒有梯度下降法(matlab里的traingd)那么強烈。

               既然不同的算法對歸一化有不同的理由,篇幅有限,本文就僅以梯度下降法舉例。

              重溫一下梯度法,梯度法一般初始化一個初始解,然后求梯度,再用新解=舊解-梯度*學習率 的方式來迭代更新解。直到滿足終止迭代條件,退出循環(huán)。

       

      先看歸一化對初始化的好處:

      (1)初始化

              過初始化的同學會發(fā)現(xiàn),輸入數(shù)據(jù)的范圍會影響我們初始化的效果。例如,某個神經(jīng)元的值為tansig(w1*x1 w2*x2 b),由于tansig函數(shù)只有在[-1.7,1.7]的范圍才有較好的非線性,所以w1*x1 w2*x2 b的取值范圍就要與 [-1.7,1.7]有交集(實際上需要更細膩的條件),這個神經(jīng)元才能利用到非線性部分。

              我們希望初始化的時候,就把每個神經(jīng)元初始化成有效的狀態(tài),所以,需要知道w1*x1 w2*x2 b的取值范圍,也就需要知道輸入輸出數(shù)據(jù)的范圍。

              輸入數(shù)據(jù)的范圍對初始化的影響是無法避免的,一般討論初始化方法時,我們都假設它的范圍就是[0,1]或者[-1,1],這樣討論起來會方便很多。就這樣,若果數(shù)據(jù)已經(jīng)歸一化的話,能給初始化模塊帶來更簡便,清晰的處理思路。

             注:matlab工具箱在初始化權(quán)值閾值的時候,會考慮數(shù)據(jù)的范圍,所以,即使你的數(shù)據(jù)沒歸一化,也不會影響matlab工具箱的初始化

       

      (2)梯度

              以輸入-隱層-輸出這樣的三層BP為例,我們知道對于輸入-隱層權(quán)值的梯度有2e*w*(1-a^2)*x的形式(e是誤差,w是隱層到輸出層的權(quán)重,a是隱層神經(jīng)元的值,x是輸入),若果輸出層的數(shù)量級很大,會引起e的數(shù)量級很大,同理,w為了將隱層(數(shù)量級為1)映身到輸出層,w也會很大,再加上x也很大的話,從梯度公式可以看出,三者相乘,梯度就非常大了。這時會給梯度的更新帶來數(shù)值問題。

      (3)學習率

               由(2)中,知道梯度非常大,學習率就必須非常小,因此,學習率(學習率初始值)的選擇需要參考輸入的范圍,不如直接將數(shù)據(jù)歸一化,這樣學習率就不必再根據(jù)數(shù)據(jù)范圍作調(diào)整。

               隱層到輸出層的權(quán)值梯度可以寫成 2e*a,而輸入層到隱層的權(quán)值梯度為 2e *w*(1-a^2)*x ,受 x 和 w 的影響,各個梯度的數(shù)量級不相同,因此,它們需要的學習率數(shù)量級也就不相同。對w1適合的學習率,可能相對于w2來說會太小,若果使用適合w1的學習率,會導致在w2方向上步進非常慢,會消耗非常多的時間,而使用適合w2的學習率,對w1來說又太大,搜索不到適合w1的解。

                如果使用固定學習率,而數(shù)據(jù)沒歸一化,則后果可想而知。

               不過,若果像matlab工具箱一樣,使用自適應學習率,學習率的問題會稍稍得到一些緩和。

      (4)搜索軌跡

               前面已說過,輸入范圍不同,對應的 w 的有效范圍就不同。假設 w1 的范圍在 [-10,10],而w2的范圍在[-100,100],梯度每次都前進1單位,那么在w1方向上每次相當于前進了 1/20,而在w2上只相當于 1/200!某種意義上來說,在w2上前進的步長更小一些,而w1在搜索過程中會比w2“走”得更快。這樣會導致,在搜索過程中更偏向于w1的方向。

                                    

            拋開哪種路線更有效于找到最佳解的問題不談,兩點之間直線距離最短,這種直角路線明顯會更耗時間,所以不歸一化,時間會明顯增加。

       

            從上面的分析總結(jié),除去數(shù)值問題的影響,最主要的影響就是,每一維的偏導數(shù)計算出來數(shù)量級會不一致。下面我們來個試驗。

      3.小實驗

           假設我們有兩個輸入變量,x1范圍是[-1,1],但x2是[-100,100],輸出范圍是[-1,1]。x2在輸入數(shù)據(jù)上沒有做歸一化,怎么修改訓練過程,才能讓訓練結(jié)果如同數(shù)據(jù)歸一化了一樣呢。

           通過上面的討論,我們知道x2增大了,會使w2的梯度也很大,因此我們在計算w2梯度時,需要把它的梯度除以100.才能得到它的梯度數(shù)量級與w1的一致。然后在更新w步長的時候,w1的有效取值范圍(1/1)是w2的有效取值范圍(1/100)的100倍,因此w2走的時候,應該以1/100的步去走。所以w2的學習率也需要除以100。

           這樣,若果不考慮數(shù)值問題,會和數(shù)據(jù)作了歸一化的結(jié)果是一樣的。這里就不展示實驗的代碼了,因為需要涉及整個BP代碼。有興趣研究的同學在自己的編寫的代碼上動下刀。

           這是一個案例分析,說明不考慮數(shù)值問題的話,只是影響了這兩個地方。假設,x2的輸入范圍是[100,300],那肯定不是除以100就可以了,需要更復雜一些的變換,這里不再深入糾結(jié)。

       

          為什么要歸一化,對于使用梯度下降法訓練的三層BP神經(jīng)網(wǎng)絡總結(jié)出的就是這些原因了。對于其他的神經(jīng)網(wǎng)絡模型,會有其它的原因,這里就不再作分析。

       

      4.對使用matlab工具箱的建議

      關(guān)于使用matlab工具箱需要注意的兩點

      1. Matlab2012b已經(jīng)會自動將輸入數(shù)據(jù)歸一化,所以不必再自己去做數(shù)據(jù)的預處理,直接用原始數(shù)據(jù)建立網(wǎng)絡就可以。
      2. 但輸出需要做歸一化,因為工具箱計算誤差的時候,使用的是原始數(shù)據(jù)的誤差,因此誤差數(shù)量級可能很大,這樣一來梯度就很大了,在學習率還沒來得及自適應減小的時候,梯度就一下子把原來初始化好的權(quán)重給吞掉了,使網(wǎng)絡的權(quán)重掉到一個離最優(yōu)解非常遠的地方。所以使用matlab神經(jīng)網(wǎng)絡工具箱,而又要用梯度下降法的話,輸出一定要做歸一化。

                 但若果用默認的trainlm法,而不是梯度下降法 traingd的話,那影響不會像 traingd這么嚴重,我們可以看到 trainlm(列文伯格-馬跨特法) 對方向 h 的計算公式是:

                                                                            

          由于JJ和Jf的數(shù)量級不會差太多,而且由于有u的調(diào)整,最終會得到一個適當?shù)膆。

       

           3.使用matlab2012b(或以上)工具箱得到的網(wǎng)絡權(quán)值,是面向作了歸一化后的數(shù)據(jù)的。所以使用時,需要先對數(shù)據(jù)進行歸一化,再將歸一化后的輸入數(shù)據(jù)放到網(wǎng)絡中計算網(wǎng)絡輸出,再將輸出反歸一化,才是真正的預測結(jié)果。如果想把歸一化過程揉合到網(wǎng)絡的權(quán)值的話,請參考文章:<提取對應原始數(shù)據(jù)的權(quán)重和閾值>

       

      5.個人見解

      下面是網(wǎng)友關(guān)于為什么要歸一化的一些回答(歡迎補充):

      1.避免數(shù)值問題。

      2.使網(wǎng)絡快速的收斂。

      3.樣本數(shù)據(jù)的評價標準不一樣,需要對其量綱化,統(tǒng)一評價標準

      4.bp中常采用sigmoid函數(shù)作為轉(zhuǎn)移函數(shù),歸一化能夠防止凈輸入絕對值過大引起的神經(jīng)元輸出飽和現(xiàn)象 。

      5.保證輸出數(shù)據(jù)中數(shù)值小的不被吞食 。

       

      事實上本文的研究大部分都是借鑒了網(wǎng)友的見解,基于這些觀點進一步探討所得,但對部分觀點,本人略有不同看法:

      (1)使網(wǎng)絡快速的收斂:贊同。

      (2)避免數(shù)值問題:贊同。

      (3)統(tǒng)一量綱:本人認為這從屬于業(yè)務層,與網(wǎng)絡的訓練無關(guān)。

      (4)避免神經(jīng)元飽和:與權(quán)值閾值相乘后,才是sigmoid的輸入值,初始化得好的話,并不會飽和輸出。若果使用“把權(quán)值和閾值隨機初始化為[-1,1]之間的值”這種初始化方法,那不歸一化就會引起神經(jīng)元輸出飽和現(xiàn)象。

      (5)大數(shù)吞小數(shù):若果我們找到適合的權(quán)值,是不會吞掉的,例如x1=10000,x2=1, 而w1=0.0001,w2=1,那么w1*x1是不會吞掉w2*x1的。

       

      后語

            本文在很多細節(jié)之處,都沒有作深入的討論,一來展開這些討論會讓文章非常冗贅,失去主題。二來(也是最主要的原因),對歸一化作用的研究,只能讓我們更清晰歸一化的好處,減少我們對歸一化的疑惑,并不能促進我們更好的改進網(wǎng)絡效果。所以本文,都僅從大方面,不十分嚴謹?shù)奶峒皻w一化在訓練過程各方面的好處。

            感謝大家的閱讀。

      ==============<原創(chuàng)文章,轉(zhuǎn)載請說明來自神經(jīng)網(wǎng)絡之家www. >     ================

      ==========<請保留本文的地址:http://www./nninfo/editText.jsp?id=37>=============

        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多