常见的面试问题————深度学习篇(持续更新)

1、pooling 有什么作用,为什么要用 pooling,pooling 的种类?

Pooling 主要作用是保留主要特征,同时保持特征一定的旋转、平移不变性。主要有 max pooling 和 average pooling,一般来说 max pooling 更突出前景,average pooling 更突出背景。

2. Pooling 层如何进行反向传播和梯度更新?

对于 max pooling 只对 max value 处进行梯度更新,其它都为 0;对于 average pooling 对之前的 pooling 位置处的所有元素做更新,更新值为 average pooling 层对应位置上的梯度除以采样个数(比如 2x2 pooling 则对应 4)

      mean pooling

mean pooling 的前向传播就是把一个 patch 中的值求取平均来做 pooling,那么反向传播的过程也就是把某个元素的梯度等分为 n 份分配给前一层,这样就保证池化前后的梯度(残差)之和保持不变,还是比较理解的,图示如下 :

常见的面试问题————深度学习篇(持续更新)

  max pooling

max pooling 也要满足梯度之和不变的原则,max pooling 的前向传播是把 patch 中最大的值传递给后一层,而其他像素的值直接被舍弃掉。那么反向传播也就是把梯度直接传给前一层某一个像素,而其他像素不接受梯度,也就是为 0。所以 max pooling 操作和 mean pooling 操作不同点在于需要记录下池化操作时到底哪个像素的值是最大,也就是 max _id,这个变量就是记录最大值所在位置的,因为在反向传播中要用到,那么假设前向传播和反向传播的过程就如下图所示 :

常见的面试问题————深度学习篇(持续更新)

3、max pooling 和 mean pooling 有什么缺点?

pooling 能够增大感受野,让卷积看到更多的信息,但是它在降维的过程中丢失了一些信息(因为毕竟它变小了嘛,只留下了它认为重要的信息),所以 pooling 增大感受野的前提是丢失了一些信息(即降低了分辨率),这对 segmentation 要求的精确度 location 有一定的影响。

4、卷积层中 1x1 卷积的作用?

    1) 实现跨通道的交互和信息整合。

    2) 进行卷积核通道数的降维和升维。

5、梯度消失和梯度爆炸产生原因

常见的面试问题————深度学习篇(持续更新)

常见的面试问题————深度学习篇(持续更新)

常见的面试问题————深度学习篇(持续更新)

常见的面试问题————深度学习篇(持续更新)

常见的面试问题————深度学习篇(持续更新)

常见的面试问题————深度学习篇(持续更新)

常见的面试问题————深度学习篇(持续更新)

常见的面试问题————深度学习篇(持续更新)

6、RNN 为什么会产生梯度消失?LSTM 如何解决 RNN 中梯度消失的问题?

7、LSTM、GRU 等结构和原理

8、如何选择**函数?

选择一个适合的**函数并不容易,需要考虑很多因素,通常的做法是,如果不确定哪一个**函数效果更好,可以把它们都试试,然后在验证集或者测试集上进行评价。然后看哪一种表现的更好,就去使用它。

以下是常见的选择情况:

1、如果输出是 0、1 值(二分类问题),则输出层选择 sigmoid 函数,然后其它的所有单元都选择 ReLU 函数。

2、如果在隐藏层上不确定使用哪个**函数,那么通常会使用 ReLU **函数。有时,也会使用 tanh **函数,但 ReLU 的一个优点是:当是负值的时候,导数等于 0。

3、sigmoid **函数:除了输出层是一个二分类问题基本不会用它。

4、tanh **函数:tanh 是非常优秀的,几乎适合所有场合。

5、ReLU **函数:最常用的默认函数,如果不确定用哪个**函数,就使用 ReLu 或者 Leaky ReLU,再去尝试其他的**函数。

6、如果遇到了一些死的神经元,我们可以使用 Leaky ReLU 函数。

9、常见的损失函数有哪些?

一、0 和 1 损失

二、绝对值损失

三、平方差损失函数

四、指数损失函数

五、对数损失函数

六、交叉熵损失函数(对其进行求导,重中之重)

10、交叉熵损失函数比均方误差损失函数的区别,分类中为什么交叉熵损失函数比均方误差损失函数更常用?

 交叉熵损失函数关于输入权重的梯度表达式与预测值与真实值的误差成正比且不含**函数的梯度,而均方误差损失函数关于输入权重的梯度表达式中则含有,由于常用的 sigmoid/tanh 等**函数存在梯度饱和区,使得 MSE 对权重的梯度会很小,参数 w 调整的慢,训练也慢,而交叉熵损失函数则不会出现此问题,其参数 w 会根据误差调整,训练更快,效果更好。

详细请参考:https://www.jianshu.com/p/d20e293a0d34

11、Dropout 为什么能够防止过拟合?算法原理是怎样的?它的缺点是什么?

12、BN的实现,BN 算法如何防止过拟合的?BN 算法如何进行网络训练加速的?

BN的公式略

在训练中,BN 的使用使得一个 mini-batch 中的所有样本都被关联在了一起,因此网络不会从某一个训练样本中生成确定的结果。其实这句话的意思是,BN 的使用,使得网络在训练时不依靠于某一个样本进行更新或者输出,而是依赖于整个 batch size 的数据,这样参数不会太依赖于某一个数据,而是一个 batch size 内的数据,一定程度上防止了过拟合。

BN 是通过将每次卷积后的数据分布拉到指定分布域内(比如标准高斯分布),这样在参数学习时,由于数据分布基本相同,学习起来速度会变得很快,特别是对于 sigmoid 类型函数来说,将数据分布拉到非梯度饱和区间,这样避免了梯度消失现象,加快了训练速度。

13、LN与BN的区别

14、L1正则和L2正则的区别

参考:

 https://zhuanlan.zhihu.com/p/97326991

 https://zhuanlan.zhihu.com/p/97311641

https://zhuanlan.zhihu.com/p/97324416