深度学习面试题

深度学习基础

常见的激活函数有哪些?它们的优缺点是什么?

Sigmoid

Sigmoid函数能够吧输入的连续的实值变换成为0和1之间的输出,特别地,如果是非常大的负数,那么输出就是0;如果是非常大的正数,则经过它的输出则是1。
优缺点:
优点 1. Sigmoid函数的输出在(0,1)之间,输出范围有限,优化稳定,可以用作输出层。
优点 2. 连续函数,便于求导。

缺点 1. 需要幂运算,计算成本高。
缺点 2. 输出不是以0为均值的,导致收敛速度下降。
缺点 3. 容易出现梯度弥散,在反向传播时,当梯度接近于0,权重基本不会更新,从而无法完成深层网络的训练。

ReLU Relu = max(0,x)。
它在正区间内解决了梯度消失的问题,同时因为在使用它的过程中只需要判断输入是否大于零,所以它具有较快的计算速度,收敛速度远快于sigmoid和tanh函数
优点:
在x>0区域上,不会出现梯度饱和、梯度消失的问题,收敛速度快。
不需要进行指数运算,因此运算速度快,复杂度低。
缺点:
输出的均值非0.
存在神经元死亡,在x<0时,梯度为0。这个神经元及之后的神经元梯度永远为0,不再对任何数据有所响应,导致相应参数永远不会被更新。

LeakyRelu

上述的Relu对x小于0的情况均输出0,而LeakyRelu在x小于0时可以输出非0值。
优点:
解决了Relu的神经元死亡问题问,在负区域具有小的正斜率,因此即使对于负输入值,它也可以进行反向传播。 具有Relu函数的优点。
缺点:
结果不一致,无法为正负输入值提供一致的关系预测

过拟合、欠拟合

欠拟合是指模型在训练集、验证集和测试集上均表现不佳的情况;
过拟合是指模型在训练集上表现很好,到了验证和测试阶段就很差,即模型的泛化能力很差。

过拟合和欠拟合产生的原因:

欠拟合(underfitting):模型复杂度过低特;征量过少
过拟合(overfitting): 参数太多,模型复杂度过高;建模样本选取有误,如样本数量太少,选样方法错误,样本标签错误等,导致选取的样本数据不足以代表预定的分类规则等;

解决欠拟合(高偏差)的方法

1、模型复杂化 对同一个算法复杂化。例如回归模型添加更多的高次项,增加决策树的深度,增加神经网络的隐藏层数和隐藏单元数等。
2、增加更多的特征,使输入数据具有更强的表达能力 特征挖掘十分重要,尤其是具有强表达能力的特征,往往可以抵过大量的弱表达能力的特征。特征的数量往往并非重点,质量才是,总之强特最重要。 能否挖掘出强特,还在于对数据本身以及具体应用场景的深刻理解,往往依赖于经验。
3、调整参数和超参数 超参数包括:神经网络中:学习率、学习衰减率、隐藏层数、隐藏层的单元数、Adam优化算法中的β1和β2参数、batch_size数值等。其他算法中:随机森林的树数量,k-means中的cluster数,正则化参数λ等。
4、增加训练数据往往没有用,欠拟合本来就是模型的学习能力不足,增加再多的数据给它训练它也没能力学习好。
5、降低正则化约束,正则化约束是为了防止模型过拟合,如果模型压根不存在过拟合而是欠拟合了,那么就考虑是否降低正则化参数λ或者直接去除正则化项

解决过拟合(高方差)的方法:

1、增加训练数据数
发生过拟合最常见的现象就是数据量太少而模型太复杂。增加数据量有时可能不是那么容易,需要花费一定的时间和精力去搜集处理数据。利用现有数据进行扩充或许也是一个好办法。例如在图像识别中,如果没有足够的图片训练,可以把已有的图片进行旋转,拉伸,镜像,对称等,这样就可以把数据量扩大好几倍而不需要额外补充数据
2、使用正则化约束
代价函数后面添加正则化项,可以避免训练出来的参数过大从而使模型过拟合。使用正则化缓解过拟合的手段广泛应用,不论是在线性回归还是在神经网络的梯度下降计算过程中,都应用到了正则化的方法。常用的正则化有l1正则和l2正则,具体使用哪个视具体情况而定,一般l2正则应用比较多。
3、减少特征数
欠拟合需要增加特征数,那么过拟合自然就要减少特征数。去除那些非共性特征,可以提高模型的泛化能力.
4、调整参数和超参数
不论什么情况,调参是必须的
5、降低模型的复杂度
欠拟合要增加模型的复杂度,那么过拟合正好反过来。
6、使用Dropout
这一方法只适用于神经网络中,即按一定的比例去除隐藏层的神经单元,使神经网络的结构简单化。
7、提前结束训练
即early stopping,在模型迭代训练时候记录训练精度(或损失)和验证精度(或损失),如果模型训练的效果不再提高,比如训练误差一直在降低但是验证误差却不再降低甚至上升,这时候便可以结束模型训练了。

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

学习率大有如下优点: 1、加快学习速率。 2、帮助跳出局部最优值。
但存在如下缺点: 1、导致模型训练不收敛。 2、单单使用大学习率容易导致模型不精确。
学习率小有如下优点: 1、帮助模型收敛,有助于模型细化。 2、提高模型精度。
但存在如下缺点: 1、无法跳出局部最优值。 2、收敛缓慢。

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

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

实际使用:通常在模型训练开始阶段会给一个比较大的学习率(比如0.1,0.01等),在模型训练越靠后,使用学习率衰减策略(每多少轮次学习率×0.1等),减小学习率,从而使得能够更好的收敛。

解释GAN的概念。

答:GAN(Generative Adversarial Network)即生成对抗网络,通常由两个神经网络D和G组成,其中D指的是判别器(Discriminator),而G指生成网络(Generative Network)。这种模型的目标是创建数据,例如创建与真实图像并无二样的图像。假设我们想要创建一只猫的对抗示例。神经网络G负责生成图像,而神经网络D则负责判断图像是否是猫。G的目标是“愚弄”D——将G的输出始终分类为猫。

BatchNorm有什么优势?

答:BatchNorm能够加快训练过程,而且(一些噪音的副产品)还具有调节作用。
加快网络的训练和收敛的速度
控制梯度爆炸防止梯度消失
防止过拟合

padding的目的:

保留边界信息,如果不加padding,边界限速点只被计算一次,而加上后,会被多次计算。
卷积神经网络增加padding后,会保证输出的图像和输入的图像尺寸保持一致

CNN是卷积神经网络,其关键层有那些:

① 输入层,对数据去均值,做data augmentation等工作
② 卷积层,局部关联抽取feature
③ 激活层,非线性变化
④池化层,下采样
⑤ 全连接层,增加模型非线性

模型训练中,Epoch、Barch和Iteration概念

Epoch:表示整个数据集的迭代(所有内容都包含在训练模型中);
Batch:是指当我们不能一次将整个数据集放到神经网络中时,我们将数据集分割成几批较小的数据集; Iteration:是运行 epoch
所需的批数。假设有 10,000 个图像作为数据,批处理的大小(batch_size)为 200。然后一个 epoch 将包含 50
个Iteration(10,000 除以 200)。

梯度下降法

梯度下降法又称最速下降法,是求解无约束最优化问题的一种最常用的方法,在对损失函数最小化时经常使用。
梯度下降法是一种迭代算法。选取适当的初值x(0),不断迭代,更新x的值,进行目标函数的极小化,直到收敛。

深度学习优化学习方法(一阶、二阶)

一阶方法:随机梯度下降(SGD)、动量(Momentum)、牛顿动量法(Nesterov动量)、AdaGrad(自适应梯度)、RMSProp(均方差传播)、Adam、Nadam。

二阶方法:牛顿法、拟牛顿法、共轭梯度法(CG)、BFGS、L-BFGS。

自适应优化算法有哪些?(Adagrad(累积梯度平方)、RMSProp(累积梯度平方的滑动平均)、Adam(带动量的RMSProp,即同时使用梯度的一、二阶矩))。

梯度下降陷入局部最优有什么解决办法? 可以用BGD、SGD、MBGD、momentum,RMSprop,Adam等方法来避免陷入局部最优。

Batch Normalization

可以理解为是一种数据预处理技术,使得每层网络的输入都服从(0,1)0均值,1方差分布,如果不进行BN,那么每次输入的数据分布不一致,网络训练精度自然也受影响。Batch Norm即批规范化,目的是为了解决每批数据训练时的不规则分布给训练造成的困难,对批数据进行规范化,还可以在梯度反传时,解决梯度消失的问题。Batchnorm也是一种正则的方式,可以代替其他正则方式如dropout,但通过这样的正则化,也消融了数据之间的许多差异信息。

Batch Normalization的作用

神经网络在训练的时候随着网络层数的加深,激活函数的输入值的整体分布逐渐往激活函数的取值区间上下限靠近,从而导致在反向传播时低层的神经网络的梯度消失。

而BatchNormalization的作用是通过规范化的手段,将越来越偏的分布拉回到标准化的分布,使得激活函数的输入值落在激活函数对输入比较敏感的区域,从而使梯度变大,加快学习收敛速度,避免梯度消失的问题。

①不仅仅极大提升了训练速度,收敛过程大大加快;

②还能增加分类效果,一种解释是这是类似于Dropout的一种防止过拟合的正则化表达方式,所以不用Dropout也能达到相当的效果;

③另外调参过程也简单多了,对于初始化要求没那么高,而且可以使用大的学习率等。

Bn层的好处

1、加速网络的收敛速度。在神经网络中,存在内部协变量偏移的现象,如果每层的数据分布不同的话,会导致非常难收敛,如果把每层的数据都在转换在均值为零,方差为1的状态下,这样每层数据的分布都是一样的,训练会比较容易收敛。

2、防止梯度爆炸和梯度消失。对于梯度消失而言,以Sigmoid函数为例,它会使得输出在[0,1]之间,实际上当x到了一定的大小,sigmoid激活函数的梯度值就变得非常小,不易训练。归一化数据的话,就能让梯度维持在比较大的值和变化率;对于梯度爆炸而言,在方向传播的过程中,每一层的梯度都是由上一层的梯度乘以本层的数据得到。如果归一化的话,数据均值都在0附近,很显然,每一层的梯度不会产生爆炸的情况。

3、防止过拟合。在网络的训练中,Bn使得一个minibatch中所有样本都被关联在了一起,因此网络不会从某一个训练样本中生成确定的结果,这样就会使得整个网络不会朝这一个方向使劲学习。一定程度上避免了过拟合。

讲一下CNN,每个层及作用

卷积层:用它来进行特征提取

池化层:对输入的特征图进行压缩,一方面使特征图变小,简化网络计算复杂度;一方面进行特征压缩,提取主要特征

激活函数:是用来加入非线性因素的,因为线性模型的表达能力不够。

全连接层(fully connected
layers,FC)在整个卷积神经网络中起到“分类器”的作用。全连接层则起到将学到的“分布式特征表示”映射到样本标记空间的作用。

损失函数

1. 分类任务

多分类任务

在多分类任务通常使用softmax将logits转换为概率的形式,所以多分类的交叉熵损失也叫做softmax损失,它的计算方法是:
在这里插入图片描述其中,y是样本x属于某一个类别的真实概率,而f(x)是样本属于某一类别的预测分数,S是softmax函数,L用来衡量p,q之间差异性的损失结果。
eg:
在这里插入图片描述上图中的交叉熵损失为:

在这里插入图片描述
代码如下:

# 导入相应的包 import tensorflow as tf
# 设置真实值和预测值 y_true = [[0, 1, 0], [0, 0, 1]] y_pred = [[0.05, 0.95, 0], [0.1, 0.8, 0.1]]
# 实例化交叉熵损失 cce = tf.keras.losses.CategoricalCrossentropy()
# 计算损失结果 cce(y_true, y_pred).numpy() ```

二分类任务

在处理二分类任务时,我们不在使用softmax激活函数,而是使用sigmoid激活函数,那损失函数也相应的进行调整,使用二分类的交叉熵损失函数:

在这里插入图片描述

其中,y是样本x属于某一个类别的真实概率,而y^是样本属于某一类别的预测概率,L用来衡量真实值与预测值之间差异性的损失结果。

在tf.keras中实现时使用BinaryCrossentropy(),如下所示:

import tensorflow as tf
y_true = [[0], [1]]
y_pred =[[0.4], [0.6]]
bce = tf.keras.losses.BinaryCrossentropy()
bce(y_true, y_pred).numpy()

2. 回归任务

回归任务中常用的损失函数有以下几种:

平均绝对误差(L1 Loss): 平均绝对误差(Mean Absolute Error,MAE)
是指模型预测值f(x)和真实值y之间距离的平均值,其公式如下:
在这里插入图片描述

均方误差MSE (L2 Loss):均方误差(Mean Square Error,MSE)是模型预测值f(x) 与真实样本值y
之间差值平方的平均值,其公式如下:
在这里插入图片描述

正则化

正则化可用于降低模型的复杂性。这是通过惩罚损失函数完成的,可通过 L1 和 L2 两种方式完成,数学方程式如下:
在这里插入图片描述
L1 惩罚的目的是优化权重绝对值的总和。它生成一个简单且可解释的模型,且对于异常值是鲁棒的。
在这里插入图片描述
L2 惩罚权重值的平方和。该模型能够学习复杂的数据模式,但对于异常值不具备鲁棒性。

这两种正则化方法都有助于解决过拟合问题,读者可以根据需要选择使用。

如何防止过拟合

1.交叉验证

交叉验证是防止过拟合的好方法。在交叉验证中,我们生成多个训练测试划分(splits)并调整模型。K-折验证是一种标准的交叉验证方法,即将数据分成 k 个子集,用其中一个子集进行验证,其他子集用于训练算法。
在这里插入图片描述
2. 用更多数据进行训练

用更多相关数据训练模型有助于更好地识别信号,避免将噪声作为信号。数据增强是增加训练数据的一种方式,可以通过翻转(flipping)、平移(translation)、旋转(rotation)、缩放(scaling)、更改亮度(changing
brightness)等方法来实现。
3. 早停

对模型进行迭代训练时,我们可以度量每次迭代的性能。当验证损失开始增加时,我们应该停止训练模型,这样就能阻止过拟合。
4.正则化

正则化可用于降低模型的复杂性。 Dropout

5.Dropout
是一种正则化方法,用于随机禁用神经网络单元。它可以在任何隐藏层或输入层上实现,但不能在输出层上实现。该方法可以免除对其他神经元的依赖,进而使网络学习独立的相关性。该方法能够降低网络的密度。

得分筛选与非极大抑制

得分筛选就是筛选出得分满足confidence置信度的预测框。 非极大抑制就是筛选出一定区域内属于同一种类得分最大的框。

得分筛选与非极大抑制的过程可以概括如下:
1、找出该图片中得分大于门限函数的框。在进行重合框筛选前就进行得分的筛选可以大幅度减少框的数量。
2、对种类进行循环,非极大抑制的作用是筛选出一定区域内属于同一种类得分最大的框,对种类进行循环可以帮助我们对每一个类分别进行非极大抑制。
3、根据得分对该种类进行从大到小排序。
4、每次取出得分最大的框,计算其与其它所有预测框的重合程度,重合程度过大的则剔除。

YOLOv3

关于YOLOv3网络的训练细节:正负样本的匹配

在原论文中,针对每一个ground truth(简称GT,真值,就是你打标签时标注的目标矩形框),都会分配一个bounding
box,表示针对每一个GT,都会分配一个正样本,则一张图片有几个GT,就会有几个正样本。YOLOv3中正负样本的定义:YOLOv3中就不再看中心点落在哪个grid
cell(网格)里面就由哪个grid cell预测了,而是看谁的anchor与待检测目标的grouth
truth的iou值最大,才由那个anchor去预测,也就是在YOLOv3里面正样本是指与grouth
truth的iou值最大的预测框或anchor,对于和grouth
truth有iou值且大于设定iou阈值(原论文中设为0.5)但不是最大值的预测框或anchor,就忽略它们;对于小于设定iou阈值的预测框或anchor而言就是负样本。
此外,在原论文中也提到,对于当前的boundingbox,若其不是正样本的话,则它既没有定位损失,也没有类别损失,仅仅只有置信度损失(confidence loss)。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值