最近技术群组织了一次算法面试讨论会,今天分享的是一位小伙子的痛苦面试经历,如果你想加入我们的讨论群,见文末。
本次分享的内容如下:
应聘岗位:字节大模型算法实习生
面试轮数:第一轮
整体面试感觉:偏难
1. 自我介绍
在自我介绍环节,我清晰地阐述了个人基本信息、教育背景、工作经历和技能特长,展示了自信和沟通能力。
2. 技术问题回答
2.1 介绍一下 transformer?
传统的seq2seq模型使用循环神经网络(RNN)来处理序列数据,但RNN存在一些限制,如难以并行计算和难以捕捉长期依赖关系。Transformer则通过使用自注意力机制(self-attention)来解决这些问题。
Transformer模型由编码器和解码器组成。编码器将输入序列转换为一系列高维特征表示,而解码器则将这些特征表示转换为输出序列。编码器和解码器都由多个相同的层组成。每个层都包含一个自注意力子层和一个前馈神经网络子层。
自注意力机制允许模型在编码和解码过程中对输入序列的不同部分进行加权。它通过计算每个输入位置与其他位置之间的相关性得分,来决定每个位置的重要性。这样,模型可以更好地关注关键的上下文信息。
除了自注意力机制,Transformer还引入了残差连接和层归一化,来帮助模型更好地训练和优化。残差连接允许模型在不同层之间直接传递信息,层归一化则有助于减轻训练过程中的梯度问题。
Transformer模型的训练通常使用无监督的方式,如自编码器或语言模型。一旦训练完成,它可以用于各种序列到序列任务,如机器翻译、文本摘要、对话生成等。
2.2 transformer的输入和输出分别是什么?
Transformer 的输入是经过词嵌入(Word Embedding)和位置嵌入(Positional Embedding)处理后的序列,输出也是经过词嵌入和位置嵌入处理后的序列。
具体来说,Transformer 的输入是一个由单词或符号组成的序列,如句子或文本。首先,将这些单词或符号转换为它们的嵌入向量,通常是通过词嵌入技术实现的。然后,为每个单词或符号分配一个位置嵌入向量,以表示它们在序列中的位置。这些嵌入向量和位置嵌入向量被组合在一起,形成一个三维的张量,作为 Transformer 的输入。
Transformer 的输出也是一个由单词或符号组成的序列,与输入序列具有相同的形状。在 Transformer 中,输入序列和输出序列之间通过自注意力机制(Self-Attention)进行交互。在每个时间步,Transformer 都会计算输入序列中每个单词或符号与输出序列中每个单词或符号的注意力权重,并基于这些权重生成输出序列中的每个单词或符号的嵌入向量。最终,这些嵌入向量被转换回单词或符号,形成输出序列。
2.3 说一下 Bert模型?
BERT 模型的核心思想是通过大规模的无监督预训练来学习通用的语言表示,然后在特定任务上进行微调。相比传统的基于词的语言模型,BERT 引入了双向 Transformer 编码器,使得模型能够同时利用上下文信息,从而更好地理解词语在不同上下文中的含义。
BERT 模型的预训练阶段包含两个任务:Masked Language Model (MLM) 和 Next Sentence Prediction (NSP)。在 MLM 任务中,模型会随机遮盖输入序列的一部分单词,然后预测这些被遮盖的单词。这样的训练方式使得模型能够学习到单词之间的上下文关系。在 NSP 任务中,模型会输入两个句子,并预测这两个句子是否是连续的。这个任务有助于模型理解句子之间的关联性。
在预训练完成后,BERT 模型可以通过微调在各种下游任务上进行应用,如文本分类、命名实体识别、问答系统等。通过微调,BERT 模型能够根据具体任务的数据进行特定领域的学习,从而提高模型在特定任务上的性能。
BERT 模型的优势在于它能够捕捉词语之间的上下文信息,从而更好地理解自然语言。它在多项自然语言处理任务中取得了领先的性能,并推动了该领域的发展。
2.4 说一下 transformer的输出和 bert 有什么区别?
-
Transformer输出:在标准的Transformer模型中,输出是由解码器的最终层产生的,通常是一个表示整个序列的向量。这个向量可以用于各种任务,如文本分类、生成等。
-
BERT输出:BERT(Bidirectional Encoder Representations from Transformers)是基于Transformer的预训练模型,主要用于学习丰富的上下文语境。BERT的输出不仅包含了整个序列的向量,还包括了每个输入词的上下文相关表示。BERT的预训练阶段包括两个任务:Masked Language Model(MLM)和Next Sentence Prediction(NSP)。
总的来说,BERT的输出更注重于每个词的上下文相关表示,而标准的Transformer输出更倾向于整个序列的表示。
2.5 注意力机制都有哪些?能不能简单介绍一下?
-
自注意力机制(Self-Attention):给定一个输入序列,自注意力机制通过对序列中每个元素计算权重,然后将这些权重加权求和得到输出。这个权重表示了模型对输入中不同位置的关注程度。具体来说,对于每个位置,通过计算与其他位置的相似度得到一个权重,最后将这些权重应用于输入序列上。这使得模型能够同时关注序列中的多个位置。
-
多头注意力机制(Multi-Head Attention):
-
思路:为了提高模型的表达能力,Transformer引入了多头注意力机制,允许模型学习多组不同的注意力权重。每个注意力头都产生一个输出,最后通过线性变换和拼接得到最终的多头注意力输出。
-
缺点:MQA(multi query attention)会导致quality degradation,我们不希望仅仅是推理快,而且还希望quality可以对标MHA;
-
Group Query Attention(GQA)
-
动机:改进多查询注意力(MQA)的性能,以加速解码器的推理速度。现有的MQA方法可能导致质量下降,并且为了更快的推理速度需要训练单独的模型,并不理想。
-
方法:通过预训练模型进行上训练(uptraining),将现有的多头注意力(MHA)模型转换为使用MQA的模型,并引入分组查询注意力(GQA),多查询注意力和多头注意力的一种泛化方法。GQA使用中间数量的键值头(大于一个,小于查询头的数量),实现了性能和速度的平衡。
-
优势:论文的主要优势是通过上训练(uptraining)现有模型,以较小的计算成本将多头注意力模型转换为多查询模型,从而实现快速的多查询和高质量的推理。同时,引入的分组查询注意力方法在接近多头注意力的质量的同时,速度几乎与多查询注意力相当。
2.6 树模型是如何计算每个特征的重要性的?
树模型计算特征重要性主要是根据不用的指标来计算的。
-
基尼重要性(Gini Importance):基尼重要性衡量了一个特征在决策树中的节点分裂中对纯度改善的贡献程度。通过计算每个特征在不同节点上的基尼指数减小量,然后加权求和,得到特征的重要性。
-
信息增益(Information Gain):信息增益用于衡量一个特征在决策树节点分裂中对不确定性的减小程度。通过计算每个特征对目标变量的信息增益,可以评估其重要性。
2.7 如何构建多模态模型?
多模态模型结合了来自不同数据源或模态的信息,通常包括视觉、语言、音频等。构建多模态模型的一般步骤包括:
-
数据预处理:将不同模态的数据统一格式,确保能够输入到模型中。
-
模型设计:使用适当的深度学习架构,如融合型(Fusion-based)或并行型(Parallel-based),将不同模态的信息整合在一起。
-
训练和微调:利用多模态数据进行模型训练,并通过微调来适应具体任务。
2.8 在多模态任务中,如果视觉模型的输出张量比语言模型的输出张量短很多,该进行什么操作?
可以尝试使用以下方法:
-
填充(Padding):在视觉模型的输出中添加适当数量的填充,使其长度与语言模型的输出一致。
-
剪裁(Trimming):在语言模型的输出中剪裁一部分,使其长度与视觉模型的输出一致。
-
使用注意力机制:在模型设计中,可以使用注意力机制来动态地对不同模态的信息进行权重分配,从而处理不同长度的输出。
3. Leetcode 题
具体题意记不清了,但是类似 【3. 无重复字符的最长子串】
- 题目内容
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
-
提示:
-
0 <= s.length <= 5 * 104
-
s 由英文字母、数字、符号和空格组成
-
题目解答
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
'''
方法:左右指针+哈希表
解析:
无重复字串哈希表:存储当前遍历到的元素,并由于判断是否重复
左右指针:
r 用于 添加 不重复的字符
l 用于 删除元素,直到 字串中无 重复字符位置
思路:
1.定义 左右指针 l和r,和 无重复字串哈希表
2.当 遇到不重复的字符,将其加入 dic,r 并往右移动;
3. 当 遇到重复的字符, l 边往右移动,边移除左边元素,直到遇到 s[l]!=s[r]
4. 计算 当前不含有重复字符的 最长子串 的长度
复杂度:
时间:O(n)
空间:O(n)
'''
l = 0
r = 0
s_len = len(s)
s_set = set()
res = 0
while r<s_len and r>=l:
if s[r] not in s_set:
s_set.add(s[r])
r = r+1
else:
while s[l]!=s[r]:
s_set.remove(s[l])
l = l+1
s_set.remove(s[l])
l = l+1
res = max(res,r-l)
return res
技术交流群
前沿技术资讯、算法交流、求职内推、算法竞赛、面试交流(校招、社招、实习)等、与 10000+来自港科大、北大、清华、中科院、CMU、腾讯、百度等名校名企开发者互动交流~
我们建了大模型面试与技术交流群, 想要进交流群、需要源码&资料、提升技术的同学,可以直接加微信号:mlc2060。加的时候备注一下:研究方向 +学校/公司+CSDN,即可。然后就可以拉你进群了。
方式①、微信搜索公众号:机器学习社区,后台回复:加群
方式②、添加微信号:mlc2060,备注:技术交流
资料1
用通俗易懂方式讲解系列
- 用通俗易懂的方式讲解:自然语言处理初学者指南(附1000页的PPT讲解)
- 用通俗易懂的方式讲解:1.6万字全面掌握 BERT
- 用通俗易懂的方式讲解:NLP 这样学习才是正确路线
- 用通俗易懂的方式讲解:28张图全解深度学习知识!
- 用通俗易懂的方式讲解:不用再找了,这就是 NLP 方向最全面试题库
- 用通俗易懂的方式讲解:实体关系抽取入门教程
- 用通俗易懂的方式讲解:灵魂 20 问帮你彻底搞定Transformer
- 用通俗易懂的方式讲解:图解 Transformer 架构
- 用通俗易懂的方式讲解:大模型算法面经指南(附答案)
- 用通俗易懂的方式讲解:十分钟部署清华 ChatGLM-6B,实测效果超预期
- 用通俗易懂的方式讲解:内容讲解+代码案例,轻松掌握大模型应用框架 LangChain
- 用通俗易懂的方式讲解:如何用大语言模型构建一个知识问答系统
- 用通俗易懂的方式讲解:最全的大模型 RAG 技术概览
- 用通俗易懂的方式讲解:利用 LangChain 和 Neo4j 向量索引,构建一个RAG应用程序
- 用通俗易懂的方式讲解:使用 Neo4j 和 LangChain 集成非结构化知识图增强 QA
- 用通俗易懂的方式讲解:面了 5 家知名企业的NLP算法岗(大模型方向),被考倒了。。。。。
- 用通俗易懂的方式讲解:NLP 算法实习岗,对我后续找工作太重要了!。
- 用通俗易懂的方式讲解:理想汽车大模型算法工程师面试,被问的瑟瑟发抖。。。。
- 用通俗易懂的方式讲解:基于 Langchain-Chatchat,我搭建了一个本地知识库问答系统