1. 程式人生 > 其它 >tensorflow中的正則化函式在_人工智慧演算法問題——正則化解決神經網路中的過度擬合...

tensorflow中的正則化函式在_人工智慧演算法問題——正則化解決神經網路中的過度擬合...

技術標籤:tensorflow中的正則化函式在

過度擬合是一個很大的問題,尤其是在深度神經網路中。如果你正在懷疑你的神經網路過度擬合了。有很多方法可以確定過度擬合了資料,也許有一個高方差問題,或者繪製了一個訓練圖和測試精度圖,然後發現過度擬合了。在這種情況下,我們應該怎麼辦呢?

第一件事是正則化

887295c8ab30ecd87f8c26b5a56ae262.png

為什麼要正規化?

解決高方差的另一種方法是獲取更多可靠的訓練資料。如果要獲得更多的訓練資料,則可以通過這種方式來思考,嘗試針對所有情況歸納權重。那在大多數時候都可以解決問題,那為什麼還要其他呢?但是這樣做的一個巨大缺點是,我們不能總是獲取更多的培訓資料,獲取更多的資料可能會很昂貴,有時甚至無法訪問。

所以我們有必要討論一些有助於減少過度擬合的方法。而新增正則化通常有助於防止過度擬合。通常進行正則化還可以幫助我們最大程度地減少網路中的隨機錯誤。

瞭解L2正則化

在嘗試最小化一個J稱為cost函式的函式。

09f5d040ba5ba704cc291cdd5e1216ad.png

而w是大小的矩陣x並且L是損失函式。如果只是快速更新,就沒什麼意思。因此,要為此新增正則化,我們將向此成本函式方程新增一個項,我們將看到更多這樣的內容

ed68005c44c3f280cc6639ce8a1d0f86.png

因此,λ是可能需要調整的另一個超引數,稱為正則化引數。

根據理想慣例,||w||²₂僅表示L2的歐幾里德L2範數,w然後對其平方即可,讓我們在一個方程式中對其進行總結,以便對我們來說變得容易,我們將對L2範數項進行簡化。

只是用向量素數到向量素數的平方歐幾里德範數表示的w。因此,我們剛才所說的術語稱為L2正則化。我們將在一段時間內詳細討論如何獲得λ項,但至少現在對它的工作原理有了一個大概的瞭解。這種方法實際上有一個原因稱為“ L2歸一化”,之所以這樣稱呼是因為我們正在計算的L2範數w。

到現在為止,我們討論了引數的正則化w,可能會問自己一個問題,為什麼w?為什麼不加上b?這是一個邏輯問題。事實證明,實際上可以新增一個w術語或為其新增術語,w但是我們通常只是省略它。因為如果檢視引數,你會注意到w通常這是一個非常高的維向量,尤其是具有高方差問題。理解它是因為w它具有很多單獨的引數,因此我們不能很好地擬合所有引數,而b僅僅是一個數字。因此,幾乎所有主要引數都位於中,w而不是b。因此,即使最後新增b方程式中的項,在實踐中不會有很大的不同。

L1正則化

我們剛剛討論了L2正則化,你可能還聽說過L1正則化。L1正則化是何時新增引數向量的L1範數而不是我們之前討論的術語w。讓我們以數學的方式來看這個術語。

5180e10841a11b71bff4455cf6ebe236.png

如果使用L1正則化,則w可能會變得稀疏,這意味著w向量中將有很多零。人們常說這可以幫助壓縮模型,因為引數集為零,並且需要更少的記憶體來儲存模型。我覺得在實踐中,使模型稀疏的L1正則化只會有所幫助。因此,我不建議大家在模型壓縮中使用它。而且,當在訓練網路時,使用L2正則化的頻率要高得多。

擴充套件到神經網路上面

我們剛剛看到了我們將如何對邏輯函式進行正則化,現在對正則化的含義及其工作方式有了清晰的認識。因此,現在最好看看這些想法如何擴充套件到神經網路是上面。因此,神經網路的召回或成本函式看起來像這樣

6b1ce8ecfac7aff0022d63cd25887449.png

因此,現在回想一下我們在前面討論時所新增的內容,我們添加了正則化引數λ,縮放參數以及最重要的L2範數,因此我們將執行類似的操作,而只是將其求和。因此,我們新增的術語如下所示:

7ebfc68d72dd6ad9a8570f4137afd790.png

現在讓我們來簡化這個L2範數項,它定義為該矩陣的每個元素的的i總和的j平方之和:

7c4000ec44670d501bda5c8571cb4e7d.png

這裡的第二個是權重矩陣或w這裡的尺寸nˡ, nˡ⁻¹和這些單位在層的數量l和l-1分別。這也稱為矩陣的“ Frobenius範數”,Frobenius範數非常有用,並用於很多應用程式中,其中非常好的是推薦系統。按照慣例,用下標“ F”表示。可能只是說將它稱為L2正規化較為容易,但是由於某些常規原因,我們將其稱為Frobenius正規化,並且具有不同的表示形式

||⋅||²²-L²範數||⋅||²_F-Frobenius範數

實施梯度下降

因此,年初的時候我們會做的是計算dw採用反向傳播,讓你的成本函式的偏導數J相對於w任何給定層l,然後你只需更新你wˡ,也包括α引數。現在我們已經將正則化項納入了目標,因此我們只需新增一個正則化項即可。而且,這些是我們為此制定的步驟和方程式

2af1035a3b670d481f7b38c5d6261784.png

因此,之前的第一步曾經只是從反向傳播中獲得的東西,現在我們在其中添加了一個正則化術語。其他兩個步驟與在任何其他神經網路中所做的幾乎相同。dw[l]現在,已經在最後添加了額外的正則項,因此對於引數而言,此新功能仍然是對成本函式的導數的正確定義。因此,L 2正則化有時也稱為重量衰減。因此,現在,如果只是從第1步中提取方程式,並在第3步方程式中替換它

980d4eac5965cdbfdeb5318d028ec5c8.png

因此,這將顯示w[l]要使矩陣變小的任何矩陣。實際上,這就像我們要提取矩陣w並將其乘以1 - α λ/m。因此,這就是L 2範數正則化也稱為權重衰減的原因。因為這就像通常的梯度下降,所以可以w通過減去從反向傳播中獲得的原始梯度的α倍來進行更新。但是現在也要用w乘以這個東西,它比1小一點。因此,L 2正則化的替代名稱是權重衰減。我不經常使用該術語,但是現在知道其名稱的直覺是如何產生的。

為什麼正則化可以減少過度擬合

在實施正則化時,我們添加了一個稱為Frobenius範數的術語,該術語懲罰權重矩陣過大。那麼,現在要考慮的問題是為什麼縮小Frobenius範數會減少過度擬合?

想法1

一個想法是,如果將正則化引數λ增大得很大,就會真正激勵它們將權重矩陣w設定為合理地接近零。因此,一種直覺是,對於許多隱藏的單位,權重設定得非常接近零,從而基本上消除了這些隱藏的單位的影響。如果是這種情況,則神經網路將變得更小,更簡化。實際上,它幾乎就像一個邏輯迴歸單元,但堆疊的深度可能最大。這樣一來,可以從過度擬合情況中更接近高偏差情況。但希望應該有一個λ的中間值,從而得出最佳解。因此,總而言之,只是將某些隱藏層和本質上更簡單的網路的影響歸零或減少。

從一堆隱藏單元中完全清零的直覺並不完全正確,在實踐中效果也不佳。事實證明,實際發生的情況是我們仍將使用所有隱藏的單位,但是每個隱藏單位的影響都小得多。但是最終會得到一個更簡單的網路,並且好像擁有一個較小的網路,因此不太容易過度擬合。

想法2

這是正則化的另一種直覺或想法,以及為什麼它可以減少過度擬合。為了理解這個想法,我們以tanh啟用函式為例。因此,我們的g(z) = tanh(z)

2bb6227032d32bc6483a5616f63ebb39.png

在這裡請注意,如果z僅接受很小範圍的引數|z|(接近於零),那麼將使用tanh函式的線性狀態。如果僅z允許向上或向下移動較大的值或|z|遠離0,則啟用函式的線性度開始降低。因此,您可能會避免直覺,如果正則化引數λ大,則您的引數將相對較小,因為它們會因代價函式大而受到不利影響。

因此,如果的權重w 較小,則因為z = wx+b但如果w趨於非常小,則權重z也將相對較小。特別是,如果z最終採用相對較小的值,則將導致g(z)大致呈線性。因此,好像每一層都將像線性迴歸一樣大致呈線性。這將使其像線性網路一樣。因此,即使是具有線性啟用函式的非常深的網路,最終也只能計算線性函式。這將無法適應一些非常複雜的決定。

如果擁有神經網路和一些非常複雜的決策,則可能會過度擬合,這肯定會有助於減少過度擬合。

當實現梯度下降時,除錯梯度下降的步驟之一是將成本函式繪製J為梯度下降的高程數的函式,並且希望看到成本函式J在每次梯度下降的高程後都單調減少。而且,如果要實施正則化,請記住J現在有了一個新定義。如果繪製的舊定義J,則可能不會單調減少。因此,要除錯梯度下降,請確保要繪製的新定義J也包括第二個術語。否則,可能不會J在每個高程上都看到單調減少。

正則化在深度學習模型中非常有幫助,並且幫助解決了過度擬合的問題。