仅用于站内搜索,没有排版格式,具体信息请跳转上方微信公众号内链接
作者:山野闲人@知乎仅用于学术分享
来源:https ://zhuanlan. zhihu.com/p/27537084854
本文笔主亲身经历,面试公司有腾讯、字节、拼多多、饿了么、顺丰科技、携程、金山、富途、TCL、虾皮等。
大体上面试流程基本一致:
自我介绍
项目拷打
通识考察
手撕代码
反问
下面我会从上面5个维度出发,记录下自己的经验和看法。
01
自我介绍
自我介绍是对背景和工作经历的概述,所以尽可能突出你自己做的比较好且有把握的项目,这样面试官在提问的时候也会因为你自己提到的内容而往这方面走。
不过有一些面试官就是会找简历上和自己业务相关或者感兴趣的项目来进行提问,所以你在简历上提到的项目都需要非常熟悉。
02
项目拷打
这一部分决定了面试官对于你经验的评估,项目的理解要深一些,这个只能通过不断打磨完善项目经历。
微调项目:
业务背景
数据的构成,是否使用了合成数据
训练的过程中用了什么方法(为什么用这样的方式,用别的方式会有什么问题,是否尝试过)
如何评估整体的效果
微调之后是否还会出现幻觉的问题,出现了的话应该怎么处理
这个能力是否只能用在当前业务场景,是否可以作为一个通用的能力
是否尝试过用其他的基座模型
…
应用层项目:
业务背景
逻辑框架
优化前和优化后的能力差距
遇到最大的困难是什么?怎么解决的
是否还有别的优化方式
某个流程是否可以进行再优化
上线之后的效果反馈
…
03
通识考察
(1)Transformers和之前的模型的区别,为什么Transformers好?
追溯到最开始的seq2seq模型,RNN模型的一个比较大的问题就是序列长了之后,效果变长;
后期的LSTM通过三个门控机制比较好的解决了这个长短期记忆问题,但是这两种模型都是串行模型,在计算复杂度上比较大,推理时间比较长。
Transformers通过encoder+decoder堆叠的形式,通过残差连接、多头注意力机制、位置编码的形式实现了比较好的seq2seq的效果。
(2)介绍下Bert,框架,预训练和后续的微调任务?
embedding层由positional_embedding+token_embedding+segment_embedding组成,然后进入encoder层。
这里主要是通过多头注意力的方式将输入转换为Q,K,V,三个矩阵,然后通过softmax(QK. T/sqrt(dk))V来计算,然后加残差和layernorm,最后接入一层FFN。
预训练任务主要是两个,一个是MLM(maskedlanguagemodel预测masked的token)和NSP(nextsentenceprediction),后续的微调任务有命名实体识别,分类等。
(3)为什么Bert适合做向量模型,底层原理是什么?
推理耗时比较短,底层原理是利用【CLS】这个无语义的token向量表征来表示整个输入的语义。
训练方式类似于simcse的对比学习通过判断positive和negative的【CLS】的token的语义的相对值来进行参数更新(原理即正样本和输入query的向量相似度要大于负样本和输入query的向量相似度)。
(4)RoBERTa做了什么优化?
训练过程中去掉了NSP任务,动态掩码策略,更大的训练批次和数据量,嵌入层的初始化方式不同,加入AdamW优化器。
(5)想要大模型输出的内容都为json格式,怎么实现?
限制解码,训练的时候response都为json格式。
(6)OOM问题怎么处理
模型量化、模型并行、低精度训练、混合精度训练、限制最大文本长度、减少训练batch、deepspeed的三个显存优化方案等。
(7)大模型的参数量是怎么计算出来的?
大模型的参数量计算通常涉及以下几个关键部分:
Embedding层:包括词嵌入、位置嵌入等,参数量由词表大小乘以嵌入维度决定。例如,词表大小为30522,嵌入维度为1024,则词嵌入的参数量为两者的乘积。
Transformer层:
Self-Attention:每个注意力头有三个权重矩阵(Q、K、V),每个矩阵的大小为嵌入维度乘以投影维度,投影维度通常是嵌入维度。
如果有L层,每层有H个头,每个头的参数量为3嵌入维度投影维度。
FeedForwardNetwork(FFN):通常包含两个线性层,第一个从嵌入维度映射到较大的中间层,第二个再映射回嵌入维度。参数量为两层的输入输出维度的乘积之和。
LayerNormalization:每个Transformer层后通常有LayerNorm,它有少量参数(通常为每个隐藏层的两个参数)。
模型结构参数:包括层数(L)、头数(H)、嵌入维度(D)、中间层大小(F)等。
一个基本的Transformer层的参数量可以近似为4HD^2+2DF。
通过将所有这些部分的参数量相加,就可以得到整个模型的总参数量。
例如,对于特定的模型配置(如层数、头数、嵌入尺寸等),可以使用公式结合具体数值进行计算。
例如,TinyLLaMA模型的参数量就是基于其特定的架构参数计算得出的。
(8)DeepSeekR1的训练方式,GRPO的原理是什么?
尽可能少的使用SFT,通过冷启动少部分QA数据来进行SFT,然后再使用大量的强化学习和多阶段SFT来进行调优。
GRPO(GroupRelativePolicyOptimization)的核心原理是让模型通过对模型同一批次生成的答案来进行reward打分,然后进行组内比较,来更新模型。
(9)基于过程的强化学习和基于结果的强化学习的差异是什么?
基于过程:更关注智能体采取行动的过程,即智能体如何根据环境状态做出决策以及决策的序列。
它强调学习一个策略,使得智能体在每个状态下都能选择合适的行动,以最大化长期累积奖励。
例如,在机器人路径规划中,基于过程的强化学习会关注机器人如何一步一步地选择移动方向,以找到到达目标的最优路径。
基于结果:主要关注最终的结果或目标是否达成,以及达成结果的效率等指标。
它通常不关心智能体具体是通过怎样的过程或行动序列来达到目标的,只看重最终是否成功以及相关的结果指标。
比如在游戏中,基于结果的强化学习只关注是否赢得游戏,而不关心游戏过程中具体的操作步骤。
这个题属于开放话题,读者可以根据自己的理解去分析,这两种强化学习的优势和弱势。
(10)Agent的概念是什么?整体流程是怎么样的
Agent在强化学习的概念就是一个能够感知环境并在环境中采取行动以实现特定目标的实体。
主要由三部分能力:感知能力,决策能力,执行能力。
Pipeline:了解用户需求,进行需求拆分。决定是否需要调用其他子Agent,如何调用,正确的顺序。
调用之后的结果进行评估,是否能够解决问题,如果不能应该如何进行修正,如果则执行回复等。
(11)DeepSeekR1对于Agent的能力是否有提升,如何进行运用?
首先明确下DeepSeekR1的最大提升主要是在逻辑计算能力上的重大提升,这在Agent场景下的复杂任务处理,路径规划上是能够起到很大帮助,通过Reasoning的方式进行任务分析,拆分,子Agent编排,这都是很大的一个提升。
(12)RAG的整体流程和评估方式?
整体流程
知识(数据)收集,数据预处理(通过分段+滑动窗口等方式进行chunking),构建索引(es+milvus向量库)。
检索时通过多路召回+精排的方式来提升召回率,LLM知识融合生成,后处理,判断问句和生成的答案的一致性。
评估方式
基于生成结果的评估:
BLEU:计算生成文本与参考文本之间的n-gram重叠程度,评估生成文本与标准文本的相似性,得分越高表示生成结果越接近参考文本。
ROUGE:主要基于召回率,衡量生成文本与参考文本之间的词汇重叠情况,如ROUGE-1、ROUGE-2分别计算一元组和二元组的召回率,用于评估生成文本的内容完整性和准确性。
METEOR:综合考虑了词汇重叠、同义词匹配、词干提取等因素,更全面地评估生成文本与参考文本的语义相似性,取值范围为0到1,越接近1表示生成效果越好。
基于检索效果的评估:
准确率(Precision):检索出的相关文档数量与检索出的文档总数的比值,反映了检索结果的精确性,越高表示检索出的不相关文档越少。
召回率(Recall):检索出的相关文档数量与数据库中实际相关文档总数的比值,衡量了检索系统找到所有相关文档的能力,越高表示漏检的相关文档越少。
F1值:综合考虑准确率和召回率的指标,是它们的调和平均数,F1值越高,说明检索效果越好。
人工评估:
内容相关性:评估生成的文本是否与用户输入的问题或任务要求紧密相关,是否回答了关键问题,提供了有价值的信息。
语言质量:检查生成文本的语法正确性、词汇丰富度、语句流畅性等,判断语言表达是否自然、准确,有无明显的语病和逻辑错误。
实用性:根据具体应用场景,评估生成文本对用户的实际帮助程度,是否能够满足用户的需求,是否具有可操作性和实际价值。
(13)如何解决RAG中信息覆盖率低、幻觉、逻辑计算的问题?
单一的RAG(NavieRAG)的能力肯定不足以应该复杂场景,需要结合知识图谱的方式来对文档进行实体和关系抽取。
同时增加互信息索引在召回阶段召回信息更相关的片段,逻辑计算问题需要引入专用的计算模块,例如数据计算库,逻辑推理引擎(具体可以参考KAG)。
(14)大模型的数据合成应该怎么做?有哪些方式
selfinstruct的方法去基于种子数据生成、wizardlm在这个基础上对数据进行复杂化、也有ultrachat这种llm相互对话的方法、前段时间比较火的是magpie,相当于用温度让模型自由发挥。
(15)大模型预训练和SFT的loss的差别是什么?
(16)DeepSpeed的三个stage分别是什么?有什么作用
DeepSpeed是微软开发的一个用于大规模分布式训练的深度学习优化库,它的ZeRO(ZeroRedundancyOptimizer)技术包含三个主要阶段(Stage),旨在减少内存使用并提高训练效率。
以下为你详细介绍这三个阶段及其作用:
Stage1:优化器状态分片(OptimizerStatePartitioning)
原理:在传统的分布式训练中,每个GPU都会复制一份完整的优化器状态(如Adam优化器中的梯度累积和动量项),这会导致大量的内存冗余。
而在ZeROStage1中,优化器状态会被均匀地分片到各个GPU上,每个GPU只保存一部分优化器状态。
例如,假设有4个GPU参与训练,每个GPU只保存1/4的优化器状态。
作用:显著减少了每个GPU上的内存占用,使得可以使用更大的模型和批量大小进行训练。
同时,由于每个GPU只需要更新自己所负责的优化器状态,减少了通信开销,提高了训练效率。
Stage2:梯度分片(GradientPartitioning)
原理:在反向传播过程中,每个GPU会计算一部分模型参数的梯度。在传统方法中,这些梯度会被汇总到每个GPU上,以便进行优化器更新。
而在ZeROStage2中,梯度也会像优化器状态一样被分片到各个GPU上,每个GPU只保存一部分梯度。
这样,在进行优化器更新时,每个GPU只需要根据自己所保存的梯度和优化器状态进行参数更新,而不需要等待所有梯度的汇总。
作用:进一步减少了每个GPU上的内存占用,因为不需要保存完整的梯度信息。同时,减少了梯度通信的量,降低了通信开销,提高了训练的并行性和效率。
Stage3:参数分片(ParameterPartitioning)
原理:在ZeROStage3中,不仅优化器状态和梯度会被分片,模型参数本身也会被分片到各个GPU上。
每个GPU只保存一部分模型参数,在进行前向传播和反向传播时,通过通信机制动态地获取所需的参数。
例如,当一个GPU需要计算某个参数的梯度时,它会从保存该参数的GPU上获取该参数。
作用:极大地减少了每个GPU上的内存占用,使得可以训练非常大的模型,甚至超过单个GPU内存容量的模型。
同时,通过动态参数获取和通信机制,保证了模型训练的正常进行,提高了内存利用率和训练效率。
(17)模型并行和数据并行的区别是什么?这两种方式的数据流和梯度是怎么更新的
模型并行:将一个深度学习模型按照不同的层次或组件划分到不同的计算设备(如GPU)上,每个设备负责处理模型的一部分。
例如,在一个深度神经网络中,将前几层放在一个GPU上,后几层放在另一个GPU上。
数据并行:将训练数据分成多个小批次,同时在多个计算设备上进行模型训练,每个设备都拥有完整的模型副本。
比如,有1000张图像的训练数据集,可将其分成10份,每份100张,分别在10个GPU上进行训练。
模型并行数据流和梯度更新
数据流:输入数据首先被送到负责模型起始部分的设备上进行计算,得到中间结果后,将中间结果传递给下一个负责后续模型部分的设备,依次类推,直到得到最终的输出结果。
例如,在一个由两个GPU组成的模型并行系统中,GPU1处理输入数据的前半部分计算,将结果传给GPU2,GPU2再进行后半部分的计算得到最终输出。
梯度更新:在反向传播过程中,从输出层开始,每个设备根据接收到的梯度信息计算自己所负责模型部分的梯度,并将梯度传递给前一个设备,同时根据计算得到的梯度更新自己所负责的模型参数。
各设备之间需要进行频繁的梯度通信和同步,以确保模型参数的正确更新。
数据并行数据流和梯度更新
数据流:不同的计算设备同时处理不同批次的数据,每个设备都使用自己的模型副本对输入数据进行前向传播计算,得到各自的输出结果。
例如,在有4个GPU的数据并行训练中,每个GPU都对自己分到的那部分数据进行独立的前向传播计算。
梯度更新:每个设备在完成前向传播后,独立计算自己所处理数据批次的梯度。
然后,将这些梯度进行汇总平均,通常通过AllReduce等通信操作将所有设备上的梯度汇总并求平均,得到全局平均梯度。
最后,每个设备根据这个全局平均梯度来更新自己的模型参数,以保证所有设备上的模型参数保持一致。
(18)DP/PP/TP/DDP的概念分别介绍一下?
DP(dataparallelism)数据并行:数据并行是指将训练数据分成多个小批次,同时在多个计算设备(如GPU)上进行模型训练,每个设备都拥有完整的模型副本。
PP(pipelineparallelism)流水线并行:管道并行是将深度学习模型按照不同的层次或阶段划分成多个部分,每个部分分配到不同的计算设备上,数据像在管道中流动一样,依次经过各个设备进行处理。
TP(tensorparallelism)张量并行:是将模型中的张量(如权重矩阵、激活值等)在不同的维度上进行划分,分布到多个计算设备上进行并行计算。
DDP(distributeddataparallelism)分布式数据并行:是数据并行的一种分布式实现方式,用于在多个节点(如多台服务器)的集群环境中进行深度学习模型训练,每个节点可以包含多个计算设备。
(19)常用的分词方式BPE的原理是什么?
山野闲人:[LLM]从实践到理论,BytePairEncoding(BPE)深度调研
https ://zhuanlan. zhihu.com/p/657938053
04
手撕代码
算法代码:
手写位置编码
手写多头注意力机制
Leetcode:
零钱兑换
最长递增子序列
打家劫舍
最长公共子序列
跳跃游戏
真题
题1:不调用库函数或*算子,实现p的a分之b次幂
题目描述:
a、b是整数,p是有理数
不考虑非法情况(分母为0,负数开方等)
结果精确到小数点后2位
题2:c是非负整数,是否存在aa+b*b=c?
05
反问
问题如下:
明确新公司的业务方向,现在大模型的方向很多,技术方向:RAG,Agent,微调,数据合成等,应用方向有:智能客服,流程优化等。
工作强度
公司是否有明确的晋升机制
调薪幅度及周期(算法目前在市场上还是属于香饽饽,不调薪的话人是留不太住的)
面试两个月下来,大模型算法工程师在市场上还是比较紧缺的,特别是deepseek之后,不管是互联网公司还是传统行业都开始投入AI,机会和风险并存。
建议大家在做选择的时候多比较公司的发展和业务方向,祝大家都能拿到心仪的offer。
如果觉得本文有帮助到你的话,麻烦点赞、收藏和分享,谢谢。
END