雷锋网(公众号:雷锋网) AI 科技评论按:苹果一出手就要解决人工智能的瓶颈问题,野心不可谓不大,但是效果也不可谓不好,最近的一篇机器学习方面的论文就巧妙地解决了训练数据收集方面的大问题,不仅已经被CVPR2017收录,刚刚上线的Apple Machine Learning Journal(机器学习日记)网站上的第一篇博文也就是这篇论文的介绍。

7月19日刚刚上线的“苹果机器学习日记”网站,相比其它硅谷IT公司的 AI 研究院 Blog 可谓是姗姗来迟,大家等待苹果正式加入知识开放、动作迅速的 AI 研究大家庭已经很久了。不过让人欣喜的是,第一篇博文就能帮苦于没有大量训练数据的研究者们解决不小的麻烦。雷锋网 AI 科技评论对论文的主要内容介绍如下。

苹果要降低准备训练数据的成本

对于现阶段的各种人工智能来说,用数据对它们进行训练是一个必不可少的环节,而且数据的质量会极大地影响人工智能的表现。比如以4:1击败李世石的 AlphaGo 是用海量的人类棋谱训练的,李世石当时也评价 AlphaGo 的棋风有一些人类的影子;而接近两个月前以 3:0 战胜柯洁的 AlphaGo Master 版就是用海量的 AlphaGo 高质量自我对局训练的,去年抛出“狂言”的柯洁今年只能甘拜下风。

人工智能要先看过很多猫的照片,同时还要告诉它每一张照片里都是猫

围棋之外还有一个典型的人工智能应用是图像识别,人工智能要先学习过成千上万张人类分好的、已经标注过“猫”的猫咪照片,才能学会识别其它图片里的猫。业内训练图像识别系统一般用的都是一百万张级别的带标注图像,而财大气粗的谷歌上周刚刚雄辩地证明了如果用别人的300倍那么多的图像(3亿张),可以让识别正确率进一步上升。只是如此数量的图像已经没办法让人类亲自标注了,谷歌也是用了各种手段才凑出了这么多的图像。

“凑更多的图像”,或者说数据增补,有一种常见的方法是设计一个图像模拟器,让它仿照手里已有的、分好类的真实图像,生成同类的图像,新生成的图像就还是带有标注的,可以用于人工智能模型的训练。这种方法的成本就比人低多了,但是用图像模拟器生成的图像往往不如原有的图像真实,训练出的模型效果就不理想。

选对思路很重要:提高图像真实性

所以苹果的机器学习研发团队就琢磨了,既然我能轻松地生成带有标注的图像,然后它们的真实性不够好,那我直接在这些图像的基础上提高真实性行不行呢?整篇论文要解决的就是这个问题。

基于提高真实性的思路,他们仿照GANs(对抗性生成式网络)的模式,设计了一种提高图像真实性的美化网络。这种美化网络里包含一个“美化器” R 和一个“鉴别器” D,美化器要想办法把现有的生成的图像变得更真实,然后把经过这种美化以后的图像拿给鉴别器看;鉴别器则掌握着一批真实图像,参考真实图像鉴别美化以后的图像是不是真的。

美化器的目的是输出更真实的图像来骗过鉴别器,让它分不出来真伪;鉴别器则要不断提高自己的姿势水平,不能被美化器骗过了。这两个角色会交替更新,美化器输出的图像越来越逼真,鉴别器的鉴别能力也水涨船高。最终等到鉴别器怎么都区分不出来真实的图像和美化后的图像了,这个美化网络就学习完成了。

如图是美化网络的示意图,图像模拟器生成的图像经过美化器 R 的处理以后变得更真实了,鉴别器 D 起到促进美化器 R 进化的作用。

苹果论文中的美化网络范式与 GANs 有类似之处,都是利用鉴别器 D 的对抗性促进网络输出图像质量的提升;不过 GANs 是使用一个生成器 G 从输入向量完全生成一张新图像,苹果论文的美化网络中把生成器 G 换成了美化器 R,只是对已有图像做一些美化调整。

另一方面,苹果的机器学习研发团队提出这种美化网络的目的既然是为了降低“凑图像”的成本,他们可没有忘了把降低成本的目的执行到底。还记得刚才我们说鉴别者网络要手握一批真实图像做参考吗,假如这批用作参考的真实图像也全都是有标注的,这部分人工费就还是要出。能不能把这笔钱也省了呢?苹果的研究员们告诉你,能!鉴别器参考用的图像可以是没有标注的!

网络设计

提高真实性的想法很好,要怎么引导美化网络的学习从而得到理想的效果呢?苹果的研究员们动了这些小心思

关键点1:用新设计的鉴别器避免图像出现瑕疵

以往基于 GANs 的研究中,由于生成器 G 和鉴别器 D 之间是一面对抗一面交替迭代更新的,这就会导致生成器 G 倾向于过分强化图像中的某一些特征,鉴别器 D 也跟着去重点关注这些特征,结果就会造成像素的漂移、在图像中形成瑕疵。这些瑕疵最终会成为网络学习结果的一部分,就降低了输出图像的真实性。

由于苹果论文的美化网络同样具有“边对抗边交替迭代更新”的特点,GANs 上出现的这个问题也很容易出现在美化网络里。苹果的研究员们仔细研究以后对传统的鉴别器 D 做了一些调整,它不再像以往的方法那样对图像进行整体鉴别,而是把整幅图像看作许多小块,然后分别对所有小块的像素特征进行分类,然后统计每个块的对抗失真损失;图像偏离真实图像越远,损失就越大。这种图像分割的做法虽然限制了鉴别器的感受野和识别容量,但是对图像细节的关注更多、更平均,对它对抗的美化器从每幅美化后的图像接收到的对抗失真损失反馈也是多个局部值的总和,从而能够获得更大的提升,训练后生成图像的效果更好。

局部对抗性失真损失的示意图。鉴别器对每幅图像输出一个与原图同大小的概率表。对抗性失真损失的损失函数就是来自所有局部像素块的交叉熵损失的和

关键点2:要保持图像的标注

美化网络美化之后的图像是要作为别的模型的训练数据的,那么如何保证美化前后的图像对应的标注保持不变呢?以这篇论文中所使用的数据库为例,图像中眼睛注视的角度在美化前后不能有明显变化,不然就前功尽弃了。

为了保持图像标注,苹果的研究员们让网络把美化前后的图像进行对比,根据两幅图像间的区别设立一个“自我正则L1损失”(self-regularization L1 loss)项;图像间区别越大,损失项就越大。

这样,上文提到的“局部对抗性失真损失”、与这项“自我正则L1损失”组合起来,构成了学习过程的优化目标:让这两项损失的组合最小。这样网络输出的图像就又有高真实度,又能够保持标注不变。

关键点3:给鉴别器加上记忆功能

抽象一点讲,模拟器生成+美化器美化后的图像并不是真正的真实图像,但是只要这样的图像的特征分布与真实图像的特征分布相同,鉴别器就区分不出来,就达到了引导美化网络学习的目的了。

理论上,以往 GANs 模型中的鉴别器手握着真实图像,它就知道真实图像的特征分布(目标分布),只要生成器拿给鉴别器的图像不符合真实图像的分布,它就能够辨认出来。但是目前的水平上实际很容易发生的一件事是,生成器生成的图像符合的是另一个完全不同的新分布,然后与之对抗的鉴别器不得不学到一个与之临近的分布才能进行鉴别,这样的后果就是鉴别器不能保证总是让生成器生成的分布更靠近目标分布。两者边对抗边进化的效果很差,就像如下左图那样。

利用历史图像帮助鉴别器提高的想法的示意图,生成器和鉴别器的分布分别用橙色和浅蓝色表示。图示是简化版本,实际分布可能是复杂的、很少连成一片的

为了改善这个问题,苹果的研究人员们在鉴别器中加入了一个历史记忆的功能,让它可以存储生成器在以前的迭代过程中生成的图片,这样鉴别器就更不容易忘记图像空间中它曾经学过的区域。那么更强的鉴别器就可以帮助生成器更快地向着目标分布前进,如上图的右图。

把这个想法再说明白一点,就是直到网络的训练结束前,任意时刻、任意一张美化器美化出的图像对鉴别器来说其实都是“假图像”,那么如果鉴别器从来都不会忘记自己曾经认出来过的假图像,美化器也就“不得不”生成越来越真实的图像。

这种想法在网络中的实现也很简单,苹果的研究人员们在鉴别器中设置了一个随机替换缓冲区,其中存储了更早的假图像。鉴别器迭代时所用的 mini-batch 中有一半的图像会来自这个缓冲区,另一半来自生成器或者美化器当前生成的图像。这样相每个 mini-batch 中都包含一定数量的历史图像,经过测试表明这样的做法对训练过程有明显的提升。

训练鉴别器 D 所用的每个mini-batch都同时含有当前迭代的生成器生成的图像和来自缓冲区的更早的假图像

训练过程

苹果的研究人员们一并介绍了训练过程和其中的一些小技巧供其它的研究人员们参考

只用正则化损失项进行初始化

上文提到,网络的学习优化目标是“局部对抗性失真损失”与“自我正则L1损失”组合起来最小,不过初始化的阶段只使用了“自我正则L1损失”以生成与输入的生成图像尽可能接近的图像,美化器会逐渐生成输入图像的模糊版本。根据论文介绍,经他们实验一般的美化器G需要迭代500到2000轮,然后再加入“局部对抗性失真损失”。(这时候鉴别器D还没有参与训练)

每轮迭代中步骤数目不同

在每轮训练迭代中,苹果的研究人员们对生成器和鉴别器使用的迭代步骤数目是不同的。对于需要用到深度数据的手部姿态估计,生成器 G 每迭代2次,鉴别器 D 只迭代一次;在眼部注视方向预测的实验中,尝试调优的最终结果是,生成器 G 每迭代50次,鉴别器 D 才需要迭代一次。他们发现鉴别器的收敛速度比生成器更快,有部分原因来自鉴别器的训练批量大小。所以他们的调优办法是先把鉴别器的迭代次数锁定为一次,然后从较小的数字开始尝试不同的生成器的迭代次数,根据鉴别器的损失函数逐渐增加,调整至损失函数平衡。

损失示意图

这是训练中不同阶段的鉴别器和生成器/美化器损失的图示。可以看到,鉴别器的损失一开始很小,说明它可以轻易地分辨美化后的图像和真实的图像。然后随着训练进行,鉴别者的损失逐渐上升,生成器的损失逐渐减小,输出的图像越来越真实。

随着训练进行,美化器的输出不断变化。一开始是模糊的图像,然后网络逐渐学会了重现真实图像中的细节

低学习速率;目视作为停止条件

苹果的研究人员们发现,用很小的学习速率(0.0001左右)学习很长时间可以得到比较好的效果。他们猜想这种方法之所以效果不错可能是因为生成器和鉴别器中的任意一个一旦有大的变化都会直接甩开对方,学习就难以收敛。对于停止条件,他们则表示很难通过训练损失的值做判定,所以转而选择了保存训练过程中的所有图片,然后在网络输出的图片肉眼看起来与真实图像非常相近的时候手工停止训练。

实验结果

说了这么多,网络的效果到底怎么样呢?当然是很好啦。

首先是一个验证实验,验证美化后的图像能够保留原有的标注

苹果的研究人员们在美化前后的图像中逐个用椭圆把虹膜圈了出来,然后计算出两个椭圆的中心距。美化前后中心距的区别如下图图示。在对应的生成图像和美化后图像间,用椭圆估计出的瞳孔位置变化相当小,只有1.1+/-0.8像素而已,相对于55像素的眼宽是很小的距离。

生成的图像和美化后图像之间瞳孔中心距离的散点图

然后是定性实验,验证人类肉眼能否区分美化后的图像和真实图像

为了评价美化后图像的视觉质量,苹果的研究人员们设计了一个简单的用户研究,他们让一组被试者分辨图像是真实的还是生成+美化后的。被试者们表示很难从真实图像和美化后的图像中找到区别。根据他们的综合分析结果,10个被试者看了1000组测试图像,其中只有517组正确地分辨出了真实图像,这就表明被试者们不能可靠地分辨真实图像和美化后的图像。作为对比,当每个被试者看10张美化前的生成图像和10张真实图像的时候,200组测试中有162组都能够正确分辨出真实图像。

一些生成的图像和对应的美化后图像的例子

最后是定量实验,用不同的图像训练一个机器学习模型,测试训练后模型的表现

用美化前后的生成图片训练的模型做目视方向预测的结果对比。测试是用真实图像进行的。图中曲线越高越好。

相比与用原始的生成图像训练,用美化后的生成图像训练的模型表现得到了提高。图中有2点值得注意:1,用美化后的图像训练比用原始的生成图像训练的效果更好;2,如果用更多的生成数据,模型的表现还可以得到进一步提高。(比如同样是用经过美化的生成数据,用4倍的数据训练,模型的表现又得到了大幅提高)

苹果的研究人员们还拿出了另一项对比结果:基于同样的数据集,借助生成图像+美化进行数据增补的方法,他们创下了识别错误率的新记录。

基于MPIIGaze数据集的目视方向预测,不同方法的测试结果对比。[2]和[3]分别为来自CVPR2015的「 Appearance-based Gaze Estimation in the Wild」和来自ACM眼动跟踪研究与应用2016的「 Learning an Appearance-based Gaze Estimator from One Million Synthesised Images」

这篇来自苹果机器学习研发团队的论文已经被顶级学术会议CVPR 2017(IEEE国际计算机视觉与模式识别会议)收录,论文原文地址为 https://arxiv.org/abs/1612.07828  ,欢迎感兴趣的读者详细查阅。CVPR2017即将于7月21到26日在夏威夷举行,雷锋网 AI 科技评论也会派出记者亲赴会议现场带来全方位的报道。

本文作者:杨晓凡

本文转自雷锋网禁止二次转载,原文链接

苹果机器学习博客姗姗来迟,不过第一篇文章就给紧缺训练数据的研究者们发糖...相关推荐

  1. 苹果机器学习博客姗姗来迟:使用改进的生成对抗模型,提高图像真实性,降低图像的标记成本

    转自雷锋网 AI 科技评论,原文题目为:苹果机器学习博客姗姗来迟,不过第一篇文章就给紧缺训练数据的研究者们发糖,原文链接:http://mp.weixin.qq.com/s/KP5Ox3TBXtOCV ...

  2. 教程:纯小白如何搭建自己的Github博客并写第一篇博文

    文章目录 1 搭建Github博客 1.1 确认github上创建的repository名称 1.2 用系统命令行安装hexo并初始化本地博客文件夹 1.3 下载并安装hexo NexT主题 1.4 ...

  3. 博客推荐系列第一篇:我收藏的BLOG分类

    BLOG是一个很好的东西,从BLOG,我们发现很多人的精神难能可贵.在我的google reader中也收集了不少的BLOG. 看到有些人的BLOG很过瘾,很受益. 但想起这样一句话"让认识 ...

  4. 注册博客,写第一篇博客

    1.自我介绍. 大家好,我是一棵计算机科学与技术专业的大一白菜.我来到CSDN已经一年了,这是我的第一篇博客,也是我记录编程学习的开始.我的专业兴趣在于网络安全方向,目标是成为某厂中的一员.接下来,我 ...

  5. 2018年的第一篇文章(福利篇)

    由于前段时间在学校比较忙,加上放假 .前半个月小编都没空写博客,今天这篇文章是给大家送福利的,后面我会不断更新我的博客,坚持做到每日一篇博客,大家有什么问题的也可以在我博客给我留言,我看到的都会回复大 ...

  6. 旧博客停更,新账号下第一篇文章:【基础篇】Android studio Gradle 下载慢方案

    旧账号博客链接:https://blog.csdn.net/hjz19921130 这是我新账号下第一篇文章: 可以解决初学者在gradle上遇到下载的问题而烦恼(让害怕装ide的同学走出恐惧): A ...

  7. 博客专栏第一篇文章——我眼里的DBA

    在专职DBA工作一年过一个月以后,开通了CSDN的博客专栏,在第一篇文章中,我谈谈一年DBA生涯的感想,虽然我是SQL Server的DBA,但是我觉得本文适合所有DBA,顺便把这篇文章作为个人真正D ...

  8. 博客园写的第一篇文章

    09年5月21号,cnblogs.com上的第一篇文章. 07年计算机专业毕业到现在已经工作两年了,一直对软件开发者充满了敬仰.自己一直也在向这个方向努力,高等教育的现实的脱节,不是谁的错,在学校唯有 ...

  9. 篇百度前员工发表的博客,在这篇长文里回忆了他离开百度的原因、他眼中的百度乱

    这是一篇百度前员工发表的博客,在这篇长文里回忆了他离开百度的原因.他眼中的百度乱象以及对百度文化的反思.全文转载,无删减.          1.离开          离开百度已经一年多了.     ...

最新文章

  1. 180 所高校新增“人工智能”专业,人工智能火到爆!
  2. postDelayed总结
  3. PHP获取数组最后一个值的2种方法
  4. jQuery获取自身HTML
  5. vue Draggable实现拖动改变顺序
  6. Docker+Nginx部署Angular国际化i18n
  7. 西方餐厅的顶级食材,被中国人干到了“白菜价”
  8. leetcode 290 Word Pattern
  9. 让菜鸟飞上天,简单搞定linux服务器
  10. Java阻塞IO与非阻塞IO
  11. Julia: PyPlot的一些用法整理
  12. 坚持开源、能力内化,中移苏研荣获“中国开源领军企业”大奖!
  13. 吴恩达 深度学习 2021版 笔记
  14. 计算机应用u盘解释,U盘速度测试和参数解释
  15. CDOJ 796 DAGE(Big Brother)
  16. 【数据库学习笔记】Day03 - SQL语言基础及数据库定义功能
  17. 破解mariadb数据库密码
  18. 【Android】SingleTask与SingleInstance的区别
  19. JavaScript学习(十二)原生JS写时钟
  20. ik中文分词器分词原则、原理

热门文章

  1. oracle中正则表达式规则,Oracle SQL 正则表达式
  2. Qt TCP/UDP局域网通信软件 模仿QQ TIM
  3. (Arduino)ESP8266通过局域网通信控制LED
  4. 07-PDI(Kettle)源码编译8.2.0.0.R版本
  5. 后缀是lnk是什么文件_lnk是什么格式_lnk后缀是什么格式
  6. 为什么我从PR里面导出来的视频,在电脑上播放是正常的,微信发给朋友后,形状就变了,扭曲了一样的
  7. linux nand flash模拟u盘,海思g_mass_storage.ko模拟U盘
  8. 短视频底层实操课,让你迅速从短视频新手变成高手
  9. 细讲如何判断文法是否是LL(1)文法
  10. i3 1005g1和i5 10210u哪个好