2018年8月1日星期三

旷视科技Oral论文解读:IoU-Net让目标检测用上定位置信度

目标检测涉及到目标分类和目标定位,但很多基于 CNN 的目标检测方法都存在分类置信度和定位置信度不匹配的问题。针对这一问题,一种称之为 IoU-Net 的目标检测新方法被提出,在基准方法的基础上实现了显著的提升。该论文已被将于当地时间 9 月 8-14 日在德国慕尼黑举办的 ECCV 2018 接收为口头报告。此外,该论文的三位并列一作是在旷视科技实习期间完成并提交的这篇论文。

论文:Acquisition of Localization Confidence for Accurate Object Detection

  • 论文地址:https://ift.tt/2M9aIBd

  • 代码地址:https://ift.tt/2LLABeo

摘要:现代基于 CNN 的目标检测器依靠边界框回归和非极大抑制(NMS)来定位目标,其对类别标签的预测概率可以天然反映每个框的分类置信度,然而对框的定位置信度却缺失了。这使得原本定位准确的边界框会在迭代回归的过程中偏离目标,又或甚至在 NMS 过程中受到抑制。研究者在本文中提出 IoU-Net,可学习预测每个检测得到的边界框和与之匹配的目标之间的 IoU 作为该框的定位置信度。利用这种定位置信度,检测器能确保定位更准确的边界框在 NMS 过程中被保留下来,从而改进了 NMS 过程。此外,将预测得到的 IoU 作为优化目标,一种基于优化的边界框修正方法也同时被提出。研究者在 MS-COCO 数据集上进行了大量实验,结果证明了 IoU-Net 的有效性,并且还表明其能够轻松地集成并提高包括 Faster R-CNN、FPN、Cascade R-CNN 等多种当前最佳的目标检测器。

1 引言

目标检测是很多下游视觉应用的前提基础,比如实例分割 [19,20]、人体骨架绘制 [27]、人脸识别 [26] 和高级目标推理 [30]。它结合了目标分类和目标定位两个任务。现代大多数目标检测器的框架是 two-stage [9,8,22,16,10],其中目标检测被定义为一个多任务学习问题:1)区分前景物体框与背景并为它们分配适当的类别标签;2)回归一组系数使得最大化检测框和目标框之间的交并比(IoU)或其它指标。最后,通过一个 NMS 过程移除冗余的边界框(对同一目标的重复检测)。

在这样的检测流程中,分类和定位被用不同的方法解决。具体来说,给定一个提议框(proposal),每个类别标签的概率可自然而然地用作该提议的「分类置信度」,而边界框回归模块却只是预测了针对该提议框的变换系数,以拟合目标物体的位置。换而言之,在这个流程缺失了「定位置信度」。

定位置信度的缺失带来了两个缺点。(1)首先,在抑制重复检测时,由于定位置信度的缺失,分类分数通常被用作给检测框排名的指标。在图 1(a) 中,研究者展示了一组案例,其中有更高分类置信度的检测框却与其对应的目标物体有更小的重叠。就像 Gresham 著名的「劣币驱逐良币」理论一样,分类置信度和定位准确度之间的不匹配可能会导致定位更准确的边界框在 NMS 过程中反而被更不准确的边界框抑制了。(2)其次,缺乏定位置信度使得被广泛使用的边界框回归方法缺少可解释性或可预测性。举个例子,之前的研究 [3] 报告了迭代式边界框回归的非单调性。也就是说,如果多次应用边界框回归,可能有损输入边界框的定位效果(见图 1(b))。

 图 1:由缺乏定位置信度所造成的两个缺点的图示。这些示例选自 MS-COCO minival [17]。(a)分类置信度和定位准确度不对齐的示例。黄框表示真实目标框,红框和绿框都是 FPN [16] 所得到的检测结果。定位置信度是由研究者提出的 IoU-Net 计算得到的。使用分类置信度作为排名指标,会导致定位更准确的边界框(绿框)在传统的 NMS 流程被错误地删去。2.1 节提供了定量分析。(b)在迭代式边界框回归中非单调定位的示例。2.2 节提供了定量分析。

研究者在这篇论文中引入了 IoU-Net,其能预测检测到的边界框和它们对应的真实目标框之间的 IoU,使得该网络能像其分类模块一样,对检测框的定位精确程度有所掌握。这种简单的预测 IoU 值能为研究者提供前述问题的新解决方案:

1.IoU 是定位准确度的一个天然标准。研究者可以使用预测得到的 IoU 替代分类置信度作为 NMS 中的排名依据。这种技术被称为 IoU 引导式 NMS(IoU-guided NMS),可消除由误导性的分类置信度所造成的抑制错误。

2. 研究者提出了一种基于优化的边界框修正流程,可与传统的基于回归的边界框修正方法分庭抗礼。在推理期间,预测得到的 IoU 可用作优化目标,也可作为定位置信度的可解释性指示量。研究者提出的精准 RoI 池化层(Precise RoI Pooling layer)让研究者可通过梯度上升求解 IoU 优化。研究者表明,相比于基于回归的方法,基于优化的边界框修正方法在实验中能实现定位准确度的单调提升。这种方法完全兼容并可整合进各种不同的基于 CNN 的检测器 [16,3,10]。

边界框修正示例:上行是传统方法的结果,下行是本文提出方法的结果。

2 深入目标定位

2.1 分类准确度和定位准确度不匹配

图 2:边界框与其对应目标框的 IoU 与分类/定位置信度之间的关系。对那些与目标框的 IoU 高于 0.5 的检测框,其 Pearson 相关系数为 (a) 0.217 和 (b) 0.617。(a)分类置信度表示了一个边界框的类别,但不能被解读成定位准确度。(b)为了解决这个问题,研究者提出了 IoU-Net 来预测每个检测到的边界框的定位置信度,即其与对应的目标框的 IoU。

图 3:经过 NMS 之后得到的正例边界框的数量,根据它们与对应的目标框之间的 IoU 分组。在传统 NMS 中(蓝色条形图),定位准确的边界框中有很大一部分会被错误抑制,这是由分类置信度和定位准确度之间的不匹配造成的,而 IoU 引导式 NMS(黄色条形图)则能保留定位更准确的边界框。

2.2 非单调边界框回归

图 4:基于优化的与基于回归的 BBox 优化。(a)在 FPN 中比较。当迭代式地应用回归时,检测结果的 AP(平均精度)首先会提升,但会在之后的迭代中快速降低。(b)在 Cascade R-CNN 中比较。迭代 0、1、2 表示 Cascade R-CNN 中的第 1、2、3 个回归阶段。在多轮回归之后,AP 稍有下降,而基于优化的方法则进一步将 AP 提高了 0.8%。

3 IoU-Net

为了定量地分析 IoU 预测的有效性,研究者首先在 3.1 节提出了用于训练 IoU 预测器的方法。在 3.2 和 3.3 节,研究者分别展示了如何将 IoU 预测器用于 NMS 和边界框修正的方法。最后在 3.4 节,研究者将 IoU 预测器整合进了 FPN [16] 等现有的目标检测器中。

3.1 学习预测 IoU

图 5:研究者提出的 IoU-Net 的完整架构,详见 3.4 节。输入图像首先输入一个 FPN 骨干网络。然后 IoU 预测器读取这个 FPN 骨干网络的输出特征。研究者用 PrRoI 池化层替代了 RoI 池化层,详见 3.3 节。这个 IoU 预测器与 R-CNN 分支有相似的结果。虚线框内的模块能构成一个单独的 IoU-Net。

3.2 IoU 引导式 NMS

算法 1:IoU 引导式 NMS。在这个算法中,分类置信度和定位置信度是解开的(disentangled)。研究者使用定位置信度(预测得到的 IoU)来给所有被检测到的边界框排名,然后基于一个类似聚类的规则来更新分类置信度。

3.3 将边界框修正当作是一个优化过程

算法 2:基于优化的边界框修正

精准 RoI 池化(Precise RoI Pooling)

研究者引入了精准 RoI 池化(简写成:PrRoI 池化)来助力研究者的边界框修正。其没有任何坐标量化,而且在边界框坐标上有连续梯度。给定 RoI/PrRoI 池化前的特征图 F(比如,来自 ResNet-50 中的 Conv4),设 wi,j 是该特征图上一个离散位置 (i,j) 处的特征。使用双线性插值,这个离散的特征图可以被视为在任意连续坐标 (x,y) 处都是连续的:

其中,  是插值系数。然后将 RoI 的一个 bin 表示为 ,其中 (x_1,y_1) 和 (x_2,y_2) 分别是左上角和右下角的连续坐标。给定 bin 和特征图 F,研究者通过计算一个二阶积分来执行池化(比如平均池化):

为更便于理解,研究者在图 6 中可视化了 RoI 池化、RoI Align [10] 和研究者的 PrRoI 池化:在传统的 RoI 池化中,连续坐标首先需要被量化(quantization),以计算该 bin 中激活的和;为了消除量化误差,在 RoI Align 中,会采样该 bin 中 N=4 个连续点,表示成 (a_i,b_i),而池化就是在这些采样的点上执行的。RoI Align 中的 N 是预定义的,而且不能根据 bin 的大小进行调整;与此不同,研究者提出的 PrRoI 池化是直接基于连续特征图计算二阶积分。

图 6:RoI 池化、RoI Align 和 PrRoI 池化的图示

3.4 联合训练

这种 IoU 预测器可集成到标准的 FPN 流程中,以进行端到端的训练和推理。为了清楚说明,研究者将用于图像特征提取的 CNN 架构称为骨干(backbone),将应用于各个 RoI 的模块称为头(head)。

如图 5 所示,这个 IoU-Net 使用了 ResNet-FPN [16] 作为骨干网络,其架构是自上而下的,可构建特征金字塔(feature pyramid)。FPN 能根据 RoI 的特征的比例从这个特征金字塔的不同层级提取这些 RoI 的特征。其中原来的 RoI 池化层被换成了精准 RoI 池化层。至于该网络的头,这个 IoU 预测器根据来自骨干网络的同一视觉特征而与 R-CNN 分支(包括分类和边界框回归)并行工作。

研究者根据在 ImageNet [25] 上预训练的 ResNet 模型初始化了权重。所有新的层都使用了标准差为 0.01 或 0.001 的零均值高斯分布进行初始化。研究者使用了平滑 L1 损失来训练 IoU 预测器。IoU 预测器的训练数据是在一个训练批中的图像中单独生成的,详见 3.1 节。IoU 标签进行了归一化,因此其值分布在 [-1,1]。

输入图像的大小进行了调节,短边长度为 800 像素,长边长度最大为 1200 像素。分类和回归分支取来自 RPN 的每张图像 512 RoI。研究者使用了 16 的批大小进行训练。网络为 16 万次迭代进行了优化,学习率设置为 0.01,并在 12 万次迭代后减小 10 倍。研究者还为前 1 万次迭代设置了 0.004 的学习率以进行预热。研究者使用了 1e-4 的权重衰减和 0.9 的 momentum.

在推理过程中,研究者首先对初始坐标应用边界框回归。为了加快推理速度,研究者首先在所有检测到的边界框上应用 IoU 引导式 NMS。然后,使用基于优化的算法进一步改进 100 个有最高分类置信度的边界框。研究者设置步长为 λ=0.5,早停阈值为 Ω1=0.001,定位衰减容限 Ω2=−0.01,迭代次数 T=5。

4 实验

研究者在有 80 个类别的 MS-COCO 检测数据集 [17] 上进行了实验。遵照 [1,16],研究者在 8 万张训练图像和 3.5 万张验证图像的并集(trainval35k)上训练了模型,并在包含 5000 张验证图像的集合(minival)上评估了模型。为验证该方法,在 4.1 节和 4.2 节,研究者与目标检测器分开而训练了一个独立的 IoU-Net(没有 R-CNN 模块)。IoU-Net 助力的 IoU 引导式 NMS 和基于优化的边界框修正被应用在了检测结果上。

4.1 IoU 引导式 NMS

表 1 总结了不同 NMS 方法的表现。尽管 Soft-NMS 能保留更多边界框(其中没有真正的「抑制」),但 IoU 引导式 NMS 还能通过改善检测到的边界框的定位来提升结果。因此,在高 IoU 指标(比如 AP_90)上,IoU 引导式 NMS 显著优于基准方法。

表 1:IoU 引导式 NMS 与其它 NMS 方法的比较。通过保留定位准确的边界框,IoU 引导式 NMS 在具有高匹配 IoU 阈值的 AP(比如 AP_90)上的表现显著更优。

图 7:在匹配检测到的边界框与真实目标框的不同 IoU 阈值下,不同 NMS 方法的召回率曲线。研究者提供了 No-NMS(不抑制边界框)作为召回率曲线的上限。研究者提出的 IoU-NMS 有更高的召回率,并且在高 IoU 阈值(比如 0.8)下能有效收窄与上限的差距。

4.2 基于优化的边界框修正

研究者提出的基于优化的边界框修正与大多数基于 CNN 的目标检测器 [16,3,10] 都兼容,如表 2 所示。将这种边界框修正方法应用在原来的使用单独 IoU-Net 的流程之后还能通过更准确地定位目标而进一步提升表现。即使是对有三级边界框回归运算的 Cascade R-CNN,这种改进方法能进一步将 AP_90 提升 2.8%,将整体 AP 提升 0.8%。

表 2:基于优化的边界框修正能进一步提升多种基于 CNN 的目标检测器的表现。

4.3 联合优化

IoU-Net 可与目标检测框架一起并行地端到端优化。研究者发现,将 IoU 预测器添加到网络中有助于网络学习更具判别性的特征,这能分别将 ResNet50-FPN 和 ResNet101-FPN 的整体 AP 提升 0.6% 和 0.4%。IoU 引导式 NMS 和边界框修正还能进一步提升表现。研究者使用 ResNet101-FPN 得到了 40.6% 的 AP,相比而言基准为 38.5%,提升了 2.1%。表 4 给出了推理速度,表明 IoU-Net 可在计算成本承受范围之内实现检测水平的提升。

表 3:在 MS-COCO 上的最终实验结果。IoU-Net 表示嵌入 IoU 预测器的 ResNet-FPN。在这个 FPN 基准上,研究者实现了约 2% 的 AP 提升。

表 4:多种目标检测器在单个 TITAN X GPU 上得到的推理速度。这些模型都有一样的骨干网络 ResNet50-FPN。输入分辨率为 1200x800。所有超参数设置相同。

5 总结

本文提出一种用于准确目标定位的全新网络架构 IoU-Net。通过学习预测与对应真实目标的 IoU,IoU-Net 可检测到的边界框的「定位置信度」,实现一种 IoU 引导式 NMS 流程,从而防止定位更准确的边界框被抑制。IoU-Net 很直观,可轻松集成到多种不同的检测模型中,大幅提升定位准确度。MS-COCO 实验结果表明了该方法的有效性和实际应用潜力。

从学术研究的角度,本文指出现代检测流程中存在分类置信度和定位置信度不匹配的问题。更进一步,研究者将边界框修正问题重定义为一个全新的优化问题,并提出优于基于回归方法的解决方案。研究者希望这些新视角可以启迪未来的目标检测工作。

]]> 原文: https://ift.tt/2AsxOBx
RSS Feed

机器知心

IFTTT

谷歌大脑提出TensorFuzz,用机器学习debug神经网络

机器学习尤其是深度学习很难调试与修正,而最近谷歌大脑 Ian Goodfellow 等研究者发布了一个名为 TensorFuzz 的神经网络 Debug 开源库。他们将传统软件工程中由覆盖性引导的模糊方法引入到神经网络,并借助机器学习方法实现 Debug 过程。

神经网络正逐渐影响人类生活环境,包括医学诊断、自动驾驶、企业和司法决策过程、空中交通管制、以及电网控制。这些人类可以做到的事,神经网络也有可能做到。它可以拯救生命、为更多的人提供帮助。然而,在实现这些应用之前,我们首先需要确定神经网络到底是不是可靠的,因此它的修正和调试方法恰恰是我们现在所缺失的。

众所周知,由于各种原因,机器学习模型难以调试或解释,一是从概念上难以说明用户想要了解的模型信息,而且通过统计和计算也难以获得指定问题的答案。这个特性导致最近的机器学习出现「复现危机」,因为我们很难对不好调试的技术做出可靠的实验结论。

即使是与神经网络直接相关的简单问题也可能会有巨大的计算量,而且使用深度学习框架实现的神经网络也可能和理论模型相去甚远,所以神经网络非常难以调试。例如,ReluPlex 可以形式上地验证神经网络的一些特性,但由于计算成本太高,无法扩展到实际模型中。此外,ReluPlex 通过将 ReLU 网络描述为一个分段线性函数来进行分析,它使用一个矩阵乘法都为线性的理论模型。但实际上,由于浮点算法的存在,计算机上的矩阵乘法并非线性的,机器学习算法可以学习利用这种特性进行非线性运算。这并不是要批评 ReluPlex,而是想说明应该需要更多与软件直接交互地测试算法,以便更客观地测试因为深度学习框架而偏离理论的模型。

在 Ian Goodfellow 等人的这项研究中,他们使用传统软件工程已有的技术,即由覆盖性引导的模糊方法(coverage-guided fuzzing,CGF),并修正这种技术以用来测试神经网络。根据 Goodfellow 等研究者在原论文中所述,该项工作的主要贡献有以下几点:

  • 为神经网络引入 CGF 概念,并描述了快速近似最近邻算法如何以通用的方式检查覆盖性。

  • 为 CGF 技术构建了一个名为 TensorFuzz 的开源库。

  • 使用 TensorFuzz 可在已训练神经网络搜索数值问题、在神经网络和对应经量化处理的网络间生成不一致性度量、在字符级语言模型中表现的不良行为。

下图描述了整体的 Fuzzer 过程,它与普通计算机程序的 CGF 结构非常相似,只不过它不与经检测的计算机程序交互,而是与 TensorFlow 的静态计算图进行交互。


如上左图所示,Fuzzer 由 Seed 语料库开始,它为计算图提供至少一组输入。研究者将这些输入限制为有效的网络输入,例如对于图像输入,研究者可以限制输入数据有正确的图像尺寸和 RGB 通道数。在给定 Seed 语料库后,输入选择器将从输入语料库中选择不同的元素,例如输入选择器可以是以随机的方法选择输入。

给定有效的输入,Mutator 会对输入做一些修改,这种修改可能只是简单地翻转图像像素,同样也可以是在修改总量的某些约束下对图像进行修改。Mutator 输出的修改数据随后可以输入到神经网络中,TensorFuzz 需要从神经网络抽取出两种信息,即抽取一组元数据数组以计算目标函数,抽取一组覆盖性数组以计算实际覆盖性。计算覆盖性后,如果 Mutator 修改的数据需要执行覆盖,则将它添加到输入语料库中,如果计算的目标函数满足条件,则可以添加到测试案例列表中。

如上右图为 Fuzzer 主体过程的伪代码,在满足迭代数的情况下,从输入语料库中抽取样本为 parent,并使用 Mutate() 函数对该样本做修改以产生新的样本 data。样本 data 随后输入到神经网络,并通过 Fetch() 函数从该神经网络抽取覆盖性 cov 和元数据 meta 两个向量。接下来只需要通过 IsNewCoverage() 和 Objective() 两个函数判断 cov 和 meta 两个向量是不是满足条件,满足的话就能分别将 data 样本加入到输入语料库和测试案例列表。

以上只是 Fuzzer 主体过程的一般描述,Chooser、Mutator 以及 Fetcher 的具体结构与算法读者可详细查阅原论文。

论文:TensorFuzz: Debugging Neural Networks with Coverage-Guided Fuzzing

论文地址:https://ift.tt/2AstWAs

众所周知,机器学习模型的解释和调试非常困难,神经网络更是如此。在本文中,我们为神经网络引入了自动化软件测试技术,该技术非常适合发掘仅在少量输入下出现的错误。具体而言,我们为神经网络开发了由覆盖引导的模糊(coverage-guided fuzzing,CGF)方法。在 CGF 中,神经网络输入的随机变化由覆盖性度量(coverage metric)引导,以满足用户指定的约束。我们描述了快速近似最近邻算法如何为神经网络提供这种覆盖性度量方法,并讨论了 CGF 在以下目标中的应用:在已训练神经网络中搜索数值误差、在神经网络和对应经量化处理的网络间生成不一致性度量、在字符级语言模型中表现不良行为。最后,我们发布了一个名为 TensorFuzz 的开源库,它实现了本论文所描述的技术。

4 实验结果

我们简要展示了 CGF 技术的一些应用以证实它的通用性质。

4.1 CGF 可以高效地找到已训练神经网络的数值错误

由于神经网络使用浮点数运算,它们对于训练期间及评估过程中的数值错误很敏感。众所周知,这些问题是很难调试的,部分原因是它们可能仅由一小部分很少遇到的输入所触发。这正是 CGF 能发挥作用的一个案例。我们专注于寻找导致非数(not-a-number,NaN)值的输入。并总结出如下结论:

找出数值错误很重要。数值错误,尤其是那些导致 NaN 的数值错误,假如在现实应用中首次遇到这些错误,重要系统将做出严重的危险行为。CGF 可以用于在部署系统之前找到大量的错误,并减少错误在危险环境中造成的风险。

CGF 可以快速找到数值错误。通过 CGF,我们可以简单地添加检查数值选项到元数据中,并运行我们的 fuzzer。为了测试这个假设,我们训练了一个全连接神经网络来分类 MNIST[26] 数字。我们故意使用了一个实现效果比较差的交叉熵损失函数,以增加数值错误出现的可能性。我们用 100 的 mini-batch 大小训练了 35000 个迭代步,直到达到 98% 的验证准确率。然后我们检查到,不存在导致数值错误的 MNIST 数据集元素。尽管如此,TensorFuzz 却在多个随机初始化中快速找到了 NaN,如图 2 所示。

基于梯度的搜索技术可能无法帮助寻找数值错误。CGF 的一个潜在缺陷是,基于梯度的搜索技术可能比随机搜索技术更加高效。然而,我们并不清楚如何明确基于梯度搜索的目标。目前不存在度量模型的真值输出和 NaN 值相似性的直接方法。

随机搜索在寻找某些数值错误方面是极度低效的。为了证实随机搜索不够高效且覆盖引导对于提高效率很有必要,我们对比了随机搜索方法。我们实现了一个基线随机搜索算法,并用 10 个不同的随机初始化在语料库的 10 万个样本上运行了该算法。基线算法在所有实验中未找到一个非限定元素。

图 2:我们训练了一个包含某些不稳定数值运算的 MNIST 分类器。然后我们在 MNIST 数据集的随机种子上运行 fuzzer10 次。fuzzer 在每次运行中都找到了一个非限定元素。而随机搜索未能找到一个非限定元素。左图:运行过程中(共运行 10 次)fuzzer 的累积语料库大小。右图:由 fuzzer 找到的满足条件的图像示例。

4.2 CGF 解决模型和量化版本不一致的问题

量化(quantization)[18] 是一种神经网络权重被保存,且在执行神经网络计算的时候使用更少计算内存位数来表示数值的过程。量化常被用来减少神经网络的计算成本或大小。它还被广泛用于在手机的安卓神经网络 API 或 TFLite 上,以及在自定制机器学习硬件(例如谷歌的 Tensor Processing Unit[20])上运行神经网络推理。

寻找由量化导致的错误非常重要:当然,如果量化显著减少了模型准确率,那量化就没有什么意义了。给定一个量化模型,如果能检查出多少量化减少了准确率最好。

仅检查已有的数据只能找到很少的错误:作为基线实验,我们训练了一个使用 32 位浮点数的 MNIST 分类器(这一次没有故意引入数值错误)。然后把所有权重和激活值修剪为 16 位。之后,我们对比了 32 位和 16 位模型在 MNIST 测试集上的预测,没有找到任何不一致性。

CGF 可以快速在数据周围的小区域中找到很多错误:然后运行 fuzzer,变化限制在种子图像周围的半径为 0.4 的无限范数球中,其中仅使用了 32 位模型作为覆盖的激活值。我们将输入限制在种子图像附近,因为这些输入几乎都有明确的类别语义。模型的两个版本在域外的垃圾数据(没有真实类别)上出现不一致性并没有什么意义。通过这些设置,fuzzer 可以生成 70% 样本的不一致性。因此,CGF 允许我们寻找在测试时出现的真实错误,如图 3 所示。

随机搜索在给定和 CGF 相同的变化数量下无法找到新的错误:如 4.1 节所述,我们试验了一个基线随机搜索方法以表明覆盖引导在这种设置下特别有用。随机搜索基线在给定和 fuzzer 相同的变化数量下无法找到新的任何不一致性。

图 3:我们训练了一个 32 位浮点数的 MNIST 分类器,然后将对应的 TensorFlow 图修剪为 16 位浮点数图,原始的和修剪后的图都在 MNIST 测试集的全部 10000 个元素上执行相同的预测,但 fuzzer 可以找到大约 70% 的测试图像中半径为 0.4 的无穷范数球中的不一致性。左图:fuzzer 的累积语料库大小随运行次数(共 10 次)的变化。那些一路朝右的曲线对应失败的模糊化(fuzzing)运行。右图:由 fuzzer 找到的被 32 位和 16 位神经网络分类为不同类别的图像。

]]> 原文: https://ift.tt/2M50PV7
RSS Feed

机器知心

IFTTT

自然语言处理的一大步,应用Word2Vec模型学习单词向量表征

在常见的自然语言处理系统中,单词的编码是任意的,因此无法向系统提供各个符号之间可能存在关系的有用信息,还会带来数据稀疏问题。使用向量对词进行表示可以克服其中的一些障碍。本文通过推理、范例及数学公式介绍了从原始文本中学习「词嵌入」的模型 Word2Vec。该模型通常用在预处理阶段,可以提高计算效率。

让我们用推理、范例及数学公式来介绍 Word2Vec

引言

Word2Vec 模型用于学习被称为「词嵌入」的单词向量表示,通常用在预处理阶段,之后,学习到的词向量可以被输入到一个判别模型(通常是一个 RNN)中,进而生成预测或被用于处理其他有趣的任务。

为什么要学习词的嵌入表示

图像和音频处理系统与丰富的高维数据集一起工作,其处理的图像数据被编码为各个原始像素强度的向量,因此所有信息都被编码在数据中,从而可以很容易地建立起系统中各种实体之间的关系(比如猫和狗)。

但是,在常见的自然语言处理系统中,单词被视为离散的原子符号,因此」猫」可以被表示为 Id537 而」狗」可以被表示为 Id143。这些编码是任意的,因而无法向系统提供各个符号之间可能存在关系的有用信息。这意味着该模型在处理关于「狗」的数据时无法充分利用关于「猫」的知识(例如它们都是动物、宠物、有四只脚等)。

将单词表示为独特、离散的序列号还会导致数据稀疏问题,这通常意味着我们可能需要更多数据才能成功地训练统计模型,而使用向量对词进行表示可以克服其中的一些障碍。

举例来说:

传统的自然语言处理方法涉及到许多语言学本身的知识。理解诸如音素和语素之类的术语是相当基础和必要的,因为有许多语言学分支致力于这样的研究。我们来看看传统的自然语言处理如何试图理解下面的单词。

假设我们的目标是收集关于这个词的一些信息(表征它的情感,找到它的定义等)。利用我们的语言学知识可以将这个词分解成 3 个部分。

深度学习最基本的层次是表示学习。在这里,我们将通过相同方法在大规模数据集上为单词构建向量表示。

词向量

我们把每一个单词表示为一个 d 维的向量。在这里 d=6。我们希望根据这个句子,为每一个单独的词构建它的向量表示。

现在让我们来思考一下如何填充这些值。我们希望这些值能够一定程度上表示这个单词和它的上下文、含义或语义信息。一种方法是构建共现矩阵。

共现矩阵包含了语料库(或训练集)中每一个单词同出现在它后一个单词的统计信息。下表是上面所示句子的共现矩阵。

通过这个简单的矩阵,我们能够获得非常有用的信息。例如,「love」和「like」这两个词对名词(NLP 和 dogs)的计数都是 1。他们对「I」的计数也是 1,这表明这些词很可能是某种动词。对于远比一个句子更大的数据集,可以预料的是这种相似性会体现得更加清晰,因为「like」、」love」和其他具有相似上下文的同义词将开始具有相似的向量表示。

这是一个好的开始,但应该注意每个单词的维度将随着语料库的大小线性增加。如果我们有一百万词(在自然语言处理任务中并不算很多),我们将会得到一个一百万乘一百万的非常稀疏(有很多 0)的矩阵,存储效率很低。后来人们在探索更好的词向量表示上取得了很多进展。其中最著名的是 Word2Vec。

正式介绍 

向量空间模型(VSM)表示(嵌入)连续向量空间中的单词,其中语义上相似的单词被映射到相邻的点(「都嵌在彼此附近」)。向量空间模型在自然语言处理中有着悠久、丰富的历史,但是所有方法都以某种方式依赖于分布假说,该假说认为出现在相同语境中的词语具有相似的语义。基于这一原则的方法可以被分为两类:

 1. 基于计数的方法(例如隐性语义分析)

 2. 预测方法(例如神经概率语言模型)

二者的区别在于:

基于计数的方法计算某个词在大型文本语料库中与其相邻词汇共同出现的频率的统计数据,然后将这些统计数据映射到每个词的小而密集的向量。

预测模型直接尝试根据学习到的近邻单词的小密集嵌入向量(考虑模型的参数)来预测单词。

Word2vec 是一种用于从原始文本中学习词嵌入的模型,它有很高的计算效率。它主要有两种实现方式,一种是连续词袋模型(CBOW),另一种是 Skip-Gram 模型。这两种方式在算法上是相似的,唯一的差别在于 CBOW 从源上下文单词中预测目标单词,而 Skip-Gram 则恰恰相反,它根据目标单词预测源上下文单词。

接下来,我们将重点讨论 skip-gram 模型。

应用到的数学知识

神经概率语言模型一般使用最大似然原则进行训练,其目标是要最大化在给定前面的单词 h(对于「history」)时的下一个单词 wt(对于「target」)的 softmax 概率

其中 score(wt, h) 计算目标词 wt 与上下文 h 的相容性(常用点积)。

我们通过在训练集上最大化它的对数似然来训练这个模型。所以,我们要最大化以下损失函数:

这为语言建模提供了一个合适的标准化概率模型。

我们可以用另一种形式来更好地展示这种方法,它可以清晰地展示在训练过程中为了最大化目标函数而不断改变的选择变量(或参数)。

我们的目标是找到可以用于预测当前单词的周围词汇的向量表示。我们尤其希望最大化我们在整个语料库上的平均对数概率:

这个等式的主要含义是,在当前单词的一定窗口范围 c 内出现的单词 wt 存在一定的概率 p。这个概率同当前词 wt 和我们设定的参数 theta 相关。我们希望设定的参数 theta 可以最大化整个语料库的上述概率。

基本参数化:Softmax 模型

基本的 skip-gram 模型定义了经过 softmax 函数计算的概率 p。如果我们的词汇表中有 N 个词,而我们希望学习的嵌入向量的维度为 k,那么我们可以设定 wi 是 N 维的 ont-hot 向量,theta 是一个 N×K 的嵌入矩阵,从而有:

值得注意的是,在学习之后,矩阵 theta 可以被认为是嵌入查找矩阵。

在架构方面,它是一个简单的三层神经网络。

 1. 使用一个 3 层神经网络(1 个输入层+ 1 个隐藏层+ 1 个输出层)。

 2. 输入一个词,并训练模型来预测它的相邻词汇。

 3. 删除最后一层(输出层)并保留输入和隐藏层。

 4. 现在,输入一个词汇表中的单词。在隐藏层给出的输出是输入单词的「单词嵌入」。

限制这种参数化方法在大规模语料中的应用的一个主要缺点是计算的效率。具体来说,为了计算单次的正向传播过程,我们需要对整个语料库的词汇进行统计,以计算 softmax 函数。这对于大型数据集来说是非常昂贵的,所以我们希望能够在这个模型和计算效率之间找到一个平衡。

提高计算效率

对于 word2vec 中的特征学习,我们不需要完整的概率模型。CBOW 和 skip-gram 模型是使用二元分类目标(逻辑回归)来训练的,其目标是要在相同的上下文中将真实目标词语(wt)与 k 个伪(噪音)词语 -w 进行区分。

当模型给真实单词分配更高的概率并且将低概率分配给噪音词时,我们可以得到最大化的目标函数。从技术上来讲,我们一般称之为负采样,它提出的更新近似于 softmax 函数更新的极限。但是从计算角度来看,它拥有很高的效率,因为这样一来损失函数的复杂度仅仅依赖于我们选择的噪音词的数量(k)而不是词汇表(V)中的所有单词。这可以大大提高训练的速度。像 Tensorflow 这样的软件包使用了一种非常相似的损失函数,称为噪声对比估计(NCE)损失。

SKIP-GRAM 模型的直观感受

以这个数据集为例:

the quick brown fox jumped over the lazy dog

我们首先构建一个包含所有单词和它们的上下文的数据集。现在,让我们保持原始定义,并将「上下文」定义为目标单词左侧和右侧的窗口单词。设定窗口大小为 1,我们可以得到(上下文,目标)对形式的数据集。

([the, brown], quick), ([quick, fox], brown), ([brown, jumped], fox), ...

回想一下,skip-gram 会颠倒上下文和目标,试图根据目标词预测每个上下文单词,因此任务变为从」quick」预测」the」和」brown」以及从」brown」预测」quick」和」fox」等。

这样一来我们的数据集可以整理为(输入,输出)对,如下所示:

(quick, the), (quick, brown), (brown, quick), (brown, fox), ...

目标函数在定义上依赖于整个数据集,但是我们通常使用随机梯度下降(SGD)方法来对模型进行优化,即每次只使用一个例子(或者每次使用一小批数据,每批的数量通常在 16 到 512 之间)。接下来让我们看一下每一步的训练过程。

让我们想象一下上述例子的训练过程。这里的目标是从 the 预测 quick。我们从一个噪声分布 P(w)(通常是单字符分布)中选取 num_noise 个噪声样本(单字符分布假设每个单词的出现与所有其他单词无关,即我们可以将生成过程看作一个按序列掷骰子的过程)

为了简单起见,我们设定 num_noise = 1,我们选择 sheep 作为一个噪声样本。接下来我们计算这对观察到的和有噪声的例子的损失,即在」t」时刻的目标函数变成:

我们的目标是要对嵌入参数进行更新

 theta 用来最大化这个目标函数。我们通过导出与之相关的损失梯度来实现这一目标。

然后,我们通过向梯度方向迈出一小步来更新嵌入。当我们在整个训练集上重复进行这个过程时,可以对每个单词产生「移动」嵌入向量的效果,直到模型成功地区分真实单词和噪音单词为止。

我们可以通过将它们向下投影到 2 维来可视化学习到的向量。当我们观察这些可视化时,很明显这些向量捕获到了一些关于单词的语义信息以及词与词之间的关系,这在实际中是非常有用的。


原文链接:https://ift.tt/2Id6yuj

]]> 原文: https://ift.tt/2vurAvg
RSS Feed

机器知心

IFTTT

自动给神经网络DEBUG:谷歌推出模糊测试新方法

夏乙 发自 凹非寺量子位 报道 | 公众号 QbitAI

DEBUG,是程序员永无止境的日常。给神经网络捉虫,更是比普通程序难得多:

绝大部分bug都不会导致神经网络崩溃、报错,只能让它训练了没效果,默默地不收敛。

能不能把炼丹师们从无休止无希望的debug工作中拯救出来?

两位谷歌大脑研究员Augustus Odena和Ian Goodfellow说,好像能。

他们推出了一种自动为神经网络做软件测试的方法:TensorFuzz。它非常擅长自动发现那些只有少数某些输入会引发的错误。

比如说,它能在已训练的神经网络里发现数值误差,生成神经网络和其量化版本之间的分歧,发现字符级语言模型中的不良行为。

这种方法说新也不新,它来源于传统编程技艺中的一种测试手段:覆盖引导的模糊测试,英语叫coverage-guided fuzzing,简称CGF。

模糊测试,就是通过向目标系统提供非预期的输入并监视异常结果,来发现软件漏洞。也就是说,用随机坏数据(也称做 fuzz)攻击一个程序,然后等着观察哪里遭到了破坏。

而所谓"覆盖引导"的模糊测试,是指在进行模糊测试时,尽量最大化程序的代码覆盖率,测试尽可能多的代码分支。

AFL、libFuzzer都是比较常见的模糊测试工具。

当然传统的方法,不能直接用于神经网络。把CGF搬到神经网络上,不能像在传统的测试中那样简单地去计算分支覆盖率。为此,深度学习的研究者们提出了不少计算覆盖率的新方法,来计算神经元覆盖率、神经元边界覆盖率等等。

两位谷歌大牛提出,应该存储与输入相关联的激活,通过用近似最近邻算法来检查这些输入有没有导致覆盖率的增加,

粗略地说,TensorFuzz是通过查看计算图的"激活"来测量覆盖率。整体架构如下图所示,左边是模糊测试的程序图,标明了数据如何流动;右边以算法形式描述了模糊测试过程的主循环。

说一下实验结果。

1、CGF可以在训练好的神经网络中有效发现数值误差

由于神经网络使用浮点数学,因此无论是在训练还是评估时,都很容易受到数值问题的影像。众所周知,这些问题很难调试。而CGF可以帮助我们专注于找到导致NaN值的输入。

2、CGF揭示了模型和其量化版本之间的分歧

量化是一种存储神经网络权重的方法,本质上是使用较少的数值表示来执行神经网络的计算。量化是降低神经网络计算成本或尺寸的流行方法。但是一定要避免量化之后,显著降低模型的准确性。

CGF可以在数据周围的小区域内快速找到许多错误,在测试的案例中,70%的情况下模糊器能够产生分歧。另外,在给定相同突变的情况下,随机搜索没有找到新的错误。

3、CGF揭示了字符级语言模型中的不良行为

作者运行了TensorFuzz和随机搜索进行测试,测试目的有两个,一是模型不应该连续多次重复相同的词,而是不应该输出黑名单上的词。

测试进行24小时后,TensorFuzz和随机搜索都生成了连续重复的词。此外,TensorFuzz生成了十个黑名单词汇中的六个,而随机搜索只有一个。

大概就酱。

总之,作者为神经网络引入CGF的概念,并且在论文中描述了如何实现。上面的三个实验结果,证明了TensorFuzz的实际适用性。

Goodfellow说,他希望TensorFuzz能成为包括机器学习在内复杂软件的基础回归测试。例如在新版本发布前,模糊搜索新旧版本之间的差异。

论文传送门在此:

Debugging Neural Networks with Coverage-Guided Fuzzing

Abstract:

Machine learning models are notoriously difficult to interpret and debug. This is particularly true of neural networks. In this work, we introduce automated software testing techniques for neural networks that are well-suited to discovering errors which occur only for rare inputs. Specifically, we develop coverage-guided fuzzing (CGF) methods for neural networks. In CGF, random mutations of inputs to a neural network are guided by a coverage metric toward the goal of satisfying user-specified constraints. We describe how fast approximate nearest neighbor algorithms can provide this coverage metric. We then discuss the application of CGF to the following goals: finding numerical errors in trained neural networks, generating disagreements between neural networks and quantized versions of those networks, and surfacing undesirable behavior in character level language models. Finally, we release an open source library called TensorFuzz that implements the described techniques.

作者还说了,TensorFuzz是一个开源库。 不过嘛,目前两位研究人员还没放出地址,为期应该不远了~

—欢迎大家关注我们的专栏:量子位 - 知乎专栏诚挚招聘量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复"招聘"两个字。量子位 QbitAI· 头条号签约作者վ'ᴗ' ի 追踪AI技术和产品新动态



via 量子位 - 知乎专栏 https://ift.tt/2LGVerW
RSS Feed

RSS5

IFTTT

百度押注AI有了大回报,李彦宏首次披露Apollo如何赚钱

李根 夏乙 发自 凹非寺 量子位 报道 | 公众号 QbitAI

财报业绩好,Robin乐呵呵。

今日上午,百度交出2018年第二季度财报,超出此前华尔街最乐观的预期。

结合这份财报,以及李彦宏刚刚在电话会议上的发言,我们发现了百度业务的现状和未来前(钱)景几个亮点:

  • AI开始在百度营收中发挥明显作用
  • 李彦宏首次披露Apollo的商业模式
  • 百度为自动驾驶开发的ACU浮出水面

对于百度交出的这份答卷,资本市场当然不可能没有反应:财报发布后,百度股价盘后上扬,涨幅一度近5%。

AI开始赚大钱

首先,这是一份业绩为总营收人民币260亿元(约合39.3亿美元)、净利润人民币64亿元(约合9.67亿美元)的财报。

什么概念?

直观类比来说,一个季度赚的钱,超过了中国第二大搜索公司的总市值;一个季度所得利润,超过了个别老牌门户的最新市值。

如此一比,百度赚钱能力还是蛮吓人的。

那百度又是如何赚钱的呢?很简单,靠广告。

这一季度的百度营收,来自网络营销业务的有211亿元,同比增长25%。这个网络营销业务,约等于广告。

百度的广告,过去集中体现为搜索广告,现在的主力则是搜索+信息流,双引擎驱动。

广告业务这样的增速,得益于双引擎,也得益于技术的创新,特别是AI加持。李彦宏自己也说,中国互联网用户总量增速是在放缓的,接下来业务发展的主要驱动力是技术创新。

对于百度来说,主力自然是AI。

AI对广告业务最直接、最明显的助力,在于转化率的提升。

用户画像和推送都得精准,信息分发和广告匹配都得同时"在线",否则赚点钱OK,赚百度这么多钱不容易。

百度披露的是,自从用深度强化学习优化广告效果后,能为广告主提出更好的关键词、图片、视频建议,提升转化率和广告的接受度。

AI加持之下,用户体验的进步也会间接提振广告业务。

具体数据方面,搜索结果首条直接满足需求比例达37%,搜索结果中有38%来自熊掌号优质内容,同时超过1/6的搜索PV都覆盖高质量的视频结果。百度App的日活则达到了1.48亿。

当然,内容质量和广告内容也需要配合得好,不能太过伤害用户体验。

于是李彦宏也开诚布公表示:业绩强劲、搜索业务收入增长明显、信息流业务流量和商业化增长势头良好,背后就是AI驱动。

此外,商业营收增长势头凶猛,AI变现能力崭露头角,也算是给其他AI业务未来预期增强了信心。

在整个百度AI战略中,信息流是夯实的基础,也还是开路先锋。

过去一年百度战略梳理中,成熟变现的搜索+信息流,被列入核心,而更具中长期远景的业务则相应有所剥离,区分更加明确,利于市场和投资者认知,但整个中轴仍是AI。

其中,隐隐展现出最大潜力的是家居领域的DuerOS、车领域的Apollo,以及包含二者在内的整个AI开发者生态。

这3大方面,目前都进入了规模化落地序列,虽还不能直接变现,但未来预期已经放出来了。

李彦宏点明Apollo商业模式

自动驾驶领域的Apollo是上一季度最抢镜的业务。

在百度刚刚结束的AI开发者生态上,李彦宏宣布阿波龙实现第100辆量产车下线,首批还会在北京、雄安、深圳和日本东京商业化运营。

阿波龙是百度和金龙汽车合作的L4级完全无人驾驶小巴,是Apollo能力的代表作。

目前在全球范围内,正式量产商用L4级无人车,都是头一件,所以阿波龙第100辆量产车下线消息一宣布,制造方金龙汽车随即涨停。

除了阿波龙,在发布Apollo3.0版本后,百度还宣布在货运领域、限制场景无人驾驶领域都能更进一步,加快量产商用步伐。

在最新生态里,目前已有119家OEM合作伙伴,并且跟全球车企大厂奔驰-戴姆勒、宝马等达成合作。

所以你可能也好奇,开放了核心技术能力,又圈了这么多盟友的Apollo生态,未来到底如何变现?

嗯,这一次,李彦宏亲自透露了几个商业模式。

百度掌舵者说,无论是Apollo还是DuerOS,现在都处于早期积累阶段,未来几个季度都不会产生实质营收贡献。

但Apollo发展得好,变现并不是什么大挑战。

未来通过Apollo的生态,百度可以卖高精度地图、卖仿真平台、甚至卖计算硬件ACU,这些都是很直接很刚需的服务。

高精度地图和仿真平台,之前在Apollo1.5版本就有隆重介绍。

高精度地图是百度多年技术囤积所在,研发在2013年就已启动,采集车队规模近300辆,融合了实时地图构建及定位技术(SLAM)、深度学习、图像处理、计算几何等处理技术,建立了亿量级样本库,能够精细刻画道路上的交通标志、车道线、护栏路沿等上百种要素和属性,数据精度达到厘米级别。

更主要的是,百度高精度地图自动化处理程度超90%,准确率高达95%以上。依托多源感知数据处理、云服务中心和数据中心等构成的Intelligent Map平台,可以实现分钟级的更新。

而配合高精地图,百度的定位技术在城市高楼密集市中心、林荫路、隧道、地库等极具挑战的弱/无GPS场景下也可达到厘米级定位。

仿真平台则内置高精度地图,把海量中国国情的交通场景纳入其中,覆盖了诸多极端情况,帮助开发者优化真实场景下的应对方案,确保自动驾驶车辆上路安全。

同时,Apollo还对外称,仿真平台提供了贯穿自动驾驶研发迭代过程的完整解决方案,帮助开发者发现问题、解决问题和验证问题。

作为证明,百度推出Apollo仿真平台后,在两个月的时间内,跟智行者合作推出了一辆落地的无人驾驶扫地车。

李彦宏要卖的硬件,叫做ACU(Apollo Computing Unit)。今年1月,百度提到将来会销售一系列硬件,能够直接插到车上运行他们的软件,实现自动驾驶功能,这个硬件,就是今天提到的ACU了。

另外,还有一些软硬件一体的方案,比如现在畅谈甚广的代客泊车解决方案,Apollo生态里做出来很轻松。不管是L3,还是L4,Apollo都有广泛的变现机会。

最后还有看不见的红利。因为Apollo团结了诸多力量,进展也很迅速,于是百度得到了中国官方层面的创新支持,可以最早开始基础设施层面的合作,给出路面传感器方案的建议,这也意味着未来无人车不需要昂贵的激光雷达等传感器。

总之归结起来一句话,Apollo已经量产落地,虽然还不能直接贡献营收,但变现起来也机会不少。

(这些电话会议上的回答,也算先给了华尔街一个"交代"。)

DuerOS不急变现

另一项中长期"潜力股"是DuerOS。

数据上看进展也很神速。李彦宏在财报分析会议上专门夸赞了DuerOS,说小度智能音箱系列及相关产品倍受好评,2018年6月DuerOS语音唤醒超过4亿次,几乎是三个月前的两倍。

DuerOS的用户增长让厂长很开心,他表示即便还不到谈商业变现的时候,但业务进展如此之快,如果这个领域可以变现了,百度也会是头一家

在第二季度里,财大气粗的百度推出了售价89元的智能音箱,把国内智能音箱的竞争拖入了百元大战,也带动了DuerOS系统快速进入更多寻常百姓家。

另外,百度还把DuerOS带给了20多家车厂,包含宝马、奔驰-戴姆勒、福特、现代、起亚、奇瑞、北汽和一汽在内的大车厂,都计划推出DuerOS提供的车载语音交互、人脸识别,AR等方面的功能。

Apollo和DuerOS,也在此形成了协同效应。

其他进展

最后,百度AI航母中最基础也最长远的项目,莫过于AI开发者生态。

百度在刚结束不久的AI开发者大会上推出了百度大脑3.0,并且提供了EasyDL,AutoDL和AI Studio等系列开发工具包,以此推动深度学习平台PaddlePaddle的应用。

而且在基础设施层面,昆仑芯片也已经宣布,云端和终端的AI开发者生态,百度都有落子。

隐而未宣的是,百度云也在后发情况下快速追了上来,目前跟阿里云和腾讯云一道,处于国内公有云第一梯队,To B和To G方面的AI商业项目,也已闷声展开。

不过AI开发者生态能展现的潜力和能力,或许需要更长的时间,但百度目前的优势也是显而易见的:百度披露数据称,刚结束的AI开发者大会有全球7300多人来到北京现场。

当然备受关注的,还有百度的智能小程序。

在分析师电话会议上,小程序是被提及最多的问题之一,但是目前似乎百度也没有更多实质性的进展可以对外披露。

等下一季财报再说吧。

欢迎大家关注我们的专栏:量子位 - 知乎专栏

诚挚招聘

量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复"招聘"两个字。

量子位 QbitAI· 头条号签约作者

վ'ᴗ' ի 追踪AI技术和产品新动态



via 量子位 - 知乎专栏 https://ift.tt/2M7hkQA
RSS Feed

RSS5

IFTTT

入职仅一年,套现5000多万后背刺马斯克搬走 Grok 核心代码库!-InfoQ 每周精要894期

「每周精要」 NO. 894 2025/09/06 头条 HEADLINE 入职仅一年,套现 5000 多万搬走 Grok 核心代码库! 业内专家:拥有菜谱不等于能做出同样的菜 精选 SELECTED AI 公司创始人现跑路迪拜! 80% 收入烧广告、假账骗投资人,微...