当前位置: 首页 > 编程日记 > 正文

新技术“红”不过十年,半监督学习为什么是个例外?

640?wx_fmt=jpeg

作者 | 严林
来源 | 授权转载自知乎(ID:严林)

这一波深度学习的发展,以2006年Hinton发表Deep Belief Networks的论文为起点,到今年已经超过了10年。从过往学术界和产业界对新技术的追捧周期,超过10年的是极少数。从深度学习所属的机器学习领域来看,到底什么样的方向能够支撑这个领域继续蓬勃发展下去,让学术界和产业界都能持续投入和产出,就目前来看,半监督学习是一个很有潜力的方向。

机器学习范式的发展

传统机器学习的解决路径可以表示为:

ML Solution = ML expertise + Computation + Data

其中ML expertise是机器学习专家,负责特征工程、机器学习模型设计和最终的训练,是整个机器学习解决方案效果的关键因素。Computation是计算能力,代表具体选择什么的硬件去承载专家设计的优化方案。这个部分一般来说穷有穷的打法,富有富的策略:以CTR预估为例,小厂设备不多,资源不足,那么可能GBDT就是一个不错的选择;大厂的话,资源相对富裕,那么各种DNN就上来了。Data无论做什么业务,或多或少也都有一些,C端产品的话,上线后总会有用户反馈可以做为label;B端产品的话,以我曾经搞过的图片识别为例,定向爬虫和人工标注也能弄到有标签样本。Data总会有,无外乎多少的区别。

这里就存在一个问题,Computation和Data即便有了,也不一定有很匹配的人来把整个事情串联运用起来,发挥最终的价值。21世纪,最贵的是人才;为什么贵?因为稀缺。于是大家就在想,能不能把机器学习问题的解决路径改为:

New ML Solution = 100x Computation + 100x Data

简而言之,就是用更多地Computation和Data代替人的作用。100x Computation替代人工模型设计,这两年也得到了长足的发展,这就是AutoML。狭义的来看AutoML,NAS和Meta Learning在学术界工业界都有不错的进展。尤其是NAS,2017年Zoph和Le发表的Neural Architecture Search with Reinforcement Learning作为引爆点,快速形成了一个火爆的研究领域,主要思路是通过RNN controller来sample神经网络结构,训练这个网络结构,以这个网络结构的指标作为RL的reward优化这个controller,让这个controller能够sample出更有效的网络结构。

640?wx_fmt=jpeg

Controller训练过程

这个领域后续还有一些列出色的工作,但由于不是今天讨论的重点,暂且按下不表,有时间再写一篇关于NAS的从认知到实践。

100x Data听上去就是一个很有诱惑力的事情,因为更多的数据,往往意味着更好的效果。以最近异常火爆的BERT和GPT2,都被认为是大力出奇迹的暴力美学典范。大量的数据带来效果提高了人们对当前AI的认知边界,GPT2生成的文本就是一个很好的例子。但是数据规模的扩大,往往意味着某方面成本的提升。广告CTR预估,100x的样本要么是DAU增长了100倍,要么是出了100x的广告(估计会被用户打死的),都不太真实;图片的人工标注增长100x即便金钱成本能接受,时间成本也太长,猜想ImageNet如果1亿标注样本,估计CV的发展还会有更多的爆发点。

在谈半监督学习的进展前,我们先看看另一个机器学习方向在解决数据不足和数据稀疏上的努力。

Multi-Task Learning

Multi-Task Learning是指不同的任务之间通过共享全部或者部分模型参数,相互辅助,相互迁移,共同提高的机器学习方法。实际使用过程中,Multi-Task Learning由于多个任务共享参数,还能带来Serving Cost的下降,在学术界和工业界都有不少相关工作,并且在一些数据上取得了不错的进展。

Multi-Task Learning由于不同任务之间可以相互辅助学习,往往数据稀疏的任务能够从数据丰富的任务收益,得到提高,同时数据丰富任务还不怎么受影响或者微弱提升。这在一定程度上缓解了数据量的需求。

最近几年比较好的Multi-Task Learning工作,首先让我比较有印象的是Cross-stitch。Cross-stitch通过在Multi-Task的表达学习中,通过权重转换矩阵 \alpha_{AB} 或者 \alpha_{BA} 直接获得另一个任务的中间表示信息,这种方案在效果上比传统的Shared Bottom灵活,也减少了模型参数被某一个任务完全主导的风险。

640?wx_fmt=jpeg

Cross-stitch子结构

后来的ESSM跟Cross-stitch有异曲同工之妙,只是将任务的学习方向改为单向:pCVR单向从pCTR中学习,以满足业务上的逻辑因果关系。

640?wx_fmt=jpeg

ESSM学习框架

Multi-Task Learning最近比较有意思的工作,SNR应该算一个,思路主要收到Mixture-of-Expert的启发(Outrageously Large Neural Networks: The Sparsely-Gated Mixture-of-Experts Layer:这篇文章背后的思想其实是Google解决大规模机器学习的新思路,完全值得开篇另述!),不同的任务走不同的网络路由,即不同的任务会由不同的Experts组合预估,而Experts总量固定,在不同任务间是部分共享的。对比Cross-stitch,每个任务都必须使用另外任务的信息,这种网络架构设计,使得不同任务的Expert既有独立又有共享。具体的独立和共享方式,每个任务通过模型训练学习得到,比较好的平衡了任务的独立性和共通性。SNR还使用了稀疏路由的思想,使得每个任务在保证效果的前提下经过最少的Experts,降低计算量。

640?wx_fmt=jpeg

Multi-Task Learning在学术界和工业界都获得了不俗的成绩,但是也有一个要命的短板,需要另外一个数据丰富且能够学习比较好的任务帮忙。这个要求限制了Multi-Task Learning发挥的空间,因为很多情况下,不仅没有其他任务,仅有的任务label也很匮乏,于是半监督学习就有了用武之地。

半监督学习

半监督学习通常情况下,只有少量的有label数据,但是可以获得大量的无label数据,在这种情况下希望能够获得跟监督学习获得相似甚至相同的效果。半监督学习的历史其实已经也比较久远了,2009年Chapalle编著的Semi-Supervised Learning,就对其定义和原理做了详细介绍。在计算力随着深度学习的热潮快速发展的同时,大量的label贫困任务出现,于是半监督学习也越来越重要。

半监督学习近两年最有亮点的工作当属发表在EMNLP'2018的Phrase-Based & Neural Unsupervised Machine Translation,大幅提升了半监督机器机器翻译的SOTA。

640?wx_fmt=jpeg

翻译训练过程示意

在整个训练过程中,B)先对其两种语言的work级别翻译,然后C)针对两种语言分别学一个Language Model,获得语言分布,最后D)再根据语言分布反复使用Back-Translation在已知的少量句对上翻译获得最终模型。这种方案大幅提高了在对齐句对不多的语种之间的翻译质量,同时由于其novelty,获得了EMNLP'2018的Best Paper Award,初读此文时有一种眼前一亮的感觉。(尽管标题叫Unsupervised Machine Translation,但是实际上利用到了部分label数据,我更愿意将其归类为Semi-Supervised Machine Translation。)

最近Google的研究人员又提出来一种新的半监督训练方法MixMatch,这种方法号称是Holistic的,综合运用了:A)distribution average; B)temperature sharpening; C)MixUp with labeled and unlabeled data. 其训练过程如下:

640?wx_fmt=jpeg

这个方法在CIFAR-10上只有250个label时能将错误率从38%降到11%,令人印象深刻。『江山代有才人出』,另一波Google的研究人员提出了UDA,在我看来这种方法更为彻底,也更加End-to-End。UDA主要利用数据分布的连续性和一致性,在输入有扰动的情况下,输出应该保持稳定,于是对于unlabeled data增加了一个损失函数:

640?wx_fmt=jpeg

即有扰动和无扰动的unlabeled data的预估分布的KL距离应该非常小,同时数据扰动用尽可能贴近任务本身的方法去做,比如图像用AutoArgument,文本用上面提到的Back-Translation和Word Replacement。

640?wx_fmt=jpeg

UDA训练示意

UDA的效果在文本和图像上都得到了很好地验证,大幅降低标注数据不足情况下得错误率;更值得关注的一点是,即便在ImageNet这种标注数据已经非常多的情况下,再使用UDA依然能带来效果的提升,说明UDA在数据分布拟合上具有很好地通用性。

结语

总体来看,半监督机器学习无论是采用聚类、图传播、数据增强还是泛化学习,主要依据的理论基础都是labeled和unlabeled data在分布上的连续性和一致性,因此机器学习方法可以利用这点进行有效的结构化学习,增强模型的表征能力,进而很好地提高预测效果。虽然半监督机器学习已经取得了一些很好的结果,从近两年ICML、ICLR和NeurIPS等会议看,相关工作也越来越多,但是还远没有到CV中的ResNet和NLP中的BERT的水平,要实现100x Data真正发挥作用,还需要学术界和工业界共同努力。

原文链接:https://zhuanlan.zhihu.com/p/67692664

(*本文为 AI科技大本营转载文章,转载请联系作者)


公开课精彩推荐



本次课程将会介绍如何利用TensorRT加速YOLO目标检测,课程将会着重介绍编程方法。本次课程还会涉及到 TensorRT 中数据类型,流处理,多精度推理等细节的展示。本次课程特色是讲解+示例分享。本次课程中,QA也是一个非常精彩的环节。


640?wx_fmt=jpeg


640?wx_fmt=jpeg


推荐阅读

  • 拍照技术烂?实时在线AI构图模型VPN,让你变身摄影大神!

  • 继往开来!目标检测二十年技术综述

  • 阿里巴巴杨群:高并发场景下Python的性能挑战

  • 为Python回测代码提升10倍性能,具体做了哪些?

  • 鸿蒙将至,安卓安否?

  • 面试阿里,我还是挂在了第四轮……

  • 独家对话V神! 质疑之下的以太坊路在何方?

  • 那些去德国的程序员后来怎么样了?


640?wx_fmt=png你点的每个“在看”,我都认真当成了喜欢

相关文章:

常用Linux路由命令(route、ip、ifconfig等等)

第一组命令: ifconfig, ifup, ifdown 1) ifconfig 作用:手动启动、观察与修改网络接口的相关参数,包括IP地址以及MTU大小等。 例1.1:暂时修改IP地址 # ifconfig eth0 192.168.100.100 例1.2:修改IP地址、掩码和MTU # i…

洛谷P1074 靶形数独(跳舞链)

传送门 坑着&#xff0c;等联赛之后再填&#xff08;联赛挂了就不填了233&#xff09; 1 //minamoto2 #include<iostream>3 #include<cstdio>4 #include<cstring>5 using namespace std;6 #define getc() (p1p2&&(p2(p1buf)fread(buf,1,1<<21,…

直播写代码|英伟达工程师亲授如何加速YOLO目标检测

NVIDIA TensorRT是一种高性能深度学习推理优化器和运行时加速库&#xff0c;可以为深度学习推理应用程序提供低延时和高吞吐量。通过TensorRT&#xff0c;开发者可以优化神经网络模型&#xff0c;以高精度校对低精度&#xff0c;最后将模型部署到超大规模数据中心、嵌入式平台或…

OpenCV的cvLoadImage函数

转自&#xff1a;http://lijian2005lj.blog.163.com/blog/static/2569113720091111104856644/ 一直不太懂得cvLoadImage的第二个参数&#xff0c;今天知道&#xff0c;原来第二个参数是指定读入图像的颜色和深度。 指定的颜色可以将输入的图片转为3信道(CV_LOAD_IMAGE_COLOR)也…

DX11 preprocessor Dynamic shader linkage

&#xff08;参照例子DXSDK sample&#xff1a;DynamicShaderLinkage11&#xff09; 一、preprocessor 实现shader静态分支的经典方法&#xff0c;代码示例如下 shader中(如果显卡不支持DX11&#xff0c;则STATIC_PERMUTE为True)&#xff1a; #if !defined( STATIC_PERMUTE )iB…

OpenCV中与matlab中相对应的函数

1、matlab中的imread相当于OpenCV中的cvLoadImage(imageName, CV_LOAD_IAMGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR)&#xff1a;读出的图像信息保持了原有图像的信息(包括通道信息和位深信息)&#xff1b; rgb2gray相当于cvLoadImage(imageName, CV_LOAD_IMAGE_GRAYSCALE)&…

AI假新闻满天飞,打假神器GROVER帮你看清一切

最近AI换脸术与AI假新闻叠加在一起&#xff0c;造成了不少乌龙事件&#xff0c;比如最近美国的议长南希佩洛西就的一段醉酒视频就在Facebook上流传甚广&#xff0c;视频中的议长明显是状态晕沉&#xff0c;醉意十足&#xff0c;不过这后来被证明是一段是由deepfake生成的假视频…

NYOJ 93

汉诺塔&#xff08;三&#xff09; 时间限制&#xff1a;3000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;3描述在印度&#xff0c;有这么一个古老的传说&#xff1a;在世界中心贝拿勒斯&#xff08;在印度北部&#xff09;的圣庙里&#xff0c;一块黄铜板上插着三根宝…

C/C++中二维数组作函数形参时,调用函数时,可传递的实参类型的小结

转自&#xff1a;http://blog.163.com/tianhityeah/blog/static/165747821201052195212719/ #include<iostream>using namespace std;int fun(int a[][3],int n) // 其中二维数组形参必须确定数组的第二维的长度&#xff0c;第一维长度可以不定//int fun(int (*a)[…

打破欧美垄断,国防科大斩获“航天界奥林匹克”大赛首冠

整理 | Jane责编 | 一一出品 | AI科技大本营&#xff08;id&#xff1a;rgznai100&#xff09;近日&#xff0c;第十届国际空间轨道设计大赛&#xff08;GTOC X&#xff09;结束并公布最终成绩&#xff0c;中国参赛队国防科技大学与西安卫星测控中心联队&#xff08;NUDT&X…

Hive 中的变量

Hive的变量前面有一个命名空间&#xff0c;包括三个hiveconf&#xff0c;system&#xff0c;env&#xff0c;还有一个hivevar hiveconf的命名空间指的是hive-site.xml下面的配置变量值。system的命名空间是系统的变量&#xff0c;包括JVM的运行环境。env的命名空间&#xff0c;…

你必须非常努力,才能看起来毫不费力

有一群人&#xff0c;他们积极自律&#xff0c;每天按计划行事&#xff0c;有条不紊&#xff1b;他们不张扬&#xff0c;把自己当成最卑微的小草&#xff0c;等待着人生开出花朵的那天。他们早晨5点多起来健身&#xff0c;你在睡觉&#xff1b;7点开始享受丰盛的早餐&#xff0…

cvGetSubRect与cvMul用法

1、对于cvGetSubRect(mat1, mat2, rect)&#xff0c;当用cvGetSubRect函数时&#xff0c;不能事先对mat2申请内存&#xff0c;否则会产生内存泄漏。 只要这样定义mat2即可&#xff1a;CvMat *mat2; mat2 cvCreateMatHeader(imgHeight, imgWidth, CV_64FC1); 2、对于cvGetSubR…

浅谈WPF的VisualBrush

原文:浅谈WPF的VisualBrush首先看看VisualBrush的解释&#xff0c;msdn上面的解释是使用 Visual 绘制区域&#xff0c;那么我们再来看看什么是Visual呢&#xff1f;官方的解释是&#xff1a;获取或设置画笔的内容&#xff0c;Visual 是直接继承自DependencyObject&#xff0c;U…

AI换脸技术再创新高度,DeepMind发布的VQ-VAE二代算法有多厉害?

作者 | beyondma转载自CSDN网站近日DeepMind发布VQ-VAE-2算法&#xff0c;也就是之前VQ-VAE算法2代&#xff0c;这个算法从感观效果上来看比生成对抗神经网络&#xff08;GAN)的来得更加真实&#xff0c;堪称AI换脸界的大杀器&#xff0c;如果我不说&#xff0c;相信读者也很难…

cisco设备常用命令

router> enable 从用户模式进入特权模式 router# disable or exit 从特权模式退出到用户模式router# show sessions 查看本机上的TELNET会话router# disconnect …

opencv图像处理梯度边缘和角点

转自&#xff1a;http://blog.sina.com.cn/s/blog_4b9b714a0100c9f7.html 梯度、边缘和角点 Sobel 使用扩展 Sobel 算子计算一阶、二阶、三阶或混合图像差分 void cvSobel( const CvArr* src, CvArr* dst, int xorder, int yorder, int aperture_size3 ); src 输入图像. dst …

性能全面超数据库专家,腾讯提基于机器学习的性能优化系统 | SIGMOD 2019

腾讯与华中科技大学合作的最新研究成果入选了国际数据库顶级会议SIGMOD的收录论文&#xff0c;并将于6月30日在荷兰阿姆斯特丹召开SIGMOD 2019国际会议上公开发表。入选论文的题目为“An End-to-End Automatic Cloud Database Tuning System Using Deep Reinforcement Learning…

swift 语言评价

杂而不精&#xff0c;一团乱麻&#xff01;模式乱套&#xff0c;不适合作为一门学习和研究语言。 谢谢 LZ 介绍&#xff0c;看完之后更不想用 Swift 了。从 C那里抄个 V-Table 来很先进嘛&#xff1f;别跟 C一样搞什么 STL 就好了&#xff0c;整这么复杂&#xff0c;入个门都需…

Creative Web Typography Styles | Codrops

Creative Web Typography Styles | Codrops. 非常好的文字效果

OpenCV 图像采样 插值 几何变换

转自&#xff1a;http://hi.baidu.com/xiaoduo170/blog/item/6eefc612c9f8e9c6c2fd786f.html InitLineIterator 初始化线段迭代器 int cvInitLineIterator( const CvArr* image, CvPoint pt1, CvPoint pt2, CvLineIterator* line_iterator, int connectivity8 ); image 带采…

centos 6.* 修改时间

一、查看Centos的时区和时间 1、使用date命令查看Centos时区 [rootVM_centos ~]# date -R Mon, 26 Mar 2018 19:14:03 0800 2、查看clock系统配置文件 [rootVM_centos ~]# cat /etc/sysconfig/clock ZONE"Asia/Shanghai" 3、查看系统的硬件时间&#xff0c;即BIOS时间…

别光发Paper,搞点实际问题

文 / LVS话说几个月前&#xff0c;我参加了一场学术大会&#xff0c;台上的教授不是北大、清华就是浙大、上交大&#xff0c;几位教授不约而同的吐槽招通信、算法和编解码的学生太难了。为什么呢&#xff1f;原来&#xff0c;先不比金融&#xff0c;仅仅与同是IT领域的AI专业就…

spring mvc文件上传小例子

spring mvc文件上传小例子 1.jsp页面 <%page contentType"text/html;charsetUTF-8"%> <%page pageEncoding"UTF-8"%> <% taglib prefix"c" uri"http://java.sun.com/jsp/jstl/core"%> <% taglib prefix"fmt…

解密Kernel:为什么适用任何机器学习算法?

作者 | Marin Vlastelica Pogančić译者 | 陆离编辑 | 一一出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;机器学习中Kernel的秘密&#xff08;一&#xff09;本文探讨的不是关于深度学习方面的&#xff0c;但可能也会涉及一点儿&#xff0c;主要是因为…

03-Java的基础语法

一个Java程序可以认为是一系列对象的集合&#xff0c;而这些对象通过调用彼此的方法来协同工作。下面简要介绍下类、对象、方法和实例变量的概念。 对象&#xff1a;对象是类的一个实例&#xff0c;有状态和行为。例如&#xff0c;一条狗是一个对象&#xff0c;它的状态有&…

图像处理-仿射变换 AffineTransform

转自&#xff1a;http://fairywangyutang.blog.sohu.com/146834554.html AffineTransform类描述了一种二维仿射变换的功能&#xff0c;它是一种二维坐标到二维坐标之间的线性变换&#xff0c;保持二维图形的“平直性”&#xff08;译注&#xff1a;straightness&#xff0c;即变…

以前初学php用的分页函数

page.php <?php /* *http://www.iiwnet.com/php/ PHP学习 * */ function _PAGEFT($totle, $displaypg 20, $url ) { global $page, $firstcount, $pagenav, $_SERVER; $GLOBALS["displaypg"] $displaypg; if (!$page) $page 1; if (!$url) { $url $_SERVER[…

深度有趣 | 27 服饰关键点定位

简介 介绍如何使用CPM&#xff08;Convolutional Pose Machines&#xff09;实现服饰关键点定位 原理 关键点定位是一类常见而有用的任务&#xff0c;某种意义上可以理解为一种特征工程 人脸关键点定位&#xff0c;可用于人脸识别、表情识别人体骨骼关键点定位&#xff0c;可用…

有答案了!一张图告诉你到底学Python还是Java!你咋看?

2019年&#xff0c;该学Java还是Python&#xff1f;不&#xff0c;实际上应该这样问&#xff1a;都9102年了&#xff0c;难道有谁不想成为Python程序员吗&#xff1f;作为“常青树大佬”Java 和“新晋大佬”Python &#xff0c;经常被人拿来对比&#xff0c;对于刚开始起步学习…