第一部分 算法和模型
第1章 卷积神经网络
01 卷积基础知识
简述卷积的基本操作,并分析其与全连接层的区别
- 全连接层中输出层的每个节点会与输入层的所有节点连接
- 卷积层通过特定数目的卷积核对输入的多通道特征图进行扫描和运算,从而得到多个拥有更高层语义信息的输出特征图(通道数目等于卷积核个数)
-
为了保证输出特征图的尺寸满足特定要求,对输入特征图进行边界填充(padding)
-
卷积具有局部连接和权值共享等特性
- 局部连接:卷积核尺寸远小于输入特征图的尺寸,输出层上的每个节点都只与输入层的部分节点连接;在全连接层中,节点之间的连接是调密的,输出层每个节点会与输入层所有节点都存在关联。
- 权值共享:卷积核的滑动窗口机制使得输出层上不同位置的节点与输入层的连接权值都是一样的(即卷积核参数);而在全连接层中不同节点的连接权值都是不同的。
- 输入/输出数据结构化:局部连接和权值共事,使得卷积操作 能够在输出数据中大致保持输入数据的结相信息;若是将结构化信息(如二维图像)输入全连接层,其输出数据会被展 成扁平的一维数组,从而丧失输入数据和输出数据在结构上的对应关系。
在卷积神经网络中,如何计算各层的感受野大小
- 由于卷积的局部连接性,输出特征图上的每个节点的取值是由卷积核在输入特征图对应位置的局部区域内进行卷积而得到的,因此这个节点的取值会受到该卷积层的输入特征图(即上一层的输出特征图上的某一局部区域内值)的影响
- 感受野的定义是,对于某层输出特征图上的某点,在卷积神经网络的原始输入数据上能影响到这个点取值的区域
- 若第 i层为卷积层或池化层,则其感受野大小为与前面层的卷积核大小、步长等有关
- 若第i层为激活层、BN层,则其感受野大小与前一层感受野大小相同
- 若第i层为全连接层,则其感受野大小为整个输入数据全域
卷积层的输出尺寸、参数量和计算量
-
输出尺寸 \(l_e^{(o)} = \frac{l_{e}^{(i)}+2 p_{e}-k_{e}}{s_{e}}+1\)
-
卷积层的参数量主要取决于每个卷积核的参数量和卷积核个数
-
卷积层的计算量由卷积核在每个滑动窗口内的计算量以及整体的滑动次数决定
02 卷积的变种
简述分组卷积及其应用场景
-
在普通卷积操作中,一个卷积核对应输出特征的一个通道,而每个卷积核会作用在输入特征图的所有通道(即卷积核的通道数等于输入特征图的通道数),因此最终输出特征图的每个通道都与输入特征图的所有通道相连接
-
分组卷积将输入通道和输出通道都划分为同样的组数,然后仅让相同组号的输入通道和输出通道进行连接。分组卷积能够将卷积操作的参数量和计算量都降低为普通卷积的$1/groupSize$
简述空洞卷积的设计思路
- 一般采用池化操作 (pooling) 来扩大特征图的感受野,但这同时会降低特征图的分辨率,丢失一些信息(如内部数据结构、空间层级信息等) ,导致后续的上采样操作(如转置卷积)无法还原一些细节
- 空洞卷积引入扩张率(dilation rate)来指定相邻采样点之间的间隔,以增加卷积核的感受野。(扩张率为1的空洞卷积即为普通卷积)
简述转置卷积的主要思想及其应用场景
- 普通卷积主要用来特征特取,压缩特征图尺寸
- 转置卷积主要用于对特征图进行扩张或上采样,常用于语义/实例分割、HeatMap可视化、图像自编码器、生成对抗网络
可变形卷积旨在解决哪类问题
-
普通的卷积操作是在固定的、规则的网格点上进行数据采样,这限制了网格的感受野形状,限制了网格对几何形变的适应能力
-
可变形卷积在卷积核的每个采样点上添加一个可学习的偏移量(offset),空洞卷积可以看作是一种特殊的课变形卷积。
- 可变形卷积引入了一个平行分支来端对端地学习卷积核采样点的位置偏移量,然后再在输入特征图上采样对应的点进行卷积运算
-
可变形卷积的采样点能根据当前图像的内容进行自适应调整
- 可变形卷积让网络具有学习空间几何形变的能力
$1\times1$卷积核的作用
- 跨通道信息的融合
- 通过对通数的降维和升维,减少计算量
03 网络模型的整体结构和基础模块
简述卷积神经网络近年来在结构设计上的主要发展和变迁(从AlexNet到ResNet系列)
- AlexNet
- VGGNet
- GoogLeNet/Inception-v1
- Inception-v2/v3
- ResNet
- Inception-v4/Inception-ResNet
- ResNeXt
Inception系列的演化
- v1:
- 创新的单元结构,多个filter size用于定位图片中不同size 的object
- 在backbone中引入GoogLeNet,其中有两个辅助损失函数(防止梯度消失)
- v2:
- 把v1中$5\times 5$filter换成了两个$3 \times 3$,感受野不变,提高了速度
- 把$3\times 3$filter换成了$1\times 3+3\times 1$
- v3:
- RMSProp Optimizer
- Factorized $7\times 7$ convolutions
- BatchNorm in the Auxillary Classifers
- Label Smoothing
- v4:
- 修改了Inception的Stem
- 添加了Reduction Block,如从$35\times 35$降至$17\times 17$
-
Inception-ResNet:
- 在Inception的基础上加入了ResNet
ResNet和Inception结构对比
-
ReNet模块直接将卷积后的值相加,Inception是对通道数进行叠加
-
ResNet直接将结果进行了激活,Inception在每个卷积之后都进行了激活
resnet和densenet的区别
-
对于ResNet而言,I层的输出是I-1层的输出加上对I-1层输出的非线性变换
-
对于DenseNet而言,I层的输出是0到I-1层的输出的concatenation
-
DenseNet可以综合利用浅层复杂度低的特征,因而更容易得到一个光滑的具有更好泛化性能的决策函数。因此DenseNet能够很好的解决过拟合问题,对于小数据集的情况下效果好于ResNet
mobilenet v1/v2/v3介绍
-
v1: 把VGG中的标准卷积层换成了深度可分离卷积
-
v2:
-
Invertrd Residuals (倒残差):在 ResNet 的残差结构中,先降低通道数再卷积(减少计算量),再调整通道数后与输入合并。(两头大中间小)。而在 Inverted Residual Block 中,为了避免过少的通道数导致信息损失,先将通道数进行了扩增(深度可分离卷积已经实现了较小的计算量,增大通道数可以有效避免信息损失),再减少。(两头小中间大)
-
Linear BottleNeck (线性瓶颈):当通道数较少时,用 ReLU 激活函数会造成严重的信息损失,故用线性激活函数代替
-
-
v3:
-
网络的架构是基于NAS实现的MnasNet
-
引入了v1中的深度可分离卷积和v2中的具有线性瓶颈和倒残差结构
-
引入了基于squeeze and excitation结构的轻量级注意力模型
-
引入了一种新的激活函数h-swish(x)
-
NAS中结合了platform-aware NAS和NetAdapt
-
修改了MobileNetV2网络端部的最后阶段
-
解释squeezenet block
解释 shufflenet
批归一化是为了解决什么问题?它的参数有何意义?它在网络中一般放在什么位置?
-
主要作用是确保在训练过程中,网络中的各层即使参数发生了变化,其输入/输出数据的分布也不能产生较大变化,从而避免发生内部协变量偏移现象
-
采用批归一化后, 深度神经网络的训练过程更加稳定,对初始值不再那么敏感,可以采用较大的学习率来加速收敛
-
批归一化过程中有两个可学习的参数$\beta$和$\gamma$,可以为每个神经元自适应地学习一个分布,保证激活单元的非线性表达能力 \(y^{(k)}=\gamma^{(k)} \frac{x^{(k)}-\mu^{(k)}}{\sqrt{\left(\sigma^{(k)}\right)^{2}+\varepsilon}}+\beta^{(k)}\)
- 上标$k$表示数据的第$k$维,批归一化在数据各个维度上是独立进行的
-
从具体实践来看,批归一化层一般放在激活层之后
batch normalization是否可以防止过拟合
- BN的核心思想不是为了防止梯度消失或者防止过拟合,其核心是通过对系统参数搜索空间进行约束来增加系统鲁棒性,从而带来一系列的性能改善,如加速收敛、保证梯度、缓解过拟合
BN的优点
- BN允许网络使用饱和性激活函数(如sigmoid、tanh),缓解网络梯度消失
- BN使得网络中每层输入数据的分布相对稳定,加速模型学习速度,允许更大的学习率
- BN使得模型对网络中的参数不那么敏感,简化调参过程,使得网络学习更加稳定
- BN具有一定的正则化效果,提高网络泛化能力,防止过拟合
BN的前向传播和反向传播?
-
前向传播:对样本求均值和方差
-
反向传播:
Group Normalization介绍
- BN是以batch的维度做归一化,过小的batch size会导致其性能下降
- GN将channel分为许多组(group),对每一组做归一化
用于分类任务的卷积神经网络的最后几层一般是什么层?在最近几年有什么变化?
-
用于分类任务的卷积神经网络,其前面若干层一般是卷积层、池化层等,但是网络末端一般是几层全连接层(结合局部和全局信息)
-
分类网络在卷积层之后、最后一层之前通常采用全局平均池化,其与全连接层有着相似的效果(可以提取全局信息) ,并且有如下优点
- 参数量和计算量大大降低
- 具有较好的可解释性,如可以知道特征图上哪些点对最后的分类贡献最大
卷积神经网络中的瓶颈结构和沙漏结构提出的初衷是什么?可以应用于哪些问题?
- 瓶颈结构
- 计算比较大的卷积层之前, 先用一个 1 x 1 卷积来压缩大卷积层输入特征图的通道数目,以减小计算量
- 在大卷积层完成计算之后,根据实际需要,有时候会再次使用 一个 1 x 1 卷积来将大卷积层输出特征图的通道数目复原
- 沙漏结构(一般包括两个分支)
- 自底向上( bottom-up )分支:利用卷积、 池化等操作将特征图的尺寸逐层压缩(通道数可能增加) ,类似于自编码器中的编码器
- 自顶向下 (top-down) 分支:利用反卷积或插值等上采样操作将特征图的尺寸逐层扩大(通道数可能降低) ,类似于自编码器中的解码器
怎样的函数可以作为激活函数,激活函数的作用?
- 满足非线性、几乎处处可导、单调的函数可以作为激活函数
- 激活函数的主要作用是在神经网络中引入非线性因素,即神经网络的非线性是通过非线性的激活函数和多层网络融合叠加实现的
常见激活函数的对比
- Sigmoid:
- sigmoid函数比较适合用于二分类问题
- 缺点:对于sigmoid函数,其输出始终为正,这会导致导致在深度网络训练中模型的收敛速度变慢,因为在反向传播链式求导的过程中,权重更新的效率会降低;同时导致下一层的输入不是0均值的,随着网络的加深可能会使得原始数据的分布发生改变
-
ReLU
-
优点:
- 相比sigmoid和tanh函数,使用梯度下降法时收敛速度更快;
- 只需要一个门限值即可得到激活值,计算速度更快;
- ReLU有单侧抑制,会使一部分神经元的输出为0,使网络稀疏性,减少了参数相互依存关系,缓解了过拟合问题;
- ReLU解决了sigmoid导致的梯度消失/爆炸问题,因为ReLU的导数在正数部分恒等于1
-
缺点:ReLU的输入值为负的时候,输出始终为0,其一阶导数也始终为0,这会导致神经元不能更新参数,即“Dead Neuron”
-
解决ReLU神经元“死亡”的问题:
- 采用Leaky ReLU等激活函数,在Relu函数的负半区间引入一个Leaky值,对负值输入有很小的坡度
- 设置较小的学习率进行训练
- 使用momentum优化算法动态调整学习率
-
-
Tanh
- RNN中常用tanh函数作为激活函数,而不用ReLU。因为ReLU的导数只能为0或1,而导数为1的时候在RNN中容易造成梯度爆炸
- 因为在RNN中,每个神经元在不同的时刻都共享一个参数$W$,因此在前向和反向传播中,每个神经元的输出都会作为下一个时刻本神经元的输入,相当于对参数矩阵$W$做了连乘,如果W中有其中一个特征值大于1,在多次累乘之后结果会非常大,从而导致梯度爆炸问题
- 而在CNN中,由于每一层都有不同的参数$W_i$,有的特征值大于1,有的特征值小于1,因此在一定程度上抵消了梯度爆炸的可能
- RNN中常用tanh函数作为激活函数,而不用ReLU。因为ReLU的导数只能为0或1,而导数为1的时候在RNN中容易造成梯度爆炸
Pooling层没有可学习的参数,如何进行反向传播?
-
average pooling在前向传播中,把一个patch中的值取平均传递给下一层的一个像素。因此在反向传播的过程中,将某个像素平均分成n份分配给上一层
-
max pooling在前向传播中,把一个patch中最大的值传递给下一层。在反向传播中,将当前梯度直接传递给前一层的某一像素,而让同一个patch中的其他像素值为0。因此max pooling在前向传播时要记录池化操作时最大像素点的位置,即max_id
在CNN中加入pooling层的作用?
- 增加非线性
- 保留主要特证的同时减少参数和计算量,防止过拟合,提高模型的泛化能力
- invariance(不变性),这种不变性包括translation(平移)、rotation(旋转)、scale(尺度)
- 增大感受野
优点:pooling能够增大感受野,但是在降维的过程中会丢失一部分信息,对segmention要求的精度location会有一定的影响
其他pooling的方法
-
overlapping pooling (重叠池化)
-
Spatial Pyramid Pooling (空间金字塔池化)
04 数据增强及模型训练
如何解决数据集的正负样本不均衡?
- 进行上下采样,上采样是把小众类复制多份,下采样是从大众类中剔除一些样本,或者说只从大众类中选取部分样本
- 数据合成,如smote,利用小众样本在特征空间的相似性来生成新的样本
- 惩罚项,对小类错分进行加权惩罚
如何判断过拟合,以及解决方法
- 当模型在验证集合上和训练集合上表现都很好,而在测试集合上表现很差时,可能出现了过拟合。过拟合的表现为:训练误差很小,而泛化误差很大
- 通过在神经网络中加入dropout来解决
深度学习中的优化算法基本框架介绍
-
计算损失函数关于当前参数的梯度$g_{t}=\nabla J\left(\theta_{t}\right)$
-
根据历史梯度计算一阶动量和二阶动量 \(\begin{array}{l} m_{t}=\phi\left(g_{1}, g_{2}, \ldots, g_{t}\right) \\ V_{t}=\psi\left(g_{1}, g_{2}, \ldots, g_{t}\right) \end{array}\)
- 一阶动量为包含当前梯度在内的历史梯度的一次函数
- 二阶动量为历史梯度的二次函数
-
计算当前时刻的下降梯度 $\Delta \theta_{t}=-\eta * \frac{m_{t}}{\sqrt{V_{t}}}$
-
根据下降梯度更新参数 $\theta_{t+1}=\theta_{t}+\Delta \theta_{t}$
7. 梯度下降法和牛顿法的优缺点?
- 优点:
- 梯度下降法:可用于数据量较大的情况;
- 牛顿法:收敛速度更快;
- 缺点:
- 梯度下降法:每一步可能不是向着最优解的方向;
- 牛顿法:每次迭代的时间长;需要计算一阶和二阶导数;
不同优化函数的优缺点分析
-
SGD:只计算当前梯度更新参数,不考虑历史梯度
-
缺点:如果当前参数处在损失函数的局部最低点,即梯度为0时,参数不再更新,导致陷入局部最优
-
改进策略:
- 引入历史梯度的一阶动量:Momentum、NAG
- 引入历史梯度的二阶动量:AdaGrad、RMSProp、AdaDelta
- 同时引入一阶和二阶动量:Adam、Nadam
-
-
Momentum
-
NAG
-
AdaGrad
-
RMSProp/AdaDelta
-
Adam
-
Nadam
SGD全局优化和mini batch优化
- SGD:
- 由于SGD每次迭代只使用一个训练样本,因此这种方法也可用作online learning。
- 每次只使用一个样本迭代,若遇上噪声则容易陷入局部最优解。
-
mini-batch 的SGD
-
训练步骤:
-
选择n个训练样本(n<m,m为总训练集样本数)
-
在这n个样本中进行n次迭代,每次使用1个样本
-
对n次迭代得出的n个gradient进行加权平均再并求和,作为这一次mini-batch下降梯度
-
不断在训练集中重复以上步骤,直到收敛。
-
-
模型训练常见问题及解决方案
-
loss的问题:
-
1、训练过程中loss为负数: 输入的训练数据没有归一化造成 解决方法:把输入数值通过下面的函数过滤一遍,进行归一化
-
2、怎么看loss和acc的变化 train loss 不断下降,test loss不断下降,说明网络仍在学习; train loss 不断下降,test loss趋于不变,说明网络过拟合; train loss 趋于不变,test loss不断下降,说明数据集100%有问题; train loss 趋于不变,test loss趋于不变,说明学习遇到瓶颈,需要减小学习率或批量数目; train loss 不断上升,test loss不断上升,说明网络结构设计不当,训练超参数设置不当,数据集经过清洗等问题。
-
3、初始学习率设置的问题: 可以从0.0001到0.1每次扩大10倍试验,直到验证集上的loss增大。 一般在0.01-0.1左右
-
4、样本不平衡问题。 样本不平衡呈现长尾分布
解决方法: a、上采样增强 b、下采样增强 c、训练动态加权采样 d、稀少数据专家模型
-
Xavier初始化模型介绍
05 评价指标 metric
F1 score 介绍
-
定义为精确率和召回率的调和平均数 \(F_{1}=2 \cdot \frac{\text { precision } \cdot \text { recall }}{\text { precision }+\text { recall }}\)
- 精准率:计算的是所有”正确被检测的item(TP)”占所有”实际被检测到的(TP+FP)”的比例
- 召回率:计算的是所有”正确被检测的item(TP)”占所有”应该检测到的item(TP+FN)”的比例
ROC曲线介绍及意义
-
TP:正确的肯定数目
FN:漏报,没有找到正确匹配的数目
FP:误报,没有的匹配不正确
TN:正确拒绝的非匹配数目
-
ROC曲线的横坐标是伪阳性率(也叫假正类率,False Positive Rate),纵坐标是真阳性率(真正类率,True Positive Rate)
- 主要作用:
- ROC曲线能很容易的查出任意阈值对学习器的泛化性能影响
- 有助于选择最佳的阈值
- 可以对不同的学习器比较性能
- 优点:
- 将真正例率和假正例率以图示方法结合在一起,可以准确反映某种学习器真正例率和假正例率的关系
- ROC曲线不固定阈值,允许中间状态的存在,利于使用者结合专业知识权衡漏诊与误诊的影响,选择一个更加的阈值作为诊断参考值。
AUC曲线介绍
-
AUC(Area Under Curve)被定义为ROC曲线下与坐标轴围成的面积,AUC的取值范围在0.5和1之间
-
AUC值是一个概率值,当随机挑选一个正样本以及负样本,当前的分类算法根据计算得到的Score值将这个正样本排在负样本前面的概率就是AUC值,AUC值越大,当前分类算法越有可能将正样本排在负样本前面,从而能够更好地分类。
(即:一个正例,一个负例,预测为正的概率值比预测为负的概率值还要大的可能性)
-
计算公式(从AUC统计意义去计算): \(AUC = \frac{\sum_{positiveClass}rank_i-\frac{M(1+M)}{2}}{M\times N}\)
- 统计在所有的正负样本对中,正样本score大于负样本的score的组数
- rank的值代表的是能够产生score前大后小的这样的组合数
IoU和mIoU介绍
- IoU = gt bbox、pred bbox交集的面积 / 二者并集的面积
- mIoU: Mean Intersection over Union(MIoU,均交并比),为语义分割的标准度量。其计算两个集合的交集和并集之比,在语义分割问题中,这两个集合为真实值(ground truth)和预测值(predicted segmentation)。这个比例可以变形为TP(交集)比上TP、FP、FN之和(并集)。在每个类上计算IoU,然后取平均。 \(MIoU=\frac{1}{k+1}\sum^{k}*{i=0}{\frac{p*{ii}}{\sum_{j=0}^{k}{p_{ij}+\sum_{j=0}^{k}{p_{ji}-p_{ii}}}}}\) pij表示真实值为i,被预测为j的数量
mAP介绍
-
mAP: mean Average Precision, 即各类别AP的平均值
-
AP: PR曲线下面积
-
PR曲线: Precision-Recall曲线
-
Precision: TP / (TP + FP)
-
Recall: TP / (TP + FN)
-
TP: IoU>0.5的检测框数量(同一Ground Truth只计算一次)
-
FP: IoU<=0.5的检测框,或者是检测到同一个GT的多余检测框的数量
-
FN: 没有检测到的GT的数量
小结:一般来说,
mAP
是针对整个数据集的;AP
针对数据集中某一个类别;precision
和recall
针对单张图片的某一类别
mAP这个指标,在什么场景下适用,什么场景下会有问题,比如哪些问题?
- 根据训练数据中各个类的分布情况,mAP值可能在某些类(具有良好的训练数据)非常高,而其他类(具有较少/不良数据)却比较低。导致mAP可能是中等的。因此,建议在分析模型结果时查看各个类的AP值。
06 模型压缩及训练加速
简述模型压缩方法
- 模型剪枝
- 模型参数量化
- NAS自动学习模型结构
- 知识蒸馏
深度学习训练加速方法
- 内部方法:
- 网络结构选取,如CNN与RNN,前者更适合并行架构
- 优化算法改进,如动量、自适应学习率
- 减少参数规模:如使用GRU代替LSTM
- 权重参数初始化:如Batch Normalization
- 外部方法
- GPU加速
- 数据并行
- 模型并行
速度指标 FLOPs和FLOPS区分
- FLOPs: 浮点运算次数,可以理解为计算量,用来衡量算法/模型的复杂度
- FLOPS:每秒运算的浮点数,可以理解为计算速度,用来衡量硬件的性能
07 Attention专题
non-local介绍
- 核心思想:在提取某处特征时利用其周围点的信息(周围点可以是空间维度的,也可以是时间维度的)
\[\text { Attention }(Q, K, V)=\operatorname{softmax}\left(\frac{Q K^{T}}{\sqrt{d_{k}}}\right)\]self-attention
第2章 循环神经网络
01 循环神经网络与序列建模
描述循环神经网络的结构及参数更新方式
如何使用卷积神经网络对序列数据建模?
02 循环神经网络中的Dropout
Dropout为什么可以缓解过拟合问题?
-
在卷积神经网络中,Dropout是非常有效的正则化方法。在网络训练阶段,每次迭代时会从基础网络中随机丢弃一定比例的神经元,然后在修改后的网络上进行数据的前向传播和误差的反向传播
- 一方面,Dropout可以看作是集成了大量神经网络的Bagging方法。在训练阶段,Dropout通过在每次迭代中随机丢弃一些神经元来改变网络的结构,以实现不同结构的神经网络的目的;在测试阶段,Dropout则会使用全部的神经元,这相当于之前训练的不同结构的网络都参与对最终结果的投票,以此获得较好的效果。(不同网络之间共享参数)
- 另一方面,Dropout能够减少神经元之间复杂的共适应关系。由于Dropout每次丢弃的神经元是随机选择的,所以每次保留下来的网络会包含不同的神经元,使得在训练的过程中,网络权值的更新不会依赖于隐节点之间的固定关系(网络中每个神经元不会对另一个特定神经元的激活非常敏感,使得网络能够学习到更加泛化的特征)
在循环神经网络中如何使用Dropout?
-
在循环神经网络中,连接层可以分为两种类型:一种是从$t$时刻的输入一直到$t$时刻的输出之间的连接(前馈连接);一种是从$t$时刻到$t+1$时刻之间的连接(循环连接)
- 将 Dropout 用在循环神经网络上,一个较为直观的思路是:只将 Dropout用在前馈连接上,而不用在循环连接上。但是只在前馈连接中应用 Dropout对于过拟合问题的缓解效果并不太理想,这是因为循环神经网络中的大量参数其实是在循环连接中的
- 相关工作提出了基于变分推理的 Dropout方法,将Dropout应用于循环连接,即对于同一个序列,在其所有时刻的循环连接上采用相同的丢弃方法 ,也就是说不同时刻丢弃的连接是相同的
03 循环神经网络中的长期依赖问题
循环神经网络为什么容易出现长期依赖问题?
04 长短期记忆网络
LSTM是如何实现长短时记忆功能的
GRU是如何用两个门控单元来控制时间序列的记忆及遗忘行为的?
LSTM和GRU对比
- GRU将遗忘门和输入门合并为一个更新门,并使用重置门(reset)代替输出门
- 合并了记忆状态
C
和隐藏状态h
05 Seq2Seq 架构
如何用循环神经网络实现Seq2Seq映射?
Seq2Seq框架在编码-解码过程中是否存在信息丢失?有哪些解决方案?
第3章 图神经网络
01 图神经网络的基本结构
什么是图谱和图傅立叶变换?
以GCN为例,简述基于频谱域的图神经网络发展
以GAT、GraphSAGE为例,简述基于空间域的图神经网络的主要思想
02 图神经网络在推荐系统中的应用
简述PinSage的模型设计和实现细节
03 图神经网络的推理能力
基于图神经网络的推理框架有何优势?
简述图神经网络的推理机制在其他领域中的应用
第4章 生成模型
01 深度信念网络与深度波尔兹曼机
简单介绍RBM的训练过程
- 在训练时,RBM以最大化数据似然为目标
DBN与DBM有什么区别?
- 在模型结构上,DBN通过不断堆叠RBM得到一个深度信念网络,其最顶层是一个无向的RBM,但下层结构是有向的;DBM所有层之间的连接都是无向的
- 在训练模型方面,DBN只需要通过逐层训练RBM得到DBN;DBM训练分为预训练与模型整体训练两个阶段
02 变分自编码器基础知识
简述VAE的基本思想,以及它是如何用变分推断方法进行训练的?
- 先由先验分布产生隐藏变量z,再由条件分布产生数据x
-
VAE的核心思想就是找到一个容易生成数据x的z的分布,即后验分布$Q(z x)$
03 变分自编码器的改进
VAE如何控制生成图像的类别?
- 采用半监督的生成模型框架,在产生数据时还受到另一个隐变量 y 的影响,而这个 y就控制着所生成的图像的类别
如何修改VAE的损失函数,使得隐藏层的编码是相互解耦的?
- $\beta-VAE$
原始VAE存在哪些问题?有哪些改进方式?
- 在VAE中,假设近似后验分布是高斯分布,但实际应用中真实的后验分布可能是任意的复杂形式
- 可以通过使用流归一化方法或者引入额外的隐藏变量来改进
- VAE中以优化对数似然函数的下界为目标,与真实要优化的原始目标函数可能有一定距离
- 可以通过重要性采样法来逼近一个更为紧致的下界
如何将VAE与GAN进行结合?
- VAE能够学习一个显式的后验分布;而 GAN 的生成网络没有限制数据的分布形式,理论上来说可以捕捉到任何复杂的数据分布。将 VAE 与 GAN 结合起来, 能够综合两个模型各自的优点。
- 将GAN的生成器与VAE的解码器采用同一网络(VAEGAN)
- 将GAN的生成器与VAE的编码器共享(对抗自编码器)
- 对抗学习推断:在GAN 的基础上引入了 VAE
04 生成式矩匹配网络与深度自回归网络
什么是最大均值差异?它是如何应用到生成式矩匹配网络中的?
- 最大均值差异 (MMD) 通过比较两个数据集的统计量来度量两个分布之间的差异性
自回归方法如何应用在生成模型上?
第5章 生成式对抗网络
01 生成式对抗网络的基本原理
简述AE、VAE、GAN的联系和区别
- VAE 是 AE 的升级版本,结构都是由编码器和解码器组成。
- AE 本身无法直接产生新的隐向量来生成新的样本,VAE 的主要优势在于能够产生新的隐向量 z。进而生成有效的新样本,VAE 编码器的输出不再是隐空间中的向量,而是所属正态分布的均值和标准差,然后再根据均值与标准差来采样出隐向量 z。(AE 中编码器的输出代表真实样本对应的隐向量,而 VAE 中编码器的输出可以看作由两个部分组成:一部分是隐向量所对应的分布的均值;另一部分是标准差)
-
由于采样操作存在随机性,每一个输入圄像经过 VAE 得到的生成图像不再是唯一的,只要 z是从隐空间的正态分布中采样得到的,生成的图像就是有效的。
-
GAN在训练阶段用对抗训练方式来交替优化生成器G与判别器D \(\min _{G} \max _{D} V(G, D)=\mathbb{E}_{x \sim p_{\text {data }}(x)}[\log D(x)]+\mathbb{E}_{z \sim p_{z}(z)}[\log (1-D(G(z)))]\)
- GAN没有像 AE 那样从学习到的隐向量后验分布$q(zIx)$中获得生成样本$\hat{x}$的能力 z 可能因此导致模式坍塌、训练不稳定等问题
原始GAN在理论上存在哪些问题?
- 模式坍塌:真实数据往往是多模态的,非凸问题中存在局部纳什均衡,这样的训练过程容易使博弈过程陷入这些局部均衡状态,造成生成器G趋向于生成集中在少数/单一模态上的数据
- 训练难收敛:由于存在对抗,生成器与判别器的损失是反相关的,一个增大时另一个减小, 因而无法根据损 失函数的值来判断什么时候应该停止训练
- 何时应该停止训练,以及生成数据的好坏的评估,都缺乏理想的评价方法和准则
02 生成式对抗网络的改进
简单介绍GAN模型结构的演进
- DCGAN:首次将卷积神经网络用到 GAN
- 层次化GAN:Stacked GAN、Progressive GAN
简单介绍GAN目标函数的演进
- 基于 f-散度的 GAN
- 基于积分概率度量的 GAN
- 通过添加其他类型的优化目标作为辅助项来提高训练的稳定性(重建目标、分类目标)
列举一些近几年针对GAN的训练过程或者训练技巧的改进
-
特征匹配技术:将原目标函数中对最后一层输出值的比较,改为对中间层输出向量的比较
- 单边标签平滑
- 谱归一化: 直接对模型参数进行约束,来直接地保证判别器的 Lipschitz连续性
03 生成式对抗网络的效果评估
简述IS和FID的原理
- IS 实际上是在做一个 KL 散度计算,计算时需要用到一个在ImageNet数据集上预训练好的 Inception-v3分类网络
- FID加入了真实样本与生成样本的比较,通过比较真实样本和生成样本的特征图的均值和方差来计算
- IS 和 FID 是目前 GAN 在图像领域中使用最为广泛的两种评估方法
04 生成式对抗网络的应用
GAN用于生成高质量、高分辨率图像时会有哪些难点?简述从SNGAN、SAGAN到BigGAN的发展过程
- GAN在生成高分辨率图像时, 尤真是在包含很多类别的大型数据集上训练后,会出现无法明确区分图像类别、难以捕捉到图像语义结构、质地和细节不合理等问题。
- 因为分辨率越高的图像在原始空间维度也越高,当数据集包含的类别众多且类内图像多样性也很高时,图像所包含的模式也就越多,描述数据集中图像分布的各个变量之间的关系也越复杂,用有限参数的网络表示的生成模型就越难以训练
- SNGAN:首次将谱归一化加入到判别器中,提高了训练的稳定性
- SAGAN:在 SNGAN 的基础之上,将自注意力机制加入其中
- BigGAN:在SAGAN的基础上,通过增大 GAN 的参数规模,增大训练过程中的batch size ,以及其他一些结构和约束机制上的改进,显著地提升了模型的表现;通过输入噪声的嵌入和截断技巧, 能够在多样性和真实性上实现精细化控制;通过多种训练技术上的改进, 在大规模训练时的稳定性得到了提高
有哪些问题是属于图像到图像翻译的范畴的?GAN是如何应用在其中的?
-
包括图像的风格迁移、图像超分辨率重建、图像补全或修复、图像上色等
-
可以分为有监督和无监督两类:
-
有监督方法需要两个域之间的图像一一配对,此时目标图像域的配对图像就可以看作标签,比如基于 GAN 的超分辨率重建和图像补全问题
-
无监督方法可以采用非配对的训练方式,即训练时两个域样本不需要一一对应,比如基于 GAN 的图像风格迁移
-
简述CycleGAN的原理
- CycleGAN 一共包含两个判别器和两个生成器
- 整个结构可以分成两部分,一部分负责从一个风格域 X到 另一个风格域 Y的转换工作;另一部分反过来,负责从风格域 Y到风格域X的转换工作
GAN为什么适用于半监督学习?生成数据在半监督学习中起到什么作用?
- 半监督学习是旨在训练数据仅有部分标注的情况下,同时利用标注和未标注过的样本进行学习的方法。GAN的出现,为基于生成模型的半监督学习方法提供了新的思路。
- 在原始的 GAN 中,训练数据是不需要标签的,判别器的任务只是判别图像的”真假”。在用于半监督学习时,判别器除了这个判别任务外,还被赋予了分类任务。
第6章 元学习
01 元学习的主要概念
元学习适合哪些学习场景?可解决什么样的学习问题?
- 元学习适合小样本、多任务的学习场景 ,可解决在新任务缺乏训练样本的情况下快速学习( rapid learning )和快速适应( fast adaptation )的问题
- 对于小样本的单个任务,常见的机器学习模型容易过拟合。应对办法有数据增强和正则化技术,但是它们没高从根本上解决问题,而元学习提供了新思路。
元学习与有监督学习/强化学习具体有哪些区别?
- 有监督学习和强化学习为从经验中学习 (Learning from Experiences) ,而把元学习则旨在学会学习( Learning to Learn)
- 主要区别:
- 训练集不同
- 预测函数不同
- 损失函数不同
- 评价指标不同
- 学习内涵不同
- 泛化目标不同
- 与其他任务的关系不同
从理论上简要分析一下元学习可以帮助少次学习的原因
- 元学习同时在多个拥有共同属性的任务上进行学习,这些共同属性在某中程度上对假设空间做了剪枝,削减了假设空间的大小,缩小了最优参数解的搜索范围,从而降低了训练模型的样本复杂度,让模型在新任务只有少量样本的情况下仍有很强的泛化能力
02 元学习的主要方法
试概括并列举当前元学习方法的主要思路。它们大致可以分为哪几类?
- 按划分参数空间的方法分类
- 元参数定义在函数中
- 元参数定义在规则和程序中
- 元参数定义在控制参数中
- 按学习约束条件的方法分类
- 学习从真实数据到仿真数据的变换规则
- 学习目标函数的斜率/梯度约束
- 学习内部表征的约束
目前主流的元学习方法可分为基于度量学习的方法、基于外部记忆的方法和基于优化的方法
学习公共初始点的方法与预训练的方式有什么不同?
03 元学习的数据集准备
给定一个传统的多分类数据集,如何构造一份适用于元学习的K次N分类数据集?
- 准备元学习的 K 次 N 分类数据集,其核心思想是构造多个相关的小样本任务,每个任务都有一个自己的 N 分类数据集,且每个类别只有 K 个训练样本
04 元学习模型
如何用最近邻方法将一个普通的神经网络训练过程改造为元学习的过程?
如何用微调训练的方式将一个普通的神经网络训练过程改造为元学习过程?
05 基于度量学习的元学习模型
元学习中非参数方法相比参数方法有什么优点?
- 参数方法需要在新任务上继续微调模型,如使用随机梯度下降法对模型的权重参数进行更新
- 参数方法有两个缺点:一是随机梯度下降法通常需要多步更新才能达到较优的点,这使得新任务上学习过程变得很慢,无法达到快速学习的效果,更不适合于训练样本很少的情况;二是微调的过程可能受新任务自身携带噪声、部分样本体现的任务本征模式与训练任务差异过大等因素的影响,让原先在$\mathcal{D}_{meta-train}$预训练好的模型参数值被错误信息覆盖(灾难性忘却)
- 非参数方法不依赖梯度下降的优化过程,不修改预训练的参数信息,而且因为在新任务中无参数训练过程,新样本信息不会相互干扰,避免了灾难性忘却。结合适当的距离度量并采用最近邻方法,模型可以快速吸收和利用新样本。
如何用度量学习和注意力机制来改造基于最近邻的元学习方法?
- 基于度量学习的元学习采用了非参数方法
- 其明显的缺点是:外部记忆的大小会随着支持集的样本数增大而增大,造成训练复杂度的急剧上升
06 基于神经图灵机的元学习模型
带读/写操作的记忆模块(如神经图灵机)在元学习中可以起到什么作用?
-
在新任务上能够快速学习、快速适应。写操作时,通过快速编码和绑定查询信息(如输入样本)与目标信息(如标签),生成记忆信息快速写入记忆模块。记忆信息可以是显式关联的样本标签对,也可以是隐式编码后的向量;读操作时,通过检索获得相关的已绑定的信息,实现对记忆模块的快速读取。
记忆模块的快读和快写机制,有利于快速吸收和利用新到来的样本标签数据
-
有利于减小灾难性忘却的影响。因为基于梯度的学习过程需要依赖大量样本和多步迭代,学出的结果也倾向于高频出现的模式,所以当稀有模式的样本仅出现一次的时候,梯度方法很难捕捉;而记忆模块会主动地编码每条样本数据,并写入记忆模块,不丢失信息,不受其他不相关样本的干扰。(但如果记忆模块大小有限,使用频率过低的记忆槽也会被清零)
如何构造基于神经图灵机和循环神经网络的元学习模型?
-
理解记忆模块与快慢两个层面学习的关系
- 慢层面的学习:是元学习发生的地方,学习的元知识反映了不同任务间的共性。具体实现方式是通过梯度下降更新记忆模块的参数,在多次迭代的过程中缓慢靠近最优参数区域
- 快层面的学习:是在单个任务下发生的,利用记忆模块的编码和绑定以及检索的机制,快速加载当前任务的已见过样本信息作为记忆内容,在预测下一个样本时,可以迅速定位、获取与当前输入有关的记忆信息
07 基于学习优化器的元学习模型
使用学习优化算法的方式处理元学习问题,与基于记忆的元学习模型有哪些区别?
如何基于LSTM设计一个可学习的优化器?
如何设计基于LSTM优化器的元学习的目标函数和训练过程?
LSTM优化器如何克服参数规模过大的问题?
08 基于学习初始点的元学习模型
简述基于初始点的元学习方法
基于初始点的元学习方法中的两次反向传播有什么不同?
-
训练元学习模型,通常涉及内、外两层循环。其中内层循环遍历每个训练任务;外层循环迭代更新元参数
-
两次方向传播:
-
第一次反向传播发生在内层,是在每个任务内进行,反向传播基于该任务的损失,获得对模型参数的梯度信息,用于执行一步梯度下降,到达快速收敛、快速适应的目的。
(这里的“反向”是针对单个任务的模型而言,其计算流在整个元模型看来仍属于前向计算阶段)
-
第二次反向传播发生在外层,是在元级别上进行的。反向传播基于元目标,获得对元参数的梯度信息,用于训练元模型。
(元模型的前向计算阶段包含第一次反向传播的求梯度操作,因此第二次反向传播涉及求二阶导数)
-
基于初始点的元学习模型,用在强化学习中时与分类或回归任务有何不同?
第7章 自动化机器学习
01 自动化机器学习的基本概念
自动化机器学习要解决什么问题?有哪些主要的研究方向?
02 模型和超参数自动化调优
模型和超参数有哪些自动化调优方法?它们各自有什么特点?
贝叶斯优化中的获得函数是什么?起到什么作用?请介绍常用的获得函数
简述贝叶斯优化中用高斯过程回归计算目标函数后验分布的方法。高斯过程回归可以用于种类型或层次型模型配置参数的优化吗?
03 神经网络架构搜索
简述神经网络架构搜索的应用场景和大致工作流程
简单介绍神经网络架构搜索中有哪些主要的研究方向
什么是一次架构搜索?它有什么优势和劣势?
简述可微架构搜索的主要原理
第二部分 应用
第9章 计算机视觉
01 物体检测
简述物体检测领域中的单步模型和两步模型的性能差异及其原因
-
单步模型是指没有独立地、显式地提取候选区域(region proposal),直接由输入图像得到其中存在物体的类别和位置信息的模型。经典的单步模型有YOLO、SSD
-
两步模型有独立的、显式的候选区域提取过程,即先在输入图像上筛选出可能存在物体的候选区域,然后针对每个候选区域判断是否存在物体,如果存在,就给出物体的类别和位置修正信息。经典的两步模型有Faster R-CNN、R-FCN、Mask-RCNN等
-
单步模型在计算效率上有优势,两步模型在检测精度上有优势
- 多数单步模型是利用预设的锚框( Anchor Box )来捕捉可能存在于图像中各个位置的物体。因比,单步模型会对数量庞大的锚框进行是否含有物体及物体所属类别的密集分类。由于一幅图像中实际含有的物体数目远小于锚框的数目,因而在训练这个分类器时正负样本数目是极不均衡的,这会导致分类器训练效果不佳。 RetinaNet通过 Focal Loss 来抑制负样本对最终损失的贡献以提升网络的整体表现。
- 而在两步模型中,由于含有独立的候选区域提取步骤,第一步就可以筛选掉大部分不含有待检测物体的区域(负样本) ,在传递给第二步进行分类和候选框位置/大小修正时,正负样本的比例已经比较均衡,不存在类似的问题。
-
两步模型在候选区域提取的过程会对候选框的位置和大小进行修正,因此在进入第二步前,候选区域的特征已被对齐,这样有利于为第二步的分类提供质量更高的特征。另外两步模型在第二步中候选框会被再次修正,因此一共修正了两次候选框,这带来了更高的定位精度,但同时也增加了模型复杂度。
- 单步模型没有候选区域提取过程,自然也没有特征对齐步骤,各锚框的预测基于该层上每个特征点的感受野, 其输入特征未被对齐,质量较差,因而定位和分类精度容易受到影响。
- 以Faster R-CNN为代表的两步模型在第二步对候选区域进行分类和位置回归时,是针对每个候选区域独立进行的,因此该部分的算法复杂度线性正比于预设的候选区域数目,导致两步模型的heavy head问题。近年来虽然有部分模型(如light-head R-CNN)试图精简两步模型中第二步的计算量,但较为常用的两步模型仍受累于大量候选区域,相比于单步模型仍存在计算量大、速度慢的问题。
简单介绍两步模型R-CNN、SPPNet、Fast R-CNN、Faster R-CNN的发展过程
- SPPNet提出了空间金字塔池化层,该层被放置于CNN的末端,可以接受任何尺寸的特征图作为输入,然后通过3个窗口大小可变但窗口个数固定的池化层,最终输出具有固定尺寸的池化特征
- Fast R-CNN使用感兴趣区域池化,并用全连接层代替了之前的SVM分类器和线性回归器来进行物体的分类和检测框修正,大大增强了检测任务的一体性,提高了计算效率。
- Faster R-CNN 在 Fast R-CNN 的基础上, 将其最耗时的候选区域提取步骤(即选择性搜索)用一个区域候选网络(Region Proposal Network, RPN )进行了替代,并且这个 RPN 和用于检测的 FastR-CNN 网络共享特征提取部分的权值。在 Faster R-CNN中,一幅输入图像先由 RPN 提取候选区域,再取出各个候选区域对应的特征图,送入 Fast R-CNN (独立于 RPN 的后半部分)进行物体分类和位置回归。
Faster R-CNN框架
- 特征提取网络:用于从大量的图片中提取出一些不同目标的重要特征,通常由conv+relu+pool层构成,常用一些预训练好的网络(VGG、Inception、ResNet等),获得特征图
- 生成ROI:在获取的特征图的每个点上做多个候选ROI,然后利用分类器将这些ROI区分为背景和前景(ROI分类),同时利用回归器对这些ROI的位置进行初步的调整(ROI回归)
- ROI分类:在RPN阶段,用来区分前景(与真实目标重叠并且重叠区域大于0.5)和背景(不与任何目标重叠或者重叠区域小于0.1);在Fast-RCNN阶段,用于区分不同种类的目标。RPN的分类损失是二分类的交叉熵损失;Fast RCNN是多分类的交叉熵损失
- ROI回归:在RPN阶段,进行初步调整;在Fast-RCNN阶段进行精确调整
Mask R-CNN框架
- 在原始Faster R-CNN算法的基础上增加了FCN来产生对应的Mask分支,即RPN+ROIAlign+Fast-RCNN+FCN
简单介绍单步模型YOLO、YOLOv2、YOLO9000、YOLOv3、YOLOv4的发展过程
-
YOLO的基本思想是使用一个端对端的卷积神经网络直接预测目标的类别和位置。YOLO将输入图片划分成$S\times S$的方格,每个方格需要检测出中心点位于该方格内的物体。(每个方格会预测B个边界框,包括位置、尺寸和置信度)。YOLO的主体网络结构参考GoogLeNet,由24个卷积层和2个全连接层组成。
- YOLOv2针对YOLO的两个缺点,即低召回率和低定位准确率,进行了一系列的改进:
- 在卷积层后面添加了批归一化(BN)层,以加快收敛速度,防止过拟合
- 采用k-means算法进行聚类获取先验锚框,并且聚类没有采用欧氏距离,而是有针对性地改进了距离的定义
- YOLOv2直接在预先设定的锚框上提取特征,预测偏移量和置信度,
- YOLOv2 使用不同尺寸的图片同时训练网络
- YOLOv2 使用新的卷积特征提取网络 DarkNet-19
- YOLOv3
- 使用二元交叉摘损失函数,而不是Softmax函数, 这样可以更好地支持多标签的检测。
- 采用了更深的网络作为特征提取器,即 DarkNet-53,包含了 53 个卷积层。为了避免深层网络带来的梯度消失问题, DarkNet-53 借鉴了残差网络的快捷连接( shortcut) 结构。同时,YOLOv3 还采用了 3 个不同大小的特征图进行联合训练,使其在小物体上也能获得很好的检测效果
-
YOLOv4用到了以下优化方法:
> Bag of freebies(增加训练时间,不影响推理速度下提升性能)
-
数据增强
-
亮度、对比度、色调、饱和度、噪声等
-
随机缩放、裁剪、翻转、旋转等
-
模拟遮挡
- random erase or CutOut: 随机将图像中的矩形区域随机填充像素值或置零
- MixUp:将两张图像按照一定比例因子进行叠加融合,该比例因子服从B分布(贝塔分布是一个作为伯努利分布和二项式分布的共轭先验分布的密度函数),融合后的label包含两张图像的所有标签。
- CutMix:从一张图中crop一块矩形图像到另一张图中,对应融合后图像的label也要进行更新。
- 风格迁移GAN:通过GAN的方式扩增数据量
-
feature map层面的增强
- DropOut:让某个神经元的激活值以一定的概率1-p停止工作(输出值清0)
- DropConnect:输出节点中将每个与其相连的输入权值以1-p的概率清0(模型权重清零)
- DropBlock:针对卷积层正则化
-
-
解决语义分布差异(类别不平衡)
-
OHEM:选择一些hard example作为训练的样本从而改善网络参数效果,hard example指的是有多样性和高损失的样本
-
focal loss:通过loss函数中乘一个因子a (很小) 来控制正负样本对总的loss的共享权重(负样本多则会多次乘a,导致权重降低);引入gamma参数控制容易分类和难分类样本的权重 \(\mathrm{FL}\left(p_{\mathrm{t}}\right)=-\alpha_{\mathrm{t}}\left(1-p_{\mathrm{t}}\right)^{\gamma} \log \left(p_{\mathrm{t}}\right)\)
-
label smooth:将one hot 的label标签转为相近的数值,可以体现出类别相似度
-
-
损失函数
- GIoU loss:不仅关注重叠区域,还关注其他的非重合区域,能更好的反映两者的重合度
- DIoU loss:考虑预测框与真实框的中心点间欧式距离,将目标与anchor之间的距离、重叠率以及尺度都考虑进来
- CIoU loss:在DIoU的基础上将预测框与真实框长宽比的相似性考虑到计算中
> Bag of specials(推理中增加很小成本但能换来较大精度提升)
-
增大感受野
- ASPP金字塔池化:使用空洞卷积代替Pooling
- RFB-Net:对不同大小卷积核后加上不同空洞率的空洞卷积
-
注意力机制
- SE
- CBAM(SE+SAM)
-
特征融合
- Skip connection
- FCN style
- SFAM (尺度特征融合模块):将多个TUM (联级轻量 U 形模块)生成的特征聚合成一个包含多级特征的特征金字塔,特征金字塔的每一层级的特征是基于各U形模块中相同尺寸特征基于SE模块进行加权的融合
- ASFF(自适应尺度融合)
- BiFPN模块
-
激活函数:
- LReLU/PReLU/ReLU6
- SELU
- Swish
- Hard-Swish
- Mish
-
后处理:
- soft NMS/softer NMS
- DIoU NMS:将bbox中心点之间的距离信息考虑到置信度更新中来
-
介绍SSD算法和RetinaNet算法
- SSD
- 基于多尺度特征图像的检测:在多个尺度的卷积特征图上进行预测,以检测不同大小的目标,一定程度上提升了小目标物体的检测精度
- RetinaNet
- 与SSD不同之处在于提取出了特征图之后,使用了FPN对特征图进行了融合,并使用Focal loss平衡了正负样本
FCOS算法介绍
- 不使用anchor机制,即anchor free,直接在特征图的每个位置进行预测。包括class probability、center-ness和坐标偏移
- 使用center-ness机制用于减小远离GT bbox的无效bbox的权重
有哪些措施可以增强对于小物体的检测效果?
- 在模型设计方面,可以采用特征金字塔、沙漏结构等网络子结构,来增强网络对多尺度尤其是小尺度特征的感知和处理能力;尽可能提升网络的感受野,使得网络能够更多地利用上下文信息来增强检测效果;同时减少网络总的下采样比例,使最后用于检测的特征分辨率更高。
- 在训练方面,可以提高小物体样本在总体样本中的比例;也可以利用数据增强手段 将图像缩小以生成小物体样本。
- 在计算量允许的范围内,可以尝试使用更大的输入图像尺寸
介绍Anchor-based和Anchor-free的区别
-
Anchor-based和Anchor-free是从是否需要显式定义先验anchor的角度区分
-
Anchor的理解:物体检测问题通常被建模成对一些候选区域进行分类和回归的问题。在单阶段检测器中,这些候选区域是通过滑窗方式产生的anchor;在两阶段检测器中,候选区域时RPN生成的proposal,但RPN本身仍是对滑窗方式产生的anchor进行分类和回归
-
Anchor box的缺点:
- 检测表现效果对于anchor-box的尺寸、长宽比、数目等非常敏感。因此与anchor-box相关的超参数需要细调
- anchor-box的尺寸和长宽比固定,在处理形变较大的候选对象时比较困难,尤其是对于小目标。且预先定义的anchor-box限制了检测器的泛化能力,需要针对不同对象大小或长宽比进行设计
-
为了提高召回率,需要在图像上放置密集的anchor box,而这些anchor box大多数属于负样本,会造成正负样本之间的不均衡
- 大量的anchor box在计算交并比时计算量和内存占用大
-
- Anchor-based类算法的代表是faster R-CNN、SSD和YOLOv2/v3等。
- Anchor-free类算法的代表是CornerNet、ExtremeNet、CenterNet、FCOS
- Anchor-free本质上是将基于anchor转换成了基于point/region
- anchor-free 方法中,是通过另外一种手段来解决检测问题的。同样分为两个子问题,即确定物体中心和对四条边框的预测。预测物体中心时,具体实现既可以定义一个 hard 的中心区域,将中心预测融入到类别预测的 target 里面,也可以预测一个 soft 的 centerness score;对于四条边框的预测,则比较一致,都是预测该像素点到 ground truth 框的四条边距离,不过会使用一些 trick 来限制 regress 的范围
- 融合anchor-based和anchor-free分支的方法:FSAF、SFace、GA-RPN等
ROI Pooling怎么实现?
- ROI Pooling 就是将大小不同的feature map 池化成大小相同的feature map,利于输出到下一层网络中
ROI Align原理
- 取消量化操作,使用双线性内插的方法获得坐标为浮点数的像素点上的图像数值,从而将整个特征聚集过程转化为一个连续的操作。
如何从rpn网络生成的多个候选框中确定目标候选框?
- 从所有anchor box中随机挑选256个,保持正负样本比例1:1;再从RPN的输出中,降序排列所有anchor box的前景置信度,挑选top-N个候选框为proposal, 做分类训练
Focal loss和交叉熵函数的区别
- 交叉熵损失用于度量两个分布之间的差异,在分类问题中,分为二分类和多分类交叉熵损失
- Focal loss主要为了解决one-stage目标检测中正负样本比例、难易样本严重失衡的问题。该损失函数降低了大量简单负样本在训练中所占的权重,也可理解为一种困难样本挖掘
nms、softnms和softernms对比
- NMS算法缺点:
- 将相邻检测框的分数均强制归零,在这种情况下,如果一个真实物体在重叠区域出现,则将导致对该物体的检测失败并降低了算法的平均检测率
- NMS的阈值也不太容易确定,设置过小会出现误删,设置过高又容易增大误检
- soft NMS的核心是不会直接通过一个NMS阈值去除冗余检测,而是对于高度冗余的检测结果通过惩罚函数进行抑制,使得其得分下降。IOU冗余的越厉害,其得分下降的越厉害;
- Softer-NMS 在获取到预测位置的标准偏差以后, 通过平均权重将bounding boxes融合
介绍ohem
-
提出通过online hard example mining算法训练Region-based Object Detectors
-
算法核心:
- 选择一些hard example作为训练的样本从而改善网络参数效果,hard example指的是有多样性和高损失的样本
- hard example是根据每个ROI的损失来选择的,选择损失最大的一些ROI
- 并采用NMS(non-maximum suppresison)去除重合率较大的ROI
-
其优点:
- 对于数据的类别不均衡问题,不需要采用设置正负样本比例的方式来解决,使用在线选择方式针对性更强
- 当数据集增大,算法可以在原来的基础上实现较大提升
-
应用:以应用在Fast RCNN中为例:
- 首先,ROI经过ROI pooling层生成feature map,然后进入只读的ROI network得到所有ROI的loss
- 然后hard ROI sampler结构根据损失排序选出hard example,并把这些hard example作为下面那个ROI network的输入
GIoU、DIoU、CIoU介绍
- DIoU中对anchor框和目标框之间的归一化距离进行了建模,直接最小化两个目标框的距离,而GIOU loss优化的是两个目标框之间的面积,因此比GIoU loss收敛快得多
- anchor框和目标框之间的长宽比的一致性也是极其重要的。CIOU Loss在DIOU loss的基础上,引入一个box长宽比的惩罚项,该Loss考虑了box的长宽比
小目标检测用什么方法?
- 传统的图像金字塔和多尺度滑动窗口检测
- Data Augmentation
- 特征融合的FPN
- 合适的训练方法SNIP,SNIPER,SAN
- 更稠密的Anchor采样和匹配策略S3FD,FaceBoxes
- 先生成放大特征再检测的GAN
- 利用Context信息的Relation Network和PyramidBox
02 图像分割
简述图像分割中经常用到的编码器-解码器网络结构的设计理念。列举出2~3个基于编码器-解码器结构的图像分割算法
- 图像分割中的编码器可视为特征提取网络,通常使用池化层来逐渐缩减输入数据的空间维度;而解码器则通过上采样/反卷积等网络层来逐步恢复目标的细节和相应的空间维度。
- 在编码器中,引入池化层可以增加后续卷积层的感受野,并能使特征提取聚焦在重要的信息中,降低背景干扰,有助于图像分类。然而池化操作使位置信息大量流失,经过编码器提取出的特征不足以对像素进行精准的分割。这给解码器逐步修复图像的细节造成了困难,使得在解码器中直接由上采样/反卷积层生成的分割图像较为粗糙
- 因此提出了在编码器和解码器之间建立skip connection,使高分辨率的特征信息参与到后续的解码环节,进而帮助解码器更好地复原目标的细节信息
- 经典的图像分割算法FCN、U-Net和SegNet都是基于编码器-解码器的理念设计的。SegNet 提出了最大池化索引( max-pooling indicies )的概念,skip connection传递的不是特征本身,而是最大池化时所使用的索引(位置坐标)。利用这个索引对输入特征进行上采样,省去了反卷积操作,也使得SegNet比FCN节省了不少存储空间。
DeepLab系列模型中每一代的创新是什么?是为了解决什么问题?
- DeepLab v1算法主要有两个创新点,分别是空洞卷积和全连接条件随机场。
- 空洞卷积是为了解决编码过程中信号不断被下采样、细节信息丢失的问题
- 由于卷积层提取的特征具有平移不变性,限制了定位精度,因此引入全连接条件随机场来提高模型捕获局部结构信息的能力(具体来说,将每个像素作为条件随机场的一个节点,像素与像素间的关系作为边,来构造基于全图的条件随机场)
- DeepLab v2提出了空洞空间金字塔池化(ASPP),并将DeepLab v1使用的VGG网络替换成了更深的ResNet网络
- ASPP可用于解决不同检测目标大小差异的问题:通过在给定的特征层上使用不同扩张率的空洞卷积,可以有效进行重采样
- DeepLab v3/ DeepLab v3+
- DeepLab v3加入了批归一化(BN)层;并将ASPP中尺寸为$3\times 3$、空洞大小为24的卷积替换为一个普通的$1\times 1$卷积,以保留滤波器中间部分的有效权重
- 为了克服长距离下有效权重减少的问题,DeepLab v3在空洞空间金字塔的最后增加了全局平均池化以便更好地捕捉全图信息
- DeepLabv3去掉了CRF ,并通过将 ResNet 的 Block4 复制 3 次后级联在原有网络的最后一层来增加网络的深度。网络深度的增加是为了捕获更高层的语义信息。
- DeepLab v3+在DeepLab v3的基础上,增加了一个简单的解码器模块,用来修复物体边缘信息。同时将深度可分离卷积应用到空洞空间金字塔和解码器模块,以获得更快、更强大的语义分割模型。
常见的分割损失
- 常见的分割损失函数可大致分为4类:基于分布的损失函数,基于区域的损失函数,基于边界的损失函数和基于复合的损失函数
- 基于分布的损失函数:BCE loss、Focal loss
- 基于区域的损失函数:Dice loss、Tversky Loss
- 基于边界的损失函数:Shape-aware Loss
- 复合损失函数:Combo Loss、Exponential Logarithmic Loss
03 目标跟踪
siamRPN、siamFC、DeSiam、SiamRPN++原理
第10章 自然语言处理
神经机器翻译模型经历了哪些主要的结构变化?分别解决了哪些问题?
常见的词嵌入模型有哪些?它们有什么联系和区别?
神经机器翻译如何解决未登录词的翻译问题?
如何对文本中词的位置信息进行编码?
语言模型的任务形式是什么?语言模型如何帮助提升其他自然语言处理任务的效果?
训练神经机器翻译模型时有哪些解决双语语料不足的方法?
在给文本段落编码时如何结合问题信息?这么做有什么好处?
如何使用卷积神经网络和循环神经网络解决问答系统中的长距离语境依赖问题?Transformer相比以上问题有何改进?
第11章 推荐系统
01 推荐系统基础
一个典型的推荐系统通常包括哪些部分?每个部分的作用是什么?有哪些常用算法?
推荐系统中为什么要有召回?在召回和排序中使用的深度学习算法有什么异同?
如何从神经网络的角度理解矩阵分解算法?
最近邻问题在推荐系统中的应用场景是什么?具体算法有哪些?
二阶因子分解机中稀疏特征的嵌入向量的内积是否可以表达任意的特征交叉系数?引入深度神经网络的因子分解机是否提高了因子分解机的表达能力?
02 推荐系统设计与算法
如何使用深度学习方法设计一个根据用户行为数据计算物品相似度的模型?
如何用深度学习的方法设计一个基于会话的推荐系统?
03 推荐系统评估
评价点击率预估模型时为什么选择AUC作为评价指标?
评价点击率评估模型时,线下AUC的提高一定可以保证线上点击率的提高吗?
第12章 计算广告
简述CTR预估中的因子分解机模型(如FM、FFM、DeepFM)等
如何对CTR预估问题中用户兴趣的多样性进行建模?
简述一个可以提高搜索广告召回效果的深度学习模型
多臂老虎机算法是如何解决CTR预估中的冷启动问题的?
设计一个深度强化学习模型来完成竞价策略
设计一个基于强化学习的算法来解决广告主的竞价策略问题
第13章 视频处理
图像质量评价方法有哪些分类方式?列举一个常见的图像质量评价指标
设计一个深度学习网络来实现帧内预测
如何利用深度学习良好的图像特征提取能力来更好地解决NR-IQA问题
超分辨率重建方法可以分为哪几类?其评价指标是什么?
如何使用深度学习训练一个基本的图像超分辨率重建模型?
设计一个深度学习网络来实现环路滤波模块
如何在较高的监控视频压缩比的情况下,提升人脸验证的准确率?
在基于深度学习的超分辨率重建方法中,怎样提高模型的重建速度和重建效果?
如何用深度学习模型预测网络中某一节点在未来一段时间内的带宽情况?
怎样将图像的超分辨率重建方法移植到视频的超分辨重建任务中?
如何利用深度学习完成自适应码率控制?
第三部分 深度学习架构
第一章 框架
深度学习框架有哪些?各有什么特点?
- Pytorch使用动态更新的图进行操作,主要优势是轻量、灵活。
- TensorflowTF使用静态计算图进行操作。首先定义图,然后运行计算,如果需要对架构进行更改,需要重新训练模型。
深度学习框架的核心组件。
-
大部分深度学习框架包含五个核心组件:
- 张量:张量是所有深度学习框架中最核心的组件,后续的所有运算和优化算法都是基于张量进行的。
- 基于张量的各种操作:针对张量对象的数学运算和处理过程
- 计算图:计算图让模型训练阶段的梯度计算变得模块化且更为便捷
- 自动微分工具:梯度计算
- BLAS、cuBLAS、cuDNN等拓展包:加速运算
介绍一下Tensorflow常用的Optimizer
TensorRT原理
- TensorRT是有助于在NVIDIA图形处理单元(GPU)上进行高性能推理的C++库,旨在与Tensorflow、Caffe、Pytorch、MXNet等训练框架以互补的方式工作。其致力于在GPU上快速有效地运行已经受过训练的网络,以生成结果(评分、检测、回归或推断)
第二章 算力
01 并行计算
02 异构
第三章 硬件基础
CPU和GPU的区别
- CPU需要很强的通用性来处理各种不同的数据类型,同时需要逻辑判断从而引入大量的分支跳转和中断处理,导致CPU的内部结构异常复杂
- GPU面对的则是类型高度统一的、相互无依赖 的大规模数据和不需要被打断的纯净的计算环境
- GPU采用了数量众多的计算单元和超长的流水线,但只有非常简单的控制逻辑并省去了Cache
- 而CPU不仅被Cache占据了大量空间,而且还有有复杂的控制逻辑和诸多优化电路,相比之下计算能力只是CPU很小的一部分
什么类型的程序适合在GPU上运行?
-
计算密集型的程序:所谓计算密集型(Compute-intensive)的程序,就是其大部分运行时间花在了寄存器运算上,寄存器的速度和处理器的速度相当,从寄存器读写数据几乎没有延时。
-
易于并行的程序。GPU其实是一种SIMD(Single Instruction Multiple Data)架构, 它有成百上千个核,每一个核在同一时间最好能做同样的事情。