深度学习基础篇(一)
1. 为什么需要做特征归一化、标准化?
前述
Feature scaling,常见的提法有“特征归一化”、“标准化”,是数据预处理中的重要技术,有时甚至决定了算法能不能work以及work得好不好。谈到feature scaling的必要性,最常用的2个例子可能是:
- 特征间的单位(尺度)可能不同,比如身高和体重,比如摄氏度和华氏度,比如房屋面积和房间数,一个特征的变化范围可能是[1000, 10000],另一个特征的变化范围可能是[−0.1,0.2],在进行距离有关的计算时,单位的不同会导致计算结果的不同,尺度大的特征会起决定性作用,而尺度小的特征其作用可能会被忽略,为了消除特征间单位和尺度差异的影响,以对每维特征同等看待,需要对特征进行归一化。
- 原始特征下,因尺度差异,其损失函数的等高线图可能是椭圆形,梯度方向垂直于等高线,下降会走zigzag路线,而不是指向local minimum。通过对特征进行zero-mean and unit-variance变换后,其损失函数的等高线图更接近圆形,梯度下降的方向震荡更小,收敛更快,如下图所示,图片来自Andrew Ng。
对于归一化 两句话概括:1)归一化后加快了梯度下降求最优解的速度
2)归一化有可能提高精度
1:归一化后加快了梯度下降求最优解的速度
蓝色的圈圈图代表的是两个特征的等高线。其中左图两个特征X1和X2的区间相差非常大,X1区间是[0,2000],X2区间是[1,5],其所形成的等高线非常尖。
当使用梯度下降法寻求最优解时,很有可能走“之字型”路线(垂直等高线走),从而导致需要迭代很多次才能收敛;
而右图对两个原始特征进行了归一化,其对应的等高线显得很圆,在梯度下降进行求解时能较快的收敛。
因此如果机器学习模型使用梯度下降法求最优解时,归一化往往非常有必要,否则很难收敛甚至不能收敛。
如果不归一化,不同变量的损失梯度图可能会呈现一个椭圆,这样在梯度下降的时候迭代次数会比较多;归一化后损失的等高线图就是一个圆,任意一点的切线方向便是梯度下降的方向,这样便减少了迭代次数,加快了模型训练。
2.提升模型的精度
归一化的另一好处是提高精度,这在涉及到一些距离计算的算法时效果显著,比如算法要计算欧氏距离,上图中x2的取值范围比较小,涉及到距离计算时其对结果的影响远比x1带来的小,所以这就会造成精度的损失。所以归一化很有必要,他可以让各个特征对结果做出的贡献相同。
进一步总结问题
- 加快收敛速度:在使用梯度下降法进行模型训练时,特征的取值范围差异较大可能导致损失函数的等高线形状不规则(如“椭圆”或“尖”),这使得梯度下降的路径变得曲折,增加了收敛所需的迭代次数。通过归一化或标准化,特征值范围被缩放到相似的区间,等高线变得更规则(如“圆形”),从而加快收敛速度。
- 提高模型精度:在涉及距离计算的算法(如KNN、KMeans等)中,不同特征的取值范围会影响距离的计算。如果某个特征的值范围较小,而其他特征的值范围较大,距离计算时小范围特征的贡献会被忽略,从而影响模型的表现。归一化和标准化可以确保所有特征在同一尺度上对结果产生均衡的影响。
- 避免数值不稳定:在某些算法中(如神经网络),特征值过大或过小可能导致数值计算不稳定,甚至可能出现梯度消失或梯度爆炸的问题。通过归一化或标准化,可以缓解这些问题,提高模型的稳定性。
- 改善模型解释性:在某些情况下,标准化后的参数值可以更直接地反映各个特征对模型输出的影响,便于进行特征选择和模型解释。
2. 常用的归一化的方法有哪些?
1归一化的方法有哪些?
1. Min-Max归一化
描述:Min-Max归一化也称为线性归一化或最大最小规范化,它将数据缩放到[0, 1]区间内。这是最简单的归一化方法之一。
公式:
其中,是原始数据, 和 分别是数据集中的最小值和最大值, 是归一化后的数据。
2. Z-Score归一化(标准化)
描述:Z-Score归一化也称为零均值归一化或标准化,它将数据转换为均值为0、标准差为1的分布。这种方法适用于数据分布接近正态分布的情况。
公式:
其中, 是原始数据, 是数据的均值, 是数据的标准差, 是归一化后的数据。
3.非线性归一化方法
除了上述线性归一化方法外,还有一些非线性归一化方法,如对数变换、平方根变换、指数变换等。这些方法通过非线性函数将数据映射到新的区间内,以改善数据的分布特性。
3. 阐述一下感受野的概念。
一、感受野定义
在卷积神经网络中,感受野(Receptive Field)的定义是卷积神经网络每一层输出的特征图(feature map)上每个像素点在原始图像上映射的区域大小,这里的原始图像是指网络的输入图像,是经过预处理后的图像。
从上图可看到输出中的每个元素都由(3,3)的卷积核对应输入中(3,3)的局部区域“加权求和”得到,所以该输出的特征元素对应到输入中的区域大小就是3×3,既其感受野大小为3×3。
神经元感受野的值越大表示其能接触到的原始图像范围就越大,也意味着它可能蕴含更为全局,语义层次更高的特征;相反,值越小则表示其所包含的特征越趋向局部和细节。因此感受野的值可以用来大致判断每一层的抽象层次。
二、感受野大小的计算
很明显,深层卷积层的感受野大小和它之前所有层的滤波器大小和步长有关系,而涉及到这两个参数的有卷积层和pooling层。所以是个迭代公式。
其中 为第 层的感受野大小为第 层的的感受野大小为第L层的卷积核大小(也可以是Pooling), Si为第 i 层的卷积步长。一般来说 。
4. 神经网络的深度和宽度分别指的是什么?
1.深度——神经网络的层数
更深的网络,有更好的非线性表达能力,可以学习更复杂的变换,从而可以拟合更加复杂的特征,更深的网络可以更简单地学习复杂特征。
网络加深会带来梯度不稳定、网络退化的问题,过深的网络会使浅层学习能力下降。深度到了一定程度,性能就不会提升了,还有可能会下降。
2.宽度——每层的通道数
足够的宽度可以保证每一层都学到丰富的特征,比如不同方向,不同频率的纹理特征。宽度太窄,特征提取不充分,学习不到足够信息,模型性能受限。
宽度贡献了网络大量计算量,太宽的网络会提取过多重复特征,加大模型计算负担。
提升网络性能可以先从宽度入手,提高每一层的通道的利用率、用其他通道的信息补充较窄的层,找到宽度的下限,用尽量小的计算量得到更好的性能。
分辨率——是指网络中特征图的分辨率对于网络的分辨率
3.深度和宽度所带来的优缺点
1. 深度
- 优点:非线性表达能力:更深的网络可以通过堆叠多个非线性变换来学习复杂的特征表示,从而能够拟合复杂的函数。特征层次化:深度网络能够逐层提取特征,从简单到复杂。例如,初层可能学习边缘特征,中间层学习形状特征,最后层学习更高级的语义特征。
- 缺点:梯度消失/爆炸:在训练过程中,随着网络深度增加,梯度可能会逐层消失或爆炸,导致训练困难。网络退化:过深的网络可能导致性能下降,特别是在没有适当的正则化和优化技术的情况下。计算资源:更深的网络通常需要更多的计算资源和时间进行训练。
2. 宽度
- 优点:特征学习能力:宽度可以使每层学习到更丰富的特征,特别是在处理高维数据时,能够捕捉到不同的特征模式。并行处理:宽度增加了网络的参数数量,使得模型能够更好地拟合训练数据。
- 缺点:计算量:宽度的增加会显著增加模型的计算复杂度和内存消耗。过拟合风险:如果网络过宽而且训练数据不足,模型可能会学习到噪声而不是有用的特征,从而导致过拟合。
5. 上/下采样的作用是什么?通常有哪些方式?
在计算机视觉领域中,上采样(upsampling)和下采样(downsampling)是两种常见的操作,用于调整图像或特征图的尺寸。
1. 下采样
一、定义
下采样是将输入图像或特征图的尺寸减小,通常会降低空间分辨率。通过这种方式,可以提取出更为抽象的特征,同时减少后续计算所需的资源。
二、目的
减少计算量和内存消耗:较小的特征图意味着更少的参数和更快的计算速度。特征提取:通过下采样,可以提取出图像的主要特征,忽略一些细节,从而增强模型的泛化能力。不变性:下采样有助于实现对平移、旋转和尺度变化的某种程度的不变性。
常见方法:
最大池化 | 在每个局部区域内选择最大值 | 保留最显著的特征 | 1. 有效提取显著特征 | 1. 可能丢失一些细节信息 |
2. 实现平移不变性 | ||||
平均池化 | 在每个局部区域内计算平均值 | 保留区域的整体信息 | 1. 计算简单 | 1. 可能平滑掉重要特征 |
2. 对噪声有一定的鲁棒性 |
2. 上采样
一、定义
上采样是将输入图像或特征图的尺寸增大,通常会增加空间分辨率。上采样的目的是恢复图像或特征的细节信息,以便更好地进行后续任务。
二、目的
恢复细节信息:在图像生成、分割等任务中,上采样可以帮助恢复图像的细节。提高分辨率:增加特征图的尺寸,使得模型能够处理更高分辨率的数据。
三、常见方法:
双线性插值 | 通过考虑相邻像素的加权平均值生成新像素值 | 平滑图像,恢复细节 | 1. 生成的图像较为平滑 | 1. 计算复杂度较高 |
2. 较好地保留了图像特征 | ||||
最近邻插值 | 选择最近的像素值作为新像素的值 | 快速生成新像素 | 1. 计算简单,速度快 | 1. 可能导致锯齿状边缘 |
2. 实现简单 | ||||
转置卷积 | 通过学习的卷积核对特征图进行上采样 | 学习复杂特征,恢复图像细节 | 1. 能够学习到更复杂的特征 | 1. 计算复杂度高 |
2. 可与其他卷积层共享权重 | 3. 可能产生棋盘效应 |
6. 池化层是怎么进行反向传播的?
Pooling池化操作的反向梯度传播
CNN网络中一个不可导的环节就是Pooling池化操作,因为Pooling操作使得feature map的尺寸变化,假如做2×2的池化,假设那么第l+1
层的feature map有16个梯度,那么第l
层就会有64个梯度,这使得梯度无法对位的进行传播下去。其实解决这个问题的思想也很简单,就是把1个像素的梯度传递给4个像素,
根据这条原则,mean pooling和max pooling的反向传播也是不同的。
mean pooling
mean pooling的前向传播就是把一个patch中的值求取平均来做pooling,那么反向传播的过程也就是把某个元素的梯度等分为n份分配给前一层,这样就保证池化前后的梯度(残差)之和保持不变,还是比较理解的,图示如下
mean pooling比较容易让人理解错的地方就是会简单的认为直接把梯度复制N遍之后直接反向传播回去,但是这样会造成loss之和变为原来的N倍,网络是会产生梯度爆炸的。
max pooling
对于最大池化,其前向传播是取某特征区域的最大值进行输出,这个区域仅有最大值神经元参与了前向传播,因此,在反向传播时,框架仅需要将该区域的梯度直接分配到最大值神经元即可,其他神经元的梯度被分配为0且是被舍弃不参与反向传播的,但如何确认最大值神经元,这个还得框架在进行前向传播时记录下最大值神经元的Max ID位置,这是最大池化与平均池化差异的地方,
那么假设前向传播和反向传播的过程就如下图所示 :
7. 神经网络中Addition / Concatenate区别是什么?
Addition(加法)
- 操作方式:Addition 是对两个或多个相同形状的张量进行逐元素相加的操作。例如,对于两个形状为 (N,C,H,W)(N,C,H,W) 的张量 AA 和 BB,它们的加法操作结果也是一个形状为 (N,C,H,W)(N,C,H,W) 的张量 CC,其中 C[i]=A[i]+B[i]C[i]=A[i]+B[i]。
- 特征融合:Addition 通常用于将特征进行融合,尤其是在残差网络(ResNet)中,通过跳跃连接(skip connections)将输入与输出相加,以便保留原始信息。
- 计算复杂度:Addition 的计算复杂度相对较低,因为它只涉及简单的逐元素加法。
Concatenate(拼接)
- 操作方式:Concatenate 是将两个或多个张量沿某个指定的维度进行拼接的操作。例如,对于两个形状为 (N,C,H,W)(N,C,H,W) 的张量 AA 和 BB,如果在通道维度(通常是第二维)进行拼接,结果的形状将是 (N,C1+C2,H,W)(N,C1+C2,H,W),其中 C1C1 和 C2C2 分别是张量 AA 和 BB 的通道数。
- 特征组合:Concatenate 通常用于将来自不同来源或不同特征提取器的特征组合在一起,以增加模型的表达能力。
- 计算复杂度:Concatenate 的计算复杂度相对较高,因为它需要在内存中创建一个新的张量来存储拼接后的结果。
总结
- Addition 是逐元素相加,适用于相同形状的张量,常用于特征融合和跳跃连接。
- Concatenate 是沿指定维度拼接,适用于不同形状的张量,常用于特征组合。
8. 深度可分离卷积的概念和作用。
深度可分离卷积是一种卷积操作,旨在减少计算复杂度和模型参数,同时保持模型的表现。它主要由两个步骤组成:逐通道卷积和逐点卷积
深度可分离卷积分为两步
第一,对于来自上一层的多通道特征图,将其全部拆分为单个通道的特征图,分别对他们进行单通道卷积,然后重新堆叠到一起。这被称之为逐通道卷积(Depthwise Convolution)。这个拆分的动作十分关键,在这一步里,它只对来自上一层的特征图做了尺寸的调整,而通道数没有发生变化。
第二,将前面得到的特征图进行第二次卷积,这是采取的卷积核都是1×1大小的,滤波器包含了与上一层通道数一样数量的卷积核。一个滤波器输出一张特征图,因此多个通道,则需要多个滤波器。这又被称之为逐点卷积(Pointwise Convolution)。
逐通道卷积
Depthwise Convolution的一个卷积核负责一个通道,一个通道只被一个卷积核卷积。
一张5×5像素、三通道彩色输入图片(shape为5×5×3),Depthwise Convolution首先经过第一次卷积运算,DW完全是在二维平面内进行。卷积核的数量与上一层的通道数相同(通道和卷积核一一对应)。所以一个三通道的图像经过运算后生成了3个Feature map(如果有same padding则尺寸与输入层相同为5×5),如下图所示。
其中一个Filter只包含一个大小为3×3的Kernel,卷积部分的参数个数计算如下:
Depthwise Convolution完成后的Feature map数量与输入层的通道数相同,无法扩展Feature map。而且这种运算对输入层的每个通道独立进行卷积运算,没有有效的利用不同通道在相同空间位置上的feature信息。因此需要Pointwise Convolution来将这些Feature map进行组合生成新的Feature map
逐点卷积
Pointwise Convolution的运算与常规卷积运算非常相似,它的卷积核的尺寸为 1×1×M,M为上一层的通道数。所以这里的卷积运算会将上一步的map在深度方向上进行加权组合,生成新的Feature map。有几个卷积核就有几个输出Feature map
经过Pointwise Convolution之后,同样输出了4张Feature map,与常规卷积的输出维度相同
整体结构
深度可分离卷积的整体结构可以表示为:
- 输入 → 逐通道卷积 → 逐点卷积 → 输出
作用
- 减少参数数量:传统卷积操作的参数数量是 K×K×Cin×CoutK×K×Cin×Cout,而深度可分离卷积的参数数量为 K×K×C+C×C′K×K×C+C×C′,显著减少了参数数量,尤其是在通道数 CC 较大时。
- 降低计算复杂度:深度可分离卷积的计算量远低于标准卷积。计算复杂度的降低使得模型在移动设备和边缘设备上更易于部署。
- 保持性能:尽管参数和计算量减少,但深度可分离卷积在许多任务上(如图像分类、目标检测等)仍能保持良好的性能。这使得它成为轻量级网络(如 MobileNet)的核心组件。
9. 转置卷积的原理。
转置卷积(Transposed Convolution) 在语义分割或者对抗神经网络(GAN)中比较常见,其主要作用就是做上采样(UpSampling)。在有些地方转置卷积又被称作fractionally-strided convolution或者deconvolution,但deconvolution具有误导性,不建议使用。对于转置卷积需要注意的是:
- 转置卷积不是卷积的逆运算
- 转置卷积也是卷积
普通卷积
首先来看普通卷积,如下图,普通卷积核一步一步滑动窗口得到特征输出,但实际上在计算机中并不会如上图所示计算(这样计算效率比较低),计算机会将卷积核转换成等效的矩阵,将输入转换为向量。通过输入向量和卷积核矩阵的相乘获得输出向量。输出的向量经过整形便可得到我们的二维输出特征。具体的操作如下图所示。
由于上图3x3卷积核要在输入上不同的位置卷积4次,所以通过补零的方法将卷积核分别置于一个4x4矩阵的四个角落。这样输入可以直接和这四个4x4的矩阵进行卷积,构成等效矩阵,而舍去了滑动这一操作步骤。
记向量化的图像为 I ,向量化的卷积矩阵为C , 输出特征向量为 O ,则有:
转置卷积
下面是一般转置卷积操作步骤:
1.在输入特征图元素间填充s-1行、列0(其中s表示转置卷积的步距)
2.在输入特征图四周填充k-p-1行、列0(其中k表示转置卷积的kernel_size大小,p为转置卷积的padding,注意这里的padding和卷积操作中有些不同)
3.将卷积核参数上下、左右翻转
4.做正常卷积运算(填充0,步距1)
下图为转置卷积不同s、p的卷积过程示意图
转置卷积操作后特征图的大小可以通过如下公式计算:
总结:
1.转置卷积也是卷积
2.转置卷积不是卷积的逆运算
3.转置卷积的作用是为了上采样
10. BN层是什么? BN层的优点。
BN层的本质原理
BN层(Batch Normalization Layer)是深度学习中常用的一种方法,用于加速神经网络的收敛速度,并且可以减小模型对初始参数的依赖性,提高模型的鲁棒性。BN层是在每个mini-batch数据上进行归一化处理,使得神经网络的输入更加平稳,从而有助于提高模型的收敛速度和泛化能力。
BN层的原理是将每个mini-batch数据进行归一化处理,即将每个特征的均值和方差分别减去和除以当前mini-batch数据的均值和方差,以使得每个特征的数值分布在一个相对稳定的范围内。此外,为了保证模型的表达能力,BN层还引入了两个可学习参数gamma和beta,用于调整归一化后的特征值的范围和偏移量。
BN层的优点总结
1.可以加速神经网络的收敛速度。
2.减小模型对初始参数的依赖性,提高模型的鲁棒性。
3.可以防止梯度消失和梯度爆炸的问题,有助于提高模型的稳定性。
4.可以减少模型过拟合的风险,提高模型的泛化能力。
5.允许使用更高的学习率:由于BN层的稳定性,通常可以选择更高的学习率,从而加速训练。
总之,BN层是一种常用的正则化方法,可以有效地提高神经网络的训练速度和泛化能力。
#深度学习##面经##23届找工作求助阵地#