2018年1月7日星期日

纵览轻量化卷积神经网络:SqueezeNet、MobileNet、ShuffleNet、Xception

本文就近年提出的四个轻量化模型进行学习和对比,四个模型分别是:SqueezeNet、MobileNet、ShuffleNet、Xception。


目录


一、引言 

二、轻量化模型 

    2.1 SqueezeNet

    2.2 MobileNet

    2.3 ShuffleNet

    2.4 Xception

三、网络对比 


一、引言


自 2012 年 AlexNet 以来,卷积神经网络(简称 CNN)在图像分类、图像分割、目标检测等领域获得广泛应用。随着性能要求越来越高,AlexNet 已经无法满足大家的需求,于是乎各路大牛纷纷提出性能更优越的 CNN 网络,如 VGG、GoogLeNet、ResNet、DenseNet 等。由于神经网络的性质,为了获得更好的性能,网络层数不断增加,从 7 层 AlexNet 到 16 层 VGG,再从 16 层 VGG 到 GoogLeNet 的 22 层,再到 152 层 ResNet,更有上千层的 ResNet 和 DenseNet。虽然网络性能得到了提高,但随之而来的就是效率问题。

 

效率问题主要是模型的存储问题和模型进行预测的速度问题(以下简称速度问题)


  • 第一,存储问题。数百层网络有着大量的权值参数,保存大量权值参数对设备的内存要求很高;


  • 第二,速度问题。在实际应用中,往往是毫秒级别,为了达到实际应用标准,要么提高处理器性能(看英特尔的提高速度就知道了,这点暂时不指望),要么就减少计算量。


只有解决 CNN 效率问题,才能让 CNN 走出实验室,更广泛的应用于移动端。对于效率问题,通常的方法是进行模型压缩(Model Compression),即在已经训练好的模型上进行压缩,使得网络携带更少的网络参数,从而解决内存问题,同时可以解决速度问题。


相比于在已经训练好的模型上进行处理,轻量化模型模型设计则是另辟蹊径。轻量化模型设计主要思想在于设计更高效的「网络计算方式」(主要针对卷积方式),从而使网络参数减少的同时,不损失网络性能。

 

本文就近年提出的四个轻量化模型进行学习和对比,四个模型分别是:SqueezeNet、MobileNet、ShuffleNet、Xception。


(PS: 以上四种均不是模型压缩方法!!)

 

以下是四个模型的作者团队及发表时间



其中 ShuffleNet 论文中引用了 SqueezeNet;Xception 论文中引用了 MobileNet


二、轻量化模型


由于这四种轻量化模型仅是在卷积方式上做了改变,因此本文仅对轻量化模型的创新点进行详细描述,对实验以及实现的细节感兴趣的朋友,请到论文中详细阅读。


2.1 SqueezeNet


SqueezeNet 由伯克利&斯坦福的研究人员合作发表于 ICLR-2017,论文标题:

《SqueezeNet:AlexNet-level accuracy with 50x fewer parameters and <0.5MB》


命名:


从名字——SqueezeNet 就知道,本文的新意是 squeeze,squeeze 在 SqueezeNet 中表示一个 squeeze 层,该层采用 1*1 卷积核对上一层 feature map 进行卷积,主要目的是减少 feature map 的维数(维数即通道数,就是一个立方体的 feature map,切成一片一片的,一共有几片)。


创新点:


1. 采用不同于传统的卷积方式,提出 fire module;fire module 包含两部分:squeeze 层+expand 层

 

创新点与 inception 系列的思想非常接近!首先 squeeze 层,就是 1*1 卷积,其卷积核数要少于上一层 feature map 数,这个操作从 inception 系列开始就有了,并美其名曰压缩,个人觉得「压缩」更为妥当。

Expand 层分别用 1*1 和 3*3 卷积,然后 concat,这个操作在 inception 系列里面也有。


SqueezeNet 的核心在于 Fire module,Fire module 由两层构成,分别是 squeeze 层+expand 层,如下图 1 所示,squeeze 层是一个 1*1 卷积核的卷积层,expand 层是 1*1 和 3*3 卷积核的卷积层,expand 层中,把 1*1 和 3*3 得到的 feature map 进行 concat。



具体操作情况如下图所示:



Fire module 输入的 feature map 为 H*W*M 的,输出的 feature map 为 H*M*(e1+e3),可以看到 feature map 的分辨率是不变的,变的仅是维数,也就是通道数,这一点和 VGG 的思想一致。


首先,H*W*M 的 feature map 经过 Squeeze 层,得到 S1 个 feature map,这里的 S1 均是小于 M 的,以达到「压缩」的目的,详细思想可参考 Google 的 Inception 系列。

 

其次,H*W*S1 的特征图输入到 Expand 层,分别经过 1*1 卷积层和 3*3 卷积层进行卷积,再将结果进行 concat,得到 Fire module 的输出,为 H*M*(e1+e3) 的 feature map。

 

fire 模块有三个可调参数:S1,e1,e3,分别代表卷积核的个数,同时也表示对应输出 feature map 的维数,在文中提出的 SqueezeNet 结构中,e1=e3=4s1。

 

讲完 SqueezeNet 的核心——Fire module,看看 SqueezeNet 的网络结构,如下图所示:


 


网络结构设计思想,同样与 VGG 的类似,堆叠的使用卷积操作,只不过这里堆叠的使用本文提出的 Fire module(图中用红框部分)。


看看 Squezeenet 的参数数量以及性能:



在这里可以看到,论文题目中提到的小于 0.5M,是采用了 Deep Compression 进行模型压缩之后的结果!!

 

看了上图再回头看一看论文题目: 

SqueezeNet :AlexNet-level accuracy with 50x fewer parameters and <0.5MB

标!题!党!SqueezeNet < 0.5MB, 这个是用了别的模型压缩技术获得的,很容易让人误以为 SqueezeNet 可以压缩模型!!

 

SqueezeNet 小结:

 

  • 1 Fire module 与 GoogLeNet 思想类似,采用 1*1 卷积对 feature map 的维数进行「压缩」,从而达到减少权值参数的目的;

  • 2 采用与 VGG 类似的思想——堆叠的使用卷积,这里堆叠的使用 Fire module

 

SqueezeNet 与 GoogLeNet 和 VGG 的关系很大!


2.2 MobileNet


MobileNet 由 Google 团队提出,发表于 CVPR-2017,论文标题:

《MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications》

 

命名:


MobileNet 的命名是从它的应用场景考虑的,顾名思义就是能够在移动端使用的网络模型。

 

创新点:


1. 采用名为 depth-wise separable convolution 的卷积方式代替传统卷积方式,以达到减少网络权值参数的目的。

 

通过采用 depth-wise convolution 的卷积方式,达到:1. 减少参数数量 2. 提升运算速度。(这两点是要区别开的,参数少的不一定运算速度快!还要看计算方式!)

 

depth-wise convolution 不是 MobileNet 提出来的,也是借鉴,文中给的参考文献是 2014 年的博士论文——《L. Sifre. Rigid-motion scattering for image classification. hD thesis, Ph. D. thesis, 2014》

 

depth-wise convolution 和 group convolution 是类似的,depth-wise convolution 是一个卷积核负责一部分 feature map,每个 feature map 只被一个卷积核卷积;group convolution 是一组卷积核负责一组 feature map,每组 feature map 只被一组卷积核卷积。Depth-wise convolution 可以看成是特殊的 group convolution,即每一个通道是一组。


MobileNets 精华在于卷积方式——depth-wise separable convolution;采用 depth-wise separable convolution,会涉及两个超参:Width Multiplier 和 Resolution Multiplier 这两个超参只是方便于设置要网络要设计为多小,方便于量化模型大小。

 

MobileNet 将标准卷积分成两步:


  • 第一步 Depth-wise convolution, 即逐通道的卷积,一个卷积核负责一个通道,一个通道只被一个卷积核「滤波」;


  • 第二步,Pointwise convolution,将 depth-wise convolution 得到的 feature map 再「串」起来,注意这个「串」是很重要的。「串」作何解?为什么还需要 pointwise convolution?作者说:However it only filters input channels, it does not combine them to create new features. Soan additional layer that computes a linear combination ofthe output of depth-wise convolution via 1 × 1 convolutionis needed in order to generate these new features。

 

从另外一个角度考虑,其实就是:输出的每一个 feature map 要包含输入层所有 feature map 的信息。然而仅采用 depth-wise convolution,是没办法做到这点,因此需要 pointwise convolution 的辅助。

 

「输出的每一个 feature map 要包含输入层所有 feature map 的信息」这个是所有采用 depth-wise convolution 操作的网络都要去解决的问题,ShuffleNet 中的命名就和这个有关!详细请看 2.3。

 

Standard convolution、depth-wise convolution 和 pointwise convolution 示意图如下:

 

 


其中输入的 feature map 有 M 个,输出的 feature map 有 N 个。


对 Standard convolution 而言,是采用 N 个大小为 DK*DK 的卷积核进行操作(注意卷积核大小是 DK*DK, DK*DK*M 是具体运算时一个卷积核的大小!)。

 

而 depth-wise convolution + pointwise convolution 需要的卷积核呢?

 

Depth-wise convolution :一个卷积核负责一个通道,一个通道只被一个卷积核卷积;则这里有 M 个 DK*DK 的卷积核; 

 

Pointwise convolution:为了达到输出 N 个 feature map 的操作,所以采用 N 个 1*1 的卷积核进行卷积,这里的卷积方式和传统的卷积方式是一样的,只不过采用了 1*1 的卷积核;其目的就是让新的每一个 feature map 包含有上一层各个 feature map 的信息!在此理解为将 depth-wise convolution 的输出进行「串」起来。


下面举例讲解 Standard convolution、depth-wise convolution 和 pointwise convolution。


假设输入的 feature map 是两个 5*5 的,即 5*5*2;输出 feature map 数量为 3,大小是 3*3(因为这里采用 3*3 卷积核)即 3*3*3。

 

标准卷积是将一个卷积核(3*3)复制 M 份(M=2), 让二维的卷积核(面包片)拓展到与输入 feature map 一样的面包块形状。


Standard 过程如下图,X 表示卷积,+表示对应像素点相加,可以看到对于 O1 来说,其与输入的每一个 feature map 都「发生关系」,包含输入的各个 feature map 的信息。



Depth-wise 过程如下图,可以看到 depth-wise convolution 得出的两个 feature map——fd1 和 fd2 分别只与 i1 和 i2「发生关系」,这就导致违背上面所承认的观点「输出的每一个 feature map 要包含输入层所有 feature map 的信息」,因而要引入 pointwise convolution。

 


那么计算量减少了多少呢?通过如下公式计算: 


 


其中 DK 为标准卷积核大小,M 是输入 feature map 通道数,DF 为输入 feature map 大小,N 是输出 feature map 大小。本例中,DK=3,M=2,DF=5,N=3,参数的减少量主要就与卷积核大小 DK 有关。在本文 MobileNet 的卷积核采用 DK=3,则大约减少了 8~9 倍计算量。

 

看看 MobileNet 的网络结构,MobileNet 共 28 层,可以发现这里下采样的方式没有采用池化层,而是利用 depth-wise convolution 的时候将步长设置为 2,达到下采样的目的。

 


1.0 MobileNet-224 与 GoogLeNet 及 VGG-16 的对比:

 


可以发现,相较于 GoogLeNet,虽然参数差不多,都是一个量级的,但是在运算量上却小于 GoogLeNet 一个量级,这就得益于 depth-wise convolution!

 

MobileNet 小结:

  • 1. 核心思想是采用 depth-wise convolution 操作,在相同的权值参数数量的情况下,相较于 standard convolution 操作,可以减少数倍的计算量,从而达到提升网络运算速度的目的。


  • 2. depth-wise convolution 的思想非首创,借鉴于 2014 年一篇博士论文:《L. Sifre. Rigid-motion scattering for image classification. hD thesis, Ph. D. thesis, 2014》


  • 3. 采用 depth-wise convolution 会有一个问题,就是导致「信息流通不畅」,即输出的 feature map 仅包含输入的 feature map 的一部分,在这里,MobileNet 采用了 point-wise convolution 解决这个问题。在后来,ShuffleNet 采用同样的思想对网络进行改进,只不过把 point-wise convolution 换成了 channel shuffle,然后给网络美其名曰 ShuffleNet,欲知后事如何,请看 2.3 ShuffleNet


2.3 ShuffleNet


ShuffleNet 是 Face++团队提出的,与 MobileNet 一样,发表于 CVPR-2017,但晚于 MobileNet 两个月才在 arXiv 上公开。论文标题:

《ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices》

 

命名:


一看名字 ShuffleNet,就知道 shuffle 是本文的重点,那么 shuffle 是什么?为什么要进行 shuffle?

 

shuffle 具体来说是 channel shuffle,是将各部分的 feature map 的 channel 进行有序的打乱,构成新的 feature map,以解决 group convolution 带来的「信息流通不畅」问题。(MobileNet 是用 point-wise convolution 解决的这个问题)


因此可知道 shuffle 不是什么网络都需要用的,是有一个前提,就是采用了 group convolution,才有可能需要 shuffle!!为什么说是有可能呢?因为可以用 point-wise convolution 来解决这个问题。

 

创新点:


1. 利用 group convolution 和 channel shuffle 这两个操作来设计卷积神经网络模型, 以减少模型使用的参数数量。

 

其中 group convolutiosn 非原创,而 channel shuffle 是原创。channel shuffle 因 group convolution 而起,正如论文中 3.1 标题: . Channel Shuffle for Group Convolution; 

 

采用 group convolution 会导致信息流通不当,因此提出 channel shuffle,所以 channel shuffle 是有前提的,使用的话要注意!

 

对比一下 MobileNet,采用 shuffle 替换掉 1*1 卷积,这样可以减少权值参数,而且是减少大量权值参数,因为在 MobileNet 中,1*1 卷积层有较多的卷积核,并且计算量巨大,MobileNet 每层的参数量和运算量如下图所示:

 


ShuffleNet 的创新点在于利用了 group convolution 和 channel shuffle,那么有必要看看 group convolution 和 channel shuffle。

 

Group convolution 


Group convolution 自 Alexnet 就有,当时因为硬件限制而采用分组卷积;之后在 2016 年的 ResNeXt 中,表明采用 group convolution 可获得高效的网络;再有 Xception 和 MobileNet 均采用 depth-wise convolution, 这些都是最近出来的一系列轻量化网络模型。depth-wise convolution 具体操作可见 2.2 MobileNet 里边有简介。

 

如下图 (a) 所示, 为了提升模型效率,采用 group convolution,但会有一个副作用,即:「outputs from a certain channel are only derived from a small fraction of input channels.」


于是采用 channel shuffle 来改善各组间「信息流通不畅」问题,如下图 (b) 所示。


具体方法为:把各组的 channel 平均分为 g(下图 g=3)份,然后依次序的重新构成 feature map。



Channel shuffle 的操作非常简单,接下来看看 ShuffleNet,ShuffleNet 借鉴了 Resnet 的思想,从基本的 resnet 的 bottleneck unit 逐步演变得到 ShuffleNet 的 bottleneck unit,然后堆叠的使用 ShuffleNet bottleneck unit 获得 ShuffleNet;

 

下图展示了 ShuffleNet unit 的演化过程 


  • 图 (a):是一个带有 depth-wise convolution 的 bottleneck unit;


  • 图 (b):作者在 (a) 的基础上进行变化,对 1*1 conv 换成 1*1 Gconv,并在第一个 1*1 Gconv 之后增加一个 channel shuffle 操作; 


  • 图 (c): 在旁路增加了 AVG pool,目的是为了减小 feature map 的分辨率;因为分辨率小了,于是乎最后不采用 Add,而是 concat,从而「弥补」了分辨率减小而带来的信息损失。



文中提到两次,对于小型网络,多多使用通道,会比较好。


「this is critical for small networks, as tiny networks usually have an insufficient number of channels to process the information」


所以,以后若涉及小型网络,可考虑如何提升通道使用效率。

 

至于实验比较,并没有给出模型参数量的大小比较,而是采用了 Complexity (MFLOPs) 指标,在相同的 Complexity (MFLOPs) 下,比较 ShuffleNet 和各个网络,还专门和 MobileNet 进行对比,由于 ShuffleNet 相较于 MobileNet 少了 1*1 卷积层,所以效率大大提高了嘛,贴个对比图随意感受一下好了。



ShuffleNet 小结:


  • 1. 与 MobileNet 一样采用了 depth-wise convolution,但是针对 depth-wise convolution 带来的副作用——「信息流通不畅」,ShuffleNet 采用了一个 channel shuffle 操作来解决。


  • 2. 在网络拓扑方面,ShuffleNet 采用的是 resnet 的思想,而 mobielnet 采用的是 VGG 的思想,2.1 SqueezeNet 也是采用 VGG 的堆叠思想。


2.4 Xception


Xception 并不是真正意义上的轻量化模型,只是其借鉴 depth-wise convolution,而 depth-wise convolution 又是上述几个轻量化模型的关键点,所以在此一并介绍,其思想非常值得借鉴。

 

Xception 是 Google 提出的,arXiv 的 V1 版本 于 2016 年 10 月公开。论文标题:

《Xception: Deep Learning with Depth-wise Separable Convolutions》

 

命名:


Xception 是基于 Inception-V3 的,而 X 表示 Extreme,为什么是 Extreme 呢?因为 Xception 做了一个加强的假设,这个假设就是: 

we make the following hypothesis: that the mapping of cross-channels correlations and spatial correlations in the feature maps of convolutional neural networks can be entirely decoupled

 

创新点:


1. 借鉴(非采用)depth-wise convolution 改进 Inception V3。

 

既然是改进了 Inception v3,那就得提一提关于 inception 的一下假设(思想)了。


「the fundamental hypothesis behind Inception is that cross-channel correlations and spatial correlations are sufficiently decoupled that it is preferable not to map them jointly」


简单理解就是说,卷积的时候要将通道的卷积与空间的卷积进行分离,这样会比较好。(没有理论证明,只有实验证明,就当它是定理,接受就好了,现在大多数神经网络的论文都这样。


既然是在 Inception V3 上进行改进的,那么 Xception 是如何一步一步的从 Inception V3 演变而来。

 

下图 1 是 Inception module,图 2 是作者简化了的 inception module(就是只保留 1*1 的那条「路」,如果带着 avg pool,后面怎么进一步假设嘛~) 。

 



假设出一个简化版 inception module 之后,再进一步假设,把第一部分的 3 个 1*1 卷积核统一起来,变成一个 1*1 的,后面的 3 个 3*3 的分别「负责」一部分通道,如图 3 所示; 最后提出「extreme」version of an Inception,module Xception 登场,,先用 1*1 卷积核对各通道之间(cross-channel)进行卷积,如图 4 所示,

 


 

作者说了,这种卷积方式和 depth-wise convolution 几乎一样。Depth-wise convolution 较早用于网络设计是来自:Rigid-Motion Scatteringfor Image Classification,但是具体是哪一年提出,不得而知;至少 2012 年就有相关研究,再比如说 AlexNet,由于内存原因,AlexNet 分成两组卷积 ;想深入了解 Depth-wise convolution 的可以查阅本论文 2.Prior work,里面有详细介绍。

 

Xception 是借鉴 Rigid-Motion Scatteringfor Image Classification 的 Depth-wise convolution,是因为 Xception 与原版的 Depth-wise convolution 有两个不同之处 :


  • 第一个:原版 Depth-wise convolution,先逐通道卷积,再 1*1 卷积; 而 Xception 是反过来,先 1*1 卷积,再逐通道卷积; 


  • 第二个:原版 Depth-wise convolution 的两个卷积之间是不带激活函数的,而 Xception 在经过 1*1 卷积之后会带上一个 Relu 的非线性激活函数;

 


Xception 结构如上图所示,共计 36 层分为 Entry flow;Middle flow;Exit flow。


Entry flow 包含 8 个 conv;Middle flow 包含 3*8 =24 个 conv;Exit flow 包含 4 个 conv,所以 Xception 共计 36 层。

 

文中 Xception 实验部分是非常详细的,实现细节可参见论文。

 


Xception 小结:


Xception 是基于 Inception-V3,并结合了 depth-wise convolution,这样做的好处是提高网络效率,以及在同等参数量的情况下,在大规模数据集上,效果要优于 Inception-V3。这也提供了另外一种「轻量化」的思路:在硬件资源给定的情况下,尽可能的增加网络效率和性能,也可以理解为充分利用硬件资源。


三、网络对比


本文简单介绍了四个轻量化网络模型,分别是 SqueezeNet、 MobileNet、 ShuffleNet 和 Xception,前三个是真正意义上的轻量化网络,而 Xception 是为提升网络效率,在同等参数数量条件下获得更高的性能。

 

在此列出表格,对比四种网络是如何达到网络轻量化的。


实现轻量化技巧



这么一看就发现,轻量化主要得益于 depth-wise convolution,因此大家可以考虑采用 depth-wise convolution 来设计自己的轻量化网络,但是要注意「信息流通不畅问题」。


解决「信息流通不畅」的问题,MobileNet 采用了 point-wise convolution,ShuffleNet 采用的是 channel shuffle。MobileNet 相较于 ShuffleNet 使用了更多的卷积,计算量和参数量上是劣势,但是增加了非线性层数,理论上特征更抽象,更高级了;ShuffleNet 则省去 point-wise convolution,采用 channel shuffle,简单明了,省去卷积步骤,减少了参数量。

 

学习了几个轻量化网络的设计思想,可以看到,并没有突破性的进展,都是借鉴或直接使用前几年的研究成果。希望广大研究人员可以设计出更实在的轻量化网络。

 

通过这几篇论文的创新点,得出以下可认为是发 (Shui) 论文的 idea:


  • 1. 采用 depth-wise convolution,再设计一个方法解决「信息流通不畅」问题,然后冠以美名 XX-Net。(看看 ShuffleNet 就是)


  • 2. 针对 depth-wise convolution 作文章,卷积方式不是千奇百怪么?各种卷积方式可参考 Github(http://ift.tt/2D9B8PL (Shui) 论文。


  • 3. 接着第 2,如果设计出来一个新的卷积方式,如果也存在一些「副作用」,再想一个方法解决这个副作用,再美其名曰 XX-Net。就是自己「挖」个坑,自己再填上去。


个人介绍: 余霆嵩,广东工业大学研三学生,研究方向:深度学习,目标检测,图像分类,模型压缩


]]> 原文: http://ift.tt/2CQvBQZ
RSS Feed

机器知心

IFTTT

CMU提出对抗生成网络:可实现对人脸识别模型的神经网络攻击

生成对抗网络(GAN)已经是人工智能领域内的一个常用词了,但你听说过对抗生成网络(AGN)吗?近日,卡内基梅隆大学和北卡罗来纳大学教堂山分校的研究者在 arXiv 上发布的一篇论文提出了这种网络,可实现对当前最佳的人脸识别模型的神经网络攻击。


深度神经网络(DNN)已经在人脸验证(即确定两张人脸图像是否属于同一个人)方面超越了人类的水平。不幸的是,研究还表明使用对抗样本(adversarial example)就可以轻易骗过 DNN,而且这样的对抗样本还能通过系统性的方法找到——这里的对抗样本是指经过轻微扰动处理的样本,人眼无法将这些样本与良性的样本区分开。

 

但是,我们之前的研究表明,这种攻击还可以通过实体的方式实现,即通过创造一个对抗式人造物品来欺骗 DNN——该 DNN 曾经看到过包含该物品的无修改图像。具体来说,这项工作展示了可以如果通过在实体上渲染一个人可以戴上的眼镜来欺骗基于 DNN 的人脸识别。

 

在这篇论文中,我们在空间的全部三个维度上改进了通过实体方式实现的攻击。我们的攻击的一个关键组件和新颖之处是:不同于只能得到单个可能被某个机器学习算法误分类的大多数攻击算法,我们的方法基于生成对抗网络(GAN)近来的研究成果,可以开发出输出是可以通过实体方式实现的攻击实例的神经网络。我们将这种攻击网络称为对抗生成网络(AGN)。我们将 AGN 的目标设定为两种准确度达到了人类水平的基于 DNN 的人脸识别算法——VGG 和 OpenFace,使该 AGN 可以输出能让攻击者避开正确识别或不引起注意地伪装成特定目标的眼镜。为了证明 AGN 也能在人脸识别之外的领域起效,我们还训练了可以欺骗用于识别手写数字的分类器(是在 MNIST 数据集上训练的)的 AGN。


我们通过实验表明,在白盒环境(其中 AGN 能够访问被攻击的训练后的网络,这是一个典型假设,参见 [47] 等)中训练的 AGN 可以在简单的实体可实现性之外得到具有一些相关特征的攻击。具体而言,我们的研究表明:

 

  • AGN 可以创造在人类看来和正常眼镜(即不是为对抗目的而设计的眼镜)一样不引人注意的眼镜。
  • AGN 能得到可以大规模部署的攻击。我们特别展示了我们称之为「通用」的攻击,因为它们能得到一些(10 个或更少)恶意设计的眼镜,其中大部分(而不只是一个攻击者)都可以被用来避开人脸识别。
  • AGN 能得到针对某些防御手段稳健的攻击。特别要指出的是,我们可以通过增加使用有标签「攻击」图像(参阅 [34])的训练和为确定输入是否是攻击的检测器(参阅 [39])来改进 VGG 和 OpenFace DNN。

 

AGN 有一个显著特点:一个训练好的 AGN 能够有效地生成大量不同的对抗样本。这可以被攻击者用来生成不同于之前的攻击的攻击手段(因此更有可能成功),但防御者也可以生成有标签的负例输入,从而增强他们的分类器的训练。


论文:对抗生成网络:针对当前最佳人脸识别的神经网络攻击(Adversarial Generative Nets: Neural Network Attacks on State-of-the-Art Face Recognition)



论文地址:http://ift.tt/2Ecb7hW


在这篇论文中,我们表明针对基于深度神经网络(DNN)的人脸识别系统的误分类攻击比之前人们说明的情况更加危险,即使是在对手仅能操纵她的实际外观的情况下也是如此(相对的还有直接操纵该 DNN 的图像输入)。具体来说,我们展示了一种创造特殊眼镜的方法——戴上这种眼镜时,能够成功实现定向的(伪装成别人)或非定向的(避免被识别)的攻击;同时相比于之前的研究成果,这种攻击在这三个方面中的一个或多个上有所改进:(i) 对观察者而言的不显著性,我们通过用户研究进行了测试;(ii) 在面对被提出的防御手段时的攻击稳健性;(iii) 在解除眼镜创造与佩戴它们的对象之间的关联这个意义上的可扩展性,即通过创造有助于误分类的眼镜的「通用」集合。这些改进的核心是对抗生成网络,这是我们提出的一种用于自动生成可以通过实体方式实现的攻击人造物品(这里是眼镜)的方法。

 

训练 AGN 的算法如算法 1 所示。该算法的输入是一组良性样本 (X)、一个预初始化的生成器和鉴别器、一个将被欺骗的神经网络、一个真实样本数据集(生成器的输出应该与其中的样本很像)。



图 3 给出了生成器在训练结束时得出的一组眼镜。


图 3:由生成器得到的眼镜样本(左图)和来自训练集的类似眼镜(右图)

G(生成器)和 D(鉴别器)的最终架构在表 1 中给出。


表 1:本研究中所用的神经网络的架构。对于 OpenFace 和 VGG DNN,我们仅报告了为基础、特征提取、DNN 增加的层。Conv 指卷积,Deconv 指去卷积(也叫做转置卷积),FC 指全连接层,Flatten 指矩阵的向量化,LrB 指后面跟着一个 leaky 整流线性层的批规范化,LReLu 指 leaky 整流线性层,MP 指最大池化层,RB 指后面跟着一个整流线性层的批规范化,tanh 指双曲正切。G 和 D 中所有的卷积和去卷积都使用了 5×5 过滤器,步长和填充为 2。检测器的卷积使用的 3×3 过滤器,步长为 2,填充为 1。检测器的 MP 层的窗口大小为 2×2,步长为 2。


表 3:在数字环境中的攻击结果。在每次攻击中,我们使用了对象的 3 张图像来进行误分类。


图 4:一个数字的避免被识别的示例。左图:演员 Owen Wilson 的一张图像,可以被 VGG143 以 1.00 的概率正确分类。右图:使用 AGN 的输出来避开 VGG143 的识别(该图像被分配到正确类别的概率低于 0.01)。


表 4:实体可实现性实验的总结。前两列给出了被攻击的 DNN 和攻击者。


图 7:通用型的避开 VGG143 和 OF143 的识别。x 轴表示用于训练对抗生成器的对象的数量。当对象的数量是 0 时,使用了一个非对抗式的生成器。y 轴表示被误分类(即成功避免被识别)的图像的平均比例。


图 8:来自不同集合的眼镜被标记为真实的时间所占的百分比。这里特别标示了 60% 水平线,是指前一半「真实」眼镜至少有 60% 的时间被标记为真实。


表 7:所选择的眼镜集合对的相对真实度。对于每两个集合之间的比较,我们都在括号中报告了每组中被研究参与者标记为真实的眼镜的比例;另外还报告了组之间的比值比(odds ratio)以及 χ2 独立性测验的 p 值。


图 9:通过 AGN 生成的攻击示例。左图:来自 MNIST 的随机数字样本。中图:预训练的生成器生成的数字。右图:AGN 生成的被该数字识别 DNN 误分类的数字。


]]> 原文: http://ift.tt/2CQesqC
RSS Feed

机器知心

IFTTT

Tensorlang:基于TensorFlow的可微编程语言

近日,Adam Bouhenguel 在 GitHub 上发布了一种基于 TensorFlow 的新型编程语言 Tensorlang,适用于更快、更强大和更易用的大规模计算网络(如深度神经网络)。本文介绍了 Tensorlang 的优势。


GitHub 地址:http://ift.tt/2CBCXUo


我们的目标是为更快、更强大和更易用的大规模计算网络(如深度神经网络)定义一种编程语言。

注意:在早期开发阶段,Tensorlang 的代号是「Nao」(脑)。现在仍然有一些地方还在使用「Nao」,需要注意。


为什么要创建新的编程语言?


根据现有工具的使用经验,Tensorlang 的设计目标是解决以下需求:


  • 用线性缩放使单个机器的本地 CPU 和 GPU 饱和的能力;
  • 无缝扩展至机器集群;
  • 将程序编译成可在主要操作系统和移动设备上快速运行的本地代码的能力;
  • 本地支持符号微分;
  • 易于对图误差进行 debug 和实际的堆栈跟踪;
  • 匹配其他编程环境(如无延迟执行)的执行模型;
  • 高产的 REPL 环境;
  • 与现有库和模型的兼容性。


为达到以上目的,我们需要在多个方面进行改进:


  • debug
  • 维护
  • 构建(基于小系统构建大系统)
  • 清晰


这样,Tensorlang 可直接将程序编译为 TensorFlow MetaGraphDefs。


为什么不使用现有的 TensorFlow Python API?


TensorFlow 专门用于构建计算图。这些图比较大,且其执行需要在大量机器上展开。其运转的部分技巧在于允许异步评估表达式。尽管现有的 TensorFlow 软件包提供定义这些表达式的 API,但它们不提供高级别的语法工具链,或者高产的开发环境。


Tensorlang 具备适合当前机器学习中数据流计算的语法,支持模板、类型推断和符号微分。


为什么不直接将现有语言(如 Python)编译成 TensorFlow?


直接将语言编译成 TensorFlow 需要作出妥协(以下两种之一):


1. 默认 Python 可并行执行,但这意味着大部分现有 Python 程序无法运行,使用 Python 的益处大打折扣。


2. 放弃 TensorFlow 并行模型的优势。这将大幅降低语言的灵活性和可扩展特性。


所以我们需要和主流编程语言稍微不同的语言语义,那么为什么需要定义一种新的语法呢?


编程语法是用编程语言调用和操作一些特定概念的方法,大多数语法非常接近 GO、JavaScript 和 Python 等主流语言。我们在该项目中介绍了一种新型语言,它非常适合于构建许多当前流行的机器学习模型。


例如机器学习中的许多论文包含了将数据的转换描述为图形变换,这些图可能看起来像 f - > g - > h。若用主流语言描述这种变换,可能我们需要使用复合函数并颠倒书写顺序为 h(g(f)),这种方式阻碍了人们用更自然的方式表达这种变换。而构建一种专门化的语法意味着我们能按照原来的转换关系图表达运算过程。


在 Tensorlang 中,我们可以将转换关系写为:


  1. f -> g -> h


这一个语句会编译成 h(g(f)),对于更高阶的转换来说,我们可能希望添加一些额外的参数:


  1. f -> g(1.0, .) -> h


上面的表达式被编译为 h(g(1.0,f)),这个语句同样能使用多线形式表达,其中只要使用「^」就能表达中间变量或自变量的关系。


  1. f

  2. g(1.0, ^)  -- intermediate

  3. h(^)


符号微分


因为这些表达式可直接编译到 TensorFlow 计算图,且 TensorFlow 支持符号微分,那么我们就能免费得到符号微分的方法。这一部分的语法仍然有小问题,但是这也是一种定义函数及其符号梯度的方法。


  1. squareAndMore = func(x) { emit x * x + x }

  2. squareAndMoreDx = grad[squareAndMore]

  3. // squareAndMore(1.0) == 2.0

  4. // squareAndMoreDx(1.0) == 3.0


训练和函数优化


由于神经网络只是由许多其他函数(每个函数具备某种内部状态)构成的函数,我们可以使用这些概念训练神经网络!我们不期待人类来确定网络的内部权重,而是用实验方法发现可接受的权重值。这一过程就是训练。为了训练函数,我们需要 一些输入值示例,以及一种确定函数输出与可接受阈值的近似程度的方法。函数训练器使用符号微分和更新函数隐藏状态的规则。


查看简单 MNIST 分类器的示例:http://ift.tt/2CQpOuJ


本地循环(Native loop)


循环难以使用 TensorFlow 的 Python API 编写。但是它不必这样。


对比 Python API 方法:


  1. i = tf.constant(0)

  2. c = lambda i: tf.less(i, 10)

  3. b = lambda i: tf.add(i, 1)

  4. r = tf.while_loop(c, b, [i])


与我们的方法:


  1. r = for i = 5; foo = 1; i < 10 {

  2.  emit foo = foo * i

  3.  emit i = i + 1

  4. }

  5. // r:i == 10

  6. // r:foo == 15120


本地条件(Native conditional)


对比 TensorFlow Python API 中的 if/else 语句:


  1. x = tf.constant(2)

  2. y = tf.constant(5)

  3. def f1(): return x * 17

  4. def f2(): return y + 23

  5. r = tf.cond(tf.less(x, y), f1, f2)



  1. x = 2

  2. y = 5

  3. if x < y {

  4.  x * 17

  5. } else {

  6.  y + 23

  7. }


函数


函数可以采取任意数量的张量作为输入,并生成任意数量的张量作为输出。函数体中的表达式被懒惰而异步地评估。好消息不仅仅是计算自动并行化,而且在计算你不需要的值时,没有计算浪费。为了最大化这些优势,你需要调整一下对执行的看法。


  1. func add3(x, y, z) {

  2.  emit sum = x + y + z

  3.  emit part = x + y

  4. }

  5. // r = add3(1, 2, 3)

  6. // r:sum == 6

  7. // r:part == 3


在上述示例中你将会发现一个看起来熟悉的函数定义语法。我们有 emit 而不是 return,函数可以 emit 具有不同名称的张量,但是当这些值发出时,函数无法停止执行。


属性(Attribute)


有时你想为基于编译时已知信息的函数实现引入灵活性。可以在这些用例中使用属性。


  1. func increment[amount](x) {

  2.  return amount + x

  3. }

  4. // increment[amount: 1](1) == 2

  5. // incrementByTwo = increment[amount: 2]

  6. // incrementByTwo(1) == 3


如上所见,有可能通过提供一个现有函数的属性即可定义一个新函数。函数的输入和输出只能是向量,而属性可以是一切。属性容易被识别,因为它们在函数定义和应用中都被 [] 围绕。函数属性必须始终以关键字形式给出。


宏指令(Macro)


有时你想使用更高阶函数工作。这可能要使用宏指令。


  1. func incrementerFactory[amount] {

  2.  emit fn = func(x) {

  3.    emit sum = amount + x

  4.  }

  5. }


如上所见,函数定义与宏指令定义之间唯一的区别是使用 () 指定零或更多参数。如果定义中有 (),则是函数定义;如果没有,则是宏指令定义。


]]> 原文: http://ift.tt/2CQpPyN
RSS Feed

机器知心

IFTTT

刚刚,英伟达发布最强无人车AI芯片,以及一系列自动驾驶新产品

夏乙 发自 凹非寺 量子位 出品 | 公众号 QbitAI

英伟达再次带来新"核弹"。

在刚刚结束的英伟达发布会上,黄仁勋正式发布了DRIVE Xavier,这是一款为无人车准备的AI超级计算芯片,也是有史以来最复杂、最大的SoC。

Drive Xavier的面积达到350mm²,内建90亿个晶体管,它支持每秒30万亿次运算,功率只有30瓦,能效比上一代架构高了15倍。为了研发DRIVE Xavier,英伟达投入了2000个工程师,干了四年,研发费用达到20亿美元。

Xavier包括一个定制的8核CPU、一个新的512核Volta GPU、一个新的深度学习加速器、一个全新的计算机视觉加速器以及一个全新的8K HDR视频处理器。

DRIVE Xavier将在今年第一季度发货。

此外,老黄也宣布百度和德国的ZF都将在无人车上采用DRIVE Xavier。"每一辆制造出来的汽车都需要与中国兼容,因为它是世界上最大的市场。每辆使用DRIVE Xavier和DRIVE堆栈的汽车,都可以在中国运营"老黄说。

这款SoC,是英伟达Drive Pegasus AI计算平台的关键组成部分。一个Pegasus有两块Xavier,和两个英伟达新GPU,运算能力达到每秒320万亿次,功耗仅需400瓦。一两块Pegasus,就可以提供L5全自动驾驶汽车所需的运算量。

也就是说一块电路板,取代了整个超级计算机。

英伟达还宣布和Aurora、Uber在无人车方面展开合作。

除了用来让车自主行动的高性能芯片,英伟达还发布了一款AI SDK平台:Drive IX,让开发者能更简单地为汽车增加AI能力。

它能够监测车内司机的注视情况,防止驾驶时分心或瞌睡,也具备周围环境感知、语音识别、姿势识别等功能,还能提示有骑自行车的人经过。

另外,他们还发布了Drive AR软件,这是一款车内AR平台。英伟达认为,5年内我们将在汽车里用上AR,在汽车自动驾驶的时候,可以在车里用AR向乘客展示汽车所看到的世界。

Drive IX和Drive AR都是基于Xavier运行的。

以下是刚刚结束的英伟达发布会全程:

当地时间晚8点,发布会以一辆车的独白短片开始,她说:"I am AI"。为短片配乐的,又是在英伟达发布会上出现数次的AI作曲公司Aiva Technologies。

短片过后,黄仁勋上台喊出"新年好"。发布会的Keynote演讲也正式开场。

英伟达的GPU现在处在游戏、AI、自动驾驶汽车三大行业的中心,这也正是英伟达的三大商业驱动力。而AI,是这三大驱动力增长最快的一股。

老黄还说:"我们终于能将深度学习和AI用到所有挑战中最难的那一部分:无人车。我们进展神速,人的移动、货物的移动,带来了10万亿美元的市场。"

他也相信PC游戏和VR,仍将继续繁荣。

短短一两年前,英伟达还被视为一家"游戏公司",现在,他们有着更广的业务范围,但在游戏领域并没有止步。他们要在CES上发布10款新的台式机游戏平台,三款新游戏本。另外,他们还要推出三款新显示器,这对于英伟达来说是一个全新的领域。

游戏之后的话题,是英伟达的AI平台。

老黄展示了已经发布的Volta架构处理器,搭载着运算速度达到125 TFLOPS(每秒万亿次浮点运算)的tensor core,用于处理AI工作负载。

随后,他还谈到了英伟达的GPU云和他们的合作伙伴,比如亚马逊AWS、阿里巴巴、谷歌云等等。

既然讲AI,当然少不了深度学习计算机DGX和工作站DGX Station,也少不了3000美元的Titan V计算卡。

老黄生动形象地展示了AI的种种能力,或者说,英伟达GPU所带来的超强计算力。8个Tesla V100芯片,每秒可以识别7012张图片:

还能打破真假之间的界限,生成不存在的人脸:

AI创造的乐曲,能配合发布会开头的视频:

AI作曲来自量子位00:0000:35

老黄说,英伟达要赋能任何地方的任何人,让他们拥有解决超级难题的能力。

说完AI,就是自动驾驶。

离发布会还有30多分钟的时候,冲进会场占座的TechCrunch说,前7排座位统统预留给了"汽车合作伙伴"。

发布会的开场视频也暗示着,自动驾驶是今天的重头戏。

与其他领域稍有不同,为自动驾驶汽车打造芯片比世界上任何事情都更复杂,性命攸关,它不能出问题。

虽说难,这次发布会上,英伟达还是推出了一款自动驾驶新品:Drive Xavier。老黄说,这是世界上最大的SoC(片上系统),为了打造他,2000多名工程师辛苦了四年,消耗了20亿美元的研发成本。

这款SoC基于英伟达Volta架构,包含90亿个晶体管、一个8核CPU、一个512核Volta GPU。Xavier能加速深度学习、计算机视觉和8k视频处理的新部件。

它支持每秒30万亿次运算,功率只有30瓦,能效比上一代架构高了15倍。

这款SoC,是英伟达Drive Pegasus AI计算平台的关键组成部分。一个Pegasus有两块Xavier,和两个英伟达新GPU,运算能力达到每秒320万亿次。一两块Pegasus,就可以提供L5全自动驾驶汽车所需的运算量。

随后,老黄还宣布了两家新合作伙伴:一家是前Google自动驾驶负责人Chris Urmson创办的Aurora,另一家是Uber。

根据英伟达官方数据,现在已经有25家公司在借助英伟达的技术来开发全自动驾驶汽车,

Xavier本季度就将发货,而Pegasus将在2018年中发货。

对于汽车来说,最重要的安全。因此,作为一款用在汽车上的SoC,Xavier有不少冗余部件,当某些部件出现问题时,整个系统还能正常工作。

另外,英伟达还为此开发了"我们所做过的最复杂的模拟环境"Autosim,可以在VR环境中测试自动驾驶硬件。

据老黄说,同样对安全有极高要求的航空行业,也在寻求与英伟达合作。

除了用来让车自主行动的高性能芯片,英伟达还发布了一款AI SDK平台:Drive IX,让开发者能更简单地为汽车增加AI能力。

它能够监测车内司机的注视情况,防止驾驶时分心或瞌睡,也具备周围环境感知、语音识别、姿势识别等功能,还能提示有骑自行车的人经过。

另外,他们还发布了Drive AR软件,这是一款车内AR平台。英伟达认为,5年内我们将在汽车里用上AR,在汽车自动驾驶的时候,可以在车里用AR向乘客展示汽车所看到的世界。

Drive IX和Drive AR都是基于Xavier运行的。

最后,One More Thing来了。

这个 One More Thing不是新品、不是硬件,而是又一个新的合作伙伴:大众汽车。

大众的新款面包车I.D. Buzz在屏幕上显示,CEO Herbert Diess也出现在台上。

大众的新款面包车I.D. Buzz在屏幕上显示,CEO Herbert Diess也出现在台上。一阵寒暄,追忆完往事,老黄为Diess送上了一份惊喜大礼:I.D. Buzz的虚拟现实版:

英伟达与大众的合作,主要关于Drive IX。老黄说:未来几年内,每一辆新车都将会配备 AI 助手,以实现语音、动作、面部识别、以 及增强现实的应用。大众与 NVIDIA DRIVE IX 技术的合力将使其成为现实。我们正在联手创造迄今 为止最安全、最舒适、且方便每个人使用的新一代汽车。

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

诚挚招聘

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

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

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



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

RSS5

IFTTT

M2 模型杀回 Coding 和 Agent 领域,MiniMax 想要「普惠智能」-InfoQ每周精要No.900

「每周精要」 NO. 900 2025/11/01 头条 HEADLINE M2 模型杀回 Coding 和 Agent 领域,MiniMax 想要「普惠智能」 精选 SELECTED a16z 将 3000 万开发者标价 3 万亿 网友:几个初创公司 + 大模型就...