【论文略读41】动态神经网络综述

这次略读了综述Dynamic Neural Networks: A Survey

阅读的动机是觉得这个和动力系统有关系,不过读完了没什么感觉,大的感悟是玄学,小的感悟是和元学习、NAS、ODE、流什么的其实都有点关系,觉得框架不太优美,多而杂

ps:其实没有读完,正文只读了前四大章,到优化训练前面。后面参考他人的博客了解了概览

ps2:这次写作引入了缩放图片的方法,且兼容中文图片标题

文献信息

本文是动态神经网络的一个综述,引言之后就按动态网络分类,分三类介绍,然后讲优化训练技巧,最后讲应用和未来方向。正文15页,作者都是清华的,主力似乎是黄高老师。我自己读到了正文前四大章,到优化/训练的前面。本来想着这个动态网络和NODE有点关系,但是读了一大半发现目前关系不大,下次读文章还是要搞清楚我的初始目标是什么,不然要花好多时间。后面的内容有人已经总结好了虽然自己读的确实详细一点),请参考下列博客:

文献小结

动态网络的背景方法是静态网络,后者有固定的权重、计算图和网络结构;

研究它的动机是与静态网络对比,超越其诸多限制;

要解决的问题可以分特定任务考虑,也可以说是针对静态网络的缺点(静态限制了表达能力,计算效率,以及某种意义下的可解释性);

动态网络的表示方法可以为3大,具体是instance-wise,spatial-wise,temporal-wise。大致就是网络🉑根据每个输入的样本、或样本中的位置(如图像上像素位置)、或时间(主要是TS或视频数据)自适应变化。另外,动态也可以指在测试的时候动态,即自适应推断,测试样本来的时候,可能有级联(非串联)或者并行(不严格是并联)的结构;

其训练优化方法也很重要,因为相比静态,动态的训练更难;

动态网络的优点,主要是对比静态网络:

  • 可解释性up,这个解释的角度清奇啊,动态网络可能打通深度模型和人脑机制之间的gap?理由是脑处理信息是动态的,比如接收不同信息后脑的激活区域不同。这个idea是启发式的,所以其实可解释性不强
  • 计算效率up,比如分配计算,激活部分结构
  • 表示能力up,参数空间动态变化,更大了
  • 自适应性🉑,动态平衡准确率和计算效率
  • 兼容性🉑,与现有方法,技巧基本上兼容
  • 一般性/泛化性🉑,动态的比静态的更general,应用也都可以用

缺点,显然的一个缺点是理论证明不充分,只有一小部分启发式的道理,所以玄学感强;

其未来研究方向有,继续设计网络结构、优化技巧;寻找应用;补充现在缺乏的理论证明,etc

方法分类(看图即可)

这一部分是把综述里列举的动态网络分类一一列出来,和网上的其它博客差不多。写在这里是因为自己看过一遍,就列一遍仅供自己日后回忆

文章的图$(1)$其实很🉑,看了可以加深对本文的认识,不错,我基本上看懂了。下面是具体的分类:

  • 第一大类【instance-wise】

    总的来说,它指根据输入样本,不改变参数时调整使用的计算图(即模型结构);或者不改变计算图时自适应模型参数(会增大计算消耗但确实性能有所提升)

    • 【动态结构】,主要是推断/测试的时候

      • 【调整网络深度】,具体方法包括

        1. 【提前中止网络】,道理是简单样本确实不需要太多计算,难的样本才需要深度特征

          例一是网络级联,参考原文图$(3a)$,不是串联!像树一样分好多模型,选择其中的部分模型;

          例二是在中间层设置分类器,某一层之后如果显著确定类别就可以提前终止了;

          例三是多尺度的提前中止,这个多尺度指的是浅层和深度特征的选择,主要是DenseNet,Dense连接之类的方法,权衡选择浅层或深度特征

        2. 【跳过某些中间层】,其实有点像提前中止的灵活版,skip的操作可用ResNet那样的连接完成

          例一,halting score,是个分数(标量),具体怎么算没看。感觉是要网络前进过程种这个量会累计,当超过一定的阈值之后网络才会跳到下一层,否则循环上一层;

          例二,门函数(gating functions),输入还是上一层的输出,输出是0或1,原文$(4)$式很清楚。特点是即插即用(plug-and-play)模块,如原文图$(4)$,确实是像开关一样即插即用;

          例三是策略网络,就是单独用一个网络来当门函数,输入取原始的输入,它怎么就能是policy暂时不太明白

      • 【调整中间层宽度】,具体方法🈶

        1. FC层【动态宽度】,思想是有的神经元表示的特征不太重要,就不必被激活

        2. 【专家混合(MoE)】,这个和上面的网络级联有点像,但是不会说一个专家网络🆗了其它的网络就不计算了。MoE都计算,只是会为每个专家的输出赋权,权重与样本数据有关,可以通过单独的函数或者输出稀疏系数的hard门函数

        3. CNN中的【动态channel剪枝】,这个的idea是对不同样本,有的channel可能用不上,所以可以跳过一些channel(不是真剪了)

          例一,Multi-stage architectures along the channel dimension没看懂;

          例二、三分别是基于门函数和特征激活的动态剪枝。我对剪枝不感兴趣,也看不太明白,不看了

      • 用超网络【选择计算图路径】,这个主要是讨论怎么确定选择路径的策略,以及超网络的结构。注意之前提早中止也相当于是一种路径选择。具体的实例不感兴趣,怎么觉得和剪枝很像,越看越不明白,怎么看都像NAS,再看就是玄学。和ODE关系不大,不看了!

    • 【动态参数】,首先还是在样本-wise的框架下,所以这个动态参数是指对每个输入样本,网络的结构不要变,参数有所变化

      • CNN中的【卷积核参数化】,原文标题weights调整应该就是这个意思,根据输入调整训练参数,这样做的好处是消耗一定的计算资源提高性能。具体细节以前没有关注过,感觉分两种:

        一种是只改卷积核参数,比如用多个核加权近似;

        还有一种是卷积核大小自适应,具体不太了解,应该和感受域大小有关

      • 【权重预测】,这个比上一条更暴力,根据输入样本直接预测/生成网络中的滤波器/参数。一般的做法是直接上超网络,输出就是滤波器/卷积算子;另外,特定任务的信息也可以拿来训练生成这些参数

      • 【动态特征】,这类方法的动机是利用上述动态参数进行测试/推断的时候,其实生产的特征也是动态的,其中会暗含一些不清楚是什么的新特征;而现在可以更直接地得到这样的动态特征。文章总结了三种方法来获取动态特征:

        1. 利用attention直接对多channel加权;
        2. 利用attention直接对输入的不同位置进行自适应加权;
        3. 直接对激活函数动态加权,方式似乎是在激活函数中引入了调整参数
  • 第二大类【spatial-wise】

    动机合理,vision task中,不是图像中所有区域都很重要,位置信息有冗余;且使用不同分辨率的图像效果也不同。由此动机,空间-wise分三类,像素自适应、区域自适应和分变量自适应

    • 【像素自适应】,这个自适应又分动态结构、动态参数

      1. 【动态结构】,例子是稀疏卷积,指的是只对图像上部分区域进行卷积,这些像素位置可以通过采样位置进行卷积或者先学习mask再卷积

      2. 【动态参数】

        例一是每个像素位置生成不同的卷积核;

        例二是每一层生成不同的卷积核,这样改变了每一层处理的感受野;

        例三是动态特征,动态参数生成的是动态特征,因此跳过卷积核直接自适应加权像素位置

    • 【区域自适应】,对图像上不同区域区分,也是要区分图像上空间位置中的冗余信息。可以稀疏采样区域,或者用attention机制、RNN等网络递归学习每一层关注哪个区域

    • 【分辨率自适应】这个同区域自适应,也是要区分空间位置中的冗余信息。但是它不是直接按位置来分,而是按照多尺度下,不同分辨率来自适应

      1. 例一是,每一层都自适应选择分辨率尺度;
      2. 例二是,网络的结构级联分层,通过选择上下采样判断下一步使用哪个尺度的模型
  • 第三大类【时间-wise】

    针对有顺序的数据,如文本、音视频、TS。这个和流的关系最大

    • 【文本处理任务】,静态方法的话,可以训练好一个RNN,持续预测后续词句。基于上游每层输出对下游网络影响不同的动机,可以改造成动态网络(很自然的想法就是DenseNet)
      • RNN中中间状态动态更新:例一,不重要的信息可以直接跳层;例二叫做粗略更新,一般会调整隐层的深度或者宽度;例三,高尺度/层的RNN模块判断使用哪些低尺度模型传来的中间状态
      • NLP类任务也可以选择跳层/提前中止,或者甚至跳过文本中的部分片段
    • 【视频流任务】,视频流按帧成为TS数据。一种挺无语的处理方式是直接把每一帧编码成所谓特征向量,再当成一般的输入
      • RNN类方法,和前面涉及RNN更新中间状态的方式基本一致
      • 关键帧选取方法,即不用RNN训练处理判断每一帧。可以直接采样或者attention机制去选择关键帧
  • 【训练优化策略】

    后面的基本上只看了别人的博客。显然,如果只是动态参数,那么一样的梯度下降就可以;难的是各种结构上的变化怎么弄,即discrete decision making怎么优化,见仁见智了