【机器学习的Tricks】随机权值平均优化器swa与pseudo-label伪标签

文章来自公众号【机器学习炼丹术】python

1 stochastic weight averaging(swa)

  • 随机权值平均
  • 这是一种全新的优化器,目前常见的有SGB,ADAM,

【概述】:这是一种经过梯度降低改善深度学习泛化能力的方法,并且不会要求额外的计算量,能够用到Pytorch的优化器中。算法

随机权重平均和随机梯度降低SGD类似,因此我通常吧SWa当作SGD的进阶版本。框架

1.1 原理与算法

swa算法流程:
机器学习

【怎么理解】:ide

  • 对$w_{swa}$作了一个周期为c的滑动平均。每迭代c次,就会对这个$w_{swa}$作一次滑动平均。其余的时间使用SGD进行更新。
  • 简单的说,整个流程是模型初始化参数以后,使用SGD进行梯度降低,迭代了c个epoch以后,将模型的参数用加权平均,获得$w_{SWA}$,而后如今模型的参数就是$w_{SWA}$,而后再用SGD去梯度降低c个epoch,而后再加权平均出来一个新的$w_{SWA}$.

SWA加入了周期性滑动平均来限制权重的变化,解决了传统SGD在反向过程当中的权重震荡问题。SGD是依靠当前的batch数据进行更新,寻找随机梯度降低随机寻找的样本的梯度降低方向极可能并非咱们想要的方向。oop

论文中给出了一个图片:
学习

  • 绿线是恒定学习率的SGD,效果并很差,直到SGD在训练的过程当中所见了学习率,才能够获得一个收敛的结果;
  • 而使用Stochastic weight averaging能够在学习率恒定的状况下,快速收敛,并且过程平稳。

1.2 python与实现

这里讲如何在pytorch深度学习框架中加入swa做为优化器:测试

from torchcontrib.optim import SWA

# training loop
base_opt = torch.optim.SGD(model.parameters(), lr=0.1)
opt = torchcontrib.optim.SWA(base_opt, swa_start=10, swa_freq=5, swa_lr=0.05)
for _ in range(100):
     opt.zero_grad()
     loss_fn(model(input), target).backward()
     opt.step()
opt.swap_swa_sgd()

若是使用了swa的话,那么lr_schedule这个方法就不须要在使用了,很是的方便。优化

【关于参数】:
使用swa的时候,就直接经过spa

torchcontrib.optim.SWA(base_opt,swa_start,swa_greq,swa_lr)

来封装原来的优化器。

  • swa_start:是一个整数,表示通过swa_start个steps后,将学习率切换为固定值swa_lr。(在swa_start以前的step中,lr是0.1,在10个steps以后,lr变成0.05)
  • swa_freq:在swa_freq个step优化以后,会将对应的权重加到swa滑动平均的结果上,至关于算法中的c;
  • 使用opt.swap_swa_sgd()以后,能够将模型的权重替换为swa的滑动平均的权重。

1.3 关于BN

这里有一个问题就是在BatchNorm层训练的时候,BN层中也是有两个训练参数的,使用$w_{swa}$重置了模型参数,可是并无更新BN层的参数,因此若是有bn层的话,还须要加上:

opt.bn_update(train_loader,model)

2 Pseudo-Label

  • 伪标签
  • 这是一种半监督的方法。其实很是简单,就是对于未标记的数据,许纳泽预测几率最大的标记做为该样本的pseudo-label,而后给未标记数据设置一个权重,在训练过程当中慢慢增长未标记数据的权重。

这个方法的loss以下:

很是好理解了,前面一项就是训练集的loss,后面是测试集的loss,而后用一个$\alpha(t)$来作权重。

而后这个$\alpha(t)$就是随着训练的迭代次数增长而慢慢的线性增长(若是按照原来的论文中的描述):

【一些关于pseudo-label的杂谈】

这个方法提出在2013年,而后再2015年做者用entropy信息熵来证实这个方法的有效性。可是证实过程较为牵强。这个伪标签我在2017年的一个项目中想到了,可是不知道可行不可行本身当时也没法进行证实,就做罢了,没想到如今看到一样的方法在2013年就提出来了。有点五味杂陈哈哈。

参考文献:

  1. Izmailov, Pavel, et al. "Averaging weights leads to wider optima and better generalization." arXiv preprint arXiv:1803.05407 (2018).
  2. Grandvalet, Yves, and Yoshua Bengio. "Semi-supervised learning by entropy minimization." Advances in neural information processing systems. 2005.
相关文章
相关标签/搜索