延续深度学习网络精简设计的主题,我们必须在正确率不打折的情况下,设计出兼具低运算复杂度、低耗电、低参数量的智能算法。目前的设计原则是将「冗余」的运算予以精简。这些庞大运算以及冗余由何而来,可以参考前文。本文中介绍剩下的两种精简设计策略。
网络知识蒸馏(knowledge distillation),是将已经训练好的神经网络推理能力转移到某个全新设计的网络,避免掉耗时的重新训练过程,又有人称为Teacher Student Learning,全新待训练的网络称为「学生网络」。训练原理是规范学生网络在某些层级的网络推理输出(能力)与既有的(老师)网络相同。
采用大量数据、长时间训练成一个效能强大的网络之后,因为应用情境的限制,时常必须局限网络的深度、运算数量等,就可以利用这样的方式转移既有的运算能力,达到精简的目的。目前有一些云运算的公司使用这种方式来精简网络,甚至因为资源配置的关系,刻意优化网络来使用CPU运算。
这有额外工程上的好处:加快各种版本的网络设计。比如说已经存在了一个参数庞大以及正确率高的网络,但是因为产品线的关系,必须时常将智能应用实现在多个不同运算平台上。利用这种方式即可将既有网络性能,移转到新的(可能运算能力较低的)神经网络,经验上可以大大避免重新训练的漫长时间,而加快产品部署。
网络模型剪枝(network pruning)是将网络中数值趋近零的网络连结予以剪除,因其对推理的结果影响不大。此方式可行的原因在于,经过观察,相当部分的网络参数接近零,意谓这些连结对于网络输入以及输出的影响性很小,于是直接移除。一般的作法是将训练好的网络依次剪除少部分,然后再进行fine tuning(少量训练),将推理的能力分散到剩下的神经连结中。这样的程序可以持续好几个轮回,直到符合精简条件。
这作法是非常多运算平台使用的网络精简方式,效果也相当显着。主要的限制是,系统或是硬件架构必须支持稀疏矩阵运算,因为剪除之后网络数值结构不再为稠密矩阵,必须采用稀疏矩阵运算才能发挥功效。另外网络剪枝也时常会搭配参数简化,例如将网络由浮点运算置换为整数运算,额外降低参数精度以及加速。
这系列文章讨论的四种网络精简原则可以彼此混用。而且这些为设计深度学习的基底网络,可以再加上其他网络元件满足各种应用例如数值预测、人脸识别、物件侦测、影像识别等。
另一个角度,精简设计也可以视为查找适合的神经网络设计。所以近来也有人使用autoML的方式(参考前文)来优化精简运算,几个应用情境看起来也颇有成效。对于克服边缘计算的严苛条件,似乎指日可待。
徐宏民(Winston Hsu)现任富智捷(MobileDrive)技术长暨副总经理以及台大信息工程学系教授。哥伦比亚大学电机博士,专精于机器学习、大规模影像视讯查找与识别。为讯连科技研发团队创始成员,慧景科技(thingnario)共同创始人,NVIDIA AI Lab计划主持人;曾任IBM华生研究中心客座研究员、美国微软研究院客座研究员。习惯从学术及产业界的角度检验技术发展的机会;十余年产学合作及新创经验。曾获2018 IBM Research Pat Goldberg Memorial Best Paper Award 、2018伪装人脸识别冠军、杰出信息人才奖、吴大猷先生纪念奖等国内外研究奖项。