Early Stop && Dropout && Stochastic Gradient Descent

2020-01-13 15:53:43 浏览数 (1)

本篇文章介绍深度学习中的其他一些小技巧(tricks)

Early Stop

上图表明,随着训练epoch的增加,Training Set Accuracy也在持续上升,但到达某一点后,Test Set Accuracy开始下降,此时发生了OverFitting现象。我们一般用Validation Set来对该临界点进行检测,当取到最大值时便停止训练,将此时取得的参数保存起来用于最终的模型参数

Early Stop的引入会提前终止训练,即在Test Accuracy上升到临界值不发生改变后,就停止训练

由此我们总结how to early stop:

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

Dropout

Dropout是用来防止OverFitting十分有效的手段,它的假设是:

  1. 不学习全部参数,只学习有效的参数
  2. 每层神经元都有一定的概率失活,每层链接都有一定的概率丢失

它具体的工作过程是,在前向传播的过程中,不同层神经元之间连接的权重$w$,有一定概率会被暂时认为是0(注意它并不是给$w$赋值为0)。通过Dropout,每次学习的过程中,都或多或少有一些参数是不被考虑的,有效的减少了运算量,而且使得模型的泛化能力更强

在pytorch中添加Dropout也非常简单

代码语言:javascript复制
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的时候用到

Stochastic Gradient Descent

在每一次迭代中,梯度下降使用整个训练数据集来计算梯度,因此有时它也被称为批量梯度下降(Batch Gradient Descent)。而随机梯度下降(Stochastic Gradient Descent)在每次迭代中只随机采样一个样本来计算梯度

比方说,原本计算loss时假设有60k的数据,那么梯度更新的公式为

$$ frac{nabla L}{nabla W} = sum_{i=0}^{i=60k}frac{nabla L}{nabla W} $$

这样计算的复杂度很大,但是若在这60K数据中取一个Batch大小的数据,假设Batch只有1K,这样就能极大的减小计算量

$$ frac{nabla J}{nabla W} = sum_{i=0}^{i=Batch}frac{nabla J}{nabla W} $$

0 人点赞