【基础知识】深度学习习习

深度学习习习_基础知识

介绍一下卷积神经网络?

发展卷积神经网络的额初衷是进行图像分类。图像主要有如下3个特性:

  • 多层次结构: 如边缘组成眼睛,眼睛和鼻子等组成脸,脸和身体等组成人。
  • 特征局部性: 如眼睛就局限在一个小区域,提取眼睛特征时,只需根据这个小区域的像素提取即可。
  • 平移不变性: 如不管眼睛在图像哪个位置,特征提取器都需提取眼睛特征。根据图像的这3个特性,卷积神经网络引入特有的先验知识知识——深度网络、局部连接和参数共享。

1. 局部连接

在常规神经网络中,每个神经元都与前一层中的所有神经元连接(全连接),但是神经元连接方式在图像分类中既不现实也没有必要。因为,在全连接方式下,权重的数量可能达千万量级甚至亿级,大量的参数不仅会延长训练过程,还会导致网络产生过拟合,除此之外,存储大量权重还需要消耗大量内存。 根据特征局部性,如果某个神经元需要提取眼睛特征,则只需要针对眼睛所在的局部区域内的像素进行特征提取,不需要提取眼睛区域外的信息,所以该神经元只需与眼睛区域进行局部连接。

2. 参数共享

在图像分类中,同一个物体可能会在图像的不同位置出现,例如人脸会出现在图像的任意位置,神经元必须对人脸的位置不敏感。而识别不同位置人脸的不同神经元,采用的权重应该是相对的。因为神经元学习是先通过权重和像素进行内积,再进行非线性激活实现的。这些神经元共享相同的参数,这就是参数共享。

3. 卷积神经元的组织方式

要提取图像的特征,必须有大量的神经元,它们从观察输入的同一局部区域提取不同特征。这些神经元的组织方式必然是三维:高度、宽度和深度。高度和宽度决定神经元的空间尺寸,深度决定了对输入区域提取特征的维度(每个神经元)提取一个特征。

基于梯度下降法的最优化方法?

梯度下降法的基本思想

如果要找到某函数的最小值,最好的方法是沿着负梯度方向探寻。假设有一个参数向量x及其梯度dx,更新公式是:x+=-lr*dx 其中lr称为学习率,是超参数,是正的常量,其值一般较小。在整个数据集上计算梯度进行参数更新时,只要学习率足够小,每次更新参数时总能使损失函数的值减小。

1. 随机梯度下降法SGD

参数更新中的梯度是通过对训练集中所有样本的平均损失求梯度得到的。当训练集规模较小时,计算梯度不成问题。然而对于大规模数据集,当训练样本达到百万量级时,需要计算整个训练集的梯度,才能更新一次参数。这样更新效率太低,浪费计算资源。一个常用的代替方法是从训练集中随机抽取小批量样本,计算它们平均损失的梯度,来实现一次参数更新。用小批量样本的平均损失代替全体样本的平均损失进行参数更新,可以加快参数更新频率,加速收敛。小批量样本的平均损失是全体样本平均损失的无偏估计。这是因为训练集中的同类样本是相关的,同类样本中不同个体的损失是相似的,所以随机抽取的一个样本损失可以作为该类所有样本损失的估计。 如果小批量样本中只有一个样本,那么称为随机梯度下降法(Stochastic Gradient Descent,SGD)。SGD指每次使用一个样本来更新参数,但我们经常使用SGD来指代小批量梯度下降法。小批量样本的数量是一个超参数,它受存储器的存储容量限制,一般设置为32、64、128等2的指数,运算效率会更高。SGD算法中,每次都要随机抽取batch个样本,实现时可以采用先整体打乱训练集,然后每次按顺序取batch个样本的方式。 深度学习中最常用的优化算法之一就是利用SGD及其改进算法进行训练,下面将介绍这些算法。

2. 基本动量法

把梯度下降想象成小球从山坡滚向山谷的过程,损失值是小球当前的高度,最小化损失值就是希望小球滚动到高度最小的山谷。设小球的空间位置是x,每次移动的路径矢量是dx,位置x处的山的高度就是损失值。那么基本梯度下降法的小球是“这样”滚动的:在出发点A处,计算点A在各个方向的梯度,沿着坡度最陡的方向,沿着这个方向走一段路,再停下。注意每到一个新位置,小球都必须停下来。准确地说,小球并没有滚动下山,而是盲人下山的方式,走一步停一步,用拐杖探明坡度最陡的方向,沿此方向上的坡度都为0,盲人无法移动了。然而一个真正的小球要比盲人高效得多,从起始点A静止滚动到B的时候,小球获得一定速度,继续滚动,小球会越滚越快,快速滚向谷底。 动量法就是通过模拟小球的滚动过程来加速神经网络的收敛。这时就需要一个速度变量,根据速度变量来更新参数。速度变量积累了历史梯度信息,使之具有惯性,当梯度方向一致时,加速收敛;当梯度方向不一致时,减小路径曲折程度。

mu = 0.9
v = mu *v     #[1]
v += -lr *dx   #[2]
x += v

变量v就是速度,初始化为0(相当于小球从静止开始滚动),语句[1]表明v积累了历史梯度,mu是小于1的正超参数,物理意义类似于摩擦系数,该变量有效地抑制了速度,降低了小球的动能,不然小球在山谷永远不会停下来(如果没有摩擦,滚动的小球会一直运动下去,不会停在山谷)。通过交叉验证,这个参数通常设为0.5、0.9或0.99.但需注意的是:mu越大,摩擦越小;mu=1,没有摩擦;mu=0,摩擦无穷大,变为基本的梯度下降法。语句[2]表明速度v受当前速度dx调节。 假设每个时刻的梯度dx相等,由语句[1]和[2]可得:v = -lr/(1-mu)xdx,此时相当于学习率为lr/(1-mu),mu=0.9表示10倍于SGD算法的收敛速度。把1/(1-mu)看作放大率更容易理解,mu越大,放大率越大,收敛可能越快。

假设每个时刻的梯度dx总是0(相当于小球滚动到平地),由语句[1]可得:v = mun* v0,其中n是参数更新次数。可见,v是指衰减,小球只要滚动到平地时的初速度v0足够大,就有机会冲出当前平地,到达一个更低的山谷。速度v被称为动量,所以该方法被称为动量法。

为什么需要做特征归一化、标准化?

  1. 使不同量纲的特征处于同一数值量级,减少方差大的特征的影响,使模型更准确。

  2. 加快学习算法的收敛速度。

防止过拟合的策略?

在构建模型的过程中,通常会划分训练集、测试集。

当模型在训练集上精度很高,在测试集上精度很差时,模型过拟合;当模型在训练集和测试集上精度都很差时,模型欠拟合。

预防过拟合策略:

  1. 增加训练数据:获取更多数据,也可以使用图像增强、增样等;

  2. 使用合适的模型:适当减少网络的层数、降低网络参数量;

  3. Dropout:随机抑制网络中一部分神经元,使的每次训练都有一批神经元不参与模型训练;

  4. L1、L2正则化:训练时限制权值的大小,增加惩罚机制,使得网络更稀疏;

  5. 数据清洗:去除问题数据、错误标签和噪声数据;

  6. 限制网络训练时间:在训练时将训练集和验证集损失分别输出,当训练集损失持续下降,而验证集损失不再下降时,网络就开始出现过拟合现象,此时就可以停止训练了;

  7. 在网络中使用BN层(Batch Normalization)也可以一定程度上防止过拟合。

阐述一下感受野的概念?

感受野指的是卷积神经网络每一层输出的特征图上每个像素点映射回输入图像上的区域的大小,神经元感受野的范围越大表示其接触到的原始图像范围就越大,也就意味着它能学习更为全局,语义层次更高的特征信息,相反,范围越小则表示其所包含的特征越趋向局部和细节。因此感受野的范围可以用来大致判断每一层的抽象层次,并且我们可以很明显地知道网络越深,神经元的感受野越大。

神经网路的深度和宽度分别指的是什么?

  • 神经网络的深度决定了网络的表达能力,早期的backbone设计都是直接堆叠卷积层,它的深度指的是神经网络的层数;后来的backbone设计采用了更高效的module(或block)堆叠的方式,每个module是由多个卷积层组成,这时深度指的是module的个数。
  • 神经网络的宽度决定了网络在某一层学习到的信息量,指的是卷积神经网络中最大的通道数,由卷积核数量最多的层决定。通常的结构设计中卷积核的数量随着层数越来越多的,直到最后一层feature map达到最大,这是因为越到深层,feature map的分辨率越小,所包含的信息越高级,所以需要更多的卷积核来进行学习。通道越多效果越好,但带来的计算量也会大大增加,所以具体设定也是一个调参的过程,并且各层通道数会按照8×的倍数来确定,这样有利于GPU的并行计算。

下采样的作用是什么?通常有哪些方式?

下采样层有两个作用,一是减少计算量,防止过拟合;二是增大感受野,使得后面的卷积核能够学到更加全局的信息。下采样的方式主要有两种:

  • 采用stride为2的池化层,如Max-pooling和Average-pooling,目前通常使用Max-pooling,因为他计算简单而且能够更好的保留纹理特征;
  • 采用stride为2的卷积层,下采样的过程是一个信息损失的过程,而池化层是不可学习的,用stride为2的可学习卷积层来代替pooling可以得到更好的效果,当然同时也增加了一定的计算量

上采样的原理和常用方式?

在卷积神经网络中,由于输入图像通过卷积神经网络(CNN)提取特征后,输出的尺寸往往会变小,而有时我们需要将图像恢复到原来的尺寸以便进行进一步的计算(如图像的语义分割),这个使图像由小分辨率映射到大分辨率的操作,叫做上采样,它的实现一般有三种方式:

  1. 插值,一般使用的是双线性插值,因为效果最好,虽然计算上比其他插值方式复杂,但是相对于卷积计算可以说不值一提,其他插值方式还有最近邻插值、三线性插值等;

  2. 转置卷积又或是说反卷积,通过对输入feature map间隔填充0,再进行标准的卷积计算,可以使得输出feature map的尺寸比输入更大;

  3. PixelShuffle,具体可以看《Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel Convolutional Neural Network 》的论文。

    PixelShuffle(像素重组)的主要功能是将低分辨的特征图,通过卷积和多通道间的重组得到高分辨率的特征图。这一方法最初是为了解决图像超分辨率问题而提出的,这种称为Sub-Pixel Convolutional Neural Network的方法成为了上采样的有效手段。
    在这里插入图片描述

深度可分离卷积的概念和作用🌻

深度可分离卷积将传统的卷积分两步进行,分别是depthwise和pointwise。首先按照通道进行计算按位相乘的计算,深度可分离卷积中的卷积核都是单通道的,输出不能改变feature map的通道数,此时通道数不变;然后依然得到将第一步的结果,使用1*1的卷积核进行传统的卷积运算,此时通道数可以进行改变。

图片

Focus模块,将W、H信息集中到通道空间,输入通道扩充了4倍,作用是可以使信息不丢失的情况下提高计算力。具体操作为把一张图片每隔一个像素拿到一个值,类似于邻近下采样,这样我们就拿到了4张图,4张图片互补,长的差不多,但信息没有丢失,拼接起来相当于RGB模式下变为12个通道,通道多少对计算量影响不大,但图像缩小,大大减少了计算量。

计算量的前后对比:

Kh × Kw × Cin × Cout × H × W

变成了 Kh × Kw × Cin × H × W + 1 × 1 × Cin × Cout × H × W

通过深度可分离卷积,当卷积核大小为3时,深度可分离卷积比传统卷积少8到9倍的计算量。

转置卷积(反卷积)的原理

转置卷积又称反卷积(Deconvolution),它和空洞卷积的思路正好相反,是为上采样而生,也应用于语义分割当中,而且他的计算也和空洞卷积正好相反,先对输入的feature map间隔补0,卷积核不变,然后使用标准的卷积进行计算,得到更大尺寸的feature map。

  • 使用反卷积容易产生棋盘效应,使用 PixelShuffle可以解决该问题。

图片

神经网络中Addition / Concatenate区别是什么?

Addition和Concatenate分支操作统称为shortcut。

  • Addition是在ResNet中提出,两个相同维度的feature map相同位置点的值直接相加,得到新的相同维度feature map,这个操作可以融合之前的特征,增加信息的表达
  • Concatenate操作是在Inception中首次使用,被DenseNet发扬光大,和addition不同的是,它只要求两个feature map的HW相同,通道数可以不同,然后两个feature map在通道上直接拼接,得到一个更大的feature map,它保留了一些原始的特征,增加了特征的数量,使得有效的信息流继续向后传递

图片

哪些常用的激活函数?

ReLU以及leaky ReLU:

图片

优点:

  • 解决了梯度消失的问题;
  • 计算速度和收敛速度非常快;
  • 稀疏激活:在随机初始化的网络中,只有大约 50% 的隐藏单元被激活(具有非零输出)。

缺点:

  • 低维特征向高维转换时会部分丢失;
  • 均值为非零;

Sigmoid函数

优点:

  1. 输出为 0 到 1 之间的连续实值,此输出范围和概率范围一致,因此可以用概率的方式解释输出;
  2. 将线性函数转变为非线性函数;

缺点:

  1. 幂运算相对来讲比较耗时;

  2. 输出均值为非 0;

  3. 容易出现梯度消失的问题;

tanh函数

优点:

  1. Tanh 函数的导数比 Sigmoid 函数导数值更大、梯度变化更快,在训练过程中收敛速度更快;

  2. 使得输出均值为 0,可以提高训练的效率;

  3. 将线性函数转变为非线性函数;

缺点:

  1. 幂运算相对来讲比较耗时;

  2. 容易出现梯度消失;

神经网络中1*1卷积有什么作用?🔨

  1. 降维,减少计算量;在ResNet模块中,先通过1x1卷积对通道数进行降通道,再送入3x3的卷积中,能够有效的减少神经网络的参数量和计算量;

  2. 升维,用最少的参数拓宽网络通道,通常在轻量级的网络中会用到,经过深度可分离卷积后,使用1x1卷积核增加通道的数量,例如mobilenet、shufflenet等;

  3. 实现跨通道的交互和信息整合;增强通道层面上特征融合的信息,在feature map尺度不变的情况下,实现通道升维、降维操作其实就是通道间信息的线性组合变化,也就是通道的信息交互整合的过程;

  4. 1*1卷积核可以在保持feature map尺度(不损失分辨率)不变的情况下,大幅增加非线性特性(利用后接的非线性激活函数)。

梯度消失和梯度爆炸的原因是什么?

原因:激活函数的选择。

  • 梯度消失:令bias=0,则神经网络的输出结果等于各层权重参数的积再与输入数据集相乘,若参数值较小时,则权重参数呈指数级减小。

  • 梯度爆炸:令bias=0,则神经网络的输出结果等于各层权重参数的积再与输入数据集相乘,若参数值较大时,则权重参数呈指数级增长。

为什么神经网络种常用relu作为激活函数?

  • 在前向传播和反向传播过程中,ReLU相比于Sigmoid等激活函数计算量小;在反向传播过程中,Sigmoid函数存在饱和区,若激活值进入饱和区,则其梯度更新值非常小,导致出现梯度消失的现象。而ReLU没有饱和区,可避免此问题;
  • ReLU可令部分神经元输出为0,造成网络的稀疏性,减少前后层参数对当前层参数的影响,提升了模型的泛化性能;
posted @ 2021-08-14 00:28  梁君牧  阅读(253)  评论(0编辑  收藏  举报