动态神经网络综述阅读笔记
动态神经网络综述阅读笔记
简单记录了一下,没有什么调理O.O
Introduction
神经网络结构设计发展:
2012-2015:快速发展
2015-2017:发展成熟
2017-~:繁荣发展。多样化(轻量化、自动搜索、动态神经网络...)
一个问题:模型在精度和效率上的平衡?
模型的性能往往和深度以及宽度有关。
静态神经网络在推理方面的局限性:在现实世界中,简单的样本往往占大多数,但如果想要比较高的准确率则需要使用复杂度高的网络才能识别不那么典型的样本。因此,传统网络的一个局限之处就在于,人们设计了越来越高效、表达能力越来越强的卷积运算方式,但这些模型有静态的推理模式,处理不同样本消耗的是相同的计算量。小网络精度无法保证,大网络处理简单样本会产生冗余计算。
一个简单的思路是,选用不同复杂度的网络,动态地激活不同的网络模块(不同网络层、同层的不同channel)。
动态神经网络:自适应性,能够根据样本调节自身的结构从而提升整体运算效率。
从网络参数的角度来看,传统网络训练完成后网络的参数是固定不变的,处理不同样本使用相同的卷积核,这也会对模型的表达能力有限制作用。与之对应的,有一部分动态网络就可以针对不同样本自适应地调节自身的参数,从而更加灵活,让模型有更强的表达能力。
动态神经网络的优势:
Efficiency, Representation Power, Adaptiveness(不同计算平台不同状态,比如手机不同电量时能够调整计算复杂度), Compatibility(和最先进的技术兼容), Generality(通用性), Interpretabilty(可解释性,人脑也会根据任务激活不同区域的神经元)。
Instance-wise Dynamic Networks(样本自适应动态神经网络)
对不同的输入样本,网络能自适应地调节其结构和参数。
动态结构&动态参数
动态结构:动态深度、动态宽度和动态路由。Early Exiting:早退机制。对于难的样本走完全程,简单的样本在中间就退出。把小模型和大模型串联,当前面的小模型能以一个较高的置信度对样本进行识别的时候就不需要后面的大模型了。这样的问题在于模型都是单独设计的,小网络学习到的参数无法被大网络复用。另一种设计思路是在一个主干网络添加中间出口。但这样也不是最优的,如果添加中间出口会影响分类的性能,因为一般的网络都会在不同的阶段对特征进行下采样,而在最后得到的信息才含有比较多的语义信息,网络的浅层都是在高分辨率的图像上学到的信息都是不利于分类的。一种比较好的解决方法是把链式架构变为多尺度架构,通过置信度来判断是否要早退。动态深度的另一种实现方式是跳层,跳过一些中间层减小开销。跳通道也是和跳层一样给予GatingFunction,和网络剪枝(永久去掉某些卷积核)某些类似,但省略哪些通道和输入的feature有关,有更强的自适应性和更好的表达能力。Multi-Stage也是控制网络宽度(通道数)的比较好的做法,先用比较少的通道数forward一遍,如果不能达到要求的置信度就不断增加通道数,直到激活整个网络。跳分枝,对于多个并行的网络分支进行选择性的执行,基于MoE(Mixture of Experts)。
动态参数:能够在推理阶段不改变网络的计算图,也不是为了节约计算量设计的,而是想将参数动态化来提升网络的表达能力。分为参数调节、参数预测和动态特征。参数调节:根据输入生成一组调节量,对原来的参数进行调节得到动态的参数。参数预测:直接根据输入生成一组动态的参数进行运算。卷积核的动态自适应的ensemble和soft MoE是等效的。\((\Sigma_{n}a_nW_n)\times x=\Sigma_{n}a_n(W_n\times x)\)。可形变卷积:动态调节卷积核的形状以获得不同的感受野。
总结:样本自适应动态网络可以通过输入的样本来调节结构或者参数。
Spatial-wise Dynamic Networks(空间自适应动态神经网络)
三类:像素级、区域级以及分辨率级。
像素级:生成MASK预测哪些位置是否重要,之后对于选择的区域进行稀疏卷积。区域级:不是对每个像素决定算还是不算,而是直接裁剪出原图中比较重要的小patch,输入网络进行计算。分辨率自适应:不是所有样本都需要比较高的分辨率来进行表示,比较小的子网络处理低分辨率特征,大一点的子网络处理高分辨率的特征,同样也有早退机制。
Temporal-wise Dynamic Networks(时间自适应动态神经网络)
处理时序序列数据,也可以对不同时间位置进行自适应计算。对于不那么重要的时刻的输入调用比较低的计算量。先对关键帧进行采样,再进行处理。
推理&训练
决策:基于分类器softmax输出的置信度,不需要额外计算,但是需要人为设置阈值。Policy Network:决定哪些层可以跳过哪些层需要执行,Policy Network结构需要根据主干网络设计。GatingFunction需要更长的训练过程。
训练方法:训练目标和优化方法。多出口网络的训练目标:后续使用了知识蒸馏等。对于跳层或者跳channel:需要动态调用网络中的不同模块