当前位置: 首页 > 编程日记 > 正文

分类、检测、分割任务均有SOTA表现,ACNet有多强?

640?wx_fmt=jpeg

(图片付费下载自视觉中国)

作者 | 路一直都在
来源 | 知乎专栏

640?wx_fmt=png

Abstract
本文提出了一种新的自适应连接神经网络(ACNet),从两个方面对传统的卷积神经网络(CNNs)进行了改进。首先,ACNet通过自适应地确定特征节点之间的连接状态,在处理内部特征表示时可以灵活地切换全局推理和局部推理。从这个角度来说,现有的很多CNN模型,经典的多层感知器MLP以及最近(2017)提出的NLN(Non-local Neural Networks),都是ACNet的特殊形式。其次,ACNet还能够处理非欧几里德数据( non-Euclidean data,关于非欧几里得数据,下文会有解释)。实验证明,ACNet不仅在分类、检测、分割任务上都有SOTA表现,而且还可以克服传统MLP和CNN的一些缺点。

Intorduction

在神经网络的发展过程中,有两大类代表类型:第一种是传统的多层感知器(MLP),由输入层,输出层和隐层构成。通过BP算法,使得网络能有拟合复杂数据的能力。但是MLP有很大的缺陷,在隐层中的每个神经元节点权重不共享,因此MLP的网络参数往往数量庞大,在训练阶段容易过拟合。而且,MLP难以表示二维数据的空间结构。

640?wx_fmt=jpeg
一个简单的MLP模型

随着深度学习的发展,CNN卷积神经网络出现了,CNN能够实现权重共享,局部特征提取,在MLP的基础上实现了很大的提升,但是卷积仍然有两个固有的缺点,一方面,卷积只能在相邻像素点之间进行特征提取,神经网络各层内部的卷积运算不具备全局推理的能力,因此,如果有两个目标具有相似的外观,对于卷积来说,很难分辨。如下图所示,对于具有相似外观特征的椅子和沙发,只基于局部的特征,很容易得到错误的结论;另一方面,卷积无法处理非欧几里得数据,因为卷积依赖的是有相邻的像素点,这种无序的,散乱的数据形式,对卷积是一个挑战。
640?wx_fmt=jpeg
为了解决CNNs中的局部性问题,最近提出的非局部网络(Non Local NN)将全局依赖关系强加给所有特征节点,但是作者认为,完全的非局部网络,有时适得其反,会造成退化,如下图所示,如果只基于局部推理,dog很容易被识别,但是加上全局推理后,反而被错分为sheep了,随后作者也在实验部分证明,随着网络非局部性的增加,ImageNet-1k分类任务中的训练和验证精度都会降低。作者认为这种下降是由于过度全局化造成的。
640?wx_fmt=jpeg
通过以上的实验结果,作者认为,局部信息和全局信息需要共同考虑,即从图像感知和像素感知的角度来共同考虑全局和局部推理。因此,怎样保持一个局部和全局的平衡,既不过度局部化又不过度全局化是最大的挑战。本文提出了ACNet,一个简单通用的自适应连接网络,在MLP,CNNs上取长补短,自适应的捕捉全局和局部的关系依赖。ACNet首先定义了一个基本单元node。如下图所示,node可以是一张图片中的一个像素点;可以是一段音频中的采样;可以是一个图结构中的一个节点等等。
640?wx_fmt=jpeg

给定输入数据,ACNet自适应地训练搜索每个节点的最优连接,连接关系和连接之间的关系可以用下式表示:

640?wx_fmt=png
在ACNet中,要有一个这样的意识,不同节点是自适应连接的,因此,有些节点可能是自己推测的,有些节点可能与它的邻域有关,而其他节点则具有全局视野。从这方面讲,如下图所示,ACNet可以看做是MLP,CNNs等的综合。通过学习不同类型连接的重要性程度来搜索最优连接是有差异的,可以通过反向传播来优化。
640?wx_fmt=jpeg

实验证明,ACNet在ImageNet-1K上top-1error比ResNet更低

640?wx_fmt=jpeg
ACNet与ResNet在ImageNet-1K实验对比

Background Knowledge

  • non-Euclidean data(非欧几里得数据)
*部分内容参考以下文章,侵删
https://link.zhihu.com/?target=https%3A//blog.csdn.net/imsuhxz/article/details/91361977
数据类型可以分为两大类,分别是:欧几里德结构数据(Euclidean Structure Data) 以及 非欧几里德结构数据(Non-Euclidean Structure Data)
欧几里得数据,最重要的特点就是排列整齐,如下图所示,一个像素看做一个节点的话,每个节点都是排列整齐,有序组合。这种排列方式有利于卷积的操作,能够很好的提取特征,而且不同的数据样本之间,可以根据这种整齐的排列方式,轻松计算距离,最直接的办法就是利用欧式距离。
640?wx_fmt=jpeg
欧几里得数据结构
640?wx_fmt=png
n维空间的欧氏距离公式
非欧几里德数据,最大的特点就是排列不整齐,对于数据中的某个节点,很难定义或找到相邻节点,因为相邻节点的位置,数量都是随机的。由于这种随机和不确定性,使得卷积操作变得困难,而且难以定义出欧氏距离。最常见的非欧几里德数据有图(Graph)和流形数据,如下图所示:
640?wx_fmt=jpeg
图结构
640?wx_fmt=jpeg
流形数据

ACNet(Adaptive-Connected Neural Networks)

本章节首先介绍一下ACNet的公式表示,然后说明一下ACNet跟MLP,CNNs之间的关系,最后介绍一下ACNet的训练测试和实现细节。
  1. ACNet的公式表示(以图像处理为例)
假定x为输入图片数据,那么最终的输出可以用下式表示:

640?wx_fmt=png

其中,yi表示第i层的输出节点,j是所有可能与i层节点相关的节点,前文说过,与一个节点有关的节点来自三个方面:来自第i层的节点,i层节点的相邻节点,任意层的节点({the i-th node itself}, {the neighborhood N(i) of the i-th node},{all possible nodes}),这正好对应三种推理模式:自转换,局部推理,全局推理。

在每一种模式前,都对应一个权重,如上式中的α,β,γ,分别对应每一种模式的重要程度。在本文中,作者强制定义α+β+γ=1,自然每个权重的范围就在[0,1],那么以α为例,可以用下式表示:
640?wx_fmt=jpeg
这里特别说一下第三项,j的节点来自任意层,这就等价于一个全连接了,算力上的消耗肯定比较大,而且参数很多,可能有过拟合的风险。为了解决这个问题,作者在论文中提出,三式中的x在喂入公式进行计算之前,首先通过平均池化进行降采样。最后得到的y通过激活函数进行激活,激活函数的组合形式为BN+ReLU。
2. ACNet与CNNs的关系
假定输入x以tensor表示为(C,H,W),则Xi表示其中的一个像素点,yi表示一个像素点的输出,那么一个3x3的卷积可以表示为:
640?wx_fmt=png
其中,
  • 省略了非线性激活函数f,它不影响公式的推导过程。
  • i, j ∈ [1, H × W]
  • S表示一个节点的八个相邻节点的集合,S = {i -W -1, i-W, i-W + 1,i, i + 1, i + W-1,i+W , i + W + 1}
  • 这跟ACNet的式二是一样的
3. ACNet与MLP的关系
MLP的公式表示与上文相似,不同的是,节点的集合不是局限在八个,而是不同节点之间的线性组合,S = {1, 2, 3, . . . , H × W}
综上,ACNet可以看作是CNN和MLP的纯数据驱动组合,充分挖掘了这两个模型的优势。让我们再看一下ACNet的公式,如果置α=0,β=1,γ=0,ACNet就是普通卷积的表现形式;同理如果α=0,β=0,γ=1,ACNet就是MLP的表现形式。

640?wx_fmt=png

更为重要的是,ACNet通过学习α,β,γ的值,实现模型的动态切换,这种模式允许我们构建一个更丰富的层次结构,自适应地组合全局和本地信息。
4. ACNet对非欧几里得数据的处理
在背景知识中提到,所谓的非欧几里德数据主要有两种,Graph图结构和流形结构。非欧几里德数据是没有非结构化的,不是常规意义的排列整齐。比如,在欧几里德数据中,节点i的相邻节点可以表示为N(i) = {i-W-1, . . . , i + W + 1},分别表示{upper left, ..., low right },但是在非欧几里德数据中,没有这种结构化的表示,而且每个节点的相邻节点数量是不固定的,因此,这样的结构就无法很好的直接利用上述公式。对于Vij来说,在欧几里德数据中,每个值是不同的,而在非欧几里德数据中,数据是共享的,因此会削弱数据的表达能力。为了解决这些问题,对于非结构化的数据,提出了下列公式:
640?wx_fmt=png
其中,U,V,W是在j中所有的节点间共享的,这与1x1卷积思想有些类似。
5. Training & Inference
设Θ为网络参数集合(如卷积和全连接权重),Φ是一组控制参数,控制网络体系结构。
在ACNet中,参数可以表示为:
Φ = {λα, λβ, λγ}
损失函数可以表示为:L(Θ, Φ),Θ 和Φ可以通过BP联合训练优化

Experiments

  • 在ImageNet-1K上的表现

640?wx_fmt=jpeg

  • 可视化
ACNet在ImageNet上训练生成具有不同类型推理的节点的可视化。用黄色绘制的一个节点表示它是来自前一层的全局推理的输出(即,它连接到前一层的所有节点),而相对的黑色节点表示来自前一层的局部推理的输出。
640?wx_fmt=jpeg

Conclusion

本文提出了一个概念上通用且功能强大的网络-ACNet,它可以通过学习不同模型的参数,动态切换通用数据(即欧几里德数据和非欧几里德数据)的全局和局部推理。其次,ACNet是第一个既能继承MLP和CNN的优点,又能克服它们在各种计算机视觉和机器学习任务上的缺点的网络。
原文链接:
https://zhuanlan.zhihu.com/p/84205427
(*本文为 AI科技大本营转载文章,转载请联系原作者)

精彩推荐


2019 中国大数据技术大会(BDTC)历经十一载,再度火热来袭!豪华主席阵容及百位技术专家齐聚,15 场精选专题技术和行业论坛,超强干货+技术剖析+行业实践立体解读,深入解析热门技术在行业中的实践落地。【早鸟票】【特惠学生票】限时抢购,扫码了解详情!

640?wx_fmt=png


推荐阅读

  • 快手王华彦:端上视觉技术的极致效率及其短视频应用实践 | AI ProCon 2019

  • 中文预训练ALBERT模型来了:小模型登顶GLUE,Base版模型小10倍、速度快1倍

  • 100多次竞赛后,他研发了一个几乎可以解决所有机器学习问题的框架

  • 伯克利人工智能研究院开源深度学习数据压缩方法Bit-Swap,性能创新高

  • NLP被英语统治?打破成见,英语不应是「自然语言」同义词

  • TensorFlow2.0正式版发布,极简安装TF2.0(CPU&GPU)教程

  • 肖仰华:知识图谱构建的三要素、三原则和九大策略 | AI ProCon 2019

  • AI落地遭“卡脖子”困境:为什么说联邦学习是解决良方?

  • 限时早鸟票 | 2019 中国大数据技术大会(BDTC)超豪华盛宴抢先看!

640?wx_fmt=png

你点的每个“在看”,我都认真当成了喜欢

相关文章:

CUDA Samples: approximate prior vbox layer

以下CUDA sample是分别用C和CUDA实现的类似prior vbox layer的操作&#xff0c;并对其中使用到的CUDA函数进行了解说&#xff0c;各个文件内容如下&#xff1a;common.hpp:#ifndef FBC_CUDA_TEST_COMMON_HPP_ #define FBC_CUDA_TEST_COMMON_HPP_#include <typeinfo> #inc…

如何成为一名成功的 iOS 程序员?

前言&#xff1a; 编程是一个仅靠兴趣仍不足以抵达成功彼岸的领域。你必须充满激情&#xff0c;并且持之以恒地不断汲取更多有关编程的知识。只是对编程感兴趣还不足以功成名就——众所周知&#xff0c;我们工作起来像疯子。 编程是一个没有极限的职业&#xff0c;所以要成为一…

C#之委托与事件

委托与事件废话一堆&#xff1a;网上关于委托、事件的文章有很多&#xff0c;一千个哈姆雷特就有一千个莎士比亚&#xff0c;以下内容均是本人个人见解。1. 委托1.1 委托的使用这一小章来学习一下怎么简单的使用委托&#xff0c;了解一些基本的知识。这里先看一下其他所要用到的…

24式加速你的Python

作者 | 梁云1991来源 Python与算法之美一、分析代码运行时间第1式&#xff0c;测算代码运行时间平凡方法快捷方法&#xff08;jupyter环境&#xff09;第2式&#xff0c;测算代码多次运行平均时间平凡方法快捷方法&#xff08;jupyter环境&#xff09;第3式&#xff0c;按调用函…

pip、NumPy、Matplotlib在Windows上的安装过程

Windows上Python 3.6.2 64位的安装步骤&#xff1a;1. 从 https://www.python.org/downloads/windows/ 下载Windows x86-64 executable installer(即python-3.6.2-amd64.exe)&#xff1b;2. 直接以管理员身份运行安装&#xff0c;勾选添加到环境变量、pip等即可。可以同时在Wi…

分享:个人是怎么学习新知识的

为什么80%的码农都做不了架构师&#xff1f;>>> 挺多童鞋问我是怎么学习新知识的&#xff0c;干脆写篇文章总结一下&#xff0c;希望对大家有所帮助。对照书、技术博客、极客时间等学习的方式我就不说了。 一、早期 在15年及更早&#xff0c;由于知识储备少&#x…

easyui的datagrid

datagrid数据的绑定方式&#xff1a; 1&#xff09;data 后跟数据行的json串 2&#xff09;url 后跟{"total":,"rows":,"foot":},其中total代码返回总行数&#xff0c;rows为数据行json串 .NET MVC&#xff0c;controll控制类方法中获取datagrid…

线性回归介绍及分别使用最小二乘法和梯度下降法对线性回归C++实现

回归&#xff1a;在这类任务中&#xff0c;计算机程序需要对给定输入预测数值。为了解决这个任务&#xff0c;学习算法需要输出函数f:Rn→R。除了返回结果的形式不一样外&#xff0c;这类问题和分类问题是很像的。这类任务的一个示例是预测投保人的索赔金额(用于设置保险费)&am…

4种最常问的编码算法面试问题,你会吗?

导语&#xff1a;面试是测查和评价人员能力素质的一种考试活动。最常问的编码算法面试问题你知道多少呢&#xff1f;作者 | Rahul Sabnis译者 | 苏本如&#xff0c;编辑 | 刘静来源 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;在许多采访中&#xff0c;我经常被要求…

[小梅的体验课堂]Microsoft edge canary mac版本体验

简介 华硕微软越来越没有自己的JC了&#xff0c;不经在windows里面加了wsl而且还废弃了自己的老edge浏览器&#xff0c;重新基于chromium内核开发了新的edge浏览器了&#xff0c;不管怎么说mac上又多了一款新的浏览器&#xff0c;对于一个爱好新鲜的我来说那就简单安装体验下 下…

SQL Server用户自定义函数

用户自定义函数不能用于执行一系列改变数据库状态的操作&#xff0c;但它可以像系统 函数一样在查询或存储过程等的程序段中使用&#xff0c;也可以像存储过程一样通过EXECUTE 命令来执行。在 SQL Server 中根据函数返回值形式的不同将用户自 定义函数分为三种类型&#xff1a;…

C++11中std::initializer_list的使用

initializer_list是一种标准库类型&#xff0c;用于表示某种特定类型的值的数组。和vector一样&#xff0c;initializer_list也是一种模板类型&#xff0c;定义initializer_list对象时&#xff0c;必须说明列表中所含元素的类型。和vector不一样的是&#xff0c;initializer_li…

WijmoJS 2019V1正式发布:全新的在线 Demo 系统,助您快速上手,开发无忧

2019独角兽企业重金招聘Python工程师标准>>> 下载WijmoJS 2019 v1 WijmoJS是为企业应用程序开发而推出的一系列包含HTML5和JavaScript的开发控件。其中包含了金融图表、FlexSheet、先进的JavaScript控件&#xff08;Wijmo 5&#xff09;和经典的jQuery小部件&#x…

最后3天,BDTC 2019早鸟票即将售罄,超强阵容及议题抢先曝光!

大会官网&#xff1a;https://t.csdnimg.cn/U1wA2019 年12月5-7 日&#xff0c;由中国计算机学会主办&#xff0c;CCF 大数据专家委员会承办&#xff0c;CSDN、中科天玑数据科技股份有限公司协办的 2019 中国大数据技术大会&#xff0c;将于北京长城饭店隆重举行。届时&#xf…

php_mongo.dll下载(php操作mongoDB需要)

php_mongo.dll下载&#xff08;php操作mongoDB需要&#xff09;如果PHP连接操作mongoDB就必须要加入此扩展&#xff1a;php_mongo.dll&#xff0c;放到你对应php的扩展目录在你的php.ini中加入&#xff1a;extensionphp_mongo.dll重启apache&#xff0c;在phpinfo()中查看是否有…

十大机器智能新型芯片:华为抢占一席,Google占比最多

&#xff08;图片付费下载自视觉中国&#xff09;整理 | 胡巍巍来源 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;当年&#xff0c;阿基米德爷爷说出“给我一个支点&#xff0c;我就能撬动地球”这句话时&#xff0c;估计没少遭受嘲讽。然而后来的我们&#xff0c;都…

C++/C++11中头文件numeric的使用

<numeric>是C标准程序库中的一个头文件&#xff0c;定义了C STL标准中的基础性的数值算法(均为函数模板)&#xff1a; (1)、accumulate: 以init为初值&#xff0c;对迭代器给出的值序列做累加&#xff0c;返回累加结果值&#xff0c;值类型必须支持””算符。它还有一个…

Spring基础16——使用FactoryBean来创建

1.配置bean的方式 配置bean有三种方式&#xff1a;通过全类名&#xff08;class反射&#xff09;、通过工厂方法&#xff08;静态工厂&实例工厂&#xff09;、通过FactoryBean。前面我们已经一起学习过全类名方式和工厂方法方式&#xff0c;下面通过这篇文章来学习一下Fact…

查看进程 端口

2019独角兽企业重金招聘Python工程师标准>>> 一 进程 ps -ef 1.UID 用户ID2.PID 进程ID3.PPID 父进程ID4.C CPU占用率5.STIME 开始时间6.TTY 开始此进程的TTY7.TIME 此进程运行的总时间8.CMD 命令名 二端口 netstat Linux下如果我…

深度学习中的欠拟合和过拟合简介

通常情况下&#xff0c;当我们训练机器学习模型时&#xff0c;我们可以使用某个训练集&#xff0c;在训练集上计算一些被称为训练误差(training error)的度量误差&#xff0c;目标是降低训练误差。机器学习和优化不同的地方在于&#xff0c;我们也希望泛化误差(generalization …

今日头条首次改进DQN网络,解决推荐中的在线广告投放问题

&#xff08;图片付费下载自视觉中国&#xff09;作者 | 深度传送门来源 | 深度传送门&#xff08;ID:gh_5faae7b50fc5&#xff09;【导读】本文主要介绍今日头条推出的强化学习应用在推荐的最新论文[1]&#xff0c;首次改进DQN网络解决推荐中的在线广告投放问题。背景介绍随着…

RPA实施过程中可能会遇到的14个坑

RPA的实施过程并非如我们所想的那样&#xff0c;总是一帆风顺。碰坑&#xff0c;在所难免。但也不必为此过于惊慌&#xff0c;因为&#xff0c;我们已经帮你把RPA实施之路上的坑找了出来。RPA实施过程中&#xff0c;将会遇到哪些坑&#xff1f; 【不看全文大纲版】●组织层面&a…

Android问题汇总

2019独角兽企业重金招聘Python工程师标准>>> 1. Only the original thread that created a view hierarchy can touch its views 在初始化activity是需要下载图片&#xff0c;所以重新开启了一个线程&#xff0c;下载图片更新ui&#xff0c;此时就出现了上面的错误。…

深度学习中的验证集和超参数简介

大多数机器学习算法都有超参数&#xff0c;可以设置来控制算法行为。超参数的值不是通过学习算法本身学习出来的(尽管我们可以设计一个嵌套的学习过程&#xff0c;一个学习算法为另一个学习算法学出最优超参数)。在多项式回归示例中&#xff0c;有一个超参数&#xff1a;多项式…

自定义View合辑(8)-跳跃的小球(贝塞尔曲线)

为了加强对自定义 View 的认知以及开发能力&#xff0c;我计划这段时间陆续来完成几个难度从易到难的自定义 View&#xff0c;并简单的写几篇博客来进行介绍&#xff0c;所有的代码也都会开源&#xff0c;也希望读者能给个 star 哈 GitHub 地址&#xff1a;github.com/leavesC/…

分析Booking的150种机器学习模型,我总结了六条成功经验

&#xff08;图片付费下载自视觉中国&#xff09;作者 | Adrian Colyer译者 | Monanfei出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;本文是一篇有趣的论文&#xff08;150 successful machine learning models: 6 lessons learned at Booking.com Bernadi et al.,…

Android官方提供的支持不同屏幕大小的全部方法

2019独角兽企业重金招聘Python工程师标准>>> 本文将告诉你如何让你的应用程序支持各种不同屏幕大小&#xff0c;主要通过以下几种办法&#xff1a; 让你的布局能充分的自适应屏幕根据屏幕的配置来加载合适的UI布局确保正确的布局应用在正确的设备屏幕上提供可以根据…

C++/C++11中头文件iterator的使用

<iterator>是C标准程序库中的一个头文件&#xff0c;定义了C STL标准中的一些迭代器模板类&#xff0c;这些类都是以std::iterator为基类派生出来的。迭代器提供对集合(容器)元素的操作能力。迭代器提供的基本操作就是访问和遍历。迭代器模拟了C中的指针&#xff0c;可以…

从多媒体技术演进看AI技术

&#xff08;图片付费下载自视觉中国&#xff09;文 / LiveVideoStack主编 包研在8月的LiveVideoStackCon2019北京开场致辞中&#xff0c;我分享了一组数据——把2019年和2017年两场LiveVideoStackCon上的AI相关的话题做了统计&#xff0c;这是数字从9.3%增长到31%&#xff0c;…

五. python的日历模块

一 .日历 import calendar# 日历模块# 使用# 返回指定某年某月的日历 print(calendar.month(2017,7))# July 2017 # Mo Tu We Th Fr Sa Su # 1 2 # 3 4 5 6 7 8 9 # 10 11 12 13 14 15 16 # 17 18 19 20 21 22 23 # 24 25 26 27 28 29 30 # 31# 返…