過擬合、欠擬合及其解決方案;梯度消失、梯度**;迴圈神經網路高階
1、過擬合和欠擬合
過擬合:模型的訓練誤差遠小於它在測試資料集上的誤差,我們稱該現象為過擬合
欠擬合:模型訓練誤差無法降低.
如何應對欠擬合和過擬合?在這裡我們重點討論兩個因素:模型複雜度和訓練資料集大小。
1.1.1、模型複雜度
為了解釋模型複雜度,我們以多項式函式擬合為例。給定乙個由標量資料特徵 x 和對應的標量標籤 y 組成的訓練資料集,多項式函式擬合的目標是找乙個 k 階多項式函式
來近似y.在上式中,wk是模型的權重引數,b是偏差引數。與線性回歸相同,多項式函式擬合也使用平方損失函式。特別地,一階多項式函式擬合又叫線性函式擬合。
給定訓練資料集,模型複雜度和誤差之間的關係:
1.1.2、訓練資料集過小
影響欠擬合和過擬合的另乙個重要因素是訓練資料集的大小。一般來說,如果訓練資料集中樣本數過少,特別是比模型引數數量(按元素計)更少時,過擬合更容易發生。此外,泛化誤差不會隨訓練資料集裡樣本數量增加而增大。因此,在計算資源允許的範圍之內,我們通常希望訓練資料集大一些,特別是在模型複雜度較高時,例如層數較多的深度學習模型。
2、梯度消失、梯度**
梯度消失和梯度下降原因
梯度消失和梯度**兩種情況產生的原因可以總結成2類原因:1.深層網路的結構;2.不合適的損失函式,比如sigmoid函式。梯度**一般出現在深層網路和權值初始化值太大的情況下。
1.深層網路角度:
如圖是乙個四層的全連線網路,假設每層網路啟用後的輸出為 fi(x),其中i為第i層,x為第i層的輸入,也就是第i-1層的輸出,f是啟用函式,那麼
從深層網路角度來說,不同的層學習的速度差異很大,表現為網路中靠近輸出的層學習的情況很好,靠近輸入層的學習很慢,甚至即使訓練了很久,前基層的權值和剛開始初始化的值差不多,因此梯度消失和梯度**的根本原因在於反向傳播演算法的不足。
2.啟用函式的角度
如果啟用函式的選擇不合適,比如使用sigmoid,梯度消失會很明顯。
下圖為logistic函式和tanh函式的導數,logistic導數最大的時候也只有0.25,其餘時候遠小於0.25,因此如果每層的啟用函式都為logistic函式的話,很容易導致梯度消失問題,tanh函式的導數峰值是1那也僅僅在取值為0的時候,其餘時候都是小於1,因此通過鏈式求導之後,tanh函式也很容易導致梯度消失。
梯度消失、**的解決方案
1.預訓練和微調
2.梯度剪下、正則
梯度剪下又叫梯度截斷,是防止梯度**的一種方法,其思想是設定乙個梯度剪下閾值,更新梯度的時候,如果梯度超過這個閾值,那就將其強制限制在這個範圍之內。
梯度截斷的方式有2種:
按值截斷
按模截斷
3、迴圈神經網路高階
動手學資料分析 Task3
concat方法可以在兩個維度上拼接,預設縱向憑藉 axis 0 拼接方式缺省外連線 pd.concat objs,axis 0,join outer join axes none,ignore index false,keys none,levels none,names none,verify ...
動手學資料分析 task3 資料重構
一 資料合併 1 使用pd.concat objs,axis 0,join outer list up text left up,text right up result up pd.concat list up,axis 1 result up.head resul up text left up...
動手學深度學習 task01
task 1 線性回歸 多層感知機 softmax函式 1 線性回歸作為基本的機器學習演算法,實現較簡單,應用廣泛。以下為用pytorch編寫的線性回歸類 import torch.nn as nn import torch from torch.autograd import variable f...