最近,动态神经网络(Dynamic DNN)的相关工作挺多。动态神经网络,是指神经网络在推理的时候,计算链路不是固定的,而是根据输入的不同有不同的计算链路。举例来说,有些图片比较复杂,就多通过一些层;有些图片比较简单,可能几层就输出结果了。这个过程就像路由一样,根据输入数据的复杂程度自适应选择合适的计算链路。
2019年CondConv的工作CondConv: Conditionally Parameterized Convolutions for Efficient Inference是比较直接的,把卷积核表示成多个卷积核的线性组合,然后根据输入计算出权重系数,再一乘就挑选出了所需要的卷积核。思路类似于attention。类似的思路ICLR今年也有一篇文章REVISITING DYNAMIC CONVOLUTION VIA MATRIX DECOMPOSITION,把卷积核表示成一组基的线性和,然后把基分解成均值和残差的形式,对残差进一步做SVD分解。
动态神经网络现在的问题我觉得有2方面:1)一是存在训练难的问题,同时优化基以及系数,训练时应该会碰到不少问题,且选择什么激活函数来提取系数也是问题;2)二就是应用的困难,动态DNN的访存计算比是个要考虑的问题,存在较多的随机访问,性能估计难以上去。
单纯在各种任务上去设计动态网络,个人认为研究价值不大。如果真的要做,也要在理论上能有些结果,或者有配套的硬件去做。