关于深度学习网络结构的一些问题
1、卷积原理,工程实现?
参考:https://blog.csdn.net/wweiainn/article/details/80231792
2、CNN为什么对图像work的特别好?
强大的非线性拟合能力,结构化数据操作。
3、卷积在图像中有什么直观作用?
4、卷积核是否越大越好?
卷积核不是越大越好,大多数情况下,通过堆叠较小的卷积核比直接采用单个更大的卷积核会更加有效。
一般来说,卷积核越大,receptive field(感受野)越大,看到的图片信息越多,因此获得的特征越好。虽说如此,但是大的卷积核会导致计算量的暴增,不利于模型深度的增加,计算性能也会降低。
5、One-Hot编码的优势?
1、通过one-hot编码,可以对特征进行了扩充。
2、连续变量经过编码后,从一个权重变为多个权重,提升了模型的非线性能力。
3、不需要多参数进行归一化处理。
4、随着将大权重拆分成几个小权重管理特征,降低了异常值对模型的影响,增加了模型稳定性。
5、 生成了较大的稀疏矩阵。
6、pooling有什么作用,为什么要用pooling,pooling的种类?
Pooling主要作用是保留主要特征,同时保持特征一定的旋转、平移不变性。主要有max pooling和average pooling,一般来说max pooling更突出前景,average pooling更突出背景。
7、max pooling的作用?
Pooling主要作用是保留主要特征,突出前景,同时保持特征一定的旋转、平移不变性。
8、空洞卷积的原理?
空洞卷积又叫Dilated convolution,是在标准的 convolution map 里注入空洞,以此来增加 感受野。
提出的主要原因:
a、Up-sampling / pooling layer (e.g. bilinear interpolation) is deterministic. (参数不可学习),内部数据结构丢失;空间层级化信息丢失。
b、小物体信息无法重建 (假设有四个pooling layer 则任何小于 2^4 = 16 pixel物体信息将理论上无法重建。)
而 dilated convolution 的设计就良好的避免了这些问题,空洞卷积在增大感受野的同时,不损失信息,同时也可以完成参数的更新学习。
空洞卷积中有个参数叫膨胀率,是卷积核中每个元素相隔的距离,如果膨胀率为1则退化成普通卷积核。
9、为什么需要偏向b?可以没有吗?
先不说为什么一定要加入偏置b,就还是上面的分类问题,假如我现在的样本点是如下这种:
此时我们希望得到的线性方程分割线是下面这种,能够正确将两类进行分开:
如果没有偏置的话,我们所有的分割线都是经过原点的,但是现实问题并不会那么如我们所愿.都是能够是经过原点线性可分的。
10、什么是棋盘格效应?空洞卷积是怎么消除棋盘格效应的?
棋盘格效应一般都是由转置卷积在反卷积层操作时引起的。在基于CNN的超分辨率中,经常在最后一层使用stride>1的Deconv layer,而这会造成棋盘格噪声。如下图所示:
具体产生原因
上面的黑格子是表示原始图像中的某一个像素点,白色的表示转置卷积中的stride,一般是用0去填充。下面一层就是deconv生成的图像。可以看到stride不能整除size的时候,就会出现棋盘格效应(就是转置出来的feature map中的元素可能会被重复计算,多次叠加)。当滤波器大小size不能被步长stride进行整除的时候,就会出现棋盘格效应。
如何避免呢?
在应用转置卷积时,可以做两件事情来减轻这种效应。
第一,确认使用的过滤器的大小是能够被卷积步长整除的,从而来避免重叠问题。
第二,可以采用卷积步长为 1 的转置卷积,来减轻「棋盘效应」。
然而,正如在最近许多模型中所看到的,这种效益依旧可能会显露出来。这篇论文进一步提出了一个更好的上采样方法:首先调整图像大小(使用最近邻域内插法(Nearest Neighbor interpolation)和双向性内插法(bilinear interpolation)),然后制作一个卷积层。通过这样做,论文作者成功避免了这一「棋盘效应」。大家或许也想要在自己的应用中尝试一下这个方法吧。
采用一般的插值算法(NN或bilinear)先把图像放大到目标分辨率,再用普通的conv去做计算,替代deconv layer。
11、Pooling层如何进行反向传播和梯度更新?
对于max pooling只对max value处进行梯度更新,其它都为0;对于average pooling对之前的pooling位置处的所有元素做更新,更新值为average pooling层对应位置上的梯度除以采样个数(比如2x2 pooling则对应4)。
12、CNN padding的原理和用途?
(1)保持边界信息,如果没有加padding的话,输入图片最边缘的像素点信息只会被卷积核操作一次,但是图像中间的像素点会被扫描到很多遍,那么就会在一定程度上降低边界信息的参考程度,但是在加入padding之后,在实际处理过程中就会从新的边界进行操作,就从一定程度上解决了这个问题。
(2)可以利用padding对输入尺寸有差异图片进行补齐,使得输入图片尺寸一致。
(3)在卷积神经网络的卷积层加入Padding,可以使得卷积层的输入维度和输出维度一致。
(4)卷积神经网络的池化层加入Padding,一般都是保持边界信息和(1)所述一样。
13、卷积操作后计算输出特征的尺度?
设卷积前的尺寸特征为:WxW,卷积核尺寸为KxK,步长为S,padding=p,那么输出的尺寸大小C为:
其中,对于池化层来说,向上取整,对于卷积层向下取整。
14、CNN卷积中BP(反向传播)过程卷积核旋转多少度?
反向传播时,卷积核旋转了180°,详细推导请参考:
https://blog.csdn.net/weixin_42296533/article/details/84563724
https://blog.csdn.net/zy3381/article/details/44409535
注意:这里只是用在反向传播时,计算参数更新的时候反转用。
15、卷积层中1x1卷积的作用?
1、实现跨通道的交互和信息整合。
2、进行卷积核通道数的降维和升维。
16、空洞卷积的优缺点?
优点:增大感受野,捕获多尺度上下文信息,信息不丢失。
缺点:会出现了棋盘格效应,因为空洞卷积得到的某一层的结果中,邻近的像素是从相互独立的子集中卷积得到的,相互之间缺少依赖(因为有空洞,如果步长和膨胀率没有很好的设定,则会出现这种情况)。多次叠加多个具有相同空洞率的卷积核会造成格网中有一些像素自始至终都没有参与运算,不起任何作用,这对于像素级别的预测是不友好的。
空洞卷积存在理论问题,论文中称为gridding,其实就是网格效应/棋盘问题。因为空洞卷积得到的某一层的结果中,邻近的像素是从相互独立的子集中卷积得到的,相互之间缺少依赖。
局部信息丢失:由于空洞卷积的计算方式类似于棋盘格式,某一层得到的卷积结果,来自上一层的独立的集合,没有相互依赖,因此该层的卷积结果之间没有相关性,即局部信息丢失。
远距离获取的信息没有相关性:由于空洞卷积稀疏的采样输入信号,使得远距离卷积得到的信息之间没有相关性,影响分类结果。
17、计算感受野?
其中W是输入尺寸,F是卷积核尺寸,P是padding大小,S为stride。
根据这个公式可以一直往后推导,计算最终feature map的感受野。
18、梯度消失和梯度爆炸产生原因
19、神经网络权重的初始化方法为何能减缓梯度爆炸现象?
(1)梯度消失:
根据链式法则,如果每一层神经元对上一层的输出的偏导乘上权重结果都小于1的话,那么即使这个结果是0.99,在经过足够多层传播之后,误差对输入层的偏导会趋于0,可以采用ReLU激活函数有效的解决梯度消失的情况。
(2)梯度爆炸
根据链式法则,如果每一层神经元对上一层的输出的偏导乘上权重结果都大于1的话,在经过足够多层传播之后,误差对输入层的偏导会趋于无穷大,可以通过激活函数来解决。
20、上采样的几种方法?上采样会不会有特征缺失?
1)unpooling:恢复max的位置,其余部分补零
2)deconvolution(反卷积):先对input补零,再conv
3)插值方法,双线性插值等;
4)扩张卷积,dilated conv;
21、激活函数和损失函数的种类有哪些?
22、什么是迁移学习?迁移学习的优点?
为什么需要迁移学习?
1、大数据与少标注的矛盾:虽然有大量的数据,但往往都是没有标注的,无法训练机器学习模型。人工进行数据标定太耗时。
2. 大数据与弱计算的矛盾:普通人无法拥有庞大的数据量与计算资源。因此需要借助于模型的迁移。
3. 普适化模型与个性化需求的矛盾:即使是在同一个任务上,一个模型也往往难以满足每个人的个性化需求,比如特定的隐私设置。这就需要在不同人之间做模型的适配。
迁移学习的优点
迁移学习的总体思路可以概括为:开发算法来最大限度地利用有标注的领域的知识,来辅助目标领域的知识获取和学习。
什么时候用迁移学习?
假如两个领域之间的区别特别的大,不可以直接采用迁移学习,因为在这种情况下效果不是很好。如果两个域的区别不大,可以使用迁移学习。
23、RNN梯度消失问题,为什么LSTM和GRU可以解决此问题?
RNN中的梯度消失和CNN中的类似,只是,都是由于选择不合适的激活函数,在参数更新时,根据链式法则,较远的参数得不到更新。LSTM
24、LSTM、GRU等结构和原理(时序经典模型)
25、LSTM相比于RNN的优点在哪里?(防止了梯度爆炸)
26、RNN为什么会产生梯度消失?LSTM如何解决RNN中梯度消失的问题?
RNN设计初衷之一是能够捕获长距离输入之间的依赖。RNN中的激活函数是tanh,一种sigmoid类型的激活函数,梯度消失和梯度爆炸产生的原因和传统的深度网络相同。
RNN梯度消失的解决办法:
1.选取更好的激活函数,如Relu激活函数。ReLU函数的左侧导数为0,右侧导数恒为1,这就避免了“梯度消失“的发生。但恒为1的导数容易导致“梯度爆炸“,但设定合适的阈值可以解决这个问题
2.加入BN层,其优点包括可加速收敛、控制过拟合,可以少用或不用Dropout和正则、降低网络对初始化权重不敏感,且能允许使用较大的学习率等
3.改变传播结构,如换成LSTM
27、LSTM是怎么解决梯度消失问题的?
LSTM一定程度上模仿了长时记忆,相比于梯度裁剪,最大的优点就是,自动学习在什么时候可以将error反向传播,自动控制哪些是需要作为记忆存储在LSTM cell中。一般长时记忆模型包括写入,读取,和忘记三个过程对应到LSTM中就变成了input_gate,output_gate,forget_gate,三个门,范围在0到1之间,相当于对输入输出进行加权的学习,利用大量数据来自动学习加权的参数(即学习了哪些错误可以用BP更新参数),
28、One Hot向量和Word Embedding的思想?
One hot是把向量通过0和1编码将字符特征转换为数值特征。它的优点是,一是解决了分类器不好处理离散数据的问题,二是在一定程度上也起到了扩充特征的作用。它的缺点是在文本特征表示上有些缺点就非常突出了。首先,它是一个词袋模型,不考虑词与词之间的顺序(文本中词的顺序信息也是很重要的);其次,它假设词与词相互独立(在大多数情况下,词与词是相互影响的);最后,它得到的特征是离散稀疏的。
word embedding(词嵌入),即将高维词向量嵌入到一个低维空间,比如设置好了200种词特征,动物、植物,猫科、肉食等等,那么对于狮子这一项就可以描述为1,0,1,1…,其实思想就是这么简单。
29、什么是word2vec?解释下其思想和原理?
word2vec模型其实就是简单化的神经网络。输入是One-Hot Vector,Hidden Layer没有激活函数,也就是线性的单元。Output Layer维度跟Input Layer的维度一样,用的是softmax回归。
当这个模型训练好以后,我们并不会用这个训练好的模型处理新的任务,我们真正需要的是这个模型通过训练数据所学得的参数,例如隐层的权重矩阵。
这个模型是如何定义数据的输入和输出呢?一般分为CBOW(Continuous Bag-of-Words 与Skip-Gram两种模型。CBOW模型的训练输入是某一个特征词的上下文相关的词对应的词向量,而输出就是这特定的一个词的词向量。 Skip-Gram模型和CBOW的思路是反着来的,即输入是特定的一个词的词向量,而输出是特定词对应的上下文词向量。CBOW对小型数据库比较合适,而Skip-Gram在大型语料中表现更好。
30、Attention机制的作用?
注意力机制即 Attention mechanism在序列学习任务上具有巨大的提升作用,在编解码器框架内,通过在编码段加入Attention模型,对源数据序列进行数据加权变换,或者在解码端引入Attention 模型,对目标数据进行加权变化,可以有效提高序列对序列的自然方式下的系统表现。
为什么要加入Attention:当输入序列非常长时,模型难以学到合理的向量表示序列输入时,随着序列的不断增长,原始根据时间步的方式的表现越来越差,这是由于原始的这种时间步模型设计的结构有缺陷,即所有的上下文输入信息都被限制到固定长度,整个模型的能力都同样收到限制,我们暂且把这种原始的模型称为简单的编解码器模型。编解码器的结构无法解释,也就导致了其无法设计。
31、卷积优化的操作有哪些?
1、可分离卷积操作(MobileNet中采用的)
2、空洞卷积
3、sENet(来给每个通道特征学习一个权重,来怕判断每个通道特征的重要性)
4、分组卷积
5、1x1卷积核
6、shuffleNet
7、使用skip connection(残差网络的方式),让模型得以更深
8、DenseNet方式
深度学习中的pooling
1、pooling提出的作用是什么?max pooling 和mean pooling的作用?
Pooling目的是为了保持某种不变性(旋转、平移、伸缩等)。保留主要的特征同时减少参数(降维,效果类似PCA)和计算量,防止过拟合,提高模型泛化能力。mean-pooling,即对邻域内特征点只求平均,max-pooling,即对邻域内特征点取最大。
可以看出mean-pooling可以更多的保留图像的背景信息,而max-pooling可以更多的保留纹理信息(也就是前景信息)。
详细请参考:https://blog.csdn.net/zxyhhjs2017/article/details/78607469
2、pooling是怎么进行反向传播的?
CNN网络中另外一个不可导的环节就是Pooling池化操作,因为Pooling操作使得feature map的尺寸变化,假如做2×2的池化,假设那么第l+1层的feature map有16个梯度,那么第l层就会有64个梯度,这使得梯度无法对位的进行传播下去。其实解决这个问题的思想也很简单,就是把1个像素的梯度传递给4个像素,但是需要保证传递的loss(或者梯度)总和不变。根据这条原则,mean pooling和max pooling的反向传播也是不同的。
a、mean pooling
mean pooling的前向传播就是把一个patch中的值求取平均来做pooling,那么反向传播的过程也就是把某个元素的梯度等分为n份分配给前一层,这样就保证池化前后的梯度(残差)之和保持不变,还是比较理解的,图示如下 :
mean pooling比较容易让人理解错的地方就是会简单的认为直接把梯度复制N遍之后直接反向传播回去,但是这样会造成loss之和变为原来的N倍,网络是会产生梯度爆炸的。
b、max pooling
max pooling也要满足梯度之和不变的原则,max pooling的前向传播是把patch中最大的值传递给后一层,而其他像素的值直接被舍弃掉。那么反向传播也就是把梯度直接传给前一层某一个像素,而其他像素不接受梯度,也就是为0。所以max pooling操作和mean pooling操作不同点在于需要记录下池化操作时到底哪个像素的值是最大,也就是max _id,这个变量就是记录最大值所在位置的,因为在反向传播中要用到,那么假设前向传播和反向传播的过程就如下图所示 :
3、max pooling和mean pooling有什么缺点?
pooling能够增大感受野,让卷积看到更多的信息,但是它在降维的过程中丢失了一些信息(因为毕竟它变小了嘛,只留下了它认为重要的信息),所以pooling增大感受野的前提是丢失了一些信息(即降低了分辨率),这对segmentation要求的精确度location有一定的影响。
4、空洞卷积(膨胀卷积)的思想及优点?
空洞卷积是在语义分割领域中代替pooling操作的,因为pooling在实际使用中,由于会选择最明显的特征,一般来说,这对分类和检测任务来说没有什么影响,但是对语义分割任务来说,精度会有一定的损失,这时有大佬提出了空洞卷积,在增大感受野的同时,不会损失信息。
如下图所示,上边是正常池化,下边是空洞卷积。
对于上图右边的空洞卷积,其卷积核大小为3x3—2 dilated rate,其中2为膨胀率,也就是卷积核中相邻两个元素之间的位置差值,在上图中,位置差值为2。
空洞卷积的好处是不做pooling损失信息的情况下,加大了感受野,让每个卷积输出都包含较大范围的信息。这就保证了,空洞卷积在具有pooling的优点外,还可以避免了pooling的缺点。