版权信息 书名:百面深度学习 算法工程师带你去面试
ISBN:978-7-115-53097-4
本书由人民邮电出版社发行数字版。版权所有,侵权必究。
您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。
我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。
如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。
版权 主 编 诸葛越 江云胜
著 葫芦娃
责任编辑 俞 彬
人民邮电出版社出版发行 北京市丰台区成寿寺路11号
邮编 100164 电子邮件 315@ptpress.com.cn
网址 http://www.ptpress.com.cn
读者服务热线: (010)81055410
反盗版热线: (010)81055315
内容提要 深度学习是目前学术界和工业界都非常火热的话题,在许多行业有着成功应用。本书由Hulu的近30位算法研究员和算法工程师共同编写完成,专门针对深度学习领域,是《百面机器学习:算法工程师带你去面试》的延伸。全书内容大致分为两部分,第一部分介绍经典的深度学习算法和模型,包括卷积神经网络、循环神经网络、图神经网络、生成模型、生成式对抗网络、强化学习、元学习、自动化机器学习等;第二部分介绍深度学习在一些领域的应用,包括计算机视觉、自然语言处理、推荐系统、计算广告、视频处理、计算机听觉、自动驾驶等。
本书仍然采用知识点问答的形式来组织内容,每个问题都给出了难度级和相关知识点,以督促读者进行自我检查和主动思考。书中每个章节精心筛选了对应领域的不同方面、不同层次上的问题,相互搭配,展示深度学习的“百面”精彩,让不同读者都能找到合适的内容。
本书适合相关专业的在校学生检查和加强对所学知识点的掌握程度,求职者快速复习和补充相关的深度学习知识,以及算法工程师作为工具书随时参阅。此外,非相关专业但对人工智能或深度学习感兴趣的研究人员,也可以通过本书大致了解一些热门的人工智能应用、深度学习模型背后的核心算法及其思想。
前言 机器会思考吗?
这样一个简单的问题,可以引起无穷无尽的讨论,而且没有答案。什么叫思考呢?机器会答题算不算思考?能够答题且正确率超过人类算不算思考?能够下棋打败人类算不算思考?能够自己学习进步算不算思考?能够骗过人算不算思考?能够发明新东西算不算思考?思考要带有情绪吗?做出错误的决定,算思考吗?等一下,如果人做了错误的决定,那么他思考了吗?如果机器和人做了同样错误的决定,他们都算思考后的决定吗?
当我们在这些问题里面越陷越深,越来越找不到答案的时候,也许你终于认识到人的大脑实在是太强大了。人的大脑多个层次之间,直觉、感性、理性同时发挥作用又有机结合。人的大脑的学习能力不是规则可以确定的,不是程序所能编写的,也不是训练可以达到的。常常,连我们自己对自己的思考过程都不是特别了解。
这时候你可能就有另一个想法:也许我们还没有办法完全理解自己的大脑和思考的过程,但是我们能不能构造一些机器,让它们来模拟人的大脑的思考和处理事情的过程呢?如果我们真的能构造成这样的机器,这个机器又能够像大脑一样工作,那么即使我们不完全理解这些机器,它们也可能像人的大脑一样思考吗?
这就是深度学习后面的基础技术——神经网络的最初想法。如果我们想象人的大脑是一些神经元搭起来的,然后互相之间通信,最后得出一个思考和判断的结果,我们能不能也用机器模拟这些神经元,让它们互相通信,最后经过训练做出和人一样的好的思考和判断呢?
大家知道,机器学习(Machine Learning)是人工智能(Artificial Intelligence,AI)的一个子领域,而深度学习(Deep Learning)是机器学习的一个子领域,它基于人工神经网络(Artificial Neural Networks),灵感来源于对人的大脑结构和功能的研究。虽然人工神经网络在二十世纪四五十年代就被发明了,但是因为计算复杂度的限制和一些理论或算法的不足,导致它只是在学术界被当作机器学习的方法之一来研究。近年来,随着计算能力的加强,深度学习到达了可以被实际应用的标准线,它的威力被释放出来,在这次人工智能的浪潮中起到了推波助澜的作用。
深度学习有着传统机器学习和传统计算机程序没有的优点,这个优点就是,它能够处理人们并不完全懂得的问题,而且更擅长处理含噪声或不完全的数据。不能精确定义、有噪声和数据不完全,实际生活中的场景经常是这样的。所以说,深度学习更加贴近生活。人工神经网络的模式匹配和学习能力使它能够解决许多难以或不可能通过标准计算和统计方法解决的问题。
2018年夏天,我们15个为Hulu 公司工作的“葫芦娃”做了一个尝试,出版了一本关于机器学习的书,叫《百面机器学习:算法工程师带你去面试》。这本书获得了意想不到的成功,读者反馈该书非常实用,是机器学习领域非常好的原创入门书。让我们感到欣慰的是,许多学生留言说他们读了这本书,从中学到了不少机器学习的基本信息,大家把它看作一本特别好的机器学习入门书。而我们最喜欢的反馈是,这是一本真正做机器学习工作的人写的、对大家很有实际帮助的书。
部分读者评论如下。
1.知识点讲解得很到位,而且很多是从实际问题出发,很接地气,业务实践者深度理解知识点的利器。
2.技术面必备参考书,问题涉及面广,细节考察到位,难度把握得当,非常满意,五星好评。
3.完全超出了预想,书写得比想象的好多了,一看作者就是做了多年机器学习相关工作的“老油条”了,并且有异于市面上千篇一律的经典书籍的注重公式推导和概念阐述,这本书有些是实践应用多年才会有的思考,里面的很多问题也很有意思,第一次发现原来可以通过这个角度重新思考。总之是很棒的一本书,正在阅读中,期待有更多的收获!
……
在《百面机器学习:算法工程师带你去面试》的成功鼓励下,在读者和人民邮电出版社编辑的支持下,我们更加有了信心,今年再接再厉出版《百面深度学习:算法工程师带你去面试》。我们阅读了读者的反馈,希望能够保持上一本书的优点,比如说它同样也是很实际的,都是在实际工作中会遇到的问题;比如说它不是面面俱到,但是能够给大家带来比较好的思考和帮助。同时,我们也对可能的方面做了一些改进。
在组织一群人写书方面,我们也有了较多的经验。同时,我们得到了非常多的帮助,这次参加写作的同学有近30人。本书的结构一开始就设计得比较好,利用Git等协作工具,我们能够像做工程项目一样进行多人合作,同步写作,交叉审核,这使我们能够在比较合适的时间完成这本书,并且保证质量。
因为深度学习这个方向相对比较崭新,新的技术还在不断出现,所以我们的一些问题和答案也需要读比较多的新资料,而不是很现成的。在写书的这几个月中,我们也不断地更新内容以跟上学术界的新发展。我们希望这本书给大家启发,一起探讨,而不完全是灌输给大家知识。市面上除了几部经典的教科书类的作品,关于深度学习的实践类图书并不多,我们希望能够补上这个空缺。
人工智能和深度学习算法还在日新月异地发展中,这本书也会不断更新,推出新版本。希望得到读者朋友们的悉心指正,让我们一起跟上这个技术领域的进步步伐。
诸葛越,江云胜
2020年5月
问题索引
问题
页码
难度级
笔记
第一部分 算法和模型
第1章 卷积神经网络
简述卷积的基本操作,并分析其与全连接层的区别。
004
★☆☆☆☆
在卷积神经网络中,如何计算各层的感受野大小?
007
★★☆☆☆
卷积层的输出尺寸、参数量和计算量。
008
★★☆☆☆
简述分组卷积及其应用场景。
011
★★☆☆☆
简述空洞卷积的设计思路。
015
★★☆☆☆
简述转置卷积的主要思想以及应用场景。
012
★★★☆☆
可变形卷积旨在解决哪类问题?
016
★★★☆☆
批归一化是为了解决什么问题?它的参数有何意义?它在网络中一般放在什么位置?
028
★★★☆☆
用于分类任务的卷积神经网络的最后几层一般是什么层?在最近几年有什么变化?
031
★★★☆☆
简述卷积神经网络近年来在结构设计上的主要发展和变迁(从AlexNet到ResNet系列)。
020
★★★★☆
卷积神经网络中的瓶颈结构和沙漏结构提出的初衷是什么?可以应用于哪些问题?
032
★★★★☆
第2章 循环神经网络
Dropout为什么可以缓解过拟合问题?
048
★☆☆☆☆
描述循环神经网络的结构及参数更新方式。
042
★★☆☆☆
如何使用卷积神经网络对序列数据建模?
045
★★☆☆☆
循环神经网络为什么容易出现长期依赖问题?
051
★★☆☆☆
LSTM是如何实现长短期记忆功能的?
054
★★☆☆☆
在循环神经网络中如何使用Dropout?
049
★★★☆☆
如何用循环神经网络实现Seq2Seq映射?
059
★★★☆☆
Seq2Seq框架在编码-解码过程中是否存在信息丢失?有哪些解决方案?
061
★★★☆☆
GRU是如何用两个门控单元来控制时间序列的记忆及遗忘行为的?
057
★★★★☆
第3章 图神经网络
什么是图谱和图傅里叶变换?
069
★★☆☆☆
以GCN为例,简述基于频谱域的图神经网络的发展。
071
★★★☆☆
以GAT、GraphSAGE为例,简述基于空间域的图神经网络的主要思想。
072
★★★☆☆
简述PinSage的模型设计和实现细节。
074
★★★☆☆
基于图神经网络的推理框架有何优势?
079
★★★★☆
简述图神经网络的推理机制在其他领域中的应用。
080
★★★★★
第4章 生成模型
简单介绍RBM的训练过程。如何扩展普通的RBM以对图像数据进行建模?
088
★★☆☆☆
简述VAE的基本思想,以及它是如何用变分推断方法进行训练的?
093
★★☆☆☆
什么是最大均值差异?它是如何应用到生成式矩匹配网络中的?
104
★★☆☆☆
DBN与DBM有什么区别?
090
★★★☆☆
VAE如何控制生成图像的类别?
096
★★★☆☆
如何修改VAE的损失函数,使得隐藏层的编码是相互解耦的?
097
★★★☆☆
自回归方法如何应用在生成模型上?
106
★★★☆☆
原始VAE存在哪些问题?有哪些改进方式?
099
★★★★☆
如何将VAE与GAN进行结合?
102
★★★★☆
第5章 生成式对抗网络
简述IS和FID的原理。
130
★☆☆☆☆
有哪些问题是属于图像到图像翻译的范畴的?GAN是如何应用在其中的?
136
★★☆☆☆
简述AE、VAE、GAN的联系与区别。
114
★★★☆☆
简单介绍GAN模型结构的演进。
127
★★★☆☆
列举一些近几年针对GAN的训练过程或训练技巧的改进。
128
★★★☆☆
GAN用于生成高质量、高分辨率图像时会有哪些难点?简述从SNGAN、SAGAN到BigGAN的发展过程。
132
★★★☆☆
简述CycleGAN的原理。
138
★★★☆☆
简单介绍GAN目标函数的演进。
123
★★★★☆
GAN为什么适用于半监督学习?生成数据在半监督学习中起到了什么作用?
140
★★★★☆
原始GAN在理论上存在哪些问题?
118
★★★★★
原始GAN在实际应用中存在哪些问题?
121
★★★★★
第6章 强化学习
什么是强化学习?如何用马尔可夫决策过程来描述强化学习?
148
★☆☆☆☆
举例说明时序差分强化学习和蒙特卡洛强化学习的区别。
154
★☆☆☆☆
强化学习中的有模型学习和免模型学习有什么区别?
151
★★☆☆☆
基于策略迭代和基于价值迭代的强化学习方法有什么区别?
153
★★☆☆☆
什么是Q-learning?
155
★★☆☆☆
简述强化学习在人工智能领域的一些应用场景。
163
★★☆☆☆
什么是DQN?它与传统Q-learning有什么联系与区别?
160
★★★☆☆
简述Sarsa和Sarsa(λ)算法,并分析它们之间的联系与区别。
157
★★★★☆
第7章 元学习
元学习适合哪些学习场景?可解决什么样的学习问题?
173
★★☆☆☆
使用学习优化算法的方式处理元学习问题,与基于记忆的元学习模型有哪些区别?
196
★★☆☆☆
学习公共初始点的方法与预训练的方法有什么不同?
205
★★☆☆☆
元学习与有监督学习/强化学习具体有哪些区别?
174
★★★☆☆
给定一个传统的多分类数据集,如何构造一份适于元学习的K次N分类数据集?
181
★★★☆☆
如何用最近邻方法将一个普通的神经网络训练过程改造为元学习过程?
184
★★★☆☆
元学习中非参数方法相比参数方法有什么优点?
187
★★★☆☆
带读/写操作的记忆模块(如神经图灵机)在元学习中可以起到什么样的作用?
191
★★★☆☆
基于初始点的元学习方法中的两次反向传播有什么不同?
206
★★★☆☆
试概括并列举当前元学习方法的主要思路。它们大致可以分为哪几类?
177
★★★★☆
如何用微调训练的方法将一个普通的神经网络训练过程改造为元学习过程?
186
★★★★☆
如何基于LSTM设计一个可学习的优化器?
197
★★★★☆
基于初始点的元学习模型,用在强化学习中时与分类或回归任务有何不同?
206
★★★★☆
从理论上简要分析一下元学习可以帮助少次学习的原因。
175
★★★★★
如何用度量学习和注意力机制来改造基于最近邻的元学习方法?
188
★★★★★
如何构造基于神经图灵机和循环神经网络的元学习模型?
192
★★★★★
如何设计基于LSTM优化器的元学习的目标函数和训练过程?
199
★★★★★
上述LSTM优化器如何克服参数规模过大的问题?
200
★★★★★
简单描述基于初始点的元学习方法。
203
★★★★★
第8章 自动化机器学习
自动化机器学习要解决什么问题?有哪些主要的研究方向?
212
★☆☆☆☆
简述神经网络架构搜索的应用场景和大致工作流程。
221
★☆☆☆☆
简单介绍神经网络架构搜索中有哪些主要的研究方向。
222
★★☆☆☆
模型和超参数有哪些自动化调优方法?它们各自有什么特点?
213
★★★☆☆
贝叶斯优化中的获得函数是什么?起到什么作用?请介绍常用的获得函数。
218
★★★☆☆
什么是一次架构搜索?它有什么优势和劣势?
224
★★★☆☆
简述贝叶斯优化中用高斯过程回归计算目标函数后验分布的方法。高斯过程回归可以用于种类型或者层次型模型配置参数的优化吗?
216
★★★★☆
简述可微架构搜索的主要原理。
225
★★★★☆
第二部分 应用
第9章 计算机视觉
简述物体检测领域中的单步模型和两步模型的性能差异及其原因。
234
★★☆☆☆
有哪些措施可以增强模型对于小物体的检测效果?
240
★★☆☆☆
简述图像分割中经常用到的编码器-解码器网络结构的设计理念。列举出2~3个基于编码器-解码器结构的图像分割算法。
242
★★☆☆☆
简单介绍基于候选框和基于像素分割的文本检测算法,并分析它们的优劣。
248
★★☆☆☆
列举1~2个基于深度学习的端到端文本检测和识别算法。
249
★★☆☆☆
在2D人体姿态识别中,自底向上方法与自顶向下方法有什么区别?
258
★★☆☆☆
简单介绍两步模型R-CNN、SPPNet、Fast R-CNN、Faster R-CNN的发展过程。
237
★★★☆☆
简单介绍单步模型YOLO、YOLOv2、YOLO9000、YOLOv3的发展过程。
238
★★★☆☆
DeepLab系列模型中每一代的创新是什么?是为了解决什么问题?
243
★★★☆☆
图像标注任务的评测指标有哪些?简述它们各自的评测重点和存在的不足。
253
★★★☆☆
如何通过单幅图像进行3D人体姿态识别?
261
★★★☆☆
第10章 自然语言处理
神经机器翻译模型经历了哪些主要的结构变化?分别解决了哪些问题?
278
★☆☆☆☆
常见的词嵌入模型有哪些?它们有什么联系和区别?
272
★★☆☆☆
神经机器翻译如何解决未登录词的翻译问题?
280
★★☆☆☆
如何对文本中词的位置信息进行编码?
289
★★☆☆☆
语言模型的任务形式是什么?语言模型如何帮助提升其他自然语言处理任务的效果?
274
★★★☆☆
训练神经机器翻译模型时有哪些解决双语语料不足的方法?
281
★★★☆☆
在给文本段落编码时如何结合问题信息?这么做有什么好处?
288
★★★☆☆
如何使用卷积神经网络和循环神经网络解决问答系统中的长距离语境依赖问题?Transformer相比以上方法有何改进?
284
★★★★☆
对话系统中哪些问题可以使用强化学习来解决?
292
★★★★★
第11章 推荐系统
一个典型的推荐系统通常包括哪些部分?每个部分的作用是什么?有哪些常用算法?
304
★★☆☆☆
推荐系统中为什么要有召回?在召回和排序中使用的深度学习算法有什么异同 ?
306
★★☆☆☆
如何从神经网络的角度理解矩阵分解算法?
308
★★☆☆☆
最近邻问题在推荐系统中的应用场景是什么?具体算法有哪些?
317
★★☆☆☆
评价点击率预估模型时为什么选择AUC作为评价指标?
320
★★☆☆☆
如何使用深度学习方法设计一个根据用户行为数据计算物品相似度的模型?
310
★★★☆☆
如何用深度学习的方法设计一个基于会话的推荐系统?
314
★★★☆☆
评价点击率预估模型时,线下AUC的提高一定可以保证线上点击率的提高吗?
322
★★★☆☆
二阶因子分解机中稀疏特征的嵌入向量的内积是否可以表达任意的特征交叉系数?引入深度神经网络的因子分解机是否提高了因子分解机的表达能力?
315
★★★★☆
第12章 计算广告
在实时竞价场景中,制定广告主的出价策略是一个什么问题?
342
★☆☆☆☆
简述CTR预估中的因子分解机模型(如FM、FFM、DeepFM等)。
328
★★☆☆☆
如何对CTR预估问题中用户兴趣的多样性进行建模?
332
★★★☆☆
多臂老虎机算法是如何解决CTR预估中的冷启动问题的?
334
★★★☆☆
设计一个深度强化学习模型来完成竞价策略。
345
★★★☆☆
简述一个可以提高搜索广告召回效果的深度学习模型。
339
★★★★☆
设计一个基于强化学习的算法来解决广告主的竞价策略问题。
343
★★★★☆
第13章 视频处理
图像质量评价方法有哪些分类方式?列举一个常见的图像质量评价指标。
360
★☆☆☆☆
设计一个深度学习网络来实现帧内预测。
351
★★☆☆☆
如何利用深度学习良好的图像特征提取能力来更好地解决NR-IQA问题?
362
★★☆☆☆
超分辨率重建方法可以分为哪几类?其评价指标是什么?
364
★★☆☆☆
如何使用深度学习训练一个基本的图像超分辨率重建模型?
368
★★☆☆☆
设计一个深度学习网络来实现环路滤波模块。
353
★★★☆☆
如何在较高的监控视频压缩比的情况下,提升人脸验证的准确率?
356
★★★☆☆
在基于深度学习的超分辨率重建方法中,怎样提高模型的重建速度和重建效果?
370
★★★☆☆
如何用深度学习模型预测网络中某一节点在未来一段时间内的带宽情况?
378
★★★☆☆
怎样将图像的超分辨率重建方法移植到视频的超分辨率重建任务中?
374
★★★★☆
如何利用深度学习完成自适应码率控制?
382
★★★★★
第14章 计算机听觉
音频事件识别领域常用的数据集有哪些?
400
★☆☆☆☆
简述音频信号特征提取中经常用到的梅尔频率倒谱系数的计算过程。
392
★★☆☆☆
简单介绍一些常见的音频事件识别算法。
401
★★☆☆☆
分别介绍一下传统的语音识别算法和当前主流的语音识别算法。
396
★★★☆☆
第15章 自动驾驶
一个自动驾驶系统在算法层面上可以分为哪几个模块?
406
★☆☆☆☆
如何设计一个基于深度神经网络的端到端自动驾驶模型?
408
★★☆☆☆
如何将强化学习用于自动驾驶的决策系统?
411
★★★☆☆
第一部分 算法和模型
第1章 卷积神经网络
第2章 循环神经网络
第3章 图神经网络
第4章 生成模型
第5章 生成式对抗网络
第6章 强化学习
第7章 元学习
第8章 自动化机器学习
第1章 卷积神经网络 如何让机器学会看这个世界?生物的视觉认知过程给了我们诸多启示。Hubel和Wiesel在1962年的研究[1] 揭示了生物通过多层视细胞(如外侧膝状体核,Lateral Geniculate Nucleus)和视神经对视觉刺激进行逐层处理、从而理解复杂的视觉特征并形成高层语义认知的机制,两位也由此获得了1981年的诺贝尔生物学和医学奖。这项研究极富启发性,8年后(1989年),卷积神经网络(Convolutional Neural Network,CNN)的雏形首次被Yann LeCun提出。直至今日,卷积神经网络作为计算机视觉中最基本、最重要的模型之一,已堪堪走过了30年。一般人或许不知道它的来历,也不知道它在1998年LeNet-5网络提出之后经历过怎样的低潮,但会始终记得2012年AlexNet在ILSVRC (ImageNet Large Scale Visual Recognition Challenge,大规模视觉识别竞赛)上一举夺魁这样的里程碑事件,以及随后多年深度学习和人工智能的爆发式发展。自2012年的崭露头角到现在的广泛应用,卷积神经网络的基本组件和模型结构经历了数个阶段的发展。本章将首先回顾卷积的基础操作,然后介绍几种卷积的变种,最后梳理一下近些年卷积神经网络在整体结构和基础模块上的发展,以帮助读者对卷积和卷积神经网络有一个清晰的认识。
01 卷积基础知识 场景描述 作为卷积神经网络的最基本组件,卷积操作的具体细节和相关性质是面试中经常被问到的问题。本节整理了几个较为常见的关于卷积的基础知识点,帮助读者回顾卷积操作的一些具体细节。
知识点 卷积操作、卷积核、感受野(Receptive Field)、特征图(feature map)、卷积神经网络
问题1 简述卷积的基本操作,并分析其与全连接层的区别。 难度:★☆☆☆☆
分析与解答 在卷积神经网络出现之前,最常见的神经网络被称为多层感知机(Multi-Layer Perceptron,MLP)。这种神经网络相邻层的节点是全连接的,也就是输出层的每个节点会与输入层的所有节点连接,如图1.1(a)所示。与全连接网络不同,卷积神经网络主要是由卷积层构成的,它具有局部连接 和权值共享 等特性,如图1.1(b)所示。
图1.1 卷积层和全连接层的对比
具体来说,卷积层是通过特定数目的卷积核(又称滤波器)对输入的多通道(channel)特征图进行扫描和运算,从而得到多个拥有更高层语义信息的输出特征图(通道数目等于卷积核个数)。图1.2形象地描绘了卷积操作的基本过程:下方的绿色方格为输入特征图,带灰色阴影部分是卷积核施加的区域;卷积核不断地扫描整个输入特征图,最终得到输出特征图,也就是上方的棕色方格。需要说明的是,输入特征图四周的虚线透明方格,是卷积核在扫描过程中,为了保证输出特征图的尺寸满足特定要求,而对输入特征图进行的边界填充(padding),一般可以用全零行/列来实现。
图1.2 卷积操作的示意图
图1.3给出了一个单通道二维卷积运算的具体例子[2] 。假设,输入特征图的尺寸为5×5,卷积核尺寸为3×3,扫描步长为1,不对输入特征图进行边界填充。那么,图1.3中的9个子图分别表示卷积核在扫描过程中的9个可能的位置,其中,输入特征图上的带灰色阴影区域是卷积核滑动的位置,而输出特征图上的棕色方格是该滑动位置对应的输出值。
以第一个子图(左上角)为例,可以看到此时卷积核在输入特征图上的滑动位置即为左上角的3×3灰色阴影区域,输入特征图在该区域对应的取值分别为[3,3,2,0,0,1,3,1,2],而卷积核的参数取值为[0,1,2,2,2,0,0,1,2],所以输出特征图上对应的棕色方格的取值即为上述两个向量的点积,也即3×0+3×1+2×2+0×2+0×2+1×0+3×0+1×1+2×2=12。
图1.3 一个卷积运算过程的示例
了解了卷积的基本运算过程之后,我们就能更深刻地理解卷积的特性及其与全连接层的区别。
局部连接: 卷积核尺寸远小于输入特征图的尺寸,输出层上的每个节点都只与输入层的部分节点连接。这个特性与生物视觉信号的传导机制类似,存在一个感受野的概念。与此不同,在全连接层中,节点之间的连接是稠密的,输出层每个节点会与输入层所有节点都存在关联。
权值共享: 卷积核的滑动窗机制,使得输出层上不同位置的节点与输入层的连接权值都是一样的(即卷积核参数)。而在全连接层中,不同节点的连接权值都是不同的。
输入/输出数据的结构化: 局部连接和权值共享,使得卷积操作能够在输出数据中大致保持输入数据的结构信息。例如,输入数据是二维图像(不考虑通道),采用二维卷积,则输出数据中不同节点仍然保持着与原始图像基本一致的空间对应关系;输入数据是三维的视频(即多个连续的视频帧),采用三维卷积,则输出数据中也能保持着相应的空间、时间对应关系。若是将结构化信息(如二维图像)输入全连接层,其输出数据会被展成扁平的一维数组,从而丧失输入数据和输出数据在结构上的对应关系。
卷积的局部连接、权值共享等特性,使其具有远小于全连接层的参数量和计算复杂度,并且与生物视觉传导机制有一定的相似性,因此被广泛用于处理图像、视频等高维结构化数据。
问题2 在卷积神经网络中,如何计算各层的感受野大小? 难度:★★☆☆☆
分析与解答 在卷积神经网络中,由于卷积的局部连接性,输出特征图上的每个节点的取值,是由卷积核在输入特征图对应位置的局部区域内进行卷积而得到的,因此这个节点的取值会受到该卷积层的输入特征图,也就是上一层的输出特征图上的某个局部区域内的值的影响,而上一层的输出特征图上的每一点的值亦会受到上上一层某个区域的影响。感受野的定义是,对于某层输出特征图上的某个点,在卷积神经网络的原始输入数据上能影响到这个点的取值的区域。
以二维卷积神经网络为例,如果网络的原始输入特征图的尺寸为 ,记网络第 层节点的感受野大小为 ,其中 分别代表宽和高两个方向,则可按照式(1-1)~式(1-4)来计算。
若第 层为卷积层或池化层(pooling layer),则有
(1-1)
其中, 是第 层卷积核 池化核的尺寸 是第 层的步长。特别地,对于第 0 层,即原始输入层,有
(1-2)
若第 层为激活层、批归一化层等,则其步长为1,感受野大小为
(1-3)
若第 层为全连接层,则其感受野为整个输入数据全域,即
(1-4)
图1.4是感受野的简单示意图,可以看到,当第 层和第 层的卷积核大小为 、步长为1时,则第 层在第 层上的感受野大小为 。若想进一步计算第 层在原始输入数据上的感受野大小,则还需要知道前面所有层的信息(如卷积核大小、步长等)。
图1.4 卷积层感受野示意图
问题3 卷积层的输出尺寸、参数量和计算量。 难度:★★☆☆☆
假设一个卷积层的输入特征图的尺寸为 卷积核大小为 步长为 则输出特征图的尺寸 如何计算? 如果输入特征图的通道数为 输出特征图的通道数为 在不考虑偏置项(bias)的情况下,卷积层的参数量和计算量是多少?
分析与解答 ■ 输出尺寸
假设在卷积核的滑动过程中,我们对输入特征图的左右两侧分别进行了 列填充,上下两侧分别进行了 行填充,填充后的特征图尺寸为 ,则输出特征图的尺寸为
(1-5)
上述公式在步长 时,可能会出现非整数情况,此时,很多深度学习框架会采取向下取整的方式,放弃输入特征图的一部分边界数据,使得最终的输出特征图的尺寸为
(1-6)
例如,Caffe和PyTorch会放弃输入特征图的左侧和上侧的一部分数据,使得卷积核滑动窗恰好能到达最右下角的点。
有些深度学习框架(如TensorFlow、Keras)在做卷积运算时无法显式指定输入特征图的边界填充尺寸(当然可以在做卷积之前手动填充),只能选择以下几种预先定义好的填充模式。
若选择padding=same模式,则会在输入特征图的左右两侧一共填充 列,上下两侧一共填充 行,最终的输出特征图的尺寸为
(1-7)
例如在TensorFlow中,如果 为偶数,则在输入特征图的左右两侧或上下两侧填充相等数目的列/行;如果为奇数,会让右侧/下侧比左侧/上侧多填充一列/行。
若选择padding=valid模式,则不会对输入特征图进行边界填充,而是直接放弃右侧和下侧卷积核无法滑动到的区域,此时输出特征图的尺寸为
(1-8)
■ 参数量
卷积层的参数量,主要取决于每个卷积核的参数量以及卷积核的个数。在这里,每个卷积核含有 个参数,而卷积核的个数即输出特征图的通道个数 ,因此参数总量为
(1-9)
■ 计算量
卷积层的计算量,由卷积核在每个滑动窗内的计算量以及整体的滑动次数决定。在每个滑动窗内,卷积操作的计算量大约为 ,而卷积核的滑动次数即输出特征图的数据个数,也就是 ,因此整体的计算量为
(1-10)
一般情况下,有 , , ,因此上式可以近似简写为
(1-11)
02 卷积的变种 场景描述 随着卷积神经网络在各种问题中的广泛应用,卷积层也逐渐衍生出了许多变种。本节将挑选几个比较有代表性的卷积的变种,通过问答形式让读者了解其原理和应用场景。
知识点 分组卷积(Group Convolution)、转置卷积(Transposed Convolution)、空洞卷积(Dilated/Atrous Convolution)、可变形卷积(Deformable Convolution)
问题1 简述分组卷积及其应用场景。 难度:★★☆☆☆
分析与解答 在普通的卷积操作中,一个卷积核对应输出特征图的一个通道,而每个卷积核又会作用在输入特征图的所有通道上(即卷积核的通道数等于输入特征图的通道数),因此最终输出特征图的每个通道都与输入特征图的所有通道相连接。也就是说,普通的卷积操作,在“通道”这个维度上其实是“全连接”的,如图1.5所示。
图1.5 普通卷积
所谓分组卷积,其实就是将输入通道和输出通道都划分为同样的组数,然后仅让处于相同组号的输入通道和输出通道相互进行“全连接”,如图1.6所示。如果记 为输入/输出通道所分的组数,则分组卷积能够将卷积操作的参数量和计算量都降低为普通卷积的1/ 。
分组卷积最初是在AlexNet[3] 网络中引入的。当时,为了解决单个GPU无法处理含有较大计算量和存储需求的卷积层这个问题,就采用分组卷积将计算和存储分配到多个GPU上。后来,随着计算硬件的不断升级,这个方向上的需求已经大为减少。目前,分组卷积更多地被用来构建用于移动设备的小型网络模型。例如,深度可分离卷积(Depthwise Separable Convolution)[4] 就极为依赖分组卷积。不过,分组卷积也有一个潜在的问题:虽然在理论上它可以显著降低计算量,但是对内存的访问频繁程度并未降低,且现有的GPU加速库(如cuDNN)对其优化的程度有限,因此它在效率上的提升并不如理论上显著[5] 。
图1.6 分组卷积
问题2 简述转置卷积的主要思想以及应用场景。 难度:★★★☆☆
分析与解答 普通的卷积操作可以形式化为一个矩阵乘法运算, 即
(1-12)
其中, 和 分别是卷积的输入和输出(展平成一维向量形式),维度分别为 和 ; 是由卷积核、滑动步长决定的常对角矩阵,维度为 ,其每一行对应着卷积核的一次滑动位置。以一维卷积为例,假设输入向量 ,卷积核为 ,卷积的滑动步长为2,则输出向量为
(1-13)
反过来,记 为矩阵 的转置,定义如下矩阵运算:
(1-14)
其所对应的操作被称为转置卷积, 和 分别是转置卷积的输入和输出,维度分别为 和 。转置卷积也被称为反卷积(deconvolution)[6] ,它可以看作是普通卷积的一个“对称”操作,这种“对称性”体现在以下两个方面。
转置卷积能将普通卷积中输入到输出的尺寸变换逆反过来。例如,式(1-12)中的普通卷积将特征图尺寸由 变为 ,而式(1-14)中的转置卷积则可以将特征图尺寸由 复原为 。这里需要注意的是,输入特征图经过普通卷积操作后再经过转置卷积,只是复原了形状,并不能复原具体的取值(因此将转置卷积称为反卷积并不是很合适)。
根据矩阵运算的求导知识,在式(1-12)所示的普通卷积中,输出 对于输入 的导数为 ;而在式(1-14)所示的转置卷积中,输出 对于输入 的导数为 。由此可以看出,转置卷积的信息正向传播与普通卷积的误差反向传播所用的矩阵相同,反之亦然。
以式(1-14)为例,我们可以写出转置卷积的具体计算公式:
(1-15)
可以看到,等号的右侧实际上就是一个普通卷积对应的矩阵乘法。因此,转置卷积本质上就是一个对输入数据进行适当变换(补零/上采样)的普通卷积操作。在具体实现时,以二维卷积为例,一个卷积核尺寸为 、滑动步长为 、边界填充尺寸为 的普通卷积,其所对应的转置卷积可以按如下步骤来进行。
(1)对输入特征图进行扩张(上采样):相邻的数据点之间,在水平方向上填充 个零,在垂直方向上填充 个零。
(2)对输入特征图进行边界填充:左右两侧分别填充 个零列,上下两侧分别填充 个零行。
(3)在变换后的输入特征图上做卷积核大小为 、滑动步长为(1,1)的普通卷积操作。
在上述步骤(2)中,转置卷积的边界填充尺寸 是根据与之对应的普通卷积的边界填充尺寸 来确定的,很多深度学习框架(如PyTorch)就是按照这个思路来设定转置卷积的边界填充尺寸。但在有些计算框架(如TensorFlow)中,做卷积时无法显式指定边界填充尺寸,只能选择一些预定义的填充模式(如padding=same或padding=valid),此时,转置卷积的边界填充尺寸是根据与之对应的普通卷积的边界填充模式来设定的(具体细节参见01节的问题3)。
需要注意的是,当滑动步长大于1时,卷积的输出尺寸公式中含有向下取整操作(参见01节的问题3),故而普通卷积层的输入尺寸与输出尺寸是多对一关系,此时转置卷积无法完全恢复之前普通卷积的输入尺寸,需要通过一个额外的参数来直接或间接地指定之前的输入尺寸(如TensorFlow中的output_shape参数、PyTorch中的output_padding参数)。
普通卷积和转置卷积所处理的基本任务是不同的。前者主要用来做特征提取,倾向于压缩特征图尺寸;后者主要用于对特征图进行扩张或上采样,代表性的应用场景如下。
语义分割/实例分割等任务:由于需要提取输入图像的高层语义信息,网络的特征图尺寸一般会先缩小,进行聚合;此外,这类任务一般需要输出与原始图像大小一致的像素级分割结果,因而需要扩张前面得到的具有较高语义信息的特征图,这就用到了转置卷积。
一些物体检测、关键点检测任务,需要输出与源图像大小一致的热图。
图像的自编码器、变分自编码器、生成式对抗网络等。
问题3 简述空洞卷积的设计思路。 难度:★★☆☆☆
分析与解答 上一问中提到,在语义分割(Semantic Segmentation)任务中,一般需要先缩小特征图尺寸,做信息聚合;然后再复原到之前的尺寸,最终返回与原始图像尺寸相同的分割结果图。常见的语义分割模型,如全卷积网络(Fully Convolutional Networks, FCN)[7] ,一般采用池化操作(pooling)来扩大特征图的感受野,但这同时会降低特征图的分辨率,丢失一些信息(如内部数据结构、空间层级信息等),导致后续的上采样操作(如转置卷积)无法还原一些细节,从而限制最终分割精度的提升。
如何不通过池化等下采样操作就能扩大感受野呢?空洞卷积[8] 应运而生。顾名思义,空洞卷积就是在标准的卷积核中注入“空洞”,以增加卷积核的感受野。空洞卷积引入了扩张率(dilation rate)这个超参数来指定相邻采样点之间的间隔:扩张率为 的空洞卷积,卷积核上相邻数据点之间有 个空洞,如图1.7所示(图中有绿点的方格表示有效的采样点,黄色方格为空洞)。尺寸为 的标准卷积核,其所对应的扩张率为 的空洞卷积核尺寸为 。特别地,扩张率为1的空洞卷积实际上就是普通卷积(没有空洞)。
空洞卷积感受野的计算,与上一节中介绍的普通卷积感受野的计算方式基本一致,只是将其中的卷积核尺寸替换为扩张后的卷积核尺寸(即包括空洞在内)。以图1.7为例,假设依次用图(a)、(b)、(c)中的空洞卷积来搭建三层神经网络:第一层是图1.7(a)中 的空洞卷积,扩张后的卷积核尺寸为 ;第二层是图1.7(b)中 的空洞卷积,扩张后的卷积核尺寸为 ;第三层是图1.7(c)中 的空洞卷积,扩张后的卷积核尺寸为 。根据上一节中介绍的感受野计算公式,可以算得第一层、第二层、第三层的感受野依次为 、 、 (如图1.7中黄色阴影部分所示)。如果采用普通的 卷积核,则三层连接起来的感受野只有 。由此可以看出,空洞卷积利用空洞结构扩大了卷积核尺寸,不经过下采样操作即可增大感受野,同时还能保留输入数据的内部结构。
图1.7 空洞卷积示意图
问题4 可变形卷积旨在解决哪类问题? 难度:★★★☆☆
分析与解答 深度卷积神经网络在许多视觉任务上获得了重大突破,其强大的特征提取能力避免了传统的人工特征工程的弊端。然而,普通的卷积操作是在固定的、规则的网格点上进行数据采样,如图1.8(a)所示,这束缚了网络的感受野形状,限制了网络对几何形变的适应能力。为了克服这个限制,可变形卷积[9] 在卷积核的每个采样点上添加一个可学习的偏移量(offset),让采样点不再局限于规则的网格点,如图1.8(b)所示。图1.8(c)和图1.8(d)是可变形卷积的两个特例:前者在水平方向上对卷积核有较大拉伸,体现了可变形卷积的尺度变换特性;后者则是对卷积核进行旋转。特别地,图1.8(c)中的可变形卷积核有点类似于上一问中的空洞卷积;实际上,空洞卷积可以看作一种特殊的可变形卷积。
图1.8 普通卷积与可变形卷积的对比
可变形卷积让网络具有了学习空间几何形变的能力。具体来说,可变形卷积引入了一个平行分支来端到端地学习卷积核采样点的位置偏移量,如图1.9所示。该平行分支先根据输入特征图计算出采样点的偏移量,然后再在输入特征图上采样对应的点进行卷积运算。这种结构让可变形卷积的采样点能根据当前图像的内容进行自适应调整。
我们以二维卷积为例,详细说明可变形卷积的计算过程。假设卷积核尺寸为 ,记 , 它对应着卷积核的9个采样点。首先来看普通卷积,它可以用公式形式化为
(1-16)
其中, 和 分别是卷积层的输入特征图和输出特征图, 是滑动窗的中心点, 是卷积核的采样点。对于可变形卷积,它的计算公式则是
(1-17)
其中, 是采样点的位置偏移量。由于 是在网络中端到端地学习得到的,它可能不是整数,这会导致 不在整数网格点上,此时需要采用双线性插值:
(1-18)
其中, 是任意位置点(例如取 , 是整数网格点, 是双线性插值核。
图1.9 可变形卷积的网络结构图
适应物体在不同图片中出现的复杂几何形变(如尺度、形态、非刚性形变等),一直是物体识别领域的难点,可变形卷积网络给出了一个可行的解决方案。它可以端到端地学习几何形变的偏移量,不需要额外的监督信息,并且只增加了少许计算量,最终却能带来效果的显著提升。图1.10是可变形卷积的一组效果示意图,图中绿点是激活点,红点是激活点对应的三层 可变形卷积核的采样位置(共 个点)。可以看到,红色采样点基本覆盖了检测物体的全部区域,这说明可变形卷积会根据物体的尺度、形态进行自适应调整[9] 。
图1.10 可变形卷积的效果示意图
03 卷积神经网络的整体结构 场景描述 卷积神经网络从2012年的崭露头角到现在的广泛应用,其基本的模型结构经历了数个阶段的发展。熟悉这些发展中的关键节点,不仅有利于我们更好地了解卷积神经网络结构设计的一般规律和准则,而且能让我们更深入地理解机器视觉的认知过程。本节将较为具体地梳理卷积神经网络结构在近年来的主要发展,以帮助读者对整个发展过程中的各种逻辑有一个清晰的认识。
知识点 卷积神经网络、AlexNet、VGGNet、Inception、残差神经网络(Residual Network, ResNet)
问题 简述卷积神经网络近年来在结构设计上的主要发展和变迁(从AlexNet 到ResNet 系列)。 难度:★★★★☆
分析与解答 ■ AlexNet
AlexNet首次亮相是在2012年的ILSVRC大规模视觉识别竞赛上,它将图像分类任务的Top-5错误率降低到15.3%,大幅领先于其他传统方法。AlexNet是首个实用性很强的卷积神经网络(在此之前的LeNet-5[10] 网络一般用于手写字符识别),其主要网络结构是堆砌的卷积层和池化层,最后在网络末端加上全连接层和Softmax层以处理多分类任务。在具体实现中,AlexNet还做了一些细节上的改进。
采用修正线性单元(Rectified Linear Unit, ReLU)作为激活函数(替换了之前常用的Sigmoid函数),缓解了深层网络训练时的梯度消失问题。
引入了局部响应归一化(Local Response Normalization, LRN)模块。
应用了Dropout和数据扩充(data augmentation)技术来提升训练效果。
用分组卷积来突破当时GPU的显存瓶颈。
■VGGNet
VGGNet[11] 出现在2014年的ILSVRC上,单个模型就将图像分类任务的Top-5错误率降低到8.0%;如果采用多模型集成(ensemble),则可以将错误率进一步降至6.8%。相比于AlexNet,VGGNet做了如下改变。
用多个 小卷积核代替之前的 、 等大卷积核,这样可以在更少的参数量、更小的计算量下,获得同样的感受野以及更大的网络深度。
用 池化核代替之前的 池化核。
去掉了局部响应归一化模块。
整体来说,VGGNet网络结构设计更加简洁,整个网络采用同一种卷积核尺寸( )和池化核尺寸( ),并重复堆叠了很多基础模块,最终的网络深度也达到了近20层。
■GoogLeNet/Inception-v1
在VGGNet简单堆砌 卷积的基础上,Inception系列网络深入地探索了网络结构的设计原则。参考文献[12]认为,网络性能和表达能力正相关于网络规模,即网络深度和宽度;但过深或过宽的网络会导致参数量非常庞大,这会进一步带来诸如过拟合、梯度消失或爆炸、应用场景受限等问题。一种改进手段是将当前网络中的全连接和卷积等密集连接结构转化为稀疏连接形式,这可以降低计算量,同时维持网络的表达能力。另外,自然界中生物的神经连接也大都是稀疏的。据此,Inception系列网络提出了Inception模块 ,它将之前网络中的大通道卷积层替换为由多个小通道卷积层组成的多分支结构,如图1.11(a)所示。其内在的数学依据是,一个大型稀疏矩阵通常可以分解为多个小的稠密矩阵,也就是说,可以用多个小的稠密矩阵来近似一个大型稀疏矩阵。实际上,Inception模块会同时使用 、 、 的3种卷积核进行多路特征提取,这样能使网络稀疏化的同时,增强网络对多尺度特征的适应性。
除了Inception模块之外,Inception-v1在网络结构设计上还有如下创新。
提出了瓶颈(bottleneck)结构,即在计算比较大的卷积层之前,先使用 卷积对其通道进行压缩以减少计算量(在较大卷积层完成计算之后,根据需要有时候会再次使用 卷积将其通道数复原),如图1.11(b)所示。
从网络中间层拉出多条支线,连接辅助分类器,用于计算损失并进行误差反向传播,以缓解梯度消失问题。
修改了之前VGGNet等网络在网络末端加入多个全连接层进行分类的做法,转而将第一个全连接层换成全局平均池化层(Global Average Pooling)。
Inception-v1网络最终在ImageNet 2012数据集上,将图像分类任务的Top-5错误率降至6.67%。
图1.11 Inception-v1网络中使用的Inception模块
■Inception-v2和Inception-v3
Inception-v2/v3是在同一篇论文里提出的,参考文献[13]中提出了4点关于网络结构设计的准则。
避免表达瓶颈(representational bottleneck),尤其是在网络的前几层。具体来说,将整个网络看作由输入到输出的信息流,我们需要尽量让网络从前到后各个层的信息表征能力逐渐降低,而不能突然剧烈下降或是在中间某些节点出现瓶颈。
特征图通道越多,能表达的解耦信息就越多,从而更容易进行局部处理,最终加速网络的训练过程。
如果要在特征图上做空间域的聚合操作(如 卷积),可以在此之前先对特征图的通道进行压缩,这通常不会导致表达能力的损失。
在限定总计算量的情况下,网络结构在深度和宽度上需要平衡。
文中采用了与VGGNet类似的卷积分解的思路,将 卷积核分解为两个 卷积核,或者更一般地,将 卷积核分解为 个 卷积核。此外,文中还提出了另一种卷积分解思路:将 卷积分解为 卷积与 卷积的串联;当然也可以进一步将 卷积和 卷积的组织方式由串联改成并联。
图1.12展示了各版本Inception模块的结构示意图,图1.12(a)是Inception-v1中使用的原始Inception模块;图1.12(b)、图1.12(c)、图1.12(d)是Inception-v2/v3中使用的、经过卷积分解的Inception模块,分别是Inception-A(将大卷积核分解为小卷积核)、Inception-B(串联 和 卷积)和Inception-C(并联 和 卷积)。
为了缓解单纯使用池化层进行下采样带来的表达瓶颈问题,文中还提出了一种下采样模块:在原始Inception模块的基础上略微修改,并将每条支路最后一层的步长改为2,如图1.13所示。
此外,论文中尝试给从网络中间层拉出的辅助分类器的全连接层加上批归一化和Dropout,实验表明这能提升最终的分类效果。同时,文中还将输入图片尺寸由 扩大为 。最终,Inception-v3在ImageNet 2012数据集的图像分类任务上,单模型能使Top-5错误率降到4.20%;如果采用标签平滑、多模型集成等辅助训练措施,则能进一步将错误率降至3.50%,具体参见该论文中的讨论。
图1.12 Inception模块及其卷积分解后的变种:Inception-A/B/C模块
图1.13 Inception-v2/v3中的下采样模块
至于Inception-v2与Inception-v3的具体区别,有人认为Inception-v2是Inception-v3在不使用辅助训练措施下的版本,也有人根据Google的示例代码认为Inception-v2仅为Inception-v1加上批归一化并使用Inception-A模块的简单改进版本,这里我们不再具体细分。
■ResNet
ResNet[14] 的提出源于这样一种现象:随着网络层数的加深,网络的训练误差和测试误差都会上升。这种现象称为网络的退化(degeneration),它与过拟合显然是不同的,因为过拟合的标志之一是训练误差降低而测试误差升高。为解决这个问题,ResNet采用了跳层连接(shortcut connection),即在网络中构筑多条“近道”,这有以下两点好处。
能缩短误差反向传播到各层的路径,有效抑制梯度消失的现象,从而使网络在不断加深时性能不会下降。
由于有“近道”的存在,若网络在层数加深时性能退化,则它可以通过控制网络中“近道”和“非近道”的组合比例来退回到之前浅层时的状态,即“近道”具备自我关闭能力。
ResNet的跳层连接,使得现有网络结构可以进一步加深至百余层甚至千余层,而不用担心训练困难或性能损失。在实际应用中,ResNet-152模型在ImageNet 2012数据集的图像分类任务上,单模型能使Top-5错误率降至4.49%,采用多模型集成可进一步将错误率降低到3.57%。
■Inception-v4和Inception-ResNet
Inception-v4在Inception-v3上的基础上,修改了网络初始几层的结构(文中称为Stem),同时应用了Inception-A、Inception-B、Inception-C模块,还在原来Inception-v3的下采样模块的基础上提出并应用了Reduction-A、Reduction-B模块,其网络结构如图1.14所示。Inception-v4在ImageNet 2012数据集的图像分类任务上,能使Top-5错误率降至3.8%。
此外,参考文献[15]还提出了基于残差网络跳层连接的Inception-ResNet系列网络,如图1.15所示。引入残差结构可以显著加速Inception网络的训练。在ImageNet 2012数据集的图像分类任务上,Inception-ResNet-v1和Inception-ResNet-v2单模型的Top-5错误率分别是4.3%和3.7%;如果使用3个Inception-ResNet-v2进行集成,则可以使错误率降至3.1%。
图1.14 Inception-v4网络结构图
图1.15 Inception-ResNet网络结构图
■ResNeXt
ResNeXt[16] 是对ResNet中残差块(residual block)结构的一个小改进。具体来说,原残差块是一个瓶颈结构,如图1.16(a)所示;ResNeXt缩小了瓶颈比,并将中间的普通卷积改为分组卷积,如图1.16(b)所示。该结构可以在不增加参数量的前提下,提高准确率,同时还减少了超参数的数量。
图1.16 ResNet和ResNeXt中残差块的对比
总结与扩展 卷积神经网络的基本结构在过去几年里发生了很多变化,从简单的堆砌卷积层,到堆砌 卷积层,到Inception系列网络中的细节设计,可以说卷积神经网络的结构设计已经逐渐精细了。此外,近两年来还涌现出了许多其他的优秀模型,如通过神经网络架构搜索(Neural Architecture Search,NAS)得到的NASNet[17] 、获得2017年ILSVRC大规模视觉识别竞赛冠军的SENet[18] 等。本节受篇幅限制不再讲解,感兴趣的读者可自行阅读相关论文。图1.17绘制了多种卷积神经网络在计算量、参数量以及在ImageNet 2012数据集上的分类效果(包括Top-1正确率和Top-5正确率)等方面的对比图[19] ,供读者参考。
图1.17 卷积神经网络在计算量、参数量、性能等方面的对比图
04 卷积神经网络的基础模块 场景描述 上一节介绍了卷积神经网络整体结构的演变过程,其中涌现出一批非常重要的基础模块。本节主要关注卷积神经网络发展过程中具有里程碑意义的基础模块,了解它们的原理和设计细节。
知识点 批归一化(Batch Normalization, BN)、全局平均池化(Global Average Pooling)、瓶颈结构、沙漏结构(hourglass)
问题1 批归一化是为了解决什么问题?它的参数有何意义?它在网络中一般放在什么位置? 难度:★★★☆☆
分析与解答 在机器学习中,一般会假设模型的输入数据的分布是稳定的。如果这个假设不成立,即模型输入数据的分布发生变化,则称为协变量偏移(covariate shift)。模型的训练集和测试集的分布不一致,或者模型在训练过程中输入数据的分布发生变化,这些都属于协变量偏移现象。
同样,对于一个复杂的机器学习系统,在训练过程中一般也会要求系统里的各个子模块的输入分布是稳定的,如果不满足,则称为内部协变量偏移(internal covariate shift)。对于深度神经网络,其在训练过程中,每一层的参数都会随之更新。以第 层为例,其输入数据与之前所有层(第1层到第 层)的网络参数取值都有很大关系;在训练过程中,如果之前层的参数被更新后,第 层的输入数据的分布必然也跟着发生变化,此即为内部协变量偏移。网络越深,这种现象越明显。内部协变量偏移会给深度神经网络的训练过程带来诸多问题:
网络每一层需要不断适应输入数据的分布的变化,这会影响学习效率,并使学习过程变得不稳定。
网络前几层参数的更新,很可能使得后几层的输入数据变得过大或者过小,从而掉进激活函数的饱和区,导致学习过程过早停止。
为了尽量降低内部协变量偏移带来的影响,网络参数的更新需要更加谨慎,在实际应用中一般会采用较小的学习率(避免参数更新过快),而这会降低收敛速度。
在之前的网络训练过程中,一般会采用非饱和型激活函数(如ReLU)、精细的网络参数初始化、保守的学习率等方法来降低内部协变量偏移带来的影响。这些方法会使网络的学习速度太慢,并且最终效果也特别依赖于网络的初始化。
批归一化[20] 就是为了解决上述问题而提出的,它的主要作用是确保网络中的各层,即使参数发生了变化,其输入/输出数据的分布也不能产生较大变化,从而避免发生内部协变量偏移现象。采用批归一化后,深度神经网络的训练过程更加稳定,对初始值不再那么敏感,可以采用较大的学习率来加速收敛。
批归一化可以看作带参数的标准化,具体公式为
(1-19)
其中, 和 分别是原始输入数据和批归一化后的输出数据, 和 分别是输入数据的均值和标准差(在mini-batch上), 和 分别是可学习的平移参数和缩放参数,上标 表示数据的第 维(批归一化在数据各个维度上是独立进行的), 是为防止分母为0的一个小量。
可以看到,在批归一化过程中,设置了两个可学习的参数 和 ,它们有如下作用。
保留网络各层在训练过程中的学习成果。如果没有 和 ,批归一化退化为普通的标准化,这样在训练过程中,网络各层的参数虽然在更新,但是它们的输出分布却几乎不变(始终是均值为0、标准差为1),不能有效地进行学习。添加 和 参数后,网络可以为每个神经元自适应地学习一个量身定制的分布(均值为 、标准差为 ),保留每个神经元的学习成果。
保证激活单元的非线性表达能力。上面提到,没有 和 ,批归一化的输出分布始终是均值为0、标准差为1。此时,如果激活函数采用诸如Sigmoid、Tanh等函数,则经过批归一化的数据基本上都落在这些激活函数的近似线性区域,没能利用上它们的非线性区域,这会极大地削弱模型的非线性特征提取能力和整体的表达能力。添加 和 参数后,批归一化的数据就可以进入激活函数的非线性区域。
使批归一化模块具有自我关闭能力。若 和 分别取数据的均值和标准差,则可以复原初始的输入值,即关闭批归一化模块。因此,当批归一化导致特征分布被破坏,或者使网络泛化能力减弱时,可以通过这两个参数将其关闭。
至于批归一化在网络中的位置,直觉上看无论是放在激活层之前还是之后都有一定道理。
把批归一化放在激活层之前,可以有效避免批归一化破坏非线性特征的分布;另外,批归一化还可以使数据点尽量不落入激活函数的饱和区域,缓解梯度消失问题。
由于现在常用的激活函数是ReLU,它没有Sigmoid、Tanh函数的那些问题,因此也可以把批归一化放在激活层之后,避免数据在激活层之前被转化成相似的模式从而使得非线性特征分布趋于同化。
在具体实践中,原始论文[20] 是将批归一化放在激活层之前的,但学术界和工业界也有不少人曾表示倾向于将批归一化放在激活层之后(如论文共同作者Christian Szegedy、Keras作者Francois Cholle、知名数据科学平台Kaggle的前首席科学家Jeremy Howard等人)。从近两年的论文来看,有一大部分是将批归一化放在激活层之后的,如MobileNet v2[21] 、ShuffleNet v2[5] 、NASNet-A[17] 。批归一化究竟应该放在什么位置,仍是一个存争议的问题。
问题2 用于分类任务的卷积神经网络的最后几层一般是什么层?在最近几年有什么变化? 难度:★★★☆☆
分析与解答 用于分类任务的卷积神经网络,其前面若干层一般是卷积层、池化层等,但是网络末端一般是几层全连接层。这是因为一方面卷积层具有局部连接、权值共享的特性,其在不同位置是采用相同的卷积核进行特征提取的。也就是说,卷积层的特征提取过程是局部的(卷积核尺寸一般远小于图片尺寸),且是位置不敏感的。而且,参考文献[22] 中的实验表明,即使强迫卷积层学习如何对位置信息进行编码,其效果也不理想。因此,如果整个网络全部采用卷积层(包括池化层等),网络也许能知道图片中不同位置有哪些元素(高层语义信息),但无法提取这些元素之间的关联关系(包括空间位置上的相关性、语义信息上的相关性)。而对于分类任务,不仅需要考虑一张图像中的各个元素,还需要考虑它们之间的关联关系(全局信息)。举例来说,假设要做人脸检测任务,仅仅找出图片上的眼、鼻、口等人脸元素是不够的,它们之间的相对位置关系也非常重要(如果一张图片中人脸的各个器官被随机打乱,我们显然不会认为这还是一张人脸)。为了提取不同元素之间的关联关系,我们需要一个全局的、位置敏感的特征提取器,而全连接层就是最方便的选择,其每个输出分量与所有的输入分量都相连,并且连接权重都是不同的。当然,卷积层也不是完全不能对位置信息进行编码,如果使用与输入特征图同样尺寸的卷积核就可以,但这实际上等价于一个全连接层(卷积的输出通道数目对应着全连接层的输出单元个数)。
从另一方面来理解,多个全连接层组合在一起就是经典的分类模型——多层感知机。我们可以把卷积神经网络中前面的卷积层看作是为多层感知机提取深层的、非线性特征。从这个角度讲,最后几层也可以接其他的分类模型,如支持向量机等,但这样就脱离了神经网络体系,处理起来不太方便,不利于模型进行端到端的训练和部署。
最近几年,分类网络在卷积层之后、最后一层之前通常采用全局平均池化[23] ,它与全连接层有着相似的效果(可以提取全局信息),并且具有如下优点。
(1)参数量和计算量大大降低。假设输入特征图的尺寸为 ,通道数为 ,则全局平均池化的参数量为零,计算量仅为 ;而如果选择接一个输出单元数为k的全连接层,则参数量和计算量均为 。对于AlexNet、VGGNet等这种全连接层单元数动辄1024或4096的网络,全局平均池化与普通卷积层的计算量能相差千余倍。
(2)具有较好的可解释性,比如,我们可以知道特征图上哪些点对最后的分类贡献最大。
问题3 卷积神经网络中的瓶颈结构和沙漏结构提出的初衷是什么?可以应用于哪些问题? 难度:★★★★☆
分析与解答 ■瓶颈结构
瓶颈结构是在GoogLeNet/Inception-v1中提出的,而后的ResNet、MobileNet等很多网络也采用并发展了这个结构。瓶颈结构的初衷是为了降低大卷积层的计算量,即在计算比较大的卷积层之前,先用一个1×1卷积来压缩大卷积层输入特征图的通道数目,以减小计算量;在大卷积层完成计算之后,根据实际需要,有时候会再次使用一个1×1卷积来将大卷积层输出特征图的通道数目复原。由此,瓶颈结构一般是一个小通道数的1×1卷积层,接一个较大卷积层,后面可能还会再跟一个大通道数的1×1卷积层(可选),如图1.18所示。
图1.18 瓶颈结构示意图
瓶颈结构是卷积神经网络中比较基础的模块,它可以用更小的计算代价达到与之前相似甚至更好的效果(因为瓶颈结构会增加网络层数,所以特征提取能力可能也会有相应提升)。瓶颈结构基本上可以用于所有的卷积神经网络中,场景包括物体检测和分割、生成式对抗网络等大方向,以及诸如人脸匹配、再识别、关键点检测等细分领域。
■沙漏结构
沙漏结构也是卷积神经网络中比较基础的模块,它类似于瓶颈结构,但尺度要更大,涉及的层也更多。沙漏结构一般包括以下两个分支。
(1)自底向上(bottom-up)分支:利用卷积、池化等操作将特征图的尺寸逐层压缩(通道数可能增加),类似于自编码器中的编码器(encoder)。
(2)自顶向下(top-down)分支:利用反卷积或插值等上采样操作将特征图的尺寸逐层扩大(通道数可能降低),类似于自编码器中的解码器(decoder)。
参考文献[24]用一个具有沙漏结构的网络来解决人体姿态估计任务,其基本单元如图1.19所示;整个网络则由多个沙漏结构堆叠而成,如图1.20所示。此外,在物体检测任务中,沙漏结构也有着大量应用,如TDM(Top-Down Modulation)[25] 、FPN(Feature Pyramid Network)[26] 、RON(Reverse connection with Objectness prior Networks)[27] 、DSSD(Deconvolutional Single-Shot Detector)[28] 、RefineDet[29] 等模型,它们的网络结构如图1.21所示。图中的RFB(Reverse Fusion Block)是将上采样后的深层特征和浅层特征进行融合的模块。在这些应用中,沙漏结构的作用一般是将多尺度信息进行融合;同时,沙漏结构单元中堆叠的多个卷积层可以提升感受野,增强模型对小尺寸但又依赖上下文的物体(如人体关节点)的感知能力。
图1.19 沙漏结构基本单元
图1.20 用于人体姿态估计的沙漏结构网络示意图
图1.21 基于沙漏结构的物体检测模型
参考文献 [1] HUBEL D H, WIESEL T N. Receptive fields, binocular interaction and functional architecture in the cat’s visual cortex[J]. The Journal of Physiology, Wiley Online Library, 1962, 160(1): 106–154.
[2] DUMOULIN V, VISIN F. A guide to convolution arithmetic for deep learning[J]. arXiv preprint arXiv:1603.07285, 2016.
[3] HINTON G E, KRIZHEVSKY A, SUTSKEVER I. Imagenet classification with deep convolutional neural networks[C]//Advances in Neural Information Processing Systems, 2012: 1097–1105.
[4] HOWARD A G, ZHU M, CHEN B, et al. Mobilenets: Efficient convolutional neural networks for mobile vision applications[J]. arXiv preprint arXiv:1704.04861, 2017.
[5] MA N, ZHANG X, ZHENG H-T, et al. Shufflenet v2: Practical guidelines for efficient cnn architecture design[C]//Proceedings of the European Conference on Computer Vision, 2018: 116–131.
[6] ZEILER M D, KRISHNAN D, TAYLOR G W, et al. Deconvolutional networks[J]. IEEE, 2010.
[7] LONG J, SHELHAMER E, DARRELL T. Fully convolutional networks for semantic segmentation[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, 2015: 3431–3440.
[8] YU F, KOLTUN V. Multi-scale context aggregation by dilated convolutions[J]. arXiv preprint arXiv:1511.07122, 2015.
[9] DAI J, QI H, XIONG Y, et al. Deformable convolutional networks[C]//Proceedings of the IEEE International Conference on Computer Vision, 2017: 764–773.
[10] LECUN Y, BOTTOU L, BENGIO Y, et al. Gradient-based learning applied to document recognition[J]. Proceedings of the IEEE, Taipei, Taiwan, 1998, 86(11): 2278–2324.
[11] SIMONYAN K, ZISSERMAN A. Very deep convolutional networks for large-scale image recognition[J]. arXiv preprint arXiv: 1409. 1556, 2014.
[12] SZEGEDY C, LIU W, JIA Y, et al. Going deeper with convolutions[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, 2015: 1–9.
[13] SZEGEDY C, VANHOUCKE V, IOFFE S, et al. Rethinking the inception architecture for computer vision[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, 2016: 2818–2826.
[14] HE K, ZHANG X, REN S, et al. Deep residual learning for image recognition[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, 2016: 770–778.
[15] SZEGEDY C, IOFFE S, VANHOUCKE V, et al. Inception-v4, inception-resnet and the impact of residual connections on learning[C]//31st AAAI Conference on Artificial Intelligence, 2017.
[16] XIE S, GIRSHICK R, DOLLÁR P, et al. Aggregated residual transformations for deep neural networks[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, 2017: 1492–1500.
[17] ZOPH B, VASUDEVAN V, SHLENS J, et al. Learning transferable architectures for scalable image recognition[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, 2018: 8697–8710.
[18] HU J, SHEN L, SUN G. Squeeze-and-excitation networks[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, 2018: 7132–7141.
[19] BIANCO S, CADENE R, CELONA L, et al. Benchmark analysis of representative deep neural network architectures[J]. IEEE Access, IEEE, 2018, 6: 64270–64277.
[20] IOFFE S, SZEGEDY C. Batch normalization: Accelerating deep network training by reducing internal covariate shift[J]. arXiv preprint arXiv:1502.03167, 2015.
[21] SANDLER M, HOWARD A, ZHU M, et al. MobileNetv2: Inverted residuals and linear bottlenecks[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, 2018: 4510–4520.
[22] LIU R, LEHMAN J, MOLINO P, et al. An intriguing failing of convolutional neural networks and the coordconv solution[C]//Advances in Neural Information Processing Systems, 2018: 9605–9616.
[23] LIN M, CHEN Q, YAN S. Network in network[J]. arXiv preprint arXiv:1312.4400, 2013.
[24] NEWELL A, YANG K, DENG J. Stacked hourglass networks for human pose estimation[C]//European Conference on Computer Vision. Springer, 2016: 483–499.
[25] SHRIVASTAVA A, SUKTHANKAR R, MALIK J, et al. Beyond skip connections: Top-down modulation for object detection[J]. arXiv preprint arXiv:1612.06851, 2016.
[26] LIN T-Y, DOLLÁR P, GIRSHICK R, et al. Feature pyramid networks for object detection[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, 2017: 2117–2125.
[27] KONG T, SUN F, YAO A, et al. RON: Reverse connection with objectness prior networks for object detection[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2017: 5936–5944.
[28] FU C-Y, LIU W, RANGA A, et al. DSSD: Deconvolutional single shot detector[J]. arXiv preprint arXiv:1701.06659, 2017.
[29] ZHANG S, WEN L, BIAN X, et al. Single-shot refinement neural network for object detection[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, 2018: 4203–4212.
第二部分 应用
第9 章 计算机视觉
第10 章 自然语言处理
第11 章 推荐系统
第12 章 计算广告
第13 章 视频处理
第14 章 计算机听觉
第15 章 自动驾驶
作者随笔 诸葛越
现任 Hulu 公司全球研发副总裁,中国研发中心总经理。曾任 Landscape Mobile 公司联合创始人兼 CEO,前雅虎北京研发中心产品总监,微软北京研发中心项目总经理。诸葛越获美国斯坦福大学计算机硕士与博士学位、纽约州立大学石溪分校应用数学硕士学位,曾就读于清华大学。2005 年获美国计算机学会数据库专业委员会十年最佳论文奖。诸葛越是畅销书《魔鬼老大,天使老二》作者,《百面机器学习》主编。
《百面机器学习》出版时编辑调侃说这是“作者智商总和最高的书”,那么,《百面深度学习》战胜它了!这是 28 位Hulu小伙伴们集智慧之精华向大家奉献的又一本有用、有趣、“有深度”的深度学习入门书。这本书不是教科书,不是论文,而是实用的原创深度学习入门书。希望携手所有对深度学习有兴趣的朋友、同行们,共同探索这个方兴未艾的新领域。
江云胜
2016 年毕业于北京大学数学科学学院,获应用数学博士学位。毕业后加入 Hulu 北京研发中心的 Content Intelligence 组,负责与内容理解相关的研究工作。
有一段时间为了写这本书,我每天下班背着电脑回家,经常写作到深夜或凌晨,直到电脑没电。每当这个时候就会想起“你若不休息,它就不断电”的广告词,其本意是宣传电脑续航能力的,而那时我的状态却是“它若不断电,我就不休息”,不免感慨,特别累的时候就在心里安慰自己:也许在深夜里写深度学习的书会显得更加有“深度”吧。在即将成书之际,回望整本书的创作过程,很多时候首先想到的并不是那些里程碑式的事件或时间节点,而是一些点滴细节,甚是奇妙。最后,希望这本书不只是带给你一百多道面试题,如果它能够让你了解到深度学习领域中精彩而有趣的“一面”,亦足矣。
白燕
现北京大学计算机系在读博士,曾任 Hulu 算法工程师,是ISO/MPEG 国际标准组织专家库成员,拥有多项被国际标准采纳的核心视觉技术。在计算机视觉领域发表学术论文十余篇。
我有着奇妙的经历:硕士毕业后,加入了Hulu,并有机会参与本书的撰写;而在本书收尾时,我又回到了校园,开启博士的学习生涯。这期间,我的口号也从“做有趣的工作”变成了“做真正有用的工作”。这是一个充满机遇的时代,我们正迎来新一轮的科技革命。而正在看这本书的你,正是这轮革命的重要参与者。在本书中,我们使用了近一半的篇幅深入浅出地分享了深度学习在一些产业中的应用。希望这本书能对你即将开启或已经开启的职业生涯有所助益。
谢晓辉
现任 Hulu 首席研究主管,本科毕业于西安交通大学,获北京邮电大学博士学位,先后在松下电器研发中心、前诺基亚北京研究院和联想核心技术研究室有多年的研究经历,专注于模式识别、图像视频文本等多媒体信息处理、用户理解与智能推荐算法以及人机交互等相关研究领域,并对研究成果的产品化有丰富经验。
“两岸猿声啼不住,轻舟已过万重山。”
近十年来,新的深度神经网络结构、自动化网络搜索算法、网络模型压缩设计等技术层出不穷,如果用上面的诗句来形容深度学习的飞速发展,一点也不为过。掌握深度学习的核心概念,同时把握模型和算法演进的思想,并能深刻理解模型的本质,这些对有志于从事算法研究和开发的同学们而言尤为重要。这本书由多位 AI 算法工程师合力完成,希望它可以成为大家研习深度学习的有力助手。
韦春阳
2012年毕业于北京大学,毕业后加入 Hulu 北京研发中心,现任广告算法研究主管。从事计算广告相关算法研究工作近 8 年,致力于应用机器学习、深度学习优化广告投放效率和用户观看体验等应用研究。
还记得2012年我开始接触深度学习时,仅停留于纸上谈兵,懵懂于如何与手头工作挂钩。近几年,我们欣喜地看到,随着存储计算能力的增长,深度学习以及人工智能在越来越多的领域落地,大展宏图。无论是自动驾驶、人脸识别,还是推荐系统、计算广告,深度学习的应用已慢慢渗透到我们生活中的方方面面。本书除了算法与模型的讲解,还加入了应用的部分。希望本书除了作为一份面试宝典外,还能启发读者探究深度学习背后的奥妙,思考深度学习到底能为人类带来什么。
王雅琪
2015 年本科毕业于清华大学电子工程系,2017 年硕士毕业于清华大学电子工程系,主要研究方向为智能图像处理。曾就职于美国加州思科系统公司创新实验室。现任 Hulu 算法工程师,从事与视频内容理解和用户理解相关的算法研究工作。
深度学习不仅善绘画、精诗赋,能下棋、会开车,而且可以丰富和延展与之相关的每个个体的人生。我从大三时对一个掌纹识别的课外研究项目产生兴趣,到后来从事计算机视觉、生成式对抗网络的算法研究,再到现在将深度模型应用于商业产品,自己也在随着深度学习的日新月盛而不断精进成长。我与深度学习的故事不仅包含在做过和写过的一道道面试题里,不仅包含在“码”过的代码和建过的模型里,更包含在和同事就深度学习展开的各种神奇想法的讨论中。希望这本浓缩了众多作者在深度学习领域的思考和实践经验的书,能够帮助读者在各自的深度学习世界探索道路上披荆斩棘、有所收获。
徐潇然
我2005年从河北考入北京大学信息科学技术学院,有幸成为最早一批进入智能科学系的同学。选择 AI 既是我的初心,也是我的使命。在此后人生辗转的岁月,我留过学,创过业,在业内的顶级会议发表过论文,追随过“大佬”的脚步。无论是顺境还是逆境,都未曾动摇我追寻AI答案的信念。
有时不妨放下论文,把目光从公式图表上移开,去仰望星空,思考一些终极问题。我常想:实现通用 AI,还有哪几步要走?我的答案是这样的。第一步,大一统的模型构造。不为目标分类检测,也不为自动翻译,智能的“大脑”不应仅围绕具体问题设计,而应快速适应解决任何具体问题。第二步,自发的学习动力。学习过程不能简单视作数学优化过程,学习不等于数据拟合,它是知识创造、概念发现的探索过程,数学优化在局部演化中发挥作用。第三步,Agent 任务体系。人非生而聪明,良好的教育体系对人的成才很重要,Agent 的“成才”同样需要好的“教育体系”。第四步, Human-Agent 交互生态。有监督学习,人类扮演老师;强化学习,人类扮演主人;Agent 与人类的交互应更多样。你的答案呢?
邓凯文
现任 Hulu 算法工程师,本科和硕士均毕业于清华大学工程力学系。设计过飞机,也调教过模型。研究领域主要是计算机视觉,在推荐系统和异常检测方面也做了些微小的贡献。
我们组里常讨论一个问题,人和机器模型究竟有什么区别?在我看来,人就是一个元学习器的集合,我们在人生的一个阶段遇见了问题,遭遇了挫折,积累了经验,就相当于模型在这个子领域问题上进行了一步迭代。比如在中学阶段我们为提高应试能力不断地刷题,然而当我们跨越这个阶段后则会开始反思“高考是否是唯一的出路”“应试能力是否真的重要”等问题,这相当于在“刷题模型”之外包上了一层元学习器。在人生中,我们不仅在一个个问题内进行迭代学习,也在不断地向外和向上走,寻找新的更本质的问题。希望大家在读这本书时能在深度学习各子领域内快速收敛,但更重要的是找到自己喜爱的方向,在人生的超元问题上有所收获,把自我的奋斗和历史的进程结合起来,走出一条与众不同的路。
高鹏飞
硕士毕业于清华大学电子工程系,2018 年加入 Hulu,现任算法工程师。
深度学习在近十年有了飞速的发展,各行各业中都能找到结合深度学习技术的应用实例。深度学习是在让计算机能够更加自动化地替代人类工作的愿景下诞生的技术,事实也证明,深度学习能够帮助我们摆脱一些重复而且琐碎的日常工作,甚至能够助力一些像自动驾驶技术等曾经只有在科幻电影中才会出现的应用。虽然目前深度学习算法仍不算完美,但是自己能够参与其中,做一些微小的贡献,也是一件足以令我兴奋的事情了。
向昌盛
2018 年硕士毕业于清华大学软件学院,同年加入 Hulu。现就职于 Hulu 智能广告部门,从事库存预测、无监督聚类等广告算法的研究工作。
很感慨自己能够参与本书的写作,能够在 Hulu 和一群优秀的同事一起完成这样一件很有意义的事情。作为一名普通的程序员,我感到非常幸运,能够处身于这场人工智能的浪潮中,可以利用现在的技术去更好地改变我们的社会。回想当时,自己也是在暑假期间阅读了大量的论文和书籍才对现在的深度学习有了一点基本的了解,也为后来进行更多相关的研究打下了基础。所以衷心地希望本书能够帮助到有志于从事相关研究的读者。
王芃
王芃(péng,形容草木茂盛),本科毕业于上海交通大学信息安全工程学院,硕士毕业于欧盟的 Erasmus Mundus 项目,博士毕业于法国里昂大学,主修计算机视觉。曾任佳能中国信息研究中心高级研究员。2018 年加入 Hulu,从事视频内容分析、用户理解方面的研究工作。
刚刚加入 Hulu 的时候恰逢《百面机器学习》一书进入收尾工作,见证了“葫芦娃”不舍昼夜、一丝不苟地完成最后的校对工作。当时的感想主要有两个:一是感叹,感叹“一本书的诞生是如此不易,因为它凝聚了无数人的心血”;二是遗憾,遗憾没能赶上这个好机会,没能为这本书贡献自己的绵薄之力。
没想到,一年之后,“葫芦娃”再次收到了出版社的邀约。这次我们要继续编写一本更加深入细致的深度学习工具书,我也有幸加入到这本书的创作中。这本书结合了自己这些年在工业界的研究工作成果,以及自己对于计算机视觉的一些理解。虽然自己在写作中追求尽善尽美,但难免有考虑不够全面和深入之处,还请大家海涵。
于润泽
本科和硕士均毕业于北京大学,主要研究方向是计算机视觉。自 2016 年开始在 Hulu 实习,从事与视频内容理解相关的算法研究工作。
平时侃侃而谈的理论和想法在写作时要反复推敲、字字斟酌。在阐述问题背景、理论支持、解决方案时要思路清晰、逻辑严谨。同时,为确保内容严谨,还要仔细查阅资料,多方校验后方可定稿。在这个过程中,虽耗费不少时间但也让自己受益匪浅。本书包括理论与应用两部分,先将深度学习的算法理论娓娓道来,随后引出重要的应用场景。本书通过问答的方式简明扼要地梳理知识脉络,让更多感兴趣的人得以了解深度学习研究中正在解决的问题及现有进展。
吕天舒
北京大学信息科学技术学院智能科学系 2015 级博士生,研究方向为图数据挖掘。2018年至 2019 年,先后在 Hulu Reco、淘宝信息流、Google Payments 团队中实习。
去年看包豪斯设计展,对一个观点印象深刻,“艺术的美感源于自然的秩序与人天生的秩序感”。纷繁的万事万物,其运行的秩序可以抽象为图;人的意识,其生物学基础被认为是神经元网络的活动;机器智能,其工作原理是习得数据之间复杂的关联性。图以简驭繁,是能够关联起数字世界、艺术、自然与人的中间媒介。再次读到一字诗《生活》,“网”,不禁要感叹一句:“妙啊!”
有幸撰写了本书的图神经网络一章,感谢有此机会与读者分享我在研究和实习中的一些思考。
马舒蕾
毕业于北京大学信息科学技术学院,主要研究方向为自然语言处理。现任 Hulu 研发工程师,从事与广告算法开发相关的工作。
如果说机器学习的发展史是一幅画,那么深度学习绝对是其中浓墨重彩的一笔:从不被学术界认可到成为主流研究方向,再到 AlphaGo 横空出世,深度学习逐渐成为各个领域突破的关键技术。本书也在这样的机遇下应运而生,书中的每一个问题和解答都凝聚了“葫芦娃”独到的理解和思考。有幸作为“葫芦娃”的一员参与本书的编写,是我人生中一次宝贵的体验。希望本书和前作一样,不论是对处于面试中的求职者,还是对深度学习有兴趣的研究者,都能够有所启发。
杨佳瑞
清华大学博士,Hulu 资深算法工程师,研究方向为推荐系统的算法与实现。
曾有一位智者告诉我,做算法data > feature > model > trick。我在 Hulu 的工作经历印证了这一论断。模型训练数据集的质量、样本标注的方式对模型线上效果的影响是巨大的。甚至完全一样的模型,仅仅改了一下数据集就可以获得线上效果的大幅提升(例如点击率提升 40%)。特征是模型拟合能力的上限,好的特征工程可以远超模型调优。那么模型真的就如此不堪吗?不是的,基础模型的更新带来的可能是业界范式的革命,比如深度学习就改变了整个 AI 领域。在推荐算法领域,YouTube 双塔神经网络推荐模型就是一个典型的例子。但总的来说,这样的例子并不多。
段祎纯
毕业于北京大学,毕业后加入 Hulu,从事机器学习算法在推荐系统上的应用和研究工作。
机器学习是一种代表着人类不断地对自身的智慧进行努力探索的学问。即使它的理论还远未成熟,也已经能够与现实中的很多应用碰撞出灿烂的火花。它是认识世界也是改造世界的武器,不断对我们的世界产生影响。在理解和运用它的过程中,人们总是能发现新的惊喜和挑战。机器学习理论当然是富有魅力的,我个人却对机器学习与世界发生交互的过程更感兴趣,机器学习的可塑性与现实世界的复杂性在这一碰撞的过程中淋漓尽致地呈现出来。一个算法在真正运用到实践中的时候,往往会呈现出设计者也没有想到的某种特性,用户也往往会有出人意料并值得深思的表现。这个反复学习、理解和迭代的过程,正是这一工作的美妙之处。
很惊讶也很高兴自己能参与到这本书的写作中,为本书做出一点微小的贡献。希望读者能在阅读的过程中体验到机器学习世界的优雅和广阔,更希望读者将来能在相关工作中感受到它带来的乐趣。
谢澜
2018 年毕业于北京大学,获计算机应用硕士学位。毕业后加入 Hulu Video Optimization 组,从事视频传输 QoS 优化的工作。
随着机器学习技术的发展,它的应用已经渗透到各个领域,从最开始的图像处理、自然语言处理,到后来的推荐系统、人机交互、音视频技术等。前人为机器学习的理论打下了坚实的根基,后人将这些理论灵活地应用。在写作的过程中,我也在更进一步思考自己所在的领域如何能够结合机器学习来进行优化,是否有优化空间,如何进行优化,其中的原理是什么……也许要回答这些问题是求索的过程,但正是这些求索让我们做到极致。
黄胜兰
本科毕业于北京邮电大学,后于伦敦大学玛丽女王学院获得博士学位。现任 Hulu 北京研发中心 Video Optimization 组高级研究员,主要研究方向为视频端到端的传输网络优化、用户播放体验优化等。在视频相关领域发表论文十余篇,获得5项国际专利授权。
尤瓦尔·赫拉利曾在《未来简史》一书中提到,智人之所以在 7 万年前走到地球顶端,是因为认知能力有了革命性的进展。而人类即将要迎来的第二次认知革命,就是人工智能。人工智能对我们人类的改变决不仅仅在于带来自动化的汽车、精准的推荐,而在于改变我们人类本身,包括我们的情感和信仰。我们何其有幸,能在这样一个伟大的时代成为历史车轮的推动者。最后只愿本书为读者带来阅读的乐趣,让我们一起徜徉在科学的海洋,探索未知的魅力。
许春旭
2017 年毕业于清华大学,获得工学博士学位,主要研究方向为计算机图形和计算几何。同年加入 Hulu,从事推荐算法相关研究工作。
从 2017 年毕业算起,在 Hulu 推荐算法组工作的近3年时间里,我有幸见证并参与了 Hulu 的线上推荐系统从传统的协同过滤算法转到基于深度学习的排序、召回算法的过程;同样幸运的是,可以参与到这本书的编写中来,可以和对深度学习相关领域有共同兴趣的读者分享一些自己的浅见。虽然在编写过程中尽力完善每个细节,力求准确无误,但限于水平,一些错误和疏漏无法避免,希望得到读者朋友对相关内容的不吝批评和悉心指正。
刘辰
本科就读于西安交通大学,研究生毕业于中国科学院大学。现任 Hulu 资深算法工程师,负责视频编解码算法研究及视频转码处理相关项目,申请相关领域专利十余项。
视频编解码可以说是信息技术领域里比较“古老”的一个门类了,说起人工智能(AI)在这个门类里的应用,想起来一位行业前辈曾说过,视频编解码其实是最早应用“人工”智能的领域。只是 AI 中的人工是人造的意思,而这位前辈说的人工是指人力做的工。在视频编解码领域,大批的研究者人工分析数据、调整参数,使这套编码算法框架不断向最优解逼近。诚然,这位前辈玩了一个谐音梗来回应人工智能和视频编解码的关系,或标榜,或自嘲,我们不妄加揣测。但我们可以看到其中的一层含义,即视频编解码中应用的很多解决问题的思路和以深度学习为代表的人工智能的思路在某种层面上是相通的。
在这个“古老”的、经过数十年“人工”智能优化的领域里,我们梳理了近几年深度学习在其中应用的一些成功案例,并在本书视频处理一章做了较为详细的介绍。我们有理由期待,深度学习和视频编解码在未来能碰撞出更多的火花。
王书润
本科和硕士毕业于北京大学,博士毕业于香港城市大学,学习和研究的方向是基于深度学习的图像视频压缩编码。当前研究方向为异质跨视觉大数据压缩编码方法,主要有面向感知人工智能的视觉数据压缩、基于人工智能的图像视频压缩等。
由于新冠肺炎而度过了最长寒假的自己,回想本书的成书过程,顿觉时光荏苒。我还记得数年前懵懵懂懂步入图像视频处理的大门,感恩于恩师及同门的指导和帮助,也有幸邂逅 Hulu 并参与本书的编写。尽管自己只负责其中一小部分的编写,但仍觉肩负重担,如履薄冰。在编写整理的同时,我愈发意识到未知的广阔和自身的渺小,也希望这本书能给同行者带来启发,同时也鞭策自己不断前行。
郑凤鸣
本科和硕士均毕业于北京邮电大学。2018 年硕士毕业后加入 Hulu 用户科学组,担任算法工程师一职。主要从事为处于不同生命周期的用户在站外运营渠道(邮件、推送)上进行视频推荐的工作。
对我来说,能够加入这本书的作者团队,和同事一起合作完成这本关于深度学习的面试宝典,是件非常荣幸的事。写书对于我来说是一次全新的尝试和挑战。在撰写的过程中,为了将问题和解答清晰、浅显地表达出来,我们查阅了大量的相关资料,反复地校对、打磨文字和修改图片。这段经历也使我认识到自身的不足,对相关的深度学习知识有了进一步的理解。希望阅读本书的读者,能够利用书中的知识解答关于深度学习的一些疑惑,进一步了解深度学习的基础知识及相关应用。这也是我们创作的初衷。当然,书中难免有不足或者不够准确的地方,烦请读者提出宝贵的意见,以帮助我们改正和进步。
武丁明
本科毕业于清华大学自动化系,博士毕业于清华大学,专业方向为生物信息学。在 Hulu 工作4年,担任广告组算法研究员。
在大家的通力合作下,我们终于完成了一本专注于深度学习的面试集锦。根据我的了解,在计算广告领域,基于深度学习的方法在一些目标明确可量化、数据维度很高的问题上取得了胜于其他机器学习方法的效果。然而计算广告是一个庞大复杂并且和具体业务场景结合十分紧密的领域,非深度学习的机器学习方法,甚至是非机器学习的其他算法在很多具体项目上也占据着核心算法的地位。
李凡丁
毕业于北京大学信息科学技术学院智能科学系。现任 Hulu 研发工程师,从事自然语言处理相关工作。
一年前完成《百面机器学习》的时候,我其实是抱着功成身退的心态回到工作中的。没想到一年之后又受到《百面深度学习》的召唤,重新加入“葫芦娃”写书团队中。一年的工作和生活经历了很多,也收获了很多。希望本书能对读者熟谙科学研究、数据分析、人工智能之脉络有所助益。
冯伟
清华大学博士,研究方向为社交网络、推荐系统。推荐算法团队负责人,主要承担美剧、电影、直播的排序,以及相关内容的推荐。在数据挖掘、机器学习国际知名会议 KDD、ICLR、IJCAI、WWW、WSDM、ICDE 上均有论文发表。平常喜欢广泛涉猎 AI 的最新进展,也喜欢了解AI 落地背后的种种趣闻。
在参与本书的编写过程中,我致力于用最简单的语言和例子来让推荐系统的内容变得通俗易懂。同时也深深体会到了写作对我理解算法的重要性。对于日新月异的机器学习算法,我既兴奋又焦虑。兴奋是因为同行每天都在突破自己,达到新的高度。焦虑是因为作为个体,我们只能掌握其中一二。希望这本书能给初学者乃至同行带来帮助,提供不同的视角。在工业界实践探索,最有成就感的莫过于看到算法驱动核心指标的增长,而这背后伴随着一次又一次的试错与纠正,希望能与读者共勉、一起进步。
王翰琪
分别于 2012 年和2017 年在浙江大学计算机科学与技术学院获得工学学士学位和工学博士学位,期间主攻机器学习在跨媒体数据语义挖掘与理解中的应用。毕业后加入 Hulu,现任用户科学组资深研究员,在预测用户转化、内容推送的个性化体验等方面做了一点微小的贡献。
记得刚毕业加入 Hulu 时,恰逢同事们热火朝天地撰写《百面机器学习》,得以提前一览了其中不少章节。那时,我时而为书中的独到观点而击节赞叹,时而为其中的疑难问题而埋头苦思,时而又为某个犀利的面试题而暗暗心惊:这题我好像不会!
时光流转,Hulu的同事们总结新的经验与知识,推出了本书;而今天的我也得以在其中贡献一二。希望本书能绍述前篇,再次为读者朋友们展现算法之美;也希望读到这里的你,与我一道,在工作与生活中不断探索、不断进步。
张昭
毕业于北京大学信息科学技术学院智能科学系,现任 Hulu 广告算法工程师。
曾几何时,算法还是计算机的一个小众领域和方向,如今随着深度学习的爆发式增长,高校和企业也逐渐意识到算法对于实际生产力有着巨大的作用。我作为算法领域的一名从业者,依然时常钦佩于算法中那些绝妙的构想,能够借由此书和读者朋友分享一些看法,我感到非常高兴。
石奇偲
湖北黄石人,2015 年毕业于清华大学交叉信息研究院,获硕士学位,主要研究 NP-Hard 问题的近似算法。毕业后就职于 Hulu,现任 Hulu 研发工程师,从事推荐系统及算法的研发工作。
研究生阶段从事理论计算机科学方向的学习和研究,常常让我感受到理论问题设定之简洁和问题解决方法之优雅,但是偶尔也困惑于它们是否能在工业界的实际应用中起作用。工作之后有机会转向推荐系统及算法的研发工作,发现很多问题的解决方法里都有着它们的身影。譬如多臂老虎机问题,因为在工业界有很多与之对应的场景,而业务上这些场景很重要,甚至有针对业务场景的不同设定,所以反过来促进了学术界在这个问题上的研究发展。
在这本书里,希望能和读者分享一些实际业务中遇到的问题及解决方法。在对实际业务的问题解决过程中,怎样结合已有的理论知识、模型结构,结合具体问题的特性设计出更符合业务场景的模型或做出合适的改进。抽象出这些问题,分析并解决它们是一件既有挑战又有乐趣的事情。