SPPNet论文翻译-空间金字塔池化Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

我对物体检测的一篇重要著作SPPNet的论文的主要部分进行了翻译工作。SPPNet的初衷非常明晰,就是希望网络对输入的尺寸更加灵活,分析到卷积网络对尺寸并没有要求,固定尺寸的要求完全来源于全连接层部分,因而借助空间金字塔池化的方法来衔接两者,SPPNet在检测领域的重要贡献是避免了R-CNN的变形、重复计算等问题,在效果不衰减的情况下,大幅提高了识别速度。

用于视觉识别的深度卷积网络空间金字塔池化方法

Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun

摘要

当前深度卷积神经网络(CNNs)都需要输入的图像尺寸固定(比如224×224)。这种人为的需要导致面对任意尺寸和比例的图像或子图像时降低识别的精度。本文中,我们给网络配上一个叫做“空间金字塔池化”(spatial pyramid pooling,)的池化策略以消除上述限制。这个我们称之为SPP-net的网络结构能够产生固定大小的表示(representation)而不关心输入图像的尺寸或比例。金字塔池化对物体的形变十分鲁棒。由于诸多优点,SPP-net可以普遍帮助改进各类基于CNN的图像分类方法。在ImageNet2012数据集上,SPP-net将各种CNN架构的精度都大幅提升,尽管这些架构有着各自不同的设计。在PASCAL VOC 2007和Caltech101数据集上,SPP-net使用单一全图像表示在没有调优的情况下都达到了最好成绩。SPP-net在物体检测上也表现突出。使用SPP-net,只需要从整张图片计算一次特征图(feature map),然后对任意尺寸的区域(子图像)进行特征池化以产生一个固定尺寸的表示用于训练检测器。这个方法避免了反复计算卷积特征。在处理测试图像时,我们的方法在VOC2007数据集上,达到相同或更好的性能情况下,比R-CNN方法快24-102倍。在ImageNet大规模视觉识别任务挑战(ILSVRC)2014上,我们的方法在物体检测上排名第2,在物体分类上排名第3,参赛的总共有38个组。本文也介绍了为了这个比赛所作的一些改进。

Read more

R-CNN论文翻译——用于精确物体定位和语义分割的丰富特征层次结构

我对深度学习应用于物体检测的开山之作R-CNN的论文进行了主要部分的翻译工作,R-CNN通过引入CNN让物体检测的性能水平上升了一个档次,但该文的想法比较自然原始,估计作者在写作的过程中已经意识到这个问题,所以文中也对未来的改进提出了些许的想法,未来我将继续翻译SPPNet、fast-RCNN、faster-RCNN、mask-RCNN等一系列物体定位和语义分割领域的重要论文,主要作者都是Ross Girshick和Kaiming He。

用于精确物体定位和语义分割的丰富特征层次结构

Rich feature hierarchies for accurate object detection and semantic segmentation

Ross Girshick      Jeff Donahue      Trevor Darrell     Jitendra Malik
UC Berkeley

摘要

过去几年,在权威的PASCAL VOC数据集上,物体定位的性能已经达到一个稳定水平。表现最好的方法都是融合了多个低层次图像特征和高层次的上下文环境的复杂系统。本文提出一种简单的可扩展的检测算法,可以将VOC2012上期望平均精度的最好结果明显提升30%以上——达到了53.3%。我们的方法结合了两个关键因素:(1) 将大型卷积神经网络(CNNs)应用于自底向上区域推荐以定位和分割物体;(2)当标签训练数据不足时,先针对辅助任务进行有监督预训练,再进行特定任务的调优,就可以产生明显的性能提升。由于我们结合了区域推荐和CNNs,该方法被称为R-CNN:Regions with CNN features。我们对比了R-CNN和OverFeat,Overfeat是最近被提出的一个机遇类CNN架构的滑动窗口检测器,发现R-CNN在ILSVRC2013检测数据集上面的表现明显优于OverFeat。整个系统的源码在:https://people.eecs.berkeley.edu/~rbg/rcnn(译者注:已失效,新地址:https://github.com/rbgirshick/rcnn)

Read more

使用.ai域名的著名人工智能创业公司盘点

.com域名基本已经废了,除非特别讨巧地起到新的名字,否则基本都要花大价钱才能搞到满意的名字。但这些对于人工智能的初创公司,似乎烦恼更小一点,因为.ai域名的注册价格不菲,导致投机者大幅减少,直到2015年,.ai域名都数量甚微,大量优质域名都无人注册,比如单拼ai域名今年才用尽,而双拼域名大把存在,因此这些人工智能初创公司,就可以开开心心地毫无压力地选择一个比较不错的域名注册。

Read more

[DeepMind论文部分翻译]克服神经网络中的灾难性遗忘 Overcoming catastrophic forgetting in neural networks

本文翻译了DeepMind的最新研究成果的第一部分,可以当做是introduction部分,借鉴神经科学成果,解决了一个通用人工智能领域持续学习所面临的关键性难题。
实现通用智能需要智能代理能够学习和记住许多不同的任务[1]。在现实世界中这很困难:任务的顺序并不会显式地标注出来,任务之间可能会不可预期地切换,单一任务可能在很长的一段时间内都不会复现。因而,智能代理必须具备持续学习的能力:也就是学习连贯的任务而不会忘记如何执行之前训练过的任务的能力。
持续学习对人工神经网络是一个特别大的挑战,因为与当前任务(比如任务B)相关的知识被合并掉,关于先前任务(比如任务A)的知识会突然地丢失。这个现象术语叫灾难性遗忘(catastrophic forgetting)[2-6],一般会发生在神经网络在多个任务上进行按序训练的时候,比如对任务A很重要的神经网络的权重正好满足任务B的目标时。然而近来机器学习的进步,尤其是深度神经网络的进步对各个领域已经产生了广泛的有利影响(如文献7和8),但连续学习领域的研究却停滞不前。当前的方法主要是通过确保来自各个任务的数据在训练中都可以同时获得。通过在学习过程中对来自多任务的数据进行交叉操作,其实遗忘并不会发生,因为神经网络的权重能够对所有任务上的表现进行联合优化,但这个方法通常指的是多任务学习范式-深度学习技术,已经被成功地应用在训练单一智能体玩多种Atari游戏[9,10]。如果任务按序呈现的话,只能在数据存储在事件记忆系统并在训练的过程中对网络进行回放时,才能采用这种多任务学习技术。这种方法(通常也叫系统级巩固[4, 5])面对学习大量任务时并不实用的,因为按照我们的设定,它应该需要与任务数量成比例的存储数量。相关算法的确实成为通用智能开发的关键障碍。
与人工神经网络形式鲜明对比的是人类和其他动物似乎能够以连续的方式学习[11]。最近的证据提示哺乳动物的大脑可能会通过大脑皮层回路来保护先前获得的知识,从而避免灾难性遗忘[11-14]。当小鼠需要一个新技能的时候,一定比例的突触就会增强,表现为单一神经元的树突棘数量的增加[13]。至关重要的是,即使进行了后续的其他任务的学习,这些增加了的树突棘能够得到保持,以便几个月后相关能力仍然得到保留。当这些树突棘被选择性“擦除”后,相关的技能就会被遗忘[11,12]。这表明对这些增强的突触的保护对于任务能力的保留至关重要。这些实验发现与诸如瀑布模型[15, 16]这样的神经生物学模型提示我们大脑皮层中的持续学习依赖于任务相关突触的巩固,知识能够长久地编码得益于让一部分突触降低可塑性从而在相当长的时间范围内变得稳定。
本次工作将展示任务相关突触巩固为人工智能的持续学习问题提供了独特的解决方案。我们为人工智能神经网络开发了一种类似于突触巩固的算法,称之为可塑权重巩固(elastic weight consolidation,EWC)。这个算法会针对那些对特定任务特别重要的特定权重降低学习率。也会展示EWC如何应用在监督学习和强化学习问题中,在不会遗忘旧任务的情况下,按次序地训练多个任务,并与之前的深度学习技术进行对比。

变分自编码器(Variational Autoencoder, VAE)通俗教程

1. 神秘变量与数据集

现在有一个数据集DX(dataset, 也可以叫datapoints),每个数据也称为数据点。
我们假定这个样本受某种神秘力量操控,但是我们也无从知道这些神秘力量是什么?那么我们假定这股神秘力量有n个,起名字叫\(power_1, power_2,…, power_n\)吧,他们的大小分别是\(z_1, z_2, …, z_n\),称之为神秘变量表示成一个向量就是

\(
z =
\left(
\begin{array}{c}
z_1\\
z_2\\
\vdots\\
z_n
\end{array}
\right)
\)

z也起个名字叫神秘组合

一言以蔽之:神秘变量代表了神秘力量神秘组合关系。
用正经的话说就是:隐变量(latent variable)代表了隐因子(latent factor)的组合关系。 Read more

STDP与无监督学习

SDTP是在大脑中发现的神经元之间权重连接的更新规则,他的目标非常的清晰就是如果两个神经元的发放在时间上离的远近,他们之间的绑定关系就越紧密,一般就反映到激活权重越大上。我从文献[1]中盗了个图,如下:

a

我们可以看到,如果一个神经元A的激活在另一个神经元B的激活之后很快就发生,时间差小于5ms时,B到A的连接权重就会增加约70%,而相反A到B的连接权重就会衰减20%。什么意思?通俗的说,就是当A和B先后激活时,具备紧密先后关系的双方会加强联系,而具备相反关系的,就会渐行渐远,这样的规则带来了什么样的结果呢?那就是具备时间上和空间上同时性或连续性的事件之间建立带有次序关系的联系。从这个角度,也可以想象到神经元之间往往建立的是单向的加强联系,如果A到B不断增强,那么B到A就不断减弱,而如果是同时发生,一般两者会不好不坏,而他们的共同下游则与他们之间形成了更加紧密的联系, 从而两者变成了同级,并具备了间接关系。 Read more

大脑、小脑与运动控制原理

发现一个写得还不错的关于运动控制的教学文章,翻译给大家。

原文地址: http://thebrain.mcgill.ca/flash/d/d_06/d_06_cr/d_06_cr_mou/d_06_cr_mou.html#4

运动皮层

人体的自主运动都是由大脑控制的。控制自主运动的大脑区域称作运动皮层。运动皮层位于额叶后部,中央沟回(额叶和顶叶的分界线)之前。运动皮层主要分为两个区域,4区和6区,也成为初级运动皮层,沿着中央沟回形成一条窄带。6区位于4区的正前方。6区更宽,进一步细分为两个亚区。为了能够执行目标导向的运动,运动皮层需要接收来自各叶的各种信息,包括:来自顶叶的身体空间位置信息;来自额叶前部的关于达成目标而采用的恰当策略信息;来自颞叶关于历史策略的记忆信息;

d_06_cr_mou_1a

图1. 区域划分

d_06_cr_mou_1b

图2. 身体映像

Read more

小议动态神经网络

深度学习的发展很快将到达一个瓶颈期,因为从更高的维度来看,从开始到现在我们对待时间问题的处理方式都可能存在的方向上的错误,虽然RNN相关的技术在时序相关问题上取得了不错的成果,但应用范围依然有限。

那么,问题到底出现在哪里?在下献一拙思。

梳理生物等级链的智能演化,大家可以发现,对于时间性问题的处理,是神经网络在诞生之初就最先具备的,而我们的人工神经网络恰恰是从诞生到现在都不具备的,举个例子,对视频进行实时的物体识别、定位与标注是怎样做的?利用训练好的深度神经网络对当下选取的一帧进行计算,算出的向量用于展示,再选取一帧重复计算,整个流程是由人类算法控制的,网络的计算呈现的是时间无关性,亦即就像时间静止时网络做了一件工作,再推动时间向前一步,再静止工作一样,我称之为静态识别网络,进而可以理解如果是动态识别网络,那就像生物学神经网络那样,信息流源源不断地流入,计算在每个局部都在发生,结果在时间流上持续出现。显然,我们现在已知的网络都没有走这条路,这其中可能有计算量的问题,也可能有理论上刻意的选择,但我的见解是动态网络才是智能进阶的关键点。
当然,在整个智能系统中,特征的自动发现、层级组合性等诚然至关重要,但这些关键的能力之外,我们可能还忽略了若干重要的能力,动态性就是其中一个,有了这个能力,我们的网络就可以更加容易地处理时间流上的东西,比如运动控制、传感器流的处理(包括视觉流处理能力,更好的声音流处理能力以及其他知觉的感知能力)、联想、观察、思考、甚至产生意识。

那么现在的RNN存在什么问题呢?

就是因为RNN虽然引入了时间性,但是不彻底,他的本质是直接处理静态化后的数据流,再进行处理。静态化就是将随时间流逝的东西借助缓存等手段变成一个共存的东西,静态化是智能系统面对时间性问题的解决方案,比如视听觉暂留机制、缓存机制,但RNN在静态化方面是被动的,因为网络本身不提供静态化的机制,他只能将人为静态化后的成果进行处理;RNN是图灵完备的,他可以模拟任何计算过程,而程序也是静态化的,每一条指令的执行是基于CPU的时间片的,RNN本质上也是,是通过程序控制RNN的step的,倒不是说这种序列步骤有什么错误,问题在于序列步骤的基础仍然是人为的,所以网络缺乏了施展空间,这种结构限制了RNN具备更加复杂的时间性数据的处理能力,所以你无法用RNN进行实时地观察、联想、思考甚至互动等等。

那应该怎样做呢?

我的一个思路是这样的,基本就是生物脑运行模式,先抛弃计算量的问题不谈,假定我们不需训练已经掌握了一个权重直接确定法,我们先让这个用于某种功能的网络可以实时不断地接收外部数据,每个神经元都独立计算,一个完全的分布式模式;从运动控制、简单的感受器做起,沿着生物进化的脚步增加该神经网络的复杂性。

Deep Learning Tutorial 深度学习教程翻译

国内互联网上关于deeplearning.net上的Deep Learning Tutorial的翻译有很多,但很零散,并且没有人有效地把这些组织起来,本文对这些进行了整理,带有>前往的都是已经找到的对应的翻译文章,有些是我自己写的,其他一些还没有的,我会自己补充上。

前置阅读

Machine Learning for AI an introduction to Deep Learning algorithms

Learning Deep Architectures for AI (Foundations & Trends in Machine Learning, 2009).

Theano basic tutorial

正式教程

准备工作 – 它介绍了符号,本教程中使用的数据集(可下载),以及对随机梯度下降法所做的优化。 > 前往

纯监督学习算法,按顺序阅读:

  1. Logistic Regression – 简单使用Theano > 前往
  2. Multilayer perceptron – 介绍layer >前往
  3. Deep Convolutional Network – LeNet5的简化版本 >前往

无监督和半监督学习算法,阅读顺序无要求:(自编码器与RBM/DBN议题相互独立):

  • Auto Encoders, Denoising Autoencoders, 自编码器,去噪自编码器 – 自编码器描述 >前往
  • Stacked Denoising Auto-Encoders,堆栈式自编码器 – 进行深度网络无监督预训练的简单步骤 >前往
  • Restricted Boltzmann Machines,受限玻尔兹曼机 -单层生成式RBM模型
  • Deep Belief Networks – 深度信念网络 -先进行栈式RBMs的无监督生成式预训练再进行有监督微调

面向mcRBM模型构建, 关于从能量模型采样的新教程:

  • HMC Sampling,混合蒙特卡罗采样 -混合(又名汉密尔顿)蒙特卡洛采样 scan()

面向收缩自编码器的构建教程, 目前已经有了代码:

  • Contractive auto-encoders code,收缩自编码器代码 – 代码中有基础文档

带有词语嵌入和上下文窗口的Recurrent neural networks

  • Semantic Parsing of Speech using Recurrent Net

用于语义分析的LSTM:

  • LSTM network

基于能量的recurrent neural network (RNN-RBM)

  • Modeling and generating sequences of polyphonic music,和弦音乐序列的建模与生成

人工智能任务的分类

本文主要提出一种智能任务分类方法,希望未来可以有利于智能系统的设计和评估。

本稿属于2016年06月24日初稿,后续会不断修订更新,转载须注明出处。

 

人工智能任务的分类

邓范鑫

为了实现AI-Complete(AI-Hard,AI完全)问题,我们需要一些测量方法,最著名的测量方法当属图灵测试。一个可以解决AI完全问题的机器应该在必要辅助的设备帮助下,可以完成人类能够完全的所有任务,亦即它像人类一样的智能(Intelligent),我们便称其为强人工智能(True AI或Strong AI)。这些人类可以完成的任务,我们称之为人工智能任务,简称AI任务,AI任务有不同的难易程度,所谓难易是基于所需要的智力资源的多少,一般呈现到科学技术领域,表现出来的是越容易模拟实现的AI任务越简单,越难于模拟实现的任务越困难,目前还有很多AI任务,除人类以外没有任何对象可以完成。 Read more