苹果一出手就要解决人工智能的瓶颈问题,野心不算小,但是效果也不算不好。最近苹果机器学习研发团队一篇机器学习方面的论文,就巧妙地解决了训练数据收集方面的大问题,不仅已经被顶级学术会议 CVPR 2017(IEEE国际电脑视觉与模式辨识会议)收录,刚刚上线的 Apple Machine Learning Journal(机器学习日记)网站上的第一篇部落格,也就是这篇论文的介绍。
7 月 19 日刚刚上线的“苹果机器学习日记”网站,相比其他硅谷 IT 公司的 AI 研究院 Blog 可谓姗姗来迟,大家等待苹果正式加入知识开放、动作迅速的 AI 研究大家庭已经很久了。不过让人欣喜的是,第一篇部落格文章就能帮苦于没有大量训练数据的研究者解决不小的麻烦。以下就来介绍论文的主要内容。
苹果要降低准备训练数据的成本
对于现阶段的各种人工智能来说,用数据对它们进行训练是一个必不可少的环节,且数据的品质会影响人工智能的表现极大。比如以 4:1 击败李世乭的 AlphaGo 是用大量人类棋谱训练的,李世乭当时也评价 AlphaGo 棋风有一些人类的影子;近两个月前以 3:0 战胜柯洁的 AlphaGo Master 版就是用大量 AlphaGo 高品质自我对局训练的,让 2016 年抛出“狂言”的柯洁今年只能甘拜下风。
▲ 人工智能要先看过很多猫的照片,同时还要告诉它每张照片都是猫。
围棋之外还有一个典型的人工智能应用是图像辨识,人工智能要先学习过成千上万张人类分好的、已经标注“猫”的猫咪照片,才能学会辨识其他图片里的猫。业内训练图像辨识系统一般用的都是 100 万张等级的带标注图像,而财大气粗的 Google 上周刚刚雄辩地证明,如果用别人的 300 倍那么多的图像(3 亿张),可以让辨识正确率进一步上升。只是如此数量的图像已经没办法人类亲自标注了,Google 也是用各种手段才凑出这么多图像。
“凑更多的图像”或说数据增补,有一种常见的方法是设计一个图像模拟器,让它仿照已有的、分好类的真实图像,生成同类的图像,新生成的图像就带有标注,可用于人工智能模型的训练。这种方法的成本就比人工低多了,但用图像模拟器生成的图像往往不如原有的图像真实,训练出的模型效果就不理想。
选对思路很重要:提高图像真实性
所以苹果的机器学习研发团队就琢磨,既然能轻松生成带标注的图像,但它们的真实性不够好,那我直接在这些图像的基础上提高真实性行不行呢?整篇论文要解决的就是这个问题。
基于提高真实性的思路,他们仿照 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 到 2,000 轮,然后再加入“局部对抗性失真损失”(这时候鉴别器 D 还没有参与训练)。
每轮迭代中步骤数目不同
在每轮训练迭代中,苹果的研究人员们对生成器和鉴别器使用的迭代步骤数目是不同的。对于需要用到深度数据的手部姿态估计,生成器 G 每迭代 2 次,鉴别器 D 只迭代一次;在眼部注视方向预测的实验中,尝试调优的最终结果是,生成器 G 每迭代 50 次,鉴别器 D 才需要迭代一次。他们发现鉴别器的收敛速度比生成器更快,有部分原因来自鉴别器的训练批量大小。所以他们的调优办法是先把鉴别器的迭代次数锁定为一次,然后从较小的数字开始尝试不同的生成器的迭代次数,根据鉴别器的损失函数逐渐增加,调整至损失函数平衡。
▲ 损失示意图。
这是训练中不同阶段的鉴别器和生成器 / 美化器损失的图示。可以看到,鉴别器的损失一开始很小,说明它可以轻易地分辨美化后的图像和真实的图像。然后随着训练进行,鉴别者的损失逐渐上升,生成器的损失逐渐减小,输出的图像越来越真实。
▲ 随着训练进行,美化器的输出不断变化。一开始是模糊的图像,然后网络逐渐学会了重现真实图像中的细节。
低学习速率;目视做为停止条件
苹果的研究人员们发现,用很小的学习速率(0.0001 左右)学习很长时间可以得到比较好的效果。他们猜想这种方法之所以效果不错,可能是因为生成器和鉴别器中的任意一个,一旦有大的变化都会直接甩开对方,学习就难以收敛。对于停止条件,他们则表示很难透过训练损失的值做判定,所以转而选择保存训练过程中的所有图片,然后在网络输出的图片于肉眼看起来与真实图像非常相近的时候,手工停止训练。
实验结果
说了这么多,网络的效果到底怎么样呢?当然是很好啦。
首先是一个验证实验,验证美化后的图像能够保留原有的标注。
苹果的研究人员们在美化前后的图像中逐个用椭圆形把虹膜圈了出来,然后计算出两个椭圆的中心距。美化前后中心距的区别如下图图示。在对应的生成图像和美化后图像间,用椭圆估计出的瞳孔位置变化相当小,只有 1.1+ / -0.8 像素而已,相对于 55 像素的眼宽是很小的距离。
▲ 生成的图像和美化后图像之间瞳孔中心距离的散点图。
然后是定性实验,验证人类肉眼能否区分美化后的图像和真实图像。
为了评价美化后图像的视觉质量,苹果的研究人员们设计了一个简单的用户研究,他们让一组被试者分辨图像是真实的还是生成 + 美化后的。被试者们表示,很难从真实图像和美化后的图像中找到区别。根据他们的综合分析结果,10 个被试者看了 1,000 组测试图像,其中只有 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”。
(本文由 雷锋网 授权转载;首图来源:Flickr/Yagan Kiely CC BY 2.0)