驭势导读 | 通往深度学习之路,“杀鸡焉用宰牛刀”?

AI天团出道已久,成员都是集颜值和才华于一身的男纸,之前我们已经见过其中三位了,压轴出场的到底是谁?

更为重要的是,他会带给我们关于人工智能的什么新鲜东东呢?

驭势导读 | 通往深度学习之路,“杀鸡焉用宰牛刀”?_第1张图片


王宇航,博士毕业于中国科学院自动化研究所,现阶段主要研究方向包括:深度学习、图像语义分割、目标检测、网络模型压缩与加速等。


宇航告诉我们,深度神经网络也可以是一个“Transformer”,它可以在使用时根据输入数据动态地调整自己的结构。至于为什么要设计这样的网络结构,宇航用“杀鸡焉用牛刀”来形容它。

随着近年来深度学习的快速发展,我们已经能够获得越来越精确的模型实现对图像目标的识别,而相应地,模型的体积也在成倍地增长,这给模型的部署和应用带来了很大的麻烦。因此,很多学者一直致力于给深度神经网络模型“减重”,从而实现效果和速度的平衡。

其中的主要方法包括对模型和知识进行蒸馏,对模型进行剪枝,以及对模型参数进行分解和量化等等。这些方法都能够提高模型中“有效计算”的密度,从而使模型变得更加高效。如果说这些方法是获得了更加高效的“静态”模型的话,另一类方法则采用“动态”的模型来提高应用端的计算效率,它们针对不同的输入数据动态地调整网络的前向过程,去除不必要的计算,从而达到加速的目的。

 

今天王宇航博士要介绍的是两篇使用“动态”的网络结构来实现CNN模型加速的文章,先注明一下来源~


1.Runtime Neural Pruning,原文链接:https://papers.nips.cc/paper/6813-runtime-neural-pruning,NIPS2017接收文章,来自清华大学。

2.SkipNet: Learning Dynamic Routing in Convolutional Networks,原文链接:https://arxiv.org/abs/1711.09485,来自UC Berkeley和南京大学。


首先,我们可以分析一下深度神经网络模型在训练和预测过程中的不同:在训练的过程中,我们要求模型对来自不同场景不同类别的目标都进行学习和辨别,以丰富其“知识储备”,并因此不得不引入更多的神经元和网络连接。

而在预测阶段,我们的需求往往集中于个体图像的识别,而应对这样相对单一的场景和目标,往往不需要我们使出全部的“看家本领”,只需要使用一部分相关知识针对性地去解决就可以了。

对于深度神经网络模型,参数,或者说神经元之间的连接,就是它的“知识”,而针对不同的数据对网络连接进行选择, 就可以动态地调整网络的计算过程,对于比较容易辨认的图像进行较少的编码和计算,而对于比较难以辨认的图像进行较多的编码和计算,从而提高网络预测的整体效率。

 

本文介绍的这两篇文章都是基于这样的出发点,而它们的关注点又各自不同。

“Runtime” 一文主要关注于减少网络中卷积层的channel数量,如下图所示:

驭势导读 | 通往深度学习之路,“杀鸡焉用宰牛刀”?_第2张图片

为了简化模型,他们将网络中每一个卷积层的卷积核分为k组,根据网络各前层的输出特征决定在本层中使用的卷积核数量m(1≤m≤k),并仅使用前m组卷积核参与运算,从而通过减小m来削减层与层之间的连接,达到channel pruning的效果。

 

而 “SkipNet”一文则主要关注网络中layer的数量,其主要思想如下图所示:

驭势导读 | 通往深度学习之路,“杀鸡焉用宰牛刀”?_第3张图片

他们为网络中的每一个层(或每一组层)学习一个“门”,并基于网络各前层的输出特征进行判断,是将前一层输出的特征图输入本层进行计算还是直接越过本层将其送入后续网络,从而通过“skip”掉尽可能多的层来实现加速的目的。

 

从直观上来讲,这两篇文章分别从动态削减模型的“宽度”和“深度”的角度,实现了对预测过程中网络计算的约减。

那么如何实现对网络连接方式的动态调整呢?

在网络由浅至深的过程中,对于网络中每一层连接方式的选择(对于“Runtime” 一文是选择该层使用的卷积核数量,而对于 “SkipNet”一文是选择该层参与计算与否)可以看作一个序列决策过程,因此,这两篇文章均选择了强化学习的方式建模这一过程。将原始的主体CNN网络作为“Environment”,学习一个额外的轻量的CNN或RNN网络作为“Agent”来产生决策序列。其中,对于原CNN网络每一层的决策,作为一个“Action”都将带来相应的“Reward”。

为了在最大限度地压缩网络计算的同时最大化网络的分类精度,在构建“Reward”函数的过程中,需要同时考虑两个部分:1.对“Action”约减计算量的奖励,即prune掉的channel越多或skip掉的layer越多,获得奖励越大;2.网络最终的分类预测损失,即最终分类预测的log损失越小,获得奖励越大。由于这两部分的梯度计算方式不同,因此在对模型目标函数进行优化的过程中,会构成一个“强化学习+监督学习”的混合学习框架。

在具体的算法实现中,这两篇文章对于“Reward”函数的设计和优化策略的选择各有不同。“Runtime”一文采取了交替更新的方式,而“SkipNet”一文则采用了混合优化的方式,具体的细节我们就不在这里详述了。

对于方法的效果,这两篇文章都给出了严谨的数据对比和可视化结果分析,大家可以根据兴趣进行更深入的阅读和研究。而动态网络结构的意义,可能也不止于单纯的约减计算。网络连接的改变实际上影响着整个特征编码的过程,以“SkipNet”为例,对n个网络层的选择可能会带来2^n种不同的特征编码方式,而在训练这种动态选择策略的过程中,可能也会一定程度地解耦层与层之间的依赖关系,这也会为我们日后设计更具“自适应性”的网络结构和研究网络中信息的传递及融合方式带来更多的启发。


说正经的,我们AI天团正在纳新中。

要不要带个offer回家过年?

就看你咯~

重磅推出

驭势科技AI天团最新咖位

计算机视觉算法工程师 

工作职责

用视觉识别和理解复杂环境,为视觉主导的无人驾驶系统在感知和定位方提供强有力的支撑。

职位要求

·有扎实的图像分析和模式识别理论基础,精通目标检测、跟踪、识别等常见的计算机视觉处理任务

·有扎实的数学基础,精通常见的几何、统计学等,并熟悉这些技术在图像识别领域中的应用

·有很强的工程能力,精通 C++ 语言以及至少另一种常见编程语言·对计算机结构有深刻的认识,能够开发高性能、实时运行的图像处理软件

·有发明创造的理想和热情,致力于创造解决实际问题的视觉感知技术

优先考虑

· 熟悉VISUAL SLAM 等在机器人定位和导航领域中常用的经典方法 · 熟悉STEREO , STRUCTURED LIGHT, TOF 等三维成像原理和方法 

· 熟悉图像识别领域的常见工具如 OPENCV 等 

· 熟悉高性能运算加速工具如 NEON 以及GPGPU 技术如 GLES, CUDA 和OPENCL 等 

· 发表过CVPR/ECCV/ICCV/NIPS/ICML 等视觉和 AI 领域会议文章

· 熟悉图像识别领域的常见工具如 OPENCV 、MATLAB 等

机器学习/深度学习算法工程师

工作职责 

既要让自动驾驶更好的理解周围

又要挑战更多ML用于无人驾驶的可能

职位要求

· 熟悉机器学习的基本方法 ( 降维、分类、回归、排序等等 )熟悉深度学习原理和基本模型

· 熟练使用 CAFFE ,THEANO 或其他常用深度学习工具,并能够灵活的解决实际问题熟悉计算机视觉和图像处理的常用方法 ( 物体检测、跟踪、分割、分类识别等 ) 。

· 学习能力强,读机器学习、计算机视觉领域的论文易如反掌

· 有很强的工程能力,精通 C++ 语言以及至少另一种常见编程语言· 对计算机架构有深刻的认识,能够开发高性能、实时运行的图像处理软件

· 有发明创造的理想和热情,致力于创造解决实际问题的视觉感知技术尝试将机器学习和深度学习技术应用于非识别领域

优先考虑

· 发表过CVPR/ECCV/ICCV/NIPS/ICML 等视觉和 AI 领域会议文章

· 熟悉图像识别领域的常见工具如 OPENCV 等

· 熟悉高性能运算加速工具如 NEON 以及GPGPU 技术如 GLES, CUDA 和OPENCL等

高性能计算工程师 

工作职责     

通过GPU和CPU多核加速等一切方式, 实现人工智能算法的极致加速 在NVIDIA JETSON等嵌入式平台开发最高效实用的自动驾驶应用程序

任职要求 

· 熟练掌握GPU并行算法设计 

· 熟练掌握GPU体系结构和CUDA代码调试与优化技术 

· 三年以上相关工作经验 

· 有TK1/TX1/TX2开发经验和算法移植与优化经验

优先考虑  

熟悉常用的计算机视觉、深度学习算法者优先  

在驭势AI天团中

你将接触和熟悉最前沿的人工智能算法 

与最棒的AI算法工程师合作

完成最高效能低成本的自动驾驶落地产品

更多招聘岗位欢迎点击WWW.UISEE.COM 

扫描二维码,驭势科技官网上投简历咯!

你可能感兴趣的:(驭势导读 | 通往深度学习之路,“杀鸡焉用宰牛刀”?)