当前位置:   article > 正文

加随机扰动_泛化性乱弹:从随机噪声、梯度惩罚到虚拟对抗训练

样本数据引入随机扰动

 d80d72db6b2ba2f870943ec6ea8e3eeb.gif

©PaperWeekly 原创 · 作者|苏剑林 单位|追一科技 研究方向|NLP、神经网络 提高模型的泛化性能是机器学习致力追求的目标之一。常见的提高泛化性的方法主要有两种:第一种是添加噪声,比如往输入添加高斯噪声、中间层增加 Dropout 以及进来比较热门的对抗训练等,对图像进行随机平移缩放等数据扩增手段某种意义上也属于此列;第二种是往 loss 里边添加正则项,比如  ,   惩罚、梯度惩罚等。 本文试图探索几种常见的提高泛化性能的手段的关联。

13c3dddf0ec0cbae915eebccee63284d.png

随机噪声 我们记模型为 f(x), 为训练数据集合,l(f(x), y) 为单个样本的 loss,那么我们的优化目标是:

c51aab1504d7fd046a15ca554b843713.png

 是 f(x) 里边的可训练参数。假如往模型输入添加噪声 ,其分布为 ,那么优化目标就变为:

3e36ac2a230bd566b57b90a4574d804e.png

当然,可以添加噪声的地方不仅仅是输入,也可以是中间层,也可以是权重 ,甚至可以是输出 y(等价于标签平滑),噪声也不一定是加上去的,比如 Dropout 是乘上去的。对于加性噪声来说, 的常见选择是均值为 0、方差固定的高斯分布;而对于乘性噪声来说,常见选择是均匀分布 U([0,1]) 或者是伯努利分布。 添加随机噪声的目的很直观,就是希望模型能学会抵御一些随机扰动,从而降低对输入或者参数的敏感性,而降低了这种敏感性,通常意味着所得到的模型不再那么依赖训练集,所以有助于提高模型泛化性能。 734cf5f9db5a7ce5f9756f8986c9b1db.png 提高效率 添加随机噪声的方式容易实现,而且在不少情况下确实也很有效,但它有一个明显的缺点:不够“特异性”。噪声  是随机的,而不是针对 x 构建的,这意味着多数情况下  可能只是一个平凡样本,也就是没有对原模型造成比较明显的扰动,所以对泛化性能的提高帮助有限。 增加采样 从理论上来看,加入随机噪声后,单个样本的 loss 变为:

f7c54991bb640d290220bee6226e7688.png

但实践上,对于每个特定的样本 (x,y),我们一般只采样一个噪声,所以并没有很好地近似上式。当然,我们可以采样多个噪声 ,然后更好地近似:

5a2f5fe67afbaf15ae59ab7b29b7d8cb.png

但这样相当于 batch_size 扩大为原来的 k 倍,增大了计算成本,并不是那么友好。

近似展开

一个直接的想法是,如果能事先把式 (3) 中的积分算出来,那就用不着低效率地采样了(或者相当于一次性采样无限多的噪声)。我们就往这个方向走一下试试。当然,精确的显式积分基本上是做不到的,我们可以做一下近似展开:

2d3bac7c22c4c49efdd48f8666965067.png

然后两端乘以  积分,这里假设  的各个分量是独立同分布的,并且均值为 0、方差为 ,那么积分结果就是:

84b91fa17f51de2d1bac970d6eb8c4da.png

这里的  是拉普拉
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/287873
推荐阅读
相关标签
  

闽ICP备14008679号