前言

近年来,随着大数据、机器学习、深度学习等技术的发展,以及物理硬件性能的提升,越来越多优秀的大数据人工智能项目落地,为社会带来巨大便利的同时也为从事该行业的技术人员带来了前所未有的机遇。越来越多的公司和个人开始关注并学习AI知识,各大厂商也在AI技术及人才培养上投入巨资,纷纷抢占战略高地。笔者所在的公司也成立了AI研究室,从事算法及大数据相关的研究及落地工作,在此过程中会涉及很多开源的框架及技术,由于笔者有教育行业的从业经历,所以想通过出版图书的途径帮助更多的学生及普通的程序员学习AI技能。时势造英雄,希望更多的人可以把握当前的时势,蓄势待发,冲刺人生的高峰。

为了迎合各个层次读者的需求,笔者在编写过程中既兼顾内容的质量,也注重趣味性。鉴于此,笔者采用项目驱动的方式编写本书,部分章设有“实验室小试牛刀”环节,以项目实战的形式总结该章所学知识,并引出下一章的内容。“实验室小试牛刀”环节是实验性质的实战项目,兼顾趣味性,主要培养读者的动手能力。“加油站”部分回顾必要的数学知识,在学习新知识的同时,使读者可以夯实数学基础,为走得更轻松、更长远积蓄能量。

本书分为10章,内容循序渐进,由浅入深。

第1章首先介绍AI发展简史、主流的深度学习框架和框架的演变;其次介绍安装PyTorch环境及开发工具;再次介绍核心概念,包括PyTorch核心模块、自动微分等,在“实验室小试牛刀”环节,使用PyTorch进行科学计算和薪酬预测,读者可以由此了解PyTorch关于科学计算的知识及初探使用PyTorch构建算法模型;最后补充数学知识,为读者学习第2章的内容奠定基础。

第2章是机器学习基础章节,讲述机器学习的分类、常见概念,扫清读者学习途径上的认知障碍,帮助读者更好地理解机器学习与深度学习。本章还会引出机器学习和神经网络算法,使读者对算法发展史有清晰的认识,同时引出神经网络的概念。神经网络的灵感来自人类对大脑神经的生物学发现,通过模拟人类大脑的工作原理,构建出能拟合任意复杂度的深度神经网络。神经网络的训练需要借助BP算法,该算法会涉及微分、导数、偏导数等数学知识,读者可以在“加油站之高等数学知识回顾”部分再次进行复习和巩固。

第3章详细介绍PyTorch中的Tensor及科学计算算子,通过详细地介绍每个算子的用法及功能,读者可以掌握使用PyTorch的法宝。本章还介绍了PyTorch中的变量Variable,Variable是Tensor的包装类型,为PyTorch进行深度学习的训练提供支持。PyTorch中的算子和Python科学计算库NumPy提供的算子非常相似,实际上,PyTorch中的Tensor和NumPy能够进行高效互转,在本章的“实验室小试牛刀之轻松搞定图片分类”环节,读者可以使用PyTorch构建神经网络,探索PyTorch构建神经网络的简捷性及调试的方便性。

第4章主要介绍激活函数、损失函数、优化器及数据加载等相关知识点。PyTorch可以提供高层次的API封装,在torch.optim、torch.nn等模块中,提供了更加简捷的方法调用。torch.optim模块封装了常用的优化算法,如随机梯度下降(Stochastic Gradient Descent,SGD)算法、Momentum梯度下降算法等。torch.nn模块提供了常见的神经网络层,如线性层、一维卷积、二维卷积、长短期记忆(Long Short-Term Memory,LSTM)和门控循环单元(Gated Recurrent Unit,GRU)等。所有网络的学习,最终的输出结果都要使用一个度量的函数测评效果,这个函数通常称为损失函数。通过损失函数及BP算法,可以将损失进行逆向传播,每步传播都会计算各个特征权重的偏导数,进而更新特征权重,达到训练的目的。本章会详细讲解各种损失函数及其应用场景,相信读者会有所领悟。所有模型在构建完成后,都将传入数据进行训练,而数据的加载有时是很麻烦的,PyTorch提供了DataLoader等接口,这些接口实现了生成器模式,因此适用于大数据量的加载,不会出现内存溢出的问题。在“实验室小试牛刀”环节,会探索第一个深度神经网络VGG-16,并且使用PyTorch计算机视觉库简化网络的构建过程,在构建过程中会冻结VGG-16的网络层权重,更改VGG-16最后的输出层,使其适用于特定的应用场景,而这种技术被称为迁移学习。通过实践迁移学习,读者可以掌握复用预训练模型并用于特定应用场景的核心技巧。

第5章主要讲计算机视觉,本章介绍典型的计算机视觉模型,包括DCGAN、ResNet、Inception、DenseNet等;除此之外,LSTM和GRU也是深度神经网络序列模型中经常出现的结构。本章通过TensorBoard和Visdom可视化训练过程,帮助读者理解网络内部正在发生什么。

第6章安排的内容和自然语言处理相关。自然语言处理是人工智能最后需要解决的难题,被誉为“人工智能皇冠上的明珠”。自然语言处理的内容包括语义理解、文本分类、分词、词性标注、语义消歧等。每个问题都有亟须解决的难题,如中文分词、自然语言理解等。虽然自然语言领域出现了很多优秀的算法和思路,如BERT、LSTM、TextRank等,但是效果仍然欠佳,因此这是一个需要持续被关注的研究领域。本书关注的是如何带领读者使用PyTorch进行自然语言处理,使用PyTorch已经实现的算法和工具解决业务中遇到的问题。本章不仅简单介绍了自然语言的发展及现在所处的阶段,还介绍了TextRank算法、HMM在分词等方面的应用,并使用HMM实现中文分词算法。在“实验室小试牛刀之对话机器人”环节,我们会创建一个对话机器人,希望读者可以用自己的语料训练出一个有趣的对话机器人。

第7章是自然语言处理技术的扩展章节,主要介绍当前非常流行的自然语言预训练模型,包括词嵌入、ELMo、GPT、BERT等。通过对比各个模型框架的演变,读者可以了解自然语言处理技术的发展方向,为深入研究自然语言处理奠定基础。

第8章主要介绍AllenNLP。AllenNLP是构建在PyTorch之上的高层架构,提供了常见且丰富的自然语言处理功能。从事自然语言处理工作的读者都应该关注AllenNLP,因为其提供的接口方便、灵活。

第9章主要介绍FastAI高层深度学习框架,用10行代码解决深度学习难题,其底层基于PyTorch实现。本章在FastAI框架中使用BERT中文预训练模型完成中文文本分类任务,相信读者会喜欢其编码。

第10章介绍PyTorch Big Graph嵌入,带领读者领略图挖掘的前沿思想。“知识图谱”的概念悄悄地走进了人们的视野,各大公司和实验室都在使用深度学习技术构建各个领域的知识图谱,而基于知识图谱的知识挖掘无疑成了下一个研究的热点。

本书涉及的内容不仅包括计算机视觉、自然语言处理等深度学习应用的前沿技术,还涉及基本数学公式的推导,使读者不仅会用,还知其原理,知其然也知其所以然。本书内容丰富,涉及面广,难免有疏忽遗漏之处,望广大读者批评指正。

另外,本书涉及的公式,若不做特殊说明,则对数log的底数默认为自然常数e。