前言
为什么要写这本书
近十年来,以深度学习为代表的机器学习技术在图像处理、语音识别、自然语言处理等领域取得了非常多的突破,其背后的核心技术离不开模型的结构设计,尤其是深度卷积神经网络与Transformer等模型的发展。
一般来说,随着模型参数量的增加,其表达能力也会增强,经典的CNN模型VGGNet有130MB以上的参数量,而大语言模型如GPT3更是有1750亿个参数。尽管我们需要大型模型去完成复杂的任务,但也需要更小的模型去完成计算资源、存储资源非常有限,但对时效性要求非常高的任务,比如在各类嵌入式设备上进行实时视频目标检测与抠图,就需要模型能在手机GPU甚至CPU上以超过30fps的速度来运行,并且要满足场景的精度要求。因此,我们需要对模型进行压缩和优化,使其拥有更小的参数量和更快的运行速度。
笔者在2020年出版了《深度学习之模型设计:核心算法与案例实践》一书,通过理论与实践结合,首次介绍了数十年来主流卷积神经网络模型的设计思想,得到了业界的广泛关注。在当时,笔者其实已经规划好了深度学习模型使用方向的系列图书,包含三本循序渐进的图书,它们对应在深度学习项目中使用模型的基本流程,具体如下。
第一步,我们需要针对目标任务选定一个合适的模型架构,然后训练出满足精度的模型,这就是模型设计;第二步,我们需要基于第一步训练好的模型,在不显著降低其精度的前提下,对模型的冗余参数进行精简,对高精度计算进行低精度近似,这就是模型压缩;第三步,将模型运用于实际的生产环境,即实现面向用户的产品,这就是模型部署。
本书是该系列图书的第二本,专门介绍针对模型进行精简的技术,包括紧凑模型设计、模型剪枝、模型量化、模型蒸馏、自动化模型设计等内容,这是模型能够在各类嵌入式平台使用的关键技术。
本书作者
本书的作者龙鹏,笔名言有三,毕业于中国科学院大学,先后就职于奇虎360人工智能研究院与陌陌科技深度学习实验室,拥有超过八年的深度学习领域从业经验、超过五年的一线企业与高校培训经验,创办了微信公众号“有三AI”和知识星球“有三AI”等知识生态,著有六本人工智能与深度学习领域的书籍。
本书聚焦于深度学习模型压缩与优化问题,在本书出版之前,笔者在所维护的微信公众号、知乎、知识星球账号,以及“有三AI”课程平台做了很多分享,本书可以作为这些分享的一个更加系统的总结。读者也可以持续关注笔者以上平台,获取更新的知识。
因受笔者水平和成书时间所限,本书难免存有疏漏和错误之处,敬请大家关注我的内容生态,欢迎沟通并指正。
本书特色
1.循序渐进
本书是深度学习模型使用方向系列图书中的第二本,内容承前启后。本书在该系列图书第一本书《深度学习之模型设计:核心算法与案例实践》的基础上介绍更深入的模型设计与压缩方法。本书的第4章介绍了轻量级模型设计方法,第8章介绍了自动化模型设计方法,它们都可以看作对《深度学习之模型设计:核心算法与案例实践》内容的补充。而模型剪枝、模型量化、模型蒸馏,则是模型压缩与优化最核心的技术。除此之外,本书还补充了模型可视化的内容,以便读者增加对模型的理解。本书第9章简单介绍了一些常用的开源模型优化和部署工具,这也是为下一本书,即模型部署相关的书籍提前做铺垫。
2.理论与实践紧密结合
本书完整剖析了深度学习模型压缩与优化的核心技术,对应章节不停留于理论的阐述,而是增加了经典的实战案例,让读者从夯实理论到完成实战一气呵成。跟随本书进行学习,读者可以快速掌握卷积神经网络的模型压缩与优化技术,并进一步推广到其他模型。
3.内容全面
本书共9章,其中,第2章和第3章介绍了模型性能评估和理解相关的内容,是本书的前置基础知识;第4~8章,分主题介绍了当前工业界在实际项目落地中使用的模型压缩与优化技术,本书已经囊括了该技术相关的大部分知识;第9章介绍了一些常用的开源模型优化和部署工具,使读者可以快速掌握模型部署的流程。虽然本书的主题是深度学习模型压缩与优化,但实际上囊括了从设计到优化,再到部署的内容,这也使本书内容更加系统与全面。
本书内容及体系结构
第1章 引言
本章对人工智能技术发展的要素,即数据、模型、框架、硬件进行了介绍。充足的数据配合优秀的模型才能学习到复杂的知识,框架和硬件则是完成模型学习不可或缺的软硬件设施。希望读者能够在阅读本章内容后,充分认识到人工智能本质上是一门综合性的工程技术。
第2章 模型性能评估
本章介绍了常用的模型性能评估指标,包括参数量、计算量、内存访问代价、计算速度等,最后介绍了工业界的一个与模型压缩相关的竞赛。
第3章 模型可视化
本章系统性地介绍了模型可视化的内容,包括模型结构可视化、模型参数与特征可视化、输入区域重要性可视化及输入激活模式可视化,通过掌握相关原理和三个典型的实践案例,我们可以更深入地理解模型的性能表现及参数细节,从而为设计和改进模型结构提供指导思想。
第4章 轻量级模型设计
本章系统地介绍了当下轻量级模型设计的方法,包括卷积核的使用和设计、卷积拆分与分组、特征与参数重用设计、动态自适应模型设计、卷积乘法操作优化和设计、重参数化技巧、新颖算子设计、低秩稀疏化设计。在一开始就使用轻量级的基础模型架构,可以大大减少后续对其进一步进行模型压缩与优化的工作量,因此这也是本书中非常核心的内容。
第5章 模型剪枝
本章介绍了模型剪枝的主要算法理论与实践,主要包括模型稀疏学习、非结构化剪枝与结构化剪枝等算法,最后通过案例实践让读者掌握模型结构化剪枝中原始模型的训练与训练后的稀疏裁剪方法。
第6章 模型量化
本章介绍了模型量化的主要算法理论与实践,主要包括二值量化、对称与非对称的8bit量化、混合精度量化等,最后通过案例实践让读者掌握对称的8bit量化算法代码实现及基于NCNN框架的8bit模型量化流程。
第7章 迁移学习与知识蒸馏
本章介绍了迁移学习与知识蒸馏的主要算法理论与实践,主要包括基于优化目标驱动与特征匹配的知识蒸馏算法,最后通过案例实践让读者掌握经典的知识蒸馏框架的模型训练方法,并比较学生模型在蒸馏前后的性能变化。
第8章 自动化模型设计
本章介绍了自动化模型设计中的神经网络结构搜索技术,主要包括基于栅格搜索的神经网络结构搜索方法、基于强化学习的神经网络结构搜索方法、基于进化算法的神经网络结构搜索方法、可微分神经网络结构搜索方法。自动化模型设计是难度较高的工程技术,也是模型设计与压缩的最终发展形态。
第9章 模型优化与部署工具
本章介绍了当下工业界常用的开源模型优化和部署工具,主要包括TensorFlow、PaddlePaddle、PyTorch生态相关的模型优化工具,各类通用的移动端模型推理框架,以及ONNX标准与NVIDIA GPU推理框架TensorRT,并基于NCNN框架在嵌入式硬件上进行了部署实战。熟练掌握模型优化与部署工具,是深度学习算法工程师的必修课。本章内容可供读者作为入门参考,更加系统的模型部署的相关内容,将在本系列图书的下一本书中介绍。
本书读者对象
本书是一本专门介绍深度学习模型压缩与优化技术,尤其是针对深度卷积神经网络的图书,本书内容属于深度学习领域的高级内容,对读者的基础有一定的要求:
首先,必须熟悉深度学习理论知识,包括但不限于神经网络、卷积神经网络、计算机视觉基础等;
其次,要有深度学习模型设计基础,了解主流的卷积神经网络设计思想,最好掌握了本系列书籍的第一本《深度学习之模型设计》的内容;
最后,熟练运用Python等编程语言,掌握PyTorch等主流的深度学习框架。
本书适合以下读者:
• 学习深度学习相关技术的学生。
• 讲授深度学习模型设计、压缩与优化相关课程的教师、培训机构。
• 从事或即将从事深度学习相关工作的研究人员和工程师。
• 对深度学习模型的优化思想感兴趣,想系统了解和学习的各行业人员。
致谢
虽然笔者独立完成了本书的写作,但是在这个过程中也得到了一些帮助。
感谢电子工业出版社的米俊萍编辑的信任,联系我写作了本书,并在后续的编辑校稿中完成了巨大的工作量。
感谢“有三AI”公众号和“有三AI”知识星球的忠实读者们,是你们的阅读和付费支持让我有了继续前行的力量。
感谢本书中GitHub开源项目的贡献者,是你们无私的技术分享,让更多人因此受益匪浅,这是这个技术时代里最伟大的事情。感谢前赴后继提出了书中所列方法的研究人员,得益于你们的辛苦原创,才有了本书的内容。
感谢我的家人的宽容,因为事业,给你们的时间很少,希望以后会做得更好。
于长沙
2024年4月