新规实施:申请手机号码将全面实行人脸比对
06-18
本系列我们利用现实中经常遇到的小样本问题来连接半监督、文本对抗、文本增强等模型优化解决方案。小样本的核心是如何最大化模型在有限的标记样本上的泛化能力,使得模型对未见过的样本能够有很好的预测效果。
我们之前在 NER 系列中介绍过数据增强。不熟悉的可以看看中文NER的东西4. NER中的数据增强尝试。
样本增强是通过增加标记样本的丰富度来提高模型的泛化能力。另一个方向,半监督方案,是利用同一领域的大量无标签数据来提高模型的样本外预测能力。
本章我们要讲的是半监督方案中的一致性正则~一致性正则~一个好的分类器应该对相似的样本点给出一致的预测,所以在训练的时候,它约束样本,注入噪声样本,需要有相对一致的模型预测以降低模型对局部扰动的敏感性,并为模型参数拟合提供更多约束。正在建设中的SimpleClassifcation提供了Temporal Ensemble的相关实现,可以支持各种预训练或词袋模型作为骨干。
欢迎大家一起调试>(*^3^)<上图形象地描述了如何使用一致性正则。用于约束曲线拟合的标记和未标记数据指用两个标记样本(大蓝点)进行训练,因为样本少,对模型拟合缺乏约束 b.将噪声(小蓝点)注入到标记样本中,并约束噪声样本和原始样本的预测一致。
通过扩大标记样本覆盖的空间,对模型拟合施加更多约束。 c.拟合标记样本后,冻结模型并对未标记样本(空心点)进行一致性处理。
约束。由于一致性约束不需要使用标签,因此可以充分利用未标签的数据。
d.利用未标记样本上一致性约束的损失来更新模型,使模型对噪声更加鲁棒。以下三种解决方案使用不同的噪声注入。
和 Ensemble 方法,前两个解决方案来自 [REF1] Temporal Ensemble,第三个解决方案来自 [REF2] Mean Teacher。由于两篇论文已合并,我们将首先整体回顾一下这三个训练框架,然后谈谈对训练技术和一致性正则性的一些见解。
Π-MODEL 如上图所示。对于每个样本,Π-MODEL都会进行两次不同的增强,网络本身会随机drop,得到两个预测结果。
一致性正则损失使用MSE来计算两个预测结果之间的差异。 ,也就是说,约束模型对于输入样本的局部扰动应该更加鲁棒。
模型目标是带有标记样本的交叉熵。由于每个样本都要计算两次,结合整个样本的一致性,lossΠ-MODEL的训练效率较低。
上述 Temporal Ensemble 的 Π-MODEL 约束了同一 epoch 内注入样本的不同噪声的预测值。这部分约束会存在噪声较大、epoch之间相对分离的问题。
因此,作者引入了Ensemble的思想,在时间维度(epoch)做移动平均,以减少一致性损失的波动性。 Temporal Ensemble通过约束每个历元预测值的加权移动平均值Z与当前历元预测值z相对一致来实现一致性规律性。
当α=0时,Temporal退化为Π-MODEL。因此,Temporal需要引入一个Sample_size * label_size的额外变量Z来存储每个样本在每个epoch的预测值的加权移动平均值。
如果你的样本非常大,那么 Temporal 存储额外的预测变量将需要大量的内存开销。以下是temporal部分的相关实现~代码语言: javascript copy with tf.variable_scope('temporal_ensemble'): temporal_ensemble = tf.get_variable(initializer=tf.zeros_initializer, shape=(self.params['sample_size'], self.params ['label_size']), dtype=tf.float32, name='temporal_ensemble', trainable=False) self.Z = tf.nn.embedding_lookup(temporal_ensemble, features['idx']) # batch_size * label_size self .Z = self.alpha * self.Z + (1 - self.alpha) * preds self.assign_op = tf.scatter_update(temporal_ensemble, features['idx'], self.Z) add_layer_summary('ensemble', self.Z )所以对比Π-MODEL,Temporal的一致性约束更平滑,整体效果更好,计算效率更高,因为每个样本只需要预测一次,但是移动平均的引入会占用更多内存~Mean老师的意思Teacher在Ensemble实施的方案是根据Temporal进行调整的。
Temporal Ensemble 是每个样本的模型预测,因此每个样本的移动平均值在每个 epoch 中只更新一次,而 Mean Teacher Ensemble 是模型参数,这样在每一步,学生模型的更新都会反映在当前的模型中关于教师模型。和Temporal很相似的一个公式,唯一的区别是上面的Z是模型输出,下面的θ是模型参数。
类似地,当α=0时,Mean Teacher也退化为Π-MODEL。所以训练过程如下。
学生模型计算并输出每个随机增强样本的每个步骤。学生模型权重将移动并更新教师模型的权重。
更新后的教师模型在随机增强后计算并输出相同的样本。计算教师和学生模型的预测结果。
这里还使用一致性损失、MSE监督损失+一致性损失来联合更新学生模型参数。 Mean Teacher 比 Temporal 更好,但是在计算效率上,它和 Π-MODEL 一样需要预测两次,所以比 Temporal 更好。
速度慢很多,而且由于需要存储模型参数的移动平均值,所以内存占用也很让人头疼。所以Mean Teacher并没有做任何相关实现,对大模型不太友好~Ensemble上面的噪声注入和训练技巧需要一些特定的训练技巧。
训练初期,模型应围绕监督目标,逐步增加一致性损失的权重。在时间系综上更容易解释,因为当 epoch=0 时,\hat{z} 无法获得前一个。
epoch的预测结果,所以一致性损失权重为0。代码支持线性、余弦、sigmoid等三种权重预热方案。
原文使用sigmoid代码语言: javascript copy def rush_up(cur_epoch, max_epoch, method): """ 根据训练epoch调整未标记损失部分 初始epoch未标记损失权重为0 """ def Linear (cur_epoch, max_epoch): 返回 cur_epoch / max_epoch def sigmoid(cur_epoch, max_epoch): p = 1.0 - cur_epoch / max_epoch return tf.exp(-5.0 * p ** 2) def cosine(cur_epoch, max_epoch): p = cur_epoch / max_epoch 返回 0.5 * (tf.cos(np.pi * p) + 1) 如果 cur_epoch == 0: 权重 = tf.constant(0.0) 否则: 如果方法 == '线性': 权重 = 线性(cur_epoch, max_epoch) elif method == 'sigmoid':weight = sigmoid(cur_epoch, max_epoch) elif method == 'cosine':weight = cosine(cur_epoch, max_epoch) else: raise ValueError('仅支持线性、sigmoid、余弦方法') return tf.cast(魏ght, tf.float32) 标记样本权重 由于上述方案多用于半监督任务,因此需要根据未标记样本的比例调整一致正则部分的权重。最简单的方式就是直接用标记样本的比例来比较上面的权重重新缩放。
注释的比例越高,一致性损失的权重就越高,这可以防止模型过多关注常规项目。损失函数选择:一致性正则性的损失函数是使用MSE还是KL。
两篇论文都进行了比较。虽然 KL 理论上更符合逻辑,因为它对预测的概率分布施加了一致性约束,但总体 MSE 更好。
效果比较好。我猜测和NN容易给出过于自信的预测有关,尤其是像Bert这样的大型模型,会给出0。
这种预测概率在计算KL时容易出现极值。以上两种ensemble策略不仅可以提高半标记样本的效果,添加模糊标签还有以下额外效果:作者还在全标记样本上尝试了自集成效果,预测结果结果也得到改善。
推测这是由于一致性正则化所致。在一定程度上可以提高边缘/模糊标签的样本效果去噪:作者将x%的训练样本分配给随机标签,然后比较常规训练和temporal ensemble的效果。
结果如下。 Temporal对局部标注噪声有很好的降噪效果。
正确样本的监督丢失有助于模型学习文本表示到标签的映射,而正确样本附近的错误标签样本将受到一致性正则的约束,从而减少错误标签对模型的影响。这里在今日头条15类数据集上测试了分类效果。
分别在Fasttext和Bert上测试,左边是原始模型,右边是Temporal Ensemble。考虑到NLP在样本层面的增强效果相对于CV来说比较有限,所以这里的随机增强只使用了Encoder层的Drop out。
原论文是CV领域,所以增强还包括crop/flip等图像增强。第一个是Fasttext,它受到词袋模型本身能力的限制。
即使不添加未标记的样本,仅仅添加 Temporal Consistency Loss 就带来了整体效果的提升。详细参数设置参见checkpoint中的train.log第二个是Bert,添加了来自中新网的无标签样本,但效果比较有限。
主要的改进是在库存类别中,样品很少。这部分与缺乏有效的样本增强有关。
稍后我们将再次尝试时间结合隐藏层增强~ReferenceLaine, S., Aila, T. ()。用于半监督学习的时间集成 arXiv A., Valpola, H. ()。
版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
标签:
相关文章
06-18
06-17
06-17
06-18
最新文章
【玩转GPU】ControlNet初学者生存指南
【实战】获取小程序中用户的城市信息(附源码)
包雪雪简单介绍Vue.js:开学
Go进阶:使用Gin框架简单实现服务端渲染
线程池介绍及实际案例分享
JMeter 注释 18 - JMeter 常用配置组件介绍
基于Sentry的大数据权限解决方案
【云+社区年度征文集】GPE监控介绍及使用