深度学习面试总结(一)

 

 

1. 为什么必须在神经网络中引入非线性?
答:如果不引入非线性层,无论神经网络多深,输出都是输入的线性组合。加深神经网络的层数就没有什么意义
(无法发挥多层网络带来的优势)事实上,自然界更多的是使用非线性组合函数,线性只占很小一部分,
因此必须引入非线性层。
2. 说明解决神经网络中梯度消失问题的两种方法
答:选用合适的激活函数
采用 Batch Normalization 层,在 sigmoid 和 tanh 中,函数取值处于中间变化较大的部分,梯度取值也相对较大,
从而 可以防止过拟合。
使用残差结构,残差结构相当于给靠近输入端的网络层提供了一个与靠近输出端层的直连操作。在反向传播计算时,
减少了梯度传播的路径长度,以缓解梯 度消失的问题。
3. 在图像分类任务中,相较于使用密集神经网络(Dense Neural Network,DNN),使用卷积神经网络
(Convolutional Neural Network,CNN)有哪些优势?
答:两种模型都可以捕获彼此靠近的像素之间的关系,但CNN具有以下属性:
它是平移不变的:对于过滤器而言,像素的确切位置是无关的。
更不容易发生过度拟合:一般而言CNN中的参数比DNN要少很多。
方便我们更好地理解模型:我们可以查看过滤器的权重,并可视化神经网络的学习成果。
分层性质:通过使用较简单的模式描述复杂的模式来学习模式。
4. 说明在图像分类任务中可视化CNN特征的两种方法。
答:输入遮挡:遮挡输入图像的一部分,看看哪部分对分类的影响最大。 例如,针对某个训练好的图像分类模型,将下列图像作为输入。
如果我们看到第三幅图像被分类为狗狗的概率为98%,而第二幅图像的准确率仅为65%,则说明眼睛对于对分类的影响更大。
激活最大化:创建一个人造的输入图像,以最大化目标响应(梯度上升)。
5. 在优化学习速率时,分别尝试学习速率:0.1、0.2,…,0.5是好办法吗?
答:这种方法并不好,建议使用对数比例来优化学习速率
6. 假设一个神经网络拥有3层的结构和ReLU激活函数。如果我们用同一个值初始化所有权重,结果会怎样?
如果我们只有1层(即线性/逻辑回归)会怎样?
答:如果所有权重的初始值都相同,则无法破坏对称性。也就是说,所有梯度都会更新成同一个值,而且神经网络将无法学习。
如果神经网络只有1层的话,成本函数是凸形的(线性/ S型),因此权重始终会收敛到最佳点,无论初始值是什么(收敛可能会较慢)。
7. 解释Adam优化器的概念(Adaptive Moment Estimation,自适应矩估计。是2014年提出的一种万金油式的优化器,
使用起来非常方便,梯度下降速度快,但是容易在最优值附近震荡。竞赛中性能会略逊于SGD,毕竟最简单的才是最有效的。
但是超强的易用性使得Adam被广泛使用。)(梯度下降容易落入局部最小值,因此有了Momentum(动量) 的概念)
答:Adam结合了两个想法来改善收敛性:每个参数更新可加快收敛速度;动量可避免卡在鞍(极值)点上。
8. 比较批处理,小批处理和随机梯度下降。
答:批处理是指在估计数据时获取整个数据;小批处理是通过对几个数据点进行采样来进行小批量处理;而随机梯度下降是指在
每个时期更新一个数据点的梯度。我们需要权衡梯度计算的准确度与保存在内存中的批量大小。此外,通过在每个epoch添
加随机噪声,我们可以通过小批处理(而非整个批处理)实现正规化效果。
9. 什么是数据扩充?举个例子。
答:数据扩充是一种技术,通过操作原始数据来增加输入数据。例如,对于图像,我们可以执行以下操作:
旋转图像、翻转图像、添加高斯模糊等。
10. 解释GAN的概念。
答:GAN(Generative Adversarial Network)即生成对抗网络,通常由两个神经网络D和G组成,其中D指的是判别器
(Discriminator),而G指生成网络(Generative Network)。这种模型的目标是创建数据,例如创建与真实图像并无二样的图像。
假设我们想要创建一只猫的对抗示例。神经网络G负责生成图像,而神经网络D则负责判断图像是否是猫。
G的目标是“愚弄”D——将G的输出始终分类为猫。
11. 使用Batchnorm有什么优势?
答:Batchnorm能够加快训练过程,而且(一些噪音的副产品)还具有调节作用。
12. 什么是多任务学习?应该在什么时候使用?
答:当我们使用少量数据处理多个任务时,多任务处理将很有用,而且我们还可以使用在其他任务的大型数据集上训练好的模型。
通过“硬”方式(即相同的参数)或“软”方式(即对成本函数进行正则化/惩罚)共享模型的参数。
13. 什么是端到端学习?列举一些优点
答:端到端学习通常是一个模型,该模型能够获取原始数据并直接输出所需的结果,而无需任何中间任务或功能工程。其优点包括:
无需手工构建功能,而且通常可以降低偏差。
14. 如果在最后一层中,我们先使用ReLU激活函数,然后再使用Sigmoid函数,会怎样?
答:答:由于ReLU始终会输出非负结果,因此该神经网络会将所有输入预测成同一个类别!
15. 如何解决梯度爆炸的问题?
(【梯度爆炸】一般出现在深层网络和权值初始化值太大的情况下。在深层神经网络或循环神经网络中,误差的梯度可在更新中累积相乘。
如果网络层之间的梯度值大于 1.0,那么重复相乘会导致梯度呈指数级增长,梯度变的非常大,然后导致网络权重的大幅更新,并因此
使网络变得不稳定。)
答:解决梯度爆炸问题的一个最简单的方法就是梯度修剪(对梯度设定阈值),即当梯度的绝对值大于M(M是一个很大的数字)时,设梯度为±M。
通过正则化项来限制权重的大小,也可以在一定程度上防止梯度爆炸的发生。比较常见的是 L1 正则和 L2 正则
16. 使用批量梯度下降法时,是否有必要打乱训练数据?
答:没有必要。因为每个epoch的梯度计算都会使用整个训练数据,所以打乱顺序也没有任何影响。
17. 当使用小批量梯度下降时,为什么打乱数据很重要?
答:如果不打乱数据的顺序,那么假设我们训练一个神经网络分类器,且有两个类别:A和B,那么各个epoch中的所有小批量
都会完全相同,这会导致收敛速度变慢,甚至导致神经网络对数据的顺序产生倾向性。
18. 列举迁移学习的超参数。
答:保留多少层、添加多少层、冻结多少层。
19. 关于权重正则化。(如果网络的模型变得很复杂,只用权值衰减就难以应对过拟合了。在这种情况下,经常使用Dropout)
答:1、L1正则化使weights更趋向于0,L2正则化使weights更趋向一个小一点的数值,这意味着L1比L2更容易将模型学到的特征忽略,
通常用L2去调整。也是在fc成去调加

2、正则化系数通常选0.001,然后根据模型去调整,也是10倍数去调整

3、系数太大,参数不容易收敛,系数太小没有太多影响,和dropout的数值同理

4、dropout和l2在同一层上别混用,不然会很难训练模型
20. 解决过拟合问题。
答:1.更多的数据集
2.使用 Dropout
3.正则化(正则化又称为权重衰减,具体做法是将权值的大小加入到损失函数中,在实际使用中分为 L1 正则与 L2 正则。)
4.Early Stopping
5.可变化的学习率
6.使用 Batch_Normalization(对数据进行一定程度的预处理,使得无论是训练集还是测试集都在一定范围内进行分布和波动,
对数据点中包含的误差进行掩盖化处理,从而增大模型的泛化能力。)
21. 迁移学习(Transfer Learning)
答:保留前面层的参数,只修改最后一层或几层的参数(数据越多,修改的层数越多),并构造新的输出层。
这样做的话就相当于只训练一个浅层网路。(大部分框架都可以设置来不训练某些层的参数)
22. 测试集上是否需要使用dropout?
答:答:不可以使用!dropout只能用于训练集。dropout是训练过程中应用的一种正则化技术。
23. 说明为什么神经网络中的dropout可以作为正则化。
答:关于dropout的工作原理有几种解释。我们可以将其视为模型平均的一种形式:我们可以在每一步中“去掉”模型的一部分并取平均值。
另外,它还会增加噪音,自然会产生调节的效果。最后,它还可以稀释权重,从根本上阻止神经网络中神经元的共适应。

24. 我们什么时候不能使用BiLSTM?说明在使用BiLSTM我们必须做的假设
答:在所有双向模型中,我们都可以假设在给定的“时间”内访问序列的下一个元素。文本数据(例如情感分析、翻译等)就是这种情况,而时间序列数据则不属于这种情况。
25. 判断对错:将L2正则化添加到RNN有助于解决梯度消失的问题。
答:错误!添加L2正则化会将权重缩小为零,在某些情况下这实际上会让梯度消失的问题更严重。
26. 假设训练错误/成本很高,而且验证成本/错误几乎与之相等。这是什么意思?我们应该做些什么?
答:这表明欠拟合。我们可以添加更多参数,增加模型的复杂性或减少正则化。
27. 说明为何L2正则化可以解释为一种权重衰减。
答:添加L2正则化会将权重缩小,等于乘以一个因子小于1的数

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

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

bias和Variance之间的权衡关系:其实就是在权衡模型的过拟合和欠拟合情况,如果模型过于简单,参数很少,那么它可能有高
偏差和低方差(欠拟合);另一方面,如果模型有大量的参数,那么它就会有高方差和低偏差(过拟合),这是在设计算法时计算
模型复杂度的基础。
29. 如果深度学习模型已经有了1000万张人脸向量,如何通过查询来找到新的人脸?
答:通常在人脸识别中,会将每一个人脸转换成为一个向量,问题的本质就是在问如何快速解决人脸识别中人脸向量的匹配问题:

一般性方法:对输入新的人脸向量比较和它最接近(最相似)的向量,通常使用triplet loss损失函数实现,但是在庞大的数据面前,
这种方法就会变得及其缓慢;
索引数据方法 (核心是“树”):主要思想是将数据划分为便于查询数据的结构(类似于树的结构),当有新数据可用时,在树中
进行查询有助于找到距离最近的向量,有几种方法参考:Locality Sensitive Hashing—LSH,
Approximate Nearest Neighbors— Annoy Indexing等。
30. 对于分类问题,精度指标是否完全可靠?你通常使用哪些度量来评估你的模型?
答:AP(平均精度)
mAP(各类平均精度)
准确率(Accuracy)
recall(召回率)
精准率(precision)
F1-score
ROC曲线
31. 如何理解反向传播?解释其作用机制
答:前向过程(前向计算):是一个帮助模型计算每一层权重的过程,其结果计算将产生一个yp结果。此时将计算损失函数的值,损失函数的值将显示模型的好坏;
反向求导:为了降低损失函数的值,我们需要使用导数。反向求导帮助我们计算网络每一层的导数。根据每个层上的导数值,优化器(Adam、SGD、AdaDelta…)应用梯度下降更新网络的权重;
反向传播:使用链式规则或导数函数计算每一层从最后一层到第一层的梯度值;
反复迭代:通过反复迭代上述过程,降低模型损失,从而达到收敛效果。
32. 激活函数是什么意思?激活函数的饱和区间是多少?
答:神经网络是由多个神经元构成,每个神经元都是一个线性单元,可以用来解决简单线性可分问题,但是在实际情况中,我们处理的
问题往往不是线性的,所以需要引进非线性的激活函数,给模型提供了非线性的能力,从而能更好的解决实际问题,常用的激活函数有:
sigmoid tanh ReLu PReLu LeakReLu
其中,sigmoid、ReLu(通常不称ReLu为饱和函数)和tanh都存在饱和区间,是饱和性激活函数,饱和区间可以理解为:触发函数
的饱和范围是指即使输入值改变,函数的输出值也不改变的区间
33. 当图像尺寸变为2倍,CNN的参数数量变为几倍?为什么?
答:不变!!
模型参数量和图像大小没关系,只和网络结构中卷积核数量和大小有关系,增加的是计算量!!
34 .如何处理不平衡数据?
答:实际数据和标准数据集在数据集的属性和数据量方面差异很大(标准数据集不需要调整)。对于实际的数据集,可能会出现数据不平衡
的情况,即类之间的数据不平衡。我们现在可以考虑以下技术:
选择正确的度量来评估模型:对于不平衡的数据集,使用准确性来评估是一项非常危险的工作。应选择精度、召回、F1 分数、AUC
等合适的评价量。
重新采样训练数据集:从一个不平衡的数据集中创建一个平衡的数据集有两种方法,即欠采样和过采样,具体技术包括重复、
bootstrapping 或 hits(综合少数过采样技术)等方法。
许多不同模型的集成:例如,你有两个层,一个拥有 1000 个数据的罕见类,一个包含 10,000 个数据样本的大型类。因此,
我们可以考虑一个 10 个模型的训练解决方案,而不是试图从一个罕见的类中找到 9000 个数据样本来进行模型训练。每个模型由
1000 个稀有类和 1000 个大规模类训练而成。然后使用集成技术获得最佳结果。
重新设计模型 — 损失函数:Focal loss、GHM loss等
35. 模型训练中,Epoch、Barch和Iteration概念
答:Epoch:表示整个数据集的迭代(所有内容都包含在训练模型中);
Batch:是指当我们不能一次将整个数据集放到神经网络中时,我们将数据集分割成几批较小的数据集;
Iteration:是运行 epoch 所需的批数。假设有 10,000 个图像作为数据,批处理的大小(batch_size)为 200。
然后一个 epoch 将包含 50 个Iteration(10,000 除以 200)。
36. 数据生成器的概念是什么?我们什么时候需要使用它?
答:数据生成器在写代码中很重要,数据生成函数帮助我们直接生成数据,然后送到模型中进行每个 batch 的训练。

利用生成函数对训练大数据有很大帮助。因为数据集并不总是需要全部加载到 RAM 中,这是一种内存的浪费,而且如果数据集太大,
会导致内存溢出,输入数据的处理时间会变长。
37. 模型的超参数是什么?它和参数有什么不同?
答:模型参数:是由训练数据生成的模型值,用于帮助显示数据中数量之间的关系。
模型参数有多种形式,如神经网络权值、支持向量机中的支持向量、线性回归或逻辑回归算法中的系数。
模型超参数:模型参数是由训练数据集本身建模的,则模型超参数是完全不同的。它完全在模型之外,不依赖于训练数据,
它的目的在于:
用于训练过程中,帮助模型找到最合适的参数;
它通常是由模型训练的参与者手工挑选的;
它可以基于几种启发式策略来定义。

 

posted @   魏无心  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
点击右上角即可分享
微信分享提示