目录
文章主旨:
利用pre-trained网络的block作为基础block和少量的task-specific的layer层,组成新的适合新任务的网络。新网络的特点是,适合target data的复杂度,保证精度。对新的网络进行组合分类损失和模型复杂度的惩罚loss,再进行剪枝组合形成最终的网络。
文章提出的NETTAILOR的train procedure,有以下三个特点。
1. 根据不同的任务,网络有不同的复杂度。
2. 最终网络的大部分参数还是微调网络参数,任务相关的特殊参数很少。
3. 新网络的accuracy跟pre-train的网络的acc是差不多的,但是网络小很多。
Introduction:
Fine-tuning的问题:
- 对于multi mask 问题,一个任务一个参数,那么整体的参数量将会线性增加,然而,大部分任务的低层和中层的特征是可以共享的。
- 在迁移之后,模型有个灾难性遗忘的问题。对于source task,模型性能下降较大。
解决这个遗忘问题的方法可以分为两类:
1在训练target的同时记住source的数据
- 防止source domain的相应在target上发生显著变化
- 保持一个关于之前task的记忆
- 防止重要特征的变化
- 防止重要的权重变化
2冻结原始网络,并加入新的使用target的layers
NETTAILOR和第二种方法相似。同样的是冻结预训练网络。同样的也和第一种方法一样用原始网络的激活值来引导目标数据的激活值。
还有其他一些应用和对比就不阐述了。
METHOD
为了解决微调的网络复杂度较大的问题,本文的方法主要是有以下两个改进点:
- 复用原始网络的block而不是复用整个网络。因此,新网络是可以增加或者移除部分block的。
- 新网络应该尽可能复用微调网络的参数,从而减少需要学习的参数的数量。
方法流程:
- 在目标数据集上微调预训练网络,也就是teacher网络。
- 定义一个student网络,通过对预训练网络扩增任务相关的低复杂度的代理层。
- 训练任务相关的参数,以此来模仿teacher网络的激活值,并引入复杂度约束。
- 修建对网络性能影响较小的layer。
- 重新微调剩余的任务相关的参数。
流程细节
1 扩增的学生网络
用于扩增的模块为:
Teacher网络的原始模块为Gl,代理模块为Al,此时的输出变为:
(1)
其中
- 权值参数为图中圆圈内的数值,意义是表明该条支路是否使能。
- 代理模块主要是为了减少复杂度,因此由max-pooling 和 1*1卷积组成。
- 权值的存在是为了让多个Al模块之间彼此竞争,减少冗余数据的传播。
4.文章中研究所有的代理模块参与到最终输出是没有必要的,所以由(1)修改为:
(2)
2 裁剪学生网络
上面的权重裁剪可以根据权值来裁剪,分别有以下三种情况:
- 自斥:
- 输入排斥:
- 输出排斥:
3 loss函数
- 学习teacher:
L2loss:
- 复杂度:(没有研究清楚)
- 分类损失:
- 总loss:
4 模型剪枝
- 根据阈值0.05来移除代理网络。根据原始block的权值排序,来移除不重要的模块。
- 利用loss中y1置为0来重新微调剩余的网络。