应聘岗位:淘天集团-大模型算法工程师
面试轮数:
整体面试感觉:
1. 自我介绍
在自我介绍环节,我清晰地阐述了个人基本信息、教育背景、工作经历和技能特长,展示了自信和沟通能力。
2. 技术问题
2.1 在大模型微调过程中,评价指标是怎样设定的?
在大模型微调过程中,评价指标的设定是为了精确衡量模型在特定任务上的表现,以便判断微调的效果和指导进一步的优化。选择合适的评价指标至关重要,因为它们直接影响到对模型性能的理解、比较和决策。
确定微调任务的具体类型,如分类、回归、序列标注、问答、生成任务等。每种任务类型有其适用的一组或几组核心评价指标。
示例任务类型及典型指标:
-
分类任务:
-
- 准确率(Accuracy)
- 精确率(Precision)
- 召回率(Recall)
- F1分数(F1 Score)
- AUC-ROC曲线(适用于不平衡类别问题)
-
回归任务:
-
- 平均绝对误差(MAE)
- 平均平方误差(MSE)
- 均方根误差(RMSE)
- R²分数(R-squared)
-
序列标注任务:
-
- 标签准确率(Token-level Accuracy)
- F1分数(按标签类别计算)
- 微平均/宏平均F1(Micro/Macro F1)
-
问答任务:
-
- BLEU(用于衡量生成答案与参考答案的相似度)
- ROUGE(评估摘要质量和召回率)
- METEOR(结合词匹配与语义匹配的评估指标)
- EM(Exact Match,完全匹配率)
-
生成任务:
-
- 除上述BLEU、ROUGE、METEOR外,还有:
- 自然度评分(Human Evaluation)
- Perplexity(模型困惑度,反映模型对数据的预测能力)
2.2 大模型微调过程中,难免会遇到一些低质量数据,如何对这些数据进行清洗呢?
- 去除非文字字符:移除无关符号、特殊字符、超链接、HTML标签等非文字元素。
- 标准化文本:统一大小写、去除多余空格、转为ASCII编码(如有必要)、进行词干化或 Lemmatization 等规范化处理。
- 词汇过滤:去除停用词、无关词汇、敏感词汇以及行业特有词汇表中的无关条目。
2.3 LSTM和RNN有什么区别?解决什么问题?
LSTM (Long Short-Term Memory) 和 RNN (Recurrent Neural Network) 都是处理序列数据的神经网络架构,但它们在结构、工作机制和解决的问题上有所区别。下面是它们的主要区别和各自解决的核心问题:
RNN (Recurrent Neural Network):
- 结构:RNN的基本单元包含一个隐藏层,该隐藏层在时间步上递归地接收输入序列的信息,并通过一个带有循环连接的神经元网络结构传递信息。在每个时间步,RNN不仅考虑当前时刻的输入,还考虑前一时刻隐藏状态的反馈,形成对整个序列历史信息的累积。
- 解决的问题:RNN适用于处理具有时间依赖性的序列数据,如自然语言文本、音频信号、时间序列分析等。它可以捕捉到数据中的短期依赖关系,例如在文本中理解前面几个词对当前词的意义影响。
LSTM (Long Short-Term Memory):
-
工作机制:
-
- 输入门:决定当前时刻新信息如何被加入到细胞状态。
- 遗忘门:决定上一时刻细胞状态中的哪些信息应该被遗忘。
- 细胞状态更新:结合输入门和遗忘门的结果,更新细胞状态,保留长期依赖信息。
- 输出门:决定细胞状态中的哪些信息应当作为当前时刻的隐藏状态输出给后续时间步或用于最终预测。
数学表达形式较为复杂,大致如下:
- 解决的问题:LSTM专为解决RNN在处理长序列时遇到的梯度消失/爆炸问题而设计。通过门控机制,LSTM能够在长时间跨度上精确地存储和检索信息,有效地捕获序列数据中的长期依赖关系。这使得LSTM在诸如语音识别、机器翻译、视频动作识别、音乐生成等领域表现出色,尤其是在涉及复杂、延时显著的上下文信息建模任务中。
总结来说,RNN 是基础的循环神经网络结构,适合处理具有短期依赖关系的序列数据,但受限于梯度消失问题,对长期依赖的建模能力有限。LSTM 是RNN的一种升级版,通过引入细胞状态和门控机制,有效解决了长期依赖的捕获问题,特别适用于需要理解和预测序列中深层次、远距离关联的应用场景。
2.4 transformer中,self-attention矩阵的计算公式?
2.5 transformer 和 Bert 的区别是什么?
Transformer 和 BERT(Bidirectional Encoder Representations from Transformers)都是深度学习中用于自然语言处理(NLP)的重要模型,它们之间的关系与区别可以从以下几个方面来阐述:
1. 架构层次与用途
- Transformer: Transformer 是一种通用的序列到序列(sequence-to-sequence)模型架构,最初由 Vaswani 等人在论文《Attention Is All You Need》(2017)中提出。Transformer 包含两个主要部分:编码器(Encoder)和解码器(Decoder)。编码器负责将输入序列转换为固定维度的上下文表示,解码器则利用这些表示来生成目标序列。Transformer 被设计用于解决各种序列转换任务,如机器翻译、文本摘要、问答系统等,尤其擅长那些需要从源序列推断出目标序列的场景。
- BERT: BERT 是基于 Transformer 编码器架构构建的预训练模型,由 Devlin 等人在论文《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》(2018)中提出。BERT 只包含 Transformer 的编码器部分,不包含解码器,因此它是单向而非序列到序列的模型。BERT 主要用于各种自然语言理解(NLU)任务,如文本分类、命名实体识别、情感分析、问答系统中的答案区间定位等,其核心优势在于提取输入文本的深层语义信息。
2. 训练方式与预训练任务
-
Transformer: 在特定下游任务上,Transformer 通常采用有监督的方式从头开始训练,或者在已有的预训练模型基础上进行微调。对于翻译等任务,模型会在平行语料库上进行端到端训练。
-
BERT: BERT 的关键创新在于其预训练方法。它首先在一个大规模无标注文本语料库上进行预训练,通过两个自我监督任务来学习语言表征:
-
- Masked Language Modeling (MLM): 对输入序列中的某些单词进行随机遮蔽,模型需预测被遮蔽单词的内容,这使得 BERT 能够学习双向的上下文信息。
- Next Sentence Prediction (NSP): 给模型提供两个连续的句子片段,让模型判断第二个句子是否紧随第一个句子出现。虽然后来的研究发现 NSP 对某些任务帮助有限,但在原版 BERT 中,这一任务有助于模型捕捉文本间的连贯性和段落结构。
3. 输出层与应用场景
- Transformer: 在翻译等生成任务中,Transformer 的解码器输出层通常采用 Softmax 函数产生下一个单词的概率分布,从而逐词生成目标序列。在其他分类任务中,可能使用线性层加 Softmax 进行类别预测。
- BERT: BERT 在预训练阶段并不涉及特定任务的输出层。在微调阶段,针对不同下游任务,会在 BERT 编码器顶部添加适应任务需求的输出层。例如,对于文本分类任务,可能添加一个全连接层(FC)后接 Softmax 函数来预测类别标签;对于问答任务,则可能使用两个特殊标记(如
[CLS]
和[SEP]
)分别表示序列开始和结束,并取[CLS]
向量经过 FC 层得到答案类别。
共同点:
- 基础架构:BERT 直接继承了 Transformer 编码器的架构,包括自注意力机制(Self-Attention Mechanism)、多头注意力机制(Multi-Head Attention)以及位置编码(Positional Encoding)等核心组件。
- 层级结构:两者均由多个堆叠的层组成,每层包含自注意力子层和前馈神经网络子层。
综上所述,Transformer 是一个完整的序列到序列模型框架,适用于多种生成式 NLP 任务;而 BERT 是基于 Transformer 编码器的预训练模型,专注于自然语言理解任务,通过独特的预训练策略学习强大的语言表征,然后在特定任务上微调以实现高性能。尽管它们有着密切的关系和共享的底层结构,但设计理念、训练方式和应用场景存在显著差异。
2.6 在大模型中,对于除以根号dk后,多任务学习各loss差异过大怎样处理?
在多任务学习(Multi-Task Learning, MTL)中,当面临多个相关但可能具有不同难度、数据分布或量纲的任务时,各自的损失函数(losses)可能会呈现出显著的差异。这种差异可能导致在联合训练过程中,某些任务的梯度占据主导地位,从而使模型更新过于偏向这些任务,而忽视了其他任务的学习。为了平衡不同任务的影响,确保所有任务都能得到充分且合理的优化,研究者提出了多种策略来处理这种情况。其中一个常见的方法涉及到对每个任务的损失进行缩放或标准化,其中包括除以根号dk的操作。这里解释一下这样做的动机及其背后的原理:
为什么除以根号dk?
假设我们有两个或更多任务,每个任务i有自己的损失函数Li
。直接将这些损失相加形成总损失(即total_loss = Σ Li
)并进行反向传播时,如果某一项损失相对于其他项来说数值特别大,那么其对应的梯度也会很大,进而主导模型参数的更新。为了解决这种不平衡问题,可以考虑对每个任务的损失进行规范化处理,使其具有相似的“影响力”:
- 归一化至相同尺度: 一个直观的想法是对每个损失进行归一化,比如除以其均值、标准差或其他统计量,使得所有任务的损失大致处于同一数量级。但这并不能解决任务间固有的复杂性差异,即某些任务可能天生就比其他任务更容易或更难优化。
- 引入任务权重:另一种方法是在总损失中为每个任务分配一个可学习或固定的权重
wi
,使总损失变为total_loss = Σ wi * Li
。这种方式允许手动或自动调整各个任务的重要性,但如果权重设置不当,仍然可能出现某些任务梯度过于突出的问题。 - 基于梯度范数调整:这种情况下提到的“除以根号dk”,很可能是参考了一种基于梯度范数的动态调整策略。这里的
dk
通常代表任务k的某种梯度规模指标,如梯度的L2范数(Euclidean norm)。除以根号dk相当于对该任务的损失进行了如下缩放:
这样做的理由包括:
- 缓解梯度爆炸/消失:通过除以根号dk,可以对较大梯度进行抑制,对较小梯度进行放大,有助于防止因个别任务梯度过大而导致的梯度爆炸问题,同时也能增强梯度较小任务的影响,避免它们在反向传播中被忽视。
- 保持梯度方向不变:这样的操作仅改变了梯度的幅度而不改变其方向,保留了原始损失函数提供的优化指引。
- 促进任务间的相对平衡:理想情况下,经过这样的调整后,所有任务的梯度会更加接近,使得模型在更新时能更好地兼顾所有任务,而不是过度偏向某一任务。
如何实际应用这种方法?
实践中,动态调整任务损失的具体实现可能依赖于具体的算法或框架。一些研究提出了专门的方法来自动调整这些权重,如GradNorm(Gradient Normalization)算法。GradNorm不仅考虑了每个任务的梯度范数,还考虑到所有任务梯度的总体分布,动态调整任务权重以维持所有任务梯度的总范数在预定范围内。这样既能保证任务间的相对平衡,又能适应任务难度的变化。
总结起来,除以根号dk的操作是为了在多任务学习中应对各任务损失差异过大的问题,通过调整每个任务损失的尺度来促使模型在训练过程中给予所有任务相对均衡的关注。这种基于梯度范数的调整策略有助于防止梯度爆炸/消失,保持梯度方向,并促进任务间的相对平衡,从而提升多任务学习的整体性能。具体实施时,可以使用诸如GradNorm之类的算法来自动化这个过程。
2.7 多模态融合后,怎样知道最终结果受哪种模态影响更大?
多模态融合后,了解最终结果受到哪种模态影响更大可以帮助我们理解模型的决策过程、验证融合策略的有效性以及评估不同模态数据对特定任务的重要性。以下是一些常用的方法来量化和分析多模态融合结果中各模态影响力的大小:
1. 可视化注意力机制:若使用的多模态模型包含了注意力机制(如注意力层或门控机制),可以通过可视化这些机制的输出来直观观察模型在做出决策时对不同模态的侧重程度。例如,对于图像-文本融合模型,可以绘制出文本对图像不同区域的注意力热图,颜色越深表示该区域受文本描述的影响越大。类似地,也可以展示图像对文本关键词的注意力分布。2. 特征重要性评估:应用特征重要性度量方法(如SHAP、LIME、Permutation Importance等)来量化各模态特征对模型输出的影响。这些方法通过扰动或剔除特征来观察模型预测的变化,从而评估特征对结果的贡献。在多模态融合场景下,可以分别对各模态的特征进行此类分析,以得出各模态在整个决策过程中的相对重要性。3. 模态消融实验:执行模态消融(ablation study)实验,即逐步移除或屏蔽各模态数据,观察模型性能的变化。若移除某个模态后导致性能显著下降,说明该模态对最终结果有重大影响。通过比较不同模态缺失情况下的模型精度、F1得分、AUC-ROC曲线等评价指标,可以定量评估各模态的相对重要性。4. 干预与敏感性分析:改变某个模态的部分数据(如替换、删除或添加特定特征),观察模型输出的响应。强烈的响应指示该模态对结果有较大影响。这种方法可以帮助理解模型对特定模态信息变化的敏感度,从而间接评估模态的重要性。5. 独立模型对比:训练只使用单一模态的多个基线模型,对比它们与多模态融合模型在相同任务上的表现。如果多模态模型显著优于任何单模态模型,说明融合带来了增益,此时可以通过比较单模态模型的性能差距来间接推断各模态的相对影响力。6. 集成学习方法:利用集成学习思想,构建多个仅包含部分模态的弱学习器,然后通过投票、加权平均等方式融合这些弱学习器的输出。弱学习器的权重可以反映相应模态的重要性。例如,Stacking或Blending等方法可以用来组合不同模态的预测,并通过交叉验证学习各模态预测的权重。7. 可解释性模型与工具:使用具有内在可解释性的多模态模型(如部分线性模型、规则模型等)或外部解释工具(如anchors、Counterfactuals等),直接分析模型决策与各模态特征之间的因果关系。这些方法可以揭示在特定决策实例中,何种模态特征起到了决定性作用。
综合运用上述方法,可以从不同角度揭示多模态融合结果中各模态的影响力。需要注意的是,不同任务和数据集背景下,各模态的重要性可能有所不同,因此分析应结合具体应用场景进行。同时,结果解读应考虑模型本身的局限性和解释方法的假设条件。
2.8 介绍一下,过拟合和欠拟合? 如何辨别?如何解决?
过拟合和欠拟合是机器学习中两种常见的模型训练问题,它们分别对应于模型对训练数据拟合程度的两个极端情况,影响模型的泛化能力,即在未见过的新数据上的表现。
- 过拟合 (Overfitting)
定义: 过拟合发生在模型在训练数据上表现得非常好(如损失函数值很低,训练集准确率接近甚至达到100%),但在验证集或测试集上的表现明显变差(如损失增大,准确率大幅下降)。这意味着模型对训练数据的细节(包括噪声和偶然性特征)进行了过度的学习,以至于它丧失了对未知数据的一般化能力。
表现:
- 高的训练集准确率与较低的测试/验证集准确率之间的显著差距。
- 能够学习并记住训练数据中的复杂模式,包括无关紧要的细节和噪声。
原因:
- 模型复杂度过高(例如,深度过深的神经网络、过多的特征或参数)。
- 训练数据量相对较小,不足以充分约束模型。
- 数据中存在的噪声或异常值被模型当作有效信号学习。
- 训练过程持续时间过长,可能导致模型过度调整到训练数据的具体特性。
解决方案:
- 正则化:通过添加L1、L2正则项(惩罚项)来限制模型参数的大小,防止模型过于复杂。
- 简化模型:减少模型的复杂性,如减小神经网络的层数、节点数或减少决策树的深度和分支。
- 增加数据量:获取更多的训练样本,特别是代表性强、无噪声的数据。
- 数据增强:对现有的训练数据进行变换(如翻转、旋转、缩放图像,或加入噪声等),制造虚拟样本以扩大训练集规模。
- 早停法(Early Stopping):在验证集性能停止提升或开始下降时停止训练。
- Dropout:在神经网络训练过程中随机丢弃部分神经元,防止节点间过度依赖。
- 集成学习:使用Bagging、Boosting等方法构建多个模型的集合,减少个体模型过拟合的风险。
- 欠拟合 (Underfitting)
定义: 欠拟合是指模型在训练集、验证集及测试集上都不能取得令人满意的表现,即模型对训练数据的拟合程度都不够好,未能捕捉到数据的基本趋势和规律。
表现:
- 低的训练集准确率伴随同样低的测试/验证集准确率,不存在训练集与测试集之间明显的性能差距。
- 模型无法学习到数据的简单模式,表现出低的概括能力。
原因:
- 模型复杂度过低(例如,线性模型用于非线性数据、神经网络结构过于简单)。
- 特征数量不足或质量不高,不能有效刻画数据的特征。
- 学习算法的迭代次数不够,模型没有充分训练。
解决方案:
- 增加模型复杂度:使用更复杂的模型架构(如更深的神经网络、更高阶的多项式模型),或增加特征的数量和维度。
- 特征工程:设计新的特征或选择更能代表数据本质的特征。
- 增加训练时间:允许模型进行更多轮的迭代训练,确保模型充分学习数据。
- 调整超参数:优化学习率、正则化强度等超参数设置,找到更适合数据的模型配置。
- 集成学习:采用多种模型的集成方法,利用多种模型的互补性提高整体拟合能力。
总结来说,过拟合与欠拟合是模型训练过程中需要警惕和平衡的两个方面。过拟合关注的是模型对训练数据过于敏感,忽视了泛化能力;而欠拟合则是模型学习能力不足,未能从训练数据中提取到足够的有用信息。针对这两种情况,采取相应的措施调整模型复杂度、数据集大小与质量、训练过程等,以实现模型对训练数据的良好拟合并保持良好的泛化性能。
2.9 MOA(Multi-Ouery Attention)和GOA(Grouped-Query Attention)相比MHA(Multi-Head Attention),计算量变化如何,主要带来了什么优化?
- MQA和GQA虽然可训练参数量比MHA少,但是计算量和MHA相比变化不大,主要在生成KV时有少量降低
- Decoder-only的大模型由于causal attention的存在,使用了KV缓存加速推理。MQA和GQA能减少KV头的数量,节省了缓存,使得在输入长度较长时也能把KV放进缓存。
2.10 了解哪一些主流的多模态架构?
- CLIP:连接文本和图像的桥梁
CLIP 是由 OpenAl在 2021年提出的预训练模型,用于评估给定图像与给定文本描述的匹配程度。该模型使用大量(约4亿)从网页中爬取的图像-文本对(pair)数据进行对比学习。
- ALBEF:先对齐后融合
- 面红色框其实就类似于 CLIP,双塔各自编码图像和文本,然后取 CLS 进行对比学习;上面蓝色框就是为了加强不同模态交互用的编码器(前面提到过 CLIP 内积的方式太简单了,这里就是加强多模态融合以适配更难的任务);
- 图像编码器 12层,文本编码器6层,多态编码器6层;其实右侧是将一个 12层的文本编码器拆成了两部分,这是因为一些研究工作发现在多模态中需要更强的图像编码器,进行这样的拆分一定程度上保证了强图像 encoder和弱文本 encoder,且保证了模型参数不过多的情况下融合图像和文本的信息。
- VLMO:灵活才是王道
VLMo 模型通过使用混合模态专家(MoME)Transformer 实现了统一的视觉-语言预训练。MOMETransformer的结构设计允许根据输入信号的不同使用对应的 FFN 层参数进行计算。具体来说,VLMo 模型包括了视觉专家(V-FFN)、文本专家(L-FFN)和图文专家(VL-FFN),它们分别用于处理图像、文本和图像-文本输入。这种灵活的设计使得VLMo 模型能够根据任务的不同使用不同的结构进行训练和推理。
- BLIP:理解、生成我都要
- 现有的预训练模型通常在理解型任务或生成型任务中表现出色,但很少有模型能够同时在这两种任务上达到优秀的性能。
- 现有的性能改进主要是通过扩大数据集规模并使用从网络收集的带有噪声的图像-文本对进行训练实现的。然而,网络数据集中的噪声会对模型的性能产生负面影响。
- CoCa:让模型训练得更快一点
CoCa 将解决图像或多模态问题的模型概括成3种经典结构,分别是 single-encoder model、dual-encoder model、encoder-decoder model。Single-encoder model指的是基础的图像分类模型,dual-encoder model指的是类似 CLIP 的双塔图文匹配模型,encoder-decoder model指的是用于看图说话任务的生成式模型。
- BEITV3:图片也是一种语言
BEITV3 的主要想法就是希望统一多模态学习中的模型结构、预训练任务以及模型规模。为此将图片也看作一种语言(lmglish),图像文本对看作是 parallelsentences。在输入形式统一之后,也就不需要ITC、ITM、MLM、WPA等其他目标函数,而是可以使用统一的masked“languagemodeling的方式进行训练。
BEITV3 的模型结构使用的是 Multiway Transformer(其实就是前面 VLMo的 MOME),因此也就具备了之前提到的灵活性的特点,可以适用于非常多的下游任务。
- BLIP2:将图像特征对齐到预训练语言模型
BLIP-2通过在冻结的预训练图像编码器和冻结的预训练大语言模型之间添加一个轻量级 查询Transformer (Query Transformer,Q-Former)来弥合视觉和语言模型之间的模态隔阂。在整个模型中,Q-Former 是唯一的可训练模块,而图像编码器和语言模型始终保持冻结状态。
- CogVLM:视觉优先再现江湖
这是 VisualGLM 的升级版,但是放弃了 VisualGLM 的一些思想,这里的主要思想回归 LLM 前的多模态研究思路:更大的图像编码器可能是有效的,也就是视觉优先。
- InstructBLIP:指令微调大杀四方
InstructBLIP 可以理解为是 BLIP2+指令微调
- 作者们收集了 26 数据集并转化指令微调的格式
- 并改进 BLIP2 中的 Query Transformer为指令感知的 QueryTransformer,能够抽取和给定指令相关的信息
- MiniGPT-4:LLM 助力多模态
对于 GPT4 能够具有超强的图文理解能力,作者们的理解是这是得益于大语言模型的能力,因此考虑将最新的一些能跟 ChatGPT “媲美”的语言模型引入其中,这里采用了 Vicuna作为语言模型,在视觉理解上,作者采用了和 BLIP2 里面一样的视觉模块,包含一个 ViT 模块和一个 Q-Former 模块。
3. Leetcode 题
具体题意记不清了,但是类似 【994. 腐烂的橘子】
- 题目内容
在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一:
- 值 0 代表空单元格;
- 值 1 代表新鲜橘子;
- 值 2 代表腐烂的橘子。
每分钟,腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。
返回 直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1 。
- 代码实现
如何学习大模型
现在社会上大模型越来越普及了,已经有很多人都想往这里面扎,但是却找不到适合的方法去学习。
作为一名资深码农,初入大模型时也吃了很多亏,踩了无数坑。现在我想把我的经验和知识分享给你们,帮助你们学习AI大模型,能够解决你们学习中的困难。
我已将重要的AI大模型资料包括市面上AI大模型各大白皮书、AGI大模型系统学习路线、AI大模型视频教程、实战学习,等录播视频免费分享出来,需要的小伙伴可以扫取。
一、AGI大模型系统学习路线
很多人学习大模型的时候没有方向,东学一点西学一点,像只无头苍蝇乱撞,我下面分享的这个学习路线希望能够帮助到你们学习AI大模型。
二、AI大模型视频教程
三、AI大模型各大学习书籍
四、AI大模型各大场景实战案例
五、结束语
学习AI大模型是当前科技发展的趋势,它不仅能够为我们提供更多的机会和挑战,还能够让我们更好地理解和应用人工智能技术。通过学习AI大模型,我们可以深入了解深度学习、神经网络等核心概念,并将其应用于自然语言处理、计算机视觉、语音识别等领域。同时,掌握AI大模型还能够为我们的职业发展增添竞争力,成为未来技术领域的领导者。
再者,学习AI大模型也能为我们自己创造更多的价值,提供更多的岗位以及副业创收,让自己的生活更上一层楼。
因此,学习AI大模型是一项有前景且值得投入的时间和精力的重要选择。
标签:模态,淘天,训练,模型,飞起,学习,面试,任务,文本 From: https://blog.csdn.net/python12345_/article/details/142754902