算法八股
- NLP
- 1、请你说说对于聚类算法的了解?
- 2、知道kmeans吧?说下迭代过程,簇心随机不好,怎么才能更稳定?
- 3、kmeans聚类如何选择初始点?
- 4、请你介绍一下SVM,优缺点
- 5、请你说说RF和SVM的特点,评价
- 6、LR和SVM的联系与区别
- 7、LR不使用MSE而使用交叉熵损失函数的原因
- 8、介绍一下SVM,遇到线性不可分怎么办,核函数有什么特点
- 9、Triplet Loss 怎么生成那三个点
- 10、过拟合有哪些,你会从哪方面调节
- 11、请你说说TFIDF的公式
- 12、请你说说Dropout的作用
- 13、Adam优化器,BN的作用,为什么能加快收敛速度
- 14、解释一下BN,在训练集和测试集上有什么不同
- 15、简单介绍一下激活函数有哪些
- 16、Sigmoid求导是什么
- 17、请你说说神经网络的过拟合
- 18、当你选择模型考虑哪些因素
- 19、请你说说RNN的原理
- 20、请你说说CNN,RNN,LSTM,Transformer之间的优缺点
- 21、LSTM解决了RNN的什么问题,如何解决
- 22、讲一下Transformer?以及它比RNN优势在哪里?
- 23、LSTM的概念,LSTM有哪些变种以及BPTT(基于时间的反向传播)
- 24、说说LSTM中的各个门
- 25、如何加速收敛?
- 26、各个激活函数的优缺点
- 27、为什么ReLU常用于神经网络的激活函数?
- 28、梯度消失和梯度爆炸的解决方案?梯度爆炸引发的问题?
- 29、如何确定是否出现梯度爆炸?
- 30、神经网络中有哪些正则化技术?
- 31、批量归一化 (BN) 如何实现?作用?
- 32、神经网络中权值共享的理解?
- 33、什么是 Adam?Adam 和 SGD 之间的主要区别是什么?
- 34、为什么 Momentum 可以加速训练?
- 35、SGD 每步做什么?为什么能 online learning?
- 36、学习率太大(太小)时会发生什么?如何设置学习率?
- 37、神经网络为什么不用拟牛顿法而是用梯度下降?
- 38、BN 和 Dropout 在训练和测试时的区别?
- 39、深度学习调参有哪些技巧?
- 40、神经网络调参,要往哪些方向想?
- 41、神经网络数据预处理方法有哪些?
- 42、如何初始化神经网络的权重?
- 43、为什么构建深度学习模型需要使用 GPU?
- 44、前馈神经网络(FNN)、递归神经网络(RNN)和 CNN 的区别?
- 45、神经网络可以解决哪些问题?
- 46、如何提高小型网络的精度?
- 47、什么是鞍点问题?
- 48、网络设计中,为什么卷积核设计尺寸都是奇数?
- CV
- 1、介绍一下Inception系列网络
- 2、介绍inception网络,主要用来解决什么问题,如何减少参数量
- 3、介绍一下Resnet
- 4、目标检测
- 5、attention机制
- 6、最优化方法
- 7、上采样或者说反卷积
- 8、你认为深度学习是最好的算法吗?有哪些场景不适合深度学习?
- 9、为什么训练不收敛,如何解决
- 10、不收敛和过拟合的区别
- 11、权值衰减是什么意思
- 12、bagging和dropout
- 13、conv、pool反向传播怎么做
- 14、线性回归和逻辑回归的区别
- 15、权重初始化方法有哪些
- 16、VGG16与resnet152哪个参数量大
- 17、CNN为什么用ReLU,为什么不用sigmoid?
- 18、有个类别的准确率比较低
- 19、L1、L2范数,区别是什么
- 20、衡量距离的公式有哪些?
- 21、降维方法有哪些?
- 22、PCA?
- 23、图像边缘检测算法
- 24、Canny算子
- 25、最近邻差值、双线性差值
- 26、图像去噪的方法
- 27、图像增强算法有哪些
- 28、为什么梯度会消失和爆炸
- 29、什么是全卷积网络,如何实现
- 30、yolo系列
- 31、用过哪些神经网络?如何调参
- 32、卷积神经网络和全连接网络的根本不同之处在哪里
NLP
1、请你说说对于聚类算法的了解?
聚类算法是无监督学习,即不需要标签。聚类是按照某个指标把一个整的数据集分割成不同的类或簇,使同一类的元素相似性尽可能大,不同类的元素相似性尽可能小。简单来说。就是聚类使同一类的数据尽可能聚集到一起,不同类数据尽量分离。聚类的一般步骤:数据准备、特征选择、特征提取、聚类、评估。
2、知道kmeans吧?说下迭代过程,簇心随机不好,怎么才能更稳定?
k均值是聚类算法的一种,也是一种无监督学习算法,通过随机选择k个点作为质心,然后计算每个点到最近的质心归于此类,形成k个簇,重新计算每个簇的质心,直到质心不在发生变化。对于稳定的做法可以多运行,查看结果,每次运行使用不同得k值以及或初始质心,调整k值,聚类之前,可以对数据标准化或归一化处理,避免一些特殊特征距离计算产生较大影响。
3、kmeans聚类如何选择初始点?
在kmeans聚类算法中,选择初始点对聚类的结果影响很大,一般可以:
- 随机选择k个点作为初始质心,由于随机性较大,可能导致局部获取最优解。
- 多次运行,每次使用不同的初始点,最终选择效果最好的结果,这种可以减少随机性对结果的影响,提高算法的稳定性。
- 手动选择,在某些场景中,根据领域知识和经验选取初始点,以更好地满足数据的特点。
4、请你介绍一下SVM,优缺点
支持向量机是一种有监督学习,通过数据样本,学习最大边距超平面,主要解决二分类问题。
优点:
- 少数支持向量决定了最终结果,对异常值不敏感。
- 对于样本数量需求较低。
- 可以处理高维度数据。
缺点:
- 样本数量过多的时候,计算负担很大。
- 多分类任务处理起来比较麻烦。
5、请你说说RF和SVM的特点,评价
想要了解随机森林,首先要知道决策树,即森林由一棵棵树组成。
决策树是一种有监督的机器学习算法,该方法可以用于解决分类和回归问题。
决策树可以简单地理解为达到某一特定结果的一系列决策。思考逻辑上,就像一连串的if-else,如果满足xx特征,则归为xx类别,否则则归为yy类别。
随机森林是基于决策树的机器学习算法,该算法利用了多棵决策树的力量来进行决策。
对于一个测试数据,将它投入到随机森林中的不同决策树中,会得到不同的测试结果。若问题是一个分类问题,则可以通过求众数来得出测试数据的类别;若问题是一个回归问题,则可以通过求平均值得出测试数据的值。该过程即为经典的bagging思想。
RF:
- 简单,容易实现,计算开销小,并且它在很多现实任务中展现出来了强大的性能。
- 它能够处理很高维度(特征很多)的数据,并且不用做特征选择(可以随机选择各种特征)。
- 训练速度快,容易做成并行化方法。
6、LR和SVM的联系与区别
联系:
-
LR和SVM都可以处理分类问题,且一般都用于处理线性二分类问题(在改进的情况下可以处理多分类问题)
-
都可以增加权重参数倍的正则化项,选择特征或者调权重。
区别:
- LR是参数模型,SVM是非参数模型。
- 对于特征标签线性关系较强的情况下,LR分类结果较高。
- 目标函数,逻辑回归采用的是logistical loss,SVM采用的是hinge loss,这两个损失函数的目的都是增加对分类影响较大的数据点的权重,减少与分类关系较小的数据点的权重。
- SVM的处理方法是只考虑距离虚线决策边界最近的support vectors,去学习分类器(局部考虑)。而逻辑回归通过非线性映射,大大减小了离分类平面较远的点的权重,相对提升了与分类最相关的数据点的权重。
7、LR不使用MSE而使用交叉熵损失函数的原因
MSE梯度更新公式与sigmod相关,而sigmod在输入很大或很小时,导数趋近于0,损失函数导致LR收敛很慢。 而交叉熵参数更新公式是一个差值,损失越大,收敛速度越快。
8、介绍一下SVM,遇到线性不可分怎么办,核函数有什么特点
数据在原始空间(称为输入空间)线性不可分,但是映射到高维空间(称为特征空间)后很可能就线性可分了。
但是映射到高维空间同时带来一个问题:在高维空间上求解一个带约束的优化问题显然比在低维空间上计算量要大得多,这就是所谓的“维数灾难”。
于是就引入了“核函数”,核函数虽然也是把特征进行从低维到高维的转换,但是它事先在低维上进行计算,而将实质上的分类效果表现在了高维上,即避免了直接在高维空间中的复杂计算。
常用核函数:
- 高斯核函数
- 线性核函数
- 多项式核函数
9、Triplet Loss 怎么生成那三个点
选取原则:
anchor 原点
postive 正样本
negative 负样本
- a和p必须是同类的样本,a和n必须是不同类的样本。
- 同类样本中选取与a最不像的作为p,不同类样本中选取最像的作为n。
10、过拟合有哪些,你会从哪方面调节
引起过拟合的原因:数据相对有限、简单,但模型结构过于复杂。
- 加数据、数据增强
- 使用小模型
- L1和L2正则化,使用Dropout
- BatchNormalization (BN)
- 残差结构
- Early stopping
11、请你说说TFIDF的公式
TFIDF是NLP经典的一种统计方法,主要用于新词发现场景中。用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。
TF:词频
某个词在某类别中出现的次数/该类别词总数
IDF:逆文档频率
N代表文本总数
dfi代表包含词qi的文本中的总数
逆文档频率高 -> 该词很少出现在其他文档
12、请你说说Dropout的作用
Dropout在这个过程中,网络中的节点以概率p被随机丢弃,Dropout训练减少了神经网络结点之间的共适应性,当隐藏层节点被随机删除后,使得网络具有了一定的稀疏性,从而有效的减轻了不同特征间的协同效应。也就是说,某些特征可能会依赖于固定关系的隐藏节点的共同作用,而通过Dropout,迫使一个网络节点和随机挑选出来的其他节点共同工作,达到更好的网络泛化能力。通常选择范围为 0.2~0.5。网络越深,Dropout概率通常越高。
13、Adam优化器,BN的作用,为什么能加快收敛速度
Adam:
深度学习模型的关键是梯度下降。
给定一组训练样本x和对应的标签y 。
对于若干个x运用此时的参数求出预测值y’ 。
计算y’与这些x对应的真实值y的差值(即损失函数)。
计算目标函数的梯度(以及动量) 。
使用反向传播更新参数。
直到达到终止条件(如误差小于一定阈值)。
Adam就是在第四步起作用,跟adam对应的基础概念是SGD,即随机梯度下降: 沿着梯度的方向不断减小模型参数,从而最小化目标函数。
但SGD有一个问题,即容易陷入局部最优解,也可能在鞍点中跳不出,影响模型性能。
Adam的优点主要在于经过偏置校正后,每一次迭代学习率都有个确定范围,使得参数比较平稳。
BN的作用:
训练过程中,同一个batch中的样本差别很大,如果直接训练的话,每次送入网络训练的数据分布来回波动,不利于模型收敛,很容易震荡。
因此,BN要做的第一件事就是“减均值、除以方差”的归一化操作。
14、解释一下BN,在训练集和测试集上有什么不同
训练过程中,同一个batch中的样本差别很大,如果直接训练的话,每次送入网络训练的数据分布来回波动,不利于模型收敛,很容易震荡。
因此,BN要做的第一件事就是“减均值、除以方差”的归一化操作。
但对样本做归一化会改变样本的分布,即训练数据和测试数据可能并不符合归一化之后的正态分布,因此图片中的第四步也非常关键,即scale and shift操作,通过一个线性变换y=scale*x+shift,可以恢复数据的原本分布,从而保证了模型的学习能力。
15、简单介绍一下激活函数有哪些
两个特性:
- 给模型引入非线性
- 可导(用于计算梯度、反向传播)
激活函数:
- Sigmoid:归一化函数,取值0~1
- tanh:取值-1~1
- Relu:取值0~+∞
- Softmax:归一化函数,取值0~1
16、Sigmoid求导是什么
f(z)(1 - f(z))或sigmod(x) * (1-sigmod(x))
17、请你说说神经网络的过拟合
- 神经网络参数量巨大,理论上可以拟合任何函数,但正因为神经网络如此强大的学习能力,而现实生活中的数据通常是包含噪声的,这也导致经常出现过拟合的问题。
- 当模型试着预测噪声较多的数据的趋势时,由于模型参数过多、过于复杂,就会导致过拟合。过拟合的模型通常是不精确的,因为这样的预测趋势并不会反映数据的真实情况。
- 也就是说,我们训练出的模型在已知的数据(训练集)中有好的预测结果,但在未知的数据(测试集)中表现较差。
18、当你选择模型考虑哪些因素
- 首先是保证模型效果,选择学术界广受认可的新模型。
- 然后是计算量,因为在实际部署的时候,我们需要考虑端上模型和云上模型不同的计算条件,需要在保证准确率的前提下,尽可能减少计算量、内存占用等开销。
19、请你说说RNN的原理
RNN是一类以序列数据为输入,在序列的演进方向进行递归,且所有节点单元按照链式连接的递归神经网络。RNN对具有序列特性的数据非常有效,能够挖掘数据中的时序信息以及语义信息。
在计算时,每一步使用的参数U、W、b都是一样的,也就是说每个步骤的参数都是共享的,这是RNN的重要特点。
20、请你说说CNN,RNN,LSTM,Transformer之间的优缺点
CNN:
优点:局部权值共享,平移不变性可以更好提取特征以及处理高维数据。
缺点:网络过深时其梯度回传变化相对于输入往往很小,出现梯度消失或爆炸的情况;解释性一般。
RNN:
优点:相比于CNN,RNN结合序列上的时序上下文来提取特征。
缺点:但是在处理序列数据时没有进行信息的过滤,在稍长序列中就会出现梯度消失、爆炸的情况。
LSTM:
优点:LSTM经过使用全连接层设计遗忘门、输出门、输入门来过滤信息,使得在长序列数据中表现较好。
缺点:但是在时间跨度非常大的序列数据中,会出现计算复杂和耗时偏多的问题。
Transformer:
优点:相比于RNN,可以直接并行计算序列数据,计算的Attention也更有解释性,可以为不同的头分配不同的任务。
缺点:虽然全局信息可以捕捉,但是不如CNN捕捉局部信息来的好,而且其位置编码的语义问题也很困扰,最后在Transformer内部堆叠残差层和BN层过多时,顶部会出现梯度消失的问题。
21、LSTM解决了RNN的什么问题,如何解决
LSTM通过控制遗忘门,输入门和输出门来控制梯度大小,从而使得远距离情况下梯度不至于完全消失,解决RRN中因长期依赖带来的梯度消失和梯度爆炸问题。
22、讲一下Transformer?以及它比RNN优势在哪里?
现有的RNN相关模型只能够按方向依次计算,时刻t的计算依赖于时刻t-1的结果,限制了模型的并行能力且无法处理长期依赖,而LSTM的门机制结构虽然一定程度上解决了长期依赖的问题,但是对于特别长期的依赖仍然没有得到解决。Transformer方法首先使用Attention机制,将序列中的任意两个位置之间的距离值转为一个常量;另外其不是类似于RNN的顺序结果,所以能够具有好的并行性,符合现在的GPU框架。
23、LSTM的概念,LSTM有哪些变种以及BPTT(基于时间的反向传播)
- peephole连接:增加了peephole到每个门上,但是许多论文会加入部分的peephole而非所有都加。
- GRU:它将忘记门和输入门合成了一个单一的更新门。同样还混合了细胞状态和隐藏状态,和其他一些改动。最终的模型比标准的LSTM模型要简单。
24、说说LSTM中的各个门
忘记门:
忘记门会读取上一个输出和当前输入,做一个Sigmoid 的非线性映射,然后输出一个向量(该向量每一个维度的值都在0到1之间,1表示完全保留,0表示完全舍弃,相当于记住了重要的,忘记了无关紧要的),最后与细胞状态相乘。
输入门:
确定什么样的新信息被存放在细胞状态中
第一,sigmoid层称“输入门层”决定什么值我们将要更新;
第二,一个tanh层创建一个新的候选值向量,会被加入到状态中。
输出门:
输出值取决于当前状态,输出门有sigmoid和tanh两层处理,sigmoid层用来确定状态的哪部分需要输出,这部分和通过tanh层处理后的状态相乘得到最后想要输出的信息。
25、如何加速收敛?
- 使用预训练模型。
- 选择合适的优化器,可以加速收敛。
- 数据预处理或增强(去噪与异常值处理)。
- 加入Dropout和Batch Normalization层。
- 使用FP16和FP32混合精度训练,减少内存使用,加快训练速度。
26、各个激活函数的优缺点
(1)Sigmoid:
- 优点:输出范围在(0, 1),适用于概率问题。
- 缺点:梯度消失问题,反向传播时梯度更新缓慢。
(2)Tanh:
- 优点:输出范围在(-1, 1),中心化激活函数,梯度更新比Sigmoid快。
- 缺点:仍有梯度消失问题。
(3)ReLU:
- 优点:取值0~+∞,计算简单,不易出现梯度消失,收敛速度快。
- 缺点:死神经元问题(当输入值恒为负数时,神经元永远不会被激活)。
(4)Softmax:
- 优点:归一化函数,取值0~1,用于分类问题,能将输出转化为概率分布。
- 缺点:容易受梯度爆炸影响。
27、为什么ReLU常用于神经网络的激活函数?
- 计算简单:ReLU 的计算仅需取最大值,计算效率高。
- 不易梯度消失:正值区域梯度恒为1,有助于深层网络训练。
- 收敛速度快:相比 Sigmoid 和 Tanh,ReLU 收敛更快。
28、梯度消失和梯度爆炸的解决方案?梯度爆炸引发的问题?
- 梯度消失:解决方案:使用ReLU或其变种;引入批量归一化;使用残差网络(ResNet)。
- 梯度爆炸:解决方案:梯度裁剪(Gradient Clipping);正则化;参数初始化策略。
- 引发问题:导致权重过大,模型不收敛或输出异常。
29、如何确定是否出现梯度爆炸?
- 检查梯度值是否过大。
- 查看损失函数是否突然变得很大或“NaN”。
- 打印每层的权重更新值是否不正常。
30、神经网络中有哪些正则化技术?
- Dropout:随机丢弃部分神经元。
- L1/L2正则化:对权重施加约束。
- 数据增强:扩展数据集大小,减少过拟合。
- 早停(Early Stopping)。
31、批量归一化 (BN) 如何实现?作用?
(1)实现:
- 对每一批数据计算均值和标准差。
- 标准化每个数据点。
- 引入可学习的缩放和平移参数。
(2)作用:
- 加速收敛。
- 减少梯度消失或爆炸。
- 增强网络的泛化能力。
32、神经网络中权值共享的理解?
在卷积神经网络(CNN)中,多层共享同一卷积核权重,减少参数,提高模型效率。
33、什么是 Adam?Adam 和 SGD 之间的主要区别是什么?
(1)Adam:自适应学习率优化算法,结合了动量和RMSProp。
(2)区别:
- 学习率调整策略不同。SGD通常使用固定的学习率,而Adam则采用自适应策略,即学习率会随着训练的进行而调整。
- 计算复杂性不同。Adam由于需要存储并更新梯度的第一阶和第二阶矩估计值,通常比SGD需要更多的计算资源。
- 收敛速度不同。在实践中,Adam通常比SGD更快地收敛,因为它能够更智能地更新权重。
- 动量项的使用不同。SGD可以通过动量项来改进,但基本版本不包括动量。而Adam在其公式中直接包含了动量。
- 鲁棒性和稳定性不同。Adam在某些情况下可能表现得更好,尤其是在处理非平稳性或非线性问题时。
- 超参数的敏感度不同。Adam需要调整超参数,如β1、β2、ε,而SGD的超参数较少。
- 适应性和广泛性不同。Adam在深度学习中非常流行,而SGD则适用于各种优化问题。
34、为什么 Momentum 可以加速训练?
Momentum 引入惯性项,使梯度下降更快,同时减少振荡。动量其实累加了历史梯度更新方向,所以在每次更新时,要是当前时刻的梯度与历史时刻梯度方向相似,这种趋势在当前时刻则会加强;要是不同,则当前时刻的梯度方向减弱。动量方法限制了梯度更新方向的随机性,使其沿正确方向进行。
35、SGD 每步做什么?为什么能 online learning?
- 选择样本:在每一步中,SGD会随机选择一个样本或一个小批量样本作为训练数据。这种随机选择可以使得模型在不同的样本上进行更新,有助于减小梯度的噪声,并提高模型的泛化能力。
- 计算梯度:对于选定的样本或小批量样本,计算其梯度,并使用该梯度来更新模型的参数。
- 更新参数:使用计算得到的梯度来更新模型的参数,这一过程使得模型能够逐步适应新数据
- 原因:
online learning强调的是学习是实时的,流式的,每次训练不用使用全部样本,而是以之前训练好的模型为基础,每来一个样本就更新一次模型,这种方法叫做OGD(online gradient descent)。这样做的目的是快速地进行模型的更新,提升模型时效性。而SGD的思想正是在线学习的思想。
36、学习率太大(太小)时会发生什么?如何设置学习率?
- 学习率过大:当学习率设置过大时,模型的参数更新步幅变大,可能导致模型在最优解附近来回振荡,无法稳定地收敛到最优解。
- 学习率过小会导致参数更新步幅太小,使得模型收敛速度变慢,需要更多的迭代次数才能达到较好的性能。
设置学习率:
- 动态调整学习率:在训练过程中,可以根据训练轮数动态调整学习率。常用的方法包括每N轮学习率减半、指数衰减等。
37、神经网络为什么不用拟牛顿法而是用梯度下降?
- 拟牛顿法(如BFGS算法)需要计算和存储Hessian矩阵的近似值,这需要大量的计算资源和内存。在神经网络中,尤其是对于深度神经网络,参数非常多,计算和存储Hessian矩阵的成本非常高,尤其是在训练大规模模型时,计算复杂度不可忽视。
- 梯度下降法(尤其是带有动量、Adam等优化器的变种)能自适应地调整学习率,帮助加速收敛,并避免一些局部最小值或鞍点的问题。自适应方法可以调整每个参数的学习率,表现出较好的鲁棒性。
38、BN 和 Dropout 在训练和测试时的区别?
- BN训练时:会对每一批的训练数据进行归一化处理,使用每一批数据的均值和方差。
- BN测试时:使用的是训练集的总体均值和方差,这些值是通过移动平均法从训练过程中的所有批次数据计算得到的。这样做是为了在预测单个样本时,能够使用全局的统计信息,从而保证模型的稳定性和一致性。
- Dropout:训练时随机丢弃神经元,测试时不丢弃。
39、深度学习调参有哪些技巧?
- 学习率(Learning Rate):学习率是训练深度学习模型最重要的超参数之一。对于NLP模型,学习率一般在1e-5级别附近,并使用warmup和衰减策略;对于CV模型,学习率一般在1e-3级别附近,也需要进行衰减。
- 批量大小(Batch Size):对于表示学习和对比学习,批量大小越大越好,但如果显存不足,可以使用梯度累积的技巧。
- Dropout比例:在现代深度学习任务中,Dropout比例是一个重要的超参数。通常选择范围为 0.2~0.5。网络越深,Dropout概率通常越高。
- 优化器(Optimizer):对于NLP和抽象层次较高或目标函数非常不平滑的问题,优先使用Adam优化器。
- 权重初始化(Weights Initialization)。
- 归一化策略(Normalization)。
40、神经网络调参,要往哪些方向想?
神经网络调参需要考虑多个方面,包括损失函数的选择、学习率的调整、batch size的选择、训练样本的处理、数据增强、激活函数的选择、优化算法的选取、过拟合的处理等。
41、神经网络数据预处理方法有哪些?
- 标准化(Z-Score标准化):将数据转换为均值为0、标准差为1的标准正态分布。加快模型收敛速度,并提高模型的泛化能力。
- 归一化:将数据缩放到一个指定的范围,如0到1或-1到1。归一化有助于加速收敛,防止梯度爆炸或消失。
- 数据增强:通过增加数据的多样性来提高模型的泛化能力。常见的数据增强方法包括旋转、平移、缩放等。
42、如何初始化神经网络的权重?
- 正态分布与均匀分布
- Xavier初始化(Glorot初始化)
- Kaiming初始化(He初始化)
43、为什么构建深度学习模型需要使用 GPU?
- 并行计算能力。
- 加速计算密集型任务:深度学习模型,特别是深度神经网络(DNN),包含大量的矩阵乘法和向量运算。GPU通过高度并行化的执行方式,可以极大地缩短这些计算密集型任务的时间。
- 框架支持:主流深度学习框架(如TensorFlow、PyTorch等)都对GPU进行了深度优化。
44、前馈神经网络(FNN)、递归神经网络(RNN)和 CNN 的区别?
- 前馈神经网络(FNN)是一种最基本的神经网络模型,其特点是信息在网络中单向传递,从输入层经过中间的隐含层,最终到达输出层。FNN适用于分类和回归任务。
- 递归神经网络(RNN)能够处理序列数据,引入了循环结构,使得每个神经元不仅能够接收来自上一层的输入,还能接收来自同一层的输入。RNN特别适合处理具有时序关系的数据,如文本和语音,能够捕捉时间相关性。常见的变体包括LSTM和GRU,这些变体通过引入门控机制解决了传统RNN的梯度消失和梯度爆炸问题。
- 卷积神经网络(CNN)专门用于处理网格结构数据,如图像,通过引入卷积层和池化层来提取图像的特征信息。CNN特别适合图像识别和特征提取任务。CNN的结构包括卷积层、池化层和全连接层,能够有效地从原始图像中提取有用的特征并进行分类或回归。
45、神经网络可以解决哪些问题?
- 图像与视频处理:神经网络在图像识别、目标检测、图像生成等方面有广泛应用。例如,人脸识别、物体识别、图像分类等技术可以通过分析图像特征来实现高效的身份认证和识别。
- 自然语言处理:神经网络在机器翻译、语音识别、文本分类、对话系统等领域表现出色。例如,智能音箱的语音识别功能、不同语言之间的自动翻译以及智能对话系统的构建都是神经网络的应用实例。
46、如何提高小型网络的精度?
- 数据预处理:可以使用Python的Pandas库进行数据清洗和预处理,使用Scikit-learn库进行数据归一化和标准化。
- 优化算法选择:在深度学习框架如TensorFlow或PyTorch中选择合适的优化器,如Adam或SGD。
- 学习率调整:使用学习率衰减策略,如指数衰减或周期性衰减。
- 正则化技术:在模型中添加L1或L2正则化项,或在训练过程中使用dropout技术。
47、什么是鞍点问题?
在优化问题中,鞍点(Saddle Point)是指函数表面上看起来像是极值点,但实际上是一个局部极小值和一个局部极大值的结合点。在这种情况下,梯度为零,使得算法在此处停滞,导致优化过程陷入困境。
48、网络设计中,为什么卷积核设计尺寸都是奇数?
- 保证锚点在中间:锚点也就是卷积核滑动时得中心点,一个参考点,奇数大小的卷积核刚好是中心位置,避免位置信息发生偏移,在CNN中,进行卷积操作时一般会以卷积核模块的一个位置为基准进行滑动,这个基准通常就是卷积模块的中心,若卷积核为奇数,卷积锚点很好找,自然就是中心。若卷积核大小为偶数,则无法确定锚点,且卷积上下移动位置信息都会发生偏移。
- 为了same padding 时,图像两边对称。
CV
1、介绍一下Inception系列网络
(1)并联网络结构
(2)V1:多1x1卷积为了降低参数量
(3)V2:
- 5x5卷积被两个3x3卷积代替。
- 将nxn的卷积核尺寸分解为1×n和n×1两个卷积。
- 在输入的时候增加了BatchNormalization,加快了收敛速度。
(4)V3:
- 相比其他版本,V3更有性价比,商用用的比较多。
- 增加了7*7卷积核。
- Inception组由10个变成了9个。
- 设计技巧:分解成小卷积很有效,可以降低参数量,减轻过拟合,增加网络非线性的表达能力。
(5)V4:
- 延用了V2/V3的结构。
- 使用更多的Inception module。
2、介绍inception网络,主要用来解决什么问题,如何减少参数量
- 计算量过大和参数过多:Inception模块通过使用不同尺寸的卷积核(如1x1、3x3、5x5等),减少了模型的参数数量,同时降低了计算复杂度。这种设计可以有效减少计算量和参数数量,从而降低对计算资源的需求。
- 降低过拟合风险:Inception模块通过使用1x1的卷积核进行降维,减少了特征图的维度,从而减少了过拟合的风险。
3、介绍一下Resnet
- 残差结构:一定程度可以减少信息丢失
- Resnet50包含两个模块,Conv Block和Identity Block,其中Conv Block输入和输出的维度是不一样的,所以不能连续串联,它的作用是改变网络的维度;Identity Block输入维度和输出维度相同,可以串联,用于加深网络的。
4、目标检测
(1)Faster RCNN:
- Conv layers:作为一种CNN网络目标检测方法,Faster-RCNN首先使用一组基础conv+relu+pooling层提取image的feature maps。该feature maps被共享用于后续RPN层和全连接层。
- Region Proposal Networks(RPN):RPN网络用于生成region proposals。通过softmax判断anchors属于positive或者negative,再利用bounding box regression修正anchors获得精确proposals。
- Roi Pooling:该层收集输入的feature maps和proposals,综合这些信息后提取proposal feature
maps,送入后续全连接层判定目标类别。 - Classification:利用proposal feature maps计算proposal的类别,同时再次bounding box
regression获得检测框最终的精确位置。
5、attention机制
- 学习权重分布:输入数据或特征图上的不同部分对应的专注度不同。
- 任务聚焦:通过将任务分解,设计不同的网络结构(或分支)专注于不同的子任务,重新分配网络的学习能力,从而降低原始任务的难度,使网络更加容易训练。
6、最优化方法
(1)梯度下降法:梯度下降法的优化思想是用当前位置负梯度方向作为搜索方向,因为该方向为当前位置的最快下降方向,所以也被称为是”最速下降法“。最速下降法越接近目标值,步长越小,前进越慢。
缺点:
- 靠近极小值时收敛速度减慢
- 直线搜索时可能会产生一些问题
- 可能会“之字形”地下降
(2)牛顿法:牛顿法是二阶收敛,梯度下降是一阶收敛,所以牛顿法就更快。如果更通俗地说的话,比如你想找一条最短的路径走到一个盆地的最底部,梯度下降法每次只从你当前所处位置选一个坡度最大的方向走一步,牛顿法在选择方向时,不仅会考虑坡度是否够大,还会考虑你走了一步之后,坡度是否会变得更大。所以,可以说牛顿法比梯度下降法看得更远一点,能更快地走到最底部。(牛顿法目光更加长远,所以少走弯路;相对而言,梯度下降法只考虑了局部的最优,没有全局思想。)
优点:
- 二阶收敛,收敛速度快。
缺点:
- 牛顿法是一种迭代算法,每一步都需要求解目标函数的Hessian矩阵的逆矩阵,计算比较复杂。
7、上采样或者说反卷积
上采样的主要目的就是放大图像,一般通过内插值实现图片的放大已适合更高分辨率设备展示。
8、你认为深度学习是最好的算法吗?有哪些场景不适合深度学习?
深度学习的优势场景:
- 大规模数据处理:深度学习在拥有大量标注数据时表现出色,如图像识别、语音识别、自然语言处理(NLP)等。
- 非线性问题:处理高度非线性和复杂的数据关系时,深度神经网络可以建模复杂映射。
- 生成式任务:图像生成、文本生成、音频合成等。
9、为什么训练不收敛,如何解决
- 调整学利率
- 使用合适的优化器(adam)
- 数据问题:数据增强、归一化
- 调整batch size
- 选择合适的损失函数
10、不收敛和过拟合的区别
- 不收敛:一般是形容一些基于梯度下降算法的模型,收敛是指这个算法有能力找到局部的或者全局的最小值,从而得到一个问题的最优解。如果说一个机器学习算法的效果和瞎蒙的差不多那么基本就可以说这个算法没有收敛,也就是根本没有去学习。
- 过拟合:训练集表现效果好,测试集表现效果差,一般由于数据规模较小、模型复杂原因引起。
11、权值衰减是什么意思
weight decay(权值衰减)的使用既不是为了提高收敛精确度也不是为了提高收敛速度,其最终目的是防止过拟合。
12、bagging和dropout
- bagging:是一种集成方法,取多组训练数据,用相同的算法训练不同的模型,最后将子模型(子分类器)合并起来。
- Dropout:每个batch随机抑制一部分神经元,相当于做了不同的模型,一定程度上可以防止过拟合。
13、conv、pool反向传播怎么做
(1)mean pooling
mean pooling的前向传播就是把一个patch中的值求取平均来做pooling,那么反向传播的过程也就是把某个元素的梯度等分为n份分配给前一层,这样就保证池化前后的梯度(残差)之和保持不变,还是比较理解的,图示如下 :
mean pooling比较容易让人理解错的地方就是会简单的认为直接把梯度复制N遍之后直接反向传播回去,但是这样会造成loss之和变为原来的N倍,网络是会产生梯度爆炸的。
(2)max pooling
14、线性回归和逻辑回归的区别
15、权重初始化方法有哪些
- 随机初始化:将权重随机设置为很小的值(接近零),通常服从均匀分布或正态分布,适用于简单网络。
- He 初始化:专门为 ReLU 激活函数设计,考虑了 ReLU 的非对称性和截断特性。深度卷积神经网络(CNN)和全连接网络(MLP)。
16、VGG16与resnet152哪个参数量大
VGG16参数量大,resnet采用了1x1 3x3 1x1卷积方式。
17、CNN为什么用ReLU,为什么不用sigmoid?
- 计算效率:ReLU函数的计算量相对较小,只需要进行阈值比较操作,而Sigmoid函数需要进行指数运算,计算量较大。
- 梯度消失问题:Sigmoid函数在输入非常大或非常小的时候会进入饱和区,导致梯度接近于0,从而在深层网络中引起梯度消失,使得网络难以训练。而ReLU函数在正数部分梯度为1,避免了梯度消失的问题。
- 稀疏性:ReLU函数会使一部分神经元的输出为0,从而增加了网络的稀疏性。这种稀疏性有助于减少参数间的相互依赖,缓解过拟合问题。
18、有个类别的准确率比较低
别的都高,就说明算法没问题,这一类数据有问题,对这个类的数据做一个清洗。
19、L1、L2范数,区别是什么
- L1是绝对值最小,L2是平方最小。
- L1会趋向于产生少量的特征,而其他的特征都是0,而L2会选择更多的特征,这些特征都会接近于0。
20、衡量距离的公式有哪些?
欧式距离、余弦相似度距离、jaccard、编辑距离、KL散度(相对熵)用途:比较两个概率分布的接近程度。
21、降维方法有哪些?
主成分分析(PCA)
22、PCA?
概念:
就是将数据从原始的空间中转换到新的特征空间中,例如原始的空间是三维的(x,y,z),x、y、z分别是原始空间的三个基,通过某种方法,用新的坐标系(a,b,c)来表示原始的数据,那么a、b、c就是新的基,它们组成新的特征空间,在新的特征空间中,可能所有的数据在c上的投影都接近于0,那么我们就可以直接用(a,b)来表示数据,这样数据就从三维的(x,y,z)降到了二维的(a,b)。
步骤:
- 对原始数据零均值化(中心化):中心化即是指变量减去它的均值,使均值为0,其实就是一个平移的过程,平移后使得所有数据的中心是(0,0)。
- 求协方差矩阵。
- 对协方差矩阵求特征向量和特征值,这些特征向量组成了新的特征空间。
23、图像边缘检测算法
sobel、prewitt、laplace、Canny算子
24、Canny算子
算法过程:
(1)对图像进行灰度化。
(2)对图像进行高斯滤波–>根据待滤波的像素点及其邻域点的灰度值按照一定的参数规则进行加权平均。这样可以有效滤去理想图像中叠加的高频噪声。
(3)检测图像中的水平、垂直和对角边缘(如Prewitt,Sobel算子等)。
(4)对梯度幅值进行非极大值抑制:
- 非极大值抑制,简称为NMS算法,其思想是搜素局部最大值,抑制非极大值。
- 为什么用非极大值抑制–>以目标检测为例:目标检测的过程中在同一目标的位置上会产生大量的候选框,这些候选框相互之间可能会有重叠,此时我们需要利用非极大值抑制找到最佳的目标边界框,消除冗余的边界框。
- 对于重叠的候选框,计算他们的重叠部分,若大于规定阈值,则删除;低于阈值则保留。对于无重叠的候选框,都保留。
- 通俗意义上是指寻找像素点局部最大值,将非极大值点所对应的灰度值置为0,这样可以剔除掉一大部分非边缘的点。
步骤:
- 将当前像素的梯度强度与沿正负梯度方向上的两个像素进行比较。
- 如果当前像素的梯度强度与另外两个像素相比最大,则该像素点保留为边缘点,否则该像素点将被抑制(灰度值置为0)。
(5)用双阈值算法检测和连接边缘。
25、最近邻差值、双线性差值
两种插值都是放大图像,一般称作上采样。
- 最近邻差值:设i+u, j+v (i, j为正整数, u, v为大于零小于1的小数,下同)为待求象素坐标,则待求象素灰度的值 f(i+u, j+v)。
- 双线性插值:双线性差值法的计算比最邻近插值法复杂,计算量较大,但没有灰度不连续的缺点,图像看起来更光滑。
26、图像去噪的方法
图像滤波:
- 均值滤波
- 中值滤波
- 最大最小值滤波
- 高斯滤波
27、图像增强算法有哪些
概念:
有目的地强调图像的整体或局部特性,将原来不清晰的图像变得清晰或强调某些感兴趣的特征,扩大图像中不同物体特征之间的差别,抑制不感兴趣的特征,使之改善图像质量、丰富信息量,加强图像判读和识别效果,满足某些特殊分析的需要。
(1)点处理技术:
- 概念:只对单个像素进行处理
- 线性变换:y=a*x+b
- 分段线性变换
- 对数变换:y=c * log(1+x)
- 幂律变换/伽马变换:y = c * r^γ
(2)领域处理技术:
- 直方图均衡化
- 图像滤波
28、为什么梯度会消失和爆炸
- 网络结构太深
- 权值初始化值太大
- 学习率过大
29、什么是全卷积网络,如何实现
由多个卷积层组成的网络称为全卷积网络。
与传统的基于CNN 的图像分割方法相比,FCN有两个明显优势:
- 可以接受任意大小的输入。
- 避免了重复存储和计算,更加高效。
30、yolo系列
(1)yolo v1:没有使用anchor机制,使用网格预测,每个网格随机预测2个box,直接预测x,y,w,h,使用了全连接。
(2)yolo v2:yolo2相比于yolo1加入了先验框部分,最后输出的conv_dec的shape为(13,13,425)。
(3)yolo v3:YOLOv3相比于之前的yolo1和yolo2,改进较大,主要改进方向有:
- 使用了残差网络Residual。
- 提取多特征层进行目标检测,一共提取三个特征层,它的shape分别为(13,13,75),(26,26,75),(52,52,75)。最后一个维度为75是因为该图是基于voc数据集的,它的类为20种。yolo3针对每一个特征层存在3个先验框,所以最后维度为3x25。
- 其采用了UpSampling2d设计。
31、用过哪些神经网络?如何调参
神经网络:
- 图像分类:AlexNet、VGGNet,再到ResNet等等。
- 目标检测,包括FasterRCNN。
调参:
- 调参的时候也不能无章法的乱调,试试这个参数行不行,那个参数行不行,效率太低,调一次要跑很久才能出结果,也不一定能搜到好结果。
- 比较科学的方法是GridSearch,即网格搜索,在所有候选的参数选择中,通过循环遍历,尝试每一种可能性,表现最好的参数就是最终的结果。其原理就像是在数组里找最大值。
32、卷积神经网络和全连接网络的根本不同之处在哪里
卷积神经网络至少包含一个卷积层,且最后一层通常是全连接层;
全连接网络没有卷积层,只使用全连接层。
全链接:
- 参数量巨大,计算耗时。
- 输入维度需要匹配(因为是矩阵运算,维度不一致无法计算)。
卷积层:
- 权重共享。
- 需要学习的参数更少,从而降低了过度拟合的可能性,因为该模型不如完全连接的网络复杂。