点击上方,选择星标置顶,每天给你送干货

阅读大概需要8分钟

跟随小博主,每天进步一丢丢

来自 | 知乎  作者 | 糯米稻谷

地址 | https://zhuanlan.zhihu.com/p/100252944

编辑 | 深度学习这件小事公众号

本文仅作学术分享,如有侵权,请联系后台删除

临近毕业,忽然想实现一下一些比较经典的半监督深度学习算法。恰逢一周前有个师妹问我有没有关于半监督深度学习训练技巧的文章,我一想,好像没有,便想自己写一篇。

Talk is cheap, show you my code:

https://github.com/iBelieveCJM/Tricks-of-Semi-supervisedDeepLeanring-Pytorchgithub.com

实现了几个比较经典的半监督深度学习算法,包括 PseudoLabel 2013[1], PI model[2], Tempens[2], MeanTeacher[3], ICT[4] 和 MixMatch[5]。代码刚整理完,可能还有些小问题,请多见谅~(没想到整理代码比写代码还累...orz)

言归正传,本文旨在分享一些我在训练和实现半监督深度学习模型时所发现的一些小Tricks,并没有什么太多理论,只是一些经验,也没有太多实验去支持(毕竟也就写了一周,repo上的一些代码我自己都没完整跑过...orz),大家就看看,希望能对大家有所启发。

注:下面给出的所有模型的实验结果,几乎都在同一实验参数下得出,以方便公平比较,并不是按照论文给出的最佳参数进行训练的。若想复现论文结果,请自行调参。

1. 默认优化参数

第一个我想分享的是,默认优化参数,如下:

  • 优化器:SGD +lr =0.1+momentum =0.9;或 Adam+lr =1e-3

  • 学习率策略:Cosine 学习率退火;或 学习率 warmup

  • Batch中有标签和无标签数据比例:1:1,即在一个batch中,无标签样本量和有标签样本量相等

没有太多的惊喜成分,就是常用的优化配置,但在初始构建一个半监督深度学习模型的时候,也够用了。想要更多的提升,也可以从这个默认的配置进行寻参。

我通常直接使用 SGD+Cosine退火,使用Cosine退火而不是多步衰减是因为懒得调参,效果也相差不大。

当你的半监督模型需要稀疏地更新样本的时候,例如CCL[6],可以尝试 Adam 优化器,或许会有更好的效果。

很多情况下,例如样本量比较少(250个有标签样本的Cifar10实验时),我都建议尝试学习率warmup策略,可能会有奇效(e.g. PI model)。学习率warmup策略会使得模型稳定收敛到不错的性能。

2.两种数据输入方式

讲这个内容前,请容我介绍一些半监督深度学习代价的基本形式:

其中, 











 为有监督代价函数,通常为交叉熵代价。











 为无监督代价函数,也是不同半监督深度学习模型的区别所在。

由于 











 是无监督代价函数,可以作用于有标签数据和无标签数据,因此无监督代价函数的输入出现了两种不同实现方法。在一个batch中,令 











 为输入 











的数据。

  • 方式v1













 中有标签数据和无标签数据按固定比例混合输入。即  ,其中 












 为batch中的有标签数据和无标签数据。

  • 方式v2:

 ,即 











 为整个数据集的随机采样,因此不能保证有标签数据和无标签数据的比例,甚至会出现没有有标签数据的情况。

从目前CIFAR-10实验情况来看,方式v2更好(并不保证orz):

Test error of CIFAR-10 with 4000 labeled samples

3.使用 epoch pseudo labels

Pseudo-Label 2013 提出,使用网络的预测最大概率的类别,作为无标签数据的伪标签。具体解释参考我前面的文章《半监督深度学习小结》,https://zhuanlan.zhihu.com/p/33196506)。

此前我理解为,使用当前的预测类别,作为当前无标签数据的伪标签,我称为 iteration pseudo labels,但效果不太理想。

后来,Tempens[2]源码的实现,是使用上一个 epoch的预测类别,作为当前epoch中无标签数据的伪标签,即 epoch pseudo labels。

CIFAR-10的实验结果对比如下:

Test error of CIFAR-10 with 4000 labeled samples

可以看到,使用 epoch pseudo labels 有非常明显的提升。因此建议大家实现基于伪标签的半监督深度模型时使用 epoch pseudo labels 而不是 iteration pseudo labels。

4. 使用 MixUp loss

最近,使用 MixUp[7]+consistency regularization 成为了新的 SOTA 方法,代表有 ICT和MixMatch。半监督中使用的 Mixup 数据增强形式如下:

即通过线性插值的方式产生新的数据。但是如何利用插值数据有4种方式,令模型为 




 :

其中,CE为交叉熵代价函数,MSE为均方误差代价函数。

CIFAR-10的实验结果对比如下:

Test error of CIFAR-10 with 4000 labeled samples

其中,ICTv1表示使用第一种数据输入方式,ICTv2表示使用第二种数据输入方式。

从实验结果上看到,L3代价项的效果是最好的,而且对代价进行插值的 L3 和 L4 明显比 L1 和L2 的效果好。

半监督深度学习从入门到放弃之路,我终于快走到结束了,希望此文能对想入门的同学有所帮助。

参考
1.Pseudo-Label : The Simple and Efficient Semi-Supervised Learning Method for Deep Neural Networks
2.Temporal Ensembling for Semi-Supervised Learning https://arxiv.org/pdf/1610.02242v1.pdf
3.Mean teachers are better role models https://arxiv.org/pdf/1703.01780.pdf
4.Interpolation Consistency Training for Semi-supervised Learning https://arxiv.org/pdf/1903.03825.pdf
5.MixMatch: A Holistic Approach to Semi-Supervised Learning https://arxiv.org/pdf/1905.02249v2.pdf
6.Certainty-Driven Consistency Loss for Semi-supervised Learning
7.MixUp: Beyond Empirical Risk Minimization https://arxiv.org/pdf/1710.09412.pdf

—完—交流学习,进群备注:昵称-学校(公司)-方向,进入DL&NLP交流群。
方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。广告商、博主勿入!

【Tricks】半监督深度学习训练和实现小Tricks相关推荐

  1. 深度学习 英文 训练阶段_半监督深度学习训练和实现小Tricks

    临近毕业,忽然想实现一下一些比较经典的半监督深度学习算法.恰逢一周前有个师妹问我有没有关于半监督深度学习训练技巧的文章,我一想,好像没有,便想自己写一篇. Talk is cheap, show yo ...

  2. 融合一致性正则与流形正则的半监督深度学习算法

    融合一致性正则与流形正则的半监督深度学习算法 王杰1,2, 张松岩1,2, 梁吉业1,2 1山西大学计算机与信息技术学院 2计算智能与中文信息处理教育部重点实验室 摘要:半监督学习已被广泛应用于大数据 ...

  3. B.3【智能标注】:基于Labelstudio的UIE半监督深度学习的智能标注方案(云端版),提效。

    NLP专栏简介:数据增强.智能标注.意图识别算法|多分类算法.文本信息抽取.多模态信息抽取.可解释性分析.性能调优.模型压缩算法等 专栏详细介绍:NLP专栏简介:数据增强.智能标注.意图识别算法|多分 ...

  4. 半监督学习深度学习算法

    该文章主体摘自知乎糯米稻谷的文章,对一些细节添加了自己的理解 文章链接https 半监督学习 啥是半监督学习(Semi-supervised Learning) 1.简单自训练(simple self ...

  5. 听Alluxio小姐姐讲述:Alluxio云上K8S部署如何加速深度学习训练

    Alluxio云上K8S部署如何加速深度学习训练 在2021 Alluxio Day V中,Alluxio核心研发工程师邱璐,为我们带来[Alluxio云上K8S部署如何加速深度学习训练]的分享 邱璐 ...

  6. 训练过程acc_AI 深度学习训练tricks总结(均有实验支撑)

    ↑↑↑↑↑点击上方蓝色字关注我们! 『运筹OR帷幄』转载 作者:Jones@知乎 作者丨Jones@知乎来源丨https://zhuanlan.zhihu.com/p/261999668编辑丨极市平台 ...

  7. 训练深度学习_深度学习训练tricks整理1

    深度学习训练tricks整理1 环境:pytorch1.4.0 + Ubuntu16.04 参考: 数据增强策略(一)​mp.weixin.qq.com https://zhuanlan.zhihu. ...

  8. 用于光流估计的无监督深度学习DSTFlow

    用于光流估计的无监督深度学习DSTFlow 原文链接 摘要 ​ 最近的工作表明,光流估计可以被表述为一个监督学习问题. 此外,卷积网络已成功应用于此任务. 然而,监督流学习由于缺乏标记的训练数据而变得 ...

  9. Paddle使用半监督式学习完成语句分类

    Paddle使用半监督式学习完成语句分类 语句分类--半监督学习 项目简介: 学习指南 项目描述 数据集介绍 项目要求 数据准备 环境配置/安装 监督式学习 (只使用training_label.tx ...

  10. 基于SE的半监督元学习网络在小样本故障诊断中的应用

    Semi-supervised meta-learning networks with squeeze-and-excitation attention for few-shot fault diag ...

最新文章

  1. Myeclipse中项目没有代码错误提示,jsp页面无编译迹象?如何解决
  2. TypeScript学习笔记之 接口(Interface)
  3. actionscript代码练习作品
  4. js 如何获取class的元素 以及创建方法getElementsByClassName
  5. 换光纤猫 ZXA10 F420
  6. 场景感知:CNN方法对三维重建/slam/实时定位的一些Base改进
  7. 包含以下字段的 struct 怎么解决_S7-300/400进阶笔记4-2:STEP7的“结构”STRUCT数据类型的用法...
  8. JS逆向笔记-记录某测试论坛的js逆向练习
  9. 【API进阶之路】破圈,用一个API代替10人内容团队
  10. java输入两个整数_Java中从键盘输入多个整数的方法
  11. matlab plv,脑电脑网络分析代码使用流程介绍
  12. python snap7 plc_python-snap7-master
  13. tianmao项目的学习笔记
  14. 失业七个月,面试六十家公司
  15. python3.7通过itchat方式登录微信给好友发送天气信息
  16. CallStranger UPnP 漏洞曝光,影响数十亿台设备
  17. 一线互联网大厂中高级Android面试真题收录!大厂直通车!
  18. 微信小程序开发实战9_3 小程序URL Scheme
  19. 电脑上onedrive打不开解决
  20. Norm(范式)的讲解

热门文章

  1. 做一款仿映客的直播App
  2. Android—Socket服务端与客户端用字符串的方式互相传递图片
  3. Picturebox实现图片的缩放
  4. QString字符串中双引号的梗
  5. 启动Tomcat出现Using CATALINA_BASE
  6. JavaScript如何获取css属性
  7. Eclipse自动排版快捷键失效(转)
  8. ASP.NET简化编辑界面 V2
  9. LeetCode:每日一题——数位成本和为目标值的最大数字
  10. HDU 6274 Master of Sequence (暴力+下整除)