资源行业动态卷积网络分层特征量的反思

卷积网络分层特征量的反思

2020-02-20 | |  61 |   0

原标题: 

来源:AI研习社      链接:


一年多以前,在NeurIPS 2018上,我非常荣幸地出席并介绍了机器学习的批判和纠正趋势(CRACT)研讨会。该研讨会的目标是发现,讨论和纠正当前机器学习社区中出现的各种不需要的或令人烦恼的模式。从技术方面到会议审查或社会挑战,一应俱全。那里已经提出了许多发人深省的作品。在去年的课程中,我与我的顾问一起参与了有关实用机器和深度学习的课程的教学。自然,我们必须为该课程设计课程。着眼于实现,并且对于任何从业者来说都是显而易见的,我们很快得出结论,当前许多实用的深度学习知识都是基于经验法则和各种技巧的。这些启发式方法从一种实现方式传递到另一种实现方式,并通过提供基准实现方式进行比较和对比,在出版物中留下自己的印记。

不幸的是,我们很少回过头来问自己,这些见解背后的动机在今天是否仍然有效,甚至是否可以解决我们眼前的具体问题。 最初的主张变得捉襟见肘,并且假定洞察力可以推广到超出最初证明的范围。 有时,我们会产生误解,因为我们根本不敢质疑以前从经验上证明是有用的。 考虑到这种动机,我得出的结论是,现在该是一系列以挑战通用深度学习约定为主题的博客文章的时候了。 我将通过更深入地研究通用深度卷积神经网络(CNN)设计的历史增长方式来开始本系列文章。 即使在一年多以前在CRACT研讨会上介绍了相应的工作,但今天它仍然是一个高度相关的主题。

重新思考卷积神经网络架构中的逐层特征量

本着挑战深度学习中常见假设和惯例的精神,我们在CRACT和本博客扩展中介绍的工作的总要旨是关于我们如何设计深度卷积神经网络的一个潜在误解,即每个滤波器的过滤器/功能数量 层(我将这些术语作为同义词使用)。 因此,让我们讨论一下这种误解到底是什么,为什么它值得研究,它是如何首先出现的,以及我们将来如何从科学和工程角度进行改进。

文献中的卷积神经网络设计模式

我们通常如何设计深层的CNN?

卷积神经网络的设计是由越来越多的见识驱动的。乍一看,我们常用的架构在不断发展,每两个月就会出现一种新的最新技术。顺序前馈连接结构已更改为包括跳过连接,层之间的密集连接模式,甚至被随机布线所取代。传统卷积层已被修改为包括膨胀卷积和显式池层,这些显式池层通过在所有卷积体系结构中包含跨卷积而变得过时。

但是,CNN的一个方面几乎没有被触及:层内特征的相对数量,或者换句话说,层宽度。要澄清的是,尽管不同的体系结构当然会利用网络中不同数量的功能,但是在涉及全局拓扑时,它们遵循相同的通用模式。无论是AlexNet:具有深度卷积神经网络的ImageNet分类,VGG:用于大规模图像识别的超深度卷积网络,ResNet:用于图像识别的深度残差学习还是基于这些体系结构的任何现代变体,一个典型的设计遵循的策略可以说明如下:

1582164099579281.png

用于分类的卷积神经网络体系结构堆叠具有选定特征/过滤器大小的卷积层(C),可选地与池化层(P)交替,并在完全连接(FC)层上结束。通常,体系结构越深,则假定一个层具有更多的功能(红色粗体)。

我们从图像和堆栈卷积块开始,如果需要面对诸如分类之类的任务,则可以选择在它们之间通过合并各层来分隔卷积块,并最终在一个或多个完全连接的层中结束。对于每个顺序卷积块,特征的数量,即并行独立滤波器的数量,从而学习的模式的数量,都增加了。注意,这并不意味着所有架构都具有相似数量的参数。与仅在每一层中使用3×3过滤器的VGG或ResNet相比,AlexNet架构可能具有不同大小的卷积过滤器,例如11×11和5×5。这也不意味着在整个体系结构中,层中要素的绝对数量是相同的。例如,在宽残差网络中,图层的要素绝对数量/宽度乘以加宽参数。但是,无论特定的卷积层设置为包含16个特征还是64个特征,后续的层通常都将具有相同或增加的特征量(通常是两倍)。这样,卷积神经网络中的特征量就单调增加。在下面的内容中,我们将进一步研究这种模式,并表明它不一定是最佳选择。但是在此之前,让我们考虑一下它的起源。

这个共同的设计因素背后的原理是什么?

考虑上述模式的动机时,会想到三个潜在的争论:

●历史增长

●计算复杂度

●编码复杂度


前两个部分相关并且易于解释。我们可以推测使用了该模式,因为在最初提出该模式时,发现它在经验上是有效的。具体来说,最初的AlexNet和VGG架构已应用于各种不同的问题,并不一定需要进行修改。再加上当时的硬件需要考虑计算效率的设计这一事实。即,第一卷积层在全分辨率图像上操作,并且虽然特征本身本身不需要太多内存,但是每个特征都可以生成具有相当大空间分辨率的特征图。反过来,由于空间分辨率已大大降低,因此以后的图层可以具有更多功能。交换这些数字将导致内存需求的大量增加,这在当时可能是无法想象的。

第三方面也许可以归结为更具概念性。引用本文中的一段:

除了通过经验证明的有效性外,可以假设一个核心假设如下:CNN的较低层学习更多的原始特征,而较高的层学习更多的抽象特征。 因此,我们的假设可能是增加高层中可学习特征的数量,从而为丰富的编码提供足够的表示能力。

举个例子:如果呈现许多不同的对象类,它们都将可能共享常见的低级基本特征,例如定向的边缘。但是,为了实现细粒度的分离,不同的对象可能需要这些特征的不同组合。因此,提供较少的通用功能并以更高的抽象级别增加不同唯一组合的数量似乎是合乎逻辑的。该论点与为什么我们很少考虑参数的绝对数量并因此将特征的数量设置为相同而不受卷积滤波器大小无关的原因有关,因为独特特征的数量在能够解决任务方面更具决定性。

那么其他任务和无监督学习又如何呢?

我们可以问自己一个问题,即上述设计模式是否仅限于监督分类问题,并且很快就会得出结论,并非如此。编码器–解码器体系结构(例如用于无监督自动编码或监督语义分段的U-Net)遵循相同的趋势。由于这些架构基于VGG和ResNet的著名架构而处于一种形式或另一种形式,因此这可能在历史上再次增长。这样,整体架构看起来像一个沙漏,而添加的解码器仅遵循编码器的反向模式。


使用简单功能表征CNN中的特征数量:偏态正态分布

既然我们已经确定并解释了不受最近开发影响的通用设计模式,那么我们自然要分析是否存在不同的明智选择。为此,我们首先需要一种方法来根据结构在各层之间的分布方便地描述该结构。在这里,没有正确或错误的选择,尽管我们希望给出一个满足两个约束条件的描述。一方面,为了复制典型的文献体系结构,我们需要能够表达一种特征量随深度增加而单调增长的体系结构。另一方面,能够表达相反的模式,或者介于两者之间的东西(大多数特征位于早期到中间层)会很好。因此,独立于确切的参数化,我们希望能够直观地了解最大特征的位置以及特征量在体系结构任一侧的下降速度。

这种函数的一种可能选择是偏态正态分布,即非对称高斯分布。其具有偏斜(形状)参数alpha的概率密度函数由数学公式给出:

02.png

哪里:

03.png

04.png

当前分布的均值位于零。 要添加灵活的位置(均值-> xi)和比例(方差-> omega)参数,我们进行一次转换

05.png

,然后生成完整的pdf:

06.png

与传统的高斯分布相比,附加的偏斜参数使我们能够打破对称性,并且在最大值的每一侧都具有灵活的长度尾部。 为了更容易理解,让我们对分布进行编码并在下面进行交互可视化。

import numpy as np
import scipy.special as spcl
import math

def skew_normal_univariate(x, xi, omega, alpha): 
    
    phi = np.exp(-1 * np.square(x - xi) / (2 * np.square(omega)))
    
    PHI = 0.5 * (1 + spcl.erf((alpha * ((x - xi)/omega))/np.sqrt(2)))
    
    norm_fac = (2 / omega*(np.sqrt(2*math.pi))) / (2*np.pi)

    
    return (norm_fac * phi * PHI)

1582164347291408.png

默认可视化显示偏斜正态分布,均值2.5,标准偏差为1,偏斜为0,如蓝色曲线所示。 使用上面的滑块,我们可以观察到增加或减小偏斜值时会发生什么。 简而言之:偏斜的正值越大,最大值向右侧的偏移就越大,而分布的左侧接收的尾巴越长。 相同的参数适用于负值和产生的右侧尾部。 如果我们通过将值分成与体系结构中的层数相对应的整数来离散化x轴,则可以将bin的值解释为该层中分配的总体特征的百分比。 在上面的示例中,以橙色显示,并通过使用以下代码进行梯形积分获得垃圾箱:

def disc_integrate(data, intervals):
    
    integral_step = len(data) / float(intervals)
    
    integral = []
    
    
    for i in range(intervals):
        
        lower_bound = int(i*integral_step)
        
        upper_bound = int((i+1)*integral_step)
        
        dx = 1.0/(upper_bound - lower_bound)
       
        
        integral.append(np.trapz(data[lower_bound:upper_bound:1],
     
                        np.arange(i,i+1,dx)))
    
    
    return np.array(integral)

总而言之,我们可以根据偏态正态分布的三个参数来表示各种体系结构。 这些体系结构具有相同数量的总体特征和恒定的深度,但是在跨层的特征分配方面存在显着差异。

在CIFAR-10上的VGG架构实验

我们已经生成了约200多种VGG-D类型的体系结构,每种体系结构均通过各自的均值,方差和偏斜值进行参数化,以改变体系结构内的特征,并在CIFAR-10微型图像分类数据集中对其进行了训练。

下图以交互方式说明了每种体系结构在验证准确性方面的结果。 您可以将鼠标悬停在每个数据点上以获取精确值,以及缩放和旋转图形。 最终获得的精度将进一步进行颜色编码。

1582164392154042.png

我们可以观察到的是,以低均值(xi)和大正偏斜(alpha)为特征的体系结构似乎胜过传统的体系结构,在传统的体系结构中,大多数特征位于更深的层次中(并且特征分布具有负偏斜度,即更长 最左边的尾部)。

为了以更易于理解的表示形式显示此结果,我们为每个均值(xi)值选择最佳的体系结构,然后将上述图简化为二维视图。 我们显示了整个训练轨迹,其中在30和70 epoch时的准确性峰值是由于学习率进度表重置而导致的,通常是在随机梯度下降后随着热重启而完成的。 在每个周期内,学习率在0.1和Latex(1).png之间循环。 这样做是为了确保具有不同功能分布的体系结构最终都能学习,并且不会因静态学习率不合适而被卡住。

1582164409696014.png

不同架构的验证准确性。 图取自文章

如插图所示,在每个学习率周期结束时,尤其是在训练结束时,我们可以看到,较大的平均值(xi)导致较低的准确性。 换句话说,从传统角度来看,将大多数功能从常规VGG网络的较深层转移到较浅层似乎可以提高准确性。

训练精度如何? 参数与功能的讨论

我们可以通过调查相应的训练准确性来尝试对上述观察结果有更多的了解:


1582164451663015.png

在此图中,黄色对应于100%的训练精度,而最暗的点仅接近50%的精度。此处的观察结果是,在深层中具有最大功能的体系结构似乎过拟合得更多,并且与验证图结合使用时,泛化得更少。这再次表明,关于深度神经网络的内部运作,我们仍然不了解很多。

不足之处

现在我们都应该根据上述观察来改变设计吗?简单的答案是没有,因为存在很大的弊端。更为复杂的答案是,我们应该更彻底地评估和分析我们的设计,尤其是在不同应用程序之间移动时。跨早期层分布大多数功能的明显缺点是,该体系结构将需要更多的内存来存储空间较大的激活图和相应的计算开销。实际上,为了始终如一地训练具有恒定小批量大小的上述模型,我们必须在进行随机梯度下降更新步骤之前在小批量上对模型计算进行顺序化并累积梯度。不幸的是,我与许多人交谈过,他们认为微型批处理大小的选择会受到可用GPU内存的限制,并且会与模型更新紧密结合来进行查看。实际上,应将计算并行化与更新频率分开查看。这种误解将成为本系列下一篇博客文章的主题。

现在有神经体系结构搜索,那么我们为什么还要关心呢?

机器学习的最新趋势是避免明确地手动选择特征量,而是定义可能的体系结构的搜索空间。被称为架构搜索或AutoML,另一种元学习器算法的目标是找到潜在的最佳架构。原则上,这有望解决我们在神经体系结构设计和本文中遇到的任何问题。然而,搜索空间本身需要由人来定义。通常很难严格实现架构搜索方法的计算可行性。尽管确实存在寻找最佳架构的希望,但在搜索空间中施加错误的先验信息可能会合并我们的偏见并可能传播任何现有的误解。在考虑这些方法时,我们需要牢记这一点。

主要的收获是什么?

提出的发现为新的假设,更多的猜测和更多必要的实验打开了空间。一些更迫在眉睫的问题可能是:

●早期的少量功能是否会成为阻碍信息流的瓶颈?

●在很晚的图层中出现大量特征是否会导致过度拟合(即使存在正则化)?

●添加跳过连接或调查的任务不是来自图像分类域时,是否会出现类似的模式?

如果您一直在遵循本文的要旨,那么应该清楚的是,我们的收获不应该是改变我们所有未来的CNN设计,以在早期和后期具有更多功能。相反,我们应该开始对我们的科学研究和工程实践更加谨慎。我们应该尽量避免将以前的研究结果直接转移到新事物上,而只能推测它们之间的关联足以“很好地完成工作”。我们需要开始更彻底地质疑新兴的设计模式。看来,在我们当前的ML呈爆炸式增长的状态下,这些模式已变得更有可能有效地转变为社区的工程经验法则。这可能是由于可用的开源代码和高引用论文的博客帖子的普及。但是,对于原始作品在理论上或经验上验证其主张的程度,我们需要格外小心,并避免假设它们自然适用于我们所有自己的应用。

如果您喜欢该博客文章并希望对其进行引用,除了可以选择链接该博客文章本身之外,还请引用相应的文章:

Martin Mundt,Sagnik Majumder,Tobias Weis,Visvanathan Ramesh,
“重新考虑卷积神经网络体系结构中的逐层特征量”,

神经信息处理系统国际会议(NeurIPS),

2018年机器学习的批判和纠正趋势研讨会(CRACT)

还有一个互补的Gitpage,在GitHub上具有更多交互结果和开源PyTorch代码

--------------------------------------

发起:唐里 校对:唐里 审核:鸢尾

参与翻译(1人): Ophria

英文原文:Challenging Common Deep Learning Conventions – Part 1: Rethinking Layer-wise Feature Amounts in Convolutional Neural Network Architectures

THE END

免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。

合作及投稿邮箱:E-mail:editor@tusaishared.com

上一篇:深度学习:从自然图像到医学图像

下一篇:几行代码构建全功能的对象检测模型,他是如何做到的?

用户评价
全部评价

热门资源

  • 国内人才报告:机...

    近日,BOSS 直聘职业科学实验室 &BOSS 直聘研究院...

  • AI使物联网更智能...

    看到微软对物联网和人工智能的结合感兴趣是一个明...

  • 推荐一批学习自然...

    这里推荐一批学习自然语言处理相关的书籍,当然,...

  • 机器学习中的线性...

    机器学习中的线性回归是一种来源于经典统计学的有...

  • 安防智能化大势下...

    大部分传统安防设备不仅拍摄视野有限,而且无法事...