提高篇-常见的12个深度学习面试问题

序言

整理了一篇来自公众号AI公园的文章,原文链接:常见的12个深度学习面试问题,通过对文章知识点整理来巩固所学的知识,也为了以后更好的复习。

正文

1. 介绍Batch Normalization的意义

Batch Normalization 是训练神经网络模型的一种有效方法。该方法的目标是将特征(每层激活后的输出)归一化为均值为 0,标准差为 1。它可以将数据标准化到一个合理的范围,这样做带来的好处有:

  • 可以使用更大的学习率,从而加速模型收敛:如果 x (输入数据)带来不稳定的变化,其导数可能太大,也可能太小,导致学习模型不稳定,BN可以将不稳定的数据归一化到合理的范围;
  • 可以避免 x 值经过非线性激活函数后趋于饱和的现象:有助于权重的学习,当不使用时有些权重可能永远无法进行学习,而用了之后,基本上都可以学习到;
  • 有效的减少过拟合现象:Batch Normalization 也是一种正则化形式,有助于最小化过拟合,使用 Batch Normalization,我们不需要使用太多的 dropput。
2. 解释bias和Variance之间的权衡关系

bias(偏差):bias是当前模型的平均预测与我们需要预测的实际结果之间的差异。一个高 bias 的模型表明它对训练数据的关注较少。这使得模型过于简单,在训练和测试中都没有达到很好的准确性。这种现象也被称为欠拟合

Variance(方差):可以理解为模型输出在一个数据点上的分布。Variance 越大,模型越有可能密切关注训练数据,而不提供从未遇到过的数据的泛化。因此,该模型在训练数据集上取得了非常好的结果,但是与测试数据集相比,结果非常差,这就是过拟合的现象。

bias和Variance之间的权衡关系:其实就是在权衡模型的过拟合和欠拟合情况,如果模型过于简单,参数很少,那么它可能有高偏差和低方差(欠拟合);另一方面,如果模型有大量的参数,那么它就会有高方差和低偏差(过拟合),这是在设计算法时计算模型复杂度的基础。
提高篇-常见的12个深度学习面试问题_第1张图片

3. 如果深度学习模型已经有了1000万张人脸向量,如何通过查询来找到新的人脸?

提高篇-常见的12个深度学习面试问题_第2张图片
通常在人脸识别中,会将每一个人脸转换成为一个向量,问题的本质就是在问如何快速解决人脸识别中人脸向量的匹配问题

  • 一般性方法:对输入新的人脸向量比较和它最接近(最相似)的向量,通常使用triplet loss损失函数实现,但是在庞大的数据面前,这种方法就会变得及其缓慢;
  • 索引数据方法 (核心是“树”):主要思想是将数据划分为便于查询数据的结构(类似于树的结构),当有新数据可用时,在树中进行查询有助于找到距离最近的向量,有几种方法参考:Locality Sensitive Hashing—LSHApproximate Nearest Neighbors — Annoy Indexing等。
    提高篇-常见的12个深度学习面试问题_第3张图片
4. 对于分类问题,精度指标是否完全可靠?你通常使用哪些度量来评估你的模型?

这个问题我在前面的文章中有提过目标检测中评估指标mAP详解和计算方式,通常来说精度指标是不可靠的,它并不能准确的评价分类问题,针对于不同的任务会取不同的评估指标,比较常用的有:

  1. AP(平均精度)
  2. mAP(各类平均精度)
  3. 准确率(Accuracy)
  4. recall(召回率)
  5. 精准率(precision)
  6. F1-score
  7. ROC曲线
5.如何理解反向传播?解释其作用机制

问题旨在检测对于神经网络如何工作的知识:

  • 前向过程(前向计算):是一个帮助模型计算每一层权重的过程,其结果计算将产生一个yp结果。此时将计算损失函数的值,损失函数的值将显示模型的好坏;
  • 反向求导:为了降低损失函数的值,我们需要使用导数。反向求导帮助我们计算网络每一层的导数。根据每个层上的导数值,优化器(Adam、SGD、AdaDelta…)应用梯度下降更新网络的权重;
  • 反向传播:使用链式规则或导数函数计算每一层从最后一层到第一层的梯度值;
  • 反复迭代:通过反复迭代上述过程,降低模型损失,从而达到收敛效果。
6. 激活函数是什么意思?激活函数的饱和区间是多少?

神经网络是由多个神经元构成,每个神经元都是一个线性单元,可以用来解决简单线性可分问题,但是在实际情况中,我们处理的问题往往不是线性的,所以需要引进非线性的激活函数,给模型提供了非线性的能力,从而能更好的解决实际问题,常用的激活函数有:

  • sigmoid
  • tanh
  • ReLu
  • PReLu
  • LeakReLu

其中,sigmoid、ReLu(通常不称ReLu为饱和函数)和tanh都存在饱和区间,是饱和性激活函数,饱和区间可以理解为:触发函数的饱和范围是指即使输入值改变,函数的输出值也不改变的区间
提高篇-常见的12个深度学习面试问题_第4张图片
上图中可以看到,函数切线越陡说明它的梯度越大,当函数的切线趋向于水平面时,梯度趋向于0,就称这个区间为饱和区间,在这个区间内,模型几乎学不到任何东西。这也就是为什么前面第二个问题中,需要BN将值范围设置为均值为 0 的原因。

7. 学习率太高或者太低会怎么样?

学习率太低:

  • 模型训练将会进行得非常慢,因为它对权重进行非常小的更新。在到达局部最优点之前需要多次更新。

学习率太高:

  • 由于权值更新过大,模型可能会不收敛。有可能在一个更新权值的步骤中,模型跳出了局部优化,使得模型以后很难更新到最优点,而是在在局部优化点附近跳来跳去(震荡)。

实际使用:

  • 通常在模型训练开始阶段会给一个比较大的学习率(比如0.1,0.01等),在模型训练越靠后,使用学习率衰减策略(每多少轮次学习率×0.1等),减小学习率,从而使得能够更好的收敛。
8. 当图像尺寸变为2倍,CNN的参数数量变为几倍?为什么?

答案是不变!!

模型参数量和图像大小没关系,只和网络结构中卷积核数量和大小有关系,增加的是计算量!!

9. 如何处理不平衡数据?

实际数据和标准数据集在数据集的属性和数据量方面差异很大(标准数据集不需要调整)。对于实际的数据集,可能会出现数据不平衡的情况,即类之间的数据不平衡。我们现在可以考虑以下技术:

  • 选择正确的度量来评估模型:对于不平衡的数据集,使用准确性来评估是一项非常危险的工作。应选择精度、召回、F1 分数、AUC等合适的评价量。
  • 重新采样训练数据集:从一个不平衡的数据集中创建一个平衡的数据集有两种方法,即欠采样和过采样,具体技术包括重复、bootstrapping 或 hits(综合少数过采样技术)等方法。
  • 许多不同模型的集成:例如,你有两个层,一个拥有 1000 个数据的罕见类,一个包含 10,000 个数据样本的大型类。因此,我们可以考虑一个 10 个模型的训练解决方案,而不是试图从一个罕见的类中找到 9000 个数据样本来进行模型训练。每个模型由 1000 个稀有类和 1000 个大规模类训练而成。然后使用集成技术获得最佳结果。
  • 重新设计模型 — 损失函数:Focal loss、GHM loss等
10. 模型训练中,Epoch、Barch和Iteration概念
  • Epoch:表示整个数据集的迭代(所有内容都包含在训练模型中);
  • Batch:是指当我们不能一次将整个数据集放到神经网络中时,我们将数据集分割成几批较小的数据集;
  • Iteration:是运行 epoch 所需的批数。假设有 10,000 个图像作为数据,批处理的大小(batch_size)为 200。然后一个 epoch 将包含 50 个Iteration(10,000 除以 200)。
11. 数据生成器的概念是什么?我们什么时候需要使用它?

数据生成器在写代码中很重要,数据生成函数帮助我们直接生成数据,然后送到模型中进行每个 batch 的训练。

利用生成函数对训练大数据有很大帮助。因为数据集并不总是需要全部加载到 RAM 中,这是一种内存的浪费,而且如果数据集太大,会导致内存溢出,输入数据的处理时间会变长。
提高篇-常见的12个深度学习面试问题_第5张图片

12. 模型的超参数是什么?它和参数有什么不同?

模型参数:是由训练数据生成的模型值,用于帮助显示数据中数量之间的关系。

因此,当我们说找到问题的最佳模型时,应该意味着我们已经在现有的数据集上找到了最适合问题的模型参数。它具有以下几个特征:

  • 用于预测新数据;
  • 它显示了我们使用的模型的能力。通常用准确性来表示,我们称之为准确率;
  • 直接从训练数据集学习;
  • 通常不需要人工设置。

模型参数有多种形式,如神经网络权值、支持向量机中的支持向量、线性回归或逻辑回归算法中的系数。

模型超参数:模型参数是由训练数据集本身建模的,则模型超参数是完全不同的。它完全在模型之外,不依赖于训练数据,它的目的在于:

  • 用于训练过程中,帮助模型找到最合适的参数;
  • 它通常是由模型训练的参与者手工挑选的;
  • 它可以基于几种启发式策略来定义。

对于一个特定的问题,我们完全不知道什么是最好的模型超参数。在现实中,我们需要使用一些技术来估计最佳取值范围。举几个模型超参数的例子:

  • 训练人工神经网络时的学习率;
  • 训练支持向量机时的C和sigma参数;
  • 最近邻模型中的k系数。

你可能感兴趣的:(笔记)