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 上海
学姐最后去了哪里
点赞 回复 分享
发布于 2024-08-22 21:04 上海

相关推荐

虽然笔试没过,但还是参加一下AI面试,以下是记录总结。1.计算机网络:TCP的粘包问题(刚背的,可熟悉了)回答:在网络拥塞或者Nagle算法中,会将多个TCP包合在一起,但是TCP在传输中是以字节流形式的,粘在一起之后没办法区分包之间的边界,例如发送两个数据包Hello 和World,合在一起后,接收方收到的是HelloWorld。        解决办法主要有四个,第一个是固定数据包的大小,发生粘包后根据字节大小切分,但这样比较死板;        第二种是在数据包末尾加入"\n"的分隔符,但是在中间文本中出现了分隔符的话,需要进行转义;        第三种是在TCP报文前加入一个字段,记录这个包的大小,这种比较常用;        第四种是对协议进行限制,例如禁用Nagle算法,不允许合并数据包。2.Linux:grep如何使用(确实没准备)回答:完全不会。3.Java:装箱和拆箱是什么,举一个例子。回答:举了int型和Integer类的例子,一些接口使用的时候会发生拆箱和装箱(但我不太记得了)4.高并发:解决投票中刷票问题回答:使用IP检测,限制单个IP的高频访问。追问:要是对方使用代理IP,或者IP连接池该怎么解答回答:根据行为检测,刷票行为和个人投票行为肯定存在差异(但我不知道差异是什么)5.数据库:主键的作用是检索到这条数据的唯一标识,也用来构建聚簇索引。(应该还有其他作用但我忘了。)6.通用问题1:学习新技术的路线回答:阅读官方文档,对于难点搜索视频讲解或者Github文档;项目实战有问题去找熟悉项目的技术人员。        追问1:如何判断学习资料是否有用,是否走过弯路        回答:根据点赞量,Start量。        追问2:走过弯路后下次如何判断?        回答:根据文档关键词判断对我是否有帮助?7.通用问题2:你项目中遇到的难点怎么解决追问1:如何通过持续改进解决一个一直出现的问题追问2:如何平衡局部调优和整体的稳定性8.通用问题3:你未来3年的职业规划回答:1-2年熟悉公司技术栈,后续熟悉公司业务流程,做到技术和业务两手抓。最后给出DeepSeek的回答。1.计算机网络:TCP的粘包问题  TCP粘包问题是由于TCP是面向字节流的协议,发送端可能将多个数据包合并发送(如Nagle算法或网络拥塞),接收端无法区分数据边界。例如发送"Hello"和"World",接收端可能收到"HelloWorld"。 解决方案 :● 固定包长度 :每个包固定为相同长度(不足时填充),接收方按固定长度拆分。缺点是灵活性差,适合固定格式场景。● 分隔符 :在数据包末尾添加特殊字符(如\n),接收方按分隔符拆分。需处理数据中的转义字符(如HTTP头用\r\n\r\n)。● 头部声明长度 :在报文头部添加长度字段(如4字节表示包体长度),接收方先读头部,再按长度截取数据。这是最常用的方式(如HTTP的Content-Length)。● 禁用Nagle算法 :通过TCP_NODELAY选项关闭合并优化,但可能增加小包传输次数,影响性能。2.Linux:grep如何使用 grep用于文本搜索,常见用法:● 基本搜索 :grep "pattern" file.txt● 递归搜索目录 :grep -r "pattern" /path/to/dir● 忽略大小写 :grep -i "pattern" file.txt● 显示行号 :grep -n "pattern" file.txt● 反向匹配(排除)  :grep -v "pattern" file.txt● 正则表达式 :支持^(行首)、$(行尾)、.(任意字符)等,如grep "^start" file.txt。3.Java:装箱和拆箱是什么,举一个例子 ● 装箱(Autoboxing)  :将基本类型转换为包装类,如int → Integer。● 拆箱(Unboxing)  :将包装类转换为基本类型,如Integer → int。Integer a = 10;      // 自动装箱(底层调用Integer.valueOf(10))  int b = a;           // 自动拆箱(底层调用a.intValue())  4. 高并发:解决投票中刷票问题 ● 基础防御 :  IP限流 :限制同一IP单位时间内的请求次数(如Redis计数器+过期时间)。○ 用户鉴权 :要求登录后投票,限制每个用户的投票次数。○ 验证码 :在频繁请求时触发验证码(如滑动拼图、短信验证)。● 对抗代理/IP池 :  设备指纹 :通过浏览器指纹(UserAgent、Canvas渲染)、设备ID等标识唯一设备。○ 行为分析 :检测异常行为(如毫秒级连续投票、无页面停留直接提交)。○ 风控系统 :实时分析请求特征(IP地理分布、时间分布),拦截异常流量。● 业务层优化 :  异步队列削峰 :将投票请求放入消息队列,后端批量处理,避免瞬时高并发。5.  数据库:主键的作用 ● 唯一标识 :确保每行数据的唯一性(如自增ID、UUID)。● 聚簇索引 :InnoDB中主键默认作为聚簇索引,数据按主键顺序物理存储,加快检索速度。● 外键关联 :主键作为其他表的外键,维护数据一致性。● 优化查询 :主键查询最快(如WHERE id=1),避免全表扫描。●注意事项 :避免业务字段做主键(如身份证号),优先使用无意义的自增ID。●复合主键需谨慎,可能增加索引复杂度。6.  通用问题1:学习新技术的路线 ● 学习路径 :  官方文档 :掌握核心概念和最佳实践(如Spring Boot的Spring.io)。    ○ 实践项目 :通过小项目验证技术点(如用Redis实现分布式锁)。    ○ 源码与社区 :阅读源码、参与GitHub讨论(如Dubbo的Issue)。● 判断资料质量 :  筛选标准 :作者权威性(如Oracle认证工程师)、内容更新日期、社区评价(Stack Overflow投票)。    ○ 避免弯路 :优先选择官方推荐资源,再参考高星GitHub项目或经典书籍(如《Effective Java》)。● 持续改进 : 定期复盘学习效果,建立知识体系脑图,与团队分享经验。7.  通用问题2:项目难点解决  结构化回答(STAR模型)  :● 情境(Situation)  :在XX项目中,接口响应慢,导致超时报警。● 任务(Task)  :需在1周内将平均响应时间从2s优化至200ms内。● 行动(Action)  :  定位瓶颈 :通过Arthas追踪调用链,发现SQL查询耗时占80%。○ 优化SQL :添加索引、重构分页查询,减少全表扫描。○ 缓存引入 :对热点数据(如配置信息)增加Redis缓存。● 结果(Result)  :响应时间降至150ms,且通过压测验证稳定性。●平衡调优与稳定 :局部优化前评估影响范围,通过灰度发布观察效果。●监控核心指标(CPU、内存、错误率),确保优化不引发链式故障。8.  通用问题3:未来3年的职业规划 ● 短期(1年)  : 深入掌握公司技术栈(如微服务架构、中间件),成为团队核心开发。○参与高复杂度模块(如分布式事务、性能优化)。● 中期(2年)  : 提升架构设计能力,主导跨系统方案设计(如亿级流量系统)。○培养业务洞察力,推动技术与业务融合(如通过数据驱动产品决策)。● 长期(3年)  : 向技术管理者或架构师转型,负责技术选型与团队规划。○持续学习行业前沿(如云原生、AI工程化),保持技术敏感度。
美团AI面330人在聊 查看12道真题和解析
点赞 评论 收藏
分享
黎明卿.:刚刚结束了一面,面试官大哥就问了两道算法相关的题,本身都不难,但是因为太紧张了把||写成&&然后找半天bug没找见就说怎么不对,两道简单题都用了半个多小时 原本还想着会不会问之前的笔试题,面试官大哥说笔试题如果问题不是很大的话,就不会问了,我的笔试题相对来说没什么大问题,就直接跳过 现在就看能不能等到二面了
点赞 评论 收藏
分享
评论
79
486
分享

创作者周榜

更多
牛客网
牛客企业服务