日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

深度学习提高泛化能力的技术

發布時間:2023/12/20 pytorch 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度学习提高泛化能力的技术 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

LeetCode題目記錄

  • 1.泛化能力(generalization)
  • 2.正則化(regularization)
    • 2.1 正則化方法

1.泛化能力(generalization)

對于模型,我們不僅要求它對訓練數據集有很好的擬合(訓練誤差),同時也希望它可以對未知數據集(預測集)有很好的擬合結果(泛化能力),所產生的測試誤差被稱為泛化誤差。
度量泛化能力的好壞,最直觀的表現就是模型的過擬合(overfitting)和欠擬合(underfitting)

過擬合和欠擬合是用于描述模型在訓練過程中的兩種狀態,一般來說,訓練會是這樣的一個曲線。下面的training error,generalization error分別是訓練集和測試集的誤差。

訓練剛開始的時候,模型還在學習過程中,訓練集和測試集的性能都比較差,這個時候,模型還沒有學習到知識,處于欠擬合狀態,曲線落在underfitting zone,隨著訓練的進行,訓練誤差和測試誤差都下降。

隨著模型的進一步訓練,在訓練集上表現的越來越好,終于在突破一個點之后,訓練集的誤差下降,測試集的誤差上升了,這個時候就進入了過擬合區間overfitting zone。

不過也不是說什么訓練過程,都會滿足上面的曲線。

(1) 模型訓練過程中,訓練集的誤差一定一直低于測試集嗎?未必。

如果這兩個集合本來就取自于同樣的數據分布,比如從一個數據集中隨機采樣,那么有可能測試的誤差從一開始就低于訓練集。不過,總體的趨勢肯定是不變的,兩者從一開始慢慢下降直到最后過擬合,訓練集的誤差低于測試集。

(2) 模型的訓練一定會過擬合嗎?這也不一定!

如果數據集足夠大,很可能模型的能力不夠始終都不會過擬合。另一方面,有很多的方法可以阻止,或者減緩模型的過擬合,比如正則化。

2.正則化(regularization)

正則化的目標: 模型的經驗風險和模型復雜度之和達到最小,即結構風險達到最小。

以上是我們的優化目標,V就是損失函數,它表示的是當輸入xi預測輸出為f(xi),而真實標簽為yi時,應該給出多大的損失。
只要一個模型足夠復雜,它是不是可以記住所有的訓練集合樣本之間的映射,代價就是模型復雜,帶來的副作用就是沒見過的只是略有不同的樣本可能表現地就很差。造成這種情況的問題就是學的太過,參數擬合的太好以致于超過了前面那個訓練曲線的最低泛化誤差臨界點,究其根本原因是模型的表達能力足夠強大到過擬合數據集。
式子中的R(f),正是為了約束模型的表達能力,f是模型,R是一個跟模型復雜度相關的函數,單調遞增。

模型的表達能力跟模型大小,也就是參數量有關,限制模型的表達能力可以去調整模型大小,也就是調整模型的參數來實現,正則項就可以在參數上做文章。

所以說正則化就用于提高模型的泛化能力,這里所說的僅僅是狹義上的參數正則化,而廣義上的正則化方法眾多

2.1 正則化方法

正則化方法,根據具體的使用策略不同,有直接提供正則化約束的參數正則化方法如L1/L2正則化,以及通過工程上的技巧來實現更低泛化誤差的方法,比如訓練提前終止和模型集成,我將其稱為經驗正則化,也有不直接提供約束的隱式正則化方法如數據增強等,下面就從這三類進行講述。

1、經驗正則化方法

這里主要包含兩種方法,即提前終止和模型集成。

(1) 提前終止(earlystop)

前面我們看的訓練曲線隨著不斷迭代訓練誤差不斷減少,但是泛化誤差減少后開始增長。假如我們在泛化誤差指標不再提升后,提前結束訓練,也是一種正則化方法,這大概是最簡單的方法了。

(2) 模型集成(dropout)

另一種方法就是模型集成(ensemable),也就是通過訓練多個模型來完成該任務,它可以是不同網絡結構,不同的初始化方法,不同的數據集訓練的模型,也可以是用不同的測試圖片處理方法,總之,采用多個模型進行投票的策略

在這一類方法中,有一個非常有名的方法,即Dropout。

Dropout在2014年被H提出后在深度學習模型的訓練中被廣泛使用。它在訓練過程中,隨機的丟棄一部分輸入,此時丟棄部分對應的參數不會更新。所謂的丟棄,其實就是讓激活函數的輸出為0。

關于dropout的有效性,從結構上來說,它消除或者減弱了神經元節點間的聯合,降低了網絡對單個神經元的依賴,從而增強了泛化能力。不過也有另外的一些研究從數據增強的角度來思考這個問題。

那么,就真的不擔心dropout會把一些非常重要的神經元刪除嗎?最新的神經科學的研究以及DeepMind等研究人員通過對神經元進行隨機刪除來研究網絡性能,發現雖然某些神經元確實很重要,它們會選擇性激活特定輸入,比如只對輸入貓圖特別敏感,對其他輸入則完全不感冒,但是刪除這一類神經元仍然不影響網絡能識別到貓。

這說明網絡中未必少了誰就不行。不過反過來,上面說到的單個像素的攻擊,則說明又有某些神經元至關重要。關于這其中的關系,仍然是研究熱門,還是不斷跟進更多最新的研究吧。

取平均的作用: 先回到正常的模型(沒有dropout),我們用相同的訓練數據去訓練5個不同的神經網絡,一般會得到5個不同的結果,此時我們可以采用 “5個結果取均值”或者“多數取勝的投票策略”去決定最終結果。(例如 3個網絡判斷結果為數字9,那么很有可能真正的結果就是數字9,其它兩個網絡給出了錯誤結果)。這種“綜合起來取平均”的策略通常可以有效防止過擬合問題。因為不同的網絡可能產生不同的過擬合,取平均則有可能讓一些“相反的”擬合互相抵消。dropout掉不同的隱藏神經元就類似在訓練不同的網絡(隨機刪掉一半隱藏神經元導致網絡結構已經不同),整個dropout過程就相當于 對很多個不同的神經網絡取平均。而不同的網絡產生不同的過擬合,一些互為“反向”的擬合相互抵消就可以達到整體上減少過擬合。
減少神經元之間復雜的共適應關系: 因為dropout程序導致兩個神經元不一定每次都在一個dropout網絡中出現。(這樣權值的更新不再依賴于有固定關系的隱含節點的共同作用,阻止了某些特征僅僅在其它特定特征下才有效果的情況)。 迫使網絡去學習更加魯棒的特征 (這些特征在其它的神經元的隨機子集中也存在)。換句話說假如我們的神經網絡是在做出某種預測,它不應該對一些特定的線索片段太過敏感,即使丟失特定的線索,它也應該可以從眾多其它線索中學習一些共同的模式(魯棒性)。(這個角度看 dropout就有點像L1,L2正則,減少權重使得網絡對丟失特定神經元連接的魯棒性提高)
  (還有一個比較有意思的解釋是,Dropout類似于性別在生物進化中的角色:物種為了生存往往會傾向于適應這種環境,環境突變則會導致物種難以做出及時反應,性別的出現可以繁衍出適應新環境的變種,有效的阻止過擬合,即避免環境改變時物種可能面臨的滅絕。 當地球都是海洋時,人類是不是也進化出了再海里生活的能力呢?)

總之一句話,不怕刪了誰。就dropout的使用方法而言,我們平常只更改dropout的比例,作者對此還有更多的建議。

(1) 因為dropout降低了模型的性能,所以對于原本需要容量為N的網絡才能解決的問題,現在需要N/p,p就是保留該節點的概率,這個概率通常在0.5~0.9之間,p=1就是普通的網絡了。

(2) 因為dropout相當于增加了噪聲,造成梯度的損失,所以需要使用更大的學習率和動量項。與此同時,對權重進行max-norm等權重約束方法,使其不超過某個值。

(3) 訓練更久,很好理解。

對dropout方法,還有很多的變種,包括dropout connect,maxout,stochastic depth等。

一個神經元的輸出實際上是由輸入以及參數來共同決定,dropout把神經元的值設置為0了,那是不是也可以把參數設置為0呢?這就是drop connect,而且它可以比dropout更加靈活,可視為Dropout的一般化形式,從模型集成的角度來看,Dropout是2^n個模型的平均,那DropConnect呢?它應該更多,因為權重連接的數目比節點數本身更多,所以DropConnect模型平均能力更強。

Drop Connect和Dropout均引入了稀疏性,不同之處在于Drop Connect引入的是權重的稀疏而不是層的輸出向量的稀疏。

另外,在dropout這一個思路上做相關文章的還有一些,比如maxout,是一種激活函數,它對N個輸入選擇最大的作為激活輸出。比如隨機pooling,是一種池化方法。比如stochastic depth,它用在帶有殘差結構的網絡中,將某些res block直接設置為等價映射。還有backdrop,在前向的時候不drop,在梯度反傳的時候才做。

2、參數正則化方法

L2/L1正則化方法,就是最常用的正則化方法,它直接來自于傳統的機器學習。

L2正則化方法如下:

L1正則化方法如下:


這么來看上面的那張圖,參數空間(w1,w2)是一個二維平面,藍色部分是一個平方損失函數,黃色部分是正則項。

藍色的那個圈,中心的點其實代表的就是損失函數最優的點,而同心圓則代表不同的參數相同的損失,可見隨著圓的擴大,損失增大。黃色的區域也類似,周邊的紅色線表示的是損失相同點的輪廓。

正則項的紅色輪廓線示平方損失的藍色輪廓線總要相交,才能使得兩者加起來的損失最小,兩者的所占區域的相對大小,是由權重因子決定的。不管怎么說,它們總有一個交叉點。

對于L2正則化,它的交點會使得w1或者w2的某一個維度特別小,而L1正則化則會使得w1或者w2的某一個維度等于0,因此獲得所謂的稀疏化

在深度學習框架中,大家比起L1范數,更鐘愛L2范數,因為它更加平滑和穩定。

3、隱式正則化方法

前面說了兩種正則化方法,第一種,通過對網絡結構的修改或者在使用方法上進行調整。第二種,直接對損失函數做了修改。這兩種方法,其實都應該算作顯式的正則化方法,因為在做這件事的過程中, 我們是有意識地知道自己在做正則化。

但是還有另一種正則化方法,它是隱式的正則化方法,并非有意識地直接去做正則化,卻甚至能夠取得更好的效果,這便是數據有關的操作,包括歸一化方法和數據增強,擾亂標簽。

[參考文獻]:
[1]: https://blog.csdn.net/hacker_long/article/details/88430542

總結

以上是生活随笔為你收集整理的深度学习提高泛化能力的技术的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。