机器学习八股文

1. 神经网络基础

1.1 为什么必须在神经网络中引入非线性

如果不用激励函数(其实相当于激励函数是f(x) = x),在这种情况下你每一层输出都是上层输入的线性函数,很容易验证,无论你神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当

1.2 Relu在零点不可导,那么反向传播中如何处理?

ReLU虽然在零点不可导,但是我们在做反向传播的计算时,对ReLU这个函数的导数分情况讨论。即ReLU在零点时人为地给它赋予一个导数,比如0或者1。例如在下面的ReLU反向传播函数实现中,将ReLU在零点位置的导数设置为0。

1.3 Relu的优缺点

有的负值都变为0,而正值不变,这种操作被成为单侧抑制。正因为有了这单侧抑制,才使得神经网络中的神经元也具有了稀疏激活性

使用 ReLU 得到的 SGD 的收敛速度会比 sigmoid/tanh 快很多; 计算复杂度低,不需要进行指数运算;

训练的时候很”脆弱”,很容易就”die”了; ReLU不会对数据做幅度压缩,所以数据的幅度会随着模型层数的增加不断扩张。

1.4 为什么要归一化,四种归一化:BN,LN,IN,GN

为什么要归一化:神经网络学习过程的本质就是为了学习数据分布,如果我们没有做归一化处理,那么每一批次训练数据的分布不一样,从大的方向上看,神经网络则需要在这多个分布中找到平衡点,从小的方向上看,由于每层网络输入数据分布在不断变化,这也会导致每层网络在找平衡点,显然,神经网络就很难收敛了。当然,如果我们只是对输入的数据进行归一化处理(比如将输入的图像除以255,将其归到0到1之间),只能保证输入层数据分布是一样的,并不能保证每层网络输入数据分布是一样的,所以也需要在神经网络的中间层加入归一化处理。神经网络学习过程本质上就是为了学习数据分布,如果训练数据与测试数据的分布不同,网络的泛化能力就会严重降低。(任何层都需要归一化

四种归一化:BN,LN,IN,GN

深度学习归一化方法总结(BN、LN、IN、GN)_不瘦8斤的妥球球饼的博客-CSDN博客

1.4.1 什么是BN

理解Batch Normalization系列1——原理(清晰解释) - 知乎

总之,就是在加权和后,加了一个标准化层、一个还原层。标准化层,用来把一个batch_size上的该层该神经元的数值进行标准正态分布(均值为0,方差为1)。还原层,就是引入缩放系数、平移系数,让梯度决定还原程度。

1.4.2 BN解决了什么问题

对于某一层 X 来说,它的每个元素Xi的数值,在一个batch上的分布是一个任意的未知分布,BN首先把它标准化为了一个标准正态分布。

这样是否太暴力了?如果所有输入样本被层层改分布,相当于输入信息都损失掉了,网络是没法训练的。

所以需要第二步对标准正态分布再进行一定程度的还原操作,即缩放平移。

最终使得这个数值分布,兼顾保留有效信息、加速梯度训练

BN的作用

  1. 加速SGD收敛(将batch里的数据分布变为一样),效果与特征归一化一致。
  2. 使分布更稳定。
  3. 防止过拟合。有轻微正则化效果,BN的均值和方差是在mini batch上计算得到的,含有轻微噪音。将噪音添加到隐藏单元上,这迫使后部单元不依赖于任何⼀个隐藏单元(将Batch中所有样本都被关联在了一起,网络不会从某一个训练样本中生成确定的结果),类似dropout。
  4. 解决梯度消失和梯度爆炸问题(使用BN后,网络的输出就不会很大,梯度就不会很小)。
  5. 提高激活函数准确度,增强优化器性能。

BN的缺点

高度依赖于batchsize的大小,实际使用中会对batchsize大小进行约束,不适合batchsize=1的情况。不适用于RNN,RNN的序列长度是不一致的。

1.4.3 BN实现流程

- BN先进行标准化求出新的x;标准化即对一组数据中的每个数字,减均值再除以标准差(给方差开个根号),就可把一个该组数据转换为一个均值为0方差为1的标准正态分布。对于之前的归一化来说,我们强行把特征做的均值为0,标准差为1,可以通过将数据标准化,能够加速权重参数的收敛。

- 再进行缩放和平移求出 y,这y个取代了原始的x,然后进行激活。

1.5 激活函数有什么作用,常用激活函数有哪些?

如果不用激励函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合。我们决定引入非线性函数作为激励函数,这样深层神经网络表达能力就更加强大(不再是输入的线性组合,而是几乎可以逼近任意函数)。

如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。

sigmoid,tanh( (exp(x)-exp(-x))/(exp(x)+exp(-x)) ),ReLU(max(0,x))(Rectified Linear Units),Softmax, Leaky-ReLU & P-ReLU

1.6 什么是梯度消失和梯度爆炸

关键在于激活函数。在反向传播中,我们使用的是梯度下降策略来优化参数,在链式法则求导的时候,涉及到了对激活函数求导,关键在于反向传播时激活函数的导数!!!如果导数大于1,那么随着网络层数的增加梯度更新将会朝着指数爆炸的方式增加这就是梯度爆炸。同样如果导数小于1,那么随着网络层数的增加梯度更新信息会朝着指数衰减的方式减少这就是梯度消失。因此,梯度消失、爆炸,其根本原因在于反向传播训练法则,属于先天不足。

原理:你似乎来到了没有知识存在的荒原 - 知乎

如何解决梯度消失问题?

  • 使用RELU激活函数
  • batch normalization:BN就是通过对每一层的输出规范为均值和方差一致的方法,消除了权重参数放大缩小带来的影响

解决梯度爆炸的方法?

  • 梯度裁剪
  • 正则化(将w加入Loss里,如果Loss小则w也要小,而梯度爆炸是w过大[绝对值]造成的
  • BatchNorm

1.7 什么是端到端学习(end-to-end)?

端到端学习是一种解决问题的思路,与之对应的是多步骤解决问题,也就是将一个问题拆分为多个步骤分步解决,而端到端是由输入端的数据直接得到输出端的结果。

1.8 softmax的原理是什么?有什么作用?

softmax用于多分类过程中,它将多个神经元的输出,映射到(0,1)区间内,可以看成概率来理解,从而来进行多分类!

假设我们有一个数组V,Vi表示V中的第i个元素,那么这个元素的softmax值就是:

softmax直白来说就是将原来输出是3,1,-3通过softmax函数一作用,就映射成为(0,1)的值,而这些值的累和为1(满足概率的性质),那么我们就可以将它理解成概率,在最后选取输出结点的时候,我们就可以选取概率最大(也就是值对应最大的)结点,作为我们的预测目标!

softmax的使用其实包括两个好处,第一个好处就是答主说的好求导,第二个就是它使得好结果和坏结果之间的差异更加显著,更有利于学习了。SVM只选自己喜欢的男神,Softmax把所有备胎全部拉出来评分,最后还归一化一下。

2. 线性回归和逻辑回归

2.1 logistic回归

logistic回归是一种广义线性回归(generalized linear model),因此与多重线性回归分析有很多相同之处。它们的模型形式基本上相同,都具有 w‘x+b,其中w和b是待求参数,其区别在于他们的因变量不同,多重线性回归直接将w‘x+b作为因变量,即y =w‘x+b,而logistic回归则通过函数L将w‘x+b对应一个隐状态p,p =L(w‘x+b),然后根据p与1-p的大小决定因变量的值。如果L是logistic函数,就是logistic回归,如果L是多项式函数就是多项式回归。

logistic函数:

 其中

3. 经典网络框架

3.1 AlexNet,VGG,GoogleNet,ResNet等网络之间的区别是什么?

一文读懂LeNet、AlexNet、VGG、GoogleNet、ResNet到底是什么? - 知乎

AlexNet: AlexNet相比传统的CNN,主要改动包括Data Augmentation(数据增强)、Dropout方法,激活函数用ReLU代替了传统的Tanh或者Sigmoid、采用了Local Response Normalization(LRN,实际就是利用临近的像素数据做归一化,(现在基本不用了))、Overlapping Pooling(有重叠,即Pooling的步长比Pooling Kernel的对应边要小)、多GPU并行。

VGGNet: VGG很好地继承了AlexNet的特点,同时采用了更小的卷积核(3*3)堆叠来代替大的卷积核,并且网络更深(VGG-16,VGG-19)。

GoogLeNet: 网络更深,但主要创新点在于它的Inception模块,这是一个网中网(Network In Nework)的结构,即原来的节点也是一个网络。相比于前述几个网络,用了Inception之后整个网络结构的宽度和深度都可扩大,能够带来2~3倍的性能提升。Inception结构的主要贡献有两个:一是使用1x1的卷积来进行升降维;二是在多个尺寸上同时进行卷积再聚合。

ResNet: ResNet在网络深度上有了进一步探索。但主要的创新在于残差模块(residual block),网络提出本质上还是要解决增大网络深度导致难以收敛的问题。这种借鉴了Highway Network思想的网络相当于旁边专门开个通道使得输入可以直达输出,而优化的目标由原来的拟合输出H(x)变成输出和输入的差H(x) - x,其中H(x)是某一层原始的期望映射输出,x是输入。

3.2 pooling层做的是什么?

可以大大降低数据的维度。

最大值池化均值池化随机池化中值池化组合池化

3.3 什么是dropout?介绍dropout。

dropout是指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃。可以很好的防止过拟合(1. 随机丢神经元,每次训练得到不同网络,最后预测结果类似多模型集成结果。2. 神经元减少,更新参数减少。3. 丢神经元就等于丢了特征,就类似于RF的列采样了)。

原理:https://blog.csdn.net/bobo_jiang/article/details/99231710

https://blog.csdn.net/qq_40176087/article/details/105904379

就是一张图不一定要全部训练所有信息,有时候如果只是为了认识人脸,可能我们看一个眼睛+鼻子就认出来了。所以我们可以选择丢掉一些信息。

dropout rate = 0.5,意味着随机丢弃掉一半神经元(不是删除神经元,仅仅是这些不参与计算!)的神经网络。rate过大很容易造成overfiting!

一个模型的作用效果,也转变成4个模型的效果和,更像一个多模型投票。

所以,虽然第四个模型overfitting了,但是前三个也模型参与投票判断,第四个模型overfitting就被弱化了所以,dropout的出现,使得模型稳定性和鲁棒性被大大提高了

训练的时候停止了一些神经元,但是测试的时候模型是完整的,不会dropout任何神经元。这个时候会出现问题(好比平时训练200米的跑步,结果比赛比的是400米)

训练的时候后,没有dropout的神经元权值做一个rescale

rescale rate = 1 / (1 - dropout rate)

流程:

1. 假设p为每个神经元为保留的概率,那么在训练的时候它有p的概率参与训练,(1-p)的概率丢弃

数学解释:没用dropout的神经网络前向传播:

用dropout的神经网络前向传播:

Bernoulli函数是为了生成概率r向量,也就是随机生成一个0、1的向量。代码层面实现让某个神经元以概率p停止工作,其实就是让它的激活函数值以概率p变为0。比如我们某一层网络神经元的个数为1000个,其激活函数输出值为y1、y2、y3、…、y1000,我们dropout比率选择0.4,那么这一层神经元经过dropout后,1000个神经元中会有大约400个的值被置为0。

2. 预测不使用dropout

两种办法:动训练神经元不动测试神经元 或 不动训练神经元动测试神经元

动测试:训练时得到的输出期望为:p*x+(1-p)*0=px,在预测的时候,不会随机丢弃一些神经元,每个神经元都会参与预测,如果把神经元的权重乘以p,那么数学期望就是px,这样一来,训练和预测时,数学期望都是px,总体保持一致;

动训练:如果给每个神经元权重都乘以1/(1-p),那么它训练时输出的期望是[(1-p)x+p0]/(1-p)=x,预测时不需要对神经元权重进行放缩,这样一来,训练和预测时,数学期望都是x,总体保持一致;

3.4 Dropout和BN区别

BN和Dropout单独使用都能减少过拟合并加速训练速度,但如果一起使用的话并不会产生1+1>2的效果,相反可能会得到比单独使用更差的效果。

3.5 dropout是否用在测试集上?

不可以使用!dropout只能用于训练集。dropout是训练过程中应用的一种正则化技术。

3.6 列举几个梯度下降的方法并简介

定义:梯度下降法是定义目标函数,通过误差反向传播的方法对模型参数进行调整,使得目标函数值最小,不再增长,则认为找到了一组参数,构造了模型。梯度下降法沿着误差下降速度最快的方向调整参数,一般是目标函数对某个参数的偏导数乘以步长来调整参数,最后使得误差收敛于最小值。这种方法适合在特征个数非常多,训练实例非常多,内存无法满足要求的时候使用。在梯度下降中一个重要的参数是步长,超参数学习率的值决定了步长的大小。如果学习率太小,必须经过多次迭代,算法才能收敛,这是非常耗时的。如果学习率太大,你将跳过收敛点。Batch gradient descent、Mini-batch gradient descent 和 stochastic gradient descent

3.7 常见降维方法,并简介

降维是指把原始高维空间的特征投影到低维度的空间,进行特征的重组,以减少数据的维度。降维与特征最大的不同在于,特征选择是进行特征的剔除、删减,而降维是做特征的重组构成新的特征,原始特征全部“消失”了,性质发生了根本的变化。

PCA主成分分析法:PCA是不考虑样本类别输出的无监督降维技术。PCA追求的是在降维之后能够最大化保持数据的内在信息,并通过衡量在投影方向上的数据方差的大小来衡量该方向的重要性。 !!! PCA是不考虑样本类别输出的无监督降维技术。!!

设有 m 条 n 维数据(X1, X2, .....Xn)

1 将原始数据按列组成n 行 m 列矩阵 X;

2 将 X 的每一行进行零均值化,即减去这一行的均值;

3 求出协方差矩阵

4 求出协方差矩阵的特征值, 特征值为空间变换(投影后) 数据的方差。及对应的特征向量,特征向量就是我们寻找的投影轴;

5 将特征向量按对应特征值大小从上到下按行排列成矩阵取前 k 行组成矩阵 P;

6 Y = PX 即为降维到 k 维后的数据。Y是降维后的数据。

LDA线性判别分析法:LDA是一种监督学习的降维技术,也就是说它的数据集的每个样本是有类别输出的。LDA的思想可以用一句话概括,就是“投影后类内方差最小,类间方差最大”。

核心思想:往线性判别超平面的法向量上投影,使的区分度最大(高内聚,低耦合 = "投影后类内方差最小,类间方差最大")。!!LDA它的数据集的每个样本是有类别输出的。!!!学习分类算法,线性分类器最简单的就是LDA(Linear Discriminant Analysis),它可以看做是简化版的SVM。

4. 计算机视觉中的目标检测

4.1 ROI poolling的不足是什么?

4.2 ROI align的具体做法是什么?

4.3 faster RCNN中RPN相比之前作了什么优化

4.4 YOLO v3进行了藉此下采样


相关链接:

深度学习CV八股文_入坑&填坑的博客-CSDN博客_cv八股文

猜你喜欢

转载自blog.csdn.net/weixin_43570470/article/details/126244339