商汤智能座舱一面(社招)面试题7道|含解析

七月在线实验室

共 3613字,需浏览 8分钟

 · 2024-04-10

12本七月在线内部电子书在文末,自取~

公众号福利

👉回复【100题】领取《名企AI面试100题》PDF

👉回复【干货资料】领取NLP、CV、ML等AI方向干货资料

38aa639757830f8824b18236c2be1706.webp 03a732a79a60ac5fa6f9f66d079fa73c.webp 38aa639757830f8824b18236c2be1706.webp 问题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 = n
        
        
                  t = 0
        
        
                  while aim > 1:
        
        
                      for i in range(aim):
        
        
                          if i + nums[i] >= aim-1:
        
        
                              aim = i +1
        
        
                              t += 1
        
        
                               break
        
        
          return t                  
        
      

免费送


↓以下12本书电子版免费领,直接送↓ 8246b44c222ea0ed9246064cbc563189.webp

d3b32c99c340d8035e31768b342cf02f.webp

以上8本+2022年Q4面试题-69道》、2022年Q3面试题-83道》、2023年Q1面试题-65道》、2023年Q2面试题-103道共12本, 免费送


扫码回复【999】免费领12本电子书

      

(或 找七月在线其他老师领取

点击 阅读原文 ”抢宠粉 福利 ~

浏览 6
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报