Early Stop && Dropout && Stochastic Gradient Descent

這是我參與8月更文挑戰的第7天,活動詳情查看: 8月更文挑戰html

本篇文章介紹深度學習中的其餘一些小技巧(tricks)python

Early Stop

上圖代表,隨着訓練epoch的增長,Training Set Accuracy也在持續上升,但到達某一點後,Test Set Accuracy開始降低,此時發生了OverFitting現象。咱們通常用Validation Set來對該臨界點進行檢測,當取到最大值時便中止訓練,將此時取得的參數保存起來用於最終的模型參數markdown

Early Stop的引入會提早終止訓練,即在Test Accuracy上升到臨界值不發生改變後,就中止訓練app

由此咱們總結how to early stop:post

  • Validation set to select paramters
  • Monitor validation performance
  • Stop at the highest val preformace

Dropout

Dropout是用來防止OverFitting十分有效的手段,它的假設是:學習

  1. 不學習所有參數,只學習有效的參數
  2. 每層神經元都有必定的機率失活,每層連接都有必定的機率丟失

它具體的工做過程是,在前向傳播的過程當中,不一樣層神經元之間鏈接的權重 w w ,有必定機率會被暫時認爲是0(注意它並非給 w w 賦值爲0)。經過Dropout,每次學習的過程當中,都或多或少有一些參數是不被考慮的,有效的減小了運算量,並且使得模型的泛化能力更強spa

在pytorch中添加Dropout也很是簡單code

net_dropped = torch.nn.Sequential(
	torch.nn.Linear(784, 200),
	torch.nn.Dropout(0.5),# drop 50% of the neuron
	torch.nn.ReLU(),
	torch.nn.Linear(200, 200),
	torch.nn.Dropout(0.5),
	torch.nn.ReLU(),
	torch.nn.Linear(200, 10),
)
複製代碼

要注意,在Validation的時候不要設置Dropout,Dropout僅在Training的時候用到orm

Stochastic Gradient Descent

在每一次迭代中,梯度降低使用整個訓練數據集來計算梯度,所以有時它也被稱爲批量梯度降低(Batch Gradient Descent)。而隨機梯度降低(Stochastic Gradient Descent)在每次迭代中只隨機採樣一個樣原本計算梯度xml

比方說,本來計算loss時假設有60k的數據,那麼梯度更新的公式爲

L W = i = 0 i = 60 k L W \frac{\partial L}{\partial W} = \sum_{i=0}^{i=60k}\frac{\partial L}{\partial W}

這樣計算的複雜度很大,可是若在這60K數據中取一個Batch大小的數據,假設Batch只有1K,這樣就能極大的減少計算量

J W = i = 0 i = B a t c h J W \frac{\partial J}{\partial W} = \sum_{i=0}^{i=Batch}\frac{\partial J}{\partial W}
相關文章
相關標籤/搜索