AI算法工程师/深度学习工程师岗位面经

记录一下面试遇到的一些题目,有的我自己写了答案,有的没写,这只是目前我能想起来的所有问题,希望可以给大家一点参考,如果我写的答案有不对的也请大家指教!

1.BN和LN的区别

2.什么情况下会发生梯度爆炸,如何解决(我们初始化的w是很大的数,w大到乘以激活函数的导数都大于1,那么连乘后,可能会导致求导的结果很大,形成梯度爆炸。 梯度截断:首先设置梯度阈值:clip_gradient,在后向传播中求出各参数的梯度,不直接用梯度进行参数更新,求梯度的L2范数,然后比较范数||g||与clip_gradient的大小,如果范数大,求缩放因子clip_gradient/||g||,由缩放因子可以看出梯度越大,缩放因子越小,就可以很好的控制梯度的范围。最后将梯度乘以缩放因子得到最后需要的梯度。L1范数是指向量中各个元素绝对值之和,L2范数是指向量各元素的平方和然后求平方根。

2、可以通过添加正则项,避免梯度爆炸。正则化是通过对网络权重做正则限制过拟合,仔细看正则项在损失函数的形式:regularization 公式:

Loss=(y−WTx)2+α∣∣W∣∣2,其中,α 是指正则项系数,因此,如果发生梯度爆炸,权值的范数就会变的非常大,通过正则化项,可以部分限制梯度爆炸的发生。

  3、使用LSTM等自循环和门控制机制,避免梯度消失

  4、优化激活函数,譬如将sigmold改为relu,避免梯度消失)

  5、使用残差网络,避免梯度消失

3.网络收敛很慢可以用什么方法解决:

为了解决收敛速度慢的问题,我们可以从以下三个方面入手:

数据预处理:对于训练数据,可以尝试进行数据清洗、增强、扩充等操作,以提高数据的质量,减少噪声和不平衡现象,从而帮助模型更快地收敛。

优化模型:可以根据任务需求,选择合适的模型结构,避免过度复杂化,以减少计算量和训练时间。同时,可以考虑引入正则化、dropout等技术,以防止过拟合,提高模型的泛化能力。

改进训练代码实现:可以选择合适的优化算法,如随机梯度下降(SGD)、Adam等,并合理设置学习率和批量大小,以加快训练速度。同时,可以尝试使用并行化、分布式等方法,利用多GPU或者多机进行训练,以提高计算效率。

4.dropout为什么能起到正则化

5.用了什么优化器,Adam的原理是什么,Adam为什么可以自适应调节

6.数据量很大的话怎么构建图神经网络(随机游走):

Mini-batch采样:将大型图数据分割为小的子图(mini-batch),然后在每个子图上进行训练。这样可以减小每个训练步骤中需要处理的数据量,降低计算和内存需求。通常,可以使用不同的采样策略(如随机采样或邻域采样)来生成子图,并在每个子图上进行训练。图剪枝和采样:对于大型稀疏图,可以通过图剪枝和采样来减少图的规模。可以根据节点的重要性、连接的强度或其他准则来剪枝图的边或节点。然后,可以根据需要对剪枝后的图进行采样,生成更小的子图进行训练。图嵌入降维:对于高维图数据,可以使用图嵌入技术将节点和边表示为低维向量。图嵌入可以通过诸如节点2vec、GraphSAGE、GCN等方法获得。通过将图数据降维为低维表示,可以减少计算和内存开销,并且可以更高效地训练图神经网络。并行计算:利用GPU和分布式计算的能力,可以在多个设备上并行处理图数据。通过将图数据分配给多个GPU或计算节点,并进行并行计算和通信,可以加速训练过程并提高效率。图网络模型的简化和优化:有时,可以对图神经网络模型进行简化和优化,以减少模型参数和计算量。例如,可以使用图卷积网络(GCN)的稀疏化技术,减少图卷积层中的参数数量,或者使用注意力机制来降低计算复杂度。近似计算:对于大型图数据,可以使用近似计算方法来加速图神经网络的训练。例如,可以使用近似的图聚合操作,或者使用近似的图卷积算子来减少计算复杂度。

7.了解哪些推荐算法

8.注意力机制的计算方法

网络不收敛可能原因:

没有对数据进行归一化

忘记检查输入和输出

没有对数据进行预处理

没有对数据正则化

使用过大的样本

使用不正确的学习率

在输出层使用错误的激活函数

网络中包含坏梯度

初始化权重错误

过深的网络

隐藏单元数量错误

CNN和TRANSFORMER有什么区别:

一、模型结构

CNN是一种基于卷积层的特征提取网络结构,主要用于图像处理领域。卷积层可以提取出图像中的空间特征,例如边缘、角点等。在卷积层后添加池化层可以进一步减小特征图的大小,降低计算量。CNN还可以通过多层卷积层和全连接层组合,实现对复杂图像的分类和识别。

RNN是一种基于循环层的特征提取网络结构,主要用于处理序列数据,例如自然语言文本和时间序列数据等。循环层可以将前一个时间步的隐藏状态传递到下一个时间步,从而实现对序列数据的建模。RNN中的门控循环单元(GRU)和长短时记忆网络(LSTM)可以有效地解决梯度消失和梯度爆炸问题,提高训练效率和模型泛化能力。

Transformer是一种基于自注意力机制的特征提取网络结构,主要用于自然语言处理领域。自注意力机制可以对输入序列中的每个位置进行注意力计算,从而获取全局上下文信息。Transformer中的编码器和解码器可以实现机器翻译、文本生成等任务。

二、特征表示能力

CNN可以通过卷积层提取出具有空间特征的特征表示,例如边缘、角点等,这些特征表示可以用于图像分类、目标检测、人脸识别等任务。RNN可以通过循环层提取出具有时序特征的特征表示,例如序列中的依赖关系和上下文信息,这些特征表示可以用于文本分类、语音识别、音乐生成等任务。Transformer可以通过多头注意力机制提取出具有上下文关联性的特征表示,例如文本中的关键词和语义信息,这些特征表示可以用于机器翻译、文本生成、问答系统等任务。

三、训练效率

CNN在处理大规模图像数据时训练效率较高,由于卷积层的共享权值和池化层的降采样,可以大大减小计算量和内存占用。RNN由于存在循环结构,每个时间步的计算都要依赖上一个时间步的隐藏状态,导致计算复杂度较高,而且容易出现梯度消失或梯度爆炸的问题,导致训练效率低下。Transformer采用自注意力机制进行特征提取,可以并行计算,提高训练效率。

四、模型复杂度

CNN和RNN在处理大规模数据时需要占用大量的内存和计算资源,尤其是在深层网络中。而Transformer在特征提取中采用了自注意力机制,避免了RNN中梯度消失和梯度爆炸问题,可以更深层次地进行特征提取,同时内存和计算资源占用也比较低。

transformer可以用于图片吗:

这是由于它的自注意力的计算复杂度是图像大小的平方,从而使计算时间和内存需求激增。相反,研究人员将这种平方计算复杂度替换为图像大小的线性计算复杂度。

The Swin Transformer:

实现此目的的过程非常简单。首先,像大多数计算机视觉任务一样,RGB图像被发送到网络。该图像被分解成图像块,每个图像块都被当作一个 token。这些 token 是像素本身的RGB值。与NLP进行比较,你可以看到它,因为整体图像是句子,每个图像块都是该句子的单词。自我注意力会应用到每个图像块上,这里称为窗口。然后,移动窗口从而产生新的窗口以再次应用 self-attention。同时允许跨窗口连接,从而带来更高的效率。与卷积神经网络相比,这非常有趣,因为它允许出现长距离像素关系。

卷积的强大之处在于,过滤器在全局范围内使用固定的权重,从而实现了卷积的平移不变性,使其成为一个强大的广义过滤器。在自注意力中,权重不是全局固定的。相反,它们依赖于本地环境本身。因此,自注意力不仅考虑了每个像素,还考虑了它与其他像素的关系。

ViT:

其实很简单,原paper里首先把图像切成16*16的小块,然后再把所有小块扔进一个全连接层里,这个全连接层就可以把每个小块变成token。为什么可以这样做呢?因为全连接层(不带任何激活函数,不带bias)其实就是一个矩阵乘法。你把一个16*16=196的向量乘以一个矩阵,然后把它变成一个token,这个操作本质上和NLP里的embedding是完全一样的。Embedding就是因为one hot encoding太长太稀疏,所以需要乘以一个可学习的矩阵,把它变为一个短并且不稀疏的token。

卷积核为什么是3*3而不是2*2的:

卷积核作为一个特殊的结构,当大小为奇数的时候,方便我们确定卷积核的位置,一般情况下,卷积核在源数据上的移动是以卷积核的中心点作为基准的,这个中心点非常重要。

(1) 卷积中有一种same convolution,也就是卷积前后尺寸(高x宽)不变。实现same convolution(n + 2*padding - k + 1 = n) 。若 k 为偶数,那么padding就为奇数,就不能平均分配到卷积张量两边。(2)此外,奇数尺寸的卷积核便于用中心定位。达到相同感受野的情况下,卷积核越小,所需要的参数和计算量越小。所以2×2排除了,一般都用3×3作为卷积核的大小。1×1的卷积核不能提升感受野,不能应用在需要提升感受野的应用中,也排除了。

(2)Channel数如何选取?

这与特征层的大小及能抽象出来的特征数量有关,特征层池化压缩后越小,图片的潜在的东西越复杂,所需要的深度或通道数越多。 极端情况下,假设一个通道只放一个特征例如嘴的特征,那这个图如果为了做一定性能的脸部识别,有千多个特征,那深度可能要一千多个了;幸好一个通道可以不用池化压缩得太小,一个通道放多个特征也能满足卷积的要求。

什么是过拟合,怎么解决过拟合

不平衡数据怎么处理 focalloss的公式

1.准确率,精确率,召回率。AP,AUC,TPR,FPR。都是什么,有什么意义

2.在比赛中如何调节的网络

3.学习率的优化

4.优化器的选择(ADAM,Adagrad,RMSprop的区别和优点)

5.卷积中的pooling和卷积核有什么区别

6.为什么大部分网络都用卷积代替池化?为什么有的网络必须用池化而不是卷积?

7.卷积size的公式

8.使用过opencv的什么东西

9.正则化的导数?L1 L2是怎么强化网络的

10.不均衡数据除了focal loss还有什么方法可以解决

11.transformer的positionembedding有什么缺点,有什么改进方法

12.SNN的部署,怎么从float转变为int的?在片上怎么回传的(不需要回传,使用代理梯度,每个脉冲*weight累计到therehold才传播)

13.多线程和多进程

全部评论
基本上就是问这些东西了
6 回复 分享
发布于 2023-12-14 16:50 上海
学姐最后去了哪里
点赞 回复 分享
发布于 08-22 21:04 上海

相关推荐

11-04 14:10
东南大学 Java
_可乐多加冰_:去市公司包卖卡的
点赞 评论 收藏
分享
79 483 评论
分享
牛客网
牛客企业服务