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}
相关文章
相关标签/搜索