节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂同学、参加社招和校招面试的同学,针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。
今天我整理一下算法岗方向面试题,分享给大家,希望对后续找工作的有所帮助。喜欢记得点赞、收藏、关注。更多技术交流&面经学习,可以文末加入我们交流群。
问题1、Transformer结构和LSTM的区别和优势,Transformer怎么体现时序信息
区别:
-
Transformer是基于注意力机制(self-attention)的模型,通过同时处理整个序列的信息,而LSTM(长短时记忆网络)则是基于递归的循环神经网络。
-
LSTM依赖于序列上的递归计算,而Transformer使用注意力机制进行全局性的关联。
优势:
-
Transformer并行计算更有效,因为每个位置的计算独立于其他位置,而LSTM需要按顺序计算。
-
Transformer更易于训练,不容易出现梯度消失或爆炸的问题。
-
Transformer能够学习长距离依赖关系,而LSTM的这个能力在序列很长时受到限制。
时序信息:
- Transformer通过引入位置编码(Positional Encoding)来处理时序信息。这是通过为输入序列的每个位置添加一个特定的向量表示其在序列中的位置,从而使模型能够感知到输入的时序结构。
问题2、Transformer Encoder和Decoder的输入输出和结构
Encoder:
-
输入:序列的嵌入表示或者经过了位置编码的输入。
-
输出:对输入序列的编码表示。
-
结构:多头自注意力层(Multi-Head Self-Attention)和前馈神经网络层(Feedforward Neural Network)的堆叠。
Decoder:
-
输入:编码器的输出以及目标序列的嵌入表示。
-
输出:对目标序列的解码表示。
-
结构:多头自注意力层、多头编码-解码注意力层(Multi-Head Encoder-Decoder Attention)和前馈神经网络层的堆叠。
问题3、介绍下BERT模型
-
BERT(Bidirectional Encoder Representations from Transformers)是一种预训练的自然语言处理模型,基于Transformer架构。
-
BERT的核心思想是通过在大规模语料库上进行无监督训练,从而学习丰富的语言表示。
-
BERT采用双向(bidirectional)的注意力机制,能够更好地理解上下文信息。
-
在预训练之后,BERT可以通过微调应用于各种下游任务,如文本分类、命名实体识别等。
问题4、LayerNorm & BatchNorm的作用以及区别
作用:
-
BatchNorm(批归一化):在训练时通过归一化每个小批次的输入,加速训练并有正则化效果。
-
LayerNorm(层归一化):在每个层的输入上进行归一化,通常应用于逐层的归一化处理。
区别:
-
BatchNorm:对每个批次的数据进行归一化,考虑了批次内的样本间关系。
-
LayerNorm:对每个样本的所有特征进行归一化,独立于批次。
-
BatchNorm适用于全连接和卷积层,而LayerNorm更适用于循环神经网络(RNN)和Transformer等序列模型。
问题5、BatchNorm更多用在视觉上,LayerNorm更多用在语言上,为什么
原因:
-
BatchNorm:在图像处理中,数据通常以批次的形式输入,BatchNorm可以充分利用批次内的数据分布进行归一化,有助于训练深层的视觉模型。
-
LayerNorm:在自然语言处理中,序列数据(如语言)的长度可能会变化,而LayerNorm独立于批次,更适用于处理变长序列,保持对每个样本的归一化一致性。
问题6、编程题:跳跃游戏(LeetCode 55)
解题思路:
尽可能到达最远位置(贪心)。
如果能到达某个位置,那一定能到达它前面的所有位置。
方法:
初始化最远位置为 0,然后遍历数组,如果当前位置能到达,并且当前位置+跳数>最远位置,就更新最远位置。最后比较最远位置和数组长度。
时间复杂度 O(n),空间复杂度 O(1)。
代码:
class Solution:def canJump(self, nums) :max_i = 0 #初始化当前能到达最远的位置for i, jump in enumerate(nums): #i为当前位置,jump是当前位置的跳数if max_i>=i and i+jump>max_i: #如果当前位置能到达,并且当前位置+跳数>最远位置 max_i = i+jump #更新最远能到达位置return max_i>=i
问题7、编程题:跳跃游戏2(leetcode45)
思路:
从前往后先找如果到达最后一步,那么前一步最早能落在那里,找到前一步后,再把该步的下标当作目标,直到目标下标为0。
代码:
class Solution:def jump(self, nums: List[int]) -> int:n = len(nums)aim = nt = 0while aim > 1:for i in range(aim):if i + nums[i] >= aim-1:aim = i +1t += 1break
return t
技术交流
前沿技术资讯、算法交流、求职内推、算法竞赛、面试交流(校招、社招、实习)等、与 10000+来自港科大、北大、清华、中科院、CMU、腾讯、百度等名校名企开发者互动交流~
我们建了算法岗面试与技术交流群, 想要进交流群、需要源码&资料、提升技术的同学,可以直接加微信号:mlc2060。加的时候备注一下:研究方向 +学校/公司+CSDN,即可。然后就可以拉你进群了。
方式①、微信搜索公众号:机器学习社区,后台回复:技术交流
方式②、添加微信号:mlc2060,备注:技术交流
用通俗易懂的方式讲解系列
- 用通俗易懂的方式讲解:不用再找了,这是大模型最全的面试题库
- 用通俗易懂的方式讲解:这是我见过的最适合大模型小白的 PyTorch 中文课程
- 用通俗易懂的方式讲解:一文讲透最热的大模型开发框架 LangChain
- 用通俗易懂的方式讲解:基于 LangChain + ChatGLM搭建知识本地库
- 用通俗易懂的方式讲解:基于大模型的知识问答系统全面总结
- 用通俗易懂的方式讲解:ChatGLM3 基础模型多轮对话微调
- 用通俗易懂的方式讲解:最火的大模型训练框架 DeepSpeed 详解来了
- 用通俗易懂的方式讲解:这应该是最全的大模型训练与微调关键技术梳理
- 用通俗易懂的方式讲解:Stable Diffusion 微调及推理优化实践指南
- 用通俗易懂的方式讲解:大模型训练过程概述
- 用通俗易懂的方式讲解:专补大模型短板的RAG
- 用通俗易懂的方式讲解:大模型LLM Agent在 Text2SQL 应用上的实践
- 用通俗易懂的方式讲解:大模型 LLM RAG在 Text2SQL 上的应用实践
- 用通俗易懂的方式讲解:大模型微调方法总结
- 用通俗易懂的方式讲解:涨知识了,这篇大模型 LangChain 框架与使用示例太棒了
- 用通俗易懂的方式讲解:掌握大模型这些优化技术,优雅地进行大模型的训练和推理!
- 用通俗易懂的方式讲解:九大最热门的开源大模型 Agent 框架来了